Loading...
Searching...
No Matches
FlowBaseProblemProperties.hpp
Go to the documentation of this file.
// -*- mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
// vi: set et ts=4 sw=4 sts=4:
/*
This file is part of the Open Porous Media project (OPM).
OPM 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 2 of the License, or
(at your option) any later version.
OPM 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 OPM. If not, see <http://www.gnu.org/licenses/>.
Consult the COPYING file in the top-level source directory of this
module for the precise wording of the license and the list of
copyright holders.
*/
#ifndef OPM_FLOW_BASE_PROBLEM_PROPERTIES_HPP
#define OPM_FLOW_BASE_PROBLEM_PROPERTIES_HPP
#include <opm/material/thermal/EclThermalLawManager.hpp>
#include <opm/models/discretization/ecfv/ecfvdiscretization.hh>
#include <opm/models/utils/propertysystem.hh>
#include <opm/simulators/flow/BaseAquiferModel.hpp>
#include <opm/simulators/flow/CpGridVanguard.hpp>
#include <opm/simulators/flow/DummyGradientCalculator.hpp>
#include <opm/simulators/flow/EclWriter.hpp>
#include <opm/simulators/flow/FlowProblemParameters.hpp>
#include <opm/simulators/flow/TracerModel.hpp>
#if HAVE_DAMARIS
#include <opm/simulators/flow/DamarisWriter.hpp>
#endif
#include <tuple>
namespace Opm::Properties {
namespace TTag {
struct FlowBaseProblem {
using InheritsFrom = std::tuple<CpGridVanguard>;
};
}
template<class TypeTag, class MyTypeTag>
struct NonlinearSystem { using type = UndefinedProperty; };
// The class which deals with ECL aquifers
template<class TypeTag, class MyTypeTag>
struct AquiferModel { using type = UndefinedProperty; };
// Specify whether API tracking should be enabled (replaces PVT regions).
// TODO: This is not yet implemented
template<class TypeTag, class MyTypeTag>
struct EnableApiTracking { using type = UndefinedProperty; };
// Enable the additional checks even if compiled in debug mode (i.e., with the NDEBUG
// macro undefined). Next to a slightly better performance, this also eliminates some
// print statements in debug mode.
template<class TypeTag, class MyTypeTag>
struct EnableDebuggingChecks { using type = Properties::UndefinedProperty; };
template<class TypeTag, class MyTypeTag>
struct EnableHysteresis { using type = Properties::UndefinedProperty; };
template<class TypeTag, class MyTypeTag>
struct EnableEndpointScaling { using type = Properties::UndefinedProperty; };
// Avoid using ElementContext-based code if possible.
template<class TypeTag, class MyTypeTag>
struct AvoidElementContext { using type = Properties::UndefinedProperty; };
// if thermal flux boundaries are enabled an effort is made to preserve the initial
// thermal gradient specified via the TEMPVD keyword
template<class TypeTag, class MyTypeTag>
struct EnableThermalFluxBoundaries { using type = UndefinedProperty; };
// The class which deals with wells
template<class TypeTag, class MyTypeTag>
struct WellModel { using type = UndefinedProperty; };
// Tracer might be moved to the blackoil side
// The class that deals with the tracer
template<class TypeTag, class MyTypeTag>
struct TracerModel { using type = UndefinedProperty; };
template <class TypeTag>
struct TracerModel<TypeTag, TTag::FlowBaseProblem>
{ using type = ::Opm::TracerModel<TypeTag>; };
// Select the element centered finite volume method as spatial discretization
template<class TypeTag>
struct SpatialDiscretizationSplice<TypeTag, TTag::FlowBaseProblem>
{ using type = TTag::EcfvDiscretization; };
// use automatic differentiation to linearize the system of PDEs
template<class TypeTag>
struct LocalLinearizerSplice<TypeTag, TTag::FlowBaseProblem>
{ using type = TTag::AutoDiffLocalLinearizer; };
template<class TypeTag>
struct BaseDiscretizationType<TypeTag, TTag::FlowBaseProblem>
{ using type = FvBaseDiscretizationNoAdapt<TypeTag>; };
template<class TypeTag>
struct DiscreteFunction<TypeTag, TTag::FlowBaseProblem>
{
using BaseDiscretization = FvBaseDiscretization<TypeTag>;
using type = typename BaseDiscretization::BlockVectorWrapper;
};
template<class TypeTag>
struct GridView<TypeTag, TTag::FlowBaseProblem>
{ using type = typename GetPropType<TypeTag, Properties::Grid>::LeafGridView; };
// Set the material law for energy storage in rock
template<class TypeTag>
struct SolidEnergyLaw<TypeTag, TTag::FlowBaseProblem>
{
private:
using Scalar = GetPropType<TypeTag, Properties::Scalar>;
using FluidSystem = GetPropType<TypeTag, Properties::FluidSystem>;
public:
using EclThermalLawManager = ::Opm::EclThermalLawManager<Scalar, FluidSystem>;
using type = typename EclThermalLawManager::SolidEnergyLaw;
};
// Set the material law for thermal conduction
template<class TypeTag>
struct ThermalConductionLaw<TypeTag, TTag::FlowBaseProblem>
{
private:
using Scalar = GetPropType<TypeTag, Properties::Scalar>;
using FluidSystem = GetPropType<TypeTag, Properties::FluidSystem>;
public:
using EclThermalLawManager = ::Opm::EclThermalLawManager<Scalar, FluidSystem>;
using type = typename EclThermalLawManager::ThermalConductionLaw;
};
// use a slightly faster stencil class because it does not need the normals and
// the integration points of intersections
template<class TypeTag>
struct Stencil<TypeTag, TTag::FlowBaseProblem>
{
private:
using Scalar = GetPropType<TypeTag, Properties::Scalar>;
using GridView = GetPropType<TypeTag, Properties::GridView>;
public:
using type = EcfvStencil<Scalar,
GridView,
/*needIntegrationPos=*/false,
/*needNormal=*/false>;
};
// by default use the dummy aquifer "model"
template<class TypeTag>
struct AquiferModel<TypeTag, TTag::FlowBaseProblem> {
using type = BaseAquiferModel<TypeTag>;
};
// Enable diffusion
template<class TypeTag>
struct EnableDiffusion<TypeTag, TTag::FlowBaseProblem>
{ static constexpr bool value = true; };
// Disable dispersion
template<class TypeTag>
struct EnableDispersion<TypeTag, TTag::FlowBaseProblem>
{ static constexpr bool value = false; };
// Enable Convective Mixing
template<class TypeTag>
struct EnableConvectiveMixing<TypeTag, TTag::FlowBaseProblem>
{ static constexpr bool value = true; };
// disable API tracking
template<class TypeTag>
struct EnableApiTracking<TypeTag, TTag::FlowBaseProblem>
{ static constexpr bool value = false; };
// store temperature (but do not conserve energy, as long as EnableEnergy is false)
template<class TypeTag>
struct EnableTemperature<TypeTag, TTag::FlowBaseProblem>
{ static constexpr bool value = true; };
template<class TypeTag>
struct EnableMech<TypeTag, TTag::FlowBaseProblem>
{ static constexpr bool value = false; };
// disable all extensions supported by black oil model. this should not really be
// necessary but it makes things a bit more explicit
template<class TypeTag>
struct EnablePolymer<TypeTag, TTag::FlowBaseProblem>
{ static constexpr bool value = false; };
template<class TypeTag>
struct EnableSolvent<TypeTag, TTag::FlowBaseProblem>
{ static constexpr bool value = false; };
template<class TypeTag>
struct EnableEnergy<TypeTag, TTag::FlowBaseProblem>
{ static constexpr bool value = false; };
template<class TypeTag>
struct EnableFoam<TypeTag, TTag::FlowBaseProblem>
{ static constexpr bool value = false; };
template<class TypeTag>
struct EnableExtbo<TypeTag, TTag::FlowBaseProblem>
{ static constexpr bool value = false; };
template<class TypeTag>
struct EnableBioeffects<TypeTag, TTag::FlowBaseProblem>
{ static constexpr bool value = false; };
// disable thermal flux boundaries by default
template<class TypeTag>
struct EnableThermalFluxBoundaries<TypeTag, TTag::FlowBaseProblem>
{ static constexpr bool value = false; };
// By default, simulators derived from the FlowBaseProblem are production simulators,
// i.e., experimental features must be explicitly enabled at compile time
template<class TypeTag>
struct EnableExperiments<TypeTag, TTag::FlowBaseProblem>
{ static constexpr bool value = false; };
// By default, we enable the debugging checks if we're compiled in debug mode
template<class TypeTag>
struct EnableDebuggingChecks<TypeTag, TTag::FlowBaseProblem>
{ static constexpr bool value = true; };
template<class TypeTag>
struct EnableHysteresis<TypeTag, TTag::FlowBaseProblem>
{ static constexpr bool value = true; };
template<class TypeTag>
struct EnableEndpointScaling<TypeTag, TTag::FlowBaseProblem>
{ static constexpr bool value = true; };
// Most modules are implemented only in terms of element contexts,
// so this must default to false.
template<class TypeTag>
struct AvoidElementContext<TypeTag, TTag::FlowBaseProblem>
{ static constexpr bool value = false; };
} // namespace Opm::Properties
#endif // OPM_BASE_FLOW_PROBLEM_PROPERTIES_HPP
BaseAquiferModel.hpp
The base class which specifies the API of aquifer models.
CpGridVanguard.hpp
Helper class for grid instantiation of ECL file-format using problems.
DamarisWriter.hpp
Collects necessary output values and pass them to Damaris server processes.
DummyGradientCalculator.hpp
This is a "dummy" gradient calculator which does not do anything.
EclWriter.hpp
Collects necessary output values and pass it to opm-common's ECL output.
FlowProblemParameters.hpp
This problem simulates an input file given in the data format used by the commercial ECLiPSE simulato...
TracerModel.hpp
A class which handles tracers as specified in by ECL.
Opm::BaseAquiferModel
The base class which specifies the API of aquifer models.
Definition BaseAquiferModel.hpp:50
Opm::EcfvStencil
Represents the stencil (finite volume geometry) of a single element in the ECFV discretization.
Definition ecfvstencil.hh:69
Opm::FvBaseDiscretizationNoAdapt
The base class for the finite volume discretization schemes without adaptation.
Definition fvbasediscretization.hh:2048
Opm::FvBaseDiscretization::BlockVectorWrapper
Definition fvbasediscretization.hh:350
Opm::FvBaseDiscretization
The base class for the finite volume discretization schemes.
Definition fvbasediscretization.hh:298
Opm::TracerModel
A class which handles tracers as specified in by ECL.
Definition TracerModel.hpp:75
ecfvdiscretization.hh
The base class for the element-centered finite-volume discretization scheme.
Opm::Properties::TTag
The generic type tag for problems using the immiscible multi-phase model.
Definition blackoilmodel.hh:81
Opm::GetPropType
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
propertysystem.hh
The Opm property system, traits with inheritance.
Opm::Properties::AquiferModel
Definition FlowBaseProblemProperties.hpp:67
Opm::Properties::AvoidElementContext
Definition FlowBaseProblemProperties.hpp:88
Opm::Properties::BaseDiscretizationType
Definition fvbasediscretization.hh:272
Opm::Properties::DiscreteFunction
Definition fvbaseproperties.hh:77
Opm::Properties::EnableApiTracking
Definition FlowBaseProblemProperties.hpp:72
Opm::Properties::EnableBioeffects
Enable the ECL-blackoil extension for bioeffects (biofilm/MICP).
Definition blackoilproperties.hh:83
Opm::Properties::EnableConvectiveMixing
Enable convective mixing?
Definition multiphasebaseproperties.hh:99
Opm::Properties::EnableDebuggingChecks
Definition FlowBaseProblemProperties.hpp:78
Opm::Properties::EnableDiffusion
Enable diffusive fluxes?
Definition multiphasebaseproperties.hh:91
Opm::Properties::EnableDispersion
Enable dispersive fluxes?
Definition multiphasebaseproperties.hh:95
Opm::Properties::EnableEndpointScaling
Definition FlowBaseProblemProperties.hpp:84
Opm::Properties::EnableEnergy
Specify whether energy should be considered as a conservation quantity or not.
Definition multiphasebaseproperties.hh:87
Opm::Properties::EnableExperiments
Specify if experimental features should be enabled or not.
Definition fvbaseproperties.hh:241
Opm::Properties::EnableExtbo
Enable the ECL-blackoil extension for extended BO. ("Second gas" - alternative approach).
Definition blackoilproperties.hh:47
Opm::Properties::EnableFoam
Enable the ECL-blackoil extension for foam.
Definition blackoilproperties.hh:63
Opm::Properties::EnableHysteresis
Definition FlowBaseProblemProperties.hpp:81
Opm::Properties::EnableMech
Definition blackoilproperties.hh:91
Opm::Properties::EnablePolymer
Enable the ECL-blackoil extension for polymer.
Definition blackoilproperties.hh:51
Opm::Properties::EnableSolvent
Enable the ECL-blackoil extension for solvents. ("Second gas").
Definition blackoilproperties.hh:43
Opm::Properties::EnableTemperature
Allow the spatial and temporal domains to exhibit non-constant temperature in the black-oil model.
Definition blackoilproperties.hh:88
Opm::Properties::EnableThermalFluxBoundaries
Definition FlowBaseProblemProperties.hpp:93
Opm::Properties::GridView
Definition basicproperties.hh:103
Opm::Properties::LocalLinearizerSplice
Definition fvbaseproperties.hh:55
Opm::Properties::NonlinearSystem
Definition FlowBaseProblemProperties.hpp:61
Opm::Properties::SolidEnergyLaw
The material law for the energy stored in the solid matrix.
Definition multiphasebaseproperties.hh:63
Opm::Properties::SpatialDiscretizationSplice
The splice to be used for the spatial discretization.
Definition multiphasebaseproperties.hh:39
Opm::Properties::Stencil
The class describing the stencil of the spatial discretization.
Definition fvbaseproperties.hh:70
Opm::Properties::TTag::AutoDiffLocalLinearizer
Definition fvbaseadlocallinearizer.hh:58
Opm::Properties::TTag::EcfvDiscretization
Definition ecfvproperties.hh:41
Opm::Properties::TTag::FlowBaseProblem
Definition FlowBaseProblemProperties.hpp:54
Opm::Properties::ThermalConductionLaw
The material law for thermal conduction.
Definition multiphasebaseproperties.hh:71
Opm::Properties::TracerModel
Definition FlowBaseProblemProperties.hpp:102
Opm::Properties::UndefinedProperty
a tag to mark properties as undefined
Definition propertysystem.hh:38
Opm::Properties::WellModel
Definition FlowBaseProblemProperties.hpp:97