28 #ifndef OPM_ECL_GENERIC_WRITER_HPP 29 #define OPM_ECL_GENERIC_WRITER_HPP 33 #include <opm/output/data/Groups.hpp> 35 #include <opm/simulators/flow/CollectDataOnIORank.hpp> 37 #include <opm/simulators/timestepping/SimulatorReport.hpp> 50 class InterRegFlowMap;
61 namespace Opm {
namespace Action {
67 template <
class Gr
id,
class EquilGr
id,
class Gr
idView,
class ElementMapper,
class Scalar>
77 const EclipseState& eclState,
78 const SummaryConfig& summaryConfig,
80 const EquilGrid* equilGrid,
81 const GridView& gridView,
84 bool enableAsyncOutput,
87 const EclipseIO& eclIO()
const;
93 globalTrans_ = globalTrans;
98 sub_step_report_ = report;
102 simulation_report_ = report;
105 const std::vector<std::vector<NNCdata>>& getOutputNnc()
const 112 return collectOnIORank_;
115 void extractOutputTransAndNNC(
const std::function<
unsigned int(
unsigned int)>& map);
119 unsigned int gridEquilIdxToGridIdx(
unsigned int elemIndex)
const;
121 void doWriteOutput(
const int reportStepNum,
122 const std::optional<int> timeStepNum,
123 const bool isSubStep,
124 const bool forcedSimulationFinished,
125 data::Solution&& localCellData,
126 data::Wells&& localWellData,
127 data::GroupAndNetworkValues&& localGroupAndNetworkData,
128 data::Aquifers&& localAquiferData,
129 WellTestState&& localWTestState,
130 const Action::State& actionState,
131 const UDQState& udqState,
132 const SummaryState& summaryState,
133 const std::vector<Scalar>& thresholdPressure,
136 bool doublePrecision,
142 void evalSummary(
int reportStepNum,
144 const data::Wells& localWellData,
145 const data::WellBlockAveragePressures& localWBPData,
146 const data::GroupAndNetworkValues& localGroupAndNetworkData,
147 const std::map<int,data::AquiferData>& localAquiferData,
148 const std::map<std::pair<std::string, int>,
double>& blockData,
149 const std::map<std::tuple<std::string, int, int>,
double>& lgrBlockData,
150 const std::map<std::string, double>& miscSummaryData,
151 const std::map<std::string, std::vector<double>>& regionData,
152 const Inplace& inplace,
153 const Inplace* initialInPlace,
155 SummaryState& summaryState,
157 const data::ReservoirCouplingGroupRates* rcGroupRates =
nullptr);
161 const GridView& gridView_;
162 const Schedule& schedule_;
163 const EclipseState& eclState_;
164 std::unique_ptr<EclipseIO> eclIO_;
165 std::unique_ptr<TaskletRunner> taskletRunner_;
166 Scalar restartTimeStepSize_;
170 const EquilGrid* equilGrid_;
179 mutable std::vector<std::vector<NNCdata>> outputNnc_;
185 mutable std::vector<std::vector<NNCdata>> outputNncGlobalLocal_;
192 mutable std::vector<std::vector<std::vector<NNCdata>>> outputAmalgamatedNnc_;
194 mutable std::unique_ptr<std::vector<data::Solution>> outputTrans_;
197 template<
typename LevelIndicesFunction,
typename OriginIndicesFunction>
198 void computeTrans_(
const std::vector<std::unordered_map<int,int>>& levelCartToLevelCompressed,
199 const std::function<
unsigned int(
unsigned int)>& map,
200 const LevelIndicesFunction& computeLevelIndices,
201 const std::function<
int(
int,
int)>& computeLevelCartIdx,
202 const std::function<std::array<int,3>(
int)>& computeLevelCartDimensions,
203 const OriginIndicesFunction& computeOriginIndices)
const;
205 template<
typename LevelIndicesFunction,
typename OriginIndicesFunction>
206 std::vector<std::vector<NNCdata>> exportNncStructure_(
const std::vector<std::unordered_map<int,int>>& levelCartToLevelCompressed,
207 const std::function<
unsigned int(
unsigned int)>& map,
208 const LevelIndicesFunction& computeLevelIndices,
209 const std::function<
int(
int,
int)>& computeLevelCartIdx,
210 const std::function<std::array<int,3>(
int)>& computeLevelCartDimensions,
211 const OriginIndicesFunction& computeOriginIndices)
const;
214 bool isCartesianNeighbour_(
const std::array<int,3>& levelCartDims,
215 const std::size_t levelCartIdx1,
216 const std::size_t levelCartIdx2)
const;
218 bool isDirectNeighbours_(
const std::unordered_map<int,int>& levelCartesianToActive,
219 const std::array<int,3>& levelCartDims,
220 const std::size_t levelCartIdx1,
221 const std::size_t levelCartIdx2)
const;
223 auto activeCell_(
const std::unordered_map<int,int>& levelCartToLevelCompressed,
224 const std::size_t levelCartIdx)
const;
230 bool isNumAquCell_(
const std::size_t cartIdx)
const;
232 bool isNumAquConn_(
const std::size_t cartIdx1,
const std::size_t cartIdx2)
const;
242 template<
bool equilGr
idIsCpGr
id>
252 template<
bool equilGr
idIsCpGr
id>
260 template<
bool equilGr
idIsCpGr
id>
268 template<
bool equilGr
idIsCpGr
id>
276 template <
bool equilGr
idIsCpGr
id>
277 auto computeLevelIndices_()
const;
283 template <
bool equilGr
idIsCpGr
id>
284 auto computeOriginIndices_()
const;
288 void allocateLevelTrans_(
const std::array<int,3>& levelCartDims,
289 data::Solution& levelTrans)
const;
295 void allocateAllNncs_(
int maxLevel)
const;
300 #endif // OPM_ECL_GENERIC_WRITER_HPP Definition: CollectDataOnIORank.hpp:56
Definition: EclGenericWriter.hpp:52
Structs needed for tpfalinearizer and its gpuparams struct extracted to be defined in one place that ...
Definition: blackoilbioeffectsmodules.hh:45
Inter-region flow accumulation maps for all region definition arrays.
Definition: InterRegFlows.hpp:178
Definition: EclGenericWriter.hpp:68
Simple container for FLOWS data.
Definition: FlowsData.hpp:31
A struct for returning timing data from a simulator to its caller.
Definition: SimulatorReport.hpp:33
Provides a mechanism to dispatch work to separate threads.
Definition: Transmissibility.hpp:54
Definition: SimulatorReport.hpp:121
Definition: CollectDataOnIORank.hpp:50