diff --git a/exercises/exercise-basic/injection2p2cproblem.hh b/exercises/exercise-basic/injection2p2cproblem.hh index 790098527f172f945830c38383869b308cff43a1..f564bffe04205ab4d8a137a1fd7a255c22bf9886 100644 --- a/exercises/exercise-basic/injection2p2cproblem.hh +++ b/exercises/exercise-basic/injection2p2cproblem.hh @@ -43,7 +43,7 @@ namespace Properties { // Create new type tags namespace TTag { struct Injection2p2c { using InheritsFrom = std::tuple<TwoPTwoC>; }; -struct Injection2p2cCC { using InheritsFrom = std::tuple<CCTpfaModel, Injection2p2c>; }; +struct Injection2p2cCC { using InheritsFrom = std::tuple<Injection2p2c, CCTpfaModel>; }; } // end namespace TTag // Set the grid type @@ -55,9 +55,15 @@ template<class TypeTag> struct Problem<TypeTag, TTag::Injection2p2c> { using type = Injection2p2cProblem<TypeTag>; }; // Set the spatial parameters -SET_TYPE_PROP(Injection2p2c, SpatialParams, - InjectionSpatialParams<GetPropType<TypeTag, Properties::FVGridGeometry>, - GetPropType<TypeTag, Properties::Scalar>>); +template<class TypeTag> +struct SpatialParams<TypeTag, TTag::Injection2p2c> +{ +private: + using FVGridGeometry = GetPropType<TypeTag, Properties::FVGridGeometry>; + using Scalar = GetPropType<TypeTag, Properties::Scalar>; +public: + using type = InjectionSpatialParams<FVGridGeometry, Scalar>; +}; // Set fluid configuration template<class TypeTag> diff --git a/exercises/exercise-basic/injection2pniproblem.hh b/exercises/exercise-basic/injection2pniproblem.hh index 8f0bd5d4ca245806d189621b91c59acef63af23f..7642c96a53db03c2eb80ba88f526f50fed8890ed 100644 --- a/exercises/exercise-basic/injection2pniproblem.hh +++ b/exercises/exercise-basic/injection2pniproblem.hh @@ -61,13 +61,23 @@ template<class TypeTag> struct Problem<TypeTag, TTag::Injection2pNITypeTag> { using type = InjectionProblem2PNI<TypeTag>; }; // Set the spatial parameters -SET_TYPE_PROP(Injection2pNITypeTag, SpatialParams, - InjectionSpatialParams<GetPropType<TypeTag, Properties::FVGridGeometry>, - GetPropType<TypeTag, Properties::Scalar>>); +template<class TypeTag> +struct SpatialParams<TypeTag, TTag::Injection2pNITypeTag> +{ +private: + using FVGridGeometry = GetPropType<TypeTag, Properties::FVGridGeometry>; + using Scalar = GetPropType<TypeTag, Properties::Scalar>; +public: + using type = InjectionSpatialParams<FVGridGeometry, Scalar>; +}; // Set fluid configuration template<class TypeTag> -struct FluidSystem<TypeTag, TTag::Injection2pNITypeTag> { using type = FluidSystems::H2ON2<GetPropType<TypeTag, Properties::Scalar>, FluidSystems::H2ON2DefaultPolicy</*fastButSimplifiedRelations=*/ true>>; }; +struct FluidSystem<TypeTag, TTag::Injection2pNITypeTag> +{ + using type = FluidSystems::H2ON2<GetPropType<TypeTag, Properties::Scalar>, + FluidSystems::H2ON2DefaultPolicy</*fastButSimplifiedRelations=*/true>>; +}; } // end namespace Properties /*! diff --git a/exercises/exercise-basic/injection2pproblem.hh b/exercises/exercise-basic/injection2pproblem.hh index 49257b1232682541981047ee238bb3a7a2a39cce..a4f762b51cb01f347ca5cb2dd2815dcbcc2cae78 100644 --- a/exercises/exercise-basic/injection2pproblem.hh +++ b/exercises/exercise-basic/injection2pproblem.hh @@ -57,9 +57,15 @@ template<class TypeTag> struct Problem<TypeTag, TTag::Injection2p> { using type = InjectionProblem2P<TypeTag>; }; // Set the spatial parameters -SET_TYPE_PROP(Injection2p, SpatialParams, - InjectionSpatialParams<GetPropType<TypeTag, Properties::FVGridGeometry>, - GetPropType<TypeTag, Properties::Scalar>>); +template<class TypeTag> +struct SpatialParams<TypeTag, TTag::Injection2p> +{ +private: + using FVGridGeometry = GetPropType<TypeTag, Properties::FVGridGeometry>; + using Scalar = GetPropType<TypeTag, Properties::Scalar>; +public: + using type = InjectionSpatialParams<FVGridGeometry, Scalar>; +}; // Set fluid configuration template<class TypeTag> diff --git a/exercises/exercise-coupling-ff-pm/models/ex_models_pmproblem.hh b/exercises/exercise-coupling-ff-pm/models/ex_models_pmproblem.hh index 31fdc8a3383e7c52a5271291133b10d179751568..f25401bf6cb2125000950d50a1795e6e931468c4 100644 --- a/exercises/exercise-coupling-ff-pm/models/ex_models_pmproblem.hh +++ b/exercises/exercise-coupling-ff-pm/models/ex_models_pmproblem.hh @@ -70,9 +70,9 @@ template<class TypeTag> struct ReplaceCompEqIdx<TypeTag, TTag::DarcyOnePNC> { static constexpr int value = 3; }; //! Use a model with constant tortuosity for the effective diffusivity -SET_TYPE_PROP(DarcyOnePNC, EffectiveDiffusivityModel, - DiffusivityConstantTortuosity<GetPropType<TypeTag, Properties::Scalar>>); - +template<class TypeTag> +struct EffectiveDiffusivityModel<TypeTag, TTag::DarcyOnePNC> +{ using type = DiffusivityConstantTortuosity<GetPropType<TypeTag, Properties::Scalar>>; }; // Set the grid type template<class TypeTag> struct Grid<TypeTag, TTag::DarcyOnePNC> { using type = Dune::YaspGrid<2>; }; diff --git a/exercises/exercise-fluidsystem/2p2cproblem.hh b/exercises/exercise-fluidsystem/2p2cproblem.hh index d89d54e12dcab874d79bb8344ba45d9e7f093cb0..0c3082ca1650f529e3a8f3c796f7325208f36bd8 100644 --- a/exercises/exercise-fluidsystem/2p2cproblem.hh +++ b/exercises/exercise-fluidsystem/2p2cproblem.hh @@ -50,7 +50,7 @@ namespace Properties { // Create a new type tag for the problem // Create new type tags namespace TTag { -struct ExerciseFluidsystemTwoPTwoC { using InheritsFrom = std::tuple<BoxModel, TwoPTwoC>; }; +struct ExerciseFluidsystemTwoPTwoC { using InheritsFrom = std::tuple<TwoPTwoC, BoxModel>; }; } // end namespace TTag // Set the "Problem" property @@ -58,9 +58,15 @@ template<class TypeTag> struct Problem<TypeTag, TTag::ExerciseFluidsystemTwoPTwoC> { using type = ExerciseFluidsystemProblemTwoPTwoC<TypeTag>; }; // Set the spatial parameters -SET_TYPE_PROP(ExerciseFluidsystemTwoPTwoC, SpatialParams, - ExerciseFluidsystemSpatialParams<GetPropType<TypeTag, Properties::FVGridGeometry>, - GetPropType<TypeTag, Properties::Scalar>>); +template<class TypeTag> +struct SpatialParams<TypeTag, TTag::ExerciseFluidsystemTwoPTwoC> +{ +private: + using FVGridGeometry = GetPropType<TypeTag, Properties::FVGridGeometry>; + using Scalar = GetPropType<TypeTag, Properties::Scalar>; +public: + using type = ExerciseFluidsystemSpatialParams<FVGridGeometry, Scalar>; +}; // Set grid and the grid creator to be used template<class TypeTag> diff --git a/exercises/exercise-fluidsystem/2pproblem.hh b/exercises/exercise-fluidsystem/2pproblem.hh index f0f257204a8f7d7527eb79e3ad23b79a5df0b654..1acfb0ff916b27b4089c92608c6676ebfed3d56a 100644 --- a/exercises/exercise-fluidsystem/2pproblem.hh +++ b/exercises/exercise-fluidsystem/2pproblem.hh @@ -64,7 +64,7 @@ namespace Properties { // Create a new type tag for the problem // Create new type tags namespace TTag { -struct ExerciseFluidsystemTwoP { using InheritsFrom = std::tuple<BoxModel, TwoP>; }; +struct ExerciseFluidsystemTwoP { using InheritsFrom = std::tuple<TwoP, BoxModel>; }; } // end namespace TTag // Set the "Problem" property @@ -72,9 +72,15 @@ template<class TypeTag> struct Problem<TypeTag, TTag::ExerciseFluidsystemTwoP> { using type = ExerciseFluidsystemProblemTwoP<TypeTag>; }; // Set the spatial parameters -SET_TYPE_PROP(ExerciseFluidsystemTwoP, SpatialParams, - ExerciseFluidsystemSpatialParams<GetPropType<TypeTag, Properties::FVGridGeometry>, - GetPropType<TypeTag, Properties::Scalar>>); +template<class TypeTag> +struct SpatialParams<TypeTag, TTag::ExerciseFluidsystemTwoP> +{ +private: + using FVGridGeometry = GetPropType<TypeTag, Properties::FVGridGeometry>; + using Scalar = GetPropType<TypeTag, Properties::Scalar>; +public: + using type = ExerciseFluidsystemSpatialParams<FVGridGeometry, Scalar>; +}; // Set grid to be used template<class TypeTag> diff --git a/exercises/exercise-fluidsystem/README.md b/exercises/exercise-fluidsystem/README.md index 8ab0cb8e0e339e9c335bb83c9981d24dab86ca35..124002bb0337a047122c477cc096ae14791ad329 100644 --- a/exercises/exercise-fluidsystem/README.md +++ b/exercises/exercise-fluidsystem/README.md @@ -41,7 +41,7 @@ the `TwoP` _TypeTag_ (immiscible two-phase model properties) and the `BoxModel` ```c++ // Create new type tags namespace TTag { -struct ExerciseFluidsystemTwoP { using InheritsFrom = std::tuple<BoxModel, TwoP>; }; +struct ExerciseFluidsystemTwoP { using InheritsFrom = std::tuple<TwoP, BoxModel>; }; } // end namespace TTag ``` @@ -185,7 +185,7 @@ two-component model properties: ```c++ // Create a new type tag for the problem -struct ExerciseFluidsystemTwoPTwoC { using InheritsFrom = std::tuple<BoxModel, TwoPTwoC>; }; +struct ExerciseFluidsystemTwoPTwoC { using InheritsFrom = std::tuple<TwoPTwoC, BoxModel>; }; } // end namespace TTag ``` diff --git a/exercises/exercise-fractures/fractureproblem.hh b/exercises/exercise-fractures/fractureproblem.hh index 38caa0cd591ac0786ddb84a21102dbd9428d0feb..5088241cc9f6c900899ce79e70db7c990f274892 100644 --- a/exercises/exercise-fractures/fractureproblem.hh +++ b/exercises/exercise-fractures/fractureproblem.hh @@ -51,7 +51,7 @@ namespace Properties { // Create new type tag node namespace TTag { -struct FractureProblem { using InheritsFrom = std::tuple<CCTpfaModel, TwoP>; }; +struct FractureProblem { using InheritsFrom = std::tuple<TwoP, CCTpfaModel>; }; } // end namespace TTag // Set the grid type diff --git a/exercises/exercise-grids/injection2pproblem.hh b/exercises/exercise-grids/injection2pproblem.hh index b99e7eb79b21a05c0c6f09cc1a6910bdef5d82bd..910b2ff8a5dfebe6ca14442bd7ae7ddc5f3190f6 100644 --- a/exercises/exercise-grids/injection2pproblem.hh +++ b/exercises/exercise-grids/injection2pproblem.hh @@ -60,9 +60,15 @@ template<class TypeTag> struct Problem<TypeTag, TTag::Injection2p> { using type = InjectionProblem2P<TypeTag>; }; // Set the spatial parameters -SET_TYPE_PROP(Injection2p, SpatialParams, - InjectionSpatialParams<GetPropType<TypeTag, Properties::FVGridGeometry>, - GetPropType<TypeTag, Properties::Scalar>>); +template<class TypeTag> +struct SpatialParams<TypeTag, TTag::Injection2p> +{ +private: + using FVGridGeometry = GetPropType<TypeTag, Properties::FVGridGeometry>; + using Scalar = GetPropType<TypeTag, Properties::Scalar>; +public: + using type = InjectionSpatialParams<FVGridGeometry, Scalar>; +}; // Set fluid configuration template<class TypeTag> diff --git a/exercises/exercise-properties/mylocalresidual.hh b/exercises/exercise-properties/mylocalresidual.hh index 1a35cf0faa26b8f179d24719f8c5f6c155d04d8d..f47698e5e115969f72df11cd2458b1e2b178afe6 100644 --- a/exercises/exercise-properties/mylocalresidual.hh +++ b/exercises/exercise-properties/mylocalresidual.hh @@ -35,24 +35,24 @@ namespace Dumux * using the n-phase immiscible fully implicit models. */ template<class TypeTag> -class MyLocalResidual : public GET_PROP_TYPE(TypeTag, BaseLocalResidual) +class MyLocalResidual : public GetPropType<TypeTag, Properties::BaseLocalResidual> { - using ParentType = typename GET_PROP_TYPE(TypeTag, BaseLocalResidual); - using Scalar = typename GET_PROP_TYPE(TypeTag, Scalar); - using Problem = typename GET_PROP_TYPE(TypeTag, Problem); - using NumEqVector = typename GET_PROP_TYPE(TypeTag, NumEqVector); - using VolumeVariables = typename GET_PROP_TYPE(TypeTag, VolumeVariables); - using ElementVolumeVariables = typename GET_PROP_TYPE(TypeTag, GridVolumeVariables)::LocalView; - using FluxVariables = typename GET_PROP_TYPE(TypeTag, FluxVariables); - using ElementFluxVariablesCache = typename GET_PROP_TYPE(TypeTag, GridFluxVariablesCache)::LocalView; - using FVElementGeometry = typename GET_PROP_TYPE(TypeTag, FVGridGeometry)::LocalView; + using ParentType = GetPropType<TypeTag, Properties::BaseLocalResidual>; + using Scalar = GetPropType<TypeTag, Properties::Scalar>; + using Problem = GetPropType<TypeTag, Properties::Problem>; + using NumEqVector = GetPropType<TypeTag, Properties::NumEqVector>; + using VolumeVariables = GetPropType<TypeTag, Properties::VolumeVariables>; + using ElementVolumeVariables = typename GetPropType<TypeTag, Properties::GridVolumeVariables>::LocalView; + using FluxVariables = GetPropType<TypeTag, Properties::FluxVariables>; + using ElementFluxVariablesCache = typename GetPropType<TypeTag, Properties::GridFluxVariablesCache>::LocalView; + using FVElementGeometry = typename GetPropType<TypeTag, Properties::FVGridGeometry>::LocalView; using SubControlVolume = typename FVElementGeometry::SubControlVolume; using SubControlVolumeFace = typename FVElementGeometry::SubControlVolumeFace; - using GridView = typename GET_PROP_TYPE(TypeTag, GridView); + using GridView = GetPropType<TypeTag, Properties::GridView>; using Element = typename GridView::template Codim<0>::Entity; - using EnergyLocalResidual = typename GET_PROP_TYPE(TypeTag, EnergyLocalResidual); + using EnergyLocalResidual = GetPropType<TypeTag, Properties::EnergyLocalResidual>; - using ModelTraits = typename GET_PROP_TYPE(TypeTag, ModelTraits); + using ModelTraits = GetPropType<TypeTag, Properties::ModelTraits>; static constexpr int numPhases = ModelTraits::numPhases(); static constexpr int conti0EqIdx = ModelTraits::Indices::conti0EqIdx; //!< first index for the mass balance diff --git a/exercises/exercise-runtimeparams/injection2pproblem.hh b/exercises/exercise-runtimeparams/injection2pproblem.hh index cdae77bfb6ea1f566a33dd4c2022423bfc9bf67b..ea353268dfbe27f1bdffed38d1b0d2985dd416d0 100644 --- a/exercises/exercise-runtimeparams/injection2pproblem.hh +++ b/exercises/exercise-runtimeparams/injection2pproblem.hh @@ -57,9 +57,15 @@ template<class TypeTag> struct Problem<TypeTag, TTag::Injection2p> { using type = InjectionProblem2P<TypeTag>; }; // Set the spatial parameters -SET_TYPE_PROP(Injection2p, SpatialParams, - InjectionSpatialParams<GetPropType<TypeTag, Properties::FVGridGeometry>, - GetPropType<TypeTag, Properties::Scalar>>); +template<class TypeTag> +struct SpatialParams<TypeTag, TTag::Injection2p> +{ +private: + using FVGridGeometry = GetPropType<TypeTag, Properties::FVGridGeometry>; + using Scalar = GetPropType<TypeTag, Properties::Scalar>; +public: + using type = InjectionSpatialParams<FVGridGeometry, Scalar>; +}; // Set fluid configuration template<class TypeTag> diff --git a/exercises/solution/exercise-basic/injection2pniproblem.hh b/exercises/solution/exercise-basic/injection2pniproblem.hh index 6c9c835857a3bfc1445c5d1b7e46dd56dc4dc33e..8d971152777ecdd89e5b7d1b531bb6578e5e72c2 100644 --- a/exercises/solution/exercise-basic/injection2pniproblem.hh +++ b/exercises/solution/exercise-basic/injection2pniproblem.hh @@ -56,13 +56,23 @@ template<class TypeTag> struct Problem<TypeTag, TTag::Injection2pNITypeTag> { using type = InjectionProblem2PNI<TypeTag>; }; // Set the spatial parameters -SET_TYPE_PROP(Injection2pNITypeTag, SpatialParams, - InjectionSpatialParams<GetPropType<TypeTag, Properties::FVGridGeometry>, - GetPropType<TypeTag, Properties::Scalar>>); +template<class TypeTag> +struct SpatialParams<TypeTag, TTag::Injection2pNITypeTag> +{ +private: + using FVGridGeometry = GetPropType<TypeTag, Properties::FVGridGeometry>; + using Scalar = GetPropType<TypeTag, Properties::Scalar>; +public: + using type = InjectionSpatialParams<FVGridGeometry, Scalar>; +}; // Set fluid configuration -SET_TYPE_PROP(Injection2pNITypeTag, FluidSystem, - FluidSystems::H2ON2<GetPropType<TypeTag, Properties::Scalar>, FluidSystems::H2ON2DefaultPolicy</*fastButSimplifiedRelations=*/ true>>); +template<class TypeTag> +struct FluidSystem<TypeTag, TTag::Injection2pNITypeTag> +{ + using type = FluidSystems::H2ON2<GetPropType<TypeTag, Properties::Scalar>, + FluidSystems::H2ON2DefaultPolicy</*fastButSimplifiedRelations=*/true>>; +}; } // end namespace Properties /*! diff --git a/exercises/solution/exercise-coupling-ff-pm/interface/ex_interface_coupling_ff-pm.cc b/exercises/solution/exercise-coupling-ff-pm/interface/ex_interface_coupling_ff-pm.cc index 812cae47dad7fd9a031794ae6c01560586997d04..868ccc962c0e4119baa4546ebe9961f6c7884e61 100644 --- a/exercises/solution/exercise-coupling-ff-pm/interface/ex_interface_coupling_ff-pm.cc +++ b/exercises/solution/exercise-coupling-ff-pm/interface/ex_interface_coupling_ff-pm.cc @@ -53,15 +53,17 @@ namespace Dumux { namespace Properties { -SET_PROP(StokesOneP, CouplingManager) +template<class TypeTag> +struct CouplingManager<TypeTag, TTag::StokesOneP> { - using Traits = StaggeredMultiDomainTraits<TypeTag, TypeTag, TTAG(DarcyOneP)>; + using Traits = StaggeredMultiDomainTraits<TypeTag, TypeTag, Properties::TTag::DarcyOneP>; using type = Dumux::StokesDarcyCouplingManager<Traits>; }; -SET_PROP(DarcyOneP, CouplingManager) +template<class TypeTag> +struct CouplingManager<TypeTag, TTag::DarcyOneP> { - using Traits = StaggeredMultiDomainTraits<TTAG(StokesOneP), TTAG(StokesOneP), TypeTag>; + using Traits = StaggeredMultiDomainTraits<Properties::TTag::StokesOneP, Properties::TTag::StokesOneP, TypeTag>; using type = Dumux::StokesDarcyCouplingManager<Traits>; }; @@ -83,17 +85,17 @@ int main(int argc, char** argv) try Parameters::init(argc, argv); // Define the sub problem type tags - using StokesTypeTag = TTAG(StokesOneP); - using DarcyTypeTag = TTAG(DarcyOneP); + using StokesTypeTag = Properties::TTag::StokesOneP; + using DarcyTypeTag = Properties::TTag::DarcyOneP; #if EXNUMBER < 3 // try to create a grid (from the given grid file or the input file) // for both sub-domains - using DarcyGridManager = Dumux::GridManager<typename GET_PROP_TYPE(DarcyTypeTag, Grid)>; + using DarcyGridManager = Dumux::GridManager<GetPropType<DarcyTypeTag, Properties::Grid>>; DarcyGridManager darcyGridManager; darcyGridManager.init("Darcy"); // pass parameter group - using StokesGridManager = Dumux::GridManager<typename GET_PROP_TYPE(StokesTypeTag, Grid)>; + using StokesGridManager = Dumux::GridManager<GetPropType<StokesTypeTag, Properties::Grid>>; StokesGridManager stokesGridManager; stokesGridManager.init("Stokes"); // pass parameter group @@ -143,10 +145,10 @@ int main(int argc, char** argv) try // create the finite volume grid geometry - using StokesFVGridGeometry = typename GET_PROP_TYPE(StokesTypeTag, FVGridGeometry); + using StokesFVGridGeometry = GetPropType<StokesTypeTag, Properties::FVGridGeometry>; auto stokesFvGridGeometry = std::make_shared<StokesFVGridGeometry>(stokesGridView); stokesFvGridGeometry->update(); - using DarcyFVGridGeometry = typename GET_PROP_TYPE(DarcyTypeTag, FVGridGeometry); + using DarcyFVGridGeometry = GetPropType<DarcyTypeTag, Properties::FVGridGeometry>; auto darcyFvGridGeometry = std::make_shared<DarcyFVGridGeometry>(darcyGridView); darcyFvGridGeometry->update(); @@ -162,9 +164,9 @@ int main(int argc, char** argv) try constexpr auto darcyIdx = CouplingManager::darcyIdx; // the problem (initial and boundary conditions) - using StokesProblem = typename GET_PROP_TYPE(StokesTypeTag, Problem); + using StokesProblem = GetPropType<StokesTypeTag, Properties::Problem>; auto stokesProblem = std::make_shared<StokesProblem>(stokesFvGridGeometry, couplingManager); - using DarcyProblem = typename GET_PROP_TYPE(DarcyTypeTag, Problem); + using DarcyProblem = GetPropType<DarcyTypeTag, Properties::Problem>; auto darcyProblem = std::make_shared<DarcyProblem>(darcyFvGridGeometry, couplingManager); // the solution vector @@ -181,10 +183,10 @@ int main(int argc, char** argv) try couplingManager->init(stokesProblem, darcyProblem, sol); // the grid variables - using StokesGridVariables = typename GET_PROP_TYPE(StokesTypeTag, GridVariables); + using StokesGridVariables = GetPropType<StokesTypeTag, Properties::GridVariables>; auto stokesGridVariables = std::make_shared<StokesGridVariables>(stokesProblem, stokesFvGridGeometry); stokesGridVariables->init(stokesSol); - using DarcyGridVariables = typename GET_PROP_TYPE(DarcyTypeTag, GridVariables); + using DarcyGridVariables = GetPropType<DarcyTypeTag, Properties::GridVariables>; auto darcyGridVariables = std::make_shared<DarcyGridVariables>(darcyProblem, darcyFvGridGeometry); darcyGridVariables->init(sol[darcyIdx]); diff --git a/exercises/solution/exercise-coupling-ff-pm/interface/ex_interface_ffproblem.hh b/exercises/solution/exercise-coupling-ff-pm/interface/ex_interface_ffproblem.hh index 38ff20ac9b44d26adb7dca4148b38eb944c98194..79e7c8ea22269525a26f8706b52d5848c8b17014 100644 --- a/exercises/solution/exercise-coupling-ff-pm/interface/ex_interface_ffproblem.hh +++ b/exercises/solution/exercise-coupling-ff-pm/interface/ex_interface_ffproblem.hh @@ -43,20 +43,25 @@ class StokesSubProblem; namespace Properties { -NEW_TYPE_TAG(StokesOneP, INHERITS_FROM(StaggeredFreeFlowModel, NavierStokes)); +// Create new type tags +namespace TTag { +struct StokesOneP { using InheritsFrom = std::tuple<NavierStokes, StaggeredFreeFlowModel>; }; +} // end namespace TTag // the fluid system -SET_PROP(StokesOneP, FluidSystem) +template<class TypeTag> +struct FluidSystem<TypeTag, TTag::StokesOneP> { - using Scalar = typename GET_PROP_TYPE(TypeTag, Scalar); + using Scalar = GetPropType<TypeTag, Properties::Scalar>; using type = FluidSystems::OnePLiquid<Scalar, Dumux::Components::SimpleH2O<Scalar> > ; }; // Set the grid type -SET_PROP(StokesOneP, Grid) +template<class TypeTag> +struct Grid<TypeTag, TTag::StokesOneP> { static constexpr auto dim = 2; - using Scalar = typename GET_PROP_TYPE(TypeTag, Scalar); + using Scalar = GetPropType<TypeTag, Properties::Scalar>; using TensorGrid = Dune::YaspGrid<2, Dune::TensorProductCoordinates<Scalar, dim> >; #if EXNUMBER < 3 // use "normal" grid @@ -68,12 +73,15 @@ SET_PROP(StokesOneP, Grid) }; // Set the problem property -SET_TYPE_PROP(StokesOneP, Problem, Dumux::StokesSubProblem<TypeTag> ); - -SET_BOOL_PROP(StokesOneP, EnableFVGridGeometryCache, true); -SET_BOOL_PROP(StokesOneP, EnableGridFluxVariablesCache, true); -SET_BOOL_PROP(StokesOneP, EnableGridVolumeVariablesCache, true); - +template<class TypeTag> +struct Problem<TypeTag, TTag::StokesOneP> { using type = Dumux::StokesSubProblem<TypeTag> ; }; + +template<class TypeTag> +struct EnableFVGridGeometryCache<TypeTag, TTag::StokesOneP> { static constexpr bool value = true; }; +template<class TypeTag> +struct EnableGridFluxVariablesCache<TypeTag, TTag::StokesOneP> { static constexpr bool value = true; }; +template<class TypeTag> +struct EnableGridVolumeVariablesCache<TypeTag, TTag::StokesOneP> { static constexpr bool value = true; }; } /*! @@ -84,25 +92,25 @@ class StokesSubProblem : public NavierStokesProblem<TypeTag> { using ParentType = NavierStokesProblem<TypeTag>; - using GridView = typename GET_PROP_TYPE(TypeTag, GridView); - using Scalar = typename GET_PROP_TYPE(TypeTag, Scalar); + using GridView = GetPropType<TypeTag, Properties::GridView>; + using Scalar = GetPropType<TypeTag, Properties::Scalar>; - using Indices = typename GET_PROP_TYPE(TypeTag, ModelTraits)::Indices; + using Indices = typename GetPropType<TypeTag, Properties::ModelTraits>::Indices; - using BoundaryTypes = typename GET_PROP_TYPE(TypeTag, BoundaryTypes); + using BoundaryTypes = GetPropType<TypeTag, Properties::BoundaryTypes>; - using FVGridGeometry = typename GET_PROP_TYPE(TypeTag, FVGridGeometry); + using FVGridGeometry = GetPropType<TypeTag, Properties::FVGridGeometry>; using FVElementGeometry = typename FVGridGeometry::LocalView; using SubControlVolumeFace = typename FVElementGeometry::SubControlVolumeFace; using Element = typename GridView::template Codim<0>::Entity; using GlobalPosition = typename Element::Geometry::GlobalCoordinate; - using PrimaryVariables = typename GET_PROP_TYPE(TypeTag, PrimaryVariables); - using NumEqVector = typename GET_PROP_TYPE(TypeTag, NumEqVector); - using FluidSystem = typename GET_PROP_TYPE(TypeTag, FluidSystem); + using PrimaryVariables = GetPropType<TypeTag, Properties::PrimaryVariables>; + using NumEqVector = GetPropType<TypeTag, Properties::NumEqVector>; + using FluidSystem = GetPropType<TypeTag, Properties::FluidSystem>; - using CouplingManager = typename GET_PROP_TYPE(TypeTag, CouplingManager); + using CouplingManager = GetPropType<TypeTag, Properties::CouplingManager>; public: StokesSubProblem(std::shared_ptr<const FVGridGeometry> fvGridGeometry, std::shared_ptr<CouplingManager> couplingManager) diff --git a/exercises/solution/exercise-coupling-ff-pm/interface/ex_interface_pmproblem.hh b/exercises/solution/exercise-coupling-ff-pm/interface/ex_interface_pmproblem.hh index 51e1663c8d66f1379545bb566e8c38336c4632e5..9649b0e90872a90d423c0c526399c025bf4d551b 100644 --- a/exercises/solution/exercise-coupling-ff-pm/interface/ex_interface_pmproblem.hh +++ b/exercises/solution/exercise-coupling-ff-pm/interface/ex_interface_pmproblem.hh @@ -84,7 +84,6 @@ template<class TypeTag> struct SpatialParams<TypeTag, TTag::DarcyOneP> { using type = OnePSpatialParams<GetPropType<TypeTag, FVGridGeometry>, GetPropType<TypeTag, Scalar>>; }; - } // end namespace Properties /*! diff --git a/exercises/solution/exercise-coupling-ff-pm/models/ex_models_pmproblem.hh b/exercises/solution/exercise-coupling-ff-pm/models/ex_models_pmproblem.hh index aec17c64c9cd62ea0800480ae8a3e4dee6015c00..73771923b2a2c838df5399b70508df4d0ad5ffb6 100644 --- a/exercises/solution/exercise-coupling-ff-pm/models/ex_models_pmproblem.hh +++ b/exercises/solution/exercise-coupling-ff-pm/models/ex_models_pmproblem.hh @@ -83,9 +83,9 @@ template<class TypeTag> struct ReplaceCompEqIdx<TypeTag, TTag::DarcyOnePNC> { static constexpr int value = 3; }; //! Use a model with constant tortuosity for the effective diffusivity -SET_TYPE_PROP(DarcyOnePNC, EffectiveDiffusivityModel, - DiffusivityConstantTortuosity<GetPropType<TypeTag, Properties::Scalar>>); - +template<class TypeTag> +struct EffectiveDiffusivityModel<TypeTag, TTag::DarcyOnePNC> +{ using type = DiffusivityConstantTortuosity<GetPropType<TypeTag, Properties::Scalar>>; }; // Set the grid type template<class TypeTag> struct Grid<TypeTag, TTag::DarcyOnePNC> { using type = Dune::YaspGrid<2>; }; diff --git a/exercises/solution/exercise-fluidsystem/2p2cproblem.hh b/exercises/solution/exercise-fluidsystem/2p2cproblem.hh index 09221c49e68b0eeb5faac71b70db0cf4a95a04c1..25ae5d6c9939ea9e2509f2ecf07d7455944a8ce1 100644 --- a/exercises/solution/exercise-fluidsystem/2p2cproblem.hh +++ b/exercises/solution/exercise-fluidsystem/2p2cproblem.hh @@ -50,7 +50,7 @@ namespace Properties { // Create a new type tag for the problem // Create new type tags namespace TTag { -struct ExerciseFluidsystemTwoPTwoC { using InheritsFrom = std::tuple<BoxModel, TwoPTwoC>; }; +struct ExerciseFluidsystemTwoPTwoC { using InheritsFrom = std::tuple<TwoPTwoC, BoxModel>; }; } // end namespace TTag // Set the "Problem" property @@ -58,9 +58,15 @@ template<class TypeTag> struct Problem<TypeTag, TTag::ExerciseFluidsystemTwoPTwoC> { using type = ExerciseFluidsystemProblemTwoPTwoC<TypeTag>; }; // Set the spatial parameters -SET_TYPE_PROP(ExerciseFluidsystemTwoPTwoC, SpatialParams, - ExerciseFluidsystemSpatialParams<GetPropType<TypeTag, Properties::FVGridGeometry>, - GetPropType<TypeTag, Properties::Scalar>>); +template<class TypeTag> +struct SpatialParams<TypeTag, TTag::ExerciseFluidsystemTwoPTwoC> +{ +private: + using FVGridGeometry = GetPropType<TypeTag, Properties::FVGridGeometry>; + using Scalar = GetPropType<TypeTag, Properties::Scalar>; +public: + using type = ExerciseFluidsystemSpatialParams<FVGridGeometry, Scalar>; +}; // Set grid and the grid creator to be used template<class TypeTag> diff --git a/exercises/solution/exercise-fluidsystem/2pproblem.hh b/exercises/solution/exercise-fluidsystem/2pproblem.hh index e289f9d8340d2284d2930f34a259907aa16b73eb..fa461792f0ae45a1262d4add2c6c52bcc287db20 100644 --- a/exercises/solution/exercise-fluidsystem/2pproblem.hh +++ b/exercises/solution/exercise-fluidsystem/2pproblem.hh @@ -64,7 +64,7 @@ namespace Properties { // Create a new type tag for the problem // Create new type tags namespace TTag { -struct ExerciseFluidsystemTwoP { using InheritsFrom = std::tuple<BoxModel, TwoP>; }; +struct ExerciseFluidsystemTwoP { using InheritsFrom = std::tuple<TwoP, BoxModel>; }; } // end namespace TTag // Set the "Problem" property @@ -72,9 +72,15 @@ template<class TypeTag> struct Problem<TypeTag, TTag::ExerciseFluidsystemTwoP> { using type = ExerciseFluidsystemProblemTwoP<TypeTag>; }; // Set the spatial parameters -SET_TYPE_PROP(ExerciseFluidsystemTwoP, SpatialParams, - ExerciseFluidsystemSpatialParams<GetPropType<TypeTag, Properties::FVGridGeometry>, - GetPropType<TypeTag, Properties::Scalar>>); +template<class TypeTag> +struct SpatialParams<TypeTag, TTag::ExerciseFluidsystemTwoP> +{ +private: + using FVGridGeometry = GetPropType<TypeTag, Properties::FVGridGeometry>; + using Scalar = GetPropType<TypeTag, Properties::Scalar>; +public: + using type = ExerciseFluidsystemSpatialParams<FVGridGeometry, Scalar>; +}; // Set grid to be used template<class TypeTag> diff --git a/exercises/solution/exercise-fractures/fractureproblem.hh b/exercises/solution/exercise-fractures/fractureproblem.hh index 2fc8aaa92e269b3add24b5ff7beb81b445a55812..1f74f6c656009c41c7fc3d8f65f3d34dbc4f975e 100644 --- a/exercises/solution/exercise-fractures/fractureproblem.hh +++ b/exercises/solution/exercise-fractures/fractureproblem.hh @@ -51,7 +51,7 @@ namespace Properties { // Create new type tag node namespace TTag { -struct FractureProblem { using InheritsFrom = std::tuple<CCTpfaModel, TwoP>; }; +struct FractureProblem { using InheritsFrom = std::tuple<TwoP, CCTpfaModel>; }; } // end namespace TTag // Set the grid type diff --git a/exercises/solution/exercise-grids/injection2pproblem.hh b/exercises/solution/exercise-grids/injection2pproblem.hh index 91d8701572610dc726ab0888d26d0d3c99cdaa48..101c0379150b600d40dbe7404ec669f03e0b3da2 100644 --- a/exercises/solution/exercise-grids/injection2pproblem.hh +++ b/exercises/solution/exercise-grids/injection2pproblem.hh @@ -68,9 +68,15 @@ template<class TypeTag> struct Problem<TypeTag, TTag::Injection2p> { using type = InjectionProblem2P<TypeTag>; }; // Set the spatial parameters -SET_TYPE_PROP(Injection2p, SpatialParams, - InjectionSpatialParams<GetPropType<TypeTag, Properties::FVGridGeometry>, - GetPropType<TypeTag, Properties::Scalar>>); +template<class TypeTag> +struct SpatialParams<TypeTag, TTag::Injection2p> +{ +private: + using FVGridGeometry = GetPropType<TypeTag, Properties::FVGridGeometry>; + using Scalar = GetPropType<TypeTag, Properties::Scalar>; +public: + using type = InjectionSpatialParams<FVGridGeometry, Scalar>; +}; // Set fluid configuration template<class TypeTag> diff --git a/exercises/solution/exercise-properties/mylocalresidual.hh b/exercises/solution/exercise-properties/mylocalresidual.hh index 2270f28e38c03e69c4bec6cdbffebfc7dc4598d5..5b80d2e3e5c9122ed0ff08ddb3c67d47b89c4783 100644 --- a/exercises/solution/exercise-properties/mylocalresidual.hh +++ b/exercises/solution/exercise-properties/mylocalresidual.hh @@ -35,24 +35,24 @@ namespace Dumux * using the n-phase immiscible fully implicit models. */ template<class TypeTag> -class MyLocalResidual : public GET_PROP_TYPE(TypeTag, BaseLocalResidual) +class MyLocalResidual : public GetPropType<TypeTag, Properties::BaseLocalResidual> { - using ParentType = typename GET_PROP_TYPE(TypeTag, BaseLocalResidual); - using Scalar = typename GET_PROP_TYPE(TypeTag, Scalar); - using Problem = typename GET_PROP_TYPE(TypeTag, Problem); - using NumEqVector = typename GET_PROP_TYPE(TypeTag, NumEqVector); - using VolumeVariables = typename GET_PROP_TYPE(TypeTag, VolumeVariables); - using ElementVolumeVariables = typename GET_PROP_TYPE(TypeTag, GridVolumeVariables)::LocalView; - using FluxVariables = typename GET_PROP_TYPE(TypeTag, FluxVariables); - using ElementFluxVariablesCache = typename GET_PROP_TYPE(TypeTag, GridFluxVariablesCache)::LocalView; - using FVElementGeometry = typename GET_PROP_TYPE(TypeTag, FVGridGeometry)::LocalView; + using ParentType = GetPropType<TypeTag, Properties::BaseLocalResidual>; + using Scalar = GetPropType<TypeTag, Properties::Scalar>; + using Problem = GetPropType<TypeTag, Properties::Problem>; + using NumEqVector = GetPropType<TypeTag, Properties::NumEqVector>; + using VolumeVariables = GetPropType<TypeTag, Properties::VolumeVariables>; + using ElementVolumeVariables = typename GetPropType<TypeTag, Properties::GridVolumeVariables>::LocalView; + using FluxVariables = GetPropType<TypeTag, Properties::FluxVariables>; + using ElementFluxVariablesCache = typename GetPropType<TypeTag, Properties::GridFluxVariablesCache>::LocalView; + using FVElementGeometry = typename GetPropType<TypeTag, Properties::FVGridGeometry>::LocalView; using SubControlVolume = typename FVElementGeometry::SubControlVolume; using SubControlVolumeFace = typename FVElementGeometry::SubControlVolumeFace; - using GridView = typename GET_PROP_TYPE(TypeTag, GridView); + using GridView = GetPropType<TypeTag, Properties::GridView>; using Element = typename GridView::template Codim<0>::Entity; - using EnergyLocalResidual = typename GET_PROP_TYPE(TypeTag, EnergyLocalResidual); + using EnergyLocalResidual = GetPropType<TypeTag, Properties::EnergyLocalResidual>; - using ModelTraits = typename GET_PROP_TYPE(TypeTag, ModelTraits); + using ModelTraits = GetPropType<TypeTag, Properties::ModelTraits>; static constexpr int numPhases = ModelTraits::numFluidPhases(); static constexpr int conti0EqIdx = ModelTraits::Indices::conti0EqIdx; //!< first index for the mass balance diff --git a/exercises/solution/exercise-runtimeparams/injection2pproblem.hh b/exercises/solution/exercise-runtimeparams/injection2pproblem.hh index d0ca6596626c23491b6b5b026222aec094b2b5c4..b2d79304a3f0a2778f1b075ad5b7b41241c7d30f 100644 --- a/exercises/solution/exercise-runtimeparams/injection2pproblem.hh +++ b/exercises/solution/exercise-runtimeparams/injection2pproblem.hh @@ -57,9 +57,15 @@ template<class TypeTag> struct Problem<TypeTag, TTag::Injection2p> { using type = InjectionProblem2P<TypeTag>; }; // Set the spatial parameters -SET_TYPE_PROP(Injection2p, SpatialParams, - InjectionSpatialParams<GetPropType<TypeTag, Properties::FVGridGeometry>, - GetPropType<TypeTag, Properties::Scalar>>); +template<class TypeTag> +struct SpatialParams<TypeTag, TTag::Injection2p> +{ +private: + using FVGridGeometry = GetPropType<TypeTag, Properties::FVGridGeometry>; + using Scalar = GetPropType<TypeTag, Properties::Scalar>; +public: + using type = InjectionSpatialParams<FVGridGeometry, Scalar>; +}; // Set fluid configuration template<class TypeTag>