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> 57 #include <unordered_map> 70 namespace data {
class Solution; }
71 class EclHysteresisConfig;
76 class SummaryConfigNode;
79 template<
class Flu
idSystem>
82 using Scalar =
typename FluidSystem::Scalar;
92 void outputTimeStamp(
const std::string& lbl,
95 boost::posix_time::ptime currentDate);
106 void outputCumLog(std::size_t reportStepNum,
107 const bool connData);
110 void outputProdLog(std::size_t reportStepNum,
111 const bool connData);
114 void outputInjLog(std::size_t reportStepNum,
115 const bool connData);
118 void outputMSWLog(std::size_t reportStepNum);
121 void calc_initial_inplace(
const Parallel::Communication& comm);
124 Inplace calc_inplace(std::map<std::string, double>& miscSummaryData,
125 std::map<std::string, std::vector<double>>& regionData,
126 const Parallel::Communication& comm);
149 const bool changedWellLists,
150 const std::size_t reportStepNum,
151 const double elapsed,
152 boost::posix_time::ptime currentDate)
const;
154 void outputErrorLog(
const Parallel::Communication& comm)
const;
156 void addRftDataToWells(data::Wells& wellDatas,
157 std::size_t reportStepNum,
158 const Parallel::Communication& comm)
159 { this->rftC_.addToWells(wellDatas, reportStepNum, comm); }
166 void setRestart(
const data::Solution& sol,
168 unsigned globalDofIndex);
170 Scalar getSolventSaturation(
unsigned elemIdx)
const 172 if (sSol_.size() > elemIdx)
173 return sSol_[elemIdx];
178 Scalar getSolventRsw(
unsigned elemIdx)
const 180 if (rswSol_.size() > elemIdx)
181 return rswSol_[elemIdx];
186 Scalar getPolymerConcentration(
unsigned elemIdx)
const 188 if (cPolymer_.size() > elemIdx)
189 return cPolymer_[elemIdx];
194 Scalar getFoamConcentration(
unsigned elemIdx)
const 196 if (cFoam_.size() > elemIdx)
197 return cFoam_[elemIdx];
202 Scalar getSaltConcentration(
unsigned elemIdx)
const 204 if (cSalt_.size() > elemIdx)
205 return cSalt_[elemIdx];
210 Scalar getSaltSaturation(
unsigned elemIdx)
const 212 if (pSalt_.size() > elemIdx)
213 return pSalt_[elemIdx];
218 Scalar getPermFactor(
unsigned elemIdx)
const 220 if (permFact_.size() > elemIdx)
221 return permFact_[elemIdx];
226 const std::vector<Scalar>& getFluidPressure()
const 227 {
return fluidPressure_; }
230 {
return this->bioeffectsC_; }
233 {
return this->CO2H2C_; }
236 {
return this->flowsC_; }
238 bool needInterfaceFluxes([[maybe_unused]]
const bool isSubStep)
const 240 return this->interRegionFlows_.wantInterRegflowSummary();
243 const std::map<std::pair<std::string, int>,
double>& getBlockData()
248 std::map<std::pair<std::string, int>,
double>& getExtraBlockData()
250 return extraBlockData_;
258 const std::map<std::tuple<std::string, int, int>,
double>& getLgrBlockData()
const 260 return lgrBlockData_;
263 const Inplace* initialInplace()
const 265 return this->initialInplace_.has_value()
266 ? &*this->initialInplace_
270 bool localDataValid()
const{
271 return local_data_valid_;
274 void invalidateLocalData(){
275 local_data_valid_ =
false;
278 void validateLocalData(){
279 local_data_valid_ =
true;
282 template<
class Serializer>
283 void serializeOp(Serializer& serializer)
285 serializer(initialInplace_);
301 using ScalarBuffer = std::vector<Scalar>;
302 using StringBuffer = std::vector<std::string>;
303 enum { numPhases = FluidSystem::numPhases };
304 enum { numComponents = FluidSystem::numComponents };
305 static constexpr
int gasPhaseIdx = FluidSystem::gasPhaseIdx;
306 static constexpr
int oilPhaseIdx = FluidSystem::oilPhaseIdx;
307 static constexpr
int waterPhaseIdx = FluidSystem::waterPhaseIdx;
308 enum { gasCompIdx = FluidSystem::gasCompIdx };
309 enum { oilCompIdx = FluidSystem::oilCompIdx };
310 enum { waterCompIdx = FluidSystem::waterCompIdx };
311 using Dir = FaceDir::DirEnum;
314 const Schedule& schedule,
315 const SummaryConfig& summaryConfig,
316 const SummaryState& summaryState,
318 RSTConv::LocalToGlobalCellFunc globalCell,
319 std::function<
bool(
const unsigned)> isInterior,
320 const Parallel::Communication& comm,
322 bool constantTemperature,
328 bool enableSaltPrecipitation,
330 bool enableBioeffects,
331 bool enableGeochemistry);
333 void doAllocBuffers(
unsigned bufferSize,
334 unsigned reportStepNum,
337 const bool isRestart,
338 const EclHysteresisConfig* hysteresisConfig,
339 unsigned numOutputNnc = 0,
340 std::map<std::string, int> rstKeywords = {});
342 void makeRegionSum(Inplace& inplace,
343 const std::string& region_name,
344 const Parallel::Communication& comm)
const;
346 Inplace accumulateRegionSums(
const Parallel::Communication& comm);
348 void updateSummaryRegionValues(
const Inplace& inplace,
349 std::map<std::string, double>& miscSummaryData,
350 std::map<std::string, std::vector<double>>& regionData)
const;
352 static bool isOutputCreationDirective_(
const std::string& keyword);
355 static ScalarBuffer regionSum(
const ScalarBuffer& property,
356 const std::vector<int>& regionId,
357 const std::size_t maxNumberOfRegions,
358 const Parallel::Communication& comm);
360 static int regionMax(
const std::vector<int>& region,
361 const Parallel::Communication& comm);
363 static void update(Inplace& inplace,
364 const std::string& region_name,
365 const Inplace::Phase phase,
366 const std::size_t ntFip,
367 const ScalarBuffer& values);
369 static Scalar sum(
const ScalarBuffer& v);
371 void setupBlockData(std::function<
bool(
int)> isCartIdxOnThisRank);
372 void setupExtraBlockData(
const std::size_t reportStepNum,
373 std::function<
bool(
int)> isCartIdxOnThisRank);
389 void setupLgrBlockData(
const std::map<std::string, int>& lgrNameToLevel,
390 const std::function<
bool(
int,
int)>& isLgrCellOnThisRank);
392 virtual bool isDefunctParallelWell(
const std::string& wname)
const = 0;
393 virtual bool isOwnedByCurrentRank(
const std::string& wname)
const = 0;
394 virtual bool isOnCurrentRank(
const std::string& wname)
const = 0;
396 const EclipseState& eclState_;
397 const Schedule& schedule_;
398 const SummaryState& summaryState_;
400 SummaryConfig summaryConfig_;
405 bool enableEnergy_{
false};
406 bool constantTemperature_{
false};
407 bool enableMech_{
false};
409 bool enableSolvent_{
false};
410 bool enablePolymer_{
false};
411 bool enableFoam_{
false};
412 bool enableBrine_{
false};
413 bool enableSaltPrecipitation_{
false};
414 bool enableExtbo_{
false};
415 bool enableBioeffects_{
false};
416 bool enableGeochemistry_{
false};
418 bool forceDisableFipOutput_{
false};
419 bool forceDisableFipresvOutput_{
false};
420 bool computeFip_{
false};
423 std::unordered_map<std::string, std::vector<int>> regions_;
424 std::unordered_map<Inplace::Phase, std::vector<SummaryConfigNode>> regionNodes_;
426 std::vector<SummaryConfigNode> RPRNodes_;
427 std::vector<SummaryConfigNode> RPRPNodes_;
429 std::vector<int> failedCellsPb_;
430 std::vector<int> failedCellsPd_;
432 ScalarBuffer gasFormationVolumeFactor_;
433 ScalarBuffer hydrocarbonPoreVolume_;
434 ScalarBuffer pressureTimesPoreVolume_;
435 ScalarBuffer pressureTimesHydrocarbonVolume_;
437 ScalarBuffer fluidPressure_;
438 ScalarBuffer temperature_;
443 ScalarBuffer overburdenPressure_;
444 ScalarBuffer oilSaturationPressure_;
445 ScalarBuffer drsdtcon_;
447 ScalarBuffer rswSol_;
448 ScalarBuffer cPolymer_;
452 ScalarBuffer permFact_;
461 ScalarBuffer gasDissolutionFactor_;
462 ScalarBuffer oilVaporizationFactor_;
463 ScalarBuffer gasDissolutionFactorInWater_;
464 ScalarBuffer waterVaporizationFactor_;
465 ScalarBuffer bubblePointPressure_;
466 ScalarBuffer dewPointPressure_;
467 ScalarBuffer rockCompPorvMultiplier_;
468 ScalarBuffer minimumOilPressure_;
469 ScalarBuffer saturatedOilFormationVolumeFactor_;
470 ScalarBuffer rockCompTransMultiplier_;
480 std::array<ScalarBuffer, numPhases> saturation_;
481 std::array<ScalarBuffer, numPhases> invB_;
482 std::array<ScalarBuffer, numPhases> density_;
483 std::array<ScalarBuffer, numPhases> viscosity_;
484 std::array<ScalarBuffer, numPhases> relativePermeability_;
490 std::array<ScalarBuffer, numPhases> residual_;
497 std::map<std::pair<std::string, int>,
double> blockData_;
500 std::map<std::pair<std::string, int>,
double> extraBlockData_;
507 std::map<std::tuple<std::string, int, int>,
double> lgrBlockData_;
509 std::optional<Inplace> initialInplace_;
510 bool local_data_valid_{
false};
512 std::optional<RegionPhasePoreVolAverage> regionAvgDensity_;
517 #endif // OPM_GENERIC_OUTPUT_BLACK_OIL_MODULE_HPP Definition: GenericOutputBlackoilModule.hpp:64
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
Structs needed for tpfalinearizer and its gpuparams struct extracted to be defined in one place that ...
Definition: blackoilbioeffectsmodules.hh:45
Definition: GenericOutputBlackoilModule.hpp:63
Definition: blackoilnewtonmethodparams.hpp:31
Definition: GenericOutputBlackoilModule.hpp:80
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:1236
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:495
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