78 using Scalar =
typename FluidSystem::Scalar;
88 void outputTimeStamp(
const std::string&
lbl,
102 void outputCumLog(std::size_t reportStepNum,
106 void outputProdLog(std::size_t reportStepNum,
110 void outputInjLog(std::size_t reportStepNum,
114 void outputMSWLog(std::size_t reportStepNum);
117 void calc_initial_inplace(
const Parallel::Communication& comm);
121 std::map<std::string, std::vector<double>>&
regionData,
122 const Parallel::Communication& comm);
124 void outputWellspecReport(
const std::vector<std::string>&
changedWells,
125 const std::size_t reportStepNum,
126 const double elapsed,
129 void outputErrorLog(
const Parallel::Communication& comm)
const;
131 void addRftDataToWells(data::Wells&
wellDatas,
132 std::size_t reportStepNum,
133 const Parallel::Communication& comm)
134 { this->rftC_.addToWells(
wellDatas, reportStepNum, comm); }
141 void setRestart(
const data::Solution&
sol,
145 Scalar getSolventSaturation(
unsigned elemIdx)
const
147 if (sSol_.size() > elemIdx)
148 return sSol_[elemIdx];
153 Scalar getSolventRsw(
unsigned elemIdx)
const
155 if (rswSol_.size() > elemIdx)
156 return rswSol_[elemIdx];
161 Scalar getPolymerConcentration(
unsigned elemIdx)
const
163 if (cPolymer_.size() > elemIdx)
164 return cPolymer_[elemIdx];
169 Scalar getFoamConcentration(
unsigned elemIdx)
const
171 if (cFoam_.size() > elemIdx)
172 return cFoam_[elemIdx];
177 Scalar getSaltConcentration(
unsigned elemIdx)
const
179 if (cSalt_.size() > elemIdx)
180 return cSalt_[elemIdx];
185 Scalar getSaltSaturation(
unsigned elemIdx)
const
187 if (pSalt_.size() > elemIdx)
188 return pSalt_[elemIdx];
193 Scalar getPermFactor(
unsigned elemIdx)
const
195 if (permFact_.size() > elemIdx)
196 return permFact_[elemIdx];
201 const std::vector<Scalar>& getFluidPressure()
const
202 {
return fluidPressure_; }
205 {
return this->micpC_; }
208 {
return this->flowsC_; }
212 return this->interRegionFlows_.wantInterRegflowSummary();
215 const std::map<std::pair<std::string, int>,
double>& getBlockData()
220 std::map<std::pair<std::string, int>,
double>& getExtraBlockData()
222 return extraBlockData_;
225 const std::optional<Inplace>& initialInplace()
const
227 return this->initialInplace_;
230 bool localDataValid()
const{
231 return local_data_valid_;
234 void invalidateLocalData(){
235 local_data_valid_ =
false;
238 void validateLocalData(){
239 local_data_valid_ =
true;
242 template<
class Serializer>
261 using ScalarBuffer = std::vector<Scalar>;
262 using StringBuffer = std::vector<std::string>;
263 enum { numPhases = FluidSystem::numPhases };
264 enum { numComponents = FluidSystem::numComponents };
265 static constexpr int gasPhaseIdx = FluidSystem::gasPhaseIdx;
266 static constexpr int oilPhaseIdx = FluidSystem::oilPhaseIdx;
267 static constexpr int waterPhaseIdx = FluidSystem::waterPhaseIdx;
268 enum { gasCompIdx = FluidSystem::gasCompIdx };
269 enum { oilCompIdx = FluidSystem::oilCompIdx };
270 enum { waterCompIdx = FluidSystem::waterCompIdx };
271 using Dir = FaceDir::DirEnum;
278 RSTConv::LocalToGlobalCellFunc globalCell,
279 const Parallel::Communication& comm,
281 bool enableTemperature,
287 bool enableSaltPrecipitation,
292 unsigned reportStepNum,
295 const bool isRestart,
302 const Parallel::Communication& comm)
const;
304 Inplace accumulateRegionSums(
const Parallel::Communication& comm);
308 std::map<std::string, std::vector<double>>&
regionData)
const;
310 static bool isOutputCreationDirective_(
const std::string&
keyword);
313 static ScalarBuffer regionSum(
const ScalarBuffer&
property,
316 const Parallel::Communication& comm);
318 static int regionMax(
const std::vector<int>& region,
319 const Parallel::Communication& comm);
323 const Inplace::Phase phase,
324 const std::size_t
ntFip,
325 const ScalarBuffer& values);
327 static Scalar sum(
const ScalarBuffer&
v);
329 void setupBlockData(std::function<
bool(
int)> isCartIdxOnThisRank);
330 void setupExtraBlockData(
const std::size_t reportStepNum,
331 std::function<
bool(
int)> isCartIdxOnThisRank);
333 virtual bool isDefunctParallelWell(std::string
wname)
const = 0;
335 const EclipseState& eclState_;
344 bool enableEnergy_{
false};
345 bool enableTemperature_{
false};
346 bool enableMech_{
false};
348 bool enableSolvent_{
false};
349 bool enablePolymer_{
false};
350 bool enableFoam_{
false};
351 bool enableBrine_{
false};
352 bool enableSaltPrecipitation_{
false};
353 bool enableExtbo_{
false};
354 bool enableMICP_{
false};
356 bool forceDisableFipOutput_{
false};
357 bool forceDisableFipresvOutput_{
false};
358 bool computeFip_{
false};
361 std::unordered_map<std::string, std::vector<int>> regions_;
362 std::unordered_map<Inplace::Phase, std::vector<SummaryConfigNode>> regionNodes_;
364 std::vector<SummaryConfigNode> RPRNodes_;
365 std::vector<SummaryConfigNode> RPRPNodes_;
367 std::vector<int> failedCellsPb_;
368 std::vector<int> failedCellsPd_;
370 ScalarBuffer gasFormationVolumeFactor_;
371 ScalarBuffer hydrocarbonPoreVolume_;
372 ScalarBuffer pressureTimesPoreVolume_;
373 ScalarBuffer pressureTimesHydrocarbonVolume_;
374 ScalarBuffer dynamicPoreVolume_;
376 ScalarBuffer fluidPressure_;
377 ScalarBuffer temperature_;
382 ScalarBuffer overburdenPressure_;
383 ScalarBuffer oilSaturationPressure_;
384 ScalarBuffer drsdtcon_;
386 ScalarBuffer rswSol_;
387 ScalarBuffer cPolymer_;
391 ScalarBuffer permFact_;
400 ScalarBuffer gasDissolutionFactor_;
401 ScalarBuffer oilVaporizationFactor_;
402 ScalarBuffer gasDissolutionFactorInWater_;
403 ScalarBuffer waterVaporizationFactor_;
404 ScalarBuffer bubblePointPressure_;
405 ScalarBuffer dewPointPressure_;
406 ScalarBuffer rockCompPorvMultiplier_;
407 ScalarBuffer minimumOilPressure_;
408 ScalarBuffer saturatedOilFormationVolumeFactor_;
409 ScalarBuffer rockCompTransMultiplier_;
418 std::array<ScalarBuffer, numPhases> saturation_;
419 std::array<ScalarBuffer, numPhases> invB_;
420 std::array<ScalarBuffer, numPhases> density_;
421 std::array<ScalarBuffer, numPhases> viscosity_;
422 std::array<ScalarBuffer, numPhases> relativePermeability_;
426 std::array<ScalarBuffer, numPhases> residual_;
433 std::map<std::pair<std::string, int>,
double> blockData_;
436 std::map<std::pair<std::string, int>,
double> extraBlockData_;
438 std::optional<Inplace> initialInplace_;
439 bool local_data_valid_{
false};
441 std::optional<RegionPhasePoreVolAverage> regionAvgDensity_;