diff --git a/dumux/porousmediumflow/1pncmin/model.hh b/dumux/porousmediumflow/1pncmin/model.hh index ee098c63546e03191860ee5b4b3e194352613ccd..1a12f098d587f0724b9629c995a89290f13d6e08 100644 --- a/dumux/porousmediumflow/1pncmin/model.hh +++ b/dumux/porousmediumflow/1pncmin/model.hh @@ -69,7 +69,13 @@ v = - \frac{k_{r}}{\mu} \mbox{\bf K} #include <dumux/porousmediumflow/1pnc/model.hh> #include <dumux/porousmediumflow/1pnc/indices.hh> +#include <dumux/porousmediumflow/1pnc/volumevariables.hh> + #include <dumux/porousmediumflow/mineralization/model.hh> +#include <dumux/porousmediumflow/mineralization/localresidual.hh> +#include <dumux/porousmediumflow/mineralization/volumevariables.hh> +#include <dumux/porousmediumflow/mineralization/vtkoutputfields.hh> + #include <dumux/porousmediumflow/nonisothermal/indices.hh> #include <dumux/porousmediumflow/nonisothermal/vtkoutputfields.hh> #include <dumux/material/fluidmatrixinteractions/1p/thermalconductivityaverage.hh> @@ -81,33 +87,44 @@ namespace Properties ////////////////////////////////////////////////////////////////// // Type tags ////////////////////////////////////////////////////////////////// -NEW_TYPE_TAG(OnePNCMin, INHERITS_FROM(OnePNC, Mineralization)); +NEW_TYPE_TAG(OnePNCMin, INHERITS_FROM(OnePNC)); NEW_TYPE_TAG(OnePNCMinNI, INHERITS_FROM(OnePNCMin)); ////////////////////////////////////////////////////////////////// // Property tags for the isothermal 2pncmin model ////////////////////////////////////////////////////////////////// -//! the VolumeVariables property -SET_TYPE_PROP(OnePNCMin, NonMineralizationVolumeVariables, OnePNCVolumeVariables<TypeTag>); +//! use the mineralization volume variables together with the 1pnc vol vars +SET_PROP(OnePNCMin, VolumeVariables) +{ +private: + using NonMinVolVars = OnePNCVolumeVariables<TypeTag>; +public: + using type = MineralizationVolumeVariables<TypeTag, NonMinVolVars>; +}; + +// Use the mineralization local residual +SET_TYPE_PROP(OnePNCMin, LocalResidual, MineralizationLocalResidual<TypeTag>); -//! The 1pnc model traits define the non-mineralization part -SET_PROP(OnePNCMin, NonMineralizationModelTraits) +//! Use non-mineralization model traits with 1pnc traits +SET_PROP(OnePNCMin, ModelTraits) { private: using FluidSystem = typename GET_PROP_TYPE(TypeTag, PTAG(FluidSystem)); + using NonMinTraits = OnePNCModelTraits<FluidSystem::numComponents>; public: - using type = OnePNCModelTraits<FluidSystem::numComponents>; + using type = MineralizationModelTraits<NonMinTraits, FluidSystem::numSPhases>; }; -//! Set the vtk output fields specific to this model -SET_PROP(OnePNCMin, NonMineralizationVtkOutputFields) +//! Use the mineralization vtk output fields +SET_PROP(OnePNCMin, VtkOutputFields) { private: using FluidSystem = typename GET_PROP_TYPE(TypeTag, FluidSystem); static constexpr int phaseIdx = GET_PROP_VALUE(TypeTag, PhaseIdx); + using NonMineralizationFields = OnePNCVtkOutputFields<FluidSystem, phaseIdx>; public: - using type = OnePNCVtkOutputFields<FluidSystem, phaseIdx>; + using type = MineralizationVtkOutputFields<NonMineralizationFields, FluidSystem>; }; ////////////////////////////////////////////////////////////////// @@ -119,7 +136,8 @@ SET_PROP(OnePNCMinNI, VtkOutputFields) { private: using FluidSystem = typename GET_PROP_TYPE(TypeTag, FluidSystem); - using NonMineralizationFields = typename GET_PROP_TYPE(TypeTag, NonMineralizationVtkOutputFields); + static constexpr int phaseIdx = GET_PROP_VALUE(TypeTag, PhaseIdx); + using NonMineralizationFields = OnePNCVtkOutputFields<FluidSystem, phaseIdx>; using IsothermalFields = MineralizationVtkOutputFields<NonMineralizationFields, FluidSystem>; public: using type = EnergyVtkOutputFields<IsothermalFields>; diff --git a/dumux/porousmediumflow/2pncmin/model.hh b/dumux/porousmediumflow/2pncmin/model.hh index 7a13e41ab2f149aa12e09b2f6c6067fed38daa1b..a413e1075b9d91006d2d6b767835d367f20da288 100644 --- a/dumux/porousmediumflow/2pncmin/model.hh +++ b/dumux/porousmediumflow/2pncmin/model.hh @@ -93,7 +93,13 @@ #define DUMUX_2PNCMIN_MODEL_HH #include <dumux/porousmediumflow/2pnc/model.hh> +#include <dumux/porousmediumflow/2pnc/volumevariables.hh> + #include <dumux/porousmediumflow/mineralization/model.hh> +#include <dumux/porousmediumflow/mineralization/localresidual.hh> +#include <dumux/porousmediumflow/mineralization/volumevariables.hh> +#include <dumux/porousmediumflow/mineralization/vtkoutputfields.hh> + #include <dumux/porousmediumflow/nonisothermal/indices.hh> #include <dumux/porousmediumflow/nonisothermal/vtkoutputfields.hh> @@ -104,34 +110,46 @@ namespace Properties ////////////////////////////////////////////////////////////////// // Type tags ////////////////////////////////////////////////////////////////// -NEW_TYPE_TAG(TwoPNCMin, INHERITS_FROM(TwoPNC, Mineralization)); +NEW_TYPE_TAG(TwoPNCMin, INHERITS_FROM(TwoPNC)); NEW_TYPE_TAG(TwoPNCMinNI, INHERITS_FROM(TwoPNCMin)); ////////////////////////////////////////////////////////////////// // Property tags for the isothermal 2pncmin model ////////////////////////////////////////////////////////////////// -SET_TYPE_PROP(TwoPNCMin, NonMineralizationVolumeVariables, TwoPNCVolumeVariables<TypeTag>); //!< the VolumeVariables property + +// use the mineralization local residual +SET_TYPE_PROP(TwoPNCMin, LocalResidual, MineralizationLocalResidual<TypeTag>); + +//! use the mineralization volume variables together with the 2pnc vol vars +SET_PROP(TwoPNCMin, VolumeVariables) +{ +private: + using NonMinVolVars = TwoPNCVolumeVariables<TypeTag>; +public: + using type = MineralizationVolumeVariables<TypeTag, NonMinVolVars>; +}; //! Set the vtk output fields specific to this model -SET_PROP(TwoPNCMin, NonMineralizationVtkOutputFields) +SET_PROP(TwoPNCMin, VtkOutputFields) { private: using FluidSystem = typename GET_PROP_TYPE(TypeTag, FluidSystem); using Indices = typename GET_PROP_TYPE(TypeTag, Indices); - + using NonMineralizationFields = TwoPNCVtkOutputFields<FluidSystem, Indices>; public: - using type = TwoPNCVtkOutputFields<FluidSystem, Indices>; + using type = MineralizationVtkOutputFields<NonMineralizationFields, FluidSystem>; }; //! The 2pnc model traits define the non-mineralization part -SET_PROP(TwoPNCMin, NonMineralizationModelTraits) +SET_PROP(TwoPNCMin, ModelTraits) { private: //! we use the number of components specified by the fluid system here using FluidSystem = typename GET_PROP_TYPE(TypeTag, FluidSystem); static_assert(FluidSystem::numPhases == 2, "Only fluid systems with 2 fluid phases are supported by the 2p-nc model!"); + using NonMineralizationTraits = TwoPNCModelTraits<FluidSystem::numComponents>; public: - using type = TwoPNCModelTraits<FluidSystem::numComponents>; + using type = MineralizationModelTraits<NonMineralizationTraits, FluidSystem::numSPhases>; }; ////////////////////////////////////////////////////////////////// @@ -156,8 +174,9 @@ public: SET_PROP(TwoPNCMinNI, VtkOutputFields) { private: + using Indices = typename GET_PROP_TYPE(TypeTag, Indices); using FluidSystem = typename GET_PROP_TYPE(TypeTag, FluidSystem); - using NonMineralizationFields = typename GET_PROP_TYPE(TypeTag, NonMineralizationVtkOutputFields); + using NonMineralizationFields = TwoPNCVtkOutputFields<FluidSystem, Indices>; using IsothermalFields = MineralizationVtkOutputFields<NonMineralizationFields, FluidSystem>; public: using type = EnergyVtkOutputFields<IsothermalFields>; diff --git a/dumux/porousmediumflow/mineralization/model.hh b/dumux/porousmediumflow/mineralization/model.hh index 4c5b3cfef6a87e61a9f4f69de80c72334fa96456..e59fb24b9645f3f6b23a03507b0171b036795b50 100644 --- a/dumux/porousmediumflow/mineralization/model.hh +++ b/dumux/porousmediumflow/mineralization/model.hh @@ -30,11 +30,6 @@ #ifndef DUMUX_MINERALIZATION_MODEL_HH #define DUMUX_MINERALIZATION_MODEL_HH -#include <dumux/common/properties.hh> -#include "localresidual.hh" -#include "volumevariables.hh" -#include "vtkoutputfields.hh" - namespace Dumux { /*! @@ -55,40 +50,6 @@ struct MineralizationModelTraits : public NonMinTraits static constexpr int numEq() { return NonMinTraits::numEq() + numPS; } }; -namespace Properties { -////////////////////////////////////////////////////////////////// -// Type tags -////////////////////////////////////////////////////////////////// -NEW_TYPE_TAG(Mineralization); - -//! Set the model traits class -SET_PROP(Mineralization, ModelTraits) -{ -private: - using FluidSystem = typename GET_PROP_TYPE(TypeTag, FluidSystem); - using NonMinTraits = typename GET_PROP_TYPE(TypeTag, NonMineralizationModelTraits); -public: - using type = MineralizationModelTraits<NonMinTraits, FluidSystem::numSPhases>; -}; - -//! Set the general mineralization volume variables -SET_TYPE_PROP(Mineralization, VolumeVariables, MineralizationVolumeVariables<TypeTag>); - -//! Set the general mineralization compositional local residual -SET_TYPE_PROP(Mineralization, LocalResidual, MineralizationLocalResidual<TypeTag>); - -//! VTK outputs for mineralization models -SET_PROP(Mineralization, VtkOutputFields) -{ -private: - using NonMineralizationVtkOutputFields = typename GET_PROP_TYPE(TypeTag, NonMineralizationVtkOutputFields); - using FluidSystem = typename GET_PROP_TYPE(TypeTag, FluidSystem); - -public: - using type = MineralizationVtkOutputFields<NonMineralizationVtkOutputFields, FluidSystem>; -}; - -} // end namespace Properties } // end namespace Dumux #endif diff --git a/dumux/porousmediumflow/mineralization/volumevariables.hh b/dumux/porousmediumflow/mineralization/volumevariables.hh index 77057c55d1c60148a12e55097979cd552636ff6e..0ebc313d74e8faa3577ecb000e84eca25265085f 100644 --- a/dumux/porousmediumflow/mineralization/volumevariables.hh +++ b/dumux/porousmediumflow/mineralization/volumevariables.hh @@ -36,10 +36,10 @@ namespace Dumux { * \brief Contains the quantities which are are constant within a sub-control volume * of the finite volume grid in an m-phase, n-component, mineralization model. */ -template <class TypeTag> -class MineralizationVolumeVariables : public GET_PROP_TYPE(TypeTag, NonMineralizationVolumeVariables) +template <class TypeTag, class NonMineralizationVolVars> +class MineralizationVolumeVariables : public NonMineralizationVolVars { - using ParentType = typename GET_PROP_TYPE(TypeTag, NonMineralizationVolumeVariables); + using ParentType = NonMineralizationVolVars; using Scalar = typename GET_PROP_TYPE(TypeTag, Scalar); using GridView = typename GET_PROP_TYPE(TypeTag, GridView); using Problem = typename GET_PROP_TYPE(TypeTag, Problem);