diff --git a/Src/nmNum/nmData/nmDataAnalyzeManager.cpp b/Src/nmNum/nmData/nmDataAnalyzeManager.cpp index 97ed17a..ea01bfc 100644 --- a/Src/nmNum/nmData/nmDataAnalyzeManager.cpp +++ b/Src/nmNum/nmData/nmDataAnalyzeManager.cpp @@ -1105,6 +1105,26 @@ void nmDataAnalyzeManager::createReservoir() // 相态类型 PvtFluidType eType = WFT_Null; + // initPvtParaFromSubFit先根据PVT数据确定求解器类型,这里按PEBI算例选择需要覆盖的Base字段 + NM_SOLVER_MODEL_TYPE eSolverModelType = getSolverModelType(); + bool bNeedCti = false; + bool bNeedCf = false; + + switch(eSolverModelType) { + case SMT_Oil_ConstPvt: + case SMT_Water_ConstPvt: + bNeedCti = true; + break; + case SMT_Oil_VariablePvt: + case SMT_Water_VariablePvt: + case SMT_Gas_VariablePvt: + case SMT_Oil_Water_TwoPhase: + bNeedCf = true; + break; + default: + break; + } + if(nullptr != pSubWndFitting && nullptr != pContextProvider) { // 读取界面选择的PVT相态类型 @@ -1131,8 +1151,14 @@ void nmDataAnalyzeManager::createReservoir() default: break; } - listParas << "Ct"; - pContextProvider->getPvtParaValues(pSubWndFitting, listParas, mapParaValues); + + //油、水单相常数pvt需要Ct + if(bNeedCti) { + listParas << "Ct"; + } + if(!listParas.isEmpty()) { + pContextProvider->getPvtParaValues(pSubWndFitting, listParas, mapParaValues); + } // 读取分层数据 pContextProvider->getBasicDataLayers(pSubWndFitting, vvecLayerData); @@ -1142,10 +1168,9 @@ void nmDataAnalyzeManager::createReservoir() double dBo = mapParaValues.value("Bo", 1.5); // 如果键不存在,返回默认值 1.5 double dMiuo = mapParaValues.value("Miuo", 1); // 如果键不存在,返回默认值 1 - // 获取气体积系数和气相粘度、参考温度 + // 获取气体积系数和气相粘度 double dBg = mapParaValues.value("Bg", 1); // 如果键不存在,返回默认值 1.5 double dMiug = mapParaValues.value("Miug", 1); // 如果键不存在,返回默认值 1 - double dTempGas = 100;// 气藏温度,TODO,应该从分析界面获取 // 获取水体积系数和水相粘度 double dBw = mapParaValues.value("Bw", 1); @@ -1203,7 +1228,6 @@ void nmDataAnalyzeManager::createReservoir() tempAttr.setValue(dMiug); m_reservoirData->setMiuo(tempAttr); - m_reservoirData->setTempGasRe(dTempGas); // 气藏温度 } else if(eType == WFT_Water) { m_reservoirData->setPhaseType(PHASE_Water); tempAttr = m_reservoirData->getBo();// 水体积系数 @@ -1239,7 +1263,9 @@ void nmDataAnalyzeManager::createReservoir() m_reservoirData->setThickness(tempAttr); tempAttr = m_reservoirData->getCt(); // 综合压缩系数 - tempAttr.setValue(dCt); + if(bNeedCti) { + tempAttr.setValue(dCt); + } m_reservoirData->setCt(tempAttr); tempAttr = m_reservoirData->getPorosity();// 孔隙度 @@ -1247,7 +1273,10 @@ void nmDataAnalyzeManager::createReservoir() m_reservoirData->setPorosity(tempAttr); tempAttr = m_reservoirData->getCf();// 岩石压缩系数 - tempAttr.setValue(dCf); + // 变化PVT、气单相和油水两相需要Cf,值来自基础分层数据 + if(bNeedCf) { + tempAttr.setValue(dCf); + } m_reservoirData->setCf(tempAttr); // 清空现有分层数据 diff --git a/Src/nmNum/nmSubWnd/nmSubWndUtils.cpp b/Src/nmNum/nmSubWnd/nmSubWndUtils.cpp index a801532..d8a487b 100644 --- a/Src/nmNum/nmSubWnd/nmSubWndUtils.cpp +++ b/Src/nmNum/nmSubWnd/nmSubWndUtils.cpp @@ -436,10 +436,11 @@ bool nmSubWndUtils::fillNmDockWxs(iSubWnd* pSubWnd) } // 读取解析解的参数 - // 1.1 初始化油藏参数 - pDataManager->createReservoir(); - // 1.2 初始化PVT参数 + // createReservoir需要使用PVT初始化后确定的求解器类型 + // 1.1 初始化PVT参数 pDataManager->initPvtParaFromSubFit(); + // 1.2 初始化油藏参数 + pDataManager->createReservoir(); // 1.3 初始化当前井数据 pDataManager->initCurWellData(); // 1.4 初始化边界数据