diff --git a/dumux/porousmediumflow/mpnc/model.hh b/dumux/porousmediumflow/mpnc/model.hh index a5fb39445f95dd967e0148b50483a3ee2cc05f08..cbde34dd594ac6ea49a60d058b10a61ef6bb6cad 100644 --- a/dumux/porousmediumflow/mpnc/model.hh +++ b/dumux/porousmediumflow/mpnc/model.hh @@ -220,7 +220,16 @@ SET_INT_PROP(MPNC, PressureFormulation, MpNcPressureFormulation::mostWettingFirst); -SET_TYPE_PROP(MPNC, VtkOutputFields, MPNCVtkOutputFields<TypeTag>); //! Set the vtk output fields specific to the mpnc model +//! Set the vtk output fields specific to this model +SET_PROP(MPNC, VtkOutputFields) +{ +private: + using FluidSystem = typename GET_PROP_TYPE(TypeTag, FluidSystem); + using Indices = typename GET_PROP_TYPE(TypeTag, Indices); + +public: + using type = MPNCVtkOutputFields<FluidSystem, Indices>; +}; SET_BOOL_PROP(MPNC, EnableAdvection, true); //! Enable advection SET_BOOL_PROP(MPNC, EnableMolecularDiffusion, true); //! Enable molecular diffusion @@ -255,7 +264,17 @@ SET_INT_PROP(MPNCNI, IsothermalNumEq, GET_PROP_VALUE(TypeTag, NumEq)); ///////////////////////////////////////////////// SET_TYPE_PROP(MPNCNonequil, EquilibriumLocalResidual, MPNCLocalResidual<TypeTag>); -SET_TYPE_PROP(MPNCNonequil, EquilibriumVtkOutputFields, MPNCVtkOutputFields<TypeTag>); + +//! Set the vtk output fields specific to this model +SET_PROP(MPNCNonequil, EquilibriumVtkOutputFields) +{ +private: + using FluidSystem = typename GET_PROP_TYPE(TypeTag, FluidSystem); + using Indices = typename GET_PROP_TYPE(TypeTag, Indices); + +public: + using type = MPNCVtkOutputFields<FluidSystem, Indices>; +}; SET_PROP(MPNCNonequil, EquilibriumIndices) { diff --git a/dumux/porousmediumflow/mpnc/vtkoutputfields.hh b/dumux/porousmediumflow/mpnc/vtkoutputfields.hh index bcbb68ee93afa6f294d48b39b36b5088665eac40..03e28c84e9c2d2b8e89e3c0163d60fd95f0797f7 100644 --- a/dumux/porousmediumflow/mpnc/vtkoutputfields.hh +++ b/dumux/porousmediumflow/mpnc/vtkoutputfields.hh @@ -32,37 +32,31 @@ namespace Dumux { * \ingroup MPNCModel * \brief Adds vtk output fields specific to the twop model */ -template<class TypeTag> +template<class FluidSystem, class Indices> class MPNCVtkOutputFields { - using Indices = typename GET_PROP_TYPE(TypeTag, Indices); - using VolumeVariables = typename GET_PROP_TYPE(TypeTag, VolumeVariables); - using FluidSystem = typename GET_PROP_TYPE(TypeTag, FluidSystem); - - static constexpr int numPhases = GET_PROP_VALUE(TypeTag, NumPhases); - static constexpr int numComponents = GET_PROP_VALUE(TypeTag, NumComponents); public: template <class VtkOutputModule> static void init(VtkOutputModule& vtk) { - for (int i = 0; i < numPhases; ++i) - vtk.addVolumeVariable([i](const VolumeVariables& v){ return v.saturation(i); }, "S_"+ FluidSystem::phaseName(i)); + for (int i = 0; i < FluidSystem::numPhases; ++i) + vtk.addVolumeVariable([i](const auto& v){ return v.saturation(i); }, "S_"+ FluidSystem::phaseName(i)); - for (int i = 0; i < numPhases; ++i) - vtk.addVolumeVariable([i](const VolumeVariables& v){ return v.pressure(i); }, "p_"+ FluidSystem::phaseName(i)); + for (int i = 0; i < FluidSystem::numPhases; ++i) + vtk.addVolumeVariable([i](const auto& v){ return v.pressure(i); }, "p_"+ FluidSystem::phaseName(i)); - for (int i = 0; i < numPhases; ++i) - vtk.addVolumeVariable([i](const VolumeVariables& v){ return v.density(i); }, "rho_"+ FluidSystem::phaseName(i)); + for (int i = 0; i < FluidSystem::numPhases; ++i) + vtk.addVolumeVariable([i](const auto& v){ return v.density(i); }, "rho_"+ FluidSystem::phaseName(i)); - for (int i = 0; i < numPhases; ++i) - vtk.addVolumeVariable([i](const VolumeVariables& v){ return v.mobility(i); },"lambda_"+ FluidSystem::phaseName(i)); + for (int i = 0; i < FluidSystem::numPhases; ++i) + vtk.addVolumeVariable([i](const auto& v){ return v.mobility(i); },"lambda_"+ FluidSystem::phaseName(i)); - vtk.addVolumeVariable([](const VolumeVariables& v){ return v.porosity(); }, "porosity"); + vtk.addVolumeVariable([](const auto& v){ return v.porosity(); }, "porosity"); - for (int i = 0; i < numPhases; ++i) - for (int j = 0; j < numComponents; ++j) - vtk.addVolumeVariable([i,j](const VolumeVariables& v){ return v.moleFraction(i,j); },"x_"+ FluidSystem::phaseName(i) + "^" + FluidSystem::componentName(j)); + for (int i = 0; i < FluidSystem::numPhases; ++i) + for (int j = 0; j < FluidSystem::numComponents; ++j) + vtk.addVolumeVariable([i,j](const auto& v){ return v.moleFraction(i,j); },"x_"+ FluidSystem::phaseName(i) + "^" + FluidSystem::componentName(j)); } }; diff --git a/dumux/porousmediumflow/nonequilibrium/model.hh b/dumux/porousmediumflow/nonequilibrium/model.hh index ce3385be411991ed1a2299a3e0238f7add8536e7..4885f6e1c4f73e92c2fa360c3eb51272e8ef642f 100644 --- a/dumux/porousmediumflow/nonequilibrium/model.hh +++ b/dumux/porousmediumflow/nonequilibrium/model.hh @@ -100,7 +100,17 @@ public: SET_TYPE_PROP(NonEquilibrium, GridVariables, NonEquilibriumGridVariables<TypeTag>); //! indices for non-isothermal models -SET_TYPE_PROP(NonEquilibrium, VtkOutputFields, NonEquilibriumVtkOutputFields<TypeTag>); +SET_PROP(NonEquilibrium, VtkOutputFields) +{ +private: + using EquilibriumVtkOutputFields = typename GET_PROP_TYPE(TypeTag, EquilibriumVtkOutputFields); + using FluidSystem = typename GET_PROP_TYPE(TypeTag, FluidSystem); + + static constexpr int numEnergyEqFluid = GET_PROP_VALUE(TypeTag, NumEnergyEqFluid); + static constexpr int numEnergyEqSolid = GET_PROP_VALUE(TypeTag, NumEnergyEqSolid); +public: + using type = NonEquilibriumVtkOutputFields<EquilibriumVtkOutputFields, FluidSystem, numEnergyEqFluid, numEnergyEqSolid>; +}; SET_PROP(NonEquilibrium, NusseltFormulation ) { diff --git a/dumux/porousmediumflow/nonequilibrium/vtkoutputfields.hh b/dumux/porousmediumflow/nonequilibrium/vtkoutputfields.hh index 2370dec34eb28049ef62534cbdcbf766e1c7319e..62253bad4bc4631bf613adbbd9160a8c4be324c2 100644 --- a/dumux/porousmediumflow/nonequilibrium/vtkoutputfields.hh +++ b/dumux/porousmediumflow/nonequilibrium/vtkoutputfields.hh @@ -33,29 +33,23 @@ namespace Dumux * \ingroup PorousmediumNonEquilibriumModel * \brief Adds vtk output fields specific to non-isothermal models */ -template<class TypeTag> +template<class EquilibriumVtkOutputFields, class FluidSystem, int numEnergyEqFluid, int numEnergyEqSolid> class NonEquilibriumVtkOutputFields { - using EquilibriumVtkOutputFields = typename GET_PROP_TYPE(TypeTag, EquilibriumVtkOutputFields); - using VolumeVariables = typename GET_PROP_TYPE(TypeTag, VolumeVariables); - using FluidSystem = typename GET_PROP_TYPE(TypeTag, FluidSystem); - static constexpr int numPhases = GET_PROP_VALUE(TypeTag, NumPhases); - static constexpr int numEnergyEqFluid = GET_PROP_VALUE(TypeTag, NumEnergyEqFluid); - static constexpr int numEnergyEqSolid = GET_PROP_VALUE(TypeTag, NumEnergyEqSolid); public: template <class VtkOutputModule> static void init(VtkOutputModule& vtk) { EquilibriumVtkOutputFields::init(vtk); for (int i = 0; i < numEnergyEqFluid; ++i) - vtk.addVolumeVariable( [i](const VolumeVariables& v){ return v.temperature(i); }, "T_" + FluidSystem::phaseName(i) ); + vtk.addVolumeVariable( [i](const auto& v){ return v.temperature(i); }, "T_" + FluidSystem::phaseName(i) ); for (int i = 0; i < numEnergyEqSolid; ++i) - vtk.addVolumeVariable( [i](const VolumeVariables& v){ return v.temperatureSolid(); }, "T_solid" ); - for (int i = 0; i < numPhases; ++i){ - vtk.addVolumeVariable( [i](const VolumeVariables& v){ return v.reynoldsNumber(i); }, "reynoldsNumber_" + FluidSystem::phaseName(i) ); - vtk.addVolumeVariable( [i](const VolumeVariables& v){ return v.nusseltNumber(i); }, "nusseltNumber_" + FluidSystem::phaseName(i) ); - vtk.addVolumeVariable( [i](const VolumeVariables& v){ return v.prandtlNumber(i); }, "prandtlNumber_" + FluidSystem::phaseName(i) ); + vtk.addVolumeVariable( [i](const auto& v){ return v.temperatureSolid(); }, "T_solid" ); + for (int i = 0; i < FluidSystem::numPhases; ++i){ + vtk.addVolumeVariable( [i](const auto& v){ return v.reynoldsNumber(i); }, "reynoldsNumber_" + FluidSystem::phaseName(i) ); + vtk.addVolumeVariable( [i](const auto& v){ return v.nusseltNumber(i); }, "nusseltNumber_" + FluidSystem::phaseName(i) ); + vtk.addVolumeVariable( [i](const auto& v){ return v.prandtlNumber(i); }, "prandtlNumber_" + FluidSystem::phaseName(i) ); } } };