根据PVT参数获取情况调整Base参数的获取

feature/UI-20260528
lvjunjie 4 days ago
parent 6f3246690e
commit c6d08b13cf

@ -1105,6 +1105,26 @@ void nmDataAnalyzeManager::createReservoir()
// 相态类型 // 相态类型
PvtFluidType eType = WFT_Null; 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) { if(nullptr != pSubWndFitting && nullptr != pContextProvider) {
// 读取界面选择的PVT相态类型 // 读取界面选择的PVT相态类型
@ -1131,8 +1151,14 @@ void nmDataAnalyzeManager::createReservoir()
default: default:
break; 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); pContextProvider->getBasicDataLayers(pSubWndFitting, vvecLayerData);
@ -1142,10 +1168,9 @@ void nmDataAnalyzeManager::createReservoir()
double dBo = mapParaValues.value("Bo", 1.5); // 如果键不存在,返回默认值 1.5 double dBo = mapParaValues.value("Bo", 1.5); // 如果键不存在,返回默认值 1.5
double dMiuo = mapParaValues.value("Miuo", 1); // 如果键不存在,返回默认值 1 double dMiuo = mapParaValues.value("Miuo", 1); // 如果键不存在,返回默认值 1
// 获取气体积系数和气相粘度、参考温度 // 获取气体积系数和气相粘度
double dBg = mapParaValues.value("Bg", 1); // 如果键不存在,返回默认值 1.5 double dBg = mapParaValues.value("Bg", 1); // 如果键不存在,返回默认值 1.5
double dMiug = mapParaValues.value("Miug", 1); // 如果键不存在,返回默认值 1 double dMiug = mapParaValues.value("Miug", 1); // 如果键不存在,返回默认值 1
double dTempGas = 100;// 气藏温度TODO应该从分析界面获取
// 获取水体积系数和水相粘度 // 获取水体积系数和水相粘度
double dBw = mapParaValues.value("Bw", 1); double dBw = mapParaValues.value("Bw", 1);
@ -1203,7 +1228,6 @@ void nmDataAnalyzeManager::createReservoir()
tempAttr.setValue(dMiug); tempAttr.setValue(dMiug);
m_reservoirData->setMiuo(tempAttr); m_reservoirData->setMiuo(tempAttr);
m_reservoirData->setTempGasRe(dTempGas); // 气藏温度
} else if(eType == WFT_Water) { } else if(eType == WFT_Water) {
m_reservoirData->setPhaseType(PHASE_Water); m_reservoirData->setPhaseType(PHASE_Water);
tempAttr = m_reservoirData->getBo();// 水体积系数 tempAttr = m_reservoirData->getBo();// 水体积系数
@ -1239,7 +1263,9 @@ void nmDataAnalyzeManager::createReservoir()
m_reservoirData->setThickness(tempAttr); m_reservoirData->setThickness(tempAttr);
tempAttr = m_reservoirData->getCt(); // 综合压缩系数 tempAttr = m_reservoirData->getCt(); // 综合压缩系数
tempAttr.setValue(dCt); if(bNeedCti) {
tempAttr.setValue(dCt);
}
m_reservoirData->setCt(tempAttr); m_reservoirData->setCt(tempAttr);
tempAttr = m_reservoirData->getPorosity();// 孔隙度 tempAttr = m_reservoirData->getPorosity();// 孔隙度
@ -1247,7 +1273,10 @@ void nmDataAnalyzeManager::createReservoir()
m_reservoirData->setPorosity(tempAttr); m_reservoirData->setPorosity(tempAttr);
tempAttr = m_reservoirData->getCf();// 岩石压缩系数 tempAttr = m_reservoirData->getCf();// 岩石压缩系数
tempAttr.setValue(dCf); // 变化PVT、气单相和油水两相需要Cf值来自基础分层数据
if(bNeedCf) {
tempAttr.setValue(dCf);
}
m_reservoirData->setCf(tempAttr); m_reservoirData->setCf(tempAttr);
// 清空现有分层数据 // 清空现有分层数据

@ -436,10 +436,11 @@ bool nmSubWndUtils::fillNmDockWxs(iSubWnd* pSubWnd)
} }
// 读取解析解的参数 // 读取解析解的参数
// 1.1 初始化油藏参数 // createReservoir需要使用PVT初始化后确定的求解器类型
pDataManager->createReservoir(); // 1.1 初始化PVT参数
// 1.2 初始化PVT参数
pDataManager->initPvtParaFromSubFit(); pDataManager->initPvtParaFromSubFit();
// 1.2 初始化油藏参数
pDataManager->createReservoir();
// 1.3 初始化当前井数据 // 1.3 初始化当前井数据
pDataManager->initCurWellData(); pDataManager->initCurWellData();
// 1.4 初始化边界数据 // 1.4 初始化边界数据

Loading…
Cancel
Save