Loading...
Searching...
No Matches
SimulatorTraits.hpp
//===========================================================================
//
// File: SimulatorTraits.hpp
//
// Created: Mon Jul 19 15:48:15 2010
//
// Author(s): Atgeirr F Rasmussen <atgeirr@sintef.no>
//
// $Date$
//
// $Revision$
//
//===========================================================================
/*
Copyright 2010 SINTEF ICT, Applied Mathematics.
Copyright 2010 Statoil ASA.
This file is part of The Open Reservoir Simulator Project (OpenRS).
OpenRS is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
OpenRS is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with OpenRS. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef OPENRS_SIMULATORTRAITS_HEADER
#define OPENRS_SIMULATORTRAITS_HEADER
#include <opm/porsol/common/ReservoirPropertyCapillaryAnisotropicRelperm.hpp>
#include <opm/porsol/mimetic/MimeticIPAnisoRelpermEvaluator.hpp>
#include <opm/porsol/common/ReservoirPropertyCapillary.hpp>
#include <opm/porsol/mimetic/MimeticIPEvaluator.hpp>
#include <opm/porsol/mimetic/IncompFlowSolverHybrid.hpp>
#include <opm/porsol/euler/EulerUpstream.hpp>
//#include <opm/porsol/euler/EulerUpstreamImplicit.hpp>
#include <opm/porsol/euler/ImplicitCapillarity.hpp>
namespace Opm
{
struct Isotropic
{
template <int Dimension>
struct ResProp
{
typedef ReservoirPropertyCapillary<Dimension> Type;
};
template <class GridInterface, class RockInterface>
struct InnerProduct : public MimeticIPEvaluator<GridInterface, RockInterface>
{
};
};
struct Anisotropic
{
template <int Dimension>
struct ResProp
{
typedef ReservoirPropertyCapillaryAnisotropicRelperm<Dimension> Type;
};
template <class GridInterface, class RockInterface>
struct InnerProduct : public MimeticIPAnisoRelpermEvaluator<GridInterface, RockInterface>
{
};
};
template <class IsotropyPolicy>
struct Explicit
{
template <class GridInterface, class BoundaryConditions>
struct TransportSolver
{
enum { Dimension = GridInterface::Dimension };
typedef typename IsotropyPolicy::template ResProp<Dimension>::Type RP;
typedef EulerUpstream<GridInterface,
RP,
BoundaryConditions> Type;
};
};
/*
template <class IsotropyPolicy>
struct Implicit
{
template <class GridInterface, class BoundaryConditions>
struct TransportSolver
{
//enum { Dimension = GridInterface::Dimension };
enum { Dimension = GridInterface::dimension };
typedef typename IsotropyPolicy::template ResProp<Dimension>::Type RP;
typedef EulerUpstreamImplicit<GridInterface,
RP,
BoundaryConditions> Type;
};
};
*/
template <class IsotropyPolicy>
struct ImplicitCap
{
template <class GridInterface, class BoundaryConditions>
struct TransportSolver
{
enum { Dimension = GridInterface::Dimension };
typedef typename IsotropyPolicy::template ResProp<Dimension>::Type RP;
typedef ImplicitCapillarity<GridInterface, RP, BoundaryConditions, IsotropyPolicy::template InnerProduct> Type;
};
};
template <class RelpermPolicy, template <class> class TransportPolicy>
struct SimulatorTraits : public RelpermPolicy, TransportPolicy<RelpermPolicy>
{
template <class GridInterface, class BoundaryConditions>
struct FlowSolver
{
typedef IncompFlowSolverHybrid<GridInterface,
typename RelpermPolicy::template ResProp<GridInterface::Dimension>::Type,
BoundaryConditions,
RelpermPolicy::template InnerProduct> Type;
};
};
} // namespace Opm
#endif // OPENRS_SIMULATORTRAITS_HEADER
Opm::EulerUpstream
Class for doing simple transport by explicit Euler upstream method for general grid.
Definition EulerUpstream.hpp:51
Opm::ImplicitCapillarity
Class for doing simple transport by explicit Euler upstream method for general grid.
Definition ImplicitCapillarity.hpp:53
Opm::IncompFlowSolverHybrid
Solve mixed formulation of incompressible flow modelled by Darcy's law.
Definition IncompFlowSolverHybrid.hpp:365
Opm::MimeticIPAnisoRelpermEvaluator::MimeticIPAnisoRelpermEvaluator
MimeticIPAnisoRelpermEvaluator()
Default constructor.
Definition MimeticIPAnisoRelpermEvaluator.hpp:101
Opm::MimeticIPEvaluator::MimeticIPEvaluator
MimeticIPEvaluator()
Default constructor.
Definition MimeticIPEvaluator.hpp:102
Opm::ReservoirPropertyCapillaryAnisotropicRelperm
A property class for incompressible two-phase flow.
Definition ReservoirPropertyCapillaryAnisotropicRelperm.hpp:106
Opm::ReservoirPropertyCapillary
A property class for incompressible two-phase flow.
Definition ReservoirPropertyCapillary.hpp:80
Opm::GridInterface
Opm
Inverting small matrices.
Definition ImplicitAssembly.hpp:43
Opm::Anisotropic::InnerProduct
The inner product template.
Definition SimulatorTraits.hpp:83
Opm::Anisotropic::ResProp
The reservoir property type.
Definition SimulatorTraits.hpp:76
Opm::Anisotropic
Traits for upscaling with anisotropic relperm (tensorial) input.
Definition SimulatorTraits.hpp:72
Opm::Explicit::TransportSolver
Definition SimulatorTraits.hpp:94
Opm::Explicit
Traits for explicit transport.
Definition SimulatorTraits.hpp:91
Opm::ImplicitCap::TransportSolver
Definition SimulatorTraits.hpp:128
Opm::ImplicitCap
Traits for implicit transport.
Definition SimulatorTraits.hpp:125
Opm::Isotropic::InnerProduct
The inner product template.
Definition SimulatorTraits.hpp:65
Opm::Isotropic::ResProp
The reservoir property type.
Definition SimulatorTraits.hpp:58
Opm::Isotropic
Traits policies for isotropic (scalar) relperm.
Definition SimulatorTraits.hpp:54
Opm::SimulatorTraits::FlowSolver
The pressure/flow solver type.
Definition SimulatorTraits.hpp:144
Opm::SimulatorTraits
Combines the component traits into a single, parametrized type.
Definition SimulatorTraits.hpp:140