You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
nmWTAI-Platform/Include/mAlg/mAlgPseudo/iPengRobinsonEos.h

84 lines
2.8 KiB
C++

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

#pragma once
#include "Defines.h"
#include "mAlgDefines.h"
#include "mAlgMatrix.h"
#include "mAlgPseudo_global.h"
// 基于状态方程创建PR方程
// 相平衡状态方程类(用于基于组分的三区拟压力计算)
// 算法提供xuzexuan
// 源码参照:相平衡模块(new)(2).py
// 时间2022-08-23
class M_ALGPSEUDO_EXPORT iPengRobinsonEos
{
public:
iPengRobinsonEos(VecDouble& vecArgCriticalP, \
VecDouble& vecArgCriticalT, \
VecDouble& vecArgAcentricFactors,\
VecDouble& vecArgOmegaAs, \
VecDouble& vecArgOmegaBs, \
WtaiMatrix& matrixBI);
/// @brief 返回错误信息
QString getLastError() { return m_sError; }
// 把数组转为矩阵bLineMt为true转为一行否则转为一列
static void vecToMatrix(VecDouble& vec, WtaiMatrix& mt, bool bLineMt = true);
// 把单行或单列矩阵变成Vec
static void matrixToVec(WtaiMatrix& mt, VecDouble& vec);
// 实现类似np.linalg.norm的功能
static double calLinAlgNorm(VecDouble& vec, bool bAutoMinus1 = false);
static double max(double d1, double d2);
static double min(double d1, double d2);
static double cbrt(double x); //立方根
public:
// 内部实现函数
void set_molar_fractions(VecDouble& vec);
VecDouble alpha_function(double dTemperature);
void calculate_eos_coefficients(double dPressure, \
double dTemperature, \
VecDouble& vecAs, \
VecDouble& vecBs);
void update_eos_coefficients(double dPressure, \
double dTemperature);
double calculate_eos_roots(QString sFluidType);
double find_correct_root_of_cubic_eos(double p0, double p1, \
double p2, double p3, \
QString sFluidType);
VecDouble calculate_fugacities(double dPressure, double dTemperature, \
double z_factor);
#ifdef QT_DEBUG
static void testMatrix();
static void outputMatrix(WtaiMatrix& m);
#endif
protected:
// Args拆解根据组分是否为0
// 组分含量,Pc,Tc,W,M,系数a系数b
VecDouble m_vecArgMolarFractions;// [单位小数]
VecDouble m_vecArgCriticalP;// [单位Pa]
VecDouble m_vecArgCriticalT;// [单位K]
VecDouble m_vecArgAcentricFactors;// [-]
VecDouble m_vecArgOmegaAs;// [-]
VecDouble m_vecArgOmegaBs;
WtaiMatrix m_matrixBI;
// 中间过程数据
double m_dMixtureA;
double m_dMixtureB;
VecDouble m_vecAs;
VecDouble m_vecBs;
VecDouble m_vecNc;//NumeratorCoefs
// 出错信息
QString m_sError;
};