diff --git a/opm/output/eclipse/DoubHEAD.hpp b/opm/output/eclipse/DoubHEAD.hpp index 6acb60d6d..7b1428d25 100755 --- a/opm/output/eclipse/DoubHEAD.hpp +++ b/opm/output/eclipse/DoubHEAD.hpp @@ -39,6 +39,12 @@ namespace Opm { namespace RestartIO { std::chrono::time_point start; std::chrono::duration elapsed; }; + + struct udqParam { + double udq_param_2; + double udq_param_3; + double udq_param_4; + }; DoubHEAD(); @@ -60,7 +66,7 @@ namespace Opm { namespace RestartIO { const std::size_t lookup_step, const double cnvT); - DoubHEAD& udqParam(const UDQParams& udqPar); + DoubHEAD& udq_param(const udqParam& udqPar); const std::vector& data() const { diff --git a/opm/output/eclipse/InteHEAD.hpp b/opm/output/eclipse/InteHEAD.hpp index 9cac6c2d9..392886020 100755 --- a/opm/output/eclipse/InteHEAD.hpp +++ b/opm/output/eclipse/InteHEAD.hpp @@ -92,9 +92,6 @@ namespace Opm { namespace RestartIO { struct UdqParam { int udqParam_1; - double udqParam_2; - double udqParam_3; - double udqParam_4; }; InteHEAD(); @@ -124,6 +121,7 @@ namespace Opm { namespace RestartIO { InteHEAD& wellSegDimensions(const WellSegDims& wsdim); InteHEAD& regionDimensions(const RegDims& rdim); InteHEAD& ngroups(const Group& gr); + InteHEAD& udqParam_1(const UdqParam& udqpar); const std::vector& data() const { diff --git a/opm/output/eclipse/VectorItems/intehead.hpp b/opm/output/eclipse/VectorItems/intehead.hpp index 438128b0a..525f181c8 100644 --- a/opm/output/eclipse/VectorItems/intehead.hpp +++ b/opm/output/eclipse/VectorItems/intehead.hpp @@ -85,7 +85,7 @@ namespace Opm { namespace RestartIO { namespace Helpers { namespace VectorItems NRSEGZ = 179, // Number of entries per segment in RSEG array NILBRZ = 180, // Number of entries per segment in ILBR array - ISEEDVAL= 267, // Integer seed value for the RAND / + UDQPAR_1 = 267, // Integer seed value for the RAND / }; }}}} // Opm::RestartIO::Helpers::VectorItems diff --git a/opm/parser/eclipse/EclipseState/Schedule/UDQ/UDQParams.hpp b/opm/parser/eclipse/EclipseState/Schedule/UDQ/UDQParams.hpp index a94516813..756768fb5 100644 --- a/opm/parser/eclipse/EclipseState/Schedule/UDQ/UDQParams.hpp +++ b/opm/parser/eclipse/EclipseState/Schedule/UDQ/UDQParams.hpp @@ -31,7 +31,7 @@ namespace Opm { public: explicit UDQParams(const Deck& deck); UDQParams(); - + int rand_seed() const noexcept; void reseedRNG(int seed); double range() const noexcept; double undefinedValue() const noexcept; diff --git a/src/opm/output/eclipse/AggregateUDQData.cpp b/src/opm/output/eclipse/AggregateUDQData.cpp index 352140e87..4cbcb0234 100644 --- a/src/opm/output/eclipse/AggregateUDQData.cpp +++ b/src/opm/output/eclipse/AggregateUDQData.cpp @@ -75,7 +75,7 @@ namespace { iUdq[1] = -4; } else { iUdq[0] = 0; - iUdq[1] = 0; + iUdq[1] = -4; } iUdq[2] = udq_input.index.typed_insert_index; } @@ -191,13 +191,10 @@ namespace { } template - void staticContrib(const Opm::Schedule& sched, - const Opm::Group& group, - const std::size_t simStep, - const int indGph, - IGPHArray& iGph) + void staticContrib(const int inj_phase, + IGPHArray& iGph) { - + iGph[0] = inj_phase; } } // iGph @@ -262,7 +259,9 @@ const std::vector Opm::RestartIO::Helpers::igphData::ig_phase(const Opm::Sc auto group_ptr = it->second; if (group_ptr->isInjectionGroup(simStep)) { auto phase = group_ptr->getInjectionPhase(simStep); + if ( phase == Opm::Phase::OIL ) inj_phase[ind] = 1; if ( phase == Opm::Phase::WATER ) inj_phase[ind] = 2; + if ( phase == Opm::Phase::GAS ) inj_phase[ind] = 3; } it++; } @@ -313,6 +312,12 @@ captureDeclaredUDQData(const Opm::Schedule& sched, iUad::staticContrib(record, i_uad); } } + Opm::RestartIO::Helpers::igphData igph_dat; + auto igph = igph_dat.ig_phase(sched, simStep, inteHead); + for (std::size_t index = 0; index < igph.size(); index++) { + auto i_igph = this->iGPH_[index]; + iGph::staticContrib(igph[index], i_igph); + } } diff --git a/src/opm/output/eclipse/CreateDoubHead.cpp b/src/opm/output/eclipse/CreateDoubHead.cpp index 165dcd4f7..a2220daf4 100755 --- a/src/opm/output/eclipse/CreateDoubHead.cpp +++ b/src/opm/output/eclipse/CreateDoubHead.cpp @@ -43,6 +43,17 @@ namespace { double, std::chrono::seconds::period>{ elapsed }, }; } + + Opm::RestartIO::DoubHEAD::udqParam + getUDQParam(const ::Opm::Runspec rspec) + { + const auto udqPar = rspec.udqParams(); + return { + udqPar.range(), + udqPar.undefinedValue(), + udqPar.cmpEpsilon() + }; + } double getTimeConv(const ::Opm::UnitSystem& us) { @@ -82,12 +93,14 @@ createDoubHead(const EclipseState& es, const double nextTimeStep) { const auto& usys = es.getDeckUnitSystem(); + const auto& rspec = es.runspec(); const auto tconv = getTimeConv(usys); auto dh = DoubHEAD{} .tuningParameters(sched.getTuning(), lookup_step, tconv) .timeStamp (computeTimeStamp(sched, simTime)) .drsdt (sched, lookup_step, tconv) + .udq_param(getUDQParam(rspec)) ; if (nextTimeStep > 0.0) { diff --git a/src/opm/output/eclipse/CreateInteHead.cpp b/src/opm/output/eclipse/CreateInteHead.cpp index ee1158062..5ae57e9ab 100755 --- a/src/opm/output/eclipse/CreateInteHead.cpp +++ b/src/opm/output/eclipse/CreateInteHead.cpp @@ -183,6 +183,15 @@ namespace { }; } + Opm::RestartIO::InteHEAD::UdqParam + getRandSeedPar(const ::Opm::Runspec& rspec) + { + const auto& udq_par = rspec.udqParams(); + const auto r_seed = udq_par.rand_seed(); + + return { r_seed}; + } + Opm::RestartIO::InteHEAD::WellSegDims getWellSegDims(const ::Opm::Runspec& rspec, const ::Opm::Schedule& sched, @@ -280,6 +289,7 @@ createInteHead(const EclipseState& es, .regionDimensions (getRegDims(tdim, rdim)) .ngroups ({ ngmax }) .variousParam (201702, 100) // Output should be compatible with Eclipse 100, 2017.02 version. + .udqParam_1 (getRandSeedPar(rspec)) ; return ih.data(); diff --git a/src/opm/output/eclipse/DoubHEAD.cpp b/src/opm/output/eclipse/DoubHEAD.cpp index 9d23cba91..a4f60430a 100755 --- a/src/opm/output/eclipse/DoubHEAD.cpp +++ b/src/opm/output/eclipse/DoubHEAD.cpp @@ -620,11 +620,11 @@ Opm::RestartIO::DoubHEAD::drsdt(const Schedule& sched, } Opm::RestartIO::DoubHEAD& -Opm::RestartIO::DoubHEAD::udqParam(const UDQParams& udqPar) +Opm::RestartIO::DoubHEAD::udq_param(const udqParam& udqPar) { - this->data_[UdqPar_2] = udqPar.range(); - this->data_[UdqPar_3] = udqPar.undefinedValue(); - this->data_[UdqPar_4] = udqPar.cmpEpsilon(); + this->data_[UdqPar_2] = udqPar.udq_param_2; + this->data_[UdqPar_3] = udqPar.udq_param_3; + this->data_[UdqPar_4] = udqPar.udq_param_4; return *this; } \ No newline at end of file diff --git a/src/opm/output/eclipse/InteHEAD.cpp b/src/opm/output/eclipse/InteHEAD.cpp index 5c2cba8dd..aa2bdb7e2 100644 --- a/src/opm/output/eclipse/InteHEAD.cpp +++ b/src/opm/output/eclipse/InteHEAD.cpp @@ -19,420 +19,419 @@ namespace VI = ::Opm::RestartIO::Helpers::VectorItems; enum index : std::vector::size_type { - ISNUM = VI::intehead::ISNUM , // 0 0 An encoded integer corresponding to the time the file was created. For files not originating from ECLIPSE, this value may be set to zero. - VERSION = VI::intehead::VERSION , // 0 0 - UNIT = VI::intehead::UNIT , // (1,2,3) 1 units type: 1 - METRIC, 2 - FIELD, 3 - LAB - ih_003 = 3 , // 0 0 - ih_004 = 4 , // 0 0 - ih_005 = 5 , // 0 0 - ih_006 = 6 , // 0 0 - ih_007 = 7 , // 0 0 - NX = VI::intehead::NX , // NX 137 Grid x-direction dimension, NX - NY = VI::intehead::NY , // NY 236 Grid x-direction dimension, NY - NZ = VI::intehead::NZ , // NZ 58 Grid x-direction dimension, NZ - NACTIV = VI::intehead::NACTIV , // NACTIV? 89022 NACTIV = number of active cells - ih_012 = 12 , // 0 0 - ih_013 = 13 , // 0 0 - PHASE = VI::intehead::PHASE , // IPHS 7 IPHS = phase indicator: 1 - oil, 2 - water, 3 - oil/water, 4 - gas, 5 – oil/gas, 6 - gas/water, 7 - oil/water/gas (ECLIPSE output only) - ih_015 = 15 , // 0 0 - NWELLS = VI::intehead::NWELLS , // NWELLS 39 NWELL = number of wells - NCWMAX = VI::intehead::NCWMAX , // NCWMAX 108 Weldims item2 NCWMAX = maximum number of completions per well - NGRP = 18 , // NGRP? 0 Number of actual groups - NWGMAX = VI::intehead::NWGMAX , // NWGMAX 0 maximum of weldims item3 or item4 NWGMAX = maximum number of wells in any well group - NGMAXZ = VI::intehead::NGMAXZ , // NGMAXZ 0 weldims item3 + 1 NGMAXZ = maximum number of groups in field - ih_021 = 21 , // 0 0 - ih_022 = 22 , // 0 0 - ih_023 = 23 , // 0 0 - NIWELZ = VI::intehead::NIWELZ , // NIWELZ 155 155 NIWELZ = no of data elements per well in IWEL array (default 97 for ECLIPSE, 94 for ECLIPSE 300) - NSWELZ = VI::intehead::NSWELZ , // NSWELZ 122 122 NSWELZ = number of daelements per well in SWEL array - NXWELZ = VI::intehead::NXWELZ , // NXWELZ 130 130 NXWELZ = number of delements per well in XWEL array - NZWELZ = VI::intehead::NZWELZ , // NZWEL 3 3 NZWEL = no of 8-character words per well in ZWEL array (= 3) - ih_028 = 28 , // 0 0 - ih_029 = 29 , // 0 0 - ih_030 = 30 , // 0 0 - ih_031 = 31 , // 0 0 - NICONZ = VI::intehead::NICONZ , // 25 15 25 NICON = no of data elements per completion in ICON array (default 19) - NSCONZ = VI::intehead::NSCONZ , // 40 0 NSCONZ = number of data elements per completion in SCON array - NXCONZ = VI::intehead::NXCONZ , // 58 0 58 NXCONZ = number of data elements per completion in XCON array - ih_035 = 35 , // 0 0 - NIGRPZ = VI::intehead::NIGRPZ , // 97+intehead_array[19] 0 97 + intehead[19] NIGRPZ = no of data elements per group in IGRP array - NSGRPZ = VI::intehead::NSGRPZ , // 112 0 112 NSGRPZ = number of data elements per group in SGRP array - NXGRPZ = VI::intehead::NXGRPZ , // 180 0 180 NXGRPZ = number of data elements per group in XGRP array - NZGRPZ = VI::intehead::NZGRPZ , // 5 0 NZGRPZ = number of data elements per group in ZGRP array - ih_040 = 40 , // 0 0 - NCAMAX = VI::intehead::NCAMAX , // 1 0 NCAMAX = maximum number of analytic aquifer connections - NIAAQZ = VI::intehead::NIAAQZ , // 18 0 NIAAQZ = number of data elements per aquifer in IAAQ array - NSAAQZ = VI::intehead::NSAAQZ , // 24 0 NSAAQZ = number of data elements per aquifer in SAAQ array - NXAAQZ = VI::intehead::NXAAQZ , // 10 0 NXAAQZ = number of data elements per aquifer in XAAQ array - NICAQZ = VI::intehead::NICAQZ , // 7 0 NSCAQZ= number of data elements per aquifer connection in SCAQ array - NSCAQZ = VI::intehead::NSCAQZ , // 2 0 - NACAQZ = VI::intehead::NACAQZ , // 4 0 - ih_048 = 48 , // 0 0 - ih_049 = 49 , // 1 // has been determined by testing - ih_050 = 50 , // 1 // has been determined by testing - ih_051 = 51 , // 0 0 - ih_052 = 52 , // 0 0 - ih_053 = 53 , // 0 0 - ih_054 = 54 , // 0 0 - ih_055 = 55 , // 0 0 - ih_056 = 56 , // 0 0 - ih_057 = 57 , // 0 0 - ih_058 = 58 , // 0 0 - ih_059 = 59 , // 0 0 - ih_060 = 60 , // 0 0 - ih_061 = 61 , // 0 0 - ih_062 = 62 , // 0 0 - ih_063 = 63 , // 0 0 - DAY = 64 , // IDAY 2 IDAY = calendar day at this report time - MONTH = 65 , // IMON 6 IMON = calendar month at this report time - YEAR = 66 , // IYEAR 2016 IYEAR = calendar year at this report time - NUM_SOLVER_STEPS = 67 , // The number of solver steps the simulator has performed so far. - REPORT_STEP = 68 , // The sequence/report number for for this restart file. - ih_069 = 69 , // 0 0 - ih_070 = 70 , // 0 0 - ih_071 = 71 , // 0 0 - ih_072 = 72 , // 0 0 - ih_073 = 73 , // 0 0 - ih_074 = 74 , // 0 0 - ih_075 = 75 , // 0 0 - ih_076 = 76 , // 0 0 2 - ih_077 = 77 , // 0 0 - ih_078 = 78 , // 0 0 - ih_079 = 79 , // 0 0 - NEWTMX = 80 , // 0 0 Tuning,Record3,Item1 - NEWTMN = 81 , // 0 0 Tuning,Record3,Item2 - LITMAX = 82 , // 0 0 Tuning,Record3,Item3 - LITMIN = 83 , // 0 0 Tuning,Record3,Item4 - ih_084 = 84 , // 0 0 Tuning,Record3,Item5 - ih_085 = 85 , // 0 0 Tuning,Record3,Item6 - MXWSIT = 86 , // 0 0 - MXWPIT = 87 , // 0 0 - ih_088 = 88 , // 0 0 - NTFIP = 89 , // 0 0 REGDIMS item1, or TABDIMS item 5 - ih_090 = 90 , // 0 0 - ih_091 = 91 , // 0 0 - ih_092 = 92 , // 0 0 - ih_093 = 93 , // 0 0 - IPROG = 94 , // 0 100 IPROG = simulation program identifier: 100 - ECLIPSE 100, 300 - ECLIPSE 300, 500 - ECLIPSE 300 (thermal option), negative - Other simulator - INITSIZE = 95 , // 0 0 - ih_096 = 96 , // 0 0 - ih_097 = 97 , // 0 0 - ih_098 = 98 , // 0 0 - NMFIPR = 99 , // 0 0 REGDIMS item2 - ih_100 = 100 , // 0 0 - ih_101 = 101 , // 0 0 1 - ih_102 = 102 , // 0 0 - ih_103 = 103 , // 0 0 1 - ih_104 = 104 , // 0 0 - ih_105 = 105 , // 0 0 - ih_106 = 106 , // 0 0 - ih_107 = 107 , // 0 0 - ih_108 = 108 , // 0 0 - ih_109 = 109 , // 0 0 - ih_110 = 110 , // 0 0 - ih_111 = 111 , // 0 0 - ih_112 = 112 , // 0 0 - ih_113 = 113 , // 0 0 - ih_114 = 114 , // 0 0 - ih_115 = 115 , // 0 0 - ih_116 = 116 , // 0 0 - ih_117 = 117 , // 0 0 - ih_118 = 118 , // 0 0 - ih_119 = 119 , // 0 0 - ih_120 = 120 , // 0 0 - ih_121 = 121 , // 0 0 - ih_122 = 122 , // 0 0 - ih_123 = 123 , // 0 0 - ih_124 = 124 , // 0 0 - ih_125 = 125 , // 0 0 - ih_126 = 126 , // 0 0 - ih_127 = 127 , // 0 0 - ih_128 = 128 , // 0 0 - ih_129 = 129 , // 0 0 - ih_130 = 130 , // 0 0 - NODMAX = 131 , // 0 0 NODMAX = maximum number of nodes in extended network option - NBRMAX = 132 , // 0 0 NBRMAX = maximum number of branches in extended network option - NIBRAN = 133 , // 0 0 NIBRAN = number of entries per branch in the IBRAN array - NRBRAN = 134 , // 0 0 NRBRAN = number of tries per branch in the RBRAN array - NINODE = 135 , // 0 0 NINODE = number of entries per node in the INODE array - NRNODE = 136 , // 0 0 NRNODE = number of entries per node in the RNODE array - NZNODE = 137 , // 0 0 NZNODE = number of entries per node in the ZNODE array - NINOBR = 138 , // 0 0 NINOBR = size of the INOBR array - ih_139 = 139 , // 0 0 - ih_140 = 140 , // 0 0 - ih_141 = 141 , // 0 0 - ih_142 = 142 , // 0 0 - ih_143 = 143 , // 0 0 - ih_144 = 144 , // 0 0 - ih_145 = 145 , // 0 0 - ih_146 = 146 , // 0 0 - ih_147 = 147 , // 0 0 - ih_148 = 148 , // 0 0 - ih_149 = 149 , // 0 0 - ih_150 = 150 , // 0 0 - ih_151 = 151 , // 0 0 - ih_152 = 152 , // 0 0 - ih_153 = 153 , // 0 0 - ih_154 = 154 , // 0 0 - ih_155 = 155 , // 0 0 - ih_156 = 156 , // 0 0 - ih_157 = 157 , // 0 0 - ih_158 = 158 , // 0 0 - ih_159 = 159 , // 0 0 - ih_160 = 160 , // 0 0 - ih_161 = 161 , // 0 0 - NGCAUS = 162 , // 0 0 NGCAUS = maximum number of aquifer connections actually used. - ih_163 = 163 , // 0 0 - ih_164 = 164 , // 0 0 - ih_165 = 165 , // 0 0 - ih_166 = 166 , // 0 0 - ih_167 = 167 , // 0 0 - ih_168 = 168 , // 0 0 - ih_169 = 169 , // 0 0 - ih_170 = 170 , // 0 0 - ih_171 = 171 , // 0 0 - ih_172 = 172 , // 0 0 - ih_173 = 173 , // 0 0 - NSEGWL = VI::intehead::NSEGWL , // 0 0 number of mswm wells defined with WELSEG - NSWLMX = VI::intehead::NSWLMX , // NSWLMX 0 Item 1 in WSEGDIMS keyword (runspec section) NSWLMX = maximum number of segmented wells - NSEGMX = VI::intehead::NSEGMX , // NSEGMX 0 Item 2 in WSEGDIMS keyword (runspec section) NSEGMX = maximum number of segments per well - NLBRMX = VI::intehead::NLBRMX , // NLBRMX 0 Item 3 in WSEGDIMS keyword (runspec section) NLBRMX = maximum number of lateral branches per well - NISEGZ = VI::intehead::NISEGZ , // 22 0 22 NISEGZ = number of entries per segment in ISEG array - NRSEGZ = VI::intehead::NRSEGZ , // 146 0 140 NRSEGZ = number of entries per segment in RSEG array - NILBRZ = VI::intehead::NILBRZ , // 10 10 NILBRZ = number of entries per segment in ILBR array - RSTSIZE = 181 , // 0 - ih_182 = 182 , // 0 - ih_183 = 183 , // 0 - ih_184 = 184 , // 0 - ih_185 = 185 , // 0 - ih_186 = 186 , // 0 - ih_187 = 187 , // 0 - ih_188 = 188 , // 0 - ih_189 = 189 , // 0 - ih_190 = 190 , // 0 - ih_191 = 191 , // 0 - ih_192 = 192 , // 0 - ih_193 = 193 , // 0 - ih_194 = 194 , // 0 - ih_195 = 195 , // 0 - ih_196 = 196 , // 0 - ih_197 = 197 , // 0 - ih_198 = 198 , // 0 - ih_199 = 199 , // 0 - ih_200 = 200 , // 0 - ih_201 = 201 , // 0 - ih_202 = 202 , // 0 - ih_203 = 203 , // 0 - ih_204 = 204 , // 0 - ih_205 = 205 , // 0 - IHOURZ = 206 , // IHOURZ IHOURZ = current simulation time HH:MM:SS – number of hours (HH) (0-23). - IMINTS = 207 , // IMINTS IMINTS = current simulation time HH:MM:SS - number of minutes (MM) (0-59). - ih_208 = 208 , // 0 - ih_209 = 209 , // 0 - ih_210 = 210 , // 0 - ih_211 = 211 , // 0 - ih_212 = 212 , // 0 - ih_213 = 213 , // 0 - ih_214 = 214 , // 0 - ih_215 = 215 , // 0 - ih_216 = 216 , // 0 - ih_217 = 217 , // 0 - ih_218 = 218 , // 0 - ih_219 = 219 , // 0 - ih_220 = 220 , // 0 - ih_221 = 221 , // 0 - ih_222 = 222 , // 0 - NIIAQN = 223 , // 0 NIIAQN = number of lines of integer AQUNUM data. - NIRAQN = 224 , // 0 NIRAQN = number of lines of real AQUNUM data. - ih_225 = 225 , // 0 - NUMAQN = 226 , // 0 NUMAQN = number of lines of AQUNUM data entered. - ih_227 = 227 , // 0 - ih_228 = 228 , // 0 - ih_229 = 229 , // 0 - ih_230 = 230 , // 0 - ih_231 = 231 , // 0 - ih_232 = 232 , // 0 - ih_233 = 233 , // 0 - NICOTZ = 234 , // 0 NICOTZ = number of entries in the ICOT array - NXCOTZ = 235 , // 0 NXCOTZ = number of entries in the XCOT array - NIWETZ = 236 , // 0 NIWETZ = number of entries in the IWET array - NXWETZ = 237 , // 0 NXWETZ = number of entries in the XWET array - NIGRTZ = 238 , // 0 NIGRTZ = number of entries in the IGRT array - NXGRTZ = 239 , // 0 NXGRTZ = number of entries in the XGRT array - NSTRA2 = 240 , // 0 NSTRA2 = number of tracers + 2 - ih_241 = 241 , // 0 - ih_242 = 242 , // 0 - ih_243 = 243 , // 0 - ih_244 = 244 , // 0 - ih_245 = 245 , // 0 - ih_246 = 246 , // 0 - ih_247 = 247 , // 0 - ih_248 = 248 , // 0 - ih_249 = 249 , // 0 - ih_250 = 250 , // 0 - ih_251 = 251 , // 0 - MAAQID = 252 , // 0 MAAQID = maximum number of analytic aquifers - ih_253 = 253 , // 0 - ih_254 = 254 , // 0 - ih_255 = 255 , // 0 - ih_256 = 256 , // 0 - ih_257 = 257 , // 0 - ih_258 = 258 , // 0 - ih_259 = 259 , // 0 - ih_260 = 260 , // 0 - ih_261 = 261 , // 0 - ih_262 = 262 , // 0 - ih_263 = 263 , // 0 - ih_264 = 264 , // 0 - ih_265 = 265 , // 0 - ih_266 = 266 , // 0 - ih_267 = 267 , // 0 - ih_268 = 268 , // 0 - ih_269 = 269 , // 0 - ih_270 = 270 , // 0 - NCRDMX = 271 , // 0 NCRDMX = maximum number of chord segment links per well - ih_272 = 272 , // 0 - ih_273 = 273 , // 0 - ih_274 = 274 , // 0 - ih_275 = 275 , // 0 - ih_276 = 276 , // 0 - ih_277 = 277 , // 0 - ih_278 = 278 , // 0 - ih_279 = 279 , // 0 - ih_280 = 280 , // 0 - ih_281 = 281 , // 0 - ih_282 = 282 , // 0 - ih_283 = 283 , // 0 - ih_284 = 284 , // 0 - ih_285 = 285 , // 0 - ih_286 = 286 , // 0 - ih_287 = 287 , // 0 - ih_288 = 288 , // 0 - ih_289 = 289 , // 0 - ih_290 = 290 , // 0 - ih_291 = 291 , // 0 - ih_292 = 292 , // 0 - ih_293 = 293 , // 0 - ih_294 = 294 , // 0 - ih_295 = 295 , // 0 - ih_296 = 296 , // 0 - ih_297 = 297 , // 0 - ih_298 = 298 , // 0 - ih_299 = 299 , // 0 - ih_300 = 300 , // 0 - ih_301 = 301 , // 0 - ih_302 = 302 , // 0 - ih_303 = 303 , // 0 - ih_304 = 304 , // 0 - ih_305 = 305 , // 0 - ih_306 = 306 , // 0 - ih_307 = 307 , // 0 - ih_308 = 308 , // 0 - ih_309 = 309 , // 0 - ih_310 = 310 , // 0 - ih_311 = 311 , // 0 - ih_312 = 312 , // 0 - ih_313 = 313 , // 0 - ih_314 = 314 , // 0 - ih_315 = 315 , // 0 - ih_316 = 316 , // 0 - ih_317 = 317 , // 0 - ih_318 = 318 , // 0 - ih_319 = 319 , // 0 - ih_320 = 320 , // 0 - ih_321 = 321 , // 0 - ih_322 = 322 , // 0 - ih_323 = 323 , // 0 - ih_324 = 324 , // 0 - ih_325 = 325 , // 0 - ih_326 = 326 , // 0 - ih_327 = 327 , // 0 - ih_328 = 328 , // 0 - ih_329 = 329 , // 0 - ih_330 = 330 , // 0 - ih_331 = 331 , // 0 - ih_332 = 332 , // 0 - ih_333 = 333 , // 0 - ih_334 = 334 , // 0 - ih_335 = 335 , // 0 - ih_336 = 336 , // 0 - ih_337 = 337 , // 0 - ih_338 = 338 , // 0 - ih_339 = 339 , // 0 - ih_340 = 340 , // 0 - ih_341 = 341 , // 0 - ih_342 = 342 , // 0 - ih_343 = 343 , // 0 - ih_344 = 344 , // 0 - ih_345 = 345 , // 0 - ih_346 = 346 , // 0 - ih_347 = 347 , // 0 - ih_348 = 348 , // 0 - ih_349 = 349 , // 0 - ih_350 = 350 , // 0 - ih_351 = 351 , // 0 - ih_352 = 352 , // 0 - ih_353 = 353 , // 0 - ih_354 = 354 , // 0 - ih_355 = 355 , // 0 - ih_356 = 356 , // 0 - ih_357 = 357 , // 0 - ih_358 = 358 , // 0 - ih_359 = 359 , // 0 - ih_360 = 360 , // 0 - ih_361 = 361 , // 0 - ih_362 = 362 , // 0 - ih_363 = 363 , // 0 - ih_364 = 364 , // 0 - ih_365 = 365 , // 0 - ih_366 = 366 , // 0 - ih_367 = 367 , // 0 - ih_368 = 368 , // 0 - ih_369 = 369 , // 0 - ih_370 = 370 , // 0 - ih_371 = 371 , // 0 - ih_372 = 372 , // 0 - ih_373 = 373 , // 0 - ih_374 = 374 , // 0 - ih_375 = 375 , // 0 - ih_376 = 376 , // 0 - ih_377 = 377 , // 0 - ih_378 = 378 , // 0 - ih_379 = 379 , // 0 - ih_380 = 380 , // 0 - ih_381 = 381 , // 0 - ih_382 = 382 , // 0 - ih_383 = 383 , // 0 - ih_384 = 384 , // 0 - ih_385 = 385 , // 0 - ih_386 = 386 , // 0 - ih_387 = 387 , // 0 - ih_388 = 388 , // 0 - ih_389 = 389 , // 0 - ih_390 = 390 , // 0 - ih_391 = 391 , // 0 - ih_392 = 392 , // 0 - ih_393 = 393 , // 0 - ih_394 = 394 , // 0 - ih_395 = 395 , // 0 - ih_396 = 396 , // 0 - ih_397 = 397 , // 0 - ih_398 = 398 , // 0 - ih_399 = 399 , // 0 - ih_400 = 400 , // 0 - ih_401 = 401 , // 0 - ih_402 = 402 , // 0 - ih_403 = 403 , // 0 - ih_404 = 404 , // 0 - ih_405 = 405 , // 0 - ih_406 = 406 , // 0 - ih_407 = 407 , // 0 - ih_408 = 408 , // 0 - ih_409 = 409 , // 0 - ISECND = 410 , // 0 ISECND = current simulation time HH:MM:SS - number of seconds (SS), reported in microseconds (0-59,999,999) - - // --------------------------------------------------------------------- - // --------------------------------------------------------------------- + ISNUM = VI::intehead::ISNUM, // 0 0 An encoded integer corresponding to the time the file was created. For files not originating from ECLIPSE, this value may be set to zero. + VERSION = VI::intehead::VERSION, // 0 0 + UNIT = VI::intehead::UNIT, // (1,2,3) 1 units type: 1 - METRIC, 2 - FIELD, 3 - LAB + ih_003 = 3 , // 0 0 + ih_004 = 4 , // 0 0 + ih_005 = 5 , // 0 0 + ih_006 = 6 , // 0 0 + ih_007 = 7 , // 0 0 + NX = VI::intehead::NX, // NX 137 Grid x-direction dimension, NX + NY = VI::intehead::NY, // NY 236 Grid x-direction dimension, NY + NZ = VI::intehead::NZ, // NZ 58 Grid x-direction dimension, NZ + NACTIV = VI::intehead::NACTIV, // NACTIV? 89022 NACTIV = number of active cells + ih_012 = 12 , // 0 0 + ih_013 = 13 , // 0 0 + PHASE = VI::intehead::PHASE, // IPHS 7 IPHS = phase indicator: 1 - oil, 2 - water, 3 - oil/water, 4 - gas, 5 – oil/gas, 6 - gas/water, 7 - oil/water/gas (ECLIPSE output only) + ih_015 = 15 , // 0 0 + NWELLS = VI::intehead::NWELLS, // NWELLS 39 NWELL = number of wells + NCWMAX = VI::intehead::NCWMAX, // NCWMAX 108 Weldims item2 NCWMAX = maximum number of completions per well + NGRP = 18 , // NGRP? 0 Number of actual groups + NWGMAX = VI::intehead::NWGMAX, // NWGMAX 0 maximum of weldims item3 or item4 NWGMAX = maximum number of wells in any well group + NGMAXZ = VI::intehead::NGMAXZ, // NGMAXZ 0 weldims item3 + 1 NGMAXZ = maximum number of groups in field + ih_021 = 21 , // 0 0 + ih_022 = 22 , // 0 0 + ih_023 = 23 , // 0 0 + NIWELZ = VI::intehead::NIWELZ, // NIWELZ 155 155 NIWELZ = no of data elements per well in IWEL array (default 97 for ECLIPSE, 94 for ECLIPSE 300) + NSWELZ = VI::intehead::NSWELZ, // NSWELZ 122 122 NSWELZ = number of daelements per well in SWEL array + NXWELZ = VI::intehead::NXWELZ, // NXWELZ 130 130 NXWELZ = number of delements per well in XWEL array + NZWELZ = VI::intehead::NZWELZ, // NZWEL 3 3 NZWEL = no of 8-character words per well in ZWEL array (= 3) + ih_028 = 28 , // 0 0 + ih_029 = 29 , // 0 0 + ih_030 = 30 , // 0 0 + ih_031 = 31 , // 0 0 + NICONZ = VI::intehead::NICONZ, // 25 15 25 NICON = no of data elements per completion in ICON array (default 19) + NSCONZ = VI::intehead::NSCONZ, // 40 0 NSCONZ = number of data elements per completion in SCON array + NXCONZ = VI::intehead::NXCONZ, // 58 0 58 NXCONZ = number of data elements per completion in XCON array + ih_035 = 35 , // 0 0 + NIGRPZ = VI::intehead::NIGRPZ, // 97+intehead_array[19] 0 97 + intehead[19] NIGRPZ = no of data elements per group in IGRP array + NSGRPZ = VI::intehead::NSGRPZ, // 112 0 112 NSGRPZ = number of data elements per group in SGRP array + NXGRPZ = VI::intehead::NXGRPZ, // 180 0 180 NXGRPZ = number of data elements per group in XGRP array + NZGRPZ = VI::intehead::NZGRPZ, // 5 0 NZGRPZ = number of data elements per group in ZGRP array + ih_040 = 40 , // 0 0 + NCAMAX = VI::intehead::NCAMAX, // 1 0 NCAMAX = maximum number of analytic aquifer connections + NIAAQZ = VI::intehead::NIAAQZ, // 18 0 NIAAQZ = number of data elements per aquifer in IAAQ array + NSAAQZ = VI::intehead::NSAAQZ, // 24 0 NSAAQZ = number of data elements per aquifer in SAAQ array + NXAAQZ = VI::intehead::NXAAQZ, // 10 0 NXAAQZ = number of data elements per aquifer in XAAQ array + NICAQZ = VI::intehead::NICAQZ, // 7 0 NSCAQZ= number of data elements per aquifer connection in SCAQ array + NSCAQZ = VI::intehead::NSCAQZ, // 2 0 + NACAQZ = VI::intehead::NACAQZ, // 4 0 + ih_048 = 48 , // 0 0 + ih_049 = 49 , // 1 // has been determined by testing + ih_050 = 50 , // 1 // has been determined by testing + ih_051 = 51 , // 0 0 + ih_052 = 52 , // 0 0 + ih_053 = 53 , // 0 0 + ih_054 = 54 , // 0 0 + ih_055 = 55 , // 0 0 + ih_056 = 56 , // 0 0 + ih_057 = 57 , // 0 0 + ih_058 = 58 , // 0 0 + ih_059 = 59 , // 0 0 + ih_060 = 60 , // 0 0 + ih_061 = 61 , // 0 0 + ih_062 = 62 , // 0 0 + ih_063 = 63 , // 0 0 + DAY = 64 , // IDAY 2 IDAY = calendar day at this report time + MONTH = 65 , // IMON 6 IMON = calendar month at this report time + YEAR = 66 , // IYEAR 2016 IYEAR = calendar year at this report time + NUM_SOLVER_STEPS = 67 , // The number of solver steps the simulator has performed so far. + REPORT_STEP = 68 , // The sequence/report number for for this restart file. + ih_069 = 69 , // 0 0 + ih_070 = 70 , // 0 0 + ih_071 = 71 , // 0 0 + ih_072 = 72 , // 0 0 + ih_073 = 73 , // 0 0 + ih_074 = 74 , // 0 0 + ih_075 = 75 , // 0 0 + ih_076 = 76 , // 0 0 2 + ih_077 = 77 , // 0 0 + ih_078 = 78 , // 0 0 + ih_079 = 79 , // 0 0 + NEWTMX = 80 , // 0 0 Tuning,Record3,Item1 + NEWTMN = 81 , // 0 0 Tuning,Record3,Item2 + LITMAX = 82 , // 0 0 Tuning,Record3,Item3 + LITMIN = 83 , // 0 0 Tuning,Record3,Item4 + ih_084 = 84 , // 0 0 Tuning,Record3,Item5 + ih_085 = 85 , // 0 0 Tuning,Record3,Item6 + MXWSIT = 86 , // 0 0 + MXWPIT = 87 , // 0 0 + ih_088 = 88 , // 0 0 + NTFIP = 89 , // 0 0 REGDIMS item1, or TABDIMS item 5 + ih_090 = 90 , // 0 0 + ih_091 = 91 , // 0 0 + ih_092 = 92 , // 0 0 + ih_093 = 93 , // 0 0 + IPROG = 94 , // 0 100 IPROG = simulation program identifier: 100 - ECLIPSE 100, 300 - ECLIPSE 300, 500 - ECLIPSE 300 (thermal option), negative - Other simulator + INITSIZE = 95 , // 0 0 + ih_096 = 96 , // 0 0 + ih_097 = 97 , // 0 0 + ih_098 = 98 , // 0 0 + NMFIPR = 99 , // 0 0 REGDIMS item2 + ih_100 = 100 , // 0 0 + ih_101 = 101 , // 0 0 1 + ih_102 = 102 , // 0 0 + ih_103 = 103 , // 0 0 1 + ih_104 = 104 , // 0 0 + ih_105 = 105 , // 0 0 + ih_106 = 106 , // 0 0 + ih_107 = 107 , // 0 0 + ih_108 = 108 , // 0 0 + ih_109 = 109 , // 0 0 + ih_110 = 110 , // 0 0 + ih_111 = 111 , // 0 0 + ih_112 = 112 , // 0 0 + ih_113 = 113 , // 0 0 + ih_114 = 114 , // 0 0 + ih_115 = 115 , // 0 0 + ih_116 = 116 , // 0 0 + ih_117 = 117 , // 0 0 + ih_118 = 118 , // 0 0 + ih_119 = 119 , // 0 0 + ih_120 = 120 , // 0 0 + ih_121 = 121 , // 0 0 + ih_122 = 122 , // 0 0 + ih_123 = 123 , // 0 0 + ih_124 = 124 , // 0 0 + ih_125 = 125 , // 0 0 + ih_126 = 126 , // 0 0 + ih_127 = 127 , // 0 0 + ih_128 = 128 , // 0 0 + ih_129 = 129 , // 0 0 + ih_130 = 130 , // 0 0 + NODMAX = 131 , // 0 0 NODMAX = maximum number of nodes in extended network option + NBRMAX = 132 , // 0 0 NBRMAX = maximum number of branches in extended network option + NIBRAN = 133 , // 0 0 NIBRAN = number of entries per branch in the IBRAN array + NRBRAN = 134 , // 0 0 NRBRAN = number of tries per branch in the RBRAN array + NINODE = 135 , // 0 0 NINODE = number of entries per node in the INODE array + NRNODE = 136 , // 0 0 NRNODE = number of entries per node in the RNODE array + NZNODE = 137 , // 0 0 NZNODE = number of entries per node in the ZNODE array + NINOBR = 138 , // 0 0 NINOBR = size of the INOBR array + ih_139 = 139 , // 0 0 + ih_140 = 140 , // 0 0 + ih_141 = 141 , // 0 0 + ih_142 = 142 , // 0 0 + ih_143 = 143 , // 0 0 + ih_144 = 144 , // 0 0 + ih_145 = 145 , // 0 0 + ih_146 = 146 , // 0 0 + ih_147 = 147 , // 0 0 + ih_148 = 148 , // 0 0 + ih_149 = 149 , // 0 0 + ih_150 = 150 , // 0 0 + ih_151 = 151 , // 0 0 + ih_152 = 152 , // 0 0 + ih_153 = 153 , // 0 0 + ih_154 = 154 , // 0 0 + ih_155 = 155 , // 0 0 + ih_156 = 156 , // 0 0 + ih_157 = 157 , // 0 0 + ih_158 = 158 , // 0 0 + ih_159 = 159 , // 0 0 + ih_160 = 160 , // 0 0 + ih_161 = 161 , // 0 0 + NGCAUS = 162 , // 0 0 NGCAUS = maximum number of aquifer connections actually used. + ih_163 = 163 , // 0 0 + ih_164 = 164 , // 0 0 + ih_165 = 165 , // 0 0 + ih_166 = 166 , // 0 0 + ih_167 = 167 , // 0 0 + ih_168 = 168 , // 0 0 + ih_169 = 169 , // 0 0 + ih_170 = 170 , // 0 0 + ih_171 = 171 , // 0 0 + ih_172 = 172 , // 0 0 + ih_173 = 173 , // 0 0 + NSEGWL = VI::intehead::NSEGWL, // 0 0 number of mswm wells defined with WELSEG + NSWLMX = VI::intehead::NSWLMX, // NSWLMX 0 Item 1 in WSEGDIMS keyword (runspec section) NSWLMX = maximum number of segmented wells + NSEGMX = VI::intehead::NSEGMX, // NSEGMX 0 Item 2 in WSEGDIMS keyword (runspec section) NSEGMX = maximum number of segments per well + NLBRMX = VI::intehead::NLBRMX, // NLBRMX 0 Item 3 in WSEGDIMS keyword (runspec section) NLBRMX = maximum number of lateral branches per well + NISEGZ = VI::intehead::NISEGZ, // 22 0 22 NISEGZ = number of entries per segment in ISEG array + NRSEGZ = VI::intehead::NRSEGZ, // 146 0 140 NRSEGZ = number of entries per segment in RSEG array + NILBRZ = VI::intehead::NILBRZ, // 10 10 NILBRZ = number of entries per segment in ILBR array + RSTSIZE = 181 , // 0 + ih_182 = 182 , // 0 + ih_183 = 183 , // 0 + ih_184 = 184 , // 0 + ih_185 = 185 , // 0 + ih_186 = 186 , // 0 + ih_187 = 187 , // 0 + ih_188 = 188 , // 0 + ih_189 = 189 , // 0 + ih_190 = 190 , // 0 + ih_191 = 191 , // 0 + ih_192 = 192 , // 0 + ih_193 = 193 , // 0 + ih_194 = 194 , // 0 + ih_195 = 195 , // 0 + ih_196 = 196 , // 0 + ih_197 = 197 , // 0 + ih_198 = 198 , // 0 + ih_199 = 199 , // 0 + ih_200 = 200 , // 0 + ih_201 = 201 , // 0 + ih_202 = 202 , // 0 + ih_203 = 203 , // 0 + ih_204 = 204 , // 0 + ih_205 = 205 , // 0 + IHOURZ = 206 , // IHOURZ IHOURZ = current simulation time HH:MM:SS – number of hours (HH) (0-23). + IMINTS = 207 , // IMINTS IMINTS = current simulation time HH:MM:SS - number of minutes (MM) (0-59). + ih_208 = 208 , // 0 + ih_209 = 209 , // 0 + ih_210 = 210 , // 0 + ih_211 = 211 , // 0 + ih_212 = 212 , // 0 + ih_213 = 213 , // 0 + ih_214 = 214 , // 0 + ih_215 = 215 , // 0 + ih_216 = 216 , // 0 + ih_217 = 217 , // 0 + ih_218 = 218 , // 0 + ih_219 = 219 , // 0 + ih_220 = 220 , // 0 + ih_221 = 221 , // 0 + ih_222 = 222 , // 0 + NIIAQN = 223 , // 0 NIIAQN = number of lines of integer AQUNUM data. + NIRAQN = 224 , // 0 NIRAQN = number of lines of real AQUNUM data. + ih_225 = 225 , // 0 + NUMAQN = 226 , // 0 NUMAQN = number of lines of AQUNUM data entered. + ih_227 = 227 , // 0 + ih_228 = 228 , // 0 + ih_229 = 229 , // 0 + ih_230 = 230 , // 0 + ih_231 = 231 , // 0 + ih_232 = 232 , // 0 + ih_233 = 233 , // 0 + NICOTZ = 234 , // 0 NICOTZ = number of entries in the ICOT array + NXCOTZ = 235 , // 0 NXCOTZ = number of entries in the XCOT array + NIWETZ = 236 , // 0 NIWETZ = number of entries in the IWET array + NXWETZ = 237 , // 0 NXWETZ = number of entries in the XWET array + NIGRTZ = 238 , // 0 NIGRTZ = number of entries in the IGRT array + NXGRTZ = 239 , // 0 NXGRTZ = number of entries in the XGRT array + NSTRA2 = 240 , // 0 NSTRA2 = number of tracers + 2 + ih_241 = 241 , // 0 + ih_242 = 242 , // 0 + ih_243 = 243 , // 0 + ih_244 = 244 , // 0 + ih_245 = 245 , // 0 + ih_246 = 246 , // 0 + ih_247 = 247 , // 0 + ih_248 = 248 , // 0 + ih_249 = 249 , // 0 + ih_250 = 250 , // 0 + ih_251 = 251 , // 0 + MAAQID = 252 , // 0 MAAQID = maximum number of analytic aquifers + ih_253 = 253 , // 0 + ih_254 = 254 , // 0 + ih_255 = 255 , // 0 + ih_256 = 256 , // 0 + ih_257 = 257 , // 0 + ih_258 = 258 , // 0 + ih_259 = 259 , // 0 + ih_260 = 260 , // 0 + ih_261 = 261 , // 0 + ih_262 = 262 , // 0 + ih_263 = 263 , // 0 + ih_264 = 264 , // 0 + ih_265 = 265 , // 0 + ih_266 = 266 , // 0 + UDQPAR_1 = VI::intehead::UDQPAR_1, // 0 + ih_268 = 268 , // 0 + ih_269 = 269 , // 0 + ih_270 = 270 , // 0 + NCRDMX = 271 , // 0 NCRDMX = maximum number of chord segment links per well + ih_272 = 272 , // 0 + ih_273 = 273 , // 0 + ih_274 = 274 , // 0 + ih_275 = 275 , // 0 + ih_276 = 276 , // 0 + ih_277 = 277 , // 0 + ih_278 = 278 , // 0 + ih_279 = 279 , // 0 + ih_280 = 280 , // 0 + ih_281 = 281 , // 0 + ih_282 = 282 , // 0 + ih_283 = 283 , // 0 + ih_284 = 284 , // 0 + ih_285 = 285 , // 0 + ih_286 = 286 , // 0 + ih_287 = 287 , // 0 + ih_288 = 288 , // 0 + ih_289 = 289 , // 0 + ih_290 = 290 , // 0 + ih_291 = 291 , // 0 + ih_292 = 292 , // 0 + ih_293 = 293 , // 0 + ih_294 = 294 , // 0 + ih_295 = 295 , // 0 + ih_296 = 296 , // 0 + ih_297 = 297 , // 0 + ih_298 = 298 , // 0 + ih_299 = 299 , // 0 + ih_300 = 300 , // 0 + ih_301 = 301 , // 0 + ih_302 = 302 , // 0 + ih_303 = 303 , // 0 + ih_304 = 304 , // 0 + ih_305 = 305 , // 0 + ih_306 = 306 , // 0 + ih_307 = 307 , // 0 + ih_308 = 308 , // 0 + ih_309 = 309 , // 0 + ih_310 = 310 , // 0 + ih_311 = 311 , // 0 + ih_312 = 312 , // 0 + ih_313 = 313 , // 0 + ih_314 = 314 , // 0 + ih_315 = 315 , // 0 + ih_316 = 316 , // 0 + ih_317 = 317 , // 0 + ih_318 = 318 , // 0 + ih_319 = 319 , // 0 + ih_320 = 320 , // 0 + ih_321 = 321 , // 0 + ih_322 = 322 , // 0 + ih_323 = 323 , // 0 + ih_324 = 324 , // 0 + ih_325 = 325 , // 0 + ih_326 = 326 , // 0 + ih_327 = 327 , // 0 + ih_328 = 328 , // 0 + ih_329 = 329 , // 0 + ih_330 = 330 , // 0 + ih_331 = 331 , // 0 + ih_332 = 332 , // 0 + ih_333 = 333 , // 0 + ih_334 = 334 , // 0 + ih_335 = 335 , // 0 + ih_336 = 336 , // 0 + ih_337 = 337 , // 0 + ih_338 = 338 , // 0 + ih_339 = 339 , // 0 + ih_340 = 340 , // 0 + ih_341 = 341 , // 0 + ih_342 = 342 , // 0 + ih_343 = 343 , // 0 + ih_344 = 344 , // 0 + ih_345 = 345 , // 0 + ih_346 = 346 , // 0 + ih_347 = 347 , // 0 + ih_348 = 348 , // 0 + ih_349 = 349 , // 0 + ih_350 = 350 , // 0 + ih_351 = 351 , // 0 + ih_352 = 352 , // 0 + ih_353 = 353 , // 0 + ih_354 = 354 , // 0 + ih_355 = 355 , // 0 + ih_356 = 356 , // 0 + ih_357 = 357 , // 0 + ih_358 = 358 , // 0 + ih_359 = 359 , // 0 + ih_360 = 360 , // 0 + ih_361 = 361 , // 0 + ih_362 = 362 , // 0 + ih_363 = 363 , // 0 + ih_364 = 364 , // 0 + ih_365 = 365 , // 0 + ih_366 = 366 , // 0 + ih_367 = 367 , // 0 + ih_368 = 368 , // 0 + ih_369 = 369 , // 0 + ih_370 = 370 , // 0 + ih_371 = 371 , // 0 + ih_372 = 372 , // 0 + ih_373 = 373 , // 0 + ih_374 = 374 , // 0 + ih_375 = 375 , // 0 + ih_376 = 376 , // 0 + ih_377 = 377 , // 0 + ih_378 = 378 , // 0 + ih_379 = 379 , // 0 + ih_380 = 380 , // 0 + ih_381 = 381 , // 0 + ih_382 = 382 , // 0 + ih_383 = 383 , // 0 + ih_384 = 384 , // 0 + ih_385 = 385 , // 0 + ih_386 = 386 , // 0 + ih_387 = 387 , // 0 + ih_388 = 388 , // 0 + ih_389 = 389 , // 0 + ih_390 = 390 , // 0 + ih_391 = 391 , // 0 + ih_392 = 392 , // 0 + ih_393 = 393 , // 0 + ih_394 = 394 , // 0 + ih_395 = 395 , // 0 + ih_396 = 396 , // 0 + ih_397 = 397 , // 0 + ih_398 = 398 , // 0 + ih_399 = 399 , // 0 + ih_400 = 400 , // 0 + ih_401 = 401 , // 0 + ih_402 = 402 , // 0 + ih_403 = 403 , // 0 + ih_404 = 404 , // 0 + ih_405 = 405 , // 0 + ih_406 = 406 , // 0 + ih_407 = 407 , // 0 + ih_408 = 408 , // 0 + ih_409 = 409 , // 0 + ISECND = 410 , // 0 ISECND = current simulation time HH:MM:SS - number of seconds (SS), reported in microseconds (0-59,999,999) + // --------------------------------------------------------------------- + // --------------------------------------------------------------------- INTEHEAD_NUMBER_OF_ITEMS // MUST be last element of enum. }; @@ -677,6 +676,14 @@ ngroups(const Group& gr) return *this; } +Opm::RestartIO::InteHEAD& +Opm::RestartIO::InteHEAD:: +udqParam_1(const UdqParam& udq_par) +{ + this -> data_[UDQPAR_1] = - udq_par.udqParam_1; + + return *this; +} // ===================================================================== // Free functions (calendar/time utilities) diff --git a/src/opm/parser/eclipse/EclipseState/Schedule/UDQ/UDQParams.cpp b/src/opm/parser/eclipse/EclipseState/Schedule/UDQ/UDQParams.cpp index 4a88ce349..b58bb9422 100644 --- a/src/opm/parser/eclipse/EclipseState/Schedule/UDQ/UDQParams.cpp +++ b/src/opm/parser/eclipse/EclipseState/Schedule/UDQ/UDQParams.cpp @@ -88,6 +88,9 @@ namespace Opm { this->m_true_rng.seed( seed ); } + int UDQParams::rand_seed() const noexcept { + return this->random_seed; + } double UDQParams::range() const noexcept { return this->value_range; diff --git a/tests/UDQ_TEST_WCONPROD_IUAD-2.DATA b/tests/UDQ_TEST_WCONPROD_IUAD-2.DATA index e5075ebed..cc97d4752 100644 --- a/tests/UDQ_TEST_WCONPROD_IUAD-2.DATA +++ b/tests/UDQ_TEST_WCONPROD_IUAD-2.DATA @@ -336,13 +336,18 @@ UDQ DEFINE WUOPRL (WOPR PROD1 - 150) * 0.90 / DEFINE WULPRL (WLPR PROD1 - 200) * 0.90 / DEFINE WUOPRU (WOPR PROD2 - 250) * 0.80 / +DEFINE GUOPRU (GOPR WGRP2 - 449) * 0.77 / DEFINE WULPRU (WLPR PROD2 - 300) * 0.80 / +ASSIGN WULPRL 400. / +DEFINE FULPR (FLPR - 543) * 0.65 / DEFINE WUOPRL (WOPR PROD1 - 170) * 0.60 / -- units UNITS WUOPRL SM3/DAY / UNITS WULPRL SM3/DAY / +UNITS GUOPRU SM3/DAY / UNITS WUOPRU SM3/DAY / UNITS WULPRU SM3/DAY / +UNITS FULPR SM3/DAY / -- / diff --git a/tests/test_UDQ_x_file.cpp b/tests/test_UDQ_x_file.cpp index 55fef37ff..41a5009f5 100644 --- a/tests/test_UDQ_x_file.cpp +++ b/tests/test_UDQ_x_file.cpp @@ -90,8 +90,9 @@ struct SimulationCase BOOST_AUTO_TEST_SUITE(Aggregate_UDQ) -// test dimensions of multisegment data -BOOST_AUTO_TEST_CASE (Constructor) + +// test constructed UDQ restart data +BOOST_AUTO_TEST_CASE (Declared_UDQ_data) { const auto simCase = SimulationCase{first_sim("UDQ_TEST_WCONPROD_IUAD-2.DATA")}; @@ -117,17 +118,70 @@ BOOST_AUTO_TEST_CASE (Constructor) double secs_elapsed = 3.1536E07; const auto ih = Opm::RestartIO::Helpers::createInteHead(es, grid, sched, secs_elapsed, rptStep, rptStep); + //set dummy value for next_step_size + const double next_step_size= 0.1; + const auto dh = Opm::RestartIO::Helpers::createDoubHead(es, sched, rptStep, + secs_elapsed, next_step_size); const auto udqDims = Opm::RestartIO::Helpers::createUdqDims(sched, rptStep, ih); auto udqData = Opm::RestartIO::Helpers::AggregateUDQData(udqDims); udqData.captureDeclaredUDQData(sched, rptStep, ih); - //rstFile.write("IUDQ", udqData.getIUDQ()); - //rstFile.write("IUAD", udqData.getIUAD()); - //rstFile.write("ZUDN", udqData.getZUDN()); - //rstFile.write("ZUDL", udqData.getZUDL()); + rstFile.write("IUDQ", udqData.getIUDQ()); + rstFile.write("IUAD", udqData.getIUAD()); + rstFile.write("IGPH", udqData.getIGPH()); + rstFile.write("ZUDN", udqData.getZUDN()); + rstFile.write("ZUDL", udqData.getZUDL()); { + /* + Check of InteHEAD and DoubHEAD data for UDQ variables + + INTEHEAD + + UDQPARAM (1) = - InteHead [267 ] + + --------------------------------------------------------------------------------------------------------------------- + + DOUBHEAD + + UDQPARAM (2) = Doubhead [212] + UDQPARAM (3) = Doubhead [213] + UDQPARAM (4) = Doubhead [214] + + */ + + BOOST_CHECK_EQUAL(ih[267] , -1); + BOOST_CHECK_EQUAL(dh[212] , 1.0E+20); + BOOST_CHECK_EQUAL(dh[213] , 0.0); + BOOST_CHECK_EQUAL(dh[214] , 1.0E-4); + + } + + + { + /* + IUDQ + 3- integers pr UDQ (line/quantity) + + Integer no 1 = type of UDQ ( 0 - ASSIGN, UPDATE-OFF + 1-update+NEXT, + 2 - DEFINE, 2- UPDATE-ON + 3 - units) + + Integer no 2 = -4 : used for ASSIGN - numerical value + -4 : used for DEFINE + -1 : used for DEFINE MIN() function, SUM() function, AVEA() function + -4 : used for DEFINE MAX() - function - also used for SUM() function - must check on (-1 - value) + 1 : used for UPDATE quantity + + Integer no 3 = sequence number of UDQ pr type (CU, FU, GU, RU, , SU, WU, AU or BU etc.) + (1 - based) + + NOTE: UPDATE - does not define a new quantity, only updates an alredy defined quantity! + */ + + const auto& iUdq = udqData.getIUDQ(); auto start = 0*udqDims[1]; @@ -135,36 +189,165 @@ BOOST_AUTO_TEST_CASE (Constructor) BOOST_CHECK_EQUAL(iUdq[start + 1] , -4); // udq NO. 1 - (-4 - DEFINE / ASSIGN BOOST_CHECK_EQUAL(iUdq[start + 2] , 1); // udq NO. 1 - (sequence number of UDQ pr type (CU, FU, GU, RU, , SU, WU, AU or BU etc.) - auto start = 1*udqDims[1]; + start = 1*udqDims[1]; BOOST_CHECK_EQUAL(iUdq[start + 0] , 0); // udq NO. 2 - ( 0 - ASSIGN, 2 - DEFINE) BOOST_CHECK_EQUAL(iUdq[start + 1] , -4); // udq NO. 2 - (-4 - DEFINE / ASSIGN BOOST_CHECK_EQUAL(iUdq[start + 2] , 2); // udq NO. 2 - (sequence number of UDQ pr type (CU, FU, GU, RU, , SU, WU, AU or BU etc.) - auto start = 2*udqDims[1]; + start = 2*udqDims[1]; BOOST_CHECK_EQUAL(iUdq[start + 0] , 2); // udq NO. 2 - ( 0 - ASSIGN, 2 - DEFINE) BOOST_CHECK_EQUAL(iUdq[start + 1] , -4); // udq NO. 2 - (-4 - DEFINE / ASSIGN BOOST_CHECK_EQUAL(iUdq[start + 2] , 3); // udq NO. 2 - (sequence number of UDQ pr type (CU, FU, GU, RU, , SU, WU, AU or BU etc.) - auto start = 3*udqDims[1]; + start = 3*udqDims[1]; BOOST_CHECK_EQUAL(iUdq[start + 0] , 2); // udq NO. 2 - ( 0 - ASSIGN, 2 - DEFINE) BOOST_CHECK_EQUAL(iUdq[start + 1] , -4); // udq NO. 2 - (-4 - DEFINE / ASSIGN BOOST_CHECK_EQUAL(iUdq[start + 2] , 1); // udq NO. 2 - (sequence number of UDQ pr type (CU, FU, GU, RU, , SU, WU, AU or BU etc.) - auto start = 4*udqDims[1]; + start = 4*udqDims[1]; BOOST_CHECK_EQUAL(iUdq[start + 0] , 2); // udq NO. 2 - ( 0 - ASSIGN, 2 - DEFINE) BOOST_CHECK_EQUAL(iUdq[start + 1] , -4); // udq NO. 2 - (-4 - DEFINE / ASSIGN BOOST_CHECK_EQUAL(iUdq[start + 2] , 4); // udq NO. 2 - (sequence number of UDQ pr type (CU, FU, GU, RU, , SU, WU, AU or BU etc.) - auto start = 5*udqDims[1]; + start = 5*udqDims[1]; BOOST_CHECK_EQUAL(iUdq[start + 0] , 2); // udq NO. 2 - ( 0 - ASSIGN, 2 - DEFINE) BOOST_CHECK_EQUAL(iUdq[start + 1] , -4); // udq NO. 2 - (-4 - DEFINE / ASSIGN BOOST_CHECK_EQUAL(iUdq[start + 2] , 1); // udq NO. 2 - (sequence number of UDQ pr type (CU, FU, GU, RU, , SU, WU, AU or BU etc.) } + { + /* + IUAD: + Sequences of 5 items pr UDQ that is used for various well and group controls, + i.e. sorted on the various active controls, see list for item (1).This means that + one udq can occur several times, one for each control it is used for + Only the active controls are output - and the sequence is according to when + they are defined - - + dimension 5*no_of_udq-constraint-used in well and group controls + + item (1) : = 200000 + 19 for GCONPROD and ORAT + 300000 + 19 for GCONPROD and WRAT + 400000 + 19 for GCONPROD and GRAT + 500000 + 19 for GCONPROD and LRAT + 300000 + 4 for WCONPROD + oil rate target or upper limit + 400000 + 4 for WCONPROD + water rate target or upper limit + 500000 + 4 for WCONPROD + gas rate target or upper limit + 600000 + 4 for WCONPROD + liquid rate target or upper limit + ? 300000 + 3 for WCONINJE + oil rate target or upper limit + 400000 + 3 for WCONINJE + surface rate target or upper limit + 500000 + 3 for WCONINJE + reservoir volume rate target or upper limit + 1000000 + 27 for CECON + minimum oil rate + + item (2) - sequence number of UDQ used (from input sequence) for the actual constraint/target + + item (3) - do not know yet (value: 1) + item (4) - number of times the UDQ variable is used (e.g. for several different wells) + item (5) - the sequence number for the first use of the actual UDQ (index i+1) = 1+sum over (no_use_udq(i)) + */ + + const auto& iUad = udqData.getIUAD(); + + auto start = 0*udqDims[3]; + BOOST_CHECK_EQUAL(iUad[start + 0] , 300004); // iuad NO. 1 + BOOST_CHECK_EQUAL(iUad[start + 1] , 3); // iuad NO. 1 + BOOST_CHECK_EQUAL(iUad[start + 2] , 1); // iuad NO. 1 + BOOST_CHECK_EQUAL(iUad[start + 3] , 2); // iuad NO. 1 + BOOST_CHECK_EQUAL(iUad[start + 4] , 1); // iuad NO. 1 + + start = 1*udqDims[3]; + BOOST_CHECK_EQUAL(iUad[start + 0] , 600004); // iuad NO. 2 + BOOST_CHECK_EQUAL(iUad[start + 1] , 5); // iuad NO. 2 + BOOST_CHECK_EQUAL(iUad[start + 2] , 1); // iuad NO. 2 + BOOST_CHECK_EQUAL(iUad[start + 3] , 2); // iuad NO. 2 + BOOST_CHECK_EQUAL(iUad[start + 4] , 3); // iuad NO. 2 + } + { + /* + ZUDN: + contains UDQ keyword data: + Pairs of: + quantity name (item2): e.g. 'WUOPRL ' and + units: e.g.: 'SM3/DAY ' + + Length is dependent on number of UDQ quantities = 2*no of UDQ's + */ + + const auto& zUdn = udqData.getZUDN(); + + auto start = 0*udqDims[4]; + BOOST_CHECK_EQUAL(zUdn[start + 0].c_str() , "WUOPRL "); // udq NO. 1 + BOOST_CHECK_EQUAL(zUdn[start + 1].c_str() , "SM3/DAY "); // udq NO. 1 + + start = 1*udqDims[4]; + BOOST_CHECK_EQUAL(zUdn[start + 0].c_str() , "WULPRL "); // udq NO. 2 + BOOST_CHECK_EQUAL(zUdn[start + 1].c_str() , "SM3/DAY "); // udq NO. 2 + + start = 2*udqDims[4]; + BOOST_CHECK_EQUAL(zUdn[start + 0].c_str() , "WUOPRU "); // udq NO. 3 + BOOST_CHECK_EQUAL(zUdn[start + 1].c_str() , "SM3/DAY "); // udq NO. 3 + + start = 3*udqDims[4]; + BOOST_CHECK_EQUAL(zUdn[start + 0].c_str() , "GUOPRU "); // udq NO. 4 + BOOST_CHECK_EQUAL(zUdn[start + 1].c_str() , "SM3/DAY "); // udq NO. 4 + + start = 4*udqDims[4]; + BOOST_CHECK_EQUAL(zUdn[start + 0].c_str() , "WULPRU "); // udq NO. 5 + BOOST_CHECK_EQUAL(zUdn[start + 1].c_str() , "SM3/DAY "); // udq NO. 5 + + start = 5*udqDims[4]; + BOOST_CHECK_EQUAL(zUdn[start + 0].c_str() , "FULPR "); // udq NO. 6 + BOOST_CHECK_EQUAL(zUdn[start + 1].c_str() , "SM3/DAY "); // udq NO. 6 + + } + + + { + /* + ZUDL: + contains string that define the "Data for operation" for the defined quantity + + e.g. + '(WOPR OP' 'L01 - 15' '0) * 0.9' '0 ' ' ' ' ' ' ' + + The appropriate data are split into strings of 8 characters each. + + Length: No of UDQ's * 16 + */ + + const auto& zUdl = udqData.getZUDL(); + + auto start = 0*udqDims[5]; + BOOST_CHECK_EQUAL(zUdl[start + 0].c_str() , "(WOPR PR"); // udq NO. 1 + BOOST_CHECK_EQUAL(zUdl[start + 1].c_str() , "OD1 - 17"); // udq NO. 1 + BOOST_CHECK_EQUAL(zUdl[start + 2].c_str() , "0) * 0.6"); // udq NO. 1 + BOOST_CHECK_EQUAL(zUdl[start + 3].c_str() , "0 "); // udq NO. 1 + + /*start = 1*udqDims[5]; + BOOST_CHECK_EQUAL(zUdl[start + 0].c_str() , "(WLPR PR"); // udq NO. 1 + BOOST_CHECK_EQUAL(zUdl[start + 1].c_str() , "OD1 - 20"); // udq NO. 1 + BOOST_CHECK_EQUAL(zUdl[start + 2].c_str() , "0) * 0.9"); // udq NO. 1 + BOOST_CHECK_EQUAL(zUdl[start + 3].c_str() , "0 "); // udq NO. 1 + */ + + start = 3*udqDims[5]; + BOOST_CHECK_EQUAL(zUdl[start + 0].c_str() , "(GOPR WG"); // udq NO. 1 + BOOST_CHECK_EQUAL(zUdl[start + 1].c_str() , "RP2 - 44"); // udq NO. 1 + BOOST_CHECK_EQUAL(zUdl[start + 2].c_str() , "9) * 0.7"); // udq NO. 1 + BOOST_CHECK_EQUAL(zUdl[start + 3].c_str() , "7 "); // udq NO. 1 + + start = 5*udqDims[5]; + BOOST_CHECK_EQUAL(zUdl[start + 0].c_str() , "(FLPR - "); // udq NO. 1 + BOOST_CHECK_EQUAL(zUdl[start + 1].c_str() , "543) * 0"); // udq NO. 1 + BOOST_CHECK_EQUAL(zUdl[start + 2].c_str() , ".65 "); // udq NO. 1 + BOOST_CHECK_EQUAL(zUdl[start + 3].c_str() , " "); // udq NO. 1 + + } + + +} + BOOST_AUTO_TEST_SUITE_END()