opm-common
EclSolidEnergyLawMultiplexer.hpp
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 OPM_ECL_SOLID_ENERGY_LAW_MULTIPLEXER_HPP
28 #define OPM_ECL_SOLID_ENERGY_LAW_MULTIPLEXER_HPP
29 
31 
32 #include "EclHeatcrLaw.hpp"
33 #include "EclSpecrockLaw.hpp"
34 #include "NullSolidEnergyLaw.hpp"
35 
36 #include <string>
37 #include <stdexcept>
38 
39 namespace Opm
40 {
46 template <class ScalarT,
47  class FluidSystem,
48  class ParamsT = EclSolidEnergyLawMultiplexerParams<ScalarT>>
50 {
51  enum { numPhases = FluidSystem::numPhases };
52 
56 
57 public:
58  using Params = ParamsT;
59  using Scalar = typename Params::Scalar;
60 
64  template <class FluidState, class Evaluation = typename FluidState::ValueType>
65  static Evaluation solidInternalEnergy(const Params& params, const FluidState& fluidState)
66  {
67  switch (params.solidEnergyApproach()) {
68  case EclSolidEnergyApproach::Heatcr:
69  // relevant ECL keywords: HEATCR, HEATCRT and STCOND
70  return HeatcrLaw::solidInternalEnergy(params.template getRealParams<EclSolidEnergyApproach::Heatcr>(), fluidState);
71 
72  case EclSolidEnergyApproach::Specrock:
73  // relevant ECL keyword: SPECROCK
74  return SpecrockLaw::solidInternalEnergy(params.template getRealParams<EclSolidEnergyApproach::Specrock>(), fluidState);
75 
76  case EclSolidEnergyApproach::Null:
77  // (no relevant ECL keyword)
78  return NullLaw::solidInternalEnergy(0, fluidState);
79 
80  default:
81  throw std::logic_error("Invalid solid energy approach: "+std::to_string(int(params.solidEnergyApproach())));
82  }
83  }
84 };
85 
86 } // namespace Opm
87 
88 #endif
static Evaluation solidInternalEnergy(const Params &params, const FluidState &fluidState)
Given a fluid state, compute the volumetric internal energy of the rock [W/m^3].
Definition: EclSpecrockLaw.hpp:54
static Evaluation solidInternalEnergy(const Params &params, const FluidState &fluidState)
Given a fluid state, compute the volumetric internal energy of the rock [W/m^3].
Definition: EclSolidEnergyLawMultiplexer.hpp:65
This class implements a small container which holds the transmissibility mulitpliers for all the face...
Definition: Exceptions.hpp:30
Implements a solid energy storage law which just returns 0.
Definition: NullSolidEnergyLaw.hpp:38
Provides the energy storage relation of rock.
Definition: EclSolidEnergyLawMultiplexer.hpp:49
The default implementation of a parameter object for the ECL thermal law.
static Evaluation solidInternalEnergy(const Params &params, const FluidState &fluidState)
Given a fluid state, compute the volumetric internal energy of the rock [W/m^3].
Definition: EclHeatcrLaw.hpp:55
Implements the volumetric interior energy relations of rock used by ECL.
Definition: EclHeatcrLaw.hpp:45
Implements the volumetric interior energy relations of rock used by ECL.
Implements a solid energy storage law which just returns 0.
Implements the volumetric interior energy relations of rock used by ECL.
Implements the volumetric interior energy relations of rock used by ECL.
Definition: EclSpecrockLaw.hpp:44
static Evaluation solidInternalEnergy(const Params &, const FluidState &)
Given a fluid state, compute the volumetric internal energy of the solid matrix [W/m^3].
Definition: NullSolidEnergyLaw.hpp:51