diff --git a/test/porousmediumflow/3p/implicit/3pniconductionproblem.hh b/test/porousmediumflow/3p/implicit/3pniconductionproblem.hh index b5adb99f47318162535a1dccc82c17b5d576a350..86095d018698dc3b318b84d16fc476dc18333dc6 100644 --- a/test/porousmediumflow/3p/implicit/3pniconductionproblem.hh +++ b/test/porousmediumflow/3p/implicit/3pniconductionproblem.hh @@ -94,21 +94,23 @@ SET_TYPE_PROP(ThreePNIConductionProblem, template <class TypeTag> class ThreePNIConductionProblem : public ImplicitPorousMediaProblem<TypeTag> { - typedef ImplicitPorousMediaProblem<TypeTag> ParentType; - - typedef typename GET_PROP_TYPE(TypeTag, GridView) GridView; - typedef typename GET_PROP_TYPE(TypeTag, Scalar) Scalar; - typedef typename GET_PROP_TYPE(TypeTag, FVElementGeometry) FVElementGeometry; - typedef typename GET_PROP_TYPE(TypeTag, PrimaryVariables) PrimaryVariables; - typedef typename GET_PROP_TYPE(TypeTag, FluidSystem) FluidSystem; - typedef typename GET_PROP_TYPE(TypeTag, BoundaryTypes) BoundaryTypes; - typedef typename GET_PROP_TYPE(TypeTag, TimeManager) TimeManager; - typedef typename GET_PROP_TYPE(TypeTag, ThermalConductivityModel) ThermalConductivityModel; - typedef typename GET_PROP_TYPE(TypeTag, VolumeVariables) VolumeVariables; - typedef H2O<Scalar> IapwsH2O; + using ParentType = ImplicitPorousMediaProblem<TypeTag>; + + using GridView = typename GET_PROP_TYPE(TypeTag, GridView); + using Scalar = typename GET_PROP_TYPE(TypeTag, Scalar); + using FVElementGeometry = typename GET_PROP_TYPE(TypeTag, FVElementGeometry); + using PrimaryVariables = typename GET_PROP_TYPE(TypeTag, PrimaryVariables); + using FluidSystem = typename GET_PROP_TYPE(TypeTag, FluidSystem); + using BoundaryTypes = typename GET_PROP_TYPE(TypeTag, BoundaryTypes); + using TimeManager = typename GET_PROP_TYPE(TypeTag, TimeManager); + using ThermalConductivityModel = typename GET_PROP_TYPE(TypeTag, ThermalConductivityModel); + using VolumeVariables = typename GET_PROP_TYPE(TypeTag, VolumeVariables); + using ElementVolumeVariables = typename GET_PROP_TYPE(TypeTag, ElementVolumeVariables); + using SubControlVolumeFace = typename GET_PROP_TYPE(TypeTag, SubControlVolumeFace); + using IapwsH2O = H2O<Scalar>; // copy some indices for convenience - typedef typename GET_PROP_TYPE(TypeTag, Indices) Indices; + using Indices = typename GET_PROP_TYPE(TypeTag, Indices); enum { // world dimension dimWorld = GridView::dimensionworld @@ -125,12 +127,9 @@ class ThreePNIConductionProblem : public ImplicitPorousMediaProblem<TypeTag> temperatureIdx = Indices::temperatureIdx }; - - typedef typename GridView::template Codim<0>::Entity Element; - typedef typename GridView::Intersection Intersection; - - typedef Dune::FieldVector<Scalar, dimWorld> GlobalPosition; - + using Element = typename GridView::template Codim<0>::Entity; + using Intersection = typename GridView::Intersection; + using GlobalPosition = Dune::FieldVector<Scalar, dimWorld>; public: ThreePNIConductionProblem(TimeManager &timeManager, const GridView &gridView) @@ -249,9 +248,9 @@ public: * \param values The boundary types for the conservation equations * \param globalPos The position for which the bc type should be evaluated */ - void boundaryTypesAtPos(BoundaryTypes &values, - const GlobalPosition &globalPos) const + BoundaryTypes boundaryTypesAtPos(const GlobalPosition &globalPos) const { + BoundaryTypes values; if(globalPos[0] < eps_ || globalPos[0] > this->bBoxMax()[0] - eps_) { values.setAllDirichlet(); @@ -260,6 +259,7 @@ public: { values.setAllNeumann(); } + return values; } /*! @@ -271,37 +271,36 @@ public: * * For this method, the \a values parameter stores primary variables. */ - void dirichletAtPos(PrimaryVariables &values, const GlobalPosition &globalPos) const + PrimaryVariables dirichletAtPos(const GlobalPosition &globalPos) const { + PrimaryVariables values(0.0); initial_(values, globalPos); -// condition for the N2 molefraction at left boundary if (globalPos[0] < eps_) - { values[temperatureIdx] = temperatureHigh_; - } - - + return values; } /*! - * \brief Evaluate the boundary conditions for a Neumann + * \brief Evaluate the boundary conditions for a neumann * boundary segment. * - * For this method, the \a priVars parameter stores the mass flux - * in normal direction of each component. Negative values mean - * influx. + * \param values The neumann values for the conservation equations + * \param element The finite element + * \param fvGeometry The finite-volume geometry in the box scheme + * \param intersection The intersection between element and boundary + * \param scvIdx The local vertex index + * \param boundaryFaceIdx The index of the boundary face * - * The units must be according to either using mole or mass fractions. (mole/(m^2*s) or kg/(m^2*s)) + * For this method, the \a values parameter stores the mass flux + * in normal direction of each phase. Negative values mean influx. */ - void neumann(PrimaryVariables &priVars, - const Element &element, - const FVElementGeometry &fvGeometry, - const Intersection &intersection, - const int scvIdx, - const int boundaryFaceIdx) const + PrimaryVariables neumann(const Element &element, + const FVElementGeometry& fvGeometry, + const ElementVolumeVariables& elemVolVars, + const SubControlVolumeFace& scvf) const { - priVars = 0; + return PrimaryVariables(0.0); } // \} @@ -312,20 +311,14 @@ public: // \{ /*! - * \brief Evaluate the source term for all phases within a given - * sub-control-volume. - * - * For this method, the \a priVars parameter stores the rate mass - * of a component is generated or annihilate per volume - * unit. Positive values mean that mass is created, negative ones - * mean that it vanishes. + * \brief Returns the source term at specific position in the domain. * - * The units must be according to either using mole or mass fractions. (mole/(m^3*s) or kg/(m^3*s)) + * \param values The source values for the primary variables + * \param globalPos The position */ - void sourceAtPos(PrimaryVariables &priVars, - const GlobalPosition &globalPos) const + PrimaryVariables sourceAtPos(const GlobalPosition &globalPos) const { - priVars = Scalar(0.0); + return PrimaryVariables(0.0); } /*! @@ -337,9 +330,11 @@ public: * For this method, the \a values parameter stores primary * variables. */ - void initialAtPos(PrimaryVariables &values, const GlobalPosition &globalPos) const + PrimaryVariables initialAtPos(const GlobalPosition &globalPos) const { + PrimaryVariables values(0.0); initial_(values, globalPos); + return values; } // \} diff --git a/test/porousmediumflow/3p/implicit/3pnispatialparams.hh b/test/porousmediumflow/3p/implicit/3pnispatialparams.hh index 16dec769e42caedac70c4ccba56df26b0b0a7d1e..6fdd140d43ea3268e4537f0db0943b48dc9e8486 100644 --- a/test/porousmediumflow/3p/implicit/3pnispatialparams.hh +++ b/test/porousmediumflow/3p/implicit/3pnispatialparams.hh @@ -70,24 +70,32 @@ SET_PROP(ThreePNISpatialParams, MaterialLaw) template<class TypeTag> class ThreePNISpatialParams : public ImplicitSpatialParams<TypeTag> { - typedef ImplicitSpatialParams<TypeTag> ParentType; - typedef typename GET_PROP_TYPE(TypeTag, Grid) Grid; - typedef typename GET_PROP_TYPE(TypeTag, GridView) GridView; - typedef typename GET_PROP_TYPE(TypeTag, Scalar) Scalar; - - typedef typename GET_PROP_TYPE(TypeTag, SolutionVector) SolutionVector; - - - typedef typename GET_PROP_TYPE(TypeTag, FVElementGeometry) FVElementGeometry; - typedef typename GridView::template Codim<0>::Entity Element; + using ParentType = ImplicitSpatialParams<TypeTag>; + using Problem = typename GET_PROP_TYPE(TypeTag, Problem); + using Grid = typename GET_PROP_TYPE(TypeTag, Grid); + using GridView = typename GET_PROP_TYPE(TypeTag, GridView); + using Scalar = typename GET_PROP_TYPE(TypeTag, Scalar); + + using SolutionVector = typename GET_PROP_TYPE(TypeTag, SolutionVector); + + using FVElementGeometry = typename GET_PROP_TYPE(TypeTag, FVElementGeometry); + using SubControlVolume = typename GET_PROP_TYPE(TypeTag, SubControlVolume); + using Element = typename GridView::template Codim<0>::Entity; + enum { + dimWorld=GridView::dimensionworld + }; + using CoordScalar = typename Grid::ctype; + using GlobalPosition = Dune::FieldVector<CoordScalar,dimWorld>; public: + // export permeability type + using PermeabilityType = Scalar; - typedef typename GET_PROP_TYPE(TypeTag, MaterialLaw) MaterialLaw; - typedef typename MaterialLaw::Params MaterialLawParams; + using MaterialLaw = typename GET_PROP_TYPE(TypeTag, MaterialLaw); + using MaterialLawParams = typename MaterialLaw::Params; - ThreePNISpatialParams(const GridView &gridView) - : ParentType(gridView) + ThreePNISpatialParams(const Problem& problem, const GridView &gridView) + : ParentType(problem, gridView) { permeability_ = 1e-10; porosity_ = 0.4; @@ -126,43 +134,31 @@ public: } /*! - * \brief Define the intrinsic permeability \f$\mathrm{[m^2]}\f$. + * \brief Returns the scalar intrinsic permeability \f$[m^2]\f$ * - * \param element The current finite element - * \param fvGeometry The current finite volume geometry of the element - * \param scvIdx The index of the sub-control volume + * \param globalPos The global position */ - const Scalar intrinsicPermeability(const Element &element, - const FVElementGeometry &fvGeometry, - const int scvIdx) const + Scalar permeabilityAtPos(const GlobalPosition& globalPos) const { return permeability_; } /*! - * \brief Define the porosity \f$\mathrm{[-]}\f$. + * \brief Returns the porosity \f$[-]\f$ * - * \param element The finite element - * \param fvGeometry The finite volume geometry - * \param scvIdx The local index of the sub-control volume where + * \param globalPos The global position */ - double porosity(const Element &element, - const FVElementGeometry &fvGeometry, - const int scvIdx) const + Scalar porosityAtPos(const GlobalPosition& globalPos) const { return porosity_; } - /*! - * \brief return the parameter object for the Brooks-Corey material law which depends on the position + /*! + * \brief Returns the parameter object for the Brooks-Corey material law * - * \param element The current finite element - * \param fvGeometry The current finite volume geometry of the element - * \param scvIdx The index of the sub-control volume + * \param globalPos The global position */ - const MaterialLawParams& materialLawParams(const Element &element, - const FVElementGeometry &fvGeometry, - const int scvIdx) const + const MaterialLawParams& materialLawParamsAtPos(const GlobalPosition& globalPos) const { return materialParams_; } @@ -172,13 +168,9 @@ public: * * This is only required for non-isothermal models. * - * \param element The finite element - * \param fvGeometry The finite volume geometry - * \param scvIdx The local index of the sub-control volume + * \param globalPos The global position */ - Scalar solidHeatCapacity(const Element &element, - const FVElementGeometry &fvGeometry, - const int scvIdx) const + Scalar solidHeatCapacityAtPos(const GlobalPosition& globalPos) const { return 790; // specific heat capacity of granite [J / (kg K)] } @@ -188,13 +180,9 @@ public: * * This is only required for non-isothermal models. * - * \param element The finite element - * \param fvGeometry The finite volume geometry - * \param scvIdx The local index of the sub-control volume + * \param globalPos The global position */ - Scalar solidDensity(const Element &element, - const FVElementGeometry &fvGeometry, - const int scvIdx) const + Scalar solidDensityAtPos(const GlobalPosition& globalPos) const { return 2700; // density of granite [kg/m^3] } @@ -202,14 +190,11 @@ public: /*! * \brief Returns the thermal conductivity \f$\mathrm{[W/(m K)]}\f$ of the porous material. * - * \param element The finite element - * \param fvGeometry The finite volume geometry - * \param scvIdx The local index of the sub-control volume where - * the heat capacity needs to be defined + * This is only required for non-isothermal models. + * + * \param globalPos The global position */ - Scalar solidThermalConductivity(const Element &element, - const FVElementGeometry &fvGeometry, - const int scvIdx) const + Scalar solidThermalConductivityAtPos(const GlobalPosition& globalPos) const { return lambdaSolid_; } diff --git a/test/porousmediumflow/3p/implicit/infiltration3pproblem.hh b/test/porousmediumflow/3p/implicit/infiltration3pproblem.hh index 9b5a9307125da39cedc51173422e40888cfad10c..89a8f9c264f76c8907931a760f52080b2eaea98f 100644 --- a/test/porousmediumflow/3p/implicit/infiltration3pproblem.hh +++ b/test/porousmediumflow/3p/implicit/infiltration3pproblem.hh @@ -237,7 +237,7 @@ public: if (pc < 0.0) pc = 0.0; sw = invertPcgw_(pc, - this->spatialParams().materialLawParams()); + this->spatialParams().materialLawParamsAtPos(globalPos)); if (sw < swr) sw = swr; if (sw > 1.-sgr) sw = 1.-sgr; @@ -339,7 +339,7 @@ private: if (pc < 0.0) pc = 0.0; sw = invertPcgw_(pc, - this->spatialParams().materialLawParams()); + this->spatialParams().materialLawParamsAtPos(globalPos)); if (sw < swr) sw = swr; if (sw > 1.-sgr) sw = 1.-sgr; diff --git a/test/porousmediumflow/3p/implicit/infiltration3pspatialparams.hh b/test/porousmediumflow/3p/implicit/infiltration3pspatialparams.hh index e49ea0c10b28134aa33e4d7b3bf0aa192c18c6c7..0e06b9ef59b69737e6409aea94255a0eb0aba4e9 100644 --- a/test/porousmediumflow/3p/implicit/infiltration3pspatialparams.hh +++ b/test/porousmediumflow/3p/implicit/infiltration3pspatialparams.hh @@ -89,6 +89,9 @@ class InfiltrationThreePSpatialParams : public ImplicitSpatialParams<TypeTag> public: + // export permeability type + using PermeabilityType = Scalar; + //get the material law from the property system typedef typename GET_PROP_TYPE(TypeTag, MaterialLaw) MaterialLaw; typedef typename MaterialLaw::Params MaterialLawParams; @@ -142,51 +145,33 @@ public: } /*! - * \brief Intrinsic permability + * \brief Returns the scalar intrinsic permeability \f$[m^2]\f$ * - * \param element The current element - * \param fvElemGeom The current finite volume geometry of the element - * \param scvIdx The index of the sub-control volume - * \return Intrinsic permeability + * \param globalPos The global position */ - const Scalar intrinsicPermeability(const SubControlVolume& scv, - const VolumeVariables& volVars) const + Scalar permeabilityAtPos(const GlobalPosition& globalPos) const { - const GlobalPosition &globalPos = scv.dofPosition(); if (isFineMaterial_(globalPos)) return fineK_; return coarseK_; } /*! - * \brief Porosity + * \brief Returns the porosity \f$[-]\f$ * - * \param element The current element - * \param fvElemGeom The current finite volume geometry of the element - * \param scvIdx The index of the sub-control volume - * \return Porosity + * \param globalPos The global position */ - double porosity(const SubControlVolume& scv) const + Scalar porosityAtPos(const GlobalPosition& globalPos) const { return porosity_; } - /*! - * \brief Function for defining the parameters needed by constitutive relationships (kr-sw, pc-sw, etc.). + * \brief Returns the parameter object for the Brooks-Corey material law * - * \param element The current element - * \param fvElemGeom The current finite volume geometry of the element - * \param scvIdx The index of the sub-control volume - * \return the material parameters object + * \param globalPos The global position */ - const MaterialLawParams& materialLawParams(const Element &element, - const SubControlVolume& scv) const - { - return materialParams_; - } - - const MaterialLawParams& materialLawParams() const + const MaterialLawParams& materialLawParamsAtPos(const GlobalPosition& globalPos) const { return materialParams_; }