17 vector<OCP_DBL>* myPtr =
nullptr;
123 switch (
Map_Str2Int(&varName[0], varName.size())) {
223 template <
typename T>
231 for (
USI k = index[4]; k <= index[5]; k++) {
232 for (
USI j = index[2]; j <= index[3]; j++) {
233 for (
USI i = index[0]; i <= index[1]; i++) {
234 id = k * NxNy + j * Nx + i;
242 template <
typename T>
244 const vector<T>& src,
245 const vector<USI>& index)
252 for (
USI k = index[4]; k <= index[5]; k++) {
253 for (
USI j = index[2]; j <= index[3]; j++) {
254 for (
USI i = index[0]; i <= index[1]; i++) {
255 id = k * NxNy + j * Nx + i;
265 const vector<USI>& index)
272 for (
USI k = index[4]; k <= index[5]; k++) {
273 for (
USI j = index[2]; j <= index[3]; j++) {
274 for (
USI i = index[0]; i <= index[1]; i++) {
275 id = k * NxNy + j * Nx + i;
292 cout << endl <<
"COMPS" << endl;
312 cout <<
"\n---------------------" << endl
314 <<
"\n---------------------" << endl;
323 if (vbuf[0] ==
"/")
return;
326 cout <<
"RTEMP\n" <<
rsTemp << endl << endl;
332 cout <<
"\n---------------------" << endl
334 <<
"\n---------------------" << endl;
336 vector<USI> index(6, 0);
340 if (vbuf[0] ==
"/")
break;
342 for (
auto v : vbuf) {
343 if (v !=
"/") cout << setw(10) << v;
347 index[0] = 0, index[1] =
dimens.
nx - 1;
348 index[2] = 0, index[3] =
dimens.
ny - 1;
349 index[4] = 0, index[5] =
dimens.
nz - 1;
351 string objName = vbuf[0];
356 for (
USI n = 2; n < 8; n++) {
357 if (vbuf[n] !=
"DEFAULT") index[n - 2] = stoi(vbuf[n]) - 1;
359 if (index[0] < 0 || index[2] < 0 || index[4] < 0 || index[1] >
dimens.
nx - 1 ||
361 OCP_ABORT(
"WRONG Range in " + objName +
" in EQUALS!");
364 vector<OCP_DBL>* objPtr =
FindPtr(objName);
366 if (objPtr !=
nullptr) {
367 if (objName ==
"TOPS") {
369 index[4] = index[5] = 0;
373 setVal(*objPtr, val, index);
375 OCP_ABORT(
"Wrong object name: " + objName);
383 vector<OCP_DBL>* objPtr =
nullptr;
386 if (objPtr ==
nullptr) {
392 if (vbuf[0] ==
"/")
break;
394 for (
auto& str : vbuf) {
396 auto pos = str.find(
'*');
397 if (pos == string::npos) {
398 objPtr->push_back(stod(str));
400 USI len = str.size();
401 OCP_USI num = stoi(str.substr(0, pos));
402 OCP_DBL val = stod(str.substr(pos + 1, len - (pos + 1)));
403 for (
USI i = 0; i < num; i++) objPtr->push_back(val);
412 cout <<
"\n---------------------" << endl
414 <<
"\n---------------------" << endl;
417 vector<USI> index(6, 0);
420 if (vbuf[0] ==
"/")
break;
422 for (
auto v : vbuf) {
423 if (v !=
"/") cout << setw(10) << v;
427 index[0] = 0, index[1] =
dimens.
nx - 1;
428 index[2] = 0, index[3] =
dimens.
ny - 1;
429 index[4] = 0, index[5] =
dimens.
nz - 1;
431 string srcName = vbuf[0];
432 string objName = vbuf[1];
434 for (
USI n = 2; n < 8; n++) {
435 if (vbuf[n] !=
"DEFAULT") index[n - 2] = stoi(vbuf[n]) - 1;
438 vector<OCP_DBL>* srcPtr =
FindPtr(srcName);
439 vector<OCP_DBL>* objPtr =
FindPtr(objName);
440 if (srcPtr !=
nullptr && objPtr !=
nullptr) {
441 objPtr->resize(srcPtr->size());
442 CopyVal(*objPtr, *srcPtr, index);
444 OCP_ABORT(
"Wrong object names: " + srcName +
", " + objName);
453 vector<USI> index(6, 0);
456 if (vbuf[0] ==
"/")
break;
458 index[0] = 0, index[1] =
dimens.
nx - 1;
459 index[2] = 0, index[3] =
dimens.
ny - 1;
460 index[4] = 0, index[5] =
dimens.
nz - 1;
462 string objName = vbuf[0];
466 for (
USI n = 2; n < 8; n++) {
467 if (vbuf[n] !=
"DEFAULT") index[n - 2] = stoi(vbuf[n]) - 1;
470 vector<OCP_DBL>* objPtr =
FindPtr(objName);
471 if (objPtr !=
nullptr) {
472 if (objName ==
"TOPS") {
473 index[4] = index[5] = 0;
477 OCP_ABORT(
"Wrong object name: " + objName);
487 if (obj ==
nullptr) {
488 OCP_ABORT(
"Wrong table name :" + tabName);
492 if (tabName ==
"ZMFVD") {
497 vector<vector<OCP_DBL>> tmpTab(col);
501 if (vbuf[0] ==
"/")
break;
503 for (
USI i = 0; i < col; i++) {
504 tmpTab[i].push_back(stod(vbuf[i]));
507 if (vbuf.back() ==
"/") {
508 obj->
data.push_back(tmpTab);
509 for (
USI j = 0; j < col; j++) {
514 if (!tmpTab[0].empty()) obj->
data.push_back(tmpTab);
522 cout <<
"\n---------------------" << endl
524 <<
"\n---------------------" << endl;
529 if (vbuf[0] ==
"/")
break;
533 rock.
Pref = stod(vbuf[1]);
534 rock.
cp1 = stod(vbuf[2]);
536 if (rock.
type ==
"LINEAR02") {
537 if (vbuf.size() > 3 && vbuf[3] !=
"/") {
538 rock.
cp2 = stod(vbuf[3]);
545 cout <<
" " << rock.
type <<
" " << rock.
Pref <<
" " << rock.
cp1 <<
" "
553 cout <<
"\n---------------------" << endl
555 <<
"\n---------------------" << endl;
561 if (vbuf[0] ==
"/")
break;
564 USI len = vbuf.size();
565 while (index < len) {
566 if (vbuf[index] ==
"*PORFORM") {
567 rock.
type = vbuf[index + 1];
568 }
else if (vbuf[index] ==
"*PRPOR") {
569 rock.
Pref = stod(vbuf[index + 1]);
570 }
else if (vbuf[index] ==
"*TRPOR") {
571 rock.
Tref = stod(vbuf[index + 1]);
572 }
else if (vbuf[index] ==
"*CPOR") {
573 rock.
cp1 = stod(vbuf[index + 1]);
574 }
else if (vbuf[index] ==
"*CTPOR") {
575 rock.
ct = stod(vbuf[index + 1]);
576 }
else if (vbuf[index] ==
"*CPTPOR") {
577 rock.
cpt = stod(vbuf[index + 1]);
578 }
else if (vbuf[index] ==
"*VOLCONST") {
579 if (vbuf[index + 1] ==
"BULK") rock.
ConstRock = OCP_FALSE;
580 }
else if (vbuf[index] ==
"*CP1") {
581 rock.
HCP1 = stod(vbuf[index + 1]);
582 }
else if (vbuf[index] ==
"*CP2") {
583 rock.
HCP2 = stod(vbuf[index + 1]);
590 cout <<
"*PORFORM " << rock.
type << endl;
591 cout <<
"*PRPOR " << rock.
Pref << endl;
592 cout <<
"*TRPOR " << rock.
Tref << endl;
593 cout <<
"*CPOR " << rock.
cp1 << endl;
594 cout <<
"*CTPOR " << rock.
ct << endl;
595 cout <<
"*CPTPOR " << rock.
cpt << endl;
596 cout <<
"*VOLCONST " << (rock.
ConstRock ?
"ROCK" :
"BULK") << endl;
597 cout <<
"*CP1 " << rock.
HCP1 << endl;
598 cout <<
"*CP2 " << rock.
HCP2 << endl;
603 cout <<
"\n---------------------" << endl
605 <<
"\n---------------------" << endl;
612 if (vbuf[0] ==
"/")
break;
615 USI len = vbuf.size();
616 while (index < len) {
617 if (vbuf[index] ==
"*OVERBUR") {
620 }
else if (vbuf[index] ==
"*UNDERBUR") {
635 OCP_WARNING(
"MISCIBLE has not been declared. Keyword ignored!");
639 if (vbuf[0] ==
"/")
return;
640 if (vbuf.back() ==
"/") vbuf.pop_back();
642 USI len = vbuf.size();
643 for (
USI i = 0; i < len; i++) {
644 miscstr.surTenRef.push_back(stod(vbuf[i]));
647 cout <<
"\n---------------------" << endl
649 <<
"\n---------------------" << endl;
650 for (
auto& v :
miscstr.surTenRef) cout << v <<
" ";
660 if (vbuf[0] ==
"/")
return;
662 OCP_ASSERT(vbuf.size() == 4,
"Wrong Keyword GRAVITY!");
663 for (
USI i = 0; i < 3; i++) {
664 if (vbuf[i] !=
"DEFAULT") {
669 cout <<
"\n---------------------" << endl
671 <<
"\n---------------------" << endl;
681 if (vbuf[0] ==
"/")
return;
684 OCP_ASSERT(vbuf.size() == 3,
"Wrong Keyword DENSITY!");
685 for (
USI i = 0; i < 3; i++) {
686 if (vbuf[i] !=
"DEFAULT") {
692 cout <<
"\n---------------------" << endl
694 <<
"\n---------------------" << endl;
704 if (keyword ==
"THCONO") {
706 }
else if (keyword ==
"THCONG") {
708 }
else if (keyword ==
"THCONW") {
712 cout <<
"THCONO\n" <<
thcono << endl << endl;
713 cout <<
"THCONG\n" <<
thcong << endl << endl;
714 cout <<
"THCONW\n" <<
thconw << endl << endl;
722 if (vbuf[0] ==
"/")
return;
726 for (
USI i = 0; i < 6; i++) {
727 if (vbuf[i] !=
"DEFAULT")
EQUIL[i] = stod(vbuf[i]);
730 cout <<
"\n---------------------" << endl
732 <<
"\n---------------------" << endl;
734 for (
USI i = 0; i < 6; i++) cout <<
EQUIL[i] <<
" ";
744 if (vbuf.size() < 3) {
745 OCP_ABORT(
"Input the number of Saturation tables, PVT tables, and Rock tables "
750 NTPVT = stoi(vbuf[1]);
753 cout <<
"\n---------------------" << endl
755 <<
"\n---------------------" << endl;
766 if (keyword ==
"SATNUM") {
769 }
else if (keyword ==
"ACTNUM") {
771 }
else if (keyword ==
"ROCKNUM") {
782 if (vbuf[0] ==
"/")
break;
784 for (
auto& str : vbuf) {
786 auto pos = str.find(
'*');
787 if (pos == string::npos) {
788 ptr->
data.push_back(stod(str));
790 USI len = str.size();
791 OCP_USI num = stoi(str.substr(0, pos));
792 OCP_DBL val = stod(str.substr(pos + 1, len - (pos + 1)));
793 for (
USI i = 0; i < num; i++) ptr->
data.push_back(val);
798 cout <<
"Number of Tables = " << lim << endl;
815 if (
coord.size() == 0) {
833 cout <<
"Set net-to-gross ratio to 1.0!" << endl;
855 OCP_ABORT(
"Both DENSITY and GRAVITY have been given, just one can be used!");
863 OCP_ABORT(
"DISGAS can only be used only if OIL and GAS are both present!");
904 OCP_ABORT(
"More than one equilibrium region is not supported!");
911 cout <<
"\n---------------------" << endl
912 <<
name <<
"\n---------------------" << endl;
914 for (
USI n = 0; n <
data.size(); n++) {
920 const USI len =
data[n][0].size();
921 for (
USI i = 0; i < len; i++) {
923 cout << setw(10) <<
data[n][j][i];
945 switch (
Map_Str2Int(&varName[0], varName.size())) {
1082 vector<OCP_DBL>* objPtr =
nullptr;
1084 if (objPtr ==
nullptr) {
1088 vector<string> vbuf;
1092 if (vbuf[0] ==
"/")
break;
1094 for (
auto& v : vbuf) {
1095 if (v !=
"/") objPtr->push_back(stod(v));
1096 if (objPtr->size() >=
NTPVT)
break;
1098 if (objPtr->size() >=
NTPVT)
break;
1100 cout << keyword << endl;
1102 cout << objPtr->at(i) <<
" ";
1104 cout <<
"\n/" << endl << endl;
1109 vector<OCP_DBL>* myPtr =
nullptr;
1111 switch (
Map_Str2Int(&varName[0], varName.size())) {
1130 if (objPtr ==
nullptr) {
1135 vector<string> vbuf;
1136 vector<OCP_DBL> tmp;
1141 if (vbuf[0] ==
"/") {
1143 objPtr->
data.push_back(tmp);
1144 if (nReg >=
NTPVT)
break;
1148 for (
auto& v : vbuf) {
1150 tmp.push_back(stod(v));
1153 if (vbuf.back() ==
"/") {
1155 objPtr->
data.push_back(tmp);
1157 if (nReg >=
NTPVT)
break;
1161 cout << keyword << endl;
1163 for (
auto& v : objPtr->
data[i]) {
1166 cout <<
"/" << endl;
1175 vector<string> vbuf;
1178 if (vbuf[0] ==
"/") {
1181 for (
auto& v : vbuf) {
1182 if (v !=
"/")
Cname.push_back(v);
1184 if (vbuf.back() ==
"/")
break;
1188 cout <<
"CNAMES" << endl;
1190 cout <<
Cname[i] <<
" ";
1192 cout << endl << endl;
1197 vector<string> vbuf;
1200 for (
USI i = 0; i < 5; i++) {
1201 if (vbuf[i] !=
"DEFAULT")
LBCcoef[i] = stod(vbuf[i]);
1205 cout <<
"LBCCOEF" << endl;
1206 for (
USI i = 0; i < 5; i++) {
1209 cout << endl << endl;
1219 vector<string> vbuf;
1223 if (vbuf[0] ==
"/") {
1225 if (nReg >=
NTPVT)
break;
1228 for (
auto& v : vbuf) {
1230 BIC[nReg].push_back(stod(v));
1231 cout << setw(10) <<
BIC[nReg].back();
1235 if (vbuf.back() ==
"/") {
1237 if (nReg >=
NTPVT)
break;
1244 vector<string> vbuf;
1245 vector<vector<OCP_DBL>> tmp;
1256 if (vbuf[0] ==
"/")
break;
1258 if (vbuf[0] ==
"ATPRES") {
1265 for (
USI i = 0; i < ncol; i++) {
1266 tmp[i].push_back(stod(vbuf[i]));
1269 if (vbuf[0] ==
"ATPRES" || vbuf[0] ==
"/") {
1276 if (vbuf[0] ==
"/")
break;
1283 cout <<
"/" << endl;
1289 vector<string> vbuf;
1291 int len = vbuf.size();
1292 for (
int i = 0; i < len; i++) {
1296 for (
int i = 0; i < len; i++) {
1299 cout << endl << endl;
1305 vector<string> vbuf;
1307 for (
int i = 0; i < 2; i++) {
1311 for (
int i = 0; i < 2; i++) {
1314 cout << endl << endl;
1320 vector<string> vbuf;
1322 for (
USI i = 0; i < 2; i++) {
1326 for (
USI i = 0; i < 2; i++) {
1329 cout << endl << endl;
1335 vector<string> vbuf;
1337 for (
USI i = 0; i < 2; i++) {
1341 for (
USI i = 0; i < 2; i++) {
1344 cout << endl << endl;
1350 vector<string> vbuf;
1352 for (
USI i = 0; i < 2; i++) {
1356 for (
USI i = 0; i < 2; i++) {
1359 cout << endl << endl;
unsigned int USI
Generic unsigned integer.
double OCP_DBL
Double precision.
unsigned int OCP_USI
Long unsigned integer.
unsigned int OCP_BOOL
OCP_BOOL in OCP.
ParamReservoir class declaration.
#define OCP_FUNCNAME
Print Function Name.
#define OCP_WARNING(msg)
Log warning messages.
#define OCP_ASSERT(cond, msg)
Assert condition and log user messages in DEBUG mode.
#define OCP_ABORT(msg)
Abort if critical error happens.
Type_A_r< vector< OCP_DBL > > cpg4
Type_A_r< vector< OCP_DBL > > cpl1
void InputLBCCOEF(ifstream &ifs)
Input LBC coefficients for viscosity calculation.
void InputSSMSP(ifstream &ifs)
TODO: Add Doxygen.
Type_A_r< vector< OCP_DBL > > Tc
Critical temperature of hydrocarbon components.
Type_A_r< vector< OCP_DBL > > Vcvis
Critical volume used for viscosity calculations only.
vector< OCP_DBL > * FindPtr02(const string &varName)
Find corresponding variable according to the name of variable.
Type_A_r< vector< OCP_DBL > > ev
coefficients in the vaporization enthalpy calculations
Type_A_r< vector< OCP_DBL > > Zc
Critical Z-factor of hydrocarbon components.
Type_A_r< vector< OCP_DBL > > MW
Molecular Weight of hydrocarbon components.
Type_A_r< vector< OCP_DBL > > cpg2
Type_A_r< vector< OCP_DBL > > avisc
coefficients in water and oil viscosity correlation formulae
Type_A_r< vector< OCP_DBL > > bvisc
coefficients in water and oil viscosity correlation formulae
vector< OCP_DBL > Pref
reference pressure
Type_A_r< vector< OCP_DBL > > bvg
void InputRR(ifstream &ifs)
TODO: Add Doxygen.
Type_A_r< vector< OCP_DBL > > cpl3
void InputVISCTAB(ifstream &ifs)
Input VISCTAB.
void InputBIC(ifstream &ifs)
Input the Binary interaction of components.
USI numCom
num of components, water is excluded.
Type_A_r< vector< OCP_DBL > > cpl4
Type_A_r< vector< OCP_DBL > > hvapr
coefficients in the component gas enthalpy calculations, Btu/lbmol
vector< string > Cname
Name of hydrocarbon components.
Type_A_r< vector< OCP_DBL > > ct1
the first ifThermal expansion coefficient, 1/F
Type_A_r< vector< OCP_DBL > > avg
coefficients Ak in gas viscosity correlation formulae
void InputCOMPONENTS(ifstream &ifs, const string &keyword)
Input the information of hydrocarbon components.
Type_A_r< vector< OCP_DBL > > cpt
Type_A_r< vector< OCP_DBL > > Acf
Acentric factor of hydrocarbon components.
void InputNRSTA(ifstream &ifs)
TODO: Add Doxygen.
Type_A_r< vector< OCP_DBL > > Vshift
Volume shift of hydrocarbon components.
Type_A_r< vector< OCP_DBL > > hvr
coefficients in the vaporization enthalpy calculations
void InputCNAMES(ifstream &ifs)
Input the names of hydrocarbon components.
Type_A_r< vector< OCP_DBL > > Zcvis
Critical Z-factor used for viscosity calculations only.
Type_A_r< vector< OCP_DBL > > OmegaB
OMEGA_B of hydrocarbon components.
Type_A_r< vector< OCP_DBL > > cpg1
Type_A_r< vector< OCP_DBL > > ct2
the second ifThermal expansion coefficient, 1/F
Type_A_r< vector< OCP_DBL > > Vc
Critical volume of hydrocarbon components.
Type_A_r< vector< OCP_DBL > > cpg3
Type_A_r< vector< OCP_DBL > > Pc
Critical pressure of hydrocarbon components.
void InputSSMSTA(ifstream &ifs)
TODO: Add Doxygen.
Type_A_r< vector< OCP_DBL > > cpl2
Type_A_r< vector< OCP_DBL > > OmegaA
OMEGA_A of hydrocarbon components.
Type_A_r< vector< OCP_DBL > > cp
component compressibility, 1/psi
vector< vector< OCP_DBL > > BIC
Binary interaction.
USI NTPVT
num of EoS region, constant now.
Type_A_r< vector< OCP_DBL > > * FindPtr01(const string &varName)
void InputNRSP(ifstream &ifs)
TODO: Add Doxygen.
Type_A_r< vector< OCP_DBL > > molden
vector< OCP_DBL > LBCcoef
LBC coefficients for viscosity calculation.
vector< OCP_DBL > Tref
reference temperature
void InputRefPR(ifstream &ifs, const string &keyword)
input reference pressure, temperature
Type_A_r< vector< OCP_DBL > > Parachor
PARACHOR of hydrocarbon components.
USI nx
Num of bulks along x-direction.
USI ny
Num of bulks along y-direction.
USI nz
Num of bulks along z-direction.
OCP_DBL obC
Volumetric heat capacity of overburden rock.
OCP_BOOL ifHLoss
If use Heat loss.
OCP_DBL obK
Thermal conductivity of overburden rock.
OCP_DBL ubK
Thermal conductivity of underburden rock.
OCP_DBL ubC
Volumetric heat capacity of underburden rock.
Params for NR in Phase Split.
Params for NR in Phase Stability Analysis.
vector< RockParam > rockSet
a set of rock
vector< OCP_DBL > permY
Permeability along the y-direction for each grid.
OCP_BOOL oil
If OCP_TRUE, oil phase could exist.
void InputDIMENS(ifstream &ifs)
TODO: Add Doxygen.
void CheckEQUIL() const
Check if keyword EQUIL is given.
USI NTSFUN
Num of SAT regions.
vector< OCP_DBL > Ni
Initial moles of components in each grid.
void InputTABDIMS(ifstream &ifs)
TABDIMS contains the num of saturation region and PVT region.
USI NTROOC
Num of Rock regions.
void CheckParam()
Check the reservoir param from input file.
vector< OCP_DBL > zcorn
TODO: Add Doxygen.
Type_A_r< OCP_DBL > SATNUM
Records the index of SAT region for each grid.
TableSet ZMFVD_T
Table set of ZMFVD.
vector< OCP_DBL > EQUIL
See ParamEQUIL.
Type_A_r< OCP_DBL > ACTNUM
Records the index of Active region for each grid.
vector< OCP_DBL > poro
Porosity for each grid.
void InputTHCON(ifstream &ifs, const string &keyword)
Input the phase ifThermal conductivity.
ComponentParam comsParam
information for components
void InputGRID(ifstream &ifs, string &keyword)
TODO: Add Doxygen.
TableSet * FindPtr_T(const string &varName)
Find pointer to the specified table.
OCP_DBL thconw
water ifThermal conductivity
vector< OCP_DBL > dy
Size along the y - direction for each grid.
vector< OCP_DBL > permX
Permeability along the x - direction for each grid.
void MultiplyVal(vector< OCP_DBL > &obj, const OCP_DBL &val, const vector< USI > &index)
TODO: Add Doxygen.
void CheckPhase() const
Check existence of disgas, it could only exist when both oil and gas exist.
void InputMISCSTR(ifstream &ifs)
Input the Miscibility information.
TableSet PVDG_T
Table set of PVDG.
vector< OCP_DBL > permZ
Permeability along the z-direction for each grid.
OCP_BOOL gas
If OCP_TRUE, gas phase could exist.
TableSet SOF3_T
Table set of SOF3.
vector< OCP_DBL > dx
Size along the x - direction for each grid.
TableSet PBVD_T
Table set of PBVD.
void InputEQUIL(ifstream &ifs)
EQUIL contains initial information of reservoir; see ParamEQUIL.
Type_A_r< OCP_DBL > density
Density of oil, water, gas in standard conditions.
TableSet PVDO_T
Table set of PVDO.
void InputCOMPS(ifstream &ifs)
TODO: Add Doxygen.
OCP_BOOL comps
If OCP_TRUE, compositional model will be used.
vector< OCP_DBL > tops
Depth of the top surface of the uppermost grids.
TableSet SGOF_T
Table set of SGOF.
Type_A_r< OCP_DBL > PVTNUM
Records the index of PVT region for each grid.
void CopyVal(vector< T > &obj, const vector< T > &src, const vector< USI > &index)
It's used in InputCOPY, copying the value of one variable to another.
void DisplayDIMENS()
Display the dimens, it's used to chech input.
void InputRegion(ifstream &ifs, const string &keyword)
Input the keyword: SATNUM and PVTNUM.
TableSet TEMPVD_T
Table set of TEMPVD.
void InitTable()
Initialize the tables' name and num of colum.
void InputMULTIPLY(ifstream &ifs)
TODO: Add Doxygen.
void CheckEqlRegion() const
(Todo) Initialization of equilibration of only one region is realized.
void CheckGrid()
Check the size of properties of grids.
void CheckRegion() const
Check if each grid is assigned to an area or all defaulted.
void Init()
Initialize the default value in reservoir, such as temperature, density, table.
void InputEQUALS(ifstream &ifs)
TODO: Add Doxygen.
vector< OCP_DBL > ntg
Net to gross for each grid.
void InputTABLE(ifstream &ifs, const string &tabName)
Input PVTtable and SATtable such as SWOF, PVCO.
vector< OCP_DBL > thconr
Rock ifThermal conductivity.
void InputROCK(ifstream &ifs)
Read data from the ROCK keyword.
void CheckPhaseTab() const
Check existence of PVTtable and SATtable.
OCP_DBL thcong
gas ifThermal conductivity
OCP_BOOL blackOil
If ture, blackoil model will be used.
void InputDENSITY(ifstream &ifs)
Input the reference density of oil, water, and air in standard condition.
OCP_BOOL disGas
If OCP_TRUE, dissolve gas could exist in oil phase.
TableSet SGFN_T
Table set of SGFN.
vector< OCP_DBL > coord
TODO: Add Doxygen.
Type_A_r< OCP_DBL > gravity
Gravity of oil, water, gas in standard conditions.
void setVal(vector< T > &obj, const T &val, const vector< USI > &index)
It's used in InputEQUALS, assigning values in batches.
void CheckDenGra() const
Check if density and gravity are both input, only one of them is needed.
void InputCOPY(ifstream &ifs)
Input the keyword: COPY. COPY could copy the value of one variable to another.
void InputHLOSS(ifstream &ifs)
Input heat loss property for overburden rock and underburden rock.
TableSet PVTW_T
Table set of PVTW.
Dimens dimens
Dimension of grid: the number of grids along x,y,z direction.
vector< OCP_DBL > * FindPtr(const string &varName)
Find pointer to the specified variable.
Type_A_r< OCP_DBL > ROCKNUM
Records the index of ROCK region for each grid.
vector< OCP_DBL > dz
Size along the z - direction for each grid.
void InputROCKT(ifstream &ifs)
Input Rock information for ifThermal model.
TableSet SWOF_T
Table set of SWOF.
vector< OCP_DBL > Swat
Initial water saturation in each grid.
void InputGRAVITY(ifstream &ifs)
Input the reference gravity of oil, water, and air in standard condition.
Miscstr miscstr
reference Miscibility surface tension
vector< OCP_DBL > P
Initial pressure of components in each grid.
HLoss hLoss
Heat loss property.
OCP_DBL thcono
oil ifThermal conductivity
TableSet PVCO_T
Table set of PVCO.
TableSet SWFN_T
Table set of SWFN.
USI NTPVT
Num of PVT regions.
void CheckRock()
Check Rock.
OCP_DBL rsTemp
Temperature for reservoir.
OCP_BOOL water
If OCP_TRUE, water phase could exist.
void InputRTEMP(ifstream &ifs)
Input the keyword: RTEMP. RTEMP gives the temperature of reservoir.
OCP_USI numGrid
Num of grids.
Param for Solving Rachford-Rice Equations.
RockParam class contains information about the keyword ROCK.
OCP_DBL cpt
cross items, ifThermal only
OCP_DBL cp1
Compressibility factor of rock in reservoir.
OCP_DBL HCP1
coefficients of the rock enthalpy formula, Btu/ft^3 - F
OCP_DBL Pref
Reference pressure at initial porosity.
OCP_DBL HCP2
coefficients of the rock enthalpy formula, Btu/ft^3 - F
OCP_DBL ct
Expansion factor of rock in reservoir, ifThermal only.
OCP_DBL Tref
Reference temperature at initial porosity.
string type
LINEAR or EXPONENT for porosity model.
OCP_DBL cp2
2 order Compressibility factor of rock in reservoir.
Params for SSM in Phase Split.
Params for SSM in Phase Stability Analysis.
vector< string > refName
name of refData
vector< vector< vector< OCP_DBL > > > data
All table with the same name.
vector< OCP_DBL > refData
refData for each sub data.
USI colNum
Number of columns of table.
void DisplayTable() const
Print table.
string name
Name of table.
OCP_BOOL activity
If OCP_FALSE, this param is not given.
vector< T > data
Data of param.