GenericOutputModule.hpp
Go to the documentation of this file.
1// -*- mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
2// vi: set et ts=4 sw=4 sts=4:
3/*
4 This file is part of the Open Porous Media project (OPM).
5
6 OPM is free software: you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation, either version 2 of the License, or
9 (at your option) any later version.
10
11 OPM is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details.
15
16 You should have received a copy of the GNU General Public License
17 along with OPM. If not, see <http://www.gnu.org/licenses/>.
18 Consult the COPYING file in the top-level source directory of this
19 module for the precise wording of the license and the list of
20 copyright holders.
21*/
26#ifndef OPM_GENERIC_OUTPUT_MODULE_HPP
27#define OPM_GENERIC_OUTPUT_MODULE_HPP
28
29#include <opm/input/eclipse/EclipseState/EclipseState.hpp>
30#include <opm/input/eclipse/EclipseState/Grid/FaceDir.hpp>
31#include <opm/input/eclipse/EclipseState/SummaryConfig/SummaryConfig.hpp>
32#include <opm/input/eclipse/Units/UnitSystem.hpp>
33
34#include <opm/material/common/MathToolbox.hpp>
35
36#include <opm/output/data/RegionVariableMapping.hpp>
37#include <opm/output/data/Wells.hpp>
38
39#include <opm/output/eclipse/Inplace.hpp>
40#include <opm/output/eclipse/RegionVariableCollection.hpp>
41
56
58
59#include <array>
60#include <cassert>
61#include <cstddef>
62#include <functional>
63#include <map>
64#include <memory>
65#include <optional>
66#include <string_view>
67#include <tuple>
68#include <unordered_map>
69#include <utility>
70#include <vector>
71
72namespace Opm::Parameters {
73
74struct ForceDisableFluidInPlaceOutput { static constexpr bool value = false; };
75struct ForceDisableResvFluidInPlaceOutput { static constexpr bool value = false; };
76
77} // namespace Opm::Parameters
78
79namespace Opm {
80
81namespace data { class Solution; }
82class EclHysteresisConfig;
83class EclipseGrid;
84class EclipseState;
85class Schedule;
86class SummaryConfig;
87class SummaryConfigNode;
88class SummaryState;
89
90template<class FluidSystem>
92public:
93 using Scalar = typename FluidSystem::Scalar;
94
95 // Virtual destructor for safer inheritance.
97
101 static void registerParameters();
102
103 void outputTimeStamp(const std::string& lbl,
104 double elapsed,
105 int rstep,
106 boost::posix_time::ptime currentDate);
107
111
115
116 // write cumulative production and injection reports to output
117 void outputCumLog(std::size_t reportStepNum,
118 const bool connData);
119
120 // write production report to output
121 void outputProdLog(std::size_t reportStepNum,
122 const bool connData);
123
124 // write injection report to output
125 void outputInjLog(std::size_t reportStepNum,
126 const bool connData);
127
128 // write msw report to output
129 void outputMSWLog(std::size_t reportStepNum);
130
131 // calculate Initial Fluid In Place
133
134 // calculate Fluid In Place
135 Inplace calc_inplace(std::map<std::string, double>& miscSummaryData,
136 std::map<std::string, std::vector<double>>& regionData,
137 const Parallel::Communication& comm);
138
159 void outputWellspecReport(const std::vector<std::string>& changedWells,
160 const bool changedWellLists,
161 const std::size_t reportStepNum,
162 const double elapsed,
163 boost::posix_time::ptime currentDate) const;
164
166
167 void addRftDataToWells(data::Wells& wellDatas,
168 std::size_t reportStepNum,
169 const Parallel::Communication& comm)
170 { this->rftC_.addToWells(wellDatas, reportStepNum, comm); }
171
175 virtual void assignToSolution(data::Solution& sol);
176
177 virtual void setRestart(const data::Solution& sol,
178 unsigned elemIdx,
179 unsigned globalDofIndex);
180
181 Scalar getSolventSaturation(unsigned elemIdx) const
182 {
183 if (sSol_.size() > elemIdx)
184 return sSol_[elemIdx];
185
186 return 0;
187 }
188
189 Scalar getSolventRsw(unsigned elemIdx) const
190 {
191 if (rswSol_.size() > elemIdx)
192 return rswSol_[elemIdx];
193
194 return 0;
195 }
196
197 Scalar getPolymerConcentration(unsigned elemIdx) const
198 {
199 if (cPolymer_.size() > elemIdx)
200 return cPolymer_[elemIdx];
201
202 return 0;
203 }
204
205 Scalar getFoamConcentration(unsigned elemIdx) const
206 {
207 if (cFoam_.size() > elemIdx)
208 return cFoam_[elemIdx];
209
210 return 0;
211 }
212
213 Scalar getSaltConcentration(unsigned elemIdx) const
214 {
215 if (cSalt_.size() > elemIdx)
216 return cSalt_[elemIdx];
217
218 return 0;
219 }
220
221 Scalar getSaltSaturation(unsigned elemIdx) const
222 {
223 if (pSalt_.size() > elemIdx)
224 return pSalt_[elemIdx];
225
226 return 0;
227 }
228
229 Scalar getPermFactor(unsigned elemIdx) const
230 {
231 if (permFact_.size() > elemIdx)
232 return permFact_[elemIdx];
233
234 return 0;
235 }
236
237 const std::vector<Scalar>& getFluidPressure() const
238 { return fluidPressure_; }
239
241 { return this->bioeffectsC_; }
242
244 { return this->CO2H2C_; }
245
247 { return this->flowsC_; }
248
249 bool needInterfaceFluxes([[maybe_unused]] const bool isSubStep) const
250 {
252 }
253
254 const std::map<std::pair<std::string, int>, double>& getBlockData()
255 {
256 return blockData_;
257 }
258
259 std::map<std::pair<std::string, int>, double>& getExtraBlockData()
260 {
261 return extraBlockData_;
262 }
263
264 // Per-LGR-cell block-summary results. Cell identity is the
265 // (keyword, grid level, level-local linearised Cartesian cell index)
266 // tuple — the same identity data::Connection carries as
267 // (lgr_grid, index) for LC* connection vectors. Empty for runs
268 // without LB* summary requests.
269 const std::map<std::tuple<std::string, int, int>, double>& getLgrBlockData() const
270 {
271 return lgrBlockData_;
272 }
273
274 const Inplace* initialInplace() const
275 {
276 return this->initialInplace_.has_value()
277 ? &*this->initialInplace_
278 : nullptr;
279 }
280
281 bool localDataValid() const{
282 return local_data_valid_;
283 }
284
286 local_data_valid_ = false;
287 }
288
291 virtual void validateLocalData()
292 {
293 local_data_valid_ = true;
294 }
295
296 template<class Serializer>
297 void serializeOp(Serializer& serializer)
298 {
299 serializer(initialInplace_);
300 }
301
303 { return this->rst_conv_; }
304
305 const RSTConv& getConv() const
306 { return this->rst_conv_; }
307
308 const data::RegionVariableMapping& regVarMapping() const
309 {
310 return this->regVarMap_;
311 }
312
313 RegionVariableCollection& regionVariables()
314 {
315 return this->regionVars_;
316 }
317
322 void assignGlobalFieldsToSolution(data::Solution& sol);
323
324protected:
325 using ScalarBuffer = std::vector<Scalar>;
326 using StringBuffer = std::vector<std::string>;
327 enum { numPhases = FluidSystem::numPhases };
328 enum { numComponents = FluidSystem::numComponents };
329 static constexpr int gasPhaseIdx = FluidSystem::gasPhaseIdx;
330 static constexpr int oilPhaseIdx = FluidSystem::oilPhaseIdx;
331 static constexpr int waterPhaseIdx = FluidSystem::waterPhaseIdx;
332 enum { gasCompIdx = FluidSystem::gasCompIdx };
333 enum { oilCompIdx = FluidSystem::oilCompIdx };
334 enum { waterCompIdx = FluidSystem::waterCompIdx };
335 using Dir = FaceDir::DirEnum;
336
338 template <class FluidState>
339 Scalar hydroCarbonFraction(const FluidState& fs) const
340 {
341 if (this->eclState_.runspec().co2Storage()) {
342 // CO2 storage uses the full pore volume.
343 return 1.0;
344 }
345
346 // Sum the saturations of the active hydrocarbon phases.
347 auto hydrocarbon = Scalar {0};
348 if (FluidSystem::phaseIsActive(oilPhaseIdx)) {
349 hydrocarbon += getValue(fs.saturation(oilPhaseIdx));
350 }
351
352 if (FluidSystem::phaseIsActive(gasPhaseIdx)) {
353 hydrocarbon += getValue(fs.saturation(gasPhaseIdx));
354 }
355
356 return hydrocarbon;
357 }
358
361 template <class IntensiveQuantities>
362 void updateTotalVolumesAndPressures_(const unsigned globalDofIdx,
363 const IntensiveQuantities& intQuants,
364 const double totVolume,
365 const Scalar referencePorosity)
366 {
367 const auto& fs = intQuants.fluidState();
368
369 const double pv = totVolume * getValue(intQuants.porosity());
370 const auto hydrocarbon = this->hydroCarbonFraction(fs);
371
372 this->fipC_.assignPoreVolume(globalDofIdx,
373 totVolume * referencePorosity,
374 pv);
375 if (! this->hydrocarbonPoreVolume_.empty()) {
376 this->hydrocarbonPoreVolume_[globalDofIdx] = pv * hydrocarbon;
377 }
378
379 if (!this->pressureTimesHydrocarbonVolume_.empty() &&
380 !this->pressureTimesPoreVolume_.empty())
381 {
382 assert(this->hydrocarbonPoreVolume_.size() == this->pressureTimesHydrocarbonVolume_.size());
383 assert(this->fipC_.get(Inplace::Phase::PoreVolume).size() == this->pressureTimesPoreVolume_.size());
384
385 if (FluidSystem::phaseIsActive(oilPhaseIdx)) {
386 this->pressureTimesPoreVolume_[globalDofIdx] =
387 getValue(fs.pressure(oilPhaseIdx)) * pv;
388
389 this->pressureTimesHydrocarbonVolume_[globalDofIdx] =
390 this->pressureTimesPoreVolume_[globalDofIdx] * hydrocarbon;
391 }
392 else if (FluidSystem::phaseIsActive(gasPhaseIdx)) {
393 this->pressureTimesPoreVolume_[globalDofIdx] =
394 getValue(fs.pressure(gasPhaseIdx)) * pv;
395
396 this->pressureTimesHydrocarbonVolume_[globalDofIdx] =
397 this->pressureTimesPoreVolume_[globalDofIdx] * hydrocarbon;
398 }
399 else if (FluidSystem::phaseIsActive(waterPhaseIdx)) {
400 this->pressureTimesPoreVolume_[globalDofIdx] =
401 getValue(fs.pressure(waterPhaseIdx)) * pv;
402 }
403 }
404 }
405
410 {
411 std::string_view oilDensity{};
412 std::string_view gasDensity{};
413 std::string_view waterDensity{};
414 std::string_view oilViscosity{};
415 std::string_view gasViscosity{};
416 std::string_view waterViscosity{};
417 };
418
420 void assignPhaseProperties(data::Solution& sol,
421 const PhasePropertyNames& names);
422
425 static bool allocBufferIfRequested(std::map<std::string, int>& rstKeywords,
426 unsigned bufferSize,
427 std::vector<Scalar>& buffer,
428 std::string_view kw,
429 bool supported,
430 bool required = false);
431
434 void assignBuffer(data::Solution& sol,
435 std::string_view name,
436 UnitSystem::measure measure,
437 std::vector<Scalar>& buffer);
438
440 void assignBuffer(data::Solution& sol,
441 std::string_view name,
442 UnitSystem::measure measure,
443 std::vector<Scalar>& buffer,
444 int index);
445
446 GenericOutputModule(const EclipseState& eclState,
447 const Schedule& schedule,
448 const SummaryConfig& summaryConfig,
449 const SummaryState& summaryState,
450 const std::string& moduleVersionName,
452 std::function<bool(const unsigned)> isInterior,
453 const Parallel::Communication& comm,
454 bool enableEnergy,
455 bool constantTemperature,
456 bool enableMech,
457 bool enableSolvent,
458 bool enablePolymer,
459 bool enableFoam,
460 bool enableBrine,
461 bool enableSaltPrecipitation,
462 bool enableExtbo,
463 bool enableBioeffects,
464 bool enableGeochemistry);
465
466 void doAllocBuffers(unsigned bufferSize,
467 unsigned reportStepNum,
468 const bool substep,
469 const bool log,
470 const bool forceRestartFieldAllocation,
471 const EclHysteresisConfig* hysteresisConfig,
472 unsigned numOutputNnc = 0,
473 std::map<std::string, int> rstKeywords = {});
474
478 virtual void allocFormulationBuffers(std::map<std::string, int>& rstKeywords,
479 unsigned bufferSize) = 0;
480
481 void makeRegionSum(Inplace& inplace,
482 const std::string& region_name,
483 const Parallel::Communication& comm) const;
484
486
487 void updateSummaryRegionValues(const Inplace& inplace,
488 std::map<std::string, double>& miscSummaryData,
489 std::map<std::string, std::vector<double>>& regionData) const;
490
491 static bool isOutputCreationDirective_(const std::string& keyword);
492
493 // Sum Fip values over regions.
494 static ScalarBuffer regionSum(const ScalarBuffer& property,
495 const std::vector<int>& regionId,
496 const std::size_t maxNumberOfRegions,
497 const Parallel::Communication& comm);
498
499 static int regionMax(const std::vector<int>& region,
500 const Parallel::Communication& comm);
501
502 static void update(Inplace& inplace,
503 const std::string& region_name,
504 const Inplace::Phase phase,
505 const std::size_t ntFip,
506 const ScalarBuffer& values);
507
508 static Scalar sum(const ScalarBuffer& v);
509
510 void setupBlockData(std::function<bool(int)> isCartIdxOnThisRank);
511 void setupExtraBlockData(const std::size_t reportStepNum,
512 std::function<bool(int)> isCartIdxOnThisRank);
513
514 // Allocate lgrBlockData_ slots for every Block-category summary node
515 // that names an LGR cell. The level component of the key is resolved
516 // through EclipseGrid::get_lgr_cell_index (the same call data::Connection
517 // uses for lgr_grid on LC* connection vectors); the level-local
518 // linearised Cartesian index is recovered from node.number - 1.
519 //
520 // No rank check here — ownership for LGR leaf cells is decided in the
521 // walk via Dune::InteriorEntity on the leaf entity; the existing
522 // isCartIdxOnThisRank predicate operates in the global Cartesian space,
523 // which LGR cells do not inhabit.
524 //
525 // Caller-supplied via parameter rather than read from a member to keep
526 // this module decoupled from EclipseState ownership (matching how the
527 // existing block path receives its rank predicate as an argument).
528 void setupLgrBlockData(const std::map<std::string, int>& lgrNameToLevel,
529 const std::function<bool(int, int)>& isLgrCellOnThisRank);
530
531 virtual bool isDefunctParallelWell(const std::string& wname) const = 0;
532 virtual bool isOwnedByCurrentRank(const std::string& wname) const = 0;
533 virtual bool isOnCurrentRank(const std::string& wname) const = 0;
534
535 const EclipseState& eclState_;
536 const Schedule& schedule_;
537 const SummaryState& summaryState_;
538
539 SummaryConfig summaryConfig_;
540
543
544 bool enableEnergy_{false};
546 bool enableMech_{false};
547
548 bool enableSolvent_{false};
549 bool enablePolymer_{false};
550 bool enableFoam_{false};
551 bool enableBrine_{false};
553 bool enableExtbo_{false};
554 bool enableBioeffects_{false};
556
559 bool computeFip_{false};
560
568 RegionVariableCollection regionVars_;
569
571 std::unordered_map<std::string, std::vector<int>> regions_;
572 std::unordered_map<Inplace::Phase, std::vector<SummaryConfigNode>> regionNodes_;
573
574 std::vector<SummaryConfigNode> RPRNodes_;
575 std::vector<SummaryConfigNode> RPRPNodes_;
576
580 data::RegionVariableMapping regVarMap_{};
581
582 std::vector<int> failedCellsPb_;
583 std::vector<int> failedCellsPd_;
584
625
626 // buffers for mechanical output
629
630 std::array<ScalarBuffer, numPhases> saturation_;
631 std::array<ScalarBuffer, numPhases> density_;
632 std::array<ScalarBuffer, numPhases> viscosity_;
633
635
637
638 std::array<ScalarBuffer, numPhases> residual_;
639
641
644
645 std::map<std::pair<std::string, int>, double> blockData_;
646 // Extra block data required for non-summary output reasons
647 // Example is the block pressures for RPTSCHED WELLS=2
648 std::map<std::pair<std::string, int>, double> extraBlockData_;
649
650 // Per-LGR-cell block-summary results. Keyed by (keyword, grid level,
651 // level-local linearised Cartesian cell index). The map type matches
652 // Summary::DynamicSimulatorState::LgrBlockValues so the writer can hand
653 // a pointer to this member directly to the summary engine. Empty for
654 // runs that request no LB* summary vectors (zero non-LGR cost).
655 std::map<std::tuple<std::string, int, int>, double> lgrBlockData_;
656
657 std::optional<Inplace> initialInplace_;
658 bool local_data_valid_{false};
659
660 std::optional<RegionPhasePoreVolAverage> regionAvgDensity_;
661
662private:
666 void initialiseRegionVariableSupport();
667};
668
669} // namespace Opm
670
671#endif // OPM_GENERIC_OUTPUT_MODULE_HPP
Definition: BioeffectsContainer.hpp:38
Definition: CO2H2Container.hpp:38
Definition: ExtboContainer.hpp:37
Definition: FIPContainer.hpp:47
Definition: FlowsContainer.hpp:44
Definition: GenericOutputModule.hpp:91
GenericOutputModule(const EclipseState &eclState, const Schedule &schedule, const SummaryConfig &summaryConfig, const SummaryState &summaryState, const std::string &moduleVersionName, RSTConv::LocalToGlobalCellFunc globalCell, std::function< bool(const unsigned)> isInterior, const Parallel::Communication &comm, bool enableEnergy, bool constantTemperature, bool enableMech, bool enableSolvent, bool enablePolymer, bool enableFoam, bool enableBrine, bool enableSaltPrecipitation, bool enableExtbo, bool enableBioeffects, bool enableGeochemistry)
const Schedule & schedule_
Definition: GenericOutputModule.hpp:536
ScalarBuffer oilVaporizationFactor_
Definition: GenericOutputModule.hpp:613
bool forceDisableFipOutput_
Definition: GenericOutputModule.hpp:557
RFTContainer< FluidSystem > rftC_
Definition: GenericOutputModule.hpp:642
Scalar getSaltConcentration(unsigned elemIdx) const
Definition: GenericOutputModule.hpp:213
ScalarBuffer saturatedOilFormationVolumeFactor_
Definition: GenericOutputModule.hpp:618
std::unordered_map< Inplace::Phase, std::vector< SummaryConfigNode > > regionNodes_
Definition: GenericOutputModule.hpp:572
virtual void validateLocalData()
Definition: GenericOutputModule.hpp:291
bool enableGeochemistry_
Definition: GenericOutputModule.hpp:555
RegionVariableCollection & regionVariables()
Definition: GenericOutputModule.hpp:313
GeochemistryContainer< Scalar > geochemC_
Definition: GenericOutputModule.hpp:634
void outputTimeStamp(const std::string &lbl, double elapsed, int rstep, boost::posix_time::ptime currentDate)
std::optional< Inplace > initialInplace_
Definition: GenericOutputModule.hpp:657
ScalarBuffer rockCompPorvMultiplier_
Definition: GenericOutputModule.hpp:616
TracerContainer< FluidSystem > tracerC_
Definition: GenericOutputModule.hpp:636
ScalarBuffer hydrocarbonPoreVolume_
Definition: GenericOutputModule.hpp:586
void doAllocBuffers(unsigned bufferSize, unsigned reportStepNum, const bool substep, const bool log, const bool forceRestartFieldAllocation, const EclHysteresisConfig *hysteresisConfig, unsigned numOutputNnc=0, std::map< std::string, int > rstKeywords={})
CO2H2Container< Scalar > CO2H2C_
Definition: GenericOutputModule.hpp:621
std::array< ScalarBuffer, numPhases > residual_
Definition: GenericOutputModule.hpp:638
@ numPhases
Definition: GenericOutputModule.hpp:327
static constexpr int gasPhaseIdx
Definition: GenericOutputModule.hpp:329
ScalarBuffer sSol_
Definition: GenericOutputModule.hpp:597
void outputProdLog(std::size_t reportStepNum, const bool connData)
std::map< std::tuple< std::string, int, int >, double > lgrBlockData_
Definition: GenericOutputModule.hpp:655
void setupExtraBlockData(const std::size_t reportStepNum, std::function< bool(int)> isCartIdxOnThisRank)
typename FluidSystem::Scalar Scalar
Definition: GenericOutputModule.hpp:93
void calc_initial_inplace(const Parallel::Communication &comm)
std::vector< int > failedCellsPd_
Definition: GenericOutputModule.hpp:583
ScalarBuffer shmax_
Definition: GenericOutputModule.hpp:608
std::vector< SummaryConfigNode > RPRNodes_
Definition: GenericOutputModule.hpp:574
bool localDataValid() const
Definition: GenericOutputModule.hpp:281
ScalarBuffer sgmax_
Definition: GenericOutputModule.hpp:607
bool enableMech_
Definition: GenericOutputModule.hpp:546
ScalarBuffer rockCompTransMultiplier_
Definition: GenericOutputModule.hpp:619
bool local_data_valid_
Definition: GenericOutputModule.hpp:658
const SummaryState & summaryState_
Definition: GenericOutputModule.hpp:537
void setupBlockData(std::function< bool(int)> isCartIdxOnThisRank)
ScalarBuffer minimumOilPressure_
Definition: GenericOutputModule.hpp:617
virtual bool isOnCurrentRank(const std::string &wname) const =0
Inplace accumulateRegionSums(const Parallel::Communication &comm)
Scalar getFoamConcentration(unsigned elemIdx) const
Definition: GenericOutputModule.hpp:205
bool constantTemperature_
Definition: GenericOutputModule.hpp:545
bool enableBioeffects_
Definition: GenericOutputModule.hpp:554
ScalarBuffer temperature_
Definition: GenericOutputModule.hpp:591
ScalarBuffer pcow_
Definition: GenericOutputModule.hpp:623
Scalar getSaltSaturation(unsigned elemIdx) const
Definition: GenericOutputModule.hpp:221
bool enableBrine_
Definition: GenericOutputModule.hpp:551
ScalarBuffer drsdtcon_
Definition: GenericOutputModule.hpp:596
bool computeFip_
Definition: GenericOutputModule.hpp:559
std::optional< RegionPhasePoreVolAverage > regionAvgDensity_
Definition: GenericOutputModule.hpp:660
ScalarBuffer permFact_
Definition: GenericOutputModule.hpp:603
ScalarBuffer pressureTimesPoreVolume_
Definition: GenericOutputModule.hpp:587
ScalarBuffer overburdenPressure_
Definition: GenericOutputModule.hpp:594
TpsaContainer< Scalar > tpsaC_
Definition: GenericOutputModule.hpp:628
RSTConv rst_conv_
Helper class for RPTRST CONV.
Definition: GenericOutputModule.hpp:643
ScalarBuffer rPorV_
Definition: GenericOutputModule.hpp:589
std::array< ScalarBuffer, numPhases > viscosity_
Definition: GenericOutputModule.hpp:632
void serializeOp(Serializer &serializer)
Definition: GenericOutputModule.hpp:297
void setupLgrBlockData(const std::map< std::string, int > &lgrNameToLevel, const std::function< bool(int, int)> &isLgrCellOnThisRank)
bool enableExtbo_
Definition: GenericOutputModule.hpp:553
ScalarBuffer rvw_
Definition: GenericOutputModule.hpp:593
FIPContainer< FluidSystem > fipC_
Definition: GenericOutputModule.hpp:570
bool forceDisableFipresvOutput_
Definition: GenericOutputModule.hpp:558
const RSTConv & getConv() const
Definition: GenericOutputModule.hpp:305
const CO2H2Container< Scalar > & getCO2H2() const
Definition: GenericOutputModule.hpp:243
ScalarBuffer cPolymer_
Definition: GenericOutputModule.hpp:599
void assignBuffer(data::Solution &sol, std::string_view name, UnitSystem::measure measure, std::vector< Scalar > &buffer)
void outputMSWLog(std::size_t reportStepNum)
static bool allocBufferIfRequested(std::map< std::string, int > &rstKeywords, unsigned bufferSize, std::vector< Scalar > &buffer, std::string_view kw, bool supported, bool required=false)
static Scalar sum(const ScalarBuffer &v)
void assignGlobalFieldsToSolution(data::Solution &sol)
Assign fields that are in global numbering to the solution. \detail This is used to add fields that f...
bool enableFoam_
Definition: GenericOutputModule.hpp:550
RSTConv & getConv()
Definition: GenericOutputModule.hpp:302
std::unordered_map< std::string, std::vector< int > > regions_
Definition: GenericOutputModule.hpp:571
ScalarBuffer swmin_
Definition: GenericOutputModule.hpp:610
Scalar hydroCarbonFraction(const FluidState &fs) const
Fraction of pore volume occupied by hydrocarbons.
Definition: GenericOutputModule.hpp:339
static constexpr int oilPhaseIdx
Definition: GenericOutputModule.hpp:330
virtual bool isOwnedByCurrentRank(const std::string &wname) const =0
FlowsContainer< FluidSystem > flowsC_
Definition: GenericOutputModule.hpp:640
std::map< std::pair< std::string, int >, double > blockData_
Definition: GenericOutputModule.hpp:645
bool enableSolvent_
Definition: GenericOutputModule.hpp:548
ScalarBuffer gasDissolutionFactor_
Definition: GenericOutputModule.hpp:612
void addRftDataToWells(data::Wells &wellDatas, std::size_t reportStepNum, const Parallel::Communication &comm)
Definition: GenericOutputModule.hpp:167
@ oilCompIdx
Definition: GenericOutputModule.hpp:333
FaceDir::DirEnum Dir
Definition: GenericOutputModule.hpp:335
MechContainer< Scalar > mech_
Definition: GenericOutputModule.hpp:627
SummaryConfig summaryConfig_
Definition: GenericOutputModule.hpp:539
BioeffectsContainer< Scalar > bioeffectsC_
Definition: GenericOutputModule.hpp:620
ExtboContainer< Scalar > extboC_
Definition: GenericOutputModule.hpp:604
const data::RegionVariableMapping & regVarMapping() const
Definition: GenericOutputModule.hpp:308
static ScalarBuffer regionSum(const ScalarBuffer &property, const std::vector< int > &regionId, const std::size_t maxNumberOfRegions, const Parallel::Communication &comm)
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
Scalar getPermFactor(unsigned elemIdx) const
Definition: GenericOutputModule.hpp:229
void outputCumLog(std::size_t reportStepNum, const bool connData)
std::vector< std::string > StringBuffer
Definition: GenericOutputModule.hpp:326
void invalidateLocalData()
Definition: GenericOutputModule.hpp:285
ScalarBuffer gasDissolutionFactorInWater_
Definition: GenericOutputModule.hpp:614
@ gasCompIdx
Definition: GenericOutputModule.hpp:332
const std::vector< Scalar > & getFluidPressure() const
Definition: GenericOutputModule.hpp:237
ScalarBuffer pcgw_
Definition: GenericOutputModule.hpp:622
Scalar getSolventSaturation(unsigned elemIdx) const
Definition: GenericOutputModule.hpp:181
bool enablePolymer_
Definition: GenericOutputModule.hpp:549
LogOutputHelper< Scalar > logOutput_
Definition: GenericOutputModule.hpp:542
Scalar getSolventRsw(unsigned elemIdx) const
Definition: GenericOutputModule.hpp:189
const std::map< std::pair< std::string, int >, double > & getBlockData()
Definition: GenericOutputModule.hpp:254
static void update(Inplace &inplace, const std::string &region_name, const Inplace::Phase phase, const std::size_t ntFip, const ScalarBuffer &values)
void assignPhaseProperties(data::Solution &sol, const PhasePropertyNames &names)
Move the phase density and viscosity buffers to sol under names.
std::vector< Scalar > ScalarBuffer
Definition: GenericOutputModule.hpp:325
void outputErrorLog(const Parallel::Communication &comm) const
void outputInjLog(std::size_t reportStepNum, const bool connData)
ScalarBuffer somin_
Definition: GenericOutputModule.hpp:609
const BioeffectsContainer< Scalar > & getBioeffects() const
Definition: GenericOutputModule.hpp:240
void updateTotalVolumesAndPressures_(const unsigned globalDofIdx, const IntensiveQuantities &intQuants, const double totVolume, const Scalar referencePorosity)
Definition: GenericOutputModule.hpp:362
InterRegFlowMap interRegionFlows_
Definition: GenericOutputModule.hpp:541
void updateSummaryRegionValues(const Inplace &inplace, std::map< std::string, double > &miscSummaryData, std::map< std::string, std::vector< double > > &regionData) const
static constexpr int waterPhaseIdx
Definition: GenericOutputModule.hpp:331
const FlowsContainer< FluidSystem > & getFlows() const
Definition: GenericOutputModule.hpp:246
bool enableSaltPrecipitation_
Definition: GenericOutputModule.hpp:552
ScalarBuffer soMax_
Definition: GenericOutputModule.hpp:605
const std::map< std::tuple< std::string, int, int >, double > & getLgrBlockData() const
Definition: GenericOutputModule.hpp:269
std::array< ScalarBuffer, numPhases > density_
Definition: GenericOutputModule.hpp:631
ScalarBuffer pressureTimesHydrocarbonVolume_
Definition: GenericOutputModule.hpp:588
ScalarBuffer cFoam_
Definition: GenericOutputModule.hpp:600
ScalarBuffer waterVaporizationFactor_
Definition: GenericOutputModule.hpp:615
@ waterCompIdx
Definition: GenericOutputModule.hpp:334
std::array< ScalarBuffer, numPhases > saturation_
Definition: GenericOutputModule.hpp:630
ScalarBuffer rsw_
Definition: GenericOutputModule.hpp:592
Inplace calc_inplace(std::map< std::string, double > &miscSummaryData, std::map< std::string, std::vector< double > > &regionData, const Parallel::Communication &comm)
ScalarBuffer oilSaturationPressure_
Definition: GenericOutputModule.hpp:595
const EclipseState & eclState_
Definition: GenericOutputModule.hpp:535
static bool isOutputCreationDirective_(const std::string &keyword)
std::vector< SummaryConfigNode > RPRPNodes_
Definition: GenericOutputModule.hpp:575
ScalarBuffer ppcw_
Definition: GenericOutputModule.hpp:611
virtual bool isDefunctParallelWell(const std::string &wname) const =0
std::map< std::pair< std::string, int >, double > & getExtraBlockData()
Definition: GenericOutputModule.hpp:259
@ numComponents
Definition: GenericOutputModule.hpp:328
virtual void assignToSolution(data::Solution &sol)
Move all buffers to data::Solution.
ScalarBuffer cSalt_
Definition: GenericOutputModule.hpp:601
ScalarBuffer pcog_
Definition: GenericOutputModule.hpp:624
const Inplace * initialInplace() const
Definition: GenericOutputModule.hpp:274
bool needInterfaceFluxes(const bool isSubStep) const
Definition: GenericOutputModule.hpp:249
ScalarBuffer swMax_
Definition: GenericOutputModule.hpp:606
ScalarBuffer rswSol_
Definition: GenericOutputModule.hpp:598
std::map< std::pair< std::string, int >, double > extraBlockData_
Definition: GenericOutputModule.hpp:648
static void registerParameters()
Register all run-time parameters for the Vtk output module.
ScalarBuffer fluidPressure_
Definition: GenericOutputModule.hpp:590
ScalarBuffer gasFormationVolumeFactor_
Definition: GenericOutputModule.hpp:585
virtual void setRestart(const data::Solution &sol, unsigned elemIdx, unsigned globalDofIndex)
void assignBuffer(data::Solution &sol, std::string_view name, UnitSystem::measure measure, std::vector< Scalar > &buffer, int index)
A negative index marks an inactive phase and reports nothing.
bool enableEnergy_
Definition: GenericOutputModule.hpp:544
Scalar getPolymerConcentration(unsigned elemIdx) const
Definition: GenericOutputModule.hpp:197
data::RegionVariableMapping regVarMap_
Definition: GenericOutputModule.hpp:580
std::vector< int > failedCellsPb_
Definition: GenericOutputModule.hpp:582
void makeRegionSum(Inplace &inplace, const std::string &region_name, const Parallel::Communication &comm) const
virtual void allocFormulationBuffers(std::map< std::string, int > &rstKeywords, unsigned bufferSize)=0
ScalarBuffer pSalt_
Definition: GenericOutputModule.hpp:602
RegionVariableCollection regionVars_
Definition: GenericOutputModule.hpp:568
static int regionMax(const std::vector< int > &region, const Parallel::Communication &comm)
Definition: GeochemistryContainer.hpp:36
Inter-region flow accumulation maps for all region definition arrays.
Definition: InterRegFlows.hpp:179
bool wantInterRegflowSummary() const
Definition: InterRegFlows.hpp:282
Definition: LogOutputHelper.hpp:45
Definition: MechContainer.hpp:46
Definition: RFTContainer.hpp:51
Class computing RPTRST CONV output.
Definition: RSTConv.hpp:36
std::function< int(const int)> LocalToGlobalCellFunc
Definition: RSTConv.hpp:38
Definition: TpsaContainer.hpp:45
Definition: TracerContainer.hpp:39
Dune::Communication< MPIComm > Communication
Definition: ParallelCommunication.hpp:30
Definition: blackoilnewtonmethodparams.hpp:31
Phase
Phase indices for reservoir coupling, we currently only support black-oil phases (oil,...
Definition: ReservoirCoupling.hpp:183
Definition: blackoilbioeffectsmodules.hh:45
std::string moduleVersionName()
Definition: GenericOutputModule.hpp:410
std::string_view waterDensity
Definition: GenericOutputModule.hpp:413
std::string_view waterViscosity
Definition: GenericOutputModule.hpp:416
std::string_view gasDensity
Definition: GenericOutputModule.hpp:412
std::string_view gasViscosity
Definition: GenericOutputModule.hpp:415
std::string_view oilDensity
Definition: GenericOutputModule.hpp:411
std::string_view oilViscosity
Definition: GenericOutputModule.hpp:414
Definition: GenericOutputModule.hpp:74
static constexpr bool value
Definition: GenericOutputModule.hpp:74
Definition: GenericOutputModule.hpp:75
static constexpr bool value
Definition: GenericOutputModule.hpp:75