opm-simulators
baseauxiliarymodule.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 */
27 #ifndef EWOMS_BASE_AUXILIARY_MODULE_HH
28 #define EWOMS_BASE_AUXILIARY_MODULE_HH
29 
31 
34 
35 #include <set>
36 #include <vector>
37 
38 namespace Opm::Properties::Tag {
39 
40 struct AuxModule {};
41 
42 } // namespace Opm::Properties::TTag
43 
44 namespace Opm {
45 
54 template <class TypeTag>
56 {
61 
62 protected:
63  using NeighborSet = std::set<unsigned>;
64 
65 public:
66  virtual ~BaseAuxiliaryModule() = default;
67 
72  virtual unsigned numDofs() const = 0;
73 
78  void setDofOffset(int value)
79  { dofOffset_ = value; }
80 
85  int dofOffset()
86  { return dofOffset_; }
87 
92  int localToGlobalDof(unsigned localDofIdx) const
93  {
94  assert(localDofIdx < numDofs());
95  return dofOffset_ + localDofIdx;
96  }
97 
102  virtual void addNeighbors(std::vector<NeighborSet>& neighbors) const = 0;
103 
107  virtual void applyInitial() = 0;
108 
112  virtual void linearize(SparseMatrixAdapter& matrix, GlobalEqVector& residual) = 0;
113 
120  virtual void postSolve(GlobalEqVector&)
121  {}
122 
123 private:
124  int dofOffset_{};
125 };
126 
127 } // namespace Opm
128 
129 #endif
int localToGlobalDof(unsigned localDofIdx) const
Given a degree of freedom relative to the current auxiliary equation, return the corresponding index ...
Definition: baseauxiliarymodule.hh:92
int dofOffset()
Return the offset in the global system of equations for the first degree of freedom of this auxiliary...
Definition: baseauxiliarymodule.hh:85
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
virtual void linearize(SparseMatrixAdapter &matrix, GlobalEqVector &residual)=0
Linearize the auxiliary equation.
virtual void applyInitial()=0
Set the initial condition of the auxiliary module in the solution vector.
Definition: baseauxiliarymodule.hh:40
This file contains a set of helper functions used by VFPProd / VFPInj.
Definition: blackoilbioeffectsmodules.hh:45
Declare the properties used by the infrastructure code of the finite volume discretizations.
virtual void addNeighbors(std::vector< NeighborSet > &neighbors) const =0
Specify the additional neighboring correlations caused by the auxiliary module.
Definition: baseauxiliarymodule.hh:38
The Opm property system, traits with inheritance.
virtual unsigned numDofs() const =0
Returns the number of additional degrees of freedom required for the auxiliary module.
void setDofOffset(int value)
Set the offset in the global system of equations for the first degree of freedom of this auxiliary mo...
Definition: baseauxiliarymodule.hh:78
Base class for specifying auxiliary equations.
Definition: baseauxiliarymodule.hh:55
virtual void postSolve(GlobalEqVector &)
This method is called after the linear solver has been called but before the solution is updated for ...
Definition: baseauxiliarymodule.hh:120
Declares the properties required by the black oil model.