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,
79 boost::posix_time::ptime currentDate);
90 void outputCumLog(std::size_t reportStepNum);
93 void outputProdLog(std::size_t reportStepNum);
96 void outputInjLog(std::size_t reportStepNum);
99 Inplace calc_inplace(std::map<std::string, double>& miscSummaryData,
100 std::map<std::string, std::vector<double>>& regionData,
101 const Parallel::Communication& comm);
103 void outputFipAndResvLog(
const Inplace& inplace,
104 const std::size_t reportStepNum,
106 boost::posix_time::ptime currentDate,
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,
122 unsigned globalDofIndex);
124 Scalar getSolventSaturation(
unsigned elemIdx)
const
126 if (sSol_.size() > elemIdx)
127 return sSol_[elemIdx];
132 Scalar getSolventRsw(
unsigned elemIdx)
const
134 if (rswSol_.size() > elemIdx)
135 return rswSol_[elemIdx];
140 Scalar getPolymerConcentration(
unsigned elemIdx)
const
142 if (cPolymer_.size() > elemIdx)
143 return cPolymer_[elemIdx];
148 Scalar getFoamConcentration(
unsigned elemIdx)
const
150 if (cFoam_.size() > elemIdx)
151 return cFoam_[elemIdx];
156 Scalar getSaltConcentration(
unsigned elemIdx)
const
158 if (cSalt_.size() > elemIdx)
159 return cSalt_[elemIdx];
164 Scalar getSaltSaturation(
unsigned elemIdx)
const
166 if (pSalt_.size() > elemIdx)
167 return pSalt_[elemIdx];
172 Scalar getPermFactor(
unsigned elemIdx)
const
174 if (permFact_.size() > elemIdx)
175 return permFact_[elemIdx];
180 Scalar getMicrobialConcentration(
unsigned elemIdx)
const
182 if (cMicrobes_.size() > elemIdx)
183 return cMicrobes_[elemIdx];
188 Scalar getOxygenConcentration(
unsigned elemIdx)
const
190 if (cOxygen_.size() > elemIdx)
191 return cOxygen_[elemIdx];
196 Scalar getUreaConcentration(
unsigned elemIdx)
const
198 if (cUrea_.size() > elemIdx)
199 return cUrea_[elemIdx];
204 Scalar getBiofilmConcentration(
unsigned elemIdx)
const
206 if (cBiofilm_.size() > elemIdx)
207 return cBiofilm_[elemIdx];
212 Scalar getCalciteConcentration(
unsigned elemIdx)
const
214 if (cCalcite_.size() > elemIdx)
215 return cCalcite_[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
265 bool needInterfaceFluxes([[maybe_unused]]
const bool isSubStep)
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>
298 void serializeOp(Serializer& serializer)
300 serializer(initialInplace_);
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;
323 const Schedule& schedule,
324 const SummaryConfig& summaryConfig,
325 const SummaryState& summaryState,
328 bool enableTemperature,
334 bool enableSaltPrecipitation,
338 void doAllocBuffers(
unsigned bufferSize,
339 unsigned reportStepNum,
342 const bool isRestart,
343 const bool vapparsActive,
344 const bool enablePCHysteresis,
345 const bool enableNonWettingHysteresis,
346 const bool enableWettingHysteresis,
348 const std::vector<bool>& enableSolTracers,
349 unsigned numOutputNnc);
351 void makeRegionSum(Inplace& inplace,
352 const std::string& region_name,
353 const Parallel::Communication& comm)
const;
355 Inplace accumulateRegionSums(
const Parallel::Communication& comm);
357 void updateSummaryRegionValues(
const Inplace& inplace,
358 std::map<std::string, double>& miscSummaryData,
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,
365 const std::vector<int>& regionId,
366 const std::size_t maxNumberOfRegions,
367 const Parallel::Communication& comm);
369 static int regionMax(
const std::vector<int>& region,
370 const Parallel::Communication& comm);
372 static void update(Inplace& inplace,
373 const std::string& region_name,
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_;
385 const Schedule& schedule_;
386 const SummaryState& summaryState_;
388 SummaryConfig summaryConfig_;
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_;