opm-simulators
vtkphasepresencemodule.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_PHASE_PRESENCE_MODULE_HPP
28 #define OPM_VTK_PHASE_PRESENCE_MODULE_HPP
29 
31 
35 
38 
39 namespace Opm {
40 
46 template<class TypeTag>
48 {
50 
55 
56  static constexpr auto vtkFormat = getPropValue<TypeTag, Properties::VtkOutputFormat>();
58 
59  using ScalarBuffer = typename ParentType::ScalarBuffer;
60 
61 public:
62  explicit VtkPhasePresenceModule(const Simulator& simulator)
63  : ParentType(simulator)
64  {
65  params_.read();
66  }
67 
71  static void registerParameters()
72  {
74  }
75 
80  void allocBuffers() override
81  {
82  if (params_.phasePresenceOutput_) {
83  this->resizeScalarBuffer_(phasePresence_, ParentType::BufferType::Dof);
84  }
85  }
86 
91  void processElement(const ElementContext& elemCtx) override
92  {
93  if (!Parameters::Get<Parameters::EnableVtkOutput>()) {
94  return;
95  }
96 
97  for (unsigned i = 0; i < elemCtx.numPrimaryDof(/*timeIdx=*/0); ++i) {
98  // calculate the phase presence
99  const int phasePresence = elemCtx.primaryVars(i, /*timeIdx=*/0).phasePresence();
100  const unsigned I = elemCtx.globalSpaceIndex(i, /*timeIdx=*/0);
101 
102  if (params_.phasePresenceOutput_) {
103  phasePresence_[I] = phasePresence;
104  }
105  }
106  }
107 
111  void commitBuffers(BaseOutputWriter& baseWriter) override
112  {
113  if (!dynamic_cast<VtkMultiWriter*>(&baseWriter)) {
114  return;
115  }
116 
117  if (params_.phasePresenceOutput_) {
118  this->commitScalarBuffer_(baseWriter, "phase presence", phasePresence_,
120  }
121  }
122 
123 private:
124  VtkPhasePresenceParams params_{};
125  ScalarBuffer phasePresence_{};
126 };
127 
128 } // namespace Opm
129 
130 #endif // OPM_VTK_PHASE_PRESENCE_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 commitScalarBuffer_(BaseOutputWriter &baseWriter, const char *name, ScalarBuffer &buffer, BufferType bufferType)
Add a buffer containing scalar quantities to the result file.
Definition: baseoutputmodule.hh:238
VTK output module for the fluid composition.
Definition: vtkphasepresencemodule.hpp:47
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.
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 processElement(const ElementContext &elemCtx) override
Modify the internal buffers according to the intensive quanties relevant for an element.
Definition: vtkphasepresencemodule.hpp:91
static void registerParameters()
Registers the parameters in parameter system.
Definition: vtkphasepresenceparams.cpp:31
void read()
Reads the parameter values from the parameter system.
Definition: vtkphasepresenceparams.cpp:38
static void registerParameters()
Register all run-time parameters for the Vtk output module.
Definition: vtkphasepresencemodule.hpp:71
Buffer contains data associated with the degrees of freedom.
Struct holding the parameters for VtkPhasePresenceModule.
Definition: vtkphasepresenceparams.hpp:41
Declare the properties used by the infrastructure code of the finite volume discretizations.
void allocBuffers() override
Allocate memory for the scalar fields we would like to write to the VTK file.
Definition: vtkphasepresencemodule.hpp:80
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.
VTK output module for the fluid composition.
void commitBuffers(BaseOutputWriter &baseWriter) override
Add all buffers to the output writer.
Definition: vtkphasepresencemodule.hpp:111