|
|
|
@ -155,7 +155,7 @@ void nmWxAutomaticFitting::renumberVisibleParameterRows(QTableWidget* table)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 根据当前模型类型控制参数显示:0-5行为通用参数,6-10行为随PVT模型变化的参数。
|
|
|
|
// 根据当前模型类型控制Ct/Cf/Swi参数显示。
|
|
|
|
void nmWxAutomaticFitting::updateParameterVisibility(QTableWidget* table, NM_SOLVER_MODEL_TYPE eType)
|
|
|
|
void nmWxAutomaticFitting::updateParameterVisibility(QTableWidget* table, NM_SOLVER_MODEL_TYPE eType)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
if(!table) {
|
|
|
|
if(!table) {
|
|
|
|
@ -192,9 +192,9 @@ void nmWxAutomaticFitting::updateParameterVisibility(QTableWidget* table, NM_SOL
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
setParameterRowVisible(table, 6, showCt); // Ct
|
|
|
|
setParameterRowVisible(table, 5, showCt); // Ct
|
|
|
|
setParameterRowVisible(table, 7, showCf); // Cf
|
|
|
|
setParameterRowVisible(table, 6, showCf); // Cf
|
|
|
|
setParameterRowVisible(table, 8, showSwi); // Swi
|
|
|
|
setParameterRowVisible(table, 7, showSwi); // Swi
|
|
|
|
|
|
|
|
|
|
|
|
renumberVisibleParameterRows(table);
|
|
|
|
renumberVisibleParameterRows(table);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
@ -251,8 +251,6 @@ nmWxAutomaticFitting::nmWxAutomaticFitting(QWidget *parent)
|
|
|
|
automaticFittingData.getWellboreStorageMax().setValue(2.0);
|
|
|
|
automaticFittingData.getWellboreStorageMax().setValue(2.0);
|
|
|
|
automaticFittingData.getPorosityMin().setValue(1.0e-2);
|
|
|
|
automaticFittingData.getPorosityMin().setValue(1.0e-2);
|
|
|
|
automaticFittingData.getPorosityMax().setValue(5.0e-1);
|
|
|
|
automaticFittingData.getPorosityMax().setValue(5.0e-1);
|
|
|
|
automaticFittingData.getInitialPressureMin().setValue(0.1);
|
|
|
|
|
|
|
|
automaticFittingData.getInitialPressureMax().setValue(50.0);
|
|
|
|
|
|
|
|
automaticFittingData.getThicknessMin().setValue(2.0);
|
|
|
|
automaticFittingData.getThicknessMin().setValue(2.0);
|
|
|
|
automaticFittingData.getThicknessMax().setValue(50.0);
|
|
|
|
automaticFittingData.getThicknessMax().setValue(50.0);
|
|
|
|
automaticFittingData.getCtMin().setValue(1.0e-3);
|
|
|
|
automaticFittingData.getCtMin().setValue(1.0e-3);
|
|
|
|
@ -261,6 +259,16 @@ nmWxAutomaticFitting::nmWxAutomaticFitting(QWidget *parent)
|
|
|
|
automaticFittingData.getCfMax().setValue(1.0e-2);
|
|
|
|
automaticFittingData.getCfMax().setValue(1.0e-2);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if(solverModelType == SMT_Oil_ConstPvt ||
|
|
|
|
|
|
|
|
solverModelType == SMT_Water_ConstPvt) {
|
|
|
|
|
|
|
|
// T1/T3 的综合压缩系数默认不参与拟合。
|
|
|
|
|
|
|
|
automaticFittingData.setCtSelected(false);
|
|
|
|
|
|
|
|
} else if(solverModelType == SMT_Oil_VariablePvt ||
|
|
|
|
|
|
|
|
solverModelType == SMT_Water_VariablePvt) {
|
|
|
|
|
|
|
|
// T2/T4 的岩石压缩系数默认参与拟合。
|
|
|
|
|
|
|
|
automaticFittingData.setCfSelected(true);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 气单相变化 PVT 使用 T5 数据集对应的初始值和拟合范围。
|
|
|
|
// 气单相变化 PVT 使用 T5 数据集对应的初始值和拟合范围。
|
|
|
|
if(solverModelType == SMT_Gas_VariablePvt) {
|
|
|
|
if(solverModelType == SMT_Gas_VariablePvt) {
|
|
|
|
reservoirData.getPermeability().setValue(5.5e-6);
|
|
|
|
reservoirData.getPermeability().setValue(5.5e-6);
|
|
|
|
@ -284,7 +292,6 @@ nmWxAutomaticFitting::nmWxAutomaticFitting(QWidget *parent)
|
|
|
|
solverModelType == SMT_Water_ConstPvt) {
|
|
|
|
solverModelType == SMT_Water_ConstPvt) {
|
|
|
|
// T1/T3 使用固定初值,不继承当前储层参数。
|
|
|
|
// T1/T3 使用固定初值,不继承当前储层参数。
|
|
|
|
reservoirData.getPorosity().setValue(2.45e-2);
|
|
|
|
reservoirData.getPorosity().setValue(2.45e-2);
|
|
|
|
reservoirData.getInitialPressure().setValue(34.47);
|
|
|
|
|
|
|
|
reservoirData.getThickness().setValue(9.144);
|
|
|
|
reservoirData.getThickness().setValue(9.144);
|
|
|
|
reservoirData.getCt().setValue(1.0e-2);
|
|
|
|
reservoirData.getCt().setValue(1.0e-2);
|
|
|
|
} else if(solverModelType == SMT_Oil_VariablePvt) {
|
|
|
|
} else if(solverModelType == SMT_Oil_VariablePvt) {
|
|
|
|
@ -292,15 +299,11 @@ nmWxAutomaticFitting::nmWxAutomaticFitting(QWidget *parent)
|
|
|
|
reservoirData.getPorosity().setValue(6.0e-2);
|
|
|
|
reservoirData.getPorosity().setValue(6.0e-2);
|
|
|
|
reservoirData.getThickness().setValue(10.5);
|
|
|
|
reservoirData.getThickness().setValue(10.5);
|
|
|
|
reservoirData.getCf().setValue(1.0e-3);
|
|
|
|
reservoirData.getCf().setValue(1.0e-3);
|
|
|
|
reservoirData.getInitialPressure().setValue(34.47);
|
|
|
|
|
|
|
|
automaticFittingData.setInitialPressureSelected(false);
|
|
|
|
|
|
|
|
} else if(solverModelType == SMT_Water_VariablePvt) {
|
|
|
|
} else if(solverModelType == SMT_Water_VariablePvt) {
|
|
|
|
// 水单相变化 PVT 使用固定初值。
|
|
|
|
// 水单相变化 PVT 使用固定初值。
|
|
|
|
reservoirData.getPorosity().setValue(6.0e-2);
|
|
|
|
reservoirData.getPorosity().setValue(6.0e-2);
|
|
|
|
reservoirData.getThickness().setValue(10.5);
|
|
|
|
reservoirData.getThickness().setValue(10.5);
|
|
|
|
reservoirData.getCf().setValue(1.5e-3);
|
|
|
|
reservoirData.getCf().setValue(1.5e-3);
|
|
|
|
reservoirData.getInitialPressure().setValue(34.47);
|
|
|
|
|
|
|
|
automaticFittingData.setInitialPressureSelected(false);
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
@ -368,7 +371,7 @@ void nmWxAutomaticFitting::setupUI()
|
|
|
|
void nmWxAutomaticFitting::setupParameterTable()
|
|
|
|
void nmWxAutomaticFitting::setupParameterTable()
|
|
|
|
{
|
|
|
|
{
|
|
|
|
// 创建表格
|
|
|
|
// 创建表格
|
|
|
|
m_parameterTable = new QTableWidget(9, 6, this);
|
|
|
|
m_parameterTable = new QTableWidget(8, 6, this);
|
|
|
|
|
|
|
|
|
|
|
|
// 设置表头
|
|
|
|
// 设置表头
|
|
|
|
QStringList headers;
|
|
|
|
QStringList headers;
|
|
|
|
@ -437,55 +440,45 @@ void nmWxAutomaticFitting::setupParameterTable()
|
|
|
|
m_parameterTable->setItem(3, 4, new QTableWidgetItem(QString::number(automaticFittingData.getPorosityMax().getValue().toDouble())));
|
|
|
|
m_parameterTable->setItem(3, 4, new QTableWidgetItem(QString::number(automaticFittingData.getPorosityMax().getValue().toDouble())));
|
|
|
|
m_parameterTable->setItem(3, 5, new QTableWidgetItem(""));
|
|
|
|
m_parameterTable->setItem(3, 5, new QTableWidgetItem(""));
|
|
|
|
|
|
|
|
|
|
|
|
// 初始压力 (Initial Pressure)
|
|
|
|
|
|
|
|
m_parameterTable->setItem(4, 0, new QTableWidgetItem("5"));
|
|
|
|
|
|
|
|
m_piCheckBox = new QCheckBox(tr("Initial Pressure"));
|
|
|
|
|
|
|
|
m_piCheckBox->setChecked(automaticFittingData.getInitialPressureSelected());
|
|
|
|
|
|
|
|
m_parameterTable->setCellWidget(4, 1, m_piCheckBox);
|
|
|
|
|
|
|
|
m_parameterTable->setItem(4, 2, new QTableWidgetItem(QString::number(automaticFittingData.getInitialPressureMin().getValue().toDouble())));
|
|
|
|
|
|
|
|
m_parameterTable->setItem(4, 3, new QTableWidgetItem(QString::number(reservoirData.getInitialPressure().getValue().toDouble())));
|
|
|
|
|
|
|
|
m_parameterTable->setItem(4, 4, new QTableWidgetItem(QString::number(automaticFittingData.getInitialPressureMax().getValue().toDouble())));
|
|
|
|
|
|
|
|
m_parameterTable->setItem(4, 5, new QTableWidgetItem(tr("MPa")));
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 储层厚度 (Thickness)
|
|
|
|
// 储层厚度 (Thickness)
|
|
|
|
m_parameterTable->setItem(5, 0, new QTableWidgetItem("6"));
|
|
|
|
m_parameterTable->setItem(4, 0, new QTableWidgetItem("5"));
|
|
|
|
m_hCheckBox = new QCheckBox(tr("Thickness"));
|
|
|
|
m_hCheckBox = new QCheckBox(tr("Thickness"));
|
|
|
|
m_hCheckBox->setChecked(automaticFittingData.getThicknessSelected());
|
|
|
|
m_hCheckBox->setChecked(automaticFittingData.getThicknessSelected());
|
|
|
|
m_parameterTable->setCellWidget(5, 1, m_hCheckBox);
|
|
|
|
m_parameterTable->setCellWidget(4, 1, m_hCheckBox);
|
|
|
|
m_parameterTable->setItem(5, 2, new QTableWidgetItem(QString::number(automaticFittingData.getThicknessMin().getValue().toDouble())));
|
|
|
|
m_parameterTable->setItem(4, 2, new QTableWidgetItem(QString::number(automaticFittingData.getThicknessMin().getValue().toDouble())));
|
|
|
|
m_parameterTable->setItem(5, 3, new QTableWidgetItem(QString::number(reservoirData.getThickness().getValue().toDouble())));
|
|
|
|
m_parameterTable->setItem(4, 3, new QTableWidgetItem(QString::number(reservoirData.getThickness().getValue().toDouble())));
|
|
|
|
m_parameterTable->setItem(5, 4, new QTableWidgetItem(QString::number(automaticFittingData.getThicknessMax().getValue().toDouble())));
|
|
|
|
m_parameterTable->setItem(4, 4, new QTableWidgetItem(QString::number(automaticFittingData.getThicknessMax().getValue().toDouble())));
|
|
|
|
m_parameterTable->setItem(5, 5, new QTableWidgetItem(tr("m")));
|
|
|
|
m_parameterTable->setItem(4, 5, new QTableWidgetItem(tr("m")));
|
|
|
|
|
|
|
|
|
|
|
|
// 综合压缩系数 (Ct)
|
|
|
|
// 综合压缩系数 (Ct)
|
|
|
|
m_parameterTable->setItem(6, 0, new QTableWidgetItem("7"));
|
|
|
|
m_parameterTable->setItem(5, 0, new QTableWidgetItem("6"));
|
|
|
|
m_ctCheckBox = new QCheckBox(tr("Ct"));
|
|
|
|
m_ctCheckBox = new QCheckBox(tr("Ct"));
|
|
|
|
m_ctCheckBox->setChecked(automaticFittingData.getCtSelected());
|
|
|
|
m_ctCheckBox->setChecked(automaticFittingData.getCtSelected());
|
|
|
|
m_parameterTable->setCellWidget(6, 1, m_ctCheckBox);
|
|
|
|
m_parameterTable->setCellWidget(5, 1, m_ctCheckBox);
|
|
|
|
m_parameterTable->setItem(6, 2, new QTableWidgetItem(QString::number(automaticFittingData.getCtMin().getValue().toDouble())));
|
|
|
|
m_parameterTable->setItem(5, 2, new QTableWidgetItem(QString::number(automaticFittingData.getCtMin().getValue().toDouble())));
|
|
|
|
m_parameterTable->setItem(6, 3, new QTableWidgetItem(QString::number(reservoirData.getCt().getValue().toDouble())));
|
|
|
|
m_parameterTable->setItem(5, 3, new QTableWidgetItem(QString::number(reservoirData.getCt().getValue().toDouble())));
|
|
|
|
m_parameterTable->setItem(6, 4, new QTableWidgetItem(QString::number(automaticFittingData.getCtMax().getValue().toDouble())));
|
|
|
|
m_parameterTable->setItem(5, 4, new QTableWidgetItem(QString::number(automaticFittingData.getCtMax().getValue().toDouble())));
|
|
|
|
m_parameterTable->setItem(6, 5, new QTableWidgetItem(""));
|
|
|
|
m_parameterTable->setItem(5, 5, new QTableWidgetItem(""));
|
|
|
|
|
|
|
|
|
|
|
|
// 岩石压缩系数 (Cf)
|
|
|
|
// 岩石压缩系数 (Cf)
|
|
|
|
m_parameterTable->setItem(7, 0, new QTableWidgetItem("8"));
|
|
|
|
m_parameterTable->setItem(6, 0, new QTableWidgetItem("7"));
|
|
|
|
m_cfCheckBox = new QCheckBox(tr("Cf"));
|
|
|
|
m_cfCheckBox = new QCheckBox(tr("Cf"));
|
|
|
|
m_cfCheckBox->setChecked(automaticFittingData.getCfSelected());
|
|
|
|
m_cfCheckBox->setChecked(automaticFittingData.getCfSelected());
|
|
|
|
m_parameterTable->setCellWidget(7, 1, m_cfCheckBox);
|
|
|
|
m_parameterTable->setCellWidget(6, 1, m_cfCheckBox);
|
|
|
|
m_parameterTable->setItem(7, 2, new QTableWidgetItem(QString::number(automaticFittingData.getCfMin().getValue().toDouble())));
|
|
|
|
m_parameterTable->setItem(6, 2, new QTableWidgetItem(QString::number(automaticFittingData.getCfMin().getValue().toDouble())));
|
|
|
|
m_parameterTable->setItem(7, 3, new QTableWidgetItem(QString::number(reservoirData.getCf().getValue().toDouble())));
|
|
|
|
m_parameterTable->setItem(6, 3, new QTableWidgetItem(QString::number(reservoirData.getCf().getValue().toDouble())));
|
|
|
|
m_parameterTable->setItem(7, 4, new QTableWidgetItem(QString::number(automaticFittingData.getCfMax().getValue().toDouble())));
|
|
|
|
m_parameterTable->setItem(6, 4, new QTableWidgetItem(QString::number(automaticFittingData.getCfMax().getValue().toDouble())));
|
|
|
|
m_parameterTable->setItem(7, 5, new QTableWidgetItem(""));
|
|
|
|
m_parameterTable->setItem(6, 5, new QTableWidgetItem(""));
|
|
|
|
|
|
|
|
|
|
|
|
// 初始含水饱和度 (Swi)
|
|
|
|
// 初始含水饱和度 (Swi)
|
|
|
|
m_parameterTable->setItem(8, 0, new QTableWidgetItem("9"));
|
|
|
|
m_parameterTable->setItem(7, 0, new QTableWidgetItem("8"));
|
|
|
|
m_swiCheckBox = new QCheckBox(tr("Swi"));
|
|
|
|
m_swiCheckBox = new QCheckBox(tr("Swi"));
|
|
|
|
m_swiCheckBox->setChecked(automaticFittingData.getSwiSelected());
|
|
|
|
m_swiCheckBox->setChecked(automaticFittingData.getSwiSelected());
|
|
|
|
m_parameterTable->setCellWidget(8, 1, m_swiCheckBox);
|
|
|
|
m_parameterTable->setCellWidget(7, 1, m_swiCheckBox);
|
|
|
|
m_parameterTable->setItem(8, 2, new QTableWidgetItem(QString::number(automaticFittingData.getSwiMin().getValue().toDouble())));
|
|
|
|
m_parameterTable->setItem(7, 2, new QTableWidgetItem(QString::number(automaticFittingData.getSwiMin().getValue().toDouble())));
|
|
|
|
m_parameterTable->setItem(8, 3, new QTableWidgetItem(QString::number(reservoirData.getSwi().getValue().toDouble())));
|
|
|
|
m_parameterTable->setItem(7, 3, new QTableWidgetItem(QString::number(reservoirData.getSwi().getValue().toDouble())));
|
|
|
|
m_parameterTable->setItem(8, 4, new QTableWidgetItem(QString::number(automaticFittingData.getSwiMax().getValue().toDouble())));
|
|
|
|
m_parameterTable->setItem(7, 4, new QTableWidgetItem(QString::number(automaticFittingData.getSwiMax().getValue().toDouble())));
|
|
|
|
m_parameterTable->setItem(8, 5, new QTableWidgetItem(""));
|
|
|
|
m_parameterTable->setItem(7, 5, new QTableWidgetItem(""));
|
|
|
|
|
|
|
|
|
|
|
|
// 设置表格行为
|
|
|
|
// 设置表格行为
|
|
|
|
for(int i = 0; i < m_parameterTable->rowCount(); ++i) {
|
|
|
|
for(int i = 0; i < m_parameterTable->rowCount(); ++i) {
|
|
|
|
@ -682,11 +675,10 @@ void nmWxAutomaticFitting::onReverseSelection()
|
|
|
|
if(!m_parameterTable->isRowHidden(1)) m_sCheckBox->setChecked(!m_sCheckBox->isChecked());
|
|
|
|
if(!m_parameterTable->isRowHidden(1)) m_sCheckBox->setChecked(!m_sCheckBox->isChecked());
|
|
|
|
if(!m_parameterTable->isRowHidden(2)) m_cCheckBox->setChecked(!m_cCheckBox->isChecked());
|
|
|
|
if(!m_parameterTable->isRowHidden(2)) m_cCheckBox->setChecked(!m_cCheckBox->isChecked());
|
|
|
|
if(!m_parameterTable->isRowHidden(3)) m_phiCheckBox->setChecked(!m_phiCheckBox->isChecked());
|
|
|
|
if(!m_parameterTable->isRowHidden(3)) m_phiCheckBox->setChecked(!m_phiCheckBox->isChecked());
|
|
|
|
if(!m_parameterTable->isRowHidden(4)) m_piCheckBox->setChecked(!m_piCheckBox->isChecked());
|
|
|
|
if(!m_parameterTable->isRowHidden(4)) m_hCheckBox->setChecked(!m_hCheckBox->isChecked());
|
|
|
|
if(!m_parameterTable->isRowHidden(5)) m_hCheckBox->setChecked(!m_hCheckBox->isChecked());
|
|
|
|
if(!m_parameterTable->isRowHidden(5)) m_ctCheckBox->setChecked(!m_ctCheckBox->isChecked());
|
|
|
|
if(!m_parameterTable->isRowHidden(6)) m_ctCheckBox->setChecked(!m_ctCheckBox->isChecked());
|
|
|
|
if(!m_parameterTable->isRowHidden(6)) m_cfCheckBox->setChecked(!m_cfCheckBox->isChecked());
|
|
|
|
if(!m_parameterTable->isRowHidden(7)) m_cfCheckBox->setChecked(!m_cfCheckBox->isChecked());
|
|
|
|
if(!m_parameterTable->isRowHidden(7)) m_swiCheckBox->setChecked(!m_swiCheckBox->isChecked());
|
|
|
|
if(!m_parameterTable->isRowHidden(8)) m_swiCheckBox->setChecked(!m_swiCheckBox->isChecked());
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void nmWxAutomaticFitting::onAlgorithmChanged(int index)
|
|
|
|
void nmWxAutomaticFitting::onAlgorithmChanged(int index)
|
|
|
|
@ -801,7 +793,7 @@ void nmWxAutomaticFitting::onAccept()
|
|
|
|
// 检查是否有参数被选中
|
|
|
|
// 检查是否有参数被选中
|
|
|
|
bool hasSelectedParams = m_kCheckBox->isChecked() || m_sCheckBox->isChecked() ||
|
|
|
|
bool hasSelectedParams = m_kCheckBox->isChecked() || m_sCheckBox->isChecked() ||
|
|
|
|
m_cCheckBox->isChecked() || m_phiCheckBox->isChecked() ||
|
|
|
|
m_cCheckBox->isChecked() || m_phiCheckBox->isChecked() ||
|
|
|
|
m_piCheckBox->isChecked() || m_hCheckBox->isChecked() ||
|
|
|
|
m_hCheckBox->isChecked() ||
|
|
|
|
m_ctCheckBox->isChecked() || m_cfCheckBox->isChecked() ||
|
|
|
|
m_ctCheckBox->isChecked() || m_cfCheckBox->isChecked() ||
|
|
|
|
m_swiCheckBox->isChecked();
|
|
|
|
m_swiCheckBox->isChecked();
|
|
|
|
|
|
|
|
|
|
|
|
@ -817,7 +809,6 @@ void nmWxAutomaticFitting::onAccept()
|
|
|
|
if(m_sCheckBox->isChecked()) selectedParameterNames << tr("Skin");
|
|
|
|
if(m_sCheckBox->isChecked()) selectedParameterNames << tr("Skin");
|
|
|
|
if(m_cCheckBox->isChecked()) selectedParameterNames << tr("Wellbore storage");
|
|
|
|
if(m_cCheckBox->isChecked()) selectedParameterNames << tr("Wellbore storage");
|
|
|
|
if(m_phiCheckBox->isChecked()) selectedParameterNames << tr("Porosity");
|
|
|
|
if(m_phiCheckBox->isChecked()) selectedParameterNames << tr("Porosity");
|
|
|
|
if(m_piCheckBox->isChecked()) selectedParameterNames << tr("Initial Pressure");
|
|
|
|
|
|
|
|
if(m_hCheckBox->isChecked()) selectedParameterNames << tr("Thickness");
|
|
|
|
if(m_hCheckBox->isChecked()) selectedParameterNames << tr("Thickness");
|
|
|
|
if(m_ctCheckBox->isChecked()) selectedParameterNames << tr("Ct");
|
|
|
|
if(m_ctCheckBox->isChecked()) selectedParameterNames << tr("Ct");
|
|
|
|
if(m_cfCheckBox->isChecked()) selectedParameterNames << tr("Cf");
|
|
|
|
if(m_cfCheckBox->isChecked()) selectedParameterNames << tr("Cf");
|
|
|
|
@ -934,7 +925,6 @@ void nmWxAutomaticFitting::setAutomaticFittingValue()
|
|
|
|
automaticFittingData.setSkinSelected(m_sCheckBox->isChecked());
|
|
|
|
automaticFittingData.setSkinSelected(m_sCheckBox->isChecked());
|
|
|
|
automaticFittingData.setWellboreStorageSelected(m_cCheckBox->isChecked());
|
|
|
|
automaticFittingData.setWellboreStorageSelected(m_cCheckBox->isChecked());
|
|
|
|
automaticFittingData.setPorositySelected(m_phiCheckBox->isChecked());
|
|
|
|
automaticFittingData.setPorositySelected(m_phiCheckBox->isChecked());
|
|
|
|
automaticFittingData.setInitialPressureSelected(m_piCheckBox->isChecked());
|
|
|
|
|
|
|
|
automaticFittingData.setThicknessSelected(m_hCheckBox->isChecked());
|
|
|
|
automaticFittingData.setThicknessSelected(m_hCheckBox->isChecked());
|
|
|
|
automaticFittingData.setCtSelected(m_ctCheckBox->isChecked());
|
|
|
|
automaticFittingData.setCtSelected(m_ctCheckBox->isChecked());
|
|
|
|
automaticFittingData.setCfSelected(m_cfCheckBox->isChecked());
|
|
|
|
automaticFittingData.setCfSelected(m_cfCheckBox->isChecked());
|
|
|
|
@ -957,25 +947,21 @@ void nmWxAutomaticFitting::setAutomaticFittingValue()
|
|
|
|
automaticFittingData.getPorosityMin().setValue(m_parameterTable->item(3, 2)->text().toDouble());
|
|
|
|
automaticFittingData.getPorosityMin().setValue(m_parameterTable->item(3, 2)->text().toDouble());
|
|
|
|
automaticFittingData.getPorosityMax().setValue(m_parameterTable->item(3, 4)->text().toDouble());
|
|
|
|
automaticFittingData.getPorosityMax().setValue(m_parameterTable->item(3, 4)->text().toDouble());
|
|
|
|
|
|
|
|
|
|
|
|
// 保存初始压力的最小值和最大值
|
|
|
|
|
|
|
|
automaticFittingData.getInitialPressureMin().setValue(m_parameterTable->item(4, 2)->text().toDouble());
|
|
|
|
|
|
|
|
automaticFittingData.getInitialPressureMax().setValue(m_parameterTable->item(4, 4)->text().toDouble());
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 保存储层厚度的最小值和最大值
|
|
|
|
// 保存储层厚度的最小值和最大值
|
|
|
|
automaticFittingData.getThicknessMin().setValue(m_parameterTable->item(5, 2)->text().toDouble());
|
|
|
|
automaticFittingData.getThicknessMin().setValue(m_parameterTable->item(4, 2)->text().toDouble());
|
|
|
|
automaticFittingData.getThicknessMax().setValue(m_parameterTable->item(5, 4)->text().toDouble());
|
|
|
|
automaticFittingData.getThicknessMax().setValue(m_parameterTable->item(4, 4)->text().toDouble());
|
|
|
|
|
|
|
|
|
|
|
|
// 保存综合压缩系数的最小值和最大值
|
|
|
|
// 保存综合压缩系数的最小值和最大值
|
|
|
|
automaticFittingData.getCtMin().setValue(m_parameterTable->item(6, 2)->text().toDouble());
|
|
|
|
automaticFittingData.getCtMin().setValue(m_parameterTable->item(5, 2)->text().toDouble());
|
|
|
|
automaticFittingData.getCtMax().setValue(m_parameterTable->item(6, 4)->text().toDouble());
|
|
|
|
automaticFittingData.getCtMax().setValue(m_parameterTable->item(5, 4)->text().toDouble());
|
|
|
|
|
|
|
|
|
|
|
|
// 保存岩石压缩系数的最小值和最大值
|
|
|
|
// 保存岩石压缩系数的最小值和最大值
|
|
|
|
automaticFittingData.getCfMin().setValue(m_parameterTable->item(7, 2)->text().toDouble());
|
|
|
|
automaticFittingData.getCfMin().setValue(m_parameterTable->item(6, 2)->text().toDouble());
|
|
|
|
automaticFittingData.getCfMax().setValue(m_parameterTable->item(7, 4)->text().toDouble());
|
|
|
|
automaticFittingData.getCfMax().setValue(m_parameterTable->item(6, 4)->text().toDouble());
|
|
|
|
|
|
|
|
|
|
|
|
// 保存初始含水饱和度的最小值和最大值
|
|
|
|
// 保存初始含水饱和度的最小值和最大值
|
|
|
|
automaticFittingData.getSwiMin().setValue(m_parameterTable->item(8, 2)->text().toDouble());
|
|
|
|
automaticFittingData.getSwiMin().setValue(m_parameterTable->item(7, 2)->text().toDouble());
|
|
|
|
automaticFittingData.getSwiMax().setValue(m_parameterTable->item(8, 4)->text().toDouble());
|
|
|
|
automaticFittingData.getSwiMax().setValue(m_parameterTable->item(7, 4)->text().toDouble());
|
|
|
|
|
|
|
|
|
|
|
|
// 保存迭代参数
|
|
|
|
// 保存迭代参数
|
|
|
|
automaticFittingData.getIterationCount().setValue(m_iterationEdit->text().toInt());
|
|
|
|
automaticFittingData.getIterationCount().setValue(m_iterationEdit->text().toInt());
|
|
|
|
@ -984,11 +970,10 @@ void nmWxAutomaticFitting::setAutomaticFittingValue()
|
|
|
|
// 保存储层数据的初值
|
|
|
|
// 保存储层数据的初值
|
|
|
|
reservoirData.getPermeability().setValue(m_parameterTable->item(0, 3)->text().toDouble()); // 渗透率
|
|
|
|
reservoirData.getPermeability().setValue(m_parameterTable->item(0, 3)->text().toDouble()); // 渗透率
|
|
|
|
reservoirData.getPorosity().setValue(m_parameterTable->item(3, 3)->text().toDouble()); // 孔隙度
|
|
|
|
reservoirData.getPorosity().setValue(m_parameterTable->item(3, 3)->text().toDouble()); // 孔隙度
|
|
|
|
reservoirData.getInitialPressure().setValue(m_parameterTable->item(4, 3)->text().toDouble()); // 初始压力
|
|
|
|
reservoirData.getThickness().setValue(m_parameterTable->item(4, 3)->text().toDouble()); // 储层厚度
|
|
|
|
reservoirData.getThickness().setValue(m_parameterTable->item(5, 3)->text().toDouble()); // 储层厚度
|
|
|
|
reservoirData.getCt().setValue(m_parameterTable->item(5, 3)->text().toDouble()); // 综合压缩系数
|
|
|
|
reservoirData.getCt().setValue(m_parameterTable->item(6, 3)->text().toDouble()); // 综合压缩系数
|
|
|
|
reservoirData.getCf().setValue(m_parameterTable->item(6, 3)->text().toDouble()); // 岩石压缩系数
|
|
|
|
reservoirData.getCf().setValue(m_parameterTable->item(7, 3)->text().toDouble()); // 岩石压缩系数
|
|
|
|
reservoirData.getSwi().setValue(m_parameterTable->item(7, 3)->text().toDouble()); // 初始含水饱和度
|
|
|
|
reservoirData.getSwi().setValue(m_parameterTable->item(8, 3)->text().toDouble()); // 初始含水饱和度
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 更新储层数据(全局)
|
|
|
|
// 更新储层数据(全局)
|
|
|
|
nmDataAnalyzeManager::getCurrentInstance()->updateReservoirData(reservoirData);
|
|
|
|
nmDataAnalyzeManager::getCurrentInstance()->updateReservoirData(reservoirData);
|
|
|
|
@ -1325,11 +1310,10 @@ void nmWxAutomaticFitting::updateBestParametersToTable()
|
|
|
|
if(m_sCheckBox->isChecked()) enabledParams.append(1); // 表皮系数
|
|
|
|
if(m_sCheckBox->isChecked()) enabledParams.append(1); // 表皮系数
|
|
|
|
if(m_cCheckBox->isChecked()) enabledParams.append(2); // 井筒储集系数
|
|
|
|
if(m_cCheckBox->isChecked()) enabledParams.append(2); // 井筒储集系数
|
|
|
|
if(m_phiCheckBox->isChecked()) enabledParams.append(3); // 孔隙度
|
|
|
|
if(m_phiCheckBox->isChecked()) enabledParams.append(3); // 孔隙度
|
|
|
|
if(m_piCheckBox->isChecked()) enabledParams.append(4); // 初始压力
|
|
|
|
if(m_hCheckBox->isChecked()) enabledParams.append(4); // 储层厚度
|
|
|
|
if(m_hCheckBox->isChecked()) enabledParams.append(5); // 储层厚度
|
|
|
|
if(m_ctCheckBox->isChecked()) enabledParams.append(5); // 综合压缩系数
|
|
|
|
if(m_ctCheckBox->isChecked()) enabledParams.append(6); // 综合压缩系数
|
|
|
|
if(m_cfCheckBox->isChecked()) enabledParams.append(6); // 岩石压缩系数
|
|
|
|
if(m_cfCheckBox->isChecked()) enabledParams.append(7); // 岩石压缩系数
|
|
|
|
if(m_swiCheckBox->isChecked()) enabledParams.append(7); // 初始含水饱和度
|
|
|
|
if(m_swiCheckBox->isChecked()) enabledParams.append(8); // 初始含水饱和度
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 范围收缩比例
|
|
|
|
// 范围收缩比例
|
|
|
|
double shrinkFactor = 0.3;
|
|
|
|
double shrinkFactor = 0.3;
|
|
|
|
@ -1353,7 +1337,7 @@ void nmWxAutomaticFitting::updateBestParametersToTable()
|
|
|
|
double newMax = bestValue + newHalfRange;
|
|
|
|
double newMax = bestValue + newHalfRange;
|
|
|
|
|
|
|
|
|
|
|
|
// 确保某些参数不为负数
|
|
|
|
// 确保某些参数不为负数
|
|
|
|
if (paramIndex == 0 || paramIndex == 2 || paramIndex == 3 || paramIndex == 5) {
|
|
|
|
if (paramIndex == 0 || paramIndex == 2 || paramIndex == 3 || paramIndex == 4) {
|
|
|
|
newMin = qMax(newMin, 0.0);
|
|
|
|
newMin = qMax(newMin, 0.0);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
@ -1387,23 +1371,19 @@ void nmWxAutomaticFitting::updateBestParametersToTable()
|
|
|
|
automaticFittingData.getPorosityMin().setValue(newMin);
|
|
|
|
automaticFittingData.getPorosityMin().setValue(newMin);
|
|
|
|
automaticFittingData.getPorosityMax().setValue(newMax);
|
|
|
|
automaticFittingData.getPorosityMax().setValue(newMax);
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
case 4: // 初始压力
|
|
|
|
case 4: // 储层厚度
|
|
|
|
automaticFittingData.getInitialPressureMin().setValue(newMin);
|
|
|
|
|
|
|
|
automaticFittingData.getInitialPressureMax().setValue(newMax);
|
|
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
case 5: // 储层厚度
|
|
|
|
|
|
|
|
automaticFittingData.getThicknessMin().setValue(newMin);
|
|
|
|
automaticFittingData.getThicknessMin().setValue(newMin);
|
|
|
|
automaticFittingData.getThicknessMax().setValue(newMax);
|
|
|
|
automaticFittingData.getThicknessMax().setValue(newMax);
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
case 6: // 综合压缩系数
|
|
|
|
case 5: // 综合压缩系数
|
|
|
|
automaticFittingData.getCtMin().setValue(newMin);
|
|
|
|
automaticFittingData.getCtMin().setValue(newMin);
|
|
|
|
automaticFittingData.getCtMax().setValue(newMax);
|
|
|
|
automaticFittingData.getCtMax().setValue(newMax);
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
case 7: // 岩石压缩系数
|
|
|
|
case 6: // 岩石压缩系数
|
|
|
|
automaticFittingData.getCfMin().setValue(newMin);
|
|
|
|
automaticFittingData.getCfMin().setValue(newMin);
|
|
|
|
automaticFittingData.getCfMax().setValue(newMax);
|
|
|
|
automaticFittingData.getCfMax().setValue(newMax);
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
case 8: // 初始含水饱和度
|
|
|
|
case 7: // 初始含水饱和度
|
|
|
|
automaticFittingData.getSwiMin().setValue(newMin);
|
|
|
|
automaticFittingData.getSwiMin().setValue(newMin);
|
|
|
|
automaticFittingData.getSwiMax().setValue(newMax);
|
|
|
|
automaticFittingData.getSwiMax().setValue(newMax);
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
|