|
|
|
|
|
#include "nmWxRCDialog.h"
|
|
|
|
|
|
#include <QVBoxLayout>
|
|
|
|
|
|
#include <QTableWidget>
|
|
|
|
|
|
#include <QTableWidgetItem>
|
|
|
|
|
|
#include <QHeaderView>
|
|
|
|
|
|
#include <QPushButton>
|
|
|
|
|
|
#include <QDebug>
|
|
|
|
|
|
#include <QTabWidget>
|
|
|
|
|
|
|
|
|
|
|
|
#include "ZxBaseUtil.h"
|
|
|
|
|
|
#include "nmWxRCWell.h"
|
|
|
|
|
|
//#include "nmGUIComponentBase.h"
|
|
|
|
|
|
|
|
|
|
|
|
Q_DECLARE_METATYPE(double *)
|
|
|
|
|
|
|
|
|
|
|
|
nmWxRCDialog::nmWxRCDialog()
|
|
|
|
|
|
: m_pTableWidget(NULL),
|
|
|
|
|
|
m_pWellWidget(NULL)
|
|
|
|
|
|
{
|
|
|
|
|
|
this->initUI();
|
|
|
|
|
|
this->setWindowTitle(tr("OilReservoir setting"));
|
|
|
|
|
|
this->resize(800, 400);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
nmWxRCDialog::nmWxRCDialog(QVector<QString> vWellNames, QVector<double> vWellRadius)
|
|
|
|
|
|
: m_pTableWidget(NULL),
|
|
|
|
|
|
m_pWellWidget(NULL),
|
|
|
|
|
|
m_vWellNames(vWellNames),
|
|
|
|
|
|
m_vWellRadius(vWellRadius)
|
|
|
|
|
|
{
|
|
|
|
|
|
this->initUI();
|
|
|
|
|
|
this->setWindowTitle(tr("OilReservoir setting"));
|
|
|
|
|
|
this->resize(800, 400);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void nmWxRCDialog::on_save() {
|
|
|
|
|
|
// 保存油藏参数
|
|
|
|
|
|
QString sDir = ZxBaseUtil::getCurWellDirOf("Nm/Solver");
|
|
|
|
|
|
QString sFile = sDir + "par.txt";
|
|
|
|
|
|
QFile file(sFile);
|
|
|
|
|
|
//检查
|
|
|
|
|
|
if(!file.open(QIODevice::WriteOnly | QIODevice::Text)) {
|
|
|
|
|
|
qWarning("Cannot open file for writing: %s", qPrintable(file.errorString()));
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
|
|
|
|
|
QTextStream out(&file);
|
|
|
|
|
|
for (int i = 0; i < m_vOriReservoirPar.size(); i++) {
|
|
|
|
|
|
out << m_vOriReservoirPar[i] << "\n";
|
|
|
|
|
|
}
|
|
|
|
|
|
file.close();
|
|
|
|
|
|
// 保存井信息
|
|
|
|
|
|
m_pWellWidget->saveData(ZxBaseUtil::getCurWellDirOf("Nm/Solver") + "wells.txt");
|
|
|
|
|
|
this->accept();
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void nmWxRCDialog::initUI() {
|
|
|
|
|
|
QVBoxLayout* mainLayout = new QVBoxLayout;
|
|
|
|
|
|
this->setLayout(mainLayout);
|
|
|
|
|
|
QTabWidget* tabWidget = new QTabWidget;
|
|
|
|
|
|
mainLayout->addWidget(tabWidget);
|
|
|
|
|
|
// 油藏属性设置
|
|
|
|
|
|
tabWidget->addTab(this->initOilReservoirUI(), tr("OilReservoir"));
|
|
|
|
|
|
tabWidget->addTab(this->initWellsUI(), tr("Wells"));
|
|
|
|
|
|
// 井属性设置
|
|
|
|
|
|
// 下方的操作按钮
|
|
|
|
|
|
// 底部按钮
|
|
|
|
|
|
QHBoxLayout* hLayout = new QHBoxLayout;
|
|
|
|
|
|
QPushButton* saveBT = new QPushButton(tr("Save"));
|
|
|
|
|
|
QPushButton* cancelBT = new QPushButton(tr("Cancel"));
|
|
|
|
|
|
connect(saveBT, SIGNAL(clicked()), this, SLOT(on_save()));
|
|
|
|
|
|
connect(cancelBT, SIGNAL(clicked()), this, SLOT(reject()));
|
|
|
|
|
|
hLayout->addStretch();
|
|
|
|
|
|
hLayout->addWidget(saveBT);
|
|
|
|
|
|
hLayout->addWidget(cancelBT);
|
|
|
|
|
|
mainLayout->addLayout(hLayout);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
QWidget* nmWxRCDialog::initWellsUI() {
|
|
|
|
|
|
m_pWellWidget = new nmWxRCWell(m_vWellNames, m_vWellRadius, NULL);
|
|
|
|
|
|
return m_pWellWidget;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
QWidget *nmWxRCDialog::initOilReservoirUI() {
|
|
|
|
|
|
QWidget* container = new QWidget;
|
|
|
|
|
|
QVBoxLayout* mainLayout = new QVBoxLayout;
|
|
|
|
|
|
container->setLayout(mainLayout);
|
|
|
|
|
|
mainLayout->setSpacing(0);
|
|
|
|
|
|
mainLayout->setContentsMargins(0, 0, 0, 0);
|
|
|
|
|
|
// names
|
|
|
|
|
|
QStringList nameList;
|
|
|
|
|
|
nameList << tr("Pressure: ") << tr("Permeability: ") << tr("Thickness: ") << tr("Viscosity: ") << tr("Coefficient: ") << tr("Porosity: ") << tr("Compressibility: ") << tr("kx/kz: ") << tr("FlowNum: "); // 定义表头内容
|
|
|
|
|
|
// 单位列表
|
|
|
|
|
|
QStringList unitList;
|
|
|
|
|
|
unitList << "MPa" << "mD" << "m" << "mPa.s" << "" << "" << "MPa" << "" << "";
|
|
|
|
|
|
// 各个参数初始值
|
|
|
|
|
|
// m_vOriReservoirPar.push_back(30);
|
|
|
|
|
|
// m_vOriReservoirPar.push_back(100);
|
|
|
|
|
|
// m_vOriReservoirPar.push_back(5);
|
|
|
|
|
|
// m_vOriReservoirPar.push_back(1);
|
|
|
|
|
|
// m_vOriReservoirPar.push_back(1.1);
|
|
|
|
|
|
// m_vOriReservoirPar.push_back(0.1);
|
|
|
|
|
|
// m_vOriReservoirPar.push_back(0.0035);
|
|
|
|
|
|
// m_vOriReservoirPar.push_back(1);
|
|
|
|
|
|
m_vOriReservoirPar.push_back(34.47);
|
|
|
|
|
|
m_vOriReservoirPar.push_back(15.1454);
|
|
|
|
|
|
m_vOriReservoirPar.push_back(30.48);
|
|
|
|
|
|
m_vOriReservoirPar.push_back(1.5);
|
|
|
|
|
|
m_vOriReservoirPar.push_back(1);
|
|
|
|
|
|
m_vOriReservoirPar.push_back(0.23);
|
|
|
|
|
|
m_vOriReservoirPar.push_back(0.00043511);
|
|
|
|
|
|
m_vOriReservoirPar.push_back(1);
|
|
|
|
|
|
m_vOriReservoirPar.push_back(5);
|
|
|
|
|
|
|
|
|
|
|
|
for (int i = 0; i < nameList.size(); i++) {
|
|
|
|
|
|
QVariant v = QVariant::fromValue(&m_vOriReservoirPar[i]);
|
|
|
|
|
|
// nmGUIComponentBase* testCom = new nmGUIComponentBase(nameList[i], v, NM_GUI_Component_Value_Type_Double, unitList[i]);
|
|
|
|
|
|
// mainLayout->addWidget(testCom);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 添加垂直弹簧
|
|
|
|
|
|
QSpacerItem *verticalSpacer = new QSpacerItem(20, 40, QSizePolicy::Minimum, QSizePolicy::Expanding);
|
|
|
|
|
|
mainLayout->addSpacerItem(verticalSpacer);
|
|
|
|
|
|
return container;
|
|
|
|
|
|
}
|