vtkphasepresencemodule.hh
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  Copyright (C) 2011-2013 by Andreas Lauser
5 
6  This file is part of the Open Porous Media project (OPM).
7 
8  OPM is free software: you can redistribute it and/or modify
9  it under the terms of the GNU General Public License as published by
10  the Free Software Foundation, either version 2 of the License, or
11  (at your option) any later version.
12 
13  OPM is distributed in the hope that it will be useful,
14  but WITHOUT ANY WARRANTY; without even the implied warranty of
15  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16  GNU General Public License for more details.
17 
18  You should have received a copy of the GNU General Public License
19  along with OPM. If not, see <http://www.gnu.org/licenses/>.
20 */
25 #ifndef EWOMS_VTK_PHASE_PRESENCE_MODULE_HH
26 #define EWOMS_VTK_PHASE_PRESENCE_MODULE_HH
27 
28 #include "vtkmultiwriter.hh"
29 #include "baseoutputmodule.hh"
30 
33 
34 namespace Ewoms {
35 namespace Properties {
36 // create new type tag for the VTK primary variables output
37 NEW_TYPE_TAG(VtkPhasePresence);
38 
39 // create the property tags needed for the primary variables module
40 NEW_PROP_TAG(VtkWritePhasePresence);
41 NEW_PROP_TAG(VtkOutputFormat);
42 
43 SET_BOOL_PROP(VtkPhasePresence, VtkWritePhasePresence, false);
44 } // namespace Properties
45 } // namespace Ewoms
46 
47 namespace Ewoms {
53 template<class TypeTag>
55 {
57 
58  typedef typename GET_PROP_TYPE(TypeTag, Simulator) Simulator;
59  typedef typename GET_PROP_TYPE(TypeTag, Scalar) Scalar;
60  typedef typename GET_PROP_TYPE(TypeTag, ElementContext) ElementContext;
61  typedef typename GET_PROP_TYPE(TypeTag, GridView) GridView;
62 
63  static const int vtkFormat = GET_PROP_VALUE(TypeTag, VtkOutputFormat);
65 
66  typedef typename ParentType::ScalarBuffer ScalarBuffer;
67 
68 
69 public:
70  VtkPhasePresenceModule(const Simulator &simulator)
71  : ParentType(simulator)
72  { }
73 
77  static void registerParameters()
78  {
79  EWOMS_REGISTER_PARAM(TypeTag, bool, VtkWritePhasePresence,
80  "Include the phase presence pseudo primary "
81  "variable in the VTK output files");
82  }
83 
88  void allocBuffers()
89  {
90  if (phasePresenceOutput_()) this->resizeScalarBuffer_(phasePresence_);
91  }
92 
97  void processElement(const ElementContext &elemCtx)
98  {
99  if (!phasePresenceOutput_())
100  return;
101 
102  for (int i = 0; i < elemCtx.numPrimaryDof(/*timeIdx=*/0); ++i) {
103  // calculate the phase presence
104  int phasePresence = elemCtx.primaryVars(i, /*timeIdx=*/0).phasePresence();
105  int I = elemCtx.globalSpaceIndex(i, /*timeIdx=*/0);
106  phasePresence_[I] = phasePresence;
107  }
108  }
109 
113  void commitBuffers(BaseOutputWriter &baseWriter)
114  {
115  VtkMultiWriter *vtkWriter = dynamic_cast<VtkMultiWriter*>(&baseWriter);
116  if (!vtkWriter) {
117  return;
118  }
119 
120  if (phasePresenceOutput_())
121  this->commitScalarBuffer_(baseWriter, "phase presence", phasePresence_);
122  }
123 
124 private:
125  static bool phasePresenceOutput_()
126  { return EWOMS_GET_PARAM(TypeTag, bool, VtkWritePhasePresence); }
127 
128  ScalarBuffer phasePresence_;
129 };
130 
131 } // namespace Ewoms
132 
133 #endif
void resizeScalarBuffer_(ScalarBuffer &buffer, BufferType bufferType=DofBuffer)
Allocate the space for a buffer storing a scalar quantity.
Definition: baseoutputmodule.hh:148
#define GET_PROP_VALUE(TypeTag, PropTagName)
Access the value attribute of a property for a type tag.
Definition: propertysystem.hh:468
VtkPhasePresenceModule(const Simulator &simulator)
Definition: vtkphasepresencemodule.hh:70
NEW_PROP_TAG(Grid)
The type of the DUNE grid.
This file provides the infrastructure to retrieve run-time parameters.
static void registerParameters()
Register all run-time parameters for the Vtk output module.
Definition: vtkphasepresencemodule.hh:77
The base class for all output writers.
Definition: baseoutputwriter.hh:41
Simplifies writing multi-file VTK datasets.
Manages the initializing and running of time dependent problems.
Definition: simulator.hh:73
Definition: baseauxiliarymodule.hh:35
void commitBuffers(BaseOutputWriter &baseWriter)
Add all buffers to the output writer.
Definition: vtkphasepresencemodule.hh:113
#define EWOMS_REGISTER_PARAM(TypeTag, ParamType, ParamName, Description)
Register a run-time parameter.
Definition: parametersystem.hh:64
VTK output module for the fluid composition.
Definition: vtkphasepresencemodule.hh:54
void commitScalarBuffer_(BaseOutputWriter &baseWriter, const char *name, ScalarBuffer &buffer, BufferType bufferType=DofBuffer)
Add a buffer containing scalar quantities to the result file.
Definition: baseoutputmodule.hh:283
void processElement(const ElementContext &elemCtx)
Modify the internal buffers according to the intensive quanties relevant for an element.
Definition: vtkphasepresencemodule.hh:97
NEW_TYPE_TAG(AuxModule)
Provides the magic behind the eWoms property system.
The base class for writer modules.
void allocBuffers()
Allocate memory for the scalar fields we would like to write to the VTK file.
Definition: vtkphasepresencemodule.hh:88
SET_BOOL_PROP(FvBaseDiscretization, EnableVtkOutput, true)
Enable the VTK output by default.
The base class for writer modules.
Definition: baseoutputmodule.hh:71
Simplifies writing multi-file VTK datasets.
Definition: vtkmultiwriter.hh:61
#define EWOMS_GET_PARAM(TypeTag, ParamType, ParamName)
Retrieve a runtime parameter.
Definition: parametersystem.hh:95
BaseOutputWriter::ScalarBuffer ScalarBuffer
Definition: baseoutputmodule.hh:90