opm-simulators
vtkenergymodule.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 
19  Consult the COPYING file in the top-level source directory of this
20  module for the precise wording of the license and the list of
21  copyright holders.
22 */
27 #ifndef OPM_VTK_ENERGY_MODULE_HPP
28 #define OPM_VTK_ENERGY_MODULE_HPP
29 
30 #include <opm/material/common/MathToolbox.hpp>
31 
35 
37 
40 
41 namespace Opm {
42 
56 template <class TypeTag>
57 class VtkEnergyModule : public BaseOutputModule<TypeTag>
58 {
60 
66 
67  using BufferType = typename ParentType::BufferType;
68  using ScalarBuffer = typename ParentType::ScalarBuffer;
69  using PhaseBuffer = typename ParentType::PhaseBuffer;
70 
71  static constexpr auto vtkFormat = getPropValue<TypeTag, Properties::VtkOutputFormat>();
72  enum { numPhases = getPropValue<TypeTag, Properties::NumPhases>() };
73 
74  using Toolbox = typename Opm::MathToolbox<Evaluation>;
76 
77 public:
78  explicit VtkEnergyModule(const Simulator& simulator)
79  : ParentType(simulator)
80  {
81  params_.read();
82  }
83 
87  static void registerParameters()
88  {
90  }
91 
96  void allocBuffers() override
97  {
98  if (params_.enthalpyOutput_) {
99  this->resizePhaseBuffer_(enthalpy_, BufferType::Dof);
100  }
101  if (params_.internalEnergyOutput_) {
102  this->resizePhaseBuffer_(internalEnergy_, BufferType::Dof);
103  }
104 
105  if (params_.solidInternalEnergyOutput_) {
106  this->resizeScalarBuffer_(solidInternalEnergy_, BufferType::Dof);
107  }
108  if (params_.thermalConductivityOutput_) {
109  this->resizeScalarBuffer_(thermalConductivity_, BufferType::Dof);
110  }
111  }
112 
117  void processElement(const ElementContext& elemCtx) override
118  {
119  if (!Parameters::Get<Parameters::EnableVtkOutput>()) {
120  return;
121  }
122 
123  for (unsigned i = 0; i < elemCtx.numPrimaryDof(/*timeIdx=*/0); ++i) {
124  const unsigned I = elemCtx.globalSpaceIndex(i, /*timeIdx=*/0);
125  const auto& intQuants = elemCtx.intensiveQuantities(i, /*timeIdx=*/0);
126  const auto& fs = intQuants.fluidState();
127 
128  if (params_.solidInternalEnergyOutput_) {
129  solidInternalEnergy_[I] = Toolbox::value(intQuants.solidInternalEnergy());
130  }
131  if (params_.thermalConductivityOutput_) {
132  thermalConductivity_[I] = Toolbox::value(intQuants.thermalConductivity());
133  }
134 
135  for (unsigned phaseIdx = 0; phaseIdx < numPhases; ++phaseIdx) {
136  if (params_.enthalpyOutput_) {
137  enthalpy_[phaseIdx][I] = Toolbox::value(fs.enthalpy(phaseIdx));
138  }
139  if (params_.internalEnergyOutput_) {
140  internalEnergy_[phaseIdx][I] = Toolbox::value(fs.internalEnergy(phaseIdx));
141  }
142  }
143  }
144  }
145 
149  void commitBuffers(BaseOutputWriter& baseWriter) override
150  {
151  if (!dynamic_cast<VtkMultiWriter*>(&baseWriter)) {
152  return;
153  }
154 
155  if (params_.solidInternalEnergyOutput_) {
156  this->commitScalarBuffer_(baseWriter, "internalEnergySolid",
157  solidInternalEnergy_, BufferType::Dof);
158  }
159  if (params_.thermalConductivityOutput_) {
160  this->commitScalarBuffer_(baseWriter, "thermalConductivity",
161  thermalConductivity_, BufferType::Dof);
162  }
163 
164  if (params_.enthalpyOutput_) {
165  this->commitPhaseBuffer_(baseWriter, "enthalpy_%s",
166  enthalpy_, BufferType::Dof);
167  }
168  if (params_.internalEnergyOutput_) {
169  this->commitPhaseBuffer_(baseWriter, "internalEnergy_%s",
170  internalEnergy_, BufferType::Dof);
171  }
172  }
173 
174 private:
175  VtkEnergyParams params_{};
176  PhaseBuffer enthalpy_{};
177  PhaseBuffer internalEnergy_{};
178 
179  ScalarBuffer thermalConductivity_{};
180  ScalarBuffer solidInternalEnergy_{};
181 };
182 
183 } // namespace Opm
184 
185 #endif // OPM_VTK_ENERGY_MODULE_HPP
typename Properties::Detail::GetPropImpl< TypeTag, Property >::type::type GetPropType
get the type alias defined in the property (equivalent to old macro GET_PROP_TYPE(...))
Definition: propertysystem.hh:233
void processElement(const ElementContext &elemCtx) override
Modify the internal buffers according to the intensive quanties relevant for an element.
Definition: vtkenergymodule.hpp:117
void resizePhaseBuffer_(PhaseBuffer &buffer, BufferType bufferType)
Allocate the space for a buffer storing a phase-specific quantity.
Definition: baseoutputmodule.hh:198
void commitScalarBuffer_(BaseOutputWriter &baseWriter, const char *name, ScalarBuffer &buffer, BufferType bufferType)
Add a buffer containing scalar quantities to the result file.
Definition: baseoutputmodule.hh:238
This file provides the infrastructure to retrieve run-time parameters.
The base class for writer modules.
Definition: baseoutputmodule.hh:67
The base class for writer modules.
BufferType
Definition: baseoutputmodule.hh:143
Simplifies writing multi-file VTK datasets.
Definition: vtkmultiwriter.hh:64
This file contains a set of helper functions used by VFPProd / VFPInj.
Definition: blackoilbioeffectsmodules.hh:45
The base class for all output writers.
Definition: baseoutputwriter.hh:45
void allocBuffers() override
Allocate memory for the scalar fields we would like to write to the VTK file.
Definition: vtkenergymodule.hpp:96
void commitBuffers(BaseOutputWriter &baseWriter) override
Add all buffers to the VTK output writer.
Definition: vtkenergymodule.hpp:149
Declare the properties used by the infrastructure code of the finite volume discretizations.
void commitPhaseBuffer_(BaseOutputWriter &baseWriter, const char *pattern, PhaseBuffer &buffer, BufferType bufferType)
Add a phase-specific buffer to the result file.
Definition: baseoutputmodule.hh:337
static void registerParameters()
Register all run-time parameters for the Vtk output module.
Definition: vtkenergymodule.hpp:87
void read()
Reads the parameter values from the parameter system.
Definition: vtkenergyparams.cpp:47
Struct holding the parameters for VtkEnergyModule.
Definition: vtkenergyparams.hpp:45
void resizeScalarBuffer_(ScalarBuffer &buffer, BufferType bufferType)
Allocate the space for a buffer storing a scalar quantity.
Definition: baseoutputmodule.hh:157
The Opm property system, traits with inheritance.
Simplifies writing multi-file VTK datasets.
static void registerParameters()
Registers the parameters in parameter system.
Definition: vtkenergyparams.cpp:31
VTK output module for quantities which make sense for models which assume thermal equilibrium...
VTK output module for quantities which make sense for models which assume thermal equilibrium...
Definition: vtkenergymodule.hpp:57