SimulatorTraits.hpp
1 //===========================================================================
2 //
3 // File: SimulatorTraits.hpp
4 //
5 // Created: Mon Jul 19 15:48:15 2010
6 //
7 // Author(s): Atgeirr F Rasmussen <atgeirr@sintef.no>
8 //
9 // $Date$
10 //
11 // $Revision$
12 //
13 //===========================================================================
14 
15 /*
16  Copyright 2010 SINTEF ICT, Applied Mathematics.
17  Copyright 2010 Statoil ASA.
18 
19  This file is part of The Open Reservoir Simulator Project (OpenRS).
20 
21  OpenRS is free software: you can redistribute it and/or modify
22  it under the terms of the GNU General Public License as published by
23  the Free Software Foundation, either version 3 of the License, or
24  (at your option) any later version.
25 
26  OpenRS is distributed in the hope that it will be useful,
27  but WITHOUT ANY WARRANTY; without even the implied warranty of
28  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
29  GNU General Public License for more details.
30 
31  You should have received a copy of the GNU General Public License
32  along with OpenRS. If not, see <http://www.gnu.org/licenses/>.
33 */
34 
35 #ifndef OPENRS_SIMULATORTRAITS_HEADER
36 #define OPENRS_SIMULATORTRAITS_HEADER
37 
38 
39 #include <opm/porsol/common/ReservoirPropertyCapillaryAnisotropicRelperm.hpp>
40 #include <opm/porsol/mimetic/MimeticIPAnisoRelpermEvaluator.hpp>
41 #include <opm/porsol/common/ReservoirPropertyCapillary.hpp>
42 #include <opm/porsol/mimetic/MimeticIPEvaluator.hpp>
43 #include <opm/porsol/mimetic/IncompFlowSolverHybrid.hpp>
44 #include <opm/porsol/euler/EulerUpstream.hpp>
45 //#include <opm/porsol/euler/EulerUpstreamImplicit.hpp>
46 #include <opm/porsol/euler/ImplicitCapillarity.hpp>
47 
48 namespace Opm
49 {
50 
51 
53  struct Isotropic
54  {
56  template <int Dimension>
57  struct ResProp
58  {
60  };
61 
63  template <class GridInterface, class RockInterface>
64  struct InnerProduct : public MimeticIPEvaluator<GridInterface, RockInterface>
65  {
66  };
67  };
68 
69 
71  struct Anisotropic
72  {
74  template <int Dimension>
75  struct ResProp
76  {
78  };
79 
81  template <class GridInterface, class RockInterface>
82  struct InnerProduct : public MimeticIPAnisoRelpermEvaluator<GridInterface, RockInterface>
83  {
84  };
85  };
86 
87 
89  template <class IsotropyPolicy>
90  struct Explicit
91  {
92  template <class GridInterface, class BoundaryConditions>
94  {
95  enum { Dimension = GridInterface::Dimension };
96  typedef typename IsotropyPolicy::template ResProp<Dimension>::Type RP;
97  typedef EulerUpstream<GridInterface,
98  RP,
99  BoundaryConditions> Type;
100  };
101  };
102 
104  /*
105  template <class IsotropyPolicy>
106  struct Implicit
107  {
108  template <class GridInterface, class BoundaryConditions>
109  struct TransportSolver
110  {
111  //enum { Dimension = GridInterface::Dimension };
112  enum { Dimension = GridInterface::dimension };
113  typedef typename IsotropyPolicy::template ResProp<Dimension>::Type RP;
114 
115  typedef EulerUpstreamImplicit<GridInterface,
116  RP,
117  BoundaryConditions> Type;
118 
119  };
120  };
121  */
123  template <class IsotropyPolicy>
124  struct ImplicitCap
125  {
126  template <class GridInterface, class BoundaryConditions>
128  {
129  enum { Dimension = GridInterface::Dimension };
130  typedef typename IsotropyPolicy::template ResProp<Dimension>::Type RP;
132  };
133  };
134 
135 
136 
138  template <class RelpermPolicy, template <class> class TransportPolicy>
139  struct SimulatorTraits : public RelpermPolicy, TransportPolicy<RelpermPolicy>
140  {
142  template <class GridInterface, class BoundaryConditions>
143  struct FlowSolver
144  {
145  typedef IncompFlowSolverHybrid<GridInterface,
146  typename RelpermPolicy::template ResProp<GridInterface::Dimension>::Type,
147  BoundaryConditions,
148  RelpermPolicy::template InnerProduct> Type;
149  };
150  };
151 
152 
153 } // namespace Opm
154 
155 
156 
157 #endif // OPENRS_SIMULATORTRAITS_HEADER
Traits policies for isotropic (scalar) relperm.
Definition: SimulatorTraits.hpp:53
Traits for implicit transport.
Definition: SimulatorTraits.hpp:124
A property class for incompressible two-phase flow.
Definition: ReservoirPropertyCapillary.hpp:79
The pressure/flow solver type.
Definition: SimulatorTraits.hpp:143
Class for doing simple transport by explicit Euler upstream method for general grid.
Definition: ImplicitCapillarity.hpp:52
The reservoir property type.
Definition: SimulatorTraits.hpp:75
Definition: MimeticIPEvaluator.hpp:85
Traits for explicit transport.
Definition: SimulatorTraits.hpp:90
Class for immiscible dead oil and dry gas.
Definition: applier.hpp:18
Class for doing simple transport by explicit Euler upstream method for general grid.
Definition: EulerUpstream.hpp:52
A property class for incompressible two-phase flow.
Definition: ReservoirPropertyCapillaryAnisotropicRelperm.hpp:104
Solve mixed formulation of incompressible flow modelled by Darcy&#39;s law ] The solver is based on a hyb...
Definition: IncompFlowSolverHybrid.hpp:369
Definition: MimeticIPAnisoRelpermEvaluator.hpp:85
The inner product template.
Definition: SimulatorTraits.hpp:64
Definition: SimulatorTraits.hpp:127
Definition: SimulatorTraits.hpp:93
Combines the component traits into a single, parametrized type.
Definition: SimulatorTraits.hpp:139
The inner product template.
Definition: SimulatorTraits.hpp:82
Traits for upscaling with anisotropic relperm (tensorial) input.
Definition: SimulatorTraits.hpp:71
The reservoir property type.
Definition: SimulatorTraits.hpp:57