60 using Scalar =
typename FluidSystem::Scalar;
65 Scalar* getPRESSURE_ptr(
void) {
66 return (this->fluidPressure_.data()) ;
69 int getPRESSURE_size(
void ) {
70 return (this->fluidPressure_.size()) ;
73 void outputTimeStamp(
const std::string& lbl,
76 boost::posix_time::ptime currentDate);
87 void outputCumLog(std::size_t reportStepNum);
90 void outputProdLog(std::size_t reportStepNum);
93 void outputInjLog(std::size_t reportStepNum);
96 Inplace calc_inplace(std::map<std::string, double>& miscSummaryData,
97 std::map<std::string, std::vector<double>>& regionData,
98 const Parallel::Communication& comm);
100 void outputFipAndResvLog(
const Inplace& inplace,
101 const std::size_t reportStepNum,
103 boost::posix_time::ptime currentDate,
105 const Parallel::Communication& comm);
107 void outputErrorLog(
const Parallel::Communication& comm)
const;
109 void addRftDataToWells(data::Wells& wellDatas,
110 std::size_t reportStepNum);
117 void setRestart(
const data::Solution& sol,
119 unsigned globalDofIndex);
121 Scalar getSolventSaturation(
unsigned elemIdx)
const
123 if (sSol_.size() > elemIdx)
124 return sSol_[elemIdx];
129 Scalar getSolventRsw(
unsigned elemIdx)
const
131 if (rswSol_.size() > elemIdx)
132 return rswSol_[elemIdx];
137 Scalar getPolymerConcentration(
unsigned elemIdx)
const
139 if (cPolymer_.size() > elemIdx)
140 return cPolymer_[elemIdx];
145 Scalar getFoamConcentration(
unsigned elemIdx)
const
147 if (cFoam_.size() > elemIdx)
148 return cFoam_[elemIdx];
153 Scalar getSaltConcentration(
unsigned elemIdx)
const
155 if (cSalt_.size() > elemIdx)
156 return cSalt_[elemIdx];
161 Scalar getSaltSaturation(
unsigned elemIdx)
const
163 if (pSalt_.size() > elemIdx)
164 return pSalt_[elemIdx];
169 Scalar getPermFactor(
unsigned elemIdx)
const
171 if (permFact_.size() > elemIdx)
172 return permFact_[elemIdx];
177 Scalar getMicrobialConcentration(
unsigned elemIdx)
const
179 if (cMicrobes_.size() > elemIdx)
180 return cMicrobes_[elemIdx];
185 Scalar getOxygenConcentration(
unsigned elemIdx)
const
187 if (cOxygen_.size() > elemIdx)
188 return cOxygen_[elemIdx];
193 Scalar getUreaConcentration(
unsigned elemIdx)
const
195 if (cUrea_.size() > elemIdx)
196 return cUrea_[elemIdx];
201 Scalar getBiofilmConcentration(
unsigned elemIdx)
const
203 if (cBiofilm_.size() > elemIdx)
204 return cBiofilm_[elemIdx];
209 Scalar getCalciteConcentration(
unsigned elemIdx)
const
211 if (cCalcite_.size() > elemIdx)
212 return cCalcite_[elemIdx];
217 const std::array<FlowsData<double>, 3>& getFlowsn()
const
219 return this->flowsn_;
222 bool hasFlowsn()
const
224 return enableFlowsn_;
227 bool hasFlows()
const
232 bool hasBlockFlows()
const
237 bool anyFlows()
const
242 const std::array<FlowsData<double>, 3>& getFloresn()
const
244 return this->floresn_;
247 bool hasFloresn()
const
249 return enableFloresn_;
252 bool hasFlores()
const
254 return enableFlores_;
257 bool anyFlores()
const
262 bool needInterfaceFluxes([[maybe_unused]]
const bool isSubStep)
const
264 return this->interRegionFlows_.wantInterRegflowSummary();
267 const std::map<std::pair<std::string, int>,
double>& getBlockData()
272 const Inplace& initialInplace()
const
274 return this->initialInplace_.value();
277 bool localDataValid()
const{
278 return local_data_valid_;
281 void invalidateLocalData(){
282 local_data_valid_ =
false;
285 void validateLocalData(){
286 local_data_valid_ =
true;
289 void setCnvData(
const std::vector<std::vector<int>>& data)
294 template<
class Serializer>
295 void serializeOp(Serializer& serializer)
297 serializer(initialInplace_);
307 using ScalarBuffer = std::vector<Scalar>;
308 using StringBuffer = std::vector<std::string>;
309 enum { numPhases = FluidSystem::numPhases };
310 enum { numComponents = FluidSystem::numComponents };
311 enum { gasPhaseIdx = FluidSystem::gasPhaseIdx };
312 enum { oilPhaseIdx = FluidSystem::oilPhaseIdx };
313 enum { waterPhaseIdx = FluidSystem::waterPhaseIdx };
314 enum { gasCompIdx = FluidSystem::gasCompIdx };
315 enum { oilCompIdx = FluidSystem::oilCompIdx };
316 enum { waterCompIdx = FluidSystem::waterCompIdx };
317 using Dir = FaceDir::DirEnum;
320 const Schedule& schedule,
321 const SummaryConfig& summaryConfig,
322 const SummaryState& summaryState,
325 bool enableTemperature,
331 bool enableSaltPrecipitation,
335 void doAllocBuffers(
unsigned bufferSize,
336 unsigned reportStepNum,
339 const bool isRestart,
340 const bool vapparsActive,
341 const bool enableHysteresis,
343 unsigned numOutputNnc);
345 void makeRegionSum(Inplace& inplace,
346 const std::string& region_name,
347 const Parallel::Communication& comm)
const;
349 Inplace accumulateRegionSums(
const Parallel::Communication& comm);
351 void updateSummaryRegionValues(
const Inplace& inplace,
352 std::map<std::string, double>& miscSummaryData,
353 std::map<std::string, std::vector<double>>& regionData)
const;
355 static bool isOutputCreationDirective_(
const std::string& keyword);
358 static ScalarBuffer regionSum(
const ScalarBuffer& property,
359 const std::vector<int>& regionId,
360 const std::size_t maxNumberOfRegions,
361 const Parallel::Communication& comm);
363 static int regionMax(
const std::vector<int>& region,
364 const Parallel::Communication& comm);
366 static void update(Inplace& inplace,
367 const std::string& region_name,
368 const Inplace::Phase phase,
369 const std::size_t ntFip,
370 const ScalarBuffer& values);
372 static Scalar sum(
const ScalarBuffer& v);
374 void setupBlockData(std::function<
bool(
int)> isCartIdxOnThisRank);
376 virtual bool isDefunctParallelWell(std::string wname)
const = 0;
378 const EclipseState& eclState_;
379 const Schedule& schedule_;
380 const SummaryState& summaryState_;
382 SummaryConfig summaryConfig_;
388 bool enableTemperature_;
395 bool enableSaltPrecipitation_;
399 bool forceDisableFipOutput_;
400 bool forceDisableFipresvOutput_;
401 bool outputFipRestart_;
412 std::unordered_map<Inplace::Phase, ScalarBuffer> fip_;
413 std::unordered_map<std::string, std::vector<int>> regions_;
414 std::unordered_map<Inplace::Phase, std::vector<SummaryConfigNode>> regionNodes_;
416 std::vector<SummaryConfigNode> RPRNodes_;
417 std::vector<SummaryConfigNode> RPRPNodes_;
419 std::vector<int> failedCellsPb_;
420 std::vector<int> failedCellsPd_;
422 ScalarBuffer gasFormationVolumeFactor_;
423 ScalarBuffer hydrocarbonPoreVolume_;
424 ScalarBuffer pressureTimesPoreVolume_;
425 ScalarBuffer pressureTimesHydrocarbonVolume_;
426 ScalarBuffer dynamicPoreVolume_;
428 ScalarBuffer fluidPressure_;
429 ScalarBuffer temperature_;
434 ScalarBuffer overburdenPressure_;
435 ScalarBuffer oilSaturationPressure_;
436 ScalarBuffer drsdtcon_;
438 ScalarBuffer rswSol_;
439 ScalarBuffer cPolymer_;
443 ScalarBuffer permFact_;
444 ScalarBuffer extboX_;
445 ScalarBuffer extboY_;
446 ScalarBuffer extboZ_;
447 ScalarBuffer mFracOil_;
448 ScalarBuffer mFracGas_;
449 ScalarBuffer mFracCo2_;
451 ScalarBuffer pcSwMdcOw_;
452 ScalarBuffer krnSwMdcOw_;
453 ScalarBuffer pcSwMdcGo_;
454 ScalarBuffer krnSwMdcGo_;
456 ScalarBuffer gasDissolutionFactor_;
457 ScalarBuffer oilVaporizationFactor_;
458 ScalarBuffer bubblePointPressure_;
459 ScalarBuffer dewPointPressure_;
460 ScalarBuffer rockCompPorvMultiplier_;
462 ScalarBuffer minimumOilPressure_;
463 ScalarBuffer saturatedOilFormationVolumeFactor_;
464 ScalarBuffer rockCompTransMultiplier_;
465 ScalarBuffer cMicrobes_;
466 ScalarBuffer cOxygen_;
468 ScalarBuffer cBiofilm_;
469 ScalarBuffer cCalcite_;
475 ScalarBuffer mechPotentialForce_;
476 ScalarBuffer mechPotentialPressForce_;
477 ScalarBuffer mechPotentialTempForce_;
482 ScalarBuffer stressXX_;
483 ScalarBuffer stressYY_;
484 ScalarBuffer stressZZ_;
485 ScalarBuffer stressXY_;
486 ScalarBuffer stressXZ_;
487 ScalarBuffer stressYZ_;
488 ScalarBuffer delstressXX_;
489 ScalarBuffer delstressYY_;
490 ScalarBuffer delstressZZ_;
491 ScalarBuffer delstressXY_;
492 ScalarBuffer delstressXZ_;
493 ScalarBuffer delstressYZ_;
494 ScalarBuffer strainXX_;
495 ScalarBuffer strainYY_;
496 ScalarBuffer strainZZ_;
497 ScalarBuffer strainXY_;
498 ScalarBuffer strainXZ_;
499 ScalarBuffer strainYZ_;
501 std::array<ScalarBuffer, numPhases> saturation_;
502 std::array<ScalarBuffer, numPhases> invB_;
503 std::array<ScalarBuffer, numPhases> density_;
504 std::array<ScalarBuffer, numPhases> viscosity_;
505 std::array<ScalarBuffer, numPhases> relativePermeability_;
507 std::vector<ScalarBuffer> tracerConcentrations_;
509 std::array<ScalarBuffer, numPhases> residual_;
511 std::array<std::array<ScalarBuffer, numPhases>, 6> flows_;
512 std::array<std::array<ScalarBuffer, numPhases>, 6> flores_;
514 std::array<FlowsData<double>, 3> floresn_;
515 std::array<FlowsData<double>, 3> flowsn_;
517 std::map<std::size_t, Scalar> oilConnectionPressures_;
518 std::map<std::size_t, Scalar> waterConnectionSaturations_;
519 std::map<std::size_t, Scalar> gasConnectionSaturations_;
520 std::map<std::pair<std::string, int>,
double> blockData_;
524 std::optional<Inplace> initialInplace_;
525 bool local_data_valid_;
527 std::optional<RegionPhasePoreVolAverage> regionAvgDensity_;