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);
125 const std::size_t reportStepNum,
129 const Parallel::Communication& comm);
131 void outputErrorLog(
const Parallel::Communication& comm)
const;
133 void addRftDataToWells(data::Wells&
wellDatas,
134 std::size_t reportStepNum,
135 const Parallel::Communication& comm)
136 { this->rftC_.addToWells(
wellDatas, reportStepNum, comm); }
143 void setRestart(
const data::Solution&
sol,
147 Scalar getSolventSaturation(
unsigned elemIdx)
const
149 if (sSol_.size() > elemIdx)
150 return sSol_[elemIdx];
155 Scalar getSolventRsw(
unsigned elemIdx)
const
157 if (rswSol_.size() > elemIdx)
158 return rswSol_[elemIdx];
163 Scalar getPolymerConcentration(
unsigned elemIdx)
const
165 if (cPolymer_.size() > elemIdx)
166 return cPolymer_[elemIdx];
171 Scalar getFoamConcentration(
unsigned elemIdx)
const
173 if (cFoam_.size() > elemIdx)
174 return cFoam_[elemIdx];
179 Scalar getSaltConcentration(
unsigned elemIdx)
const
181 if (cSalt_.size() > elemIdx)
182 return cSalt_[elemIdx];
187 Scalar getSaltSaturation(
unsigned elemIdx)
const
189 if (pSalt_.size() > elemIdx)
190 return pSalt_[elemIdx];
195 Scalar getPermFactor(
unsigned elemIdx)
const
197 if (permFact_.size() > elemIdx)
198 return permFact_[elemIdx];
203 const std::vector<Scalar>& getFluidPressure()
const
204 {
return fluidPressure_; }
207 {
return this->micpC_; }
210 {
return this->flowsC_; }
214 return this->interRegionFlows_.wantInterRegflowSummary();
217 const std::map<std::pair<std::string, int>,
double>& getBlockData()
222 std::map<std::pair<std::string, int>,
double>& getExtraBlockData()
224 return extraBlockData_;
227 const Inplace& initialInplace()
const
229 return this->initialInplace_.value();
232 bool localDataValid()
const{
233 return local_data_valid_;
236 void invalidateLocalData(){
237 local_data_valid_ =
false;
240 void validateLocalData(){
241 local_data_valid_ =
true;
244 template<
class Serializer>
263 using ScalarBuffer = std::vector<Scalar>;
264 using StringBuffer = std::vector<std::string>;
265 enum { numPhases = FluidSystem::numPhases };
266 enum { numComponents = FluidSystem::numComponents };
267 static constexpr int gasPhaseIdx = FluidSystem::gasPhaseIdx;
268 static constexpr int oilPhaseIdx = FluidSystem::oilPhaseIdx;
269 static constexpr int waterPhaseIdx = FluidSystem::waterPhaseIdx;
270 enum { gasCompIdx = FluidSystem::gasCompIdx };
271 enum { oilCompIdx = FluidSystem::oilCompIdx };
272 enum { waterCompIdx = FluidSystem::waterCompIdx };
273 using Dir = FaceDir::DirEnum;
280 RSTConv::LocalToGlobalCellFunc globalCell,
281 const Parallel::Communication& comm,
283 bool enableTemperature,
289 bool enableSaltPrecipitation,
294 unsigned reportStepNum,
297 const bool isRestart,
304 const Parallel::Communication& comm)
const;
306 Inplace accumulateRegionSums(
const Parallel::Communication& comm);
310 std::map<std::string, std::vector<double>>&
regionData)
const;
312 static bool isOutputCreationDirective_(
const std::string&
keyword);
315 static ScalarBuffer regionSum(
const ScalarBuffer&
property,
318 const Parallel::Communication& comm);
320 static int regionMax(
const std::vector<int>& region,
321 const Parallel::Communication& comm);
325 const Inplace::Phase phase,
326 const std::size_t
ntFip,
327 const ScalarBuffer& values);
329 static Scalar sum(
const ScalarBuffer&
v);
331 void setupBlockData(std::function<
bool(
int)> isCartIdxOnThisRank);
332 void setupExtraBlockData(
const std::size_t reportStepNum,
333 std::function<
bool(
int)> isCartIdxOnThisRank);
335 virtual bool isDefunctParallelWell(std::string
wname)
const = 0;
337 const EclipseState& eclState_;
346 bool enableEnergy_{
false};
347 bool enableTemperature_{
false};
348 bool enableMech_{
false};
350 bool enableSolvent_{
false};
351 bool enablePolymer_{
false};
352 bool enableFoam_{
false};
353 bool enableBrine_{
false};
354 bool enableSaltPrecipitation_{
false};
355 bool enableExtbo_{
false};
356 bool enableMICP_{
false};
358 bool forceDisableFipOutput_{
false};
359 bool forceDisableFipresvOutput_{
false};
360 bool computeFip_{
false};
363 std::unordered_map<std::string, std::vector<int>> regions_;
364 std::unordered_map<Inplace::Phase, std::vector<SummaryConfigNode>> regionNodes_;
366 std::vector<SummaryConfigNode> RPRNodes_;
367 std::vector<SummaryConfigNode> RPRPNodes_;
369 std::vector<int> failedCellsPb_;
370 std::vector<int> failedCellsPd_;
372 ScalarBuffer gasFormationVolumeFactor_;
373 ScalarBuffer hydrocarbonPoreVolume_;
374 ScalarBuffer pressureTimesPoreVolume_;
375 ScalarBuffer pressureTimesHydrocarbonVolume_;
376 ScalarBuffer dynamicPoreVolume_;
378 ScalarBuffer fluidPressure_;
379 ScalarBuffer temperature_;
384 ScalarBuffer overburdenPressure_;
385 ScalarBuffer oilSaturationPressure_;
386 ScalarBuffer drsdtcon_;
388 ScalarBuffer rswSol_;
389 ScalarBuffer cPolymer_;
393 ScalarBuffer permFact_;
402 ScalarBuffer gasDissolutionFactor_;
403 ScalarBuffer oilVaporizationFactor_;
404 ScalarBuffer gasDissolutionFactorInWater_;
405 ScalarBuffer waterVaporizationFactor_;
406 ScalarBuffer bubblePointPressure_;
407 ScalarBuffer dewPointPressure_;
408 ScalarBuffer rockCompPorvMultiplier_;
409 ScalarBuffer minimumOilPressure_;
410 ScalarBuffer saturatedOilFormationVolumeFactor_;
411 ScalarBuffer rockCompTransMultiplier_;
420 std::array<ScalarBuffer, numPhases> saturation_;
421 std::array<ScalarBuffer, numPhases> invB_;
422 std::array<ScalarBuffer, numPhases> density_;
423 std::array<ScalarBuffer, numPhases> viscosity_;
424 std::array<ScalarBuffer, numPhases> relativePermeability_;
428 std::array<ScalarBuffer, numPhases> residual_;
435 std::map<std::pair<std::string, int>,
double> blockData_;
438 std::map<std::pair<std::string, int>,
double> extraBlockData_;
440 std::optional<Inplace> initialInplace_;
441 bool local_data_valid_{
false};
443 std::optional<RegionPhasePoreVolAverage> regionAvgDensity_;