63 using Scalar =
typename FluidSystem::Scalar;
68 Scalar* getPRESSURE_ptr(
void) {
69 return (this->fluidPressure_.data()) ;
72 int getPRESSURE_size(
void ) {
73 return (this->fluidPressure_.size()) ;
76 void outputTimeStamp(
const std::string&
lbl,
90 void outputCumLog(std::size_t reportStepNum);
93 void outputProdLog(std::size_t reportStepNum);
96 void outputInjLog(std::size_t reportStepNum);
100 std::map<std::string, std::vector<double>>&
regionData,
101 const Parallel::Communication& comm);
104 const std::size_t reportStepNum,
108 const Parallel::Communication& comm);
110 void outputErrorLog(
const Parallel::Communication& comm)
const;
112 void addRftDataToWells(data::Wells&
wellDatas,
113 std::size_t reportStepNum);
120 void setRestart(
const data::Solution&
sol,
124 Scalar getSolventSaturation(
unsigned elemIdx)
const
132 Scalar getSolventRsw(
unsigned elemIdx)
const
140 Scalar getPolymerConcentration(
unsigned elemIdx)
const
142 if (cPolymer_.size() >
elemIdx)
148 Scalar getFoamConcentration(
unsigned elemIdx)
const
156 Scalar getSaltConcentration(
unsigned elemIdx)
const
164 Scalar getSaltSaturation(
unsigned elemIdx)
const
172 Scalar getPermFactor(
unsigned elemIdx)
const
174 if (permFact_.size() >
elemIdx)
180 Scalar getMicrobialConcentration(
unsigned elemIdx)
const
182 if (cMicrobes_.size() >
elemIdx)
188 Scalar getOxygenConcentration(
unsigned elemIdx)
const
196 Scalar getUreaConcentration(
unsigned elemIdx)
const
204 Scalar getBiofilmConcentration(
unsigned elemIdx)
const
206 if (cBiofilm_.size() >
elemIdx)
212 Scalar getCalciteConcentration(
unsigned elemIdx)
const
214 if (cCalcite_.size() >
elemIdx)
220 const std::array<FlowsData<double>, 3>& getFlowsn()
const
222 return this->flowsn_;
225 bool hasFlowsn()
const
227 return enableFlowsn_;
230 bool hasFlows()
const
235 bool hasBlockFlows()
const
240 bool anyFlows()
const
245 const std::array<FlowsData<double>, 3>& getFloresn()
const
247 return this->floresn_;
250 bool hasFloresn()
const
252 return enableFloresn_;
255 bool hasFlores()
const
257 return enableFlores_;
260 bool anyFlores()
const
267 return this->interRegionFlows_.wantInterRegflowSummary();
270 const std::map<std::pair<std::string, int>,
double>& getBlockData()
275 const Inplace& initialInplace()
const
277 return this->initialInplace_.value();
280 bool localDataValid()
const{
281 return local_data_valid_;
284 void invalidateLocalData(){
285 local_data_valid_ =
false;
288 void validateLocalData(){
289 local_data_valid_ =
true;
292 void setCnvData(
const std::vector<std::vector<int>>& data)
297 template<
class Serializer>
310 using ScalarBuffer = std::vector<Scalar>;
311 using StringBuffer = std::vector<std::string>;
312 enum { numPhases = FluidSystem::numPhases };
313 enum { numComponents = FluidSystem::numComponents };
314 enum { gasPhaseIdx = FluidSystem::gasPhaseIdx };
315 enum { oilPhaseIdx = FluidSystem::oilPhaseIdx };
316 enum { waterPhaseIdx = FluidSystem::waterPhaseIdx };
317 enum { gasCompIdx = FluidSystem::gasCompIdx };
318 enum { oilCompIdx = FluidSystem::oilCompIdx };
319 enum { waterCompIdx = FluidSystem::waterCompIdx };
320 using Dir = FaceDir::DirEnum;
328 bool enableTemperature,
334 bool enableSaltPrecipitation,
339 unsigned reportStepNum,
342 const bool isRestart,
343 const bool vapparsActive,
348 const std::vector<bool>& enableSolTracers,
353 const Parallel::Communication& comm)
const;
355 Inplace accumulateRegionSums(
const Parallel::Communication& comm);
359 std::map<std::string, std::vector<double>>&
regionData)
const;
361 static bool isOutputCreationDirective_(
const std::string&
keyword);
364 static ScalarBuffer regionSum(
const ScalarBuffer&
property,
367 const Parallel::Communication& comm);
369 static int regionMax(
const std::vector<int>& region,
370 const Parallel::Communication& comm);
374 const Inplace::Phase phase,
375 const std::size_t
ntFip,
376 const ScalarBuffer& values);
378 static Scalar sum(
const ScalarBuffer&
v);
380 void setupBlockData(std::function<
bool(
int)> isCartIdxOnThisRank);
382 virtual bool isDefunctParallelWell(std::string
wname)
const = 0;
384 const EclipseState& eclState_;
393 bool enableEnergy_{
false};
394 bool enableTemperature_{
false};
395 bool enableMech_{
false};
397 bool enableSolvent_{
false};
398 bool enablePolymer_{
false};
399 bool enableFoam_{
false};
400 bool enableBrine_{
false};
401 bool enableSaltPrecipitation_{
false};
402 bool enableExtbo_{
false};
403 bool enableMICP_{
false};
405 bool forceDisableFipOutput_{
false};
406 bool forceDisableFipresvOutput_{
false};
407 bool computeFip_{
false};
427 explicit operator bool()
const
431 } outputFipRestart_{};
433 bool anyFlows_{
false};
434 bool anyFlores_{
false};
435 bool blockFlows_{
false};
436 bool enableFlows_{
false};
437 bool enableFlores_{
false};
438 bool enableFlowsn_{
false};
439 bool enableFloresn_{
false};
441 std::unordered_map<Inplace::Phase, ScalarBuffer> fip_;
442 std::unordered_map<std::string, std::vector<int>> regions_;
443 std::unordered_map<Inplace::Phase, std::vector<SummaryConfigNode>> regionNodes_;
445 std::vector<SummaryConfigNode> RPRNodes_;
446 std::vector<SummaryConfigNode> RPRPNodes_;
448 std::vector<int> failedCellsPb_;
449 std::vector<int> failedCellsPd_;
451 ScalarBuffer gasFormationVolumeFactor_;
452 ScalarBuffer hydrocarbonPoreVolume_;
453 ScalarBuffer pressureTimesPoreVolume_;
454 ScalarBuffer pressureTimesHydrocarbonVolume_;
455 ScalarBuffer dynamicPoreVolume_;
457 ScalarBuffer fluidPressure_;
458 ScalarBuffer temperature_;
463 ScalarBuffer overburdenPressure_;
464 ScalarBuffer oilSaturationPressure_;
465 ScalarBuffer drsdtcon_;
467 ScalarBuffer rswSol_;
468 ScalarBuffer cPolymer_;
472 ScalarBuffer permFact_;
473 ScalarBuffer extboX_;
474 ScalarBuffer extboY_;
475 ScalarBuffer extboZ_;
476 ScalarBuffer mFracOil_;
477 ScalarBuffer mFracGas_;
478 ScalarBuffer mFracCo2_;
486 ScalarBuffer gasDissolutionFactor_;
487 ScalarBuffer oilVaporizationFactor_;
488 ScalarBuffer gasDissolutionFactorInWater_;
489 ScalarBuffer waterVaporizationFactor_;
490 ScalarBuffer bubblePointPressure_;
491 ScalarBuffer dewPointPressure_;
492 ScalarBuffer rockCompPorvMultiplier_;
493 ScalarBuffer minimumOilPressure_;
494 ScalarBuffer saturatedOilFormationVolumeFactor_;
495 ScalarBuffer rockCompTransMultiplier_;
496 ScalarBuffer cMicrobes_;
497 ScalarBuffer cOxygen_;
499 ScalarBuffer cBiofilm_;
500 ScalarBuffer cCalcite_;
506 ScalarBuffer mechPotentialForce_;
507 ScalarBuffer mechPotentialPressForce_;
508 ScalarBuffer mechPotentialTempForce_;
513 ScalarBuffer stressXX_;
514 ScalarBuffer stressYY_;
515 ScalarBuffer stressZZ_;
516 ScalarBuffer stressXY_;
517 ScalarBuffer stressXZ_;
518 ScalarBuffer stressYZ_;
519 ScalarBuffer delstressXX_;
520 ScalarBuffer delstressYY_;
521 ScalarBuffer delstressZZ_;
522 ScalarBuffer delstressXY_;
523 ScalarBuffer delstressXZ_;
524 ScalarBuffer delstressYZ_;
525 ScalarBuffer strainXX_;
526 ScalarBuffer strainYY_;
527 ScalarBuffer strainZZ_;
528 ScalarBuffer strainXY_;
529 ScalarBuffer strainXZ_;
530 ScalarBuffer strainYZ_;
532 std::array<ScalarBuffer, numPhases> saturation_;
533 std::array<ScalarBuffer, numPhases> invB_;
534 std::array<ScalarBuffer, numPhases> density_;
535 std::array<ScalarBuffer, numPhases> viscosity_;
536 std::array<ScalarBuffer, numPhases> relativePermeability_;
538 std::vector<ScalarBuffer> freeTracerConcentrations_;
539 std::vector<ScalarBuffer> solTracerConcentrations_;
541 std::array<ScalarBuffer, numPhases> residual_;
543 std::array<std::array<ScalarBuffer, numPhases>, 6> flows_;
544 std::array<std::array<ScalarBuffer, numPhases>, 6> flores_;
546 std::array<FlowsData<double>, 3> floresn_;
547 std::array<FlowsData<double>, 3> flowsn_;
549 std::map<std::size_t, Scalar> oilConnectionPressures_;
550 std::map<std::size_t, Scalar> waterConnectionSaturations_;
551 std::map<std::size_t, Scalar> gasConnectionSaturations_;
552 std::map<std::pair<std::string, int>,
double> blockData_;
556 std::optional<Inplace> initialInplace_;
557 bool local_data_valid_{
false};
559 std::optional<RegionPhasePoreVolAverage> regionAvgDensity_;