opm-simulators
vcfvdiscretization.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  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 */
28 #ifndef EWOMS_VCFV_DISCRETIZATION_HH
29 #define EWOMS_VCFV_DISCRETIZATION_HH
30 
31 #include <opm/material/densead/Math.hpp>
32 
39 
41 
42 #if HAVE_DUNE_FEM
43 #include <dune/fem/space/common/functionspace.hh>
44 #include <dune/fem/space/lagrange.hh>
46 #endif
47 
48 #include <cstddef>
49 #include <string>
50 
51 namespace Opm {
52 
53 template <class TypeTag>
55 
56 } // namespace Opm
57 
58 namespace Opm::Properties {
59 
61 template<class TypeTag>
62 struct Stencil<TypeTag, TTag::VcfvDiscretization>
63 {
64 private:
66  using CoordScalar = typename GridView::ctype;
67 
68 public:
70 };
71 
73 template<class TypeTag>
74 struct DofMapper<TypeTag, TTag::VcfvDiscretization>
76 
78 template<class TypeTag>
79 struct Discretization<TypeTag, TTag::VcfvDiscretization>
81 
84 template<class TypeTag>
87 
89 template<class TypeTag>
90 struct GradientCalculator<TypeTag, TTag::VcfvDiscretization>
92 
94 template<class TypeTag>
97 
99 template<class TypeTag>
101 { static constexpr bool value = false; };
102 
103 #if HAVE_DUNE_FEM
104 template<class TypeTag>
106 struct DiscreteFunctionSpace<TypeTag, TTag::VcfvDiscretization>
107 {
108 private:
111  enum { numEq = getPropValue<TypeTag, Properties::NumEq>() };
112  using FunctionSpace = Dune::Fem::FunctionSpace<typename GridPart::GridType::ctype,
113  Scalar,
114  GridPart::GridType::dimensionworld,
115  numEq>;
116 
117 public:
118  // Lagrange discrete function space with unknowns at the cell vertices
119  using type = Dune::Fem::LagrangeDiscreteFunctionSpace< FunctionSpace, GridPart, 1 >;
120 };
121 #else
122 template <class TypeTag>
124 {
125  using DiscreteFunctionSpace = GetPropType<TypeTag, Properties::DiscreteFunctionSpace>;
126  explicit DummySpaceVcfv(const DiscreteFunctionSpace&) {}
127  explicit DummySpaceVcfv(const int&) {}
128 };
129 
130 template <class TypeTag>
132 { using type = DummySpaceVcfv<TypeTag>; };
133 #endif
134 
136 template<class TypeTag>
137 struct BorderListCreator<TypeTag, TTag::VcfvDiscretization>
138 {
139 private:
142 
143 public:
145 };
146 
150 template<class TypeTag>
152 { static constexpr bool value = false; };
153 
154 } // namespace Opm::Properties
155 
156 namespace Opm {
157 
163 template<class TypeTag>
164 class VcfvDiscretization : public GetPropType<TypeTag, Properties::BaseDiscretizationType>
165 {
167  using Implementation = GetPropType<TypeTag, Properties::Model>;
171 
172  enum { dim = GridView::dimension };
173 
174 public:
175  explicit VcfvDiscretization(Simulator& simulator)
176  : ParentType(simulator)
177  {}
178 
182  static std::string discretizationName()
183  { return "vcfv"; }
184 
188  std::size_t numGridDof() const
189  { return static_cast<std::size_t>(this->gridView_.size(/*codim=*/dim)); }
190 
195  const DofMapper& dofMapper() const
196  { return this->vertexMapper(); }
197 
205  template <class Restarter>
206  void serialize(Restarter& res)
207  { res.template serializeEntities</*codim=*/dim>(asImp_(), this->gridView_); }
208 
216  template <class Restarter>
217  void deserialize(Restarter& res)
218  {
219  res.template deserializeEntities</*codim=*/dim>(asImp_(), this->gridView_);
220  this->solution(/*timeIdx=*/1) = this->solution(/*timeIdx=*/0);
221  }
222 
223 private:
224  Implementation& asImp_()
225  { return *static_cast<Implementation*>(this); }
226 
227  const Implementation& asImp_() const
228  { return *static_cast<const Implementation*>(this); }
229 };
230 
231 } // namespace Opm
232 
233 #endif
The base class for the vertex centered finite volume discretization scheme.
Definition: vcfvdiscretization.hh:54
Calculates gradients of arbitrary quantities at flux integration points.
Definition: fvbaseproperties.hh:167
The class describing the stencil of the spatial discretization.
Definition: fvbaseproperties.hh:76
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
The type of the spatial discretization used by the model.
Definition: fvbaseproperties.hh:94
void serialize(Restarter &res)
Serializes the current state of the model.
Definition: vcfvdiscretization.hh:206
A class which provides types for DUNE grid handles for communication.
Definition: vcfvgridcommhandlefactory.hh:47
Specify if elements that do not belong to the local process&#39; grid partition should be skipped...
Definition: fvbaseproperties.hh:107
static std::string discretizationName()
Returns a string of discretization&#39;s human-readable name.
Definition: vcfvdiscretization.hh:182
Definition: vcfvdiscretization.hh:123
Represents the finite volume geometry of a single element in the VCFV discretization.
A class which provides types for DUNE grid handles for communication.
The base class for the finite volume discretization schemes.
Structs needed for tpfalinearizer and its gpuparams struct extracted to be defined in one place that ...
Definition: blackoilbioeffectsmodules.hh:45
The part of the VTK ouput modules which is specific to the spatial discretization.
Definition: fvbaseproperties.hh:179
The class which marks the border indices associated with the degrees of freedom on a process boundary...
Definition: basicproperties.hh:129
The base class for the finite volume discretization schemes.
Use P1 finite-elements gradients instead of two-point gradients.
Definition: vcfvproperties.hh:47
Uses communication on the grid to find the initial seed list of indices.
The class describing the discrete function space when dune-fem is used, otherwise it points to the st...
Definition: fvbaseproperties.hh:80
Implements the discretization specific parts of writing files.
std::size_t numGridDof() const
Returns the number of global degrees of freedom (DOFs) due to the grid.
Definition: vcfvdiscretization.hh:188
Property to specify the type of scalar values.
Definition: basicproperties.hh:76
Declares the basic properties used by the common infrastructure of the vertex-centered finite volume ...
The class to create grid communication handles.
Definition: fvbaseproperties.hh:183
const DofMapper & dofMapper() const
Mapper to convert the Dune entities of the discretization&#39;s degrees of freedoms are to indices...
Definition: vcfvdiscretization.hh:195
The mapper to find the global index of a degree of freedom.
Definition: fvbaseproperties.hh:234
Uses communication on the grid to find the initial seed list of indices.
Definition: vertexborderlistfromgrid.hh:49
This class calculates gradients of arbitrary quantities at flux integration points using first order ...
Implements the discretization specific parts of writing files.
Definition: vcfvbaseoutputmodule.hh:43
Represents the finite volume geometry of a single element in the VCFV discretization.
Definition: vcfvstencil.hh:451
Manages the initializing and running of time dependent problems.
Definition: simulator.hh:83
Definition: blackoilmodel.hh:75
void deserialize(Restarter &res)
Deserializes the state of the model.
Definition: vcfvdiscretization.hh:217
This class calculates gradients of arbitrary quantities at flux integration points using first order ...
Definition: p1fegradientcalculator.hh:61