#pragma once #include "Defines.h" #include "mAlgDefines.h" #include "mAlgDefines_global.h" #include "mAlgMatrix.h" class iModelOption; class iDynSkinInfo; // 参数管理类 class M_ALG_DEFINES_EXPORT iParaManager { public: iParaManager(); ~iParaManager(); public: // 增加临时函数,限定某些模型,来测试无井储 // 含义:是否必须提供井储参数 bool isCdNeeded(); // 井型/油藏类型/边界类型/Assist void setModelOption(iModelOption* pModelOption); iModelOption* getModelOption(); // 参数传递 void setParaMap(QMap& map); void setParamUnitMap(QMap& map); bool getParamValueUnit(QString sPara, QString& sUnit); void setParaValue(QString sPara, double d); bool getParaValue(QString sPara , double& d); bool getParaValues(QStringList listParas, QVector& vecValue); // 把原来的"x1"之类,根据索引传递,查阅真实的,比如 ee,se,we,ne // xIndex 从1开始,即遇到"x1"则传入1 QString getBdyRealNameOf(int xIndex); // 是否包括某个参数的数值 bool isParaContained(QString sPara); // 参数特殊处理 virtual void adjustParaName(QString& sPara); virtual void adjustParaName_K(QString& sPara); virtual void adjustParaValue(QString sPara, double& d); //取完参数之后,允许再次调整 // 是否某个参数的数据,即从map中清除, // n: 0 即单参数map, 1:一维数组map 2:二维数组map bool freeDataOfPara(QString sPara, int n); bool freeDataOfPara(QStringList listParas, int n); // 一维数组 bool getParaArrValue(QString sPara, VecDouble& vec); void setParaArrValue(QString sPara, VecDouble vec); // 二维数组 bool getParaArrArrValue(QString sPara, VVecDouble& vvec); void setParaArrArrValue(QString sPara, VVecDouble vvec); // 矩阵 bool getParaMatrixValue(QString sPara, WtaiMatrix& mat); void setParaMatrixValue(QString sPara, WtaiMatrix mat); bool getParaVecMatrixValue(QString sPara, QVector& vecMat); void setParaVecMatrixValue(QString sPara, QVector vecMat); // EndQ void setEndQ(double dQ); double getEndQ(); // 所有流量数值 void setAllQs(VecDouble& vec); //清空数据(每运行一次都清空数据)主要是清空数组数据 void clearArrMap(); //得到常数参数3.6-3.55292376017765 double getSpecialConstant(); public: // 计算CD入口函数 virtual bool calCD(); virtual bool calCDCommon(double& A); bool calCDDualPro(double& A); bool calCDDualPer(double& A); bool calCDMedComp(double& A); bool calCDTLayCrosComp(double& A); bool calCDTHmgenWt(double& A); // 参数计算入口函数 virtual bool calParam(); virtual bool calTDIM(); virtual bool calTDIM_Wxd(); virtual bool calPDIM(); virtual bool calPDIM_Wxd(); virtual bool calRcIM(); virtual bool calRc(); // 普通井的量纲转换需要变化 virtual bool calTDIMCommon(double& A); bool calTDIMDualPro(double& A); bool calTDIMDualPer(double& A); bool calTDIMMedComp(double& A); bool calTDIMTLayCrosComp(double& A); bool calTDIMTHmgenWt(double& A); virtual bool calPDIMCommon(double& A); bool calPDIMDualPer(double& A); bool calPDIMMedComp(double& A); bool calPDIMTLayCrosComp(double& A); bool calPHYDIM(double& A); // 数值解 bool calyD(); bool findParam(QString sPara, double &d); public: // 是否启用混合黏度 void setEnableMux(bool b); bool getEnableMux(); // 允许在计算之后,对结果进行个别计算或调整 virtual void adjustParaResults(); // 增加对于变表皮的处理 void setDynSkinInfo(iDynSkinInfo* p); // 当前是否正在获取动态的表皮模式(开关) // 只有在计算历史压力曲线时,才设置为true void setHistRunning(bool b); // 当前操作的流动段索引,为了获取前一流量 void setHistSegIndex(int n); #ifdef QT_DEBUG void assertPara(QString sPara, bool bSetValue); #endif QString getLastError(); void resetError(); public: // 单个参数map QMap m_mapParas; QMap m_mapParasUnit; // 参数对应数组 QMap m_mapArrParas; // 二维数组 QMap m_mapArrArrParas; QMapm_mapMatrixParas; QMap >m_mapVecMatrixParas; //黏度是否启用混合黏度 bool m_bEnableMux; double m_dEndQ; protected: iModelOption* m_pModelOption; // 变表皮 iDynSkinInfo* m_pDynSkinInfo; // 错误信息 QString m_sError; };