26 #ifndef OPM_GENERIC_OUTPUT_BLACK_OIL_MODULE_HPP 27 #define OPM_GENERIC_OUTPUT_BLACK_OIL_MODULE_HPP 29 #include <opm/input/eclipse/EclipseState/Grid/FaceDir.hpp> 30 #include <opm/input/eclipse/EclipseState/SummaryConfig/SummaryConfig.hpp> 32 #include <opm/output/data/Wells.hpp> 33 #include <opm/output/eclipse/Inplace.hpp> 39 #include <opm/simulators/flow/FlowsContainer.hpp> 43 #include <opm/simulators/flow/RegionPhasePVAverage.hpp> 45 #include <opm/simulators/flow/RSTConv.hpp> 46 #include <opm/simulators/flow/GeochemistryContainer.hpp> 49 #include <opm/simulators/utils/ParallelCommunication.hpp> 56 #include <unordered_map> 69 namespace data {
class Solution; }
70 class EclHysteresisConfig;
74 class SummaryConfigNode;
77 template<
class Flu
idSystem>
80 using Scalar =
typename FluidSystem::Scalar;
90 void outputTimeStamp(
const std::string& lbl,
93 boost::posix_time::ptime currentDate);
104 void outputCumLog(std::size_t reportStepNum,
105 const bool connData);
108 void outputProdLog(std::size_t reportStepNum,
109 const bool connData);
112 void outputInjLog(std::size_t reportStepNum,
113 const bool connData);
116 void outputMSWLog(std::size_t reportStepNum);
119 void calc_initial_inplace(
const Parallel::Communication& comm);
122 Inplace calc_inplace(std::map<std::string, double>& miscSummaryData,
123 std::map<std::string, std::vector<double>>& regionData,
124 const Parallel::Communication& comm);
147 const bool changedWellLists,
148 const std::size_t reportStepNum,
149 const double elapsed,
150 boost::posix_time::ptime currentDate)
const;
152 void outputErrorLog(
const Parallel::Communication& comm)
const;
154 void addRftDataToWells(data::Wells& wellDatas,
155 std::size_t reportStepNum,
156 const Parallel::Communication& comm)
157 { this->rftC_.addToWells(wellDatas, reportStepNum, comm); }
164 void setRestart(
const data::Solution& sol,
166 unsigned globalDofIndex);
168 Scalar getSolventSaturation(
unsigned elemIdx)
const 170 if (sSol_.size() > elemIdx)
171 return sSol_[elemIdx];
176 Scalar getSolventRsw(
unsigned elemIdx)
const 178 if (rswSol_.size() > elemIdx)
179 return rswSol_[elemIdx];
184 Scalar getPolymerConcentration(
unsigned elemIdx)
const 186 if (cPolymer_.size() > elemIdx)
187 return cPolymer_[elemIdx];
192 Scalar getFoamConcentration(
unsigned elemIdx)
const 194 if (cFoam_.size() > elemIdx)
195 return cFoam_[elemIdx];
200 Scalar getSaltConcentration(
unsigned elemIdx)
const 202 if (cSalt_.size() > elemIdx)
203 return cSalt_[elemIdx];
208 Scalar getSaltSaturation(
unsigned elemIdx)
const 210 if (pSalt_.size() > elemIdx)
211 return pSalt_[elemIdx];
216 Scalar getPermFactor(
unsigned elemIdx)
const 218 if (permFact_.size() > elemIdx)
219 return permFact_[elemIdx];
224 const std::vector<Scalar>& getFluidPressure()
const 225 {
return fluidPressure_; }
228 {
return this->bioeffectsC_; }
231 {
return this->CO2H2C_; }
234 {
return this->flowsC_; }
236 bool needInterfaceFluxes([[maybe_unused]]
const bool isSubStep)
const 238 return this->interRegionFlows_.wantInterRegflowSummary();
241 const std::map<std::pair<std::string, int>,
double>& getBlockData()
246 std::map<std::pair<std::string, int>,
double>& getExtraBlockData()
248 return extraBlockData_;
251 const Inplace* initialInplace()
const 253 return this->initialInplace_.has_value()
254 ? &*this->initialInplace_
258 bool localDataValid()
const{
259 return local_data_valid_;
262 void invalidateLocalData(){
263 local_data_valid_ =
false;
266 void validateLocalData(){
267 local_data_valid_ =
true;
270 template<
class Serializer>
271 void serializeOp(Serializer& serializer)
273 serializer(initialInplace_);
289 using ScalarBuffer = std::vector<Scalar>;
290 using StringBuffer = std::vector<std::string>;
291 enum { numPhases = FluidSystem::numPhases };
292 enum { numComponents = FluidSystem::numComponents };
293 static constexpr
int gasPhaseIdx = FluidSystem::gasPhaseIdx;
294 static constexpr
int oilPhaseIdx = FluidSystem::oilPhaseIdx;
295 static constexpr
int waterPhaseIdx = FluidSystem::waterPhaseIdx;
296 enum { gasCompIdx = FluidSystem::gasCompIdx };
297 enum { oilCompIdx = FluidSystem::oilCompIdx };
298 enum { waterCompIdx = FluidSystem::waterCompIdx };
299 using Dir = FaceDir::DirEnum;
302 const Schedule& schedule,
303 const SummaryConfig& summaryConfig,
304 const SummaryState& summaryState,
306 RSTConv::LocalToGlobalCellFunc globalCell,
307 std::function<
bool(
const unsigned)> isInterior,
308 const Parallel::Communication& comm,
310 bool constantTemperature,
316 bool enableSaltPrecipitation,
318 bool enableBioeffects,
319 bool enableGeochemistry);
321 void doAllocBuffers(
unsigned bufferSize,
322 unsigned reportStepNum,
325 const bool isRestart,
326 const EclHysteresisConfig* hysteresisConfig,
327 unsigned numOutputNnc = 0,
328 std::map<std::string, int> rstKeywords = {});
330 void makeRegionSum(Inplace& inplace,
331 const std::string& region_name,
332 const Parallel::Communication& comm)
const;
334 Inplace accumulateRegionSums(
const Parallel::Communication& comm);
336 void updateSummaryRegionValues(
const Inplace& inplace,
337 std::map<std::string, double>& miscSummaryData,
338 std::map<std::string, std::vector<double>>& regionData)
const;
340 static bool isOutputCreationDirective_(
const std::string& keyword);
343 static ScalarBuffer regionSum(
const ScalarBuffer& property,
344 const std::vector<int>& regionId,
345 const std::size_t maxNumberOfRegions,
346 const Parallel::Communication& comm);
348 static int regionMax(
const std::vector<int>& region,
349 const Parallel::Communication& comm);
351 static void update(Inplace& inplace,
352 const std::string& region_name,
353 const Inplace::Phase phase,
354 const std::size_t ntFip,
355 const ScalarBuffer& values);
357 static Scalar sum(
const ScalarBuffer& v);
359 void setupBlockData(std::function<
bool(
int)> isCartIdxOnThisRank);
360 void setupExtraBlockData(
const std::size_t reportStepNum,
361 std::function<
bool(
int)> isCartIdxOnThisRank);
363 virtual bool isDefunctParallelWell(
const std::string& wname)
const = 0;
364 virtual bool isOwnedByCurrentRank(
const std::string& wname)
const = 0;
365 virtual bool isOnCurrentRank(
const std::string& wname)
const = 0;
367 const EclipseState& eclState_;
368 const Schedule& schedule_;
369 const SummaryState& summaryState_;
371 SummaryConfig summaryConfig_;
376 bool enableEnergy_{
false};
377 bool constantTemperature_{
false};
378 bool enableMech_{
false};
380 bool enableSolvent_{
false};
381 bool enablePolymer_{
false};
382 bool enableFoam_{
false};
383 bool enableBrine_{
false};
384 bool enableSaltPrecipitation_{
false};
385 bool enableExtbo_{
false};
386 bool enableBioeffects_{
false};
387 bool enableGeochemistry_{
false};
389 bool forceDisableFipOutput_{
false};
390 bool forceDisableFipresvOutput_{
false};
391 bool computeFip_{
false};
394 std::unordered_map<std::string, std::vector<int>> regions_;
395 std::unordered_map<Inplace::Phase, std::vector<SummaryConfigNode>> regionNodes_;
397 std::vector<SummaryConfigNode> RPRNodes_;
398 std::vector<SummaryConfigNode> RPRPNodes_;
400 std::vector<int> failedCellsPb_;
401 std::vector<int> failedCellsPd_;
403 ScalarBuffer gasFormationVolumeFactor_;
404 ScalarBuffer hydrocarbonPoreVolume_;
405 ScalarBuffer pressureTimesPoreVolume_;
406 ScalarBuffer pressureTimesHydrocarbonVolume_;
407 ScalarBuffer dynamicPoreVolume_;
409 ScalarBuffer fluidPressure_;
410 ScalarBuffer temperature_;
415 ScalarBuffer overburdenPressure_;
416 ScalarBuffer oilSaturationPressure_;
417 ScalarBuffer drsdtcon_;
419 ScalarBuffer rswSol_;
420 ScalarBuffer cPolymer_;
424 ScalarBuffer permFact_;
433 ScalarBuffer gasDissolutionFactor_;
434 ScalarBuffer oilVaporizationFactor_;
435 ScalarBuffer gasDissolutionFactorInWater_;
436 ScalarBuffer waterVaporizationFactor_;
437 ScalarBuffer bubblePointPressure_;
438 ScalarBuffer dewPointPressure_;
439 ScalarBuffer rockCompPorvMultiplier_;
440 ScalarBuffer minimumOilPressure_;
441 ScalarBuffer saturatedOilFormationVolumeFactor_;
442 ScalarBuffer rockCompTransMultiplier_;
452 std::array<ScalarBuffer, numPhases> saturation_;
453 std::array<ScalarBuffer, numPhases> invB_;
454 std::array<ScalarBuffer, numPhases> density_;
455 std::array<ScalarBuffer, numPhases> viscosity_;
456 std::array<ScalarBuffer, numPhases> relativePermeability_;
462 std::array<ScalarBuffer, numPhases> residual_;
469 std::map<std::pair<std::string, int>,
double> blockData_;
472 std::map<std::pair<std::string, int>,
double> extraBlockData_;
474 std::optional<Inplace> initialInplace_;
475 bool local_data_valid_{
false};
477 std::optional<RegionPhasePoreVolAverage> regionAvgDensity_;
482 #endif // OPM_GENERIC_OUTPUT_BLACK_OIL_MODULE_HPP Definition: GenericOutputBlackoilModule.hpp:63
Definition: TracerContainer.hpp:38
Output module for the results black oil model writing in ECL binary format.
Output module for the results black oil model writing in ECL binary format.
Definition: FlowsContainer.hpp:43
Definition: GeochemistryContainer.hpp:35
static void registerParameters()
Register all run-time parameters for the Vtk output module.
Definition: GenericOutputBlackoilModule.cpp:194
void outputWellspecReport(const std::vector< std::string > &changedWells, const bool changedWellLists, const std::size_t reportStepNum, const double elapsed, boost::posix_time::ptime currentDate) const
Emit well specification report.
Definition: GenericOutputBlackoilModule.cpp:299
std::string moduleVersionName()
Return the version name of the module, for example "2015.10" (for a release branch) or "2016...
Definition: moduleVersion.cpp:34
Output module for the results black oil model writing in ECL binary format.
Output module for the results black oil model writing in ECL binary format.
Output module for the results black oil model writing in ECL binary format.
Definition: BioeffectsContainer.hpp:37
Definition: FIPContainer.hpp:47
This file contains a set of helper functions used by VFPProd / VFPInj.
Definition: blackoilbioeffectsmodules.hh:45
Definition: GenericOutputBlackoilModule.hpp:62
Definition: blackoilnewtonmethodparams.hpp:31
Definition: GenericOutputBlackoilModule.hpp:78
Inter-region flow accumulation maps for all region definition arrays.
Definition: InterRegFlows.hpp:178
Class computing RPTRST CONV output.
Definition: RSTConv.hpp:35
Definition: ExtboContainer.hpp:36
void accumulateDensityParallel()
Run cross-rank parallel accumulation of per-region phase density running sums (average values)...
Definition: GenericOutputBlackoilModule.cpp:225
void assignGlobalFieldsToSolution(data::Solution &sol)
Assign fields that are in global numbering to the solution.
Definition: GenericOutputBlackoilModule.cpp:1191
Collection of cell-level RFT data–i.e., pressures and saturations–in cells intersected by wells...
Definition: RFTContainer.hpp:51
MPI-aware facility for converting collection of tuples of region ID pairs and associate flow rates in...
Definition: LogOutputHelper.hpp:45
void assignToSolution(data::Solution &sol)
Move all buffers to data::Solution.
Definition: GenericOutputBlackoilModule.cpp:316
Output module for the results black oil model writing in ECL binary format.
Output module for the results black oil model writing in ECL binary format.
RSTConv rst_conv_
Helper class for RPTRST CONV.
Definition: GenericOutputBlackoilModule.hpp:467
void prepareDensityAccumulation()
Clear internal arrays for parallel accumulation of per-region phase density averages.
Definition: GenericOutputBlackoilModule.cpp:216
Definition: MechContainer.hpp:44
Definition: CO2H2Container.hpp:37