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:156
The class describing the stencil of the spatial discretization.
Definition: fvbaseproperties.hh:70
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:88
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:101
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.
This file contains a set of helper functions used by VFPProd / VFPInj.
Definition: blackoilbioeffectsmodules.hh:45
The part of the VTK ouput modules which is specific to the spatial discretization.
Definition: fvbaseproperties.hh:168
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:74
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:172
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:223
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:80
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