|
|
|
@ -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);
|
|
|
|
|
|
|
|
|
|
|
|
// 清空现有分层数据
|
|
|
|
// 清空现有分层数据
|
|
|
|
|