WIP Added code to write InteHead and DoubHead data as well as IGPH to restart file,

Further added unit tests to the writing of UDQ data
This commit is contained in:
Jostein Alvestad
2019-08-06 09:14:45 +02:00
parent 083742c368
commit af811d2eaf
12 changed files with 674 additions and 444 deletions

View File

@@ -39,6 +39,12 @@ namespace Opm { namespace RestartIO {
std::chrono::time_point<std::chrono::system_clock> start;
std::chrono::duration<double, std::chrono::seconds::period> 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<double>& data() const
{

View File

@@ -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<int>& data() const
{

View File

@@ -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

View File

@@ -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;

View File

@@ -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 <class IGPHArray>
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<int> 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);
}
}

View File

@@ -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) {

View File

@@ -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();

View File

@@ -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;
}

View File

@@ -19,420 +19,419 @@
namespace VI = ::Opm::RestartIO::Helpers::VectorItems;
enum index : std::vector<int>::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)

View File

@@ -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;

View File

@@ -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 /
--
/

View File

@@ -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 <the first i udq's in use >(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()