mirror of
https://github.com/OPM/opm-simulators.git
synced 2025-02-25 18:55:30 -06:00
[properties] replace propertysystem
This commit is contained in:
parent
344f6587fa
commit
6d6ba6909c
@ -73,16 +73,7 @@ BEGIN_PROPERTIES
|
||||
NEW_TYPE_TAG(Co2InjectionBaseProblem);
|
||||
|
||||
// declare the CO2 injection problem specific property tags
|
||||
NEW_PROP_TAG(FluidSystemPressureLow);
|
||||
NEW_PROP_TAG(FluidSystemPressureHigh);
|
||||
NEW_PROP_TAG(FluidSystemNumPressure);
|
||||
NEW_PROP_TAG(FluidSystemTemperatureLow);
|
||||
NEW_PROP_TAG(FluidSystemTemperatureHigh);
|
||||
NEW_PROP_TAG(FluidSystemNumTemperature);
|
||||
|
||||
NEW_PROP_TAG(MaxDepth);
|
||||
NEW_PROP_TAG(Temperature);
|
||||
NEW_PROP_TAG(SimulationName);
|
||||
|
||||
// Set the grid type
|
||||
SET_TYPE_PROP(Co2InjectionBaseProblem, Grid, Dune::YaspGrid<2>);
|
||||
|
@ -77,7 +77,6 @@ SET_TYPE_PROP(FingerBaseProblem,
|
||||
#endif
|
||||
|
||||
// declare the properties used by the finger problem
|
||||
NEW_PROP_TAG(InitialWaterSaturation);
|
||||
|
||||
// Set the problem property
|
||||
SET_TYPE_PROP(FingerBaseProblem, Problem, Opm::FingerProblem<TypeTag>);
|
||||
|
@ -55,14 +55,6 @@ BEGIN_PROPERTIES
|
||||
|
||||
NEW_TYPE_TAG(GroundWaterBaseProblem);
|
||||
|
||||
NEW_PROP_TAG(LensLowerLeftX);
|
||||
NEW_PROP_TAG(LensLowerLeftY);
|
||||
NEW_PROP_TAG(LensLowerLeftZ);
|
||||
NEW_PROP_TAG(LensUpperRightX);
|
||||
NEW_PROP_TAG(LensUpperRightY);
|
||||
NEW_PROP_TAG(LensUpperRightZ);
|
||||
NEW_PROP_TAG(Permeability);
|
||||
NEW_PROP_TAG(PermeabilityLens);
|
||||
|
||||
SET_PROP(GroundWaterBaseProblem, Fluid)
|
||||
{
|
||||
|
@ -61,12 +61,6 @@ BEGIN_PROPERTIES
|
||||
NEW_TYPE_TAG(LensBaseProblem, INHERITS_FROM(StructuredGridVanguard));
|
||||
|
||||
// declare the properties specific for the lens problem
|
||||
NEW_PROP_TAG(LensLowerLeftX);
|
||||
NEW_PROP_TAG(LensLowerLeftY);
|
||||
NEW_PROP_TAG(LensLowerLeftZ);
|
||||
NEW_PROP_TAG(LensUpperRightX);
|
||||
NEW_PROP_TAG(LensUpperRightY);
|
||||
NEW_PROP_TAG(LensUpperRightZ);
|
||||
|
||||
// Set the problem property
|
||||
SET_TYPE_PROP(LensBaseProblem, Problem, Opm::LensProblem<TypeTag>);
|
||||
|
@ -62,11 +62,8 @@ BEGIN_PROPERTIES
|
||||
NEW_TYPE_TAG(ReservoirBaseProblem);
|
||||
|
||||
// Maximum depth of the reservoir
|
||||
NEW_PROP_TAG(MaxDepth);
|
||||
// The temperature inside the reservoir
|
||||
NEW_PROP_TAG(Temperature);
|
||||
// The width of producer/injector wells as a fraction of the width of the spatial domain
|
||||
NEW_PROP_TAG(WellWidth);
|
||||
|
||||
// Set the grid type
|
||||
SET_TYPE_PROP(ReservoirBaseProblem, Grid, Dune::YaspGrid<2>);
|
||||
|
@ -27,6 +27,7 @@
|
||||
* immisciblility.
|
||||
*/
|
||||
#include "config.h" /*@\label{tutorial1:include-begin}@*/
|
||||
#include <opm/models/utils/propertysystemmacros.hh>
|
||||
#include <opm/models/utils/start.hh> /*@\label{tutorial1:include-end}@*/
|
||||
#include "tutorial1problem.hh" /*@\label{tutorial1:include-problem-header}@*/
|
||||
|
||||
|
@ -34,6 +34,8 @@
|
||||
// The spatial discretization (VCFV == Vertex-Centered Finite Volumes)
|
||||
#include <opm/models/discretization/vcfv/vcfvdiscretization.hh> /*@\label{tutorial1:include-discretization}@*/
|
||||
|
||||
#include <opm/simulators/linalg/parallelamgbackend.hh>
|
||||
|
||||
// The chemical species that are used
|
||||
#include <opm/material/components/SimpleH2O.hpp>
|
||||
#include <opm/material/components/Lnapl.hpp>
|
||||
|
@ -36,11 +36,6 @@
|
||||
|
||||
BEGIN_PROPERTIES
|
||||
|
||||
NEW_PROP_TAG(DpMaxRel);
|
||||
NEW_PROP_TAG(DsMax);
|
||||
NEW_PROP_TAG(PriVarOscilationThreshold);
|
||||
NEW_PROP_TAG(ProjectSaturations);
|
||||
|
||||
SET_SCALAR_PROP(NewtonMethod, DpMaxRel, 0.3);
|
||||
SET_SCALAR_PROP(NewtonMethod, DsMax, 0.2);
|
||||
SET_SCALAR_PROP(NewtonMethod, PriVarOscilationThreshold, 1e-5);
|
||||
|
@ -35,37 +35,24 @@ BEGIN_PROPERTIES
|
||||
|
||||
//! Specifies if the simulation should write output files that are
|
||||
//! compatible with those produced by the commercial Eclipse simulator
|
||||
NEW_PROP_TAG(EnableEclipseOutput);
|
||||
//! The material law for thermal conduction
|
||||
NEW_PROP_TAG(ThermalConductionLaw);
|
||||
//! The parameters of the material law for thermal conduction
|
||||
NEW_PROP_TAG(ThermalConductionLawParams);
|
||||
//! The material law for energy storage of the rock
|
||||
NEW_PROP_TAG(SolidEnergyLaw);
|
||||
//! The parameters for material law for energy storage of the rock
|
||||
NEW_PROP_TAG(SolidEnergyLawParams);
|
||||
//! Enable the ECL-blackoil extension for solvents. ("Second gas")
|
||||
NEW_PROP_TAG(EnableSolvent);
|
||||
//! Enable the ECL-blackoil extension for polymer.
|
||||
NEW_PROP_TAG(EnablePolymer);
|
||||
//! Enable the tracking polymer molecular weight tracking and related functionalities
|
||||
NEW_PROP_TAG(EnablePolymerMW);
|
||||
//! Enable surface volume scaling
|
||||
NEW_PROP_TAG(BlackoilConserveSurfaceVolume);
|
||||
//! Enable the ECL-blackoil extension for foam
|
||||
NEW_PROP_TAG(EnableFoam);
|
||||
//! Enable the ECL-blackoil extension for salt
|
||||
NEW_PROP_TAG(EnableBrine);
|
||||
|
||||
|
||||
//! Allow the spatial and temporal domains to exhibit non-constant temperature
|
||||
//! in the black-oil model
|
||||
NEW_PROP_TAG(EnableTemperature);
|
||||
|
||||
//! Enable the ECL-blackoil extension for energy conservation
|
||||
//!
|
||||
//! Setting this property to true implies EnableTemperature.
|
||||
NEW_PROP_TAG(EnableEnergy);
|
||||
|
||||
//! The relative weight of the residual of the energy equation compared to the mass
|
||||
//! residuals
|
||||
@ -74,7 +61,6 @@ NEW_PROP_TAG(EnableEnergy);
|
||||
//! of unmodified dune-istl linear solvers cannot weight the individual equations. if the
|
||||
//! energy equation is not scaled, its absolute value is normally several orders of
|
||||
//! magnitude larger than that of the mass balance equations
|
||||
NEW_PROP_TAG(BlackOilEnergyScalingFactor);
|
||||
|
||||
|
||||
END_PROPERTIES
|
||||
|
@ -44,7 +44,6 @@
|
||||
|
||||
BEGIN_PROPERTIES
|
||||
|
||||
NEW_PROP_TAG(MaterialLaw);
|
||||
|
||||
END_PROPERTIES
|
||||
|
||||
|
@ -39,7 +39,6 @@
|
||||
|
||||
BEGIN_PROPERTIES
|
||||
|
||||
NEW_PROP_TAG(Indices);
|
||||
|
||||
END_PROPERTIES
|
||||
|
||||
|
@ -42,12 +42,6 @@
|
||||
|
||||
BEGIN_PROPERTIES
|
||||
|
||||
NEW_PROP_TAG(Indices);
|
||||
NEW_PROP_TAG(EnableEnergy);
|
||||
NEW_PROP_TAG(ThermalConductionLaw);
|
||||
NEW_PROP_TAG(ThermalConductionLawParams);
|
||||
NEW_PROP_TAG(SolidEnergyLaw);
|
||||
NEW_PROP_TAG(SolidEnergyLawParams);
|
||||
|
||||
END_PROPERTIES
|
||||
|
||||
|
@ -45,7 +45,6 @@
|
||||
|
||||
BEGIN_PROPERTIES
|
||||
|
||||
NEW_PROP_TAG(MaterialLaw);
|
||||
|
||||
END_PROPERTIES
|
||||
|
||||
|
@ -51,10 +51,10 @@ class MultiPhaseBaseModel;
|
||||
BEGIN_PROPERTIES
|
||||
|
||||
//! The generic type tag for problems using the immiscible multi-phase model
|
||||
NEW_TYPE_TAG(MultiPhaseBaseModel, INHERITS_FROM(VtkMultiPhase, VtkTemperature));
|
||||
NEW_TYPE_TAG(MultiPhaseBaseModel, INHERITS_FROM(NumericModel, VtkMultiPhase, VtkTemperature));
|
||||
|
||||
//! Specify the splices of the MultiPhaseBaseModel type tag
|
||||
SET_SPLICES(MultiPhaseBaseModel, SpatialDiscretizationSplice);
|
||||
//SET_SPLICES(MultiPhaseBaseModel, SpatialDiscretizationSplice);
|
||||
|
||||
//! Set the default spatial discretization
|
||||
//!
|
||||
|
@ -43,10 +43,6 @@
|
||||
|
||||
BEGIN_PROPERTIES
|
||||
|
||||
NEW_PROP_TAG(SolidEnergyLawParams);
|
||||
NEW_PROP_TAG(ThermalConductionLawParams);
|
||||
NEW_PROP_TAG(EnableGravity);
|
||||
NEW_PROP_TAG(FluxModule);
|
||||
|
||||
END_PROPERTIES
|
||||
|
||||
|
@ -37,32 +37,19 @@
|
||||
BEGIN_PROPERTIES
|
||||
|
||||
//! The splice to be used for the spatial discretization
|
||||
NEW_PROP_TAG(SpatialDiscretizationSplice);
|
||||
//! Number of fluid phases in the system
|
||||
NEW_PROP_TAG(NumPhases);
|
||||
//! Number of chemical species in the system
|
||||
NEW_PROP_TAG(NumComponents);
|
||||
//! Enumerations used by the model
|
||||
NEW_PROP_TAG(Indices);
|
||||
//! The material law which ought to be used (extracted from the spatial parameters)
|
||||
NEW_PROP_TAG(MaterialLaw);
|
||||
//! The context material law (extracted from the spatial parameters)
|
||||
NEW_PROP_TAG(MaterialLawParams);
|
||||
//! The material law for the energy stored in the solid matrix
|
||||
NEW_PROP_TAG(SolidEnergyLaw);
|
||||
//! The parameters of the material law for energy storage of the solid
|
||||
NEW_PROP_TAG(SolidEnergyLawParams);
|
||||
//! The material law for thermal conduction
|
||||
NEW_PROP_TAG(ThermalConductionLaw);
|
||||
//! The parameters of the material law for thermal conduction
|
||||
NEW_PROP_TAG(ThermalConductionLawParams);
|
||||
//!The fluid systems including the information about the phases
|
||||
NEW_PROP_TAG(FluidSystem);
|
||||
//! Specifies the relation used for velocity
|
||||
NEW_PROP_TAG(FluxModule);
|
||||
|
||||
//! Returns whether gravity is considered in the problem
|
||||
NEW_PROP_TAG(EnableGravity);
|
||||
|
||||
END_PROPERTIES
|
||||
|
||||
|
@ -41,9 +41,6 @@
|
||||
|
||||
BEGIN_PROPERTIES
|
||||
|
||||
NEW_PROP_TAG(ThermalConductionLawParams);
|
||||
NEW_PROP_TAG(EnableGravity);
|
||||
NEW_PROP_TAG(FluxModule);
|
||||
|
||||
END_PROPERTIES
|
||||
|
||||
|
@ -36,7 +36,6 @@
|
||||
|
||||
BEGIN_PROPERTIES
|
||||
|
||||
NEW_PROP_TAG(UseTwoPointGradients);
|
||||
|
||||
END_PROPERTIES
|
||||
|
||||
|
@ -39,12 +39,6 @@ BEGIN_PROPERTIES
|
||||
NEW_TYPE_TAG(AuxModule);
|
||||
|
||||
// declare the properties required by the for the ecl grid manager
|
||||
NEW_PROP_TAG(Grid);
|
||||
NEW_PROP_TAG(GridView);
|
||||
NEW_PROP_TAG(Scalar);
|
||||
NEW_PROP_TAG(DofMapper);
|
||||
NEW_PROP_TAG(GlobalEqVector);
|
||||
NEW_PROP_TAG(SparseMatrixAdapter);
|
||||
|
||||
END_PROPERTIES
|
||||
|
||||
|
@ -51,18 +51,7 @@ BEGIN_PROPERTIES
|
||||
// declare the property tags required for the finite differences local linearizer
|
||||
NEW_TYPE_TAG(AutoDiffLocalLinearizer);
|
||||
|
||||
NEW_PROP_TAG(LocalLinearizer);
|
||||
NEW_PROP_TAG(Evaluation);
|
||||
|
||||
NEW_PROP_TAG(LocalResidual);
|
||||
NEW_PROP_TAG(Simulator);
|
||||
NEW_PROP_TAG(Problem);
|
||||
NEW_PROP_TAG(Model);
|
||||
NEW_PROP_TAG(PrimaryVariables);
|
||||
NEW_PROP_TAG(ElementContext);
|
||||
NEW_PROP_TAG(Scalar);
|
||||
NEW_PROP_TAG(Evaluation);
|
||||
NEW_PROP_TAG(GridView);
|
||||
|
||||
// set the properties to be spliced in
|
||||
SET_TYPE_PROP(AutoDiffLocalLinearizer, LocalLinearizer,
|
||||
|
@ -33,7 +33,6 @@
|
||||
|
||||
BEGIN_PROPERTIES
|
||||
|
||||
NEW_PROP_TAG(PrimaryVariables);
|
||||
|
||||
END_PROPERTIES
|
||||
|
||||
|
@ -54,21 +54,6 @@ BEGIN_PROPERTIES
|
||||
// declare the property tags required for the finite differences local linearizer
|
||||
NEW_TYPE_TAG(FiniteDifferenceLocalLinearizer);
|
||||
|
||||
NEW_PROP_TAG(LocalLinearizer);
|
||||
NEW_PROP_TAG(Evaluation);
|
||||
NEW_PROP_TAG(NumericDifferenceMethod);
|
||||
NEW_PROP_TAG(BaseEpsilon);
|
||||
NEW_PROP_TAG(SparseMatrixAdapter);
|
||||
NEW_PROP_TAG(LocalResidual);
|
||||
NEW_PROP_TAG(Simulator);
|
||||
NEW_PROP_TAG(Problem);
|
||||
NEW_PROP_TAG(Model);
|
||||
NEW_PROP_TAG(PrimaryVariables);
|
||||
NEW_PROP_TAG(ElementContext);
|
||||
NEW_PROP_TAG(Scalar);
|
||||
NEW_PROP_TAG(Evaluation);
|
||||
NEW_PROP_TAG(GridView);
|
||||
NEW_PROP_TAG(NumEq);
|
||||
|
||||
// set the properties to be spliced in
|
||||
SET_TYPE_PROP(FiniteDifferenceLocalLinearizer, LocalLinearizer,
|
||||
|
@ -37,11 +37,6 @@
|
||||
BEGIN_PROPERTIES
|
||||
|
||||
// forward declaration of the required property tags
|
||||
NEW_PROP_TAG(GridView);
|
||||
NEW_PROP_TAG(NewtonMethod);
|
||||
NEW_PROP_TAG(SolutionVector);
|
||||
NEW_PROP_TAG(GlobalEqVector);
|
||||
NEW_PROP_TAG(VtkOutputFormat);
|
||||
|
||||
END_PROPERTIES
|
||||
//! \endcond
|
||||
|
@ -48,23 +48,17 @@ BEGIN_PROPERTIES
|
||||
NEW_TYPE_TAG(FvBaseNewtonMethod, INHERITS_FROM(NewtonMethod));
|
||||
|
||||
//! The class dealing with the balance equations
|
||||
NEW_PROP_TAG(Model);
|
||||
|
||||
//! The class storing primary variables plus pseudo primary variables
|
||||
NEW_PROP_TAG(PrimaryVariables);
|
||||
|
||||
//! The class storing values of conservation equations (e.g., a "naked" primary varible
|
||||
//! vector)
|
||||
NEW_PROP_TAG(EqVector);
|
||||
|
||||
//! The number of balance equations.
|
||||
NEW_PROP_TAG(NumEq);
|
||||
|
||||
//! The discretization specific part of he implementing the Newton algorithm
|
||||
NEW_PROP_TAG(DiscNewtonMethod);
|
||||
|
||||
//! The class implementing the Newton algorithm
|
||||
NEW_PROP_TAG(NewtonMethod);
|
||||
|
||||
// set default values
|
||||
SET_TYPE_PROP(FvBaseNewtonMethod, DiscNewtonMethod,
|
||||
|
@ -48,13 +48,9 @@ NEW_TYPE_TAG(FvBaseDiscretization,
|
||||
|
||||
|
||||
//! set the splices for the finite volume discretizations
|
||||
NEW_PROP_TAG(LinearSolverSplice);
|
||||
NEW_PROP_TAG(ParallelBiCGStabLinearSolver);
|
||||
|
||||
NEW_PROP_TAG(LocalLinearizerSplice);
|
||||
NEW_PROP_TAG(FiniteDifferenceLocalLinearizer);
|
||||
|
||||
SET_SPLICES(FvBaseDiscretization, LinearSolverSplice, LocalLinearizerSplice);
|
||||
//SET_SPLICES(FvBaseDiscretization, LinearSolverSplice, LocalLinearizerSplice);
|
||||
|
||||
//! use a parallel BiCGStab linear solver by default
|
||||
SET_TAG_PROP(FvBaseDiscretization, LinearSolverSplice, ParallelBiCGStabLinearSolver);
|
||||
@ -70,108 +66,69 @@ SET_TAG_PROP(FvBaseDiscretization, LocalLinearizerSplice, FiniteDifferenceLocalL
|
||||
* "Scalar" property (if the finite difference linearizer is used), or it may be more
|
||||
* complex (for the linearizer which uses automatic differentiation).
|
||||
*/
|
||||
NEW_PROP_TAG(Evaluation);
|
||||
|
||||
//! The type of the DUNE grid
|
||||
NEW_PROP_TAG(Grid);
|
||||
//! The type of the grid view
|
||||
NEW_PROP_TAG(GridView);
|
||||
|
||||
//! The class describing the stencil of the spatial discretization
|
||||
NEW_PROP_TAG(Stencil);
|
||||
|
||||
//! The class describing the discrete function space when dune-fem is used, otherwise it points to the stencil class
|
||||
NEW_PROP_TAG(DiscreteFunctionSpace);
|
||||
|
||||
//! The type of the problem
|
||||
NEW_PROP_TAG(Problem);
|
||||
//! The type of the base class for all problems which use this model
|
||||
NEW_PROP_TAG(BaseProblem);
|
||||
//! The type of the model
|
||||
NEW_PROP_TAG(Model);
|
||||
//! Number of equations in the system of PDEs
|
||||
NEW_PROP_TAG(NumEq);
|
||||
|
||||
//! The type of the spatial discretization used by the model
|
||||
NEW_PROP_TAG(Discretization);
|
||||
//! The discretization specific part of the local residual
|
||||
NEW_PROP_TAG(DiscLocalResidual);
|
||||
//! The type of the local residual function
|
||||
NEW_PROP_TAG(LocalResidual);
|
||||
//! The type of the local linearizer
|
||||
NEW_PROP_TAG(LocalLinearizer);
|
||||
//! Specify if elements that do not belong to the local process' grid partition should be
|
||||
//! skipped
|
||||
NEW_PROP_TAG(LinearizeNonLocalElements);
|
||||
|
||||
//! Linearizes the global non-linear system of equations
|
||||
NEW_PROP_TAG(BaseLinearizer);
|
||||
//! The class that allows to manipulate sparse matrices
|
||||
NEW_PROP_TAG(SparseMatrixAdapter);
|
||||
|
||||
//! A vector of holding a quantity for each equation (usually at a given spatial location)
|
||||
NEW_PROP_TAG(EqVector);
|
||||
//! A vector of holding a quantity for each equation for each DOF of an element
|
||||
NEW_PROP_TAG(ElementEqVector);
|
||||
//! Vector containing a quantity of for equation for each DOF of the whole grid
|
||||
NEW_PROP_TAG(GlobalEqVector);
|
||||
|
||||
//! Vector containing volumetric or areal rates of quantities
|
||||
NEW_PROP_TAG(RateVector);
|
||||
//! Type of object for specifying boundary conditions
|
||||
NEW_PROP_TAG(BoundaryRateVector);
|
||||
//! The class which represents a constraint degree of freedom
|
||||
NEW_PROP_TAG(Constraints);
|
||||
|
||||
//! Vector containing all primary variables of the grid
|
||||
NEW_PROP_TAG(SolutionVector);
|
||||
|
||||
//! A vector of primary variables within a sub-control volume
|
||||
NEW_PROP_TAG(PrimaryVariables);
|
||||
//! The secondary variables within a sub-control volume
|
||||
NEW_PROP_TAG(IntensiveQuantities);
|
||||
//! The discretization specific part of the intensive quantities
|
||||
NEW_PROP_TAG(DiscIntensiveQuantities);
|
||||
|
||||
//! The secondary variables of all degrees of freedom in an element's stencil
|
||||
NEW_PROP_TAG(ElementContext);
|
||||
//! The secondary variables of a boundary segment
|
||||
NEW_PROP_TAG(BoundaryContext);
|
||||
//! The secondary variables of a constraint degree of freedom
|
||||
NEW_PROP_TAG(ConstraintsContext);
|
||||
//! Data required to calculate a flux over a face
|
||||
NEW_PROP_TAG(ExtensiveQuantities);
|
||||
//! Calculates gradients of arbitrary quantities at flux integration points
|
||||
NEW_PROP_TAG(GradientCalculator);
|
||||
|
||||
//! The part of the intensive quantities which is specific to the spatial discretization
|
||||
NEW_PROP_TAG(DiscBaseIntensiveQuantities);
|
||||
|
||||
//! The part of the extensive quantities which is specific to the spatial discretization
|
||||
NEW_PROP_TAG(DiscExtensiveQuantities);
|
||||
|
||||
//! The part of the VTK ouput modules which is specific to the spatial discretization
|
||||
NEW_PROP_TAG(DiscBaseOutputModule);
|
||||
|
||||
//! The class to create grid communication handles
|
||||
NEW_PROP_TAG(GridCommHandleFactory);
|
||||
|
||||
/*!
|
||||
* \brief The OpenMP threads manager
|
||||
*/
|
||||
NEW_PROP_TAG(ThreadManager);
|
||||
NEW_PROP_TAG(ThreadsPerProcess);
|
||||
|
||||
//! use locking to prevent race conditions when linearizing the global system of
|
||||
//! equations in multi-threaded mode. (setting this property to true is always save, but
|
||||
//! it may slightly deter performance in multi-threaded simlations and some
|
||||
//! discretizations do not need this.)
|
||||
NEW_PROP_TAG(UseLinearizationLock);
|
||||
|
||||
// high-level simulation control
|
||||
|
||||
//! Manages the simulation time
|
||||
NEW_PROP_TAG(Simulator);
|
||||
|
||||
/*!
|
||||
* \brief Switch to enable or disable grid adaptation
|
||||
@ -179,12 +136,10 @@ NEW_PROP_TAG(Simulator);
|
||||
* Currently grid adaptation requires the presence of the dune-FEM module. If it is not
|
||||
* available and grid adaptation is enabled, an exception is thrown.
|
||||
*/
|
||||
NEW_PROP_TAG(EnableGridAdaptation);
|
||||
|
||||
/*!
|
||||
* \brief The directory to which simulation output ought to be written to.
|
||||
*/
|
||||
NEW_PROP_TAG(OutputDir);
|
||||
|
||||
/*!
|
||||
* \brief Global switch to enable or disable the writing of VTK output files
|
||||
@ -192,7 +147,6 @@ NEW_PROP_TAG(OutputDir);
|
||||
* If writing VTK files is disabled, then the WriteVtk$FOO options do
|
||||
* not have any effect...
|
||||
*/
|
||||
NEW_PROP_TAG(EnableVtkOutput);
|
||||
|
||||
/*!
|
||||
* \brief Determines if the VTK output is written to disk asynchronously
|
||||
@ -203,7 +157,6 @@ NEW_PROP_TAG(EnableVtkOutput);
|
||||
* not support multi-threaded multi-process VTK output and even if it would, the result
|
||||
* would be slower than when using synchronous output.
|
||||
*/
|
||||
NEW_PROP_TAG(EnableAsyncVtkOutput);
|
||||
|
||||
/*!
|
||||
* \brief Specify the format the VTK output is written to disk
|
||||
@ -214,37 +167,31 @@ NEW_PROP_TAG(EnableAsyncVtkOutput);
|
||||
* - Dune::VTK::appendedraw
|
||||
* - Dune::VTK::appendedbase64
|
||||
*/
|
||||
NEW_PROP_TAG(VtkOutputFormat);
|
||||
|
||||
//! Specify whether the some degrees of fredom can be constraint
|
||||
NEW_PROP_TAG(EnableConstraints);
|
||||
|
||||
/*!
|
||||
* \brief Specify the maximum size of a time integration [s].
|
||||
*
|
||||
* The default is to not limit the step size.
|
||||
*/
|
||||
NEW_PROP_TAG(MaxTimeStepSize);
|
||||
|
||||
/*!
|
||||
* \brief Specify the minimal size of a time integration [s].
|
||||
*
|
||||
* The default is to not limit the step size.
|
||||
*/
|
||||
NEW_PROP_TAG(MinTimeStepSize);
|
||||
|
||||
/*!
|
||||
* \brief The maximum allowed number of timestep divisions for the
|
||||
* Newton solver.
|
||||
*/
|
||||
NEW_PROP_TAG(MaxTimeStepDivisions);
|
||||
|
||||
/*!
|
||||
* \brief Continue with a non-converged solution instead of giving up
|
||||
* if we encounter a time step size smaller than the minimum time
|
||||
* step size.
|
||||
*/
|
||||
NEW_PROP_TAG(ContinueOnConvergenceError);
|
||||
|
||||
/*!
|
||||
* \brief Specify whether all intensive quantities for the grid should be
|
||||
@ -255,7 +202,6 @@ NEW_PROP_TAG(ContinueOnConvergenceError);
|
||||
* may cause the simulation to exhibit worse cache coherence behavior
|
||||
* which eats some of the computational benefits again.
|
||||
*/
|
||||
NEW_PROP_TAG(EnableIntensiveQuantityCache);
|
||||
|
||||
/*!
|
||||
* \brief Specify whether the storage terms for previous solutions should be cached.
|
||||
@ -263,7 +209,6 @@ NEW_PROP_TAG(EnableIntensiveQuantityCache);
|
||||
* This potentially reduces the CPU time, but comes at the cost of higher memory
|
||||
* consumption.
|
||||
*/
|
||||
NEW_PROP_TAG(EnableStorageCache);
|
||||
|
||||
/*!
|
||||
* \brief Specify whether to use the already calculated solutions as
|
||||
@ -273,24 +218,20 @@ NEW_PROP_TAG(EnableStorageCache);
|
||||
* very expensive (e.g. for non-linear fugacity functions where the
|
||||
* solver converges faster).
|
||||
*/
|
||||
NEW_PROP_TAG(EnableThermodynamicHints);
|
||||
|
||||
// mappers from local to global DOF indices
|
||||
|
||||
/*!
|
||||
* \brief The mapper to find the global index of a vertex.
|
||||
*/
|
||||
NEW_PROP_TAG(VertexMapper);
|
||||
|
||||
/*!
|
||||
* \brief The mapper to find the global index of an element.
|
||||
*/
|
||||
NEW_PROP_TAG(ElementMapper);
|
||||
|
||||
/*!
|
||||
* \brief The mapper to find the global index of a degree of freedom.
|
||||
*/
|
||||
NEW_PROP_TAG(DofMapper);
|
||||
|
||||
/*!
|
||||
* \brief The class which marks the border indices associated with the
|
||||
@ -298,26 +239,21 @@ NEW_PROP_TAG(DofMapper);
|
||||
*
|
||||
* This is required for the algebraic overlap stuff.
|
||||
*/
|
||||
NEW_PROP_TAG(BorderListCreator);
|
||||
|
||||
/*!
|
||||
* \brief The history size required by the time discretization
|
||||
*/
|
||||
NEW_PROP_TAG(TimeDiscHistorySize);
|
||||
|
||||
/*!
|
||||
* \brief Specify whether the storage terms use extensive quantities or not.
|
||||
*
|
||||
* Most models don't need this, but the (Navier-)Stokes ones do...
|
||||
*/
|
||||
NEW_PROP_TAG(ExtensiveStorageTerm);
|
||||
|
||||
//! \brief Specify whether to use volumetric residuals or not
|
||||
NEW_PROP_TAG(UseVolumetricResidual);
|
||||
|
||||
|
||||
//! Specify if experimental features should be enabled or not.
|
||||
NEW_PROP_TAG(EnableExperiments);
|
||||
|
||||
END_PROPERTIES
|
||||
|
||||
|
@ -40,7 +40,6 @@ NEW_TYPE_TAG(VcfvDiscretization, INHERITS_FROM(FvBaseDiscretization));
|
||||
|
||||
//! Use P1 finite-elements gradients instead of two-point gradients. Note that setting
|
||||
//! this property to true requires the dune-localfunctions module to be available.
|
||||
NEW_PROP_TAG(UseP1FiniteElementGradients);
|
||||
|
||||
END_PROPERTIES
|
||||
|
||||
|
@ -38,21 +38,14 @@
|
||||
BEGIN_PROPERTIES
|
||||
|
||||
//! Provides the thermodynamic relations
|
||||
NEW_PROP_TAG(FluidSystem);
|
||||
//! The type of the flash constraint solver
|
||||
NEW_PROP_TAG(FlashSolver);
|
||||
//! The maximum accepted error of the flash solver
|
||||
NEW_PROP_TAG(FlashTolerance);
|
||||
|
||||
//! The thermal conduction law which ought to be used
|
||||
NEW_PROP_TAG(ThermalConductionLaw);
|
||||
//! The parameters of the thermal conduction law
|
||||
NEW_PROP_TAG(ThermalConductionLawParams);
|
||||
|
||||
//! Specifies whether energy should be considered as a conservation quantity or not
|
||||
NEW_PROP_TAG(EnableEnergy);
|
||||
//! Enable diffusive fluxes?
|
||||
NEW_PROP_TAG(EnableDiffusion);
|
||||
|
||||
END_PROPERTIES
|
||||
|
||||
|
@ -36,21 +36,16 @@
|
||||
BEGIN_PROPERTIES
|
||||
|
||||
//!The fluid systems including the information about the phases
|
||||
NEW_PROP_TAG(FluidSystem);
|
||||
//! Specify whether energy should be considered as a conservation quantity or not
|
||||
NEW_PROP_TAG(EnableEnergy);
|
||||
|
||||
// these properties only make sense for the ImmiscibleTwoPhase type tag
|
||||
|
||||
//! The wetting phase for two-phase models
|
||||
NEW_PROP_TAG(WettingPhase);
|
||||
//! The non-wetting phase for two-phase models
|
||||
NEW_PROP_TAG(NonwettingPhase);
|
||||
|
||||
// these properties only make sense for the ImmiscibleSinglePhase type tag
|
||||
|
||||
//! The fluid used by the model
|
||||
NEW_PROP_TAG(Fluid);
|
||||
|
||||
|
||||
END_PROPERTIES
|
||||
|
@ -47,18 +47,7 @@
|
||||
BEGIN_PROPERTIES
|
||||
|
||||
// forward definition of property tags
|
||||
NEW_PROP_TAG(NumPhases);
|
||||
NEW_PROP_TAG(NumComponents);
|
||||
NEW_PROP_TAG(NumEq);
|
||||
|
||||
NEW_PROP_TAG(Model);
|
||||
NEW_PROP_TAG(Simulator);
|
||||
NEW_PROP_TAG(Scalar);
|
||||
NEW_PROP_TAG(Evaluation);
|
||||
NEW_PROP_TAG(GridView);
|
||||
NEW_PROP_TAG(ElementContext);
|
||||
NEW_PROP_TAG(FluidSystem);
|
||||
NEW_PROP_TAG(DiscBaseOutputModule);
|
||||
|
||||
END_PROPERTIES
|
||||
|
||||
|
@ -41,14 +41,6 @@
|
||||
|
||||
BEGIN_PROPERTIES
|
||||
|
||||
NEW_PROP_TAG(Grid);
|
||||
NEW_PROP_TAG(Vanguard);
|
||||
NEW_PROP_TAG(GridView);
|
||||
NEW_PROP_TAG(GridPart);
|
||||
NEW_PROP_TAG(GridViewLevel);
|
||||
NEW_PROP_TAG(GridFile);
|
||||
NEW_PROP_TAG(GridGlobalRefinements);
|
||||
NEW_PROP_TAG(Simulator);
|
||||
|
||||
END_PROPERTIES
|
||||
|
||||
|
@ -40,18 +40,9 @@
|
||||
|
||||
BEGIN_PROPERTIES
|
||||
|
||||
NEW_PROP_TAG(Scalar);
|
||||
NEW_PROP_TAG(Grid);
|
||||
|
||||
NEW_PROP_TAG(DomainSizeX);
|
||||
NEW_PROP_TAG(DomainSizeY);
|
||||
NEW_PROP_TAG(DomainSizeZ);
|
||||
|
||||
NEW_PROP_TAG(CellsX);
|
||||
NEW_PROP_TAG(CellsY);
|
||||
NEW_PROP_TAG(CellsZ);
|
||||
|
||||
NEW_PROP_TAG(GridGlobalRefinements);
|
||||
|
||||
END_PROPERTIES
|
||||
|
||||
|
@ -41,12 +41,6 @@
|
||||
|
||||
BEGIN_PROPERTIES
|
||||
|
||||
NEW_PROP_TAG(Grid);
|
||||
NEW_PROP_TAG(GridFile);
|
||||
NEW_PROP_TAG(Vanguard);
|
||||
NEW_PROP_TAG(GridGlobalRefinements);
|
||||
NEW_PROP_TAG(Scalar);
|
||||
NEW_PROP_TAG(Simulator);
|
||||
|
||||
END_PROPERTIES
|
||||
|
||||
@ -73,8 +67,13 @@ public:
|
||||
*/
|
||||
static void registerParameters()
|
||||
{
|
||||
EWOMS_REGISTER_PARAM(TypeTag, std::string, GridFile,
|
||||
"The file name of the DGF file to load");
|
||||
// #define EWOMS_REGISTER_PARAM(TypeTag, ParamType, ParamName, Description)
|
||||
// ::Opm::Parameters::registerParam<TypeTag, ParamType, PTAG_(ParamName)>(
|
||||
// #ParamName, #ParamName, Description)
|
||||
// EWOMS_REGISTER_PARAM(TypeTag, std::string, GridFile,
|
||||
// "The file name of the DGF file to load");
|
||||
::Opm::Parameters::template registerParam<TypeTag, std::string, Properties::GridFile>
|
||||
("GridFile", "GridFile", "The file name of the DGF file to load");
|
||||
EWOMS_REGISTER_PARAM(TypeTag, unsigned, GridGlobalRefinements,
|
||||
"The number of global refinements of the grid "
|
||||
"executed after it was loaded");
|
||||
@ -198,6 +197,10 @@ private:
|
||||
FractureMapper fractureMapper_;
|
||||
};
|
||||
|
||||
namespace Properties {
|
||||
SET_TYPE_PROP(NumericModel, Vanguard, Opm::DgfVanguard<TypeTag>);
|
||||
}
|
||||
|
||||
} // namespace Opm
|
||||
|
||||
#endif
|
||||
|
@ -38,18 +38,9 @@
|
||||
|
||||
BEGIN_PROPERTIES
|
||||
|
||||
NEW_PROP_TAG(Scalar);
|
||||
NEW_PROP_TAG(Grid);
|
||||
|
||||
NEW_PROP_TAG(DomainSizeX);
|
||||
NEW_PROP_TAG(DomainSizeY);
|
||||
NEW_PROP_TAG(DomainSizeZ);
|
||||
|
||||
NEW_PROP_TAG(CellsX);
|
||||
NEW_PROP_TAG(CellsY);
|
||||
NEW_PROP_TAG(CellsZ);
|
||||
|
||||
NEW_PROP_TAG(GridGlobalRefinements);
|
||||
|
||||
END_PROPERTIES
|
||||
|
||||
|
@ -57,18 +57,9 @@ BEGIN_PROPERTIES
|
||||
NEW_TYPE_TAG(StructuredGridVanguard);
|
||||
|
||||
// declare the properties required by the for the structured grid simulator vanguard
|
||||
NEW_PROP_TAG(Grid);
|
||||
NEW_PROP_TAG(Scalar);
|
||||
|
||||
NEW_PROP_TAG(DomainSizeX);
|
||||
NEW_PROP_TAG(DomainSizeY);
|
||||
NEW_PROP_TAG(DomainSizeZ);
|
||||
|
||||
NEW_PROP_TAG(CellsX);
|
||||
NEW_PROP_TAG(CellsY);
|
||||
NEW_PROP_TAG(CellsZ);
|
||||
|
||||
NEW_PROP_TAG(GridGlobalRefinements);
|
||||
|
||||
// GRIDDIM is only set by the finger problem
|
||||
#ifndef GRIDDIM
|
||||
|
@ -46,12 +46,6 @@ BEGIN_PROPERTIES
|
||||
NEW_TYPE_TAG(VtkBlackOilEnergy);
|
||||
|
||||
// create the property tags needed for the energy module
|
||||
NEW_PROP_TAG(VtkWriteRockInternalEnergy);
|
||||
NEW_PROP_TAG(VtkWriteTotalThermalConductivity);
|
||||
NEW_PROP_TAG(VtkWriteFluidInternalEnergies);
|
||||
NEW_PROP_TAG(VtkWriteFluidEnthalpies);
|
||||
NEW_PROP_TAG(VtkOutputFormat);
|
||||
NEW_PROP_TAG(EnableVtkOutput);
|
||||
|
||||
// set default values for what quantities to output
|
||||
SET_BOOL_PROP(VtkBlackOilEnergy, VtkWriteRockInternalEnergy, true);
|
||||
|
@ -46,19 +46,6 @@ BEGIN_PROPERTIES
|
||||
NEW_TYPE_TAG(VtkBlackOil);
|
||||
|
||||
// create the property tags needed for the multi phase module
|
||||
NEW_PROP_TAG(EnableVtkOutput);
|
||||
NEW_PROP_TAG(VtkOutputFormat);
|
||||
NEW_PROP_TAG(VtkWriteGasDissolutionFactor);
|
||||
NEW_PROP_TAG(VtkWriteOilVaporizationFactor);
|
||||
NEW_PROP_TAG(VtkWriteOilFormationVolumeFactor);
|
||||
NEW_PROP_TAG(VtkWriteGasFormationVolumeFactor);
|
||||
NEW_PROP_TAG(VtkWriteWaterFormationVolumeFactor);
|
||||
NEW_PROP_TAG(VtkWriteOilSaturationPressure);
|
||||
NEW_PROP_TAG(VtkWriteGasSaturationPressure);
|
||||
NEW_PROP_TAG(VtkWriteSaturationRatios);
|
||||
NEW_PROP_TAG(VtkWriteSaturatedOilGasDissolutionFactor);
|
||||
NEW_PROP_TAG(VtkWriteSaturatedGasOilVaporizationFactor);
|
||||
NEW_PROP_TAG(VtkWritePrimaryVarsMeaning);
|
||||
|
||||
// set default values for what quantities to output
|
||||
SET_BOOL_PROP(VtkBlackOil, VtkWriteGasDissolutionFactor, false);
|
||||
|
@ -46,14 +46,6 @@ BEGIN_PROPERTIES
|
||||
NEW_TYPE_TAG(VtkBlackOilPolymer);
|
||||
|
||||
// create the property tags needed for the polymer output module
|
||||
NEW_PROP_TAG(EnablePolymer);
|
||||
NEW_PROP_TAG(EnableVtkOutput);
|
||||
NEW_PROP_TAG(VtkWritePolymerConcentration);
|
||||
NEW_PROP_TAG(VtkWritePolymerDeadPoreVolume);
|
||||
NEW_PROP_TAG(VtkWritePolymerAdsorption);
|
||||
NEW_PROP_TAG(VtkWritePolymerRockDensity);
|
||||
NEW_PROP_TAG(VtkWritePolymerViscosityCorrection);
|
||||
NEW_PROP_TAG(VtkWriteWaterViscosityCorrection);
|
||||
|
||||
// set default values for what quantities to output
|
||||
SET_BOOL_PROP(VtkBlackOilPolymer, VtkWritePolymerConcentration, true);
|
||||
|
@ -46,12 +46,6 @@ BEGIN_PROPERTIES
|
||||
NEW_TYPE_TAG(VtkBlackOilSolvent);
|
||||
|
||||
// create the property tags needed for the solvent output module
|
||||
NEW_PROP_TAG(EnableSolvent);
|
||||
NEW_PROP_TAG(EnableVtkOutput);
|
||||
NEW_PROP_TAG(VtkWriteSolventSaturation);
|
||||
NEW_PROP_TAG(VtkWriteSolventDensity);
|
||||
NEW_PROP_TAG(VtkWriteSolventViscosity);
|
||||
NEW_PROP_TAG(VtkWriteSolventMobility);
|
||||
|
||||
// set default values for what quantities to output
|
||||
SET_BOOL_PROP(VtkBlackOilSolvent, VtkWriteSolventSaturation, true);
|
||||
|
@ -41,15 +41,6 @@ BEGIN_PROPERTIES
|
||||
NEW_TYPE_TAG(VtkComposition);
|
||||
|
||||
// create the property tags needed for the composition module
|
||||
NEW_PROP_TAG(VtkWriteMassFractions);
|
||||
NEW_PROP_TAG(VtkWriteMoleFractions);
|
||||
NEW_PROP_TAG(VtkWriteTotalMassFractions);
|
||||
NEW_PROP_TAG(VtkWriteTotalMoleFractions);
|
||||
NEW_PROP_TAG(VtkWriteMolarities);
|
||||
NEW_PROP_TAG(VtkWriteFugacities);
|
||||
NEW_PROP_TAG(VtkWriteFugacityCoeffs);
|
||||
NEW_PROP_TAG(VtkOutputFormat);
|
||||
NEW_PROP_TAG(EnableVtkOutput);
|
||||
|
||||
// set default values for what quantities to output
|
||||
SET_BOOL_PROP(VtkComposition, VtkWriteMassFractions, false);
|
||||
|
@ -44,11 +44,6 @@ BEGIN_PROPERTIES
|
||||
NEW_TYPE_TAG(VtkDiffusion);
|
||||
|
||||
// create the property tags needed for the diffusion module
|
||||
NEW_PROP_TAG(VtkWriteTortuosities);
|
||||
NEW_PROP_TAG(VtkWriteDiffusionCoefficients);
|
||||
NEW_PROP_TAG(VtkWriteEffectiveDiffusionCoefficients);
|
||||
NEW_PROP_TAG(VtkOutputFormat);
|
||||
NEW_PROP_TAG(EnableVtkOutput);
|
||||
|
||||
// set default values for what quantities to output
|
||||
SET_BOOL_PROP(VtkDiffusion, VtkWriteTortuosities, false);
|
||||
|
@ -45,17 +45,6 @@ BEGIN_PROPERTIES
|
||||
NEW_TYPE_TAG(VtkDiscreteFracture);
|
||||
|
||||
// create the property tags needed for the multi phase module
|
||||
NEW_PROP_TAG(Vanguard);
|
||||
NEW_PROP_TAG(VtkWriteFractureSaturations);
|
||||
NEW_PROP_TAG(VtkWriteFractureMobilities);
|
||||
NEW_PROP_TAG(VtkWriteFractureRelativePermeabilities);
|
||||
NEW_PROP_TAG(VtkWriteFracturePorosity);
|
||||
NEW_PROP_TAG(VtkWriteFractureIntrinsicPermeabilities);
|
||||
NEW_PROP_TAG(VtkWriteFractureFilterVelocities);
|
||||
NEW_PROP_TAG(VtkWriteFractureVolumeFraction);
|
||||
NEW_PROP_TAG(VtkOutputFormat);
|
||||
NEW_PROP_TAG(EnableVtkOutput);
|
||||
NEW_PROP_TAG(DiscBaseOutputModule);
|
||||
|
||||
// set default values for what quantities to output
|
||||
SET_BOOL_PROP(VtkDiscreteFracture, VtkWriteFractureSaturations, true);
|
||||
|
@ -41,12 +41,6 @@ BEGIN_PROPERTIES
|
||||
NEW_TYPE_TAG(VtkEnergy);
|
||||
|
||||
// create the property tags needed for the energy module
|
||||
NEW_PROP_TAG(VtkWriteSolidInternalEnergy);
|
||||
NEW_PROP_TAG(VtkWriteThermalConductivity);
|
||||
NEW_PROP_TAG(VtkWriteInternalEnergies);
|
||||
NEW_PROP_TAG(VtkWriteEnthalpies);
|
||||
NEW_PROP_TAG(VtkOutputFormat);
|
||||
NEW_PROP_TAG(EnableVtkOutput);
|
||||
|
||||
// set default values for what quantities to output
|
||||
SET_BOOL_PROP(VtkEnergy, VtkWriteSolidInternalEnergy, false);
|
||||
|
@ -46,20 +46,6 @@ BEGIN_PROPERTIES
|
||||
NEW_TYPE_TAG(VtkMultiPhase);
|
||||
|
||||
// create the property tags needed for the multi phase module
|
||||
NEW_PROP_TAG(VtkWriteExtrusionFactor);
|
||||
NEW_PROP_TAG(VtkWritePressures);
|
||||
NEW_PROP_TAG(VtkWriteDensities);
|
||||
NEW_PROP_TAG(VtkWriteSaturations);
|
||||
NEW_PROP_TAG(VtkWriteMobilities);
|
||||
NEW_PROP_TAG(VtkWriteRelativePermeabilities);
|
||||
NEW_PROP_TAG(VtkWriteViscosities);
|
||||
NEW_PROP_TAG(VtkWriteAverageMolarMasses);
|
||||
NEW_PROP_TAG(VtkWritePorosity);
|
||||
NEW_PROP_TAG(VtkWriteIntrinsicPermeabilities);
|
||||
NEW_PROP_TAG(VtkWritePotentialGradients);
|
||||
NEW_PROP_TAG(VtkWriteFilterVelocities);
|
||||
NEW_PROP_TAG(VtkOutputFormat);
|
||||
NEW_PROP_TAG(EnableVtkOutput);
|
||||
|
||||
// set default values for what quantities to output
|
||||
SET_BOOL_PROP(VtkMultiPhase, VtkWriteExtrusionFactor, false);
|
||||
|
@ -39,9 +39,6 @@ BEGIN_PROPERTIES
|
||||
NEW_TYPE_TAG(VtkPhasePresence);
|
||||
|
||||
// create the property tags needed for the primary variables module
|
||||
NEW_PROP_TAG(VtkWritePhasePresence);
|
||||
NEW_PROP_TAG(VtkOutputFormat);
|
||||
NEW_PROP_TAG(EnableVtkOutput);
|
||||
|
||||
SET_BOOL_PROP(VtkPhasePresence, VtkWritePhasePresence, false);
|
||||
|
||||
|
@ -36,15 +36,9 @@
|
||||
BEGIN_PROPERTIES
|
||||
|
||||
// create new type tag for the VTK primary variables output
|
||||
NEW_PROP_TAG(EnableVtkOutput);
|
||||
NEW_TYPE_TAG(VtkPrimaryVars);
|
||||
|
||||
// create the property tags needed for the primary variables module
|
||||
NEW_PROP_TAG(VtkWritePrimaryVars);
|
||||
NEW_PROP_TAG(VtkWriteProcessRank);
|
||||
NEW_PROP_TAG(VtkWriteDofIndex);
|
||||
NEW_PROP_TAG(VtkOutputFormat);
|
||||
NEW_PROP_TAG(EnableVtkOutput);
|
||||
|
||||
SET_BOOL_PROP(VtkPrimaryVars, VtkWritePrimaryVars, false);
|
||||
SET_BOOL_PROP(VtkPrimaryVars, VtkWriteProcessRank, false);
|
||||
|
@ -41,9 +41,6 @@ BEGIN_PROPERTIES
|
||||
NEW_TYPE_TAG(VtkTemperature);
|
||||
|
||||
// create the property tags needed for the temperature module
|
||||
NEW_PROP_TAG(VtkWriteTemperature);
|
||||
NEW_PROP_TAG(VtkOutputFormat);
|
||||
NEW_PROP_TAG(EnableVtkOutput);
|
||||
|
||||
// set default values for what quantities to output
|
||||
SET_BOOL_PROP(VtkTemperature, VtkWriteTemperature, true);
|
||||
|
@ -38,21 +38,15 @@
|
||||
BEGIN_PROPERTIES
|
||||
|
||||
//! Enable the energy equation?
|
||||
NEW_PROP_TAG(EnableEnergy);
|
||||
|
||||
//! Enable diffusive fluxes?
|
||||
NEW_PROP_TAG(EnableDiffusion);
|
||||
|
||||
//! The unmodified weight for the pressure primary variable
|
||||
NEW_PROP_TAG(NcpPressureBaseWeight);
|
||||
//! The weight for the saturation primary variables
|
||||
NEW_PROP_TAG(NcpSaturationsBaseWeight);
|
||||
//! The unmodified weight for the fugacity primary variables
|
||||
NEW_PROP_TAG(NcpFugacitiesBaseWeight);
|
||||
|
||||
//! The themodynamic constraint solver which calculates the
|
||||
//! composition of any phase given all component fugacities.
|
||||
NEW_PROP_TAG(NcpCompositionFromFugacitiesSolver);
|
||||
|
||||
END_PROPERTIES
|
||||
|
||||
|
@ -66,60 +66,42 @@ BEGIN_PROPERTIES
|
||||
NEW_TYPE_TAG(NewtonMethod);
|
||||
|
||||
//! The simulation management class of the simulation
|
||||
NEW_PROP_TAG(Simulator);
|
||||
|
||||
//! The physical model which we would like to solve
|
||||
NEW_PROP_TAG(Problem);
|
||||
|
||||
//! The model describing the PDEs for the conservation quantities
|
||||
NEW_PROP_TAG(Model);
|
||||
|
||||
//! The type of scalar values
|
||||
NEW_PROP_TAG(Scalar);
|
||||
|
||||
//! Specifies the type of the actual Newton method
|
||||
NEW_PROP_TAG(NewtonMethod);
|
||||
|
||||
//! Specifies the type of a solution
|
||||
NEW_PROP_TAG(SolutionVector);
|
||||
|
||||
//! Specifies the type of a solution for a single degee of freedom
|
||||
NEW_PROP_TAG(PrimaryVariables);
|
||||
|
||||
//! Specifies whether the problem to be simulated exhibits contraint degrees of freedom
|
||||
NEW_PROP_TAG(EnableConstraints);
|
||||
|
||||
//! Specifies the type of objects which specify constraints for a single degee of freedom
|
||||
NEW_PROP_TAG(Constraints);
|
||||
|
||||
//! Vector containing a quantity of for equation on the whole grid
|
||||
NEW_PROP_TAG(GlobalEqVector);
|
||||
|
||||
//! Vector containing a quantity of for equation for a single degee of freedom
|
||||
NEW_PROP_TAG(EqVector);
|
||||
|
||||
//! The class which linearizes the non-linear system of equations
|
||||
NEW_PROP_TAG(Linearizer);
|
||||
|
||||
//! Specifies the type of a global Jacobian matrix
|
||||
NEW_PROP_TAG(SparseMatrixAdapter);
|
||||
|
||||
//! Specifies the type of the linear solver to be used
|
||||
NEW_PROP_TAG(LinearSolverBackend);
|
||||
|
||||
//! Specifies whether the Newton method should print messages or not
|
||||
NEW_PROP_TAG(NewtonVerbose);
|
||||
|
||||
//! Specifies the type of the class which writes out the Newton convergence
|
||||
NEW_PROP_TAG(NewtonConvergenceWriter);
|
||||
|
||||
//! Specifies whether the convergence rate and the global residual
|
||||
//! gets written out to disk for every Newton iteration
|
||||
NEW_PROP_TAG(NewtonWriteConvergence);
|
||||
|
||||
//! Specifies whether the convergence rate and the global residual
|
||||
//! gets written out to disk for every Newton iteration
|
||||
NEW_PROP_TAG(ConvergenceWriter);
|
||||
|
||||
/*!
|
||||
* \brief The value for the error below which convergence is declared
|
||||
@ -127,11 +109,9 @@ NEW_PROP_TAG(ConvergenceWriter);
|
||||
* This value can (and for the porous media models will) be changed to account for grid
|
||||
* scaling and other effects.
|
||||
*/
|
||||
NEW_PROP_TAG(NewtonTolerance);
|
||||
|
||||
//! The maximum error which may occur in a simulation before the
|
||||
//! Newton method for the time step is aborted
|
||||
NEW_PROP_TAG(NewtonMaxError);
|
||||
|
||||
/*!
|
||||
* \brief The number of iterations at which the Newton method
|
||||
@ -141,10 +121,8 @@ NEW_PROP_TAG(NewtonMaxError);
|
||||
* is to scale the last time-step size by the deviation of the
|
||||
* number of iterations used from the target steps.
|
||||
*/
|
||||
NEW_PROP_TAG(NewtonTargetIterations);
|
||||
|
||||
//! Number of maximum iterations for the Newton method.
|
||||
NEW_PROP_TAG(NewtonMaxIterations);
|
||||
|
||||
// set default values for the properties
|
||||
SET_TYPE_PROP(NewtonMethod, NewtonMethod, Opm::NewtonMethod<TypeTag>);
|
||||
|
@ -34,10 +34,7 @@
|
||||
|
||||
BEGIN_PROPERTIES
|
||||
|
||||
NEW_PROP_TAG(NewtonMethod);
|
||||
|
||||
NEW_PROP_TAG(SolutionVector);
|
||||
NEW_PROP_TAG(GlobalEqVector);
|
||||
|
||||
END_PROPERTIES
|
||||
|
||||
|
@ -40,7 +40,6 @@
|
||||
|
||||
BEGIN_PROPERTIES
|
||||
|
||||
NEW_PROP_TAG(ThreadsPerProcess);
|
||||
|
||||
END_PROPERTIES
|
||||
|
||||
@ -127,6 +126,10 @@ private:
|
||||
static int numThreads_;
|
||||
};
|
||||
|
||||
namespace Properties {
|
||||
SET_TYPE_PROP(NumericModel, ThreadManager, Opm::ThreadManager<TypeTag>);
|
||||
}
|
||||
|
||||
template <class TypeTag>
|
||||
int ThreadManager<TypeTag>::numThreads_ = 1;
|
||||
} // namespace Opm
|
||||
|
@ -41,18 +41,12 @@
|
||||
BEGIN_PROPERTIES
|
||||
|
||||
//! Specifies whether energy is considered as a conservation quantity or not
|
||||
NEW_PROP_TAG(EnableEnergy);
|
||||
//! Enable diffusive fluxes?
|
||||
NEW_PROP_TAG(EnableDiffusion);
|
||||
|
||||
//! The verbosity of the model (0 -> do not print anything, 2 -> spam stdout a lot)
|
||||
NEW_PROP_TAG(PvsVerbosity);
|
||||
//! The basis value for the weight of the pressure primary variable
|
||||
NEW_PROP_TAG(PvsPressureBaseWeight);
|
||||
//! The basis value for the weight of the saturation primary variables
|
||||
NEW_PROP_TAG(PvsSaturationsBaseWeight);
|
||||
//! The basis value for the weight of the mole fraction primary variables
|
||||
NEW_PROP_TAG(PvsMoleFractionsBaseWeight);
|
||||
|
||||
END_PROPERTIES
|
||||
|
||||
|
@ -35,27 +35,20 @@
|
||||
BEGIN_PROPERTIES
|
||||
|
||||
//! The fluid system used for the problem
|
||||
NEW_PROP_TAG(FluidSystem);
|
||||
|
||||
//! The fluid used as the wetting phase (by default, we set the fluid
|
||||
//! system to the immiscible one, which requires this property.)
|
||||
NEW_PROP_TAG(WettingFluid);
|
||||
|
||||
//! The fluid used as the non-wetting phase (by default, we set the
|
||||
//! fluid system to the immiscible one, which requires this property.)
|
||||
NEW_PROP_TAG(NonWettingFluid);
|
||||
|
||||
//! Index of the fluid which represents the wetting phase
|
||||
NEW_PROP_TAG(LiquidPhaseIndex);
|
||||
|
||||
//! Index of the fluid which represents the non-wetting phase
|
||||
NEW_PROP_TAG(GasPhaseIndex);
|
||||
|
||||
//! Index of the component which constitutes the liquid
|
||||
NEW_PROP_TAG(LiquidComponentIndex);
|
||||
|
||||
//! Index of the component which constitutes the gas
|
||||
NEW_PROP_TAG(GasComponentIndex);
|
||||
|
||||
// \}
|
||||
|
||||
|
@ -30,9 +30,23 @@
|
||||
|
||||
#include <dune/common/parametertree.hh>
|
||||
|
||||
// explicitly guard the include so that the property system
|
||||
// header doesn't need to be opened and checked all the time
|
||||
#ifndef OPM_PROPERTY_SYSTEM_HH
|
||||
#include <opm/models/utils/propertysystem.hh>
|
||||
|
||||
// remove this after release 3.1 to disable macros per default
|
||||
#ifndef OPM_ENABLE_OLD_PROPERTY_MACROS
|
||||
#define OPM_ENABLE_OLD_PROPERTY_MACROS 1
|
||||
#endif
|
||||
|
||||
// remove this after release 3.2 to remove macros completely
|
||||
#if OPM_ENABLE_OLD_PROPERTY_MACROS
|
||||
#include <opm/models/utils/propertysystemmacros.hh>
|
||||
#endif // OPM_ENABLE_OLD_PROPERTY_MACROS
|
||||
#endif // OPM_PROPERTY_SYSTEM_HH
|
||||
|
||||
#include <opm/models/utils/parametersystem.hh>
|
||||
#include <opm/models/io/dgfvanguard.hh>
|
||||
|
||||
#if HAVE_DUNE_FEM
|
||||
#include <dune/fem/gridpart/adaptiveleafgridpart.hh>
|
||||
@ -50,6 +64,7 @@ BEGIN_PROPERTIES
|
||||
// +-> ImplicitModel
|
||||
///////////////////////////////////
|
||||
|
||||
NEW_TYPE_TAG(ParameterSystem);
|
||||
//! Type tag for all models.
|
||||
NEW_TYPE_TAG(NumericModel, INHERITS_FROM(ParameterSystem));
|
||||
|
||||
@ -76,10 +91,238 @@ NEW_PROP_TAG(Vanguard);
|
||||
|
||||
NEW_PROP_TAG(GridView);
|
||||
|
||||
NEW_PROP_TAG(Simulator);
|
||||
NEW_PROP_TAG(Grid);
|
||||
NEW_PROP_TAG(GridFile);
|
||||
NEW_PROP_TAG(Model);
|
||||
NEW_PROP_TAG(Problem);
|
||||
NEW_PROP_TAG(ThreadManager);
|
||||
NEW_PROP_TAG(NewtonMethod);
|
||||
NEW_PROP_TAG(SolutionVector);
|
||||
NEW_PROP_TAG(GlobalEqVector);
|
||||
NEW_PROP_TAG(VtkOutputFormat);
|
||||
|
||||
//! Specifies the type of a solution for a single degee of freedom
|
||||
NEW_PROP_TAG(PrimaryVariables);
|
||||
|
||||
//! Specifies whether the problem to be simulated exhibits contraint degrees of freedom
|
||||
NEW_PROP_TAG(EnableConstraints);
|
||||
|
||||
//! Specifies the type of objects which specify constraints for a single degee of freedom
|
||||
NEW_PROP_TAG(Constraints);
|
||||
|
||||
//! Vector containing a quantity of for equation for a single degee of freedom
|
||||
NEW_PROP_TAG(EqVector);
|
||||
|
||||
//! The class which linearizes the non-linear system of equations
|
||||
NEW_PROP_TAG(Linearizer);
|
||||
|
||||
//! Specifies the type of a global Jacobian matrix
|
||||
NEW_PROP_TAG(SparseMatrixAdapter);
|
||||
|
||||
//! Specifies the type of the linear solver to be used
|
||||
NEW_PROP_TAG(LinearSolverBackend);
|
||||
|
||||
//! Specifies whether the Newton method should print messages or not
|
||||
NEW_PROP_TAG(NewtonVerbose);
|
||||
|
||||
//! Specifies the type of the class which writes out the Newton convergence
|
||||
NEW_PROP_TAG(NewtonConvergenceWriter);
|
||||
|
||||
//! Specifies whether the convergence rate and the global residual
|
||||
//! gets written out to disk for every Newton iteration
|
||||
NEW_PROP_TAG(NewtonWriteConvergence);
|
||||
|
||||
//! Specifies whether the convergence rate and the global residual
|
||||
//! gets written out to disk for every Newton iteration
|
||||
NEW_PROP_TAG(ConvergenceWriter);
|
||||
|
||||
/*!
|
||||
* \brief The value for the error below which convergence is declared
|
||||
*
|
||||
* This value can (and for the porous media models will) be changed to account for grid
|
||||
* scaling and other effects.
|
||||
*/
|
||||
NEW_PROP_TAG(NewtonTolerance);
|
||||
|
||||
//! The maximum error which may occur in a simulation before the
|
||||
//! Newton method for the time step is aborted
|
||||
NEW_PROP_TAG(NewtonMaxError);
|
||||
|
||||
/*!
|
||||
* \brief The number of iterations at which the Newton method
|
||||
* should aim at.
|
||||
*
|
||||
* This is used to control the time-step size. The heuristic used
|
||||
* is to scale the last time-step size by the deviation of the
|
||||
* number of iterations used from the target steps.
|
||||
*/
|
||||
NEW_PROP_TAG(NewtonTargetIterations);
|
||||
|
||||
//! Number of maximum iterations for the Newton method.
|
||||
NEW_PROP_TAG(NewtonMaxIterations);
|
||||
|
||||
|
||||
|
||||
#if HAVE_DUNE_FEM
|
||||
NEW_PROP_TAG(GridPart);
|
||||
#endif
|
||||
|
||||
NEW_PROP_TAG(LocalLinearizer);
|
||||
NEW_PROP_TAG(Evaluation);
|
||||
NEW_PROP_TAG(NumericDifferenceMethod);
|
||||
NEW_PROP_TAG(BaseEpsilon);
|
||||
NEW_PROP_TAG(LocalResidual);
|
||||
NEW_PROP_TAG(ElementContext);
|
||||
|
||||
NEW_PROP_TAG(NumPhases);
|
||||
NEW_PROP_TAG(NumComponents);
|
||||
NEW_PROP_TAG(NumEq);
|
||||
NEW_PROP_TAG(FluidSystem);
|
||||
NEW_PROP_TAG(DiscBaseOutputModule);
|
||||
|
||||
// create new type tag for the VTK primary variables output
|
||||
NEW_PROP_TAG(EnableVtkOutput);
|
||||
|
||||
// create the property tags needed for the primary variables module
|
||||
NEW_PROP_TAG(VtkWritePrimaryVars);
|
||||
NEW_PROP_TAG(VtkWriteProcessRank);
|
||||
NEW_PROP_TAG(VtkWriteDofIndex);
|
||||
NEW_PROP_TAG(VtkWriteExtrusionFactor);
|
||||
NEW_PROP_TAG(VtkWritePressures);
|
||||
NEW_PROP_TAG(VtkWriteDensities);
|
||||
NEW_PROP_TAG(VtkWriteSaturations);
|
||||
NEW_PROP_TAG(VtkWriteMobilities);
|
||||
NEW_PROP_TAG(VtkWriteRelativePermeabilities);
|
||||
NEW_PROP_TAG(VtkWriteViscosities);
|
||||
NEW_PROP_TAG(VtkWriteAverageMolarMasses);
|
||||
NEW_PROP_TAG(VtkWritePorosity);
|
||||
NEW_PROP_TAG(VtkWriteIntrinsicPermeabilities);
|
||||
NEW_PROP_TAG(VtkWritePotentialGradients);
|
||||
NEW_PROP_TAG(VtkWriteFilterVelocities);
|
||||
NEW_PROP_TAG(VtkWriteTemperature);
|
||||
NEW_PROP_TAG(VtkWriteSolidInternalEnergy);
|
||||
NEW_PROP_TAG(VtkWriteThermalConductivity);
|
||||
NEW_PROP_TAG(VtkWriteInternalEnergies);
|
||||
NEW_PROP_TAG(VtkWriteEnthalpies);
|
||||
NEW_PROP_TAG(IntensiveQuantities);
|
||||
|
||||
NEW_PROP_TAG(BoundaryContext);
|
||||
NEW_PROP_TAG(BoundaryRateVector);
|
||||
NEW_PROP_TAG(CellsX);
|
||||
NEW_PROP_TAG(CellsY);
|
||||
NEW_PROP_TAG(CellsZ);
|
||||
NEW_PROP_TAG(ContinueOnConvergenceError);
|
||||
NEW_PROP_TAG(DiscExtensiveQuantities);
|
||||
NEW_PROP_TAG(DiscIntensiveQuantities);
|
||||
NEW_PROP_TAG(DiscLocalResidual);
|
||||
NEW_PROP_TAG(Discretization);
|
||||
NEW_PROP_TAG(DofMapper);
|
||||
NEW_PROP_TAG(DomainSizeX);
|
||||
NEW_PROP_TAG(DomainSizeY);
|
||||
NEW_PROP_TAG(DomainSizeZ);
|
||||
NEW_PROP_TAG(ElementMapper);
|
||||
NEW_PROP_TAG(EnableAsyncVtkOutput);
|
||||
NEW_PROP_TAG(EnableEnergy);
|
||||
NEW_PROP_TAG(EnableGravity);
|
||||
NEW_PROP_TAG(EnableGridAdaptation);
|
||||
NEW_PROP_TAG(EnableStorageCache);
|
||||
NEW_PROP_TAG(ExtensiveQuantities);
|
||||
NEW_PROP_TAG(ExtensiveStorageTerm);
|
||||
NEW_PROP_TAG(Fluid);
|
||||
NEW_PROP_TAG(FluxModule);
|
||||
NEW_PROP_TAG(GradientCalculator);
|
||||
NEW_PROP_TAG(GridCommHandleFactory);
|
||||
NEW_PROP_TAG(Indices);
|
||||
NEW_PROP_TAG(LinearizeNonLocalElements);
|
||||
NEW_PROP_TAG(MaterialLaw);
|
||||
NEW_PROP_TAG(MaterialLawParams);
|
||||
NEW_PROP_TAG(MaxTimeStepDivisions);
|
||||
NEW_PROP_TAG(MaxTimeStepSize);
|
||||
NEW_PROP_TAG(MinTimeStepSize);
|
||||
NEW_PROP_TAG(OutputDir);
|
||||
NEW_PROP_TAG(RateVector);
|
||||
NEW_PROP_TAG(SolidEnergyLaw);
|
||||
NEW_PROP_TAG(Stencil);
|
||||
NEW_PROP_TAG(ThermalConductionLaw);
|
||||
NEW_PROP_TAG(ThreadsPerProcess);
|
||||
NEW_PROP_TAG(TimeDiscHistorySize);
|
||||
NEW_PROP_TAG(UseLinearizationLock);
|
||||
NEW_PROP_TAG(UseP1FiniteElementGradients);
|
||||
NEW_PROP_TAG(UseVolumetricResidual);
|
||||
NEW_PROP_TAG(VertexMapper);
|
||||
NEW_PROP_TAG(SolidEnergyLawParams);
|
||||
NEW_PROP_TAG(ThermalConductionLawParams);
|
||||
|
||||
NEW_PROP_TAG(BaseProblem);
|
||||
NEW_PROP_TAG(ConstraintsContext);
|
||||
NEW_PROP_TAG(ElementEqVector);
|
||||
NEW_PROP_TAG(EnableExperiments);
|
||||
NEW_PROP_TAG(EnableIntensiveQuantityCache);
|
||||
NEW_PROP_TAG(EnableThermodynamicHints);
|
||||
NEW_PROP_TAG(NonwettingPhase);
|
||||
NEW_PROP_TAG(SpatialDiscretizationSplice);
|
||||
NEW_PROP_TAG(WettingPhase);
|
||||
|
||||
NEW_PROP_TAG(OverlappingMatrix);
|
||||
NEW_PROP_TAG(OverlappingVector);
|
||||
NEW_PROP_TAG(PreconditionerOrder);
|
||||
NEW_PROP_TAG(PreconditionerRelaxation);
|
||||
|
||||
NEW_PROP_TAG(AmgCoarsenTarget);
|
||||
|
||||
NEW_PROP_TAG(BorderListCreator);
|
||||
NEW_PROP_TAG(Overlap);
|
||||
NEW_PROP_TAG(OverlappingScalarProduct);
|
||||
NEW_PROP_TAG(OverlappingLinearOperator);
|
||||
|
||||
|
||||
//! the preconditioner used by the linear solver
|
||||
NEW_PROP_TAG(PreconditionerWrapper);
|
||||
|
||||
|
||||
//! The floating point type used internally by the linear solver
|
||||
NEW_PROP_TAG(LinearSolverScalar);
|
||||
|
||||
/*!
|
||||
* \brief The size of the algebraic overlap of the linear solver.
|
||||
*
|
||||
* Algebraic overlaps can be thought as being the same as the overlap
|
||||
* of a grid, but it is only existant for the linear system of
|
||||
* equations.
|
||||
*/
|
||||
NEW_PROP_TAG(LinearSolverOverlapSize);
|
||||
|
||||
/*!
|
||||
* \brief Maximum accepted error of the solution of the linear solver.
|
||||
*/
|
||||
NEW_PROP_TAG(LinearSolverTolerance);
|
||||
|
||||
/*!
|
||||
* \brief Maximum accepted error of the norm of the residual.
|
||||
*/
|
||||
NEW_PROP_TAG(LinearSolverAbsTolerance);
|
||||
|
||||
/*!
|
||||
* \brief Specifies the verbosity of the linear solver
|
||||
*
|
||||
* By default it is 0, i.e. it doesn't print anything. Setting this
|
||||
* property to 1 prints aggregated convergence rates, 2 prints the
|
||||
* convergence rate of every iteration of the scheme.
|
||||
*/
|
||||
NEW_PROP_TAG(LinearSolverVerbosity);
|
||||
|
||||
//! Maximum number of iterations eyecuted by the linear solver
|
||||
NEW_PROP_TAG(LinearSolverMaxIterations);
|
||||
|
||||
NEW_PROP_TAG(LinearSolverMaxError);
|
||||
|
||||
NEW_PROP_TAG(LinearSolverSplice);
|
||||
NEW_PROP_TAG(LocalLinearizerSplice);
|
||||
|
||||
//! The discretization specific part of he implementing the Newton algorithm
|
||||
NEW_PROP_TAG(DiscNewtonMethod);
|
||||
|
||||
//! Property which tells the Vanguard how often the grid should be refined
|
||||
//! after creation.
|
||||
NEW_PROP_TAG(GridGlobalRefinements);
|
||||
@ -116,6 +359,8 @@ NEW_PROP_TAG(RestartTime);
|
||||
//! The name of the file with a number of forced time step lengths
|
||||
NEW_PROP_TAG(PredeterminedTimeStepsFile);
|
||||
|
||||
NEW_PROP_TAG(ParameterMetaData);
|
||||
|
||||
///////////////////////////////////
|
||||
// Values for the properties
|
||||
///////////////////////////////////
|
||||
@ -138,8 +383,6 @@ SET_PROP(NumericModel, ParameterTree)
|
||||
//! use the global group as default for the model's parameter group
|
||||
SET_STRING_PROP(NumericModel, ModelParameterGroup, "");
|
||||
|
||||
//! Use the DgfVanguard by default
|
||||
SET_TYPE_PROP(NumericModel, Vanguard, Opm::DgfVanguard<TypeTag>);
|
||||
|
||||
//! Set a value for the GridFile property
|
||||
SET_STRING_PROP(NumericModel, GridFile, "");
|
||||
|
@ -32,7 +32,7 @@
|
||||
#ifndef EWOMS_PARAMETER_SYSTEM_HH
|
||||
#define EWOMS_PARAMETER_SYSTEM_HH
|
||||
|
||||
#include <opm/models/utils/propertysystem.hh>
|
||||
#include <opm/models/utils/basicproperties.hh>
|
||||
|
||||
#include <opm/material/common/Exceptions.hpp>
|
||||
#include <opm/material/common/Unused.hpp>
|
||||
@ -74,8 +74,8 @@
|
||||
* \endcode
|
||||
*/
|
||||
#define EWOMS_REGISTER_PARAM(TypeTag, ParamType, ParamName, Description) \
|
||||
::Opm::Parameters::registerParam<TypeTag, ParamType, PTAG(ParamName)>( \
|
||||
#ParamName, #ParamName, Description)
|
||||
::Opm::Parameters::registerParam<TypeTag, ParamType>( \
|
||||
#ParamName, #ParamName, GET_PROP_VALUE(TypeTag, ParamName), Description)
|
||||
|
||||
/*!
|
||||
* \ingroup Parameter
|
||||
@ -85,7 +85,7 @@
|
||||
* This allows to deal with unused parameters
|
||||
*/
|
||||
#define EWOMS_HIDE_PARAM(TypeTag, ParamName) \
|
||||
::Opm::Parameters::hideParam<TypeTag, PTAG(ParamName)>(#ParamName)
|
||||
::Opm::Parameters::hideParam<TypeTag, PTAG_(ParamName)>(#ParamName)
|
||||
|
||||
/*!
|
||||
* \ingroup Parameter
|
||||
@ -115,14 +115,14 @@
|
||||
* \endcode
|
||||
*/
|
||||
#define EWOMS_GET_PARAM(TypeTag, ParamType, ParamName) \
|
||||
(::Opm::Parameters::get<TypeTag, ParamType, PTAG(ParamName)>(#ParamName, \
|
||||
#ParamName))
|
||||
(::Opm::Parameters::get<TypeTag, ParamType>(#ParamName, \
|
||||
GET_PROP_VALUE(TypeTag, ParamName)))
|
||||
|
||||
//!\cond SKIP_THIS
|
||||
#define EWOMS_GET_PARAM_(TypeTag, ParamType, ParamName) \
|
||||
(::Opm::Parameters::get<TypeTag, ParamType, PTAG(ParamName)>( \
|
||||
#ParamName, #ParamName, \
|
||||
/*errorIfNotRegistered=*/false))
|
||||
(::Opm::Parameters::get<TypeTag, ParamType>(#ParamName, \
|
||||
GET_PROP_VALUE(TypeTag, ParamName), \
|
||||
/*errorIfNotRegistered=*/false))
|
||||
|
||||
/*!
|
||||
* \ingroup Parameter
|
||||
@ -148,7 +148,7 @@
|
||||
* If the parameter in question has not been registered, this throws an exception.
|
||||
*/
|
||||
#define EWOMS_PARAM_IS_SET(TypeTag, ParamType, ParamName) \
|
||||
(::Opm::Parameters::isSet<TypeTag, ParamType, PTAG(ParamName)>(#ParamName, \
|
||||
(::Opm::Parameters::isSet<TypeTag, ParamType, PTAG_(ParamName)>(#ParamName, \
|
||||
#ParamName))
|
||||
|
||||
namespace Opm {
|
||||
@ -180,6 +180,10 @@ template <class TypeTag, class ParamType, class PropTag>
|
||||
const ParamType get(const char *propTagName,
|
||||
const char *paramName,
|
||||
bool errorIfNotRegistered = true);
|
||||
template <class TypeTag, class ParamType>
|
||||
const ParamType get(const char *paramName,
|
||||
const ParamType& defaultValue,
|
||||
bool errorIfNotRegistered = true);
|
||||
|
||||
class ParamRegFinalizerBase_
|
||||
{
|
||||
@ -189,12 +193,13 @@ public:
|
||||
virtual void retrieve() = 0;
|
||||
};
|
||||
|
||||
template <class TypeTag, class ParamType, class PropTag>
|
||||
template <class TypeTag, class ParamType>
|
||||
class ParamRegFinalizer_ : public ParamRegFinalizerBase_
|
||||
{
|
||||
public:
|
||||
ParamRegFinalizer_(const std::string& paramName)
|
||||
ParamRegFinalizer_(const std::string& paramName, const ParamType& defaultValue)
|
||||
: paramName_(paramName)
|
||||
, defaultValue_(defaultValue)
|
||||
{}
|
||||
|
||||
virtual void retrieve() override
|
||||
@ -202,13 +207,14 @@ public:
|
||||
// retrieve the parameter once to make sure that its value does
|
||||
// not contain a syntax error.
|
||||
ParamType __attribute__((unused)) dummy =
|
||||
get<TypeTag, ParamType, PropTag>(/*propTagName=*/paramName_.data(),
|
||||
paramName_.data(),
|
||||
/*errorIfNotRegistered=*/true);
|
||||
get<TypeTag, ParamType>(paramName_.data(),
|
||||
defaultValue_,
|
||||
/*errorIfNotRegistered=*/true);
|
||||
}
|
||||
|
||||
private:
|
||||
std::string paramName_;
|
||||
ParamType defaultValue_;
|
||||
};
|
||||
} // namespace Parameters
|
||||
|
||||
@ -218,9 +224,8 @@ BEGIN_PROPERTIES
|
||||
|
||||
// type tag which is supposed to spliced in or inherited from if the
|
||||
// parameter system is to be used
|
||||
NEW_TYPE_TAG(ParameterSystem);
|
||||
//NEW_TYPE_TAG(ParameterSystem);
|
||||
|
||||
NEW_PROP_TAG(ParameterMetaData);
|
||||
|
||||
|
||||
//! Set the ParameterMetaData property
|
||||
@ -943,15 +948,21 @@ class Param
|
||||
|
||||
public:
|
||||
template <class ParamType, class PropTag>
|
||||
static const ParamType get(const char *propTagName,
|
||||
const char *paramName,
|
||||
bool errorIfNotRegistered = true)
|
||||
static ParamType get(const char *propTagName,
|
||||
const char *paramName,
|
||||
bool errorIfNotRegistered = true)
|
||||
{
|
||||
return retrieve_<ParamType, PropTag>(propTagName,
|
||||
paramName,
|
||||
errorIfNotRegistered);
|
||||
return retrieve_<ParamType>(paramName, getPropValue<TypeTag, PropTag>(), errorIfNotRegistered);
|
||||
}
|
||||
|
||||
|
||||
template <class ParamType>
|
||||
static ParamType get(const char *paramName,
|
||||
const ParamType& defaultValue,
|
||||
bool errorIfNotRegistered = true)
|
||||
{
|
||||
return retrieve_<ParamType>(paramName, defaultValue, errorIfNotRegistered);
|
||||
}
|
||||
|
||||
static void clear()
|
||||
{
|
||||
ParamsMeta::clear();
|
||||
@ -1035,10 +1046,10 @@ private:
|
||||
}
|
||||
}
|
||||
|
||||
template <class ParamType, class PropTag>
|
||||
static const ParamType retrieve_(const char OPM_OPTIM_UNUSED *propTagName,
|
||||
const char *paramName,
|
||||
bool errorIfNotRegistered = true)
|
||||
template <class ParamType>
|
||||
static ParamType retrieve_(const char *paramName,
|
||||
const ParamType& defaultValue,
|
||||
bool errorIfNotRegistered = true)
|
||||
{
|
||||
#ifndef NDEBUG
|
||||
// make sure that the parameter is used consistently. since
|
||||
@ -1066,8 +1077,7 @@ private:
|
||||
std::string canonicalName(paramName);
|
||||
|
||||
// retrieve actual parameter from the parameter tree
|
||||
const ParamType defaultValue = GET_PROP_VALUE_(TypeTag, PropTag);
|
||||
return ParamsMeta::tree().template get<ParamType>(canonicalName, defaultValue );
|
||||
return ParamsMeta::tree().template get<ParamType>(canonicalName, defaultValue);
|
||||
}
|
||||
};
|
||||
|
||||
@ -1079,6 +1089,12 @@ const ParamType get(const char *propTagName, const char *paramName, bool errorIf
|
||||
errorIfNotRegistered);
|
||||
}
|
||||
|
||||
template <class TypeTag, class ParamType>
|
||||
const ParamType get(const char *paramName, const ParamType& defaultValue, bool errorIfNotRegistered)
|
||||
{
|
||||
return Param<TypeTag>::template get<ParamType>(paramName, defaultValue, errorIfNotRegistered);
|
||||
}
|
||||
|
||||
template <class TypeTag, class Container>
|
||||
void getLists(Container& usedParams, Container& unusedParams)
|
||||
{
|
||||
@ -1121,8 +1137,8 @@ bool isSet(const char *propTagName, const char *paramName, bool errorIfNotRegist
|
||||
errorIfNotRegistered);
|
||||
}
|
||||
|
||||
template <class TypeTag, class ParamType, class PropTag>
|
||||
void registerParam(const char *paramName, const char *propertyName, const char *usageString)
|
||||
template <class TypeTag, class ParamType>
|
||||
void registerParam(const char *paramName, const char *propertyName, const ParamType& defaultValue, const char *usageString)
|
||||
{
|
||||
typedef typename GET_PROP(TypeTag, ParameterMetaData) ParamsMeta;
|
||||
if (!ParamsMeta::registrationOpen())
|
||||
@ -1130,7 +1146,7 @@ void registerParam(const char *paramName, const char *propertyName, const char *
|
||||
"the parameter '"+std::string(paramName)+"' was registered.");
|
||||
|
||||
ParamsMeta::registrationFinalizers().emplace_back(
|
||||
new ParamRegFinalizer_<TypeTag, ParamType, PropTag>(paramName));
|
||||
new ParamRegFinalizer_<TypeTag, ParamType>(paramName, defaultValue));
|
||||
|
||||
ParamInfo paramInfo;
|
||||
paramInfo.paramName = paramName;
|
||||
@ -1140,7 +1156,7 @@ void registerParam(const char *paramName, const char *propertyName, const char *
|
||||
paramInfo.propertyName = propertyName;
|
||||
paramInfo.usageString = usageString;
|
||||
std::ostringstream oss;
|
||||
oss << GET_PROP_VALUE_(TypeTag, PropTag);
|
||||
oss << defaultValue;
|
||||
paramInfo.compileTimeValue = oss.str();
|
||||
paramInfo.isHidden = false;
|
||||
if (ParamsMeta::registry().find(paramName) != ParamsMeta::registry().end()) {
|
||||
@ -1160,7 +1176,7 @@ void hideParam(const char *paramName)
|
||||
{
|
||||
// make sure that a property with the parameter name exists. we cannot check if a
|
||||
// parameter exists at compile time, so this will only be caught at runtime
|
||||
static const auto defaultValue OPM_UNUSED = GET_PROP_VALUE_(TypeTag, PropTag);
|
||||
static const auto defaultValue OPM_UNUSED = getPropValue<TypeTag, PropTag>;
|
||||
|
||||
typedef typename GET_PROP(TypeTag, ParameterMetaData) ParamsMeta;
|
||||
if (!ParamsMeta::registrationOpen())
|
||||
|
File diff suppressed because it is too large
Load Diff
392
opm/models/utils/propertysystemmacros.hh
Normal file
392
opm/models/utils/propertysystemmacros.hh
Normal file
@ -0,0 +1,392 @@
|
||||
// -*- mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
|
||||
// vi: set et ts=4 sw=4 sts=4:
|
||||
/*****************************************************************************
|
||||
* See the file COPYING for full copying permissions. *
|
||||
* *
|
||||
* This program 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. *
|
||||
* *
|
||||
* This program is distributed in the hope that it will be useful, *
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* MERCHANTBILITY 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 this program. If not, see <http://www.gnu.org/licenses/>. *
|
||||
*****************************************************************************/
|
||||
/*!
|
||||
* \file
|
||||
* \ingroup Properties
|
||||
* \brief Provides the magic behind the DuMuX property system.
|
||||
*
|
||||
* Properties allow to associate arbitrary data types to
|
||||
* identifiers. A property is always defined on a pair (TypeTag,
|
||||
* PropertyTag) where TypeTag is the identifier for the object the
|
||||
* property is defined for and PropertyTag is an unique identifier of
|
||||
* the property.
|
||||
*
|
||||
* Type tags are hierarchic and inherit properties defined on their
|
||||
* ancesters. At each level, properties defined on lower levels can be
|
||||
* overwritten or even made undefined. It is also possible to define
|
||||
* defaults for properties if it makes sense.
|
||||
*
|
||||
* Properties may make use other properties for the respective type
|
||||
* tag and these properties can also be defined on an arbitrary level
|
||||
* of the hierarchy.
|
||||
*/
|
||||
#ifndef OPM_PROPERTY_SYSTEM_MACROS_HH
|
||||
#define OPM_PROPERTY_SYSTEM_MACROS_HH
|
||||
#warning "Property macros are deprecated and will be removed after release 3.2. \
|
||||
If you are not using property macros you can disable this warning by \
|
||||
setting OPM_ENABLE_OLD_PROPERTY_MACROS to 0 (false) when configuring DuMux. \
|
||||
OPM_ENABLE_OLD_PROPERTY_MACROS defaults to 1 (true) until release 3.1. \
|
||||
After release 3.1 it will default to 0 (false) so you will have to manually \
|
||||
enable property macros in order to use them."
|
||||
|
||||
#include <opm/models/utils/propertysystem.hh>
|
||||
|
||||
namespace Opm {
|
||||
namespace Properties {
|
||||
|
||||
namespace TTag {}
|
||||
|
||||
/*!
|
||||
* \brief Makes a type out of a type tag name
|
||||
*/
|
||||
#define TTAG(TypeTagName) ::Opm::Properties::TTag::TypeTagName
|
||||
|
||||
/*!
|
||||
* \brief Makes a type out of a property tag name
|
||||
*/
|
||||
//#define PTAG(PropTagName) PropTagName
|
||||
|
||||
/*!
|
||||
* \brief Makes a type out of a property tag name
|
||||
*/
|
||||
#define PTAG_(PropTagName) ::Opm::Properties::PropTagName
|
||||
|
||||
|
||||
// in the old property system the order in inherit_from was the other way around
|
||||
// this flips the order of a tuple to restore old behaviour when using the macro.
|
||||
// when you are using non-macro version make sure to flip the order.
|
||||
template<class Tuple, class IndexSequence>
|
||||
struct ReverseTupleImpl;
|
||||
|
||||
template<class Tuple, size_t... I>
|
||||
struct ReverseTupleImpl<Tuple, std::index_sequence<I...>>
|
||||
{
|
||||
using type = std::tuple<std::tuple_element_t<sizeof...(I) - 1 - I, Tuple>...>;
|
||||
};
|
||||
|
||||
// revert tuple argument order
|
||||
template<class Tuple>
|
||||
using ReverseTuple = typename ReverseTupleImpl<Tuple, std::make_index_sequence<std::tuple_size<Tuple>::value>>::type;
|
||||
|
||||
// a temporary hack to make the macro still work, we set using InheritsFrom = void,
|
||||
// which gets picked up by the new property as non inheritance, this can be removed
|
||||
// once all macros are gone
|
||||
namespace Detail {
|
||||
template<class TypeTagTuple>
|
||||
struct GetTypeTagInheritance;
|
||||
|
||||
template<class OneTypeTag>
|
||||
struct GetTypeTagInheritance<std::tuple<OneTypeTag>>
|
||||
{
|
||||
using type = void;
|
||||
};
|
||||
|
||||
template<class FirstTypeTag, class ...OtherTypeTags>
|
||||
struct GetTypeTagInheritance<std::tuple<FirstTypeTag, OtherTypeTags...>>
|
||||
{
|
||||
// reverse order to restore old behaviour
|
||||
using type = ReverseTuple<std::tuple<OtherTypeTags...>>;
|
||||
};
|
||||
} // end namespace Detail
|
||||
|
||||
/*!
|
||||
* \ingroup Properties
|
||||
* \brief Define a new type tag.
|
||||
*
|
||||
* A type tag can inherit the properties defined on up to five parent
|
||||
* type tags. Examples:
|
||||
*
|
||||
* \code
|
||||
* // The type tag doesn't inherit any properties from other type tags
|
||||
* NEW_TYPE_TAG(FooTypeTag);
|
||||
*
|
||||
* // BarTypeTag inherits all properties from FooTypeTag
|
||||
* NEW_TYPE_TAG(BarTypeTag, INHERITS_FROM(FooTypeTag));
|
||||
*
|
||||
* // FooBarTypeTag inherits the properties of FooTypeTag as well as
|
||||
* // those of BarTypeTag. Properties defined on BarTypeTag have
|
||||
* // preceedence over those defined for FooTypeTag:
|
||||
* NEW_TYPE_TAG(FooBarTypeTag, INHERITS_FROM(FooTypeTag, BarTypeTag));
|
||||
* \endcode
|
||||
*/
|
||||
#define OPM_GET_HEAD_(Arg1, ...) Arg1
|
||||
|
||||
#define NEW_TYPE_TAG(...) \
|
||||
namespace TTag { \
|
||||
struct OPM_GET_HEAD_(__VA_ARGS__) \
|
||||
{ using InheritsFrom = Detail::GetTypeTagInheritance<std::tuple<__VA_ARGS__>>::type; }; \
|
||||
} extern int semicolonHack_
|
||||
|
||||
/*!
|
||||
* \ingroup Properties
|
||||
* \brief Syntactic sugar for NEW_TYPE_TAG.
|
||||
*
|
||||
* See the documentation for NEW_TYPE_TAG.
|
||||
*/
|
||||
#define INHERITS_FROM(...) __VA_ARGS__
|
||||
|
||||
/*!
|
||||
* \ingroup Properties
|
||||
* \brief Define a property tag.
|
||||
*
|
||||
* A property tag is the unique identifier for a property. It may only
|
||||
* be declared once in your program. There is also no hierarchy of
|
||||
* property tags as for type tags.
|
||||
*
|
||||
* Examples:
|
||||
*
|
||||
* \code
|
||||
* NEW_PROP_TAG(blubbPropTag);
|
||||
* NEW_PROP_TAG(blabbPropTag);
|
||||
* \endcode
|
||||
*/
|
||||
#define NEW_PROP_TAG(PTagName) \
|
||||
template<class TypeTag, class MyTypeTag> \
|
||||
struct PTagName { using type = UndefinedProperty; }; \
|
||||
extern int semicolonHack_
|
||||
|
||||
/*!
|
||||
* \ingroup Properties
|
||||
* \brief Set a property for a specific type tag.
|
||||
*
|
||||
* After this macro, you must to specify a complete body of a class
|
||||
* template, including the trailing semicolon. If you need to retrieve
|
||||
* another property within the class body, you can use TypeTag as the
|
||||
* argument for the type tag for the GET_PROP macro.
|
||||
*
|
||||
* Example:
|
||||
*
|
||||
* \code
|
||||
* SET_PROP(FooTypeTag, blubbPropTag)
|
||||
* {
|
||||
* static int value = 10;
|
||||
* static int calculate(int arg)
|
||||
* { calculateInternal_(arg); }
|
||||
*
|
||||
* private:
|
||||
* // retrieve the blabbProp property for the real TypeTag the
|
||||
* // property is defined on. Note that blabbProb does not need to
|
||||
* // be defined on FooTypeTag, but can also be defined for some
|
||||
* // derived type tag.
|
||||
* using blabb = typename GET_PROP(TypeTag, blabbProp);
|
||||
*
|
||||
* static int calculateInternal_(int arg)
|
||||
* { return arg * blabb::value; };
|
||||
* \endcode
|
||||
* };
|
||||
*/
|
||||
#define SET_PROP(EffTypeTagName, PropTagName) \
|
||||
template <class TypeTag> \
|
||||
struct PropTagName<TypeTag, TTAG(EffTypeTagName)>
|
||||
|
||||
/*!
|
||||
* \ingroup Properties
|
||||
* \brief Set a property to a simple constant integer value.
|
||||
*
|
||||
* The constant can be accessed by the 'value' attribute.
|
||||
*/
|
||||
#define SET_INT_PROP(EffTypeTagName, PropTagName, /*Value*/...) \
|
||||
template <class TypeTag> \
|
||||
struct PropTagName<TypeTag, TTAG(EffTypeTagName)> \
|
||||
{ \
|
||||
using type = int; \
|
||||
static constexpr int value = __VA_ARGS__; \
|
||||
}
|
||||
|
||||
/*!
|
||||
* \ingroup Properties
|
||||
* \brief Set a property to a simple constant boolean value.
|
||||
*
|
||||
* The constant can be accessed by the 'value' attribute.
|
||||
*/
|
||||
#define SET_BOOL_PROP(EffTypeTagName, PropTagName, /*Value*/...) \
|
||||
template <class TypeTag> \
|
||||
struct PropTagName<TypeTag, TTAG(EffTypeTagName)> \
|
||||
{ \
|
||||
using type = bool; \
|
||||
static constexpr bool value = __VA_ARGS__; \
|
||||
}
|
||||
|
||||
/*!
|
||||
* \ingroup Properties
|
||||
* \brief Set a property which defines a type.
|
||||
*
|
||||
* The type can be accessed by the 'type' attribute.
|
||||
*/
|
||||
#define SET_TYPE_PROP(EffTypeTagName, PropTagName, /*Value*/...) \
|
||||
template <class TypeTag> \
|
||||
struct PropTagName<TypeTag, TTAG(EffTypeTagName)> \
|
||||
{ \
|
||||
using type = __VA_ARGS__; \
|
||||
}
|
||||
|
||||
/*!
|
||||
* \ingroup Properties
|
||||
* \brief Set a property to a simple constant scalar value.
|
||||
*
|
||||
* The constant can be accessed by the 'value' attribute. In order to
|
||||
* use this macro, the property tag "Scalar" needs to be defined for
|
||||
* the real type tag.
|
||||
*/
|
||||
#define SET_SCALAR_PROP(EffTypeTagName, PropTagName, ...) \
|
||||
template <class TypeTag> \
|
||||
struct PropTagName<TypeTag, TTAG(EffTypeTagName)> \
|
||||
{ \
|
||||
using Scalar = Opm::GetPropType<TypeTag, Scalar>; \
|
||||
public: \
|
||||
using type = Scalar; \
|
||||
static const Scalar value; \
|
||||
}; \
|
||||
template <class TypeTag> \
|
||||
const typename PropTagName<TypeTag, TTAG(EffTypeTagName)>::type \
|
||||
PropTagName<TypeTag, TTAG(EffTypeTagName)>::value(__VA_ARGS__)
|
||||
|
||||
/*!
|
||||
* \ingroup Properties
|
||||
* \brief Set a property to a simple constant string value.
|
||||
*
|
||||
* The constant can be accessed by the 'value' attribute and is of
|
||||
* type std::string.
|
||||
*/
|
||||
#define SET_STRING_PROP(EffTypeTagName, PropTagName, ...) \
|
||||
template <class TypeTag> \
|
||||
struct PropTagName<TypeTag, TTAG(EffTypeTagName)> \
|
||||
{ \
|
||||
public: \
|
||||
using type = std::string; \
|
||||
static const std::string value; \
|
||||
}; \
|
||||
template <class TypeTag> \
|
||||
const typename PropTagName<TypeTag, TTAG(EffTypeTagName)>::type \
|
||||
PropTagName<TypeTag, TTAG(EffTypeTagName)>::value(__VA_ARGS__)
|
||||
|
||||
|
||||
// getters
|
||||
#define GET_PROP(TypeTag, PropTagName) ::Opm::Properties::Detail::GetPropImpl<TypeTag, PTAG_(PropTagName)>::type
|
||||
#define GET_PROP_VALUE(TypeTag, PropTagName) ::Opm::Properties::Detail::GetPropImpl<TypeTag, PTAG_(PropTagName)>::type::value
|
||||
#define GET_PROP_TYPE(TypeTag, PropTagName) ::Opm::Properties::Detail::GetPropImpl<TypeTag, PTAG_(PropTagName)>::type::type
|
||||
|
||||
/*!
|
||||
* \ingroup Properties
|
||||
* \brief Define splices for a given type tag.
|
||||
*
|
||||
* Splices can be seen as children which can be overridden lower in
|
||||
* the hierarchy. It can thus be seen as a "deferred inheritance"
|
||||
* mechanism. Example:
|
||||
*
|
||||
* \code
|
||||
* // First, define type tags for two different linear solvers:
|
||||
* // BiCGStab and SuperLU. The first needs the "MaxIterations"
|
||||
* // property, the second defines the "UsePivoting" property.
|
||||
* NEW_TYPE_TAG(BiCGStabSolver);
|
||||
* NEW_PROP_TAG(MaxIterations);
|
||||
* SET_INT_PROP(BiCGStabSolver, MaxIterations, 100);
|
||||
*
|
||||
* NEW_TYPE_TAG(SuperLUSolver);
|
||||
* NEW_PROP_TAG(UsePivoting);
|
||||
* SET_BOOL_PROP(SuperLUSolver, UsePivoting, true);
|
||||
*
|
||||
* // The model type tag defines the splice 'LinearSolver' and sets it
|
||||
* // to the 'BiCGStabSolver' type tag.
|
||||
* NEW_TYPE_TAG(ModelTypeTag);
|
||||
* NEW_PROP_TAG(LinearSolver);
|
||||
* SET_SPLICES(ModelTypeTag, LinearSolver);
|
||||
* SET_TAG_PROP(ModelTypeTag, LinearSolver, BiCGStabSolver);
|
||||
*
|
||||
* // The problem type tag is derived from the model type tag, but uses
|
||||
* // the SuperLU solver. Since this is done using a splice, all properties
|
||||
* // defined for the "SuperLUSolver" are inherited and the ones for the
|
||||
* // BiCGStabSolver type tag are undefined
|
||||
* NEW_TYPE_TAG(ProblemTypeTag, INHERITS_FROM(ModelTypeTag));
|
||||
* SET_TAG_PROP(ProblemTypeTag, LinearSolver, SuperLUSolver);
|
||||
* \endcode
|
||||
*/
|
||||
|
||||
// template class to revert the order or a std::tuple's arguments. This is required to
|
||||
// make the properties of children defined on the right overwrite the properties of the
|
||||
// children on the left. See https://sydius.me/2011/07/reverse-tuple-in-c/
|
||||
template<typename... Args>
|
||||
class RevertedTuple
|
||||
{
|
||||
private:
|
||||
template<unsigned int N, typename... All>
|
||||
struct RevertedTupleOuter
|
||||
{
|
||||
template<typename Head, typename... Tail>
|
||||
struct RevertedTupleInner: RevertedTupleOuter<N-1, Head, All...>::template RevertedTupleInner<Tail...> { };
|
||||
};
|
||||
|
||||
template<typename... All>
|
||||
struct RevertedTupleOuter<0, All...>
|
||||
{
|
||||
template<typename... Tail>
|
||||
struct RevertedTupleInner {
|
||||
typedef std::tuple<All...> type;
|
||||
};
|
||||
};
|
||||
|
||||
public:
|
||||
typedef typename RevertedTupleOuter<sizeof...(Args)>::template RevertedTupleInner<Args...>::type type;
|
||||
};
|
||||
|
||||
namespace PTag {
|
||||
// this class needs to be located in the PTag namespace for reasons
|
||||
// you don't really want to know...
|
||||
template <class TypeTag>
|
||||
struct Splices
|
||||
{
|
||||
typedef typename std::tuple<> tuple;
|
||||
};
|
||||
} // namespace PTag
|
||||
|
||||
#define SET_SPLICES(TypeTagName, ...) \
|
||||
namespace PTag { \
|
||||
template<> \
|
||||
struct Splices<TTAG(TypeTagName)> \
|
||||
{ \
|
||||
typedef RevertedTuple<__VA_ARGS__>::type tuple; \
|
||||
}; \
|
||||
SPLICE_INFO_(TypeTagName, __VA_ARGS__) \
|
||||
} \
|
||||
extern int semicolonHack_
|
||||
|
||||
#define SET_PROP_(EffTypeTagName, PropKind, PropTagName, ...) \
|
||||
template <class TypeTag> \
|
||||
struct PropTagName<TypeTag, TTAG(EffTypeTagName)>
|
||||
|
||||
|
||||
/*!
|
||||
* \ingroup Properties
|
||||
* \brief Define a property containing a type tag.
|
||||
*
|
||||
* This is convenient for splices.
|
||||
*/
|
||||
#define SET_TAG_PROP(EffTypeTagName, PropTagName, ValueTypeTagName) \
|
||||
SET_PROP_(EffTypeTagName, \
|
||||
/*kind=*/"tag ", \
|
||||
PropTagName, \
|
||||
/*value=*/TTAG(ValueTypeTagName)) \
|
||||
{ \
|
||||
typedef TTAG(ValueTypeTagName) type; \
|
||||
}
|
||||
|
||||
} // namespace Properties
|
||||
} // namespace Opm
|
||||
|
||||
#endif // OPM_PROPERTY_SYSTEM_HH
|
@ -48,15 +48,6 @@
|
||||
|
||||
BEGIN_PROPERTIES
|
||||
|
||||
NEW_PROP_TAG(Scalar);
|
||||
NEW_PROP_TAG(Vanguard);
|
||||
NEW_PROP_TAG(GridView);
|
||||
NEW_PROP_TAG(Model);
|
||||
NEW_PROP_TAG(Problem);
|
||||
NEW_PROP_TAG(EndTime);
|
||||
NEW_PROP_TAG(RestartTime);
|
||||
NEW_PROP_TAG(InitialTimeStepSize);
|
||||
NEW_PROP_TAG(PredeterminedTimeStepsFile);
|
||||
|
||||
END_PROPERTIES
|
||||
|
||||
@ -984,6 +975,11 @@ private:
|
||||
bool finished_;
|
||||
bool verbose_;
|
||||
};
|
||||
|
||||
namespace Properties {
|
||||
SET_TYPE_PROP(NumericModel, Simulator, Opm::Simulator<TypeTag>);
|
||||
}
|
||||
|
||||
} // namespace Opm
|
||||
|
||||
#endif
|
||||
|
@ -71,13 +71,6 @@
|
||||
BEGIN_PROPERTIES
|
||||
|
||||
// forward declaration of property tags
|
||||
NEW_PROP_TAG(Scalar);
|
||||
NEW_PROP_TAG(Simulator);
|
||||
NEW_PROP_TAG(ThreadManager);
|
||||
NEW_PROP_TAG(PrintProperties);
|
||||
NEW_PROP_TAG(PrintParameters);
|
||||
NEW_PROP_TAG(ParameterFile);
|
||||
NEW_PROP_TAG(Problem);
|
||||
|
||||
END_PROPERTIES
|
||||
|
||||
|
@ -51,12 +51,6 @@
|
||||
#include <dune/common/version.hh>
|
||||
|
||||
BEGIN_PROPERTIES
|
||||
NEW_PROP_TAG(Scalar);
|
||||
NEW_PROP_TAG(SparseMatrixAdapter);
|
||||
NEW_PROP_TAG(OverlappingMatrix);
|
||||
NEW_PROP_TAG(OverlappingVector);
|
||||
NEW_PROP_TAG(PreconditionerOrder);
|
||||
NEW_PROP_TAG(PreconditionerRelaxation);
|
||||
END_PROPERTIES
|
||||
|
||||
namespace Opm {
|
||||
|
@ -50,14 +50,6 @@
|
||||
|
||||
BEGIN_PROPERTIES
|
||||
|
||||
NEW_PROP_TAG(Scalar);
|
||||
NEW_PROP_TAG(SparseMatrixAdapter);
|
||||
NEW_PROP_TAG(OverlappingMatrix);
|
||||
NEW_PROP_TAG(OverlappingVector);
|
||||
NEW_PROP_TAG(GMResRestart);
|
||||
NEW_PROP_TAG(LinearSolverTolerance);
|
||||
NEW_PROP_TAG(LinearSolverMaxIterations);
|
||||
NEW_PROP_TAG(LinearSolverVerbosity);
|
||||
|
||||
END_PROPERTIES
|
||||
|
||||
|
@ -51,8 +51,6 @@ BEGIN_PROPERTIES
|
||||
|
||||
NEW_TYPE_TAG(ParallelAmgLinearSolver, INHERITS_FROM(ParallelBaseLinearSolver));
|
||||
|
||||
NEW_PROP_TAG(AmgCoarsenTarget);
|
||||
NEW_PROP_TAG(LinearSolverMaxError);
|
||||
|
||||
//! The target number of DOFs per processor for the parallel algebraic
|
||||
//! multi-grid solver
|
||||
|
@ -54,30 +54,14 @@ BEGIN_PROPERTIES
|
||||
NEW_TYPE_TAG(ParallelBaseLinearSolver);
|
||||
|
||||
// forward declaration of the required property tags
|
||||
NEW_PROP_TAG(Simulator);
|
||||
NEW_PROP_TAG(Scalar);
|
||||
NEW_PROP_TAG(NumEq);
|
||||
NEW_PROP_TAG(SparseMatrixAdapter);
|
||||
NEW_PROP_TAG(GlobalEqVector);
|
||||
NEW_PROP_TAG(VertexMapper);
|
||||
NEW_PROP_TAG(GridView);
|
||||
|
||||
NEW_PROP_TAG(BorderListCreator);
|
||||
NEW_PROP_TAG(Overlap);
|
||||
NEW_PROP_TAG(OverlappingVector);
|
||||
NEW_PROP_TAG(OverlappingMatrix);
|
||||
NEW_PROP_TAG(OverlappingScalarProduct);
|
||||
NEW_PROP_TAG(OverlappingLinearOperator);
|
||||
|
||||
//! The type of the linear solver to be used
|
||||
NEW_PROP_TAG(LinearSolverBackend);
|
||||
|
||||
//! the preconditioner used by the linear solver
|
||||
NEW_PROP_TAG(PreconditionerWrapper);
|
||||
|
||||
|
||||
//! The floating point type used internally by the linear solver
|
||||
NEW_PROP_TAG(LinearSolverScalar);
|
||||
|
||||
/*!
|
||||
* \brief The size of the algebraic overlap of the linear solver.
|
||||
@ -86,17 +70,14 @@ NEW_PROP_TAG(LinearSolverScalar);
|
||||
* of a grid, but it is only existant for the linear system of
|
||||
* equations.
|
||||
*/
|
||||
NEW_PROP_TAG(LinearSolverOverlapSize);
|
||||
|
||||
/*!
|
||||
* \brief Maximum accepted error of the solution of the linear solver.
|
||||
*/
|
||||
NEW_PROP_TAG(LinearSolverTolerance);
|
||||
|
||||
/*!
|
||||
* \brief Maximum accepted error of the norm of the residual.
|
||||
*/
|
||||
NEW_PROP_TAG(LinearSolverAbsTolerance);
|
||||
|
||||
/*!
|
||||
* \brief Specifies the verbosity of the linear solver
|
||||
@ -105,16 +86,12 @@ NEW_PROP_TAG(LinearSolverAbsTolerance);
|
||||
* property to 1 prints aggregated convergence rates, 2 prints the
|
||||
* convergence rate of every iteration of the scheme.
|
||||
*/
|
||||
NEW_PROP_TAG(LinearSolverVerbosity);
|
||||
|
||||
//! Maximum number of iterations eyecuted by the linear solver
|
||||
NEW_PROP_TAG(LinearSolverMaxIterations);
|
||||
|
||||
//! The order of the sequential preconditioner
|
||||
NEW_PROP_TAG(PreconditionerOrder);
|
||||
|
||||
//! The relaxation factor of the preconditioner
|
||||
NEW_PROP_TAG(PreconditionerRelaxation);
|
||||
|
||||
//! Set the type of a global jacobian matrix for linear solvers that are based on
|
||||
//! dune-istl.
|
||||
|
@ -44,7 +44,6 @@ BEGIN_PROPERTIES
|
||||
|
||||
NEW_TYPE_TAG(ParallelBiCGStabLinearSolver, INHERITS_FROM(ParallelBaseLinearSolver));
|
||||
|
||||
NEW_PROP_TAG(LinearSolverMaxError);
|
||||
|
||||
SET_TYPE_PROP(ParallelBiCGStabLinearSolver,
|
||||
LinearSolverBackend,
|
||||
|
@ -37,11 +37,8 @@ BEGIN_PROPERTIES
|
||||
|
||||
NEW_TYPE_TAG(ParallelIstlLinearSolver, INHERITS_FROM(ParallelBaseLinearSolver));
|
||||
|
||||
NEW_PROP_TAG(LinearSolverWrapper);
|
||||
NEW_PROP_TAG(SparseMatrixAdapter);
|
||||
|
||||
//! number of iterations between solver restarts for the GMRES solver
|
||||
NEW_PROP_TAG(GMResRestart);
|
||||
|
||||
END_PROPERTIES
|
||||
|
||||
|
@ -41,13 +41,6 @@
|
||||
BEGIN_PROPERTIES
|
||||
|
||||
// forward declaration of the required property tags
|
||||
NEW_PROP_TAG(Scalar);
|
||||
NEW_PROP_TAG(NumEq);
|
||||
NEW_PROP_TAG(Simulator);
|
||||
NEW_PROP_TAG(SparseMatrixAdapter);
|
||||
NEW_PROP_TAG(GlobalEqVector);
|
||||
NEW_PROP_TAG(LinearSolverVerbosity);
|
||||
NEW_PROP_TAG(LinearSolverBackend);
|
||||
NEW_TYPE_TAG(SuperLULinearSolver);
|
||||
|
||||
END_PROPERTIES
|
||||
|
Loading…
Reference in New Issue
Block a user