From cdcb175610010d197f1d52f5dd57e39a9afcec25 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dennis=20Gl=C3=A4ser?= Date: Wed, 26 Jan 2022 17:57:42 +0100 Subject: [PATCH 1/8] [poroelastic] put fluid properties in spatial params --- dumux/common/deprecated.hh | 91 +++++++++++++++++++ dumux/flux/box/effectivestresslaw.hh | 3 +- dumux/geomechanics/fvproblem.hh | 45 +++------ .../poroelastic/fvspatialparams.hh | 75 +++++++++++++++ .../geomechanics/poroelastic/localresidual.hh | 2 +- 5 files changed, 184 insertions(+), 32 deletions(-) diff --git a/dumux/common/deprecated.hh b/dumux/common/deprecated.hh index 0c41de06f9..53043e42e0 100644 --- a/dumux/common/deprecated.hh +++ b/dumux/common/deprecated.hh @@ -108,6 +108,38 @@ using HasBaseProblemExtrusionFactorAtPosDetector = decltype(std::declval +using HasBaseProblemEffectiveFluidDensity = decltype(std::declval().effectiveFluidDensity( + std::declval(), + std::declval(), + double{} + )); + +template +using HasEffectiveFluidDensityAtPos = decltype(std::declval().effectiveFluidDensityAtPos( + std::declval() + )); + +template +using HasBaseProblemEffectivePorePressure = decltype(std::declval().effectivePorePressure( + std::declval(), + std::declval(), + std::declval(), + std::declval(), + double{} + )); + +template +using HasEffectivePorePressureAtPos = decltype(std::declval().effectivePorePressureAtPos( + std::declval() + )); + + #ifdef __clang__ #pragma clang diagnostic pop #endif // __clang__ @@ -183,6 +215,65 @@ decltype(auto) temperature(const Problem& problem, const Element& element, const return problem.temperatureAtPos(scv.dofPosition()); } +template +decltype(auto) effectiveFluidDensity(const Problem& problem, + const Element& element, + const SubControlVolume& scv) +{ + using GlobalPosition = typename SubControlVolume::Traits::GlobalPosition; + + static constexpr bool hasBaseProblemDensity = Dune::Std::is_detected< + HasBaseProblemEffectiveFluidDensity, Problem, Element, SubControlVolume + >::value; + + static constexpr bool hasProblemDensityAtPos = Dune::Std::is_detected< + HasEffectiveFluidDensityAtPos, Problem, GlobalPosition + >::value; + + static constexpr bool problemDefinesUserDensity = + hasProblemDensityAtPos || !hasBaseProblemDensity; + + if constexpr (problemDefinesUserDensity) + return problem.effectiveFluidDensity(element, scv); + else + return problem.spatialParams().effectiveFluidDensity(element, scv); +} + +template +decltype(auto) effectivePorePressure(const Problem& problem, + const Element& element, + const FVElementGeometry& fvGeometry, + const ElemVolVars& elemVolVars, + const FluxVarsCache& fluxVarsCache) +{ + using GlobalPosition = typename FVElementGeometry::GridGeometry::SubControlVolume::Traits::GlobalPosition; + + static constexpr bool hasBaseProblemPressure = Dune::Std::is_detected< + HasBaseProblemEffectivePorePressure, + Problem, + Element, + FVElementGeometry, + ElemVolVars, + FluxVarsCache + >::value; + + static constexpr bool hasProblemPressureAtPos = Dune::Std::is_detected< + HasEffectivePorePressureAtPos, Problem, GlobalPosition + >::value; + + static constexpr bool problemDefinesUserPressure = + hasProblemPressureAtPos || !hasBaseProblemPressure; + + if constexpr (problemDefinesUserPressure) + return problem.effectivePorePressure( + element, fvGeometry, elemVolVars, fluxVarsCache + ); + else + return problem.spatialParams().effectivePorePressure( + element, fvGeometry, elemVolVars, fluxVarsCache + ); +} + } // end namespace Deprecated #endif diff --git a/dumux/flux/box/effectivestresslaw.hh b/dumux/flux/box/effectivestresslaw.hh index 3d27b0c193..9bd94a4863 100644 --- a/dumux/flux/box/effectivestresslaw.hh +++ b/dumux/flux/box/effectivestresslaw.hh @@ -28,6 +28,7 @@ #include #include #include +#include namespace Dumux { @@ -99,7 +100,7 @@ public: // obtain biot coefficient and effective pore pressure const auto biotCoeff = problem.spatialParams().biotCoefficient(element, fvGeometry, elemVolVars, fluxVarsCache); - const auto effPress = problem.effectivePorePressure(element, fvGeometry, elemVolVars, fluxVarsCache); + const auto effPress = Deprecated::effectivePorePressure(problem, element, fvGeometry, elemVolVars, fluxVarsCache); // subtract pore pressure from the diagonal entries const auto bcp = biotCoeff*effPress; diff --git a/dumux/geomechanics/fvproblem.hh b/dumux/geomechanics/fvproblem.hh index c0703a789d..dff383383d 100644 --- a/dumux/geomechanics/fvproblem.hh +++ b/dumux/geomechanics/fvproblem.hh @@ -27,35 +27,10 @@ #include #include -namespace Dumux { - -#ifndef DOXYGEN -namespace Detail { -// helper struct detecting if the user-defined problem class has an effectiveFluidDensityAtPos function -// for g++ > 5.3, this can be replaced by a lambda -template -struct hasEffFluidDensityAtPos -{ - template - auto operator()(const Problem& a) - -> decltype(a.effectiveFluidDensityAtPos(std::declval())) - {} -}; - -// helper struct detecting if the user-defined problem class has an effectivePorePressureAtPos function -// for g++ > 5.3, this can be replaced by a lambda -template -struct hasEffPorePressureAtPos -{ - template - auto operator()(const Problem& a) - -> decltype(a.effectivePorePressureAtPos(std::declval())) - {} -}; - -} // end namespace Detail -#endif +// for helpers in detail namespace (TODO: Remove after deprecation period) +#include "poroelastic/fvspatialparams.hh" +namespace Dumux { /*! * \ingroup Geomechanics @@ -85,13 +60,18 @@ public: /*! * \brief Returns the effective fluid density within an scv. * \note This is only enabled if the model considers fluid phases. + * \note This is deprecated and moved into poroelastic/fvspatialparams * * \param element The current element * \param scv The sub-control volume + * \param deprecationHelper Helper to distinguish this interface from + * user-provided implementations. */ template< int n = numFP, std::enable_if_t<(n > 0), int> = 0 > + [[deprecated("effectiveFluidDensity() is now defined in the spatial params. This interface will be removed after release 3.5.")]] Scalar effectiveFluidDensity(const Element& element, - const SubControlVolume& scv) const + const SubControlVolume& scv, + int deprecationHelper = 0) const { static_assert(decltype(isValid(Detail::hasEffFluidDensityAtPos())(this->asImp_()))::value," \n\n" " Your problem class has to either implement\n\n" @@ -111,17 +91,22 @@ public: * for an integration point inside the element. Therefore, * a flux variables cache object is passed to this function * containing data on shape functions at the integration point. + * \note This is deprecated and moved into poroelastic/fvspatialparams * * \param element The current element * \param fvGeometry The local finite volume geometry * \param elemVolVars Primary/Secondary variables inside the element * \param fluxVarsCache Contains data on shape functions at the integration point + * \param deprecationHelper Helper to distinguish this interface from + * user-provided implementations. */ template< class ElemVolVars, class FluxVarsCache, int n = numFP, std::enable_if_t<(n > 0), int> = 0 > + [[deprecated("effectivePorePressure() is now defined in the spatial params. This interface will be removed after release 3.5.")]] Scalar effectivePorePressure(const Element& element, const FVElementGeometry& fvGeometry, const ElemVolVars& elemVolVars, - const FluxVarsCache& fluxVarsCache) const + const FluxVarsCache& fluxVarsCache, + int deprecationHelper = 0) const { static_assert(decltype(isValid(Detail::hasEffPorePressureAtPos())(this->asImp_()))::value," \n\n" " Your problem class has to either implement\n\n" diff --git a/dumux/geomechanics/poroelastic/fvspatialparams.hh b/dumux/geomechanics/poroelastic/fvspatialparams.hh index 525bcf846a..8b9c4c423a 100644 --- a/dumux/geomechanics/poroelastic/fvspatialparams.hh +++ b/dumux/geomechanics/poroelastic/fvspatialparams.hh @@ -35,6 +35,28 @@ namespace Dumux { #ifndef DOXYGEN namespace Detail { +// helper struct detecting if the user-defined problem class has an effectiveFluidDensityAtPos function +// for g++ > 5.3, this can be replaced by a lambda +template +struct hasEffFluidDensityAtPos +{ + template + auto operator()(const Problem& a) + -> decltype(a.effectiveFluidDensityAtPos(std::declval())) + {} +}; + +// helper struct detecting if the user-defined problem class has an effectivePorePressureAtPos function +// for g++ > 5.3, this can be replaced by a lambda +template +struct hasEffPorePressureAtPos +{ + template + auto operator()(const Problem& a) + -> decltype(a.effectivePorePressureAtPos(std::declval())) + {} +}; + // helper struct detecting if the user-defined spatial params class has a reactiveVolumeFractionAtPos function template struct hasReactiveVolumeFractionAtPos @@ -79,6 +101,59 @@ public: : ParentType(gridGeometry) {} + /*! + * \brief Returns the effective fluid density within an scv. + * \note This is only enabled if the model considers fluid phases. + * + * \param element The current element + * \param scv The sub-control volume + */ + Scalar effectiveFluidDensity(const Element& element, + const SubControlVolume& scv) const + { + static_assert(decltype(isValid(Detail::hasEffFluidDensityAtPos())(this->asImp_()))::value," \n\n" + " Your problem class has to either implement\n\n" + " Scalar effectiveFluidDensityAtPos(const GlobalPosition& globalPos) const\n\n" + " or overload this function\n\n" + " template\n" + " Scalar effectiveFluidDensity(const Element& element,\n\ + const SubControlVolume& scv) const\n\n"); + + return this->asImp_().effectiveFluidDensityAtPos(scv.center()); + } + + /*! + * \brief Returns the effective pore pressure + * \note This is only enabled if the model considers fluid phases. + * This is possibly solution dependent and is evaluated + * for an integration point inside the element. Therefore, + * a flux variables cache object is passed to this function + * containing data on shape functions at the integration point. + * + * \param element The current element + * \param fvGeometry The local finite volume geometry + * \param elemVolVars Primary/Secondary variables inside the element + * \param fluxVarsCache Contains data on shape functions at the integration point + */ + template + Scalar effectivePorePressure(const Element& element, + const FVElementGeometry& fvGeometry, + const ElemVolVars& elemVolVars, + const FluxVarsCache& fluxVarsCache) const + { + static_assert(decltype(isValid(Detail::hasEffPorePressureAtPos())(this->asImp_()))::value," \n\n" + " Your problem class has to either implement\n\n" + " Scalar effectivePorePressureAtPos(const GlobalPosition& globalPos) const\n\n" + " or overload this function\n\n" + " template\n" + " Scalar effectivePorePressure(const Element& element,\n" + " const FVElementGeometry& fvGeometry,\n" + " const ElemVolVars& elemVolVars,\n" + " const FluxVarsCache& fluxVarsCache) const\n\n"); + + return this->asImp_().effectivePorePressureAtPos(element.geometry().center()); + } + /*! * \brief Function for defining the solid volume fraction of a solid * component that takes part in some sort of reaction. The reaction diff --git a/dumux/geomechanics/poroelastic/localresidual.hh b/dumux/geomechanics/poroelastic/localresidual.hh index ad65f0d81c..d43efc1861 100644 --- a/dumux/geomechanics/poroelastic/localresidual.hh +++ b/dumux/geomechanics/poroelastic/localresidual.hh @@ -91,7 +91,7 @@ public: // compute average density const auto& vv = elemVolVars[scv]; const auto phi = vv.porosity(); - const auto rhoFluid = problem.effectiveFluidDensity(element, scv); + const auto rhoFluid = Deprecated::effectiveFluidDensity(problem, element, scv); const auto rhoAverage = phi*rhoFluid + (1.0 - phi*vv.solidDensity()); // add body force -- GitLab From b0da457c162a60eece1d0eaf0921f109b9e575a8 Mon Sep 17 00:00:00 2001 From: Yue Wang Date: Mon, 31 Jan 2022 16:40:55 +0100 Subject: [PATCH 2/8] [test/poroel] move fluid props into spatialparams --- test/geomechanics/poroelastic/main.cc | 2 +- test/geomechanics/poroelastic/problem.hh | 42 ---------------- test/geomechanics/poroelastic/properties.hh | 6 ++- .../geomechanics/poroelastic/spatialparams.hh | 48 +++++++++++++++++-- 4 files changed, 51 insertions(+), 47 deletions(-) diff --git a/test/geomechanics/poroelastic/main.cc b/test/geomechanics/poroelastic/main.cc index 8f5587c2ac..83889dac40 100644 --- a/test/geomechanics/poroelastic/main.cc +++ b/test/geomechanics/poroelastic/main.cc @@ -148,7 +148,7 @@ int main(int argc, char** argv) // also, add exact solution to the output SolutionVector xExact(gridGeometry->numDofs()); for (const auto& v : vertices(leafGridView)) - xExact[ gridGeometry->vertexMapper().index(v) ] = problem->exactSolution(v.geometry().center()); + xExact[ gridGeometry->vertexMapper().index(v) ] = problem->spatialParams().exactSolution(v.geometry().center()); vtkWriter.addField(xExact, "u_exact"); // Furthermore, write out element stress tensors diff --git a/test/geomechanics/poroelastic/problem.hh b/test/geomechanics/poroelastic/problem.hh index ed01afaac3..d443e04c34 100644 --- a/test/geomechanics/poroelastic/problem.hh +++ b/test/geomechanics/poroelastic/problem.hh @@ -74,32 +74,6 @@ public: PrimaryVariables dirichletAtPos(const GlobalPosition& globalPos) const { return PrimaryVariables(0.0); } - /*! - * \brief Returns the effective fluid density. - * - * \param globalPos The global position - */ - Scalar effectiveFluidDensityAtPos(const GlobalPosition& globalPos) const - { - // This test uses the constant component, obtain density only once - using FS = GetPropType; - static const Scalar rho = FS::density( - effectivePorePressureAtPos(globalPos), this->spatialParams().temperatureAtPos(globalPos) - ); - return rho; - } - - /*! - * \brief Returns the effective pore pressure - * - * \note We use the x-displacement as pressure solution. The shift to - * higher values is done to see a mor pronounced effect in stresses. - * - * \param globalPos The global position - */ - Scalar effectivePorePressureAtPos(const GlobalPosition& globalPos) const - { return exactSolution(globalPos)[0] + 10; } - /*! * \brief Specifies which kind of boundary condition should be * used for which equation on a given boundary segment. @@ -156,22 +130,6 @@ public: return divSigma; } - /*! - * \brief Evaluates the exact displacement to this problem at a given position. - */ - PrimaryVariables exactSolution(const GlobalPosition& globalPos) const - { - using std::sin; - - const auto x = globalPos[0]; - const auto y = globalPos[1]; - - PrimaryVariables exact(0.0); - exact[Indices::momentum(/*x-dir*/0)] = (x-x*x)*sin(2*pi*y); - exact[Indices::momentum(/*y-dir*/1)] = sin(2*pi*x)*sin(2*pi*y); - return exact; - } - /*! * \brief Evaluates the exact displacement gradient to this problem at a given position. */ diff --git a/test/geomechanics/poroelastic/properties.hh b/test/geomechanics/poroelastic/properties.hh index 6e93610375..d751bced34 100644 --- a/test/geomechanics/poroelastic/properties.hh +++ b/test/geomechanics/poroelastic/properties.hh @@ -61,8 +61,12 @@ struct FluidSystem template struct SpatialParams { + using FS = GetPropType; + using PV = GetPropType; + using Indices = typename GetPropType::Indices; using type = PoroElasticSpatialParams< GetPropType, - GetPropType >; + GetPropType, + FS, PV, Indices>; }; } // end namespace Dumux::Properties diff --git a/test/geomechanics/poroelastic/spatialparams.hh b/test/geomechanics/poroelastic/spatialparams.hh index 2bdb776ec9..2315497203 100644 --- a/test/geomechanics/poroelastic/spatialparams.hh +++ b/test/geomechanics/poroelastic/spatialparams.hh @@ -35,12 +35,12 @@ namespace Dumux { * \ingroup GeomechanicsTests * \brief Definition of the spatial parameters for the poro-elastic problem. */ -template +template class PoroElasticSpatialParams : public FVPoroElasticSpatialParams< GridGeometry, Scalar, - PoroElasticSpatialParams > + PoroElasticSpatialParams > { - using ThisType = PoroElasticSpatialParams; + using ThisType = PoroElasticSpatialParams; using ParentType = FVPoroElasticSpatialParams; using SubControlVolume = typename GridGeometry::SubControlVolume; @@ -48,6 +48,7 @@ class PoroElasticSpatialParams : public FVPoroElasticSpatialParams< GridGeometry using Element = typename GridView::template Codim<0>::Entity; using GlobalPosition = typename Element::Geometry::GlobalCoordinate; + static constexpr Scalar pi = M_PI; public: //! Export the type of the lame parameters using LameParams = Dumux::LameParams; @@ -73,10 +74,51 @@ public: return poroLaw.evaluatePorosity(this->gridGeometry(), element, scv, elemSol, /*refPoro*/0.3); } + /*! + * \brief Returns the effective pore pressure + * + * \note We use the x-displacement as pressure solution. The shift to + * higher values is done to see a mor pronounced effect in stresses. + * + * \param globalPos The global position + */ + Scalar effectivePorePressureAtPos(const GlobalPosition& globalPos) const + { return exactSolution(globalPos)[0] + 10; } + + /*! + * \brief Returns the effective fluid density. + * + * \param globalPos The global position + */ + Scalar effectiveFluidDensityAtPos(const GlobalPosition& globalPos) const + { + // This test uses the constant component, obtain density only once + static const Scalar rho = FluidSystem::density( + effectivePorePressureAtPos(globalPos), this->temperatureAtPos(globalPos) + ); + return rho; + } + //! Returns the Biot coefficient of the porous medium. Scalar biotCoefficientAtPos(const GlobalPosition& globalPos) const { return 1.0; } + /*! + * \brief Evaluates the exact displacement to this problem at a given position. + */ + PrimaryVariables exactSolution(const GlobalPosition& globalPos) const + { + using std::sin; + + const auto x = globalPos[0]; + const auto y = globalPos[1]; + + PrimaryVariables exact(0.0); + exact[Indices::momentum(/*x-dir*/0)] = (x-x*x)*sin(2*pi*y); + exact[Indices::momentum(/*y-dir*/1)] = sin(2*pi*x)*sin(2*pi*y); + return exact; + } + private: LameParams lameParams_; }; -- GitLab From 6082d694d4b00a93d96598f7dd0c8c60544647c9 Mon Sep 17 00:00:00 2001 From: Yue Wang Date: Mon, 31 Jan 2022 17:00:12 +0100 Subject: [PATCH 3/8] test/el1p move fluid props into spatialparams --- test/multidomain/poromechanics/el1p/main.cc | 3 +- .../poromechanics/el1p/problem_poroelastic.hh | 36 +--------------- .../poromechanics/el1p/properties.hh | 4 +- .../el1p/spatialparams_poroelastic.hh | 42 ++++++++++++++++--- 4 files changed, 44 insertions(+), 41 deletions(-) diff --git a/test/multidomain/poromechanics/el1p/main.cc b/test/multidomain/poromechanics/el1p/main.cc index 0c8fd89651..1f2b8fe29b 100644 --- a/test/multidomain/poromechanics/el1p/main.cc +++ b/test/multidomain/poromechanics/el1p/main.cc @@ -92,7 +92,8 @@ int main(int argc, char** argv) using PoroMechProblem = GetPropType; auto onePSpatialParams = std::make_shared(onePFvGridGeometry, couplingManager); auto onePProblem = std::make_shared(onePFvGridGeometry, onePSpatialParams, "OneP"); - auto poroMechProblem = std::make_shared(poroMechFvGridGeometry, couplingManager, "PoroElastic"); + auto poroMechSpatialParams = std::make_shared(poroMechFvGridGeometry, couplingManager); + auto poroMechProblem = std::make_shared(poroMechFvGridGeometry, poroMechSpatialParams, "PoroElastic"); // the solution vectors using SolutionVector = typename Traits::SolutionVector; diff --git a/test/multidomain/poromechanics/el1p/problem_poroelastic.hh b/test/multidomain/poromechanics/el1p/problem_poroelastic.hh index 45042cdd34..74477882d8 100644 --- a/test/multidomain/poromechanics/el1p/problem_poroelastic.hh +++ b/test/multidomain/poromechanics/el1p/problem_poroelastic.hh @@ -47,7 +47,6 @@ class PoroElasticSubProblem : public GeomechanicsFVProblem using Scalar = GetPropType; using Indices = typename GetPropType::Indices; using BoundaryTypes = Dumux::BoundaryTypes::numEq()>; - using CouplingManager = GetPropType; using PrimaryVariables = GetPropType; using ElementVolumeVariables = typename GetPropType::LocalView; @@ -65,10 +64,9 @@ class PoroElasticSubProblem : public GeomechanicsFVProblem public: PoroElasticSubProblem(std::shared_ptr gridGeometry, - std::shared_ptr couplingManagerPtr, + std::shared_ptr> spatialParams, const std::string& paramGroup = "PoroElastic") - : ParentType(gridGeometry, paramGroup) - , couplingManagerPtr_(couplingManagerPtr) + : ParentType(gridGeometry, spatialParams, paramGroup) { problemName_ = getParam("Vtk.OutputName") + "_" + getParamFromGroup(this->paramGroup(), "Problem.Name"); } @@ -92,31 +90,6 @@ public: PrimaryVariables neumannAtPos(const GlobalPosition& globalPos) const { return PrimaryVariables(0.0); } - /*! - * \brief Returns the effective fluid density. - */ - Scalar effectiveFluidDensity(const Element& element, - const SubControlVolume& scv) const - { - // get porous medium flow volume variables from coupling manager - const auto pmFlowVolVars = couplingManager().getPMFlowVolVars(element); - return pmFlowVolVars.density(); - } - - /*! - * \brief Returns the effective pore pressure. - */ - template< class FluxVarsCache > - Scalar effectivePorePressure(const Element& element, - const FVElementGeometry& fvGeometry, - const ElementVolumeVariables& elemVolVars, - const FluxVarsCache& fluxVarsCache) const - { - // get porous medium flow volume variables from coupling manager - const auto pmFlowVolVars = couplingManager().getPMFlowVolVars(element); - return pmFlowVolVars.pressure(); - } - /*! * \brief Specifies which kind of boundary condition should be * used for which equation on a given boundary segment. @@ -140,12 +113,7 @@ public: const SubControlVolume& scv) const { return PrimaryVariables(0.0); } - //! Returns reference to the coupling manager. - const CouplingManager& couplingManager() const - { return *couplingManagerPtr_; } - private: - std::shared_ptr couplingManagerPtr_; static constexpr Scalar eps_ = 3e-6; std::string problemName_; }; diff --git a/test/multidomain/poromechanics/el1p/properties.hh b/test/multidomain/poromechanics/el1p/properties.hh index a28d740405..ddcc44f500 100644 --- a/test/multidomain/poromechanics/el1p/properties.hh +++ b/test/multidomain/poromechanics/el1p/properties.hh @@ -97,8 +97,10 @@ struct FluidSystem template struct SpatialParams { + using CouplingManager = GetPropType; using type = PoroElasticSpatialParams< GetPropType, - GetPropType >; + GetPropType, + CouplingManager>; }; template diff --git a/test/multidomain/poromechanics/el1p/spatialparams_poroelastic.hh b/test/multidomain/poromechanics/el1p/spatialparams_poroelastic.hh index 860fcbde04..0b76afdd1b 100644 --- a/test/multidomain/poromechanics/el1p/spatialparams_poroelastic.hh +++ b/test/multidomain/poromechanics/el1p/spatialparams_poroelastic.hh @@ -35,25 +35,27 @@ namespace Dumux { * \brief Definition of the spatial parameters for the poro-elastic * sub-problem in the coupled poro-mechanical el1p problem. */ -template +template class PoroElasticSpatialParams : public FVPoroElasticSpatialParams< GridGeometry, Scalar, - PoroElasticSpatialParams > + PoroElasticSpatialParams > { - using ThisType = PoroElasticSpatialParams; + using ThisType = PoroElasticSpatialParams; using ParentType = FVPoroElasticSpatialParams; using SubControlVolume = typename GridGeometry::SubControlVolume; using GridView = typename GridGeometry::GridView; using Element = typename GridView::template Codim<0>::Entity; + using FVElementGeometry = typename GridGeometry::LocalView; using GlobalPosition = typename Element::Geometry::GlobalCoordinate; - public: //! Export the type of the lame parameters using LameParams = Dumux::LameParams; - PoroElasticSpatialParams(std::shared_ptr gridGeometry) + PoroElasticSpatialParams(std::shared_ptr gridGeometry, + std::shared_ptr couplingManagerPtr) : ParentType(gridGeometry) + , couplingManagerPtr_(couplingManagerPtr) , initPorosity_(getParam("SpatialParams.InitialPorosity")) { // Young's modulus [Pa] @@ -79,11 +81,41 @@ public: return PorosityDeformation::evaluatePorosity(this->gridGeometry(), element, scv, elemSol, initPorosity_); } + /*! + * \brief Returns the effective fluid density. + */ + Scalar effectiveFluidDensity(const Element& element, + const SubControlVolume& scv) const + { + // get porous medium flow volume variables from coupling manager + const auto pmFlowVolVars = couplingManager().getPMFlowVolVars(element); + return pmFlowVolVars.density(); + } + + /*! + * \brief Returns the effective pore pressure. + */ + template + Scalar effectivePorePressure(const Element& element, + const FVElementGeometry& fvGeometry, + const ElementVolumeVariables& elemVolVars, + const FluxVarsCache& fluxVarsCache) const + { + // get porous medium flow volume variables from coupling manager + const auto pmFlowVolVars = couplingManager().getPMFlowVolVars(element); + return pmFlowVolVars.pressure(); + } + //! Returns the Biot coefficient of the porous medium. Scalar biotCoefficientAtPos(const GlobalPosition& globalPos) const { return 1.0; } + //! Returns reference to the coupling manager. + const CouplingManager& couplingManager() const + { return *couplingManagerPtr_; } + private: + std::shared_ptr couplingManagerPtr_; Scalar initPorosity_; LameParams lameParams_; }; -- GitLab From 9f38e0dd4a3acde87b871bf6025c3602c441d45a Mon Sep 17 00:00:00 2001 From: Yue Wang Date: Mon, 31 Jan 2022 17:35:39 +0100 Subject: [PATCH 4/8] test/el2p move fluid props into spatialparams --- test/multidomain/poromechanics/el2p/main.cc | 3 +- .../poromechanics/el2p/problem_poroelastic.hh | 45 +--------------- .../poromechanics/el2p/properties.hh | 5 +- .../el2p/spatialparams_poroelastic.hh | 51 +++++++++++++++++-- 4 files changed, 55 insertions(+), 49 deletions(-) diff --git a/test/multidomain/poromechanics/el2p/main.cc b/test/multidomain/poromechanics/el2p/main.cc index d43c3f1c68..e3ced45b3c 100644 --- a/test/multidomain/poromechanics/el2p/main.cc +++ b/test/multidomain/poromechanics/el2p/main.cc @@ -93,7 +93,8 @@ int main(int argc, char** argv) using PoroMechProblem = GetPropType; auto twoPSpatialParams = std::make_shared(twoPFvGridGeometry, couplingManager); auto twoPProblem = std::make_shared(twoPFvGridGeometry, twoPSpatialParams, "TwoP"); - auto poroMechProblem = std::make_shared(poroMechFvGridGeometry, couplingManager, "PoroElastic"); + auto poroMechSpatialParams = std::make_shared(poroMechFvGridGeometry, couplingManager); + auto poroMechProblem = std::make_shared(poroMechFvGridGeometry, poroMechSpatialParams, "PoroElastic"); // the solution vectors using SolutionVector = typename Traits::SolutionVector; diff --git a/test/multidomain/poromechanics/el2p/problem_poroelastic.hh b/test/multidomain/poromechanics/el2p/problem_poroelastic.hh index 0c72d7ef8f..64d91f7e81 100644 --- a/test/multidomain/poromechanics/el2p/problem_poroelastic.hh +++ b/test/multidomain/poromechanics/el2p/problem_poroelastic.hh @@ -47,7 +47,6 @@ class PoroElasticSubProblem : public GeomechanicsFVProblem using Scalar = GetPropType; using Indices = typename GetPropType::Indices; using BoundaryTypes = Dumux::BoundaryTypes::numEq()>; - using CouplingManager = GetPropType; using PrimaryVariables = GetPropType; using ElementVolumeVariables = typename GetPropType::LocalView; @@ -65,10 +64,9 @@ class PoroElasticSubProblem : public GeomechanicsFVProblem public: PoroElasticSubProblem(std::shared_ptr gridGeometry, - std::shared_ptr couplingManagerPtr, + std::shared_ptr> spatialParams, const std::string& paramGroup = "PoroElastic") - : ParentType(gridGeometry, paramGroup) - , couplingManagerPtr_(couplingManagerPtr) + : ParentType(gridGeometry, spatialParams, paramGroup) { problemName_ = getParam("Vtk.OutputName") + "_" + getParamFromGroup(this->paramGroup(), "Problem.Name"); } @@ -93,40 +91,6 @@ public: PrimaryVariables neumannAtPos(const GlobalPosition& globalPos) const { return PrimaryVariables(0.0); } - /*! - * \brief Returns the effective fluid density. - */ - Scalar effectiveFluidDensity(const Element& element, const SubControlVolume& scv) const - { - // get porous medium flow volume variables from coupling manager - const auto pmFlowVolVars = couplingManager().getPMFlowVolVars(element); - - Scalar wPhaseDensity = pmFlowVolVars.density(FluidSystem::phase0Idx); - Scalar nPhaseDensity = pmFlowVolVars.density(FluidSystem::phase1Idx); - Scalar Sw = pmFlowVolVars.saturation(FluidSystem::phase0Idx); - Scalar Sn = pmFlowVolVars.saturation(FluidSystem::phase1Idx); - return (wPhaseDensity * Sw + nPhaseDensity * Sn); - } - - /*! - * \brief Returns the effective pore pressure. - */ - template< class FluxVarsCache > - Scalar effectivePorePressure(const Element& element, - const FVElementGeometry& fvGeometry, - const ElementVolumeVariables& elemVolVars, - const FluxVarsCache& fluxVarsCache) const - { - // get porous medium flow volume variables from coupling manager - const auto pmFlowVolVars = couplingManager().getPMFlowVolVars(element); - - Scalar pw = pmFlowVolVars.pressure(FluidSystem::phase0Idx); - Scalar pn = pmFlowVolVars.pressure(FluidSystem::phase1Idx); - Scalar Sw = pmFlowVolVars.saturation(FluidSystem::phase0Idx); - Scalar Sn = pmFlowVolVars.saturation(FluidSystem::phase1Idx); - return (pw * Sw + pn * Sn); - } - /*! * \brief Specifies which kind of boundary condition should be * used for which equation on a given boundary segment. @@ -150,12 +114,7 @@ public: const SubControlVolume& scv) const { return PrimaryVariables(0.0); } - //! Returns reference to the coupling manager. - const CouplingManager& couplingManager() const - { return *couplingManagerPtr_; } - private: - std::shared_ptr couplingManagerPtr_; static constexpr Scalar eps_ = 3e-6; std::string problemName_; }; diff --git a/test/multidomain/poromechanics/el2p/properties.hh b/test/multidomain/poromechanics/el2p/properties.hh index c87f8a4761..44d902738b 100644 --- a/test/multidomain/poromechanics/el2p/properties.hh +++ b/test/multidomain/poromechanics/el2p/properties.hh @@ -102,8 +102,11 @@ struct FluidSystem template struct SpatialParams { + using CouplingManager = GetPropType; + using FluidSystem = GetPropType; using type = PoroElasticSpatialParams< GetPropType, - GetPropType >; + GetPropType, + CouplingManager, FluidSystem>; }; template diff --git a/test/multidomain/poromechanics/el2p/spatialparams_poroelastic.hh b/test/multidomain/poromechanics/el2p/spatialparams_poroelastic.hh index 2d2646b5a2..4dea4d2893 100644 --- a/test/multidomain/poromechanics/el2p/spatialparams_poroelastic.hh +++ b/test/multidomain/poromechanics/el2p/spatialparams_poroelastic.hh @@ -35,25 +35,29 @@ namespace Dumux { * \brief Definition of the spatial parameters for the poro-elastic * sub-problem in the coupled poro-mechanical el1p problem. */ -template +template class PoroElasticSpatialParams : public FVPoroElasticSpatialParams< GridGeometry, Scalar, - PoroElasticSpatialParams > + PoroElasticSpatialParams > { - using ThisType = PoroElasticSpatialParams; + using ThisType = PoroElasticSpatialParams; using ParentType = FVPoroElasticSpatialParams; using SubControlVolume = typename GridGeometry::SubControlVolume; using GridView = typename GridGeometry::GridView; using Element = typename GridView::template Codim<0>::Entity; + using FVElementGeometry = typename GridGeometry::LocalView; using GlobalPosition = typename Element::Geometry::GlobalCoordinate; public: //! Export the type of the lame parameters using LameParams = Dumux::LameParams; - PoroElasticSpatialParams(std::shared_ptr gridGeometry) + PoroElasticSpatialParams(std::shared_ptr gridGeometry, + std::shared_ptr couplingManagerPtr) : ParentType(gridGeometry) + , couplingManagerPtr_(couplingManagerPtr) , initPorosity_(getParam("SpatialParams.InitialPorosity")) { // Young's modulus [Pa] @@ -79,6 +83,40 @@ public: return PorosityDeformation::evaluatePorosity(this->gridGeometry(), element, scv, elemSol, initPorosity_); } + /*! + * \brief Returns the effective fluid density. + */ + Scalar effectiveFluidDensity(const Element& element, const SubControlVolume& scv) const + { + // get porous medium flow volume variables from coupling manager + const auto pmFlowVolVars = couplingManager().getPMFlowVolVars(element); + + Scalar wPhaseDensity = pmFlowVolVars.density(FluidSystem::phase0Idx); + Scalar nPhaseDensity = pmFlowVolVars.density(FluidSystem::phase1Idx); + Scalar Sw = pmFlowVolVars.saturation(FluidSystem::phase0Idx); + Scalar Sn = pmFlowVolVars.saturation(FluidSystem::phase1Idx); + return (wPhaseDensity * Sw + nPhaseDensity * Sn); + } + + /*! + * \brief Returns the effective pore pressure. + */ + template + Scalar effectivePorePressure(const Element& element, + const FVElementGeometry& fvGeometry, + const ElementVolumeVariables& elemVolVars, + const FluxVarsCache& fluxVarsCache) const + { + // get porous medium flow volume variables from coupling manager + const auto pmFlowVolVars = couplingManager().getPMFlowVolVars(element); + + Scalar pw = pmFlowVolVars.pressure(FluidSystem::phase0Idx); + Scalar pn = pmFlowVolVars.pressure(FluidSystem::phase1Idx); + Scalar Sw = pmFlowVolVars.saturation(FluidSystem::phase0Idx); + Scalar Sn = pmFlowVolVars.saturation(FluidSystem::phase1Idx); + return (pw * Sw + pn * Sn); + } + //! Returns the Biot coefficient of the porous medium. Scalar biotCoefficientAtPos(const GlobalPosition& globalPos) const { return 1.0; } @@ -87,7 +125,12 @@ public: Scalar temperatureAtPos(const GlobalPosition& globalPos) const { return 273.15 + 10; } + //! Returns reference to the coupling manager. + const CouplingManager& couplingManager() const + { return *couplingManagerPtr_; } + private: + std::shared_ptr couplingManagerPtr_; Scalar initPorosity_; LameParams lameParams_; }; -- GitLab From a98f44c186d65b1fec0c17bf94dcc03d66b866aa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dennis=20Gl=C3=A4ser?= Date: Fri, 11 Feb 2022 09:41:22 +0000 Subject: [PATCH 5/8] [poroelastic][spatialparams] fix typo in docu --- test/geomechanics/poroelastic/spatialparams.hh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/geomechanics/poroelastic/spatialparams.hh b/test/geomechanics/poroelastic/spatialparams.hh index 2315497203..d7ad03ddaf 100644 --- a/test/geomechanics/poroelastic/spatialparams.hh +++ b/test/geomechanics/poroelastic/spatialparams.hh @@ -78,7 +78,7 @@ public: * \brief Returns the effective pore pressure * * \note We use the x-displacement as pressure solution. The shift to - * higher values is done to see a mor pronounced effect in stresses. + * higher values is done to see a more pronounced effect in stresses. * * \param globalPos The global position */ -- GitLab From c646d0126565d359cb61e0adb7ae466d1fa43d4a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dennis=20Gl=C3=A4ser?= Date: Fri, 11 Feb 2022 11:59:58 +0100 Subject: [PATCH 6/8] [test][poroelastic] use correct source term The source term so far did not take into account contributions from the pore pressure gradient. This is fixed in this commit and makes the discrete solution agree better with the exact solution, which is why the reference solution is modified here. --- test/geomechanics/poroelastic/main.cc | 2 +- test/geomechanics/poroelastic/problem.hh | 25 +- .../geomechanics/poroelastic/spatialparams.hh | 39 +-- .../test_poroelastic_box-reference.vtu | 276 +++++++++--------- 4 files changed, 170 insertions(+), 172 deletions(-) diff --git a/test/geomechanics/poroelastic/main.cc b/test/geomechanics/poroelastic/main.cc index 83889dac40..a49d03f5d5 100644 --- a/test/geomechanics/poroelastic/main.cc +++ b/test/geomechanics/poroelastic/main.cc @@ -148,7 +148,7 @@ int main(int argc, char** argv) // also, add exact solution to the output SolutionVector xExact(gridGeometry->numDofs()); for (const auto& v : vertices(leafGridView)) - xExact[ gridGeometry->vertexMapper().index(v) ] = problem->spatialParams().exactSolution(v.geometry().center()); + xExact[ gridGeometry->vertexMapper().index(v) ] = problem->exactDisplacement(v.geometry().center()); vtkWriter.addField(xExact, "u_exact"); // Furthermore, write out element stress tensors diff --git a/test/geomechanics/poroelastic/problem.hh b/test/geomechanics/poroelastic/problem.hh index d443e04c34..ec3e40728a 100644 --- a/test/geomechanics/poroelastic/problem.hh +++ b/test/geomechanics/poroelastic/problem.hh @@ -57,9 +57,6 @@ class PoroElasticProblem : public GeomechanicsFVProblem using GlobalPosition = typename Element::Geometry::GlobalCoordinate; static constexpr Scalar pi = M_PI; - static constexpr int dim = GridView::dimension; - static constexpr int dimWorld = GridView::dimensionworld; - using GradU = Dune::FieldMatrix; public: PoroElasticProblem(std::shared_ptr gridGeometry) @@ -123,33 +120,29 @@ public: const Scalar dE12_dy = 0.5*pi_2_square*(cos_2pix*cos_2piy - (x-x*x)*sin_2piy); const Scalar dE21_dx = 0.5*((1.0-2*x)*pi_2*cos_2piy - pi_2_square*sin_2pix*sin_2piy); - // compute exact divergence of sigma + // The source term is composed of the divergence of the stress tensor + // resulting from the exact solution minus the pressure gradient PrimaryVariables divSigma(0.0); divSigma[Indices::momentum(/*x-dir*/0)] = lambda*(dE11_dx + dE22_dx) + 2*mu*(dE11_dx + dE12_dy); divSigma[Indices::momentum(/*y-dir*/1)] = lambda*(dE11_dy + dE22_dy) + 2*mu*(dE21_dx + dE22_dy); + divSigma -= this->spatialParams().effectivePorePressureGradient(ipGlobal); return divSigma; } /*! - * \brief Evaluates the exact displacement gradient to this problem at a given position. + * \brief Evaluates the exact displacement to this problem at a given position. */ - GradU exactGradient(const GlobalPosition& globalPos) const + PrimaryVariables exactDisplacement(const GlobalPosition& globalPos) const { using std::sin; - using std::cos; const auto x = globalPos[0]; const auto y = globalPos[1]; - static constexpr int xIdx = Indices::momentum(/*x-dir*/0); - static constexpr int yIdx = Indices::momentum(/*y-dir*/1); - - GradU exactGrad(0.0); - exactGrad[xIdx][xIdx] = (1-2*x)*sin(2*pi*y); - exactGrad[xIdx][yIdx] = (x - x*x)*2*pi*cos(2*pi*y); - exactGrad[yIdx][xIdx] = 2*pi*cos(2*pi*x)*sin(2*pi*y); - exactGrad[yIdx][yIdx] = 2*pi*sin(2*pi*x)*cos(2*pi*y); - return exactGrad; + PrimaryVariables exact(0.0); + exact[Indices::momentum(/*x-dir*/0)] = (x-x*x)*sin(2*pi*y); + exact[Indices::momentum(/*y-dir*/1)] = sin(2*pi*x)*sin(2*pi*y); + return exact; } private: diff --git a/test/geomechanics/poroelastic/spatialparams.hh b/test/geomechanics/poroelastic/spatialparams.hh index d7ad03ddaf..bccd9c8f24 100644 --- a/test/geomechanics/poroelastic/spatialparams.hh +++ b/test/geomechanics/poroelastic/spatialparams.hh @@ -83,7 +83,28 @@ public: * \param globalPos The global position */ Scalar effectivePorePressureAtPos(const GlobalPosition& globalPos) const - { return exactSolution(globalPos)[0] + 10; } + { + using std::sin; + const auto x = globalPos[0]; + const auto y = globalPos[1]; + return (x-x*x)*sin(2.*pi*y) + 10; + } + + /*! + * \brief Returns the effective pore pressure gradient + * \param globalPos The global position + */ + GlobalPosition effectivePorePressureGradient(const GlobalPosition& globalPos) const + { + using std::sin; + using std::cos; + const auto x = globalPos[0]; + const auto y = globalPos[1]; + return {{ + (1.-2.*x)*sin(2.*pi*y), + 2.*pi*(x-x*x)*cos(2.*pi*y), + }}; + } /*! * \brief Returns the effective fluid density. @@ -103,22 +124,6 @@ public: Scalar biotCoefficientAtPos(const GlobalPosition& globalPos) const { return 1.0; } - /*! - * \brief Evaluates the exact displacement to this problem at a given position. - */ - PrimaryVariables exactSolution(const GlobalPosition& globalPos) const - { - using std::sin; - - const auto x = globalPos[0]; - const auto y = globalPos[1]; - - PrimaryVariables exact(0.0); - exact[Indices::momentum(/*x-dir*/0)] = (x-x*x)*sin(2*pi*y); - exact[Indices::momentum(/*y-dir*/1)] = sin(2*pi*x)*sin(2*pi*y); - return exact; - } - private: LameParams lameParams_; }; diff --git a/test/references/test_poroelastic_box-reference.vtu b/test/references/test_poroelastic_box-reference.vtu index 81e85a515b..198fe9dad2 100644 --- a/test/references/test_poroelastic_box-reference.vtu +++ b/test/references/test_poroelastic_box-reference.vtu @@ -4,47 +4,47 @@ - 0.655203 0.868329 0.672437 0.830133 0.899819 0.861442 0.890522 0.846568 0.813685 0.749571 0 0 - 1 1 1 1 1 1 1 1 1 1 0.621734 0.586077 - 0.538282 0.473145 0.383017 0.252817 0.051129 0 0 0 0 0.431814 1 1 - 1 1 0.541949 0.795026 0.836609 0.812389 0.629529 0.0797655 0 1 1 1 - 1 0.635513 0.86485 0.896869 0.885038 0.788117 0.527552 1 1 1 1 1 - 0.643345 0.86925 0.901265 0.892533 0.818094 0.65486 1 1 1 1 1 0.57287 - 0.819178 0.862068 0.855446 0.788806 0.680536 0 0 0 0 0.173414 0.348159 0.461374 - 0.537691 0.591657 0.632757 0.633306 0.0286361 0.764376 0.833118 0.825643 0.727822 0 1 1 - 1 0 0.456711 0.520115 0.85746 0.895792 0.887766 0.81069 0 1 1 1 - 1 0 0.602325 0.86295 0.897555 0.888803 0.81162 0 1 1 1 1 + 0.655433 0.868323 0.673007 0.829742 0.899778 0.860935 0.890441 0.845739 0.813398 0.74706 0 0 + 1 1 1 1 1 1 1 1 1 1 0.622657 0.582873 + 0.530497 0.459697 0.362053 0.221299 0.00392792 0 0 0 0 0.43368 1 1 + 1 1 0.532211 0.793253 0.835704 0.811659 0.629244 0.0846488 0 1 1 1 + 1 0.633066 0.864543 0.896728 0.884937 0.788132 0.528307 1 1 1 1 1 + 0.645392 0.869508 0.901388 0.892633 0.81819 0.654846 1 1 1 1 1 0.580769 + 0.820502 0.862699 0.855891 0.788993 0.680161 0 0 0 0 0.208237 0.370369 0.475464 + 0.546141 0.595773 0.633181 0.632466 0.021907 0.765078 0.833856 0.82673 0.730821 0 1 1 + 1 0 0.454613 0.518772 0.85745 0.895845 0.887874 0.811065 0 1 1 1 + 1 0 0.602019 0.862957 0.897598 0.888887 0.811913 0 1 1 1 1 0 - 0 0 0 0 0 0 0 0 0 0.0481153 0.363957 0 - 0 0 0 0.0934166 0.58934 0 0 0 0 0.130954 0.589376 0 - 0 0 0 0.155976 0.364446 0 0 0 0 0.164956 0.000518449 0 - 0 0 0 0.156554 -0.363477 0 0 0 0 0.131993 -0.588613 0 - 0 0 0 0.0946667 -0.588909 0 0 0 0 0.0491385 -0.363932 0 - 0 0 0 0 0 0 0 0 0 0.0838484 0.590559 0 - 0.152264 0.953557 0 0.20395 0.95324 0 0.236441 0.590205 0 0.247828 0.0029933 0 - 0.23735 -0.584491 0 0.205573 -0.948337 0 0.154177 -0.949978 0 0.0853257 -0.588714 0 - 0 0 0 0 0 0 0.0869138 0.59232 0 0.150812 0.955588 0 - 0.193915 0.955417 0 0.218695 0.592875 0 0.227034 0.00630311 0 0.219587 -0.580797 0 - 0.195501 -0.944912 0 0.152661 -0.947661 0 0.0883236 -0.587912 0 0 0 0 - 0 0 0 0.0556681 0.368707 0 0.0894817 0.594634 0 0.106461 0.595281 0 - 0.11319 0.371574 0 0.114957 0.00905389 0 0.113735 -0.354203 0 0.107428 -0.580103 0 - 0.0906056 -0.583065 0 0.0565214 -0.36215 0 0 0 0 0 0 0 - 0.00219115 0.00512468 0 -0.00779061 0.00822956 0 -0.0239508 0.00992753 0 -0.0381341 0.0105005 0 - -0.043704 0.0101149 0 -0.0381341 0.00891322 0 -0.0239508 0.00705559 0 -0.00779061 0.00474666 0 - 0.00219115 0.00226344 0 0 0 0 0 0 0 -0.0529906 -0.3597 0 - -0.103629 -0.580047 0 -0.147159 -0.577593 0 -0.177014 -0.352809 0 -0.187839 0.00905389 0 - -0.177559 0.37018 0 -0.148126 0.592771 0 -0.104753 0.591616 0 -0.0538439 0.366257 0 - 0 0 0 0 0 0 -0.0888655 -0.586512 0 -0.161633 -0.945823 0 - -0.216467 -0.943322 0 -0.250905 -0.579895 0 -0.262955 0.00630311 0 -0.251797 0.591973 0 - -0.218052 0.953827 0 -0.163482 0.95375 0 -0.0902753 0.59092 0 0 0 0 - 0 0 0 -0.0918459 -0.588504 0 -0.160151 -0.949473 0 -0.206475 -0.947793 0 - -0.233242 -0.584154 0 -0.242265 0.0029933 0 -0.234151 0.589868 0 -0.208099 0.952696 0 - -0.162064 0.953053 0 -0.0933231 0.59035 0 0 0 0 0 0 0 - -0.0603096 -0.364402 0 -0.0996524 -0.589188 0 -0.122767 -0.588728 0 -0.134401 -0.36351 0 - -0.138052 0.000518449 0 -0.134979 0.364478 0 -0.123806 0.589491 0 -0.100902 0.589619 0 - -0.0613327 0.364427 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0.0486589 0.363955 0 + 0 0 0 0.0940824 0.589126 0 0 0 0 0.131509 0.588989 0 + 0 0 0 0.156285 0.363953 0 0 0 0 0.164956 -9.51701e-06 0 + 0 0 0 0.156245 -0.36397 0 0 0 0 0.131438 -0.589 0 + 0 0 0 0.0940009 -0.589123 0 0 0 0 0.0485949 -0.363933 0 + 0 0 0 0 0 0 0 0 0 0.0846379 0.589629 0 + 0.153289 0.951747 0 0.204822 0.95076 0 0.23693 0.587317 0 0.247828 -3.19437e-05 0 + 0.236861 -0.587379 0 0.204701 -0.950817 0 0.153151 -0.951788 0 0.0845361 -0.589645 0 + 0 0 0 0 0 0 0.0876695 0.590077 0 0.151807 0.951569 0 + 0.19477 0.950106 0 0.219177 0.586777 0 0.227034 -5.86404e-05 0 0.219106 -0.586895 0 + 0.194646 -0.950224 0 0.151666 -0.951679 0 0.0875678 -0.590155 0 0 0 0 + 0 0 0 0.0561262 0.365362 0 0.0900875 0.588766 0 0.106983 0.587607 0 + 0.113485 0.362807 0 0.114957 -7.98866e-05 0 0.11344 -0.36297 0 0.106906 -0.587777 0 + 0.0899998 -0.588934 0 0.0560633 -0.365495 0 0 0 0 0 0 0 + 0.00219115 0.0013533 0 -0.00779061 0.00164582 0 -0.0239508 0.0013414 0 -0.0381341 0.000703644 0 + -0.043704 -8.79524e-05 0 -0.0381341 -0.000883643 0 -0.0239508 -0.00153054 0 -0.00779061 -0.00183707 0 + 0.00219115 -0.00150793 0 0 0 0 0 0 0 -0.0534487 -0.363046 0 + -0.104235 -0.585916 0 -0.147681 -0.585267 0 -0.177309 -0.361576 0 -0.187839 -7.98866e-05 0 + -0.177264 0.361413 0 -0.147603 0.585097 0 -0.104147 0.585747 0 -0.0533858 0.362912 0 + 0 0 0 0 0 0 -0.0896213 -0.588755 0 -0.162628 -0.949841 0 + -0.217322 -0.948633 0 -0.251387 -0.585993 0 -0.262955 -5.86404e-05 0 -0.251316 0.585875 0 + -0.217198 0.948515 0 -0.162487 0.949732 0 -0.0895196 0.588677 0 0 0 0 + 0 0 0 -0.0926354 -0.589435 0 -0.161177 -0.951283 0 -0.207348 -0.950273 0 + -0.233731 -0.587042 0 -0.242265 -3.19437e-05 0 -0.233662 0.58698 0 -0.207226 0.950216 0 + -0.161038 0.951242 0 -0.0925336 0.589419 0 0 0 0 0 0 0 + -0.0608532 -0.364404 0 -0.100318 -0.589402 0 -0.123322 -0.589115 0 -0.13471 -0.364003 0 + -0.138052 -9.51701e-06 0 -0.13467 0.363986 0 -0.123252 0.589104 0 -0.100237 0.589404 0 + -0.0607892 0.364425 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 @@ -96,112 +96,112 @@ 0 0 0 0 - -4.93165 4.12072 0 0.852608 3.66916 0 2.85535 2.24407 0 0.218572 0.61999 0 - -6.15744 -0.429951 0 -13.9581 -0.42486 0 -20.328 0.63411 0 -22.953 2.26364 0 - -20.9337 3.68783 0 -15.1281 4.1307 0 -3.81349 9.90249 0 -0.78345 6.82962 0 - -0.194182 1.31561 0 -2.56243 -4.34505 0 -7.30686 -7.87801 0 -12.952 -7.87811 0 - -17.6815 -4.34606 0 -20.0213 1.31153 0 -19.393 6.81939 0 -16.3202 9.88833 0 - -4.90703 11.8594 0 -6.12019 7.2788 0 -7.30173 -0.119743 0 -8.4609 -7.53357 0 - -9.59592 -12.1232 0 -10.7152 -12.1314 0 -11.8322 -7.55796 0 -12.9572 -0.159769 0 - -14.092 7.22495 0 -15.249 11.7962 0 -7.9971 9.29781 0 -13.0175 4.9662 0 - -15.5601 -1.48308 0 -15.0532 -7.79209 0 -12.0826 -11.6667 0 -8.16684 -11.6829 0 - -5.18181 -7.8394 0 -4.6475 -1.55839 0 -7.15222 4.86807 0 -12.1262 9.1826 0 - -11.9147 3.20355 0 -18.8243 0.782829 0 -21.7509 -2.25339 0 -19.7582 -5.0487 0 - -13.7907 -6.72891 0 -6.30428 -6.74989 0 -0.331271 -5.11006 0 1.6719 -2.35047 0 - -1.24022 0.657061 0 -8.13192 3.05556 0 -15.1576 -4.09757 0 -21.3102 -3.68262 0 - -23.4907 -2.14893 0 -20.7592 -0.367308 0 -14.0591 0.784621 0 -5.84597 0.763641 0 - 0.848633 -0.428665 0 3.56978 -2.24601 0 1.37475 -3.80839 0 -4.7958 -4.24556 0 - -16.4854 -9.82087 0 -19.5249 -6.73537 0 -20.1143 -1.22357 0 -17.6729 4.45011 0 - -12.7844 7.99054 0 -6.96622 7.97442 0 -2.09211 4.4028 0 0.321887 -1.29888 0 - -0.305422 -6.8335 0 -3.39137 -9.93608 0 -15.3938 -11.78 0 -14.1611 -7.21778 0 - -12.9285 0.156543 0 -11.696 7.5472 0 -10.4603 12.117 0 -9.22851 12.1088 0 - -8.01093 7.52281 0 -6.81264 0.116517 0 -5.62675 -7.27163 0 -4.45025 -11.8432 0 - -12.2852 -9.2137 0 -7.28242 -4.93719 0 -4.73798 1.46346 0 -5.17088 7.71407 0 - -7.99828 11.5423 0 -11.7428 11.5422 0 -14.5851 7.71306 0 -15.0465 1.45938 0 - -12.5411 -4.94742 0 -7.58112 -9.22786 0 -8.15059 -3.04093 0 -1.60499 -0.648233 0 - 1.14365 2.22879 0 -0.756332 4.82386 0 -6.40314 6.36481 0 -13.4813 6.3699 0 - -19.1342 4.83798 0 -21.046 2.24836 0 -18.314 -0.629562 0 -11.7896 -3.03094 0 + -4.91536 4.12614 0 0.854117 3.67913 0 2.84601 2.25455 0 0.202398 0.627571 0 + -6.17691 -0.427214 0 -13.9776 -0.427597 0 -20.3442 0.62653 0 -22.9623 2.25316 0 + -20.9321 3.67786 0 -15.1119 4.12528 0 -3.78278 9.89563 0 -0.797953 6.82475 0 + -0.23901 1.31397 0 -2.62619 -4.34522 0 -7.37973 -7.87793 0 -13.0249 -7.87819 0 + -17.7453 -4.34589 0 -20.0661 1.31317 0 -19.4075 6.82425 0 -16.2895 9.89519 0 + -4.8738 11.8274 0 -6.14113 7.2516 0 -7.36094 -0.139846 0 -8.54401 -7.54577 0 + -9.6905 -12.1273 0 -10.8098 -12.1273 0 -11.9153 -7.54576 0 -13.0164 -0.139666 0 + -14.1129 7.25215 0 -15.2157 11.8283 0 -7.97171 9.23895 0 -13.0354 4.91634 0 + -15.6089 -1.52128 0 -15.1215 -7.81608 0 -12.1603 -11.6749 0 -8.24455 -11.6747 0 + -5.25015 -7.81541 0 -4.69634 -1.52019 0 -7.17014 4.91793 0 -12.1008 9.24145 0 + -11.9052 3.1278 0 -18.8313 0.718834 0 -21.7697 -2.30275 0 -19.7845 -5.07991 0 + -13.8205 -6.73959 0 -6.33412 -6.73922 0 -0.357515 -5.07885 0 1.65312 -2.30111 0 + -1.24721 0.721057 0 -8.12244 3.13131 0 -15.167 -4.17332 0 -21.3032 -3.74662 0 + -23.472 -2.19829 0 -20.7329 -0.398519 0 -14.0292 0.773945 0 -5.81614 0.774317 0 + 0.874877 -0.397454 0 3.58856 -2.19665 0 1.38173 -3.74439 0 -4.80528 -4.16981 0 + -16.5108 -9.87973 0 -19.507 -6.78522 0 -20.0654 -1.26177 0 -17.6046 4.42612 0 + -12.7067 7.98237 0 -6.88852 7.98259 0 -2.02377 4.42679 0 0.370721 -1.26068 0 + -0.287512 -6.78364 0 -3.41677 -9.87723 0 -15.427 -11.812 0 -14.1402 -7.24498 0 + -12.8693 0.13644 0 -11.6128 7.535 0 -10.3658 12.1129 0 -9.13394 12.1129 0 + -7.92782 7.53501 0 -6.75343 0.13662 0 -5.60581 -7.24443 0 -4.48348 -11.8111 0 + -12.3159 -9.22056 0 -7.26792 -4.94206 0 -4.69315 1.46182 0 -5.10712 7.7139 0 + -7.92541 11.5424 0 -11.6699 11.5421 0 -14.5214 7.71323 0 -15.0017 1.46102 0 + -12.5266 -4.94256 0 -7.61182 -9.221 0 -8.16688 -3.03551 0 -1.6065 -0.638264 0 + 1.15299 2.23927 0 -0.740157 4.83144 0 -6.38366 6.36755 0 -13.4618 6.36717 0 + -19.1181 4.8304 0 -21.0367 2.23788 0 -18.3155 -0.639531 0 -11.8059 -3.03636 0 - 5.08303 4.12072 0 10.892 3.66916 0 12.9133 2.24407 0 10.2889 0.61999 0 - 3.91904 -0.429951 0 -3.88166 -0.42486 0 -10.2577 0.63411 0 -12.895 2.26364 0 - -10.8943 3.68783 0 -5.11347 4.1307 0 6.22494 9.90249 0 9.3197 6.82962 0 - 9.95751 1.31561 0 7.62162 -4.34505 0 2.89337 -7.87801 0 -2.75182 -7.87811 0 - -7.49749 -4.34606 0 -9.86961 1.31153 0 -9.28988 6.81939 0 -6.28175 9.88833 0 - 5.14047 11.8594 0 4.00731 7.2788 0 2.88577 -0.119743 0 1.7666 -7.53357 0 - 0.651581 -12.1232 0 -0.46772 -12.1314 0 -1.60472 -7.55796 0 -2.76967 -0.159769 0 - -3.96447 7.22495 0 -5.20146 11.7962 0 2.04133 9.29781 0 -2.91432 4.9662 0 - -5.40841 -1.48308 0 -4.86912 -7.79209 0 -1.88232 -11.6667 0 2.03339 -11.6829 0 - 5.00224 -7.8394 0 5.50419 -1.55839 0 2.95093 4.86807 0 -2.08773 9.1826 0 - -1.90004 3.20355 0 -8.78491 0.782829 0 -11.693 -2.25339 0 -9.68791 -5.0487 0 - -3.71419 -6.72891 0 3.7722 -6.74989 0 9.73903 -5.11006 0 11.7298 -2.35047 0 - 8.79918 0.657061 0 1.88275 3.05556 0 -5.17223 -4.09757 0 -11.3496 -3.68262 0 - -13.5487 -2.14893 0 -10.8295 -0.367308 0 -4.13555 0.784621 0 4.07754 0.763641 0 - 10.7783 -0.428665 0 13.5118 -2.24601 0 11.3353 -3.80839 0 5.18952 -4.24556 0 - -6.5238 -9.82087 0 -9.62804 -6.73537 0 -10.266 -1.22357 0 -7.85696 4.45011 0 - -2.98462 7.99054 0 2.83355 7.97442 0 7.72384 4.4028 0 10.1702 -1.29888 0 - 9.59143 -6.8335 0 6.5702 -9.93608 0 -5.44126 -11.78 0 -4.28859 -7.21778 0 - -3.11596 0.156543 0 -1.92345 7.5472 0 -0.707847 12.117 0 0.523986 12.1088 0 - 1.76157 7.52281 0 2.99986 0.116517 0 4.24575 -7.27163 0 5.50225 -11.8432 0 - -2.32365 -9.2137 0 2.61443 -4.93719 0 5.11033 1.46346 0 4.64507 7.71407 0 - 1.80149 11.5423 0 -1.94305 11.5422 0 -4.7692 7.71306 0 -5.19823 1.45938 0 - -2.64424 -4.94742 0 2.38045 -9.22786 0 1.83473 -3.04093 0 8.35561 -0.648233 0 - 11.0857 2.22879 0 9.17337 4.82386 0 3.52038 6.36481 0 -3.55777 6.3699 0 - -9.20453 4.83798 0 -11.104 2.24836 0 -8.35336 -0.629562 0 -1.80429 -3.03094 0 + 5.09931 4.12614 0 10.8935 3.67913 0 12.904 2.25455 0 10.2727 0.627571 0 + 3.89957 -0.427214 0 -3.90114 -0.427597 0 -10.2739 0.62653 0 -12.9044 2.25316 0 + -10.8927 3.67786 0 -5.09718 4.12528 0 6.25564 9.89563 0 9.3052 6.82475 0 + 9.91268 1.31397 0 7.55786 -4.34522 0 2.82051 -7.87793 0 -2.82468 -7.87819 0 + -7.56125 -4.34589 0 -9.91444 1.31317 0 -9.30439 6.82425 0 -6.25104 9.89519 0 + 5.1737 11.8274 0 3.98637 7.2516 0 2.82656 -0.139846 0 1.68349 -7.54577 0 + 0.557004 -12.1273 0 -0.562296 -12.1273 0 -1.68783 -7.54576 0 -2.82887 -0.139666 0 + -3.9854 7.25215 0 -5.16822 11.8283 0 2.06672 9.23895 0 -2.93223 4.91634 0 + -5.45725 -1.52128 0 -4.93746 -7.81608 0 -1.96002 -11.6749 0 1.95569 -11.6747 0 + 4.9339 -7.81541 0 5.45536 -1.52019 0 2.93301 4.91793 0 -2.06233 9.24145 0 + -1.89056 3.1278 0 -8.79189 0.718834 0 -11.7118 -2.30275 0 -9.71415 -5.07991 0 + -3.74403 -6.73959 0 3.74236 -6.73922 0 9.71279 -5.07885 0 11.7111 -2.30111 0 + 8.79219 0.721057 0 1.89224 3.13131 0 -5.18172 -4.17332 0 -11.3426 -3.74662 0 + -13.5299 -2.19829 0 -10.8032 -0.398519 0 -4.10571 0.773945 0 4.10738 0.774317 0 + 10.8046 -0.397454 0 13.5306 -2.19665 0 11.3423 -3.74439 0 5.18004 -4.16981 0 + -6.5492 -9.87973 0 -9.61012 -6.78522 0 -10.2171 -1.26177 0 -7.78862 4.42612 0 + -2.90691 7.98237 0 2.91125 7.98259 0 7.79218 4.42679 0 10.219 -1.26068 0 + 9.60934 -6.78364 0 6.5448 -9.87723 0 -5.4745 -11.812 0 -4.26766 -7.24498 0 + -3.05676 0.13644 0 -1.84034 7.535 0 -0.613271 12.1129 0 0.618563 12.1129 0 + 1.84468 7.53501 0 3.05907 0.13662 0 4.26669 -7.24443 0 5.46902 -11.8111 0 + -2.35435 -9.22056 0 2.62893 -4.94206 0 5.15516 1.46182 0 4.70883 7.7139 0 + 1.87436 11.5424 0 -1.87018 11.5421 0 -4.70544 7.71323 0 -5.1534 1.46102 0 + -2.62974 -4.94256 0 2.34975 -9.221 0 1.81844 -3.03551 0 8.3541 -0.638264 0 + 11.0951 2.23927 0 9.18954 4.83144 0 3.53986 6.36755 0 -3.53829 6.36717 0 + -9.18835 4.8304 0 -11.0946 2.23788 0 -8.35487 -0.639531 0 -1.82058 -3.03636 0 - 4.12072 1.38517 0 3.66916 19.0125 0 2.24407 25.6789 0 0.61999 18.7946 0 - -0.429951 0.962239 0 -0.42486 -21.0493 0 0.63411 -38.8786 0 2.26364 -45.7569 0 - 3.68783 -39.0799 0 4.1307 -21.424 0 9.90249 -1.9207 0 6.82962 8.75862 0 - 1.31561 12.583 0 -4.34505 8.07977 0 -7.87801 -3.14952 0 -7.87811 -16.9452 0 - -4.34606 -28.1695 0 1.31153 -32.6627 0 6.81939 -28.8225 0 9.88833 -18.1265 0 - 11.8594 -8.28707 0 7.2788 -8.69065 0 -0.119743 -9.11337 0 -7.53357 -9.50936 0 - -12.1232 -9.87084 0 -12.1314 -10.2167 0 -7.55796 -10.5726 0 -0.159769 -10.9576 0 - 7.22495 -11.3658 0 11.7962 -11.7599 0 9.29781 -15.321 0 4.9662 -26.663 0 - -1.48308 -31.1836 0 -7.79209 -27.3121 0 -11.6667 -16.6557 0 -11.6829 -3.40656 0 - -7.8394 7.25414 0 -1.55839 11.1338 0 4.86807 6.62336 0 9.1826 -4.71401 0 - 3.20355 -20.3435 0 0.782829 -38.3007 0 -2.25339 -45.2025 0 -5.0487 -38.5377 0 - -6.72891 -20.9149 0 -6.74989 0.892307 0 -5.11006 18.5167 0 -2.35047 25.1846 0 - 0.657061 18.2863 0 3.05556 0.330589 0 -4.09757 -21.4381 0 -3.68262 -39.1599 0 - -2.14893 -45.8129 0 -0.367308 -38.895 0 0.784621 -21.0186 0 0.763641 1.04115 0 - -0.428665 18.9159 0 -2.24601 25.8308 0 -3.80839 19.1742 0 -4.24556 1.45103 0 - -9.82087 -18.1845 0 -6.73537 -28.9085 0 -1.22357 -32.7771 0 4.45011 -28.2434 0 - 7.99054 -16.9236 0 7.97442 -3.01412 0 4.4028 8.3013 0 -1.29888 12.8268 0 - -6.8335 8.9482 0 -9.93608 -1.78051 0 -11.78 -11.8194 0 -7.21778 -11.4525 0 - 0.156543 -11.0677 0 7.5472 -10.6464 0 12.117 -10.1903 0 12.1088 -9.72223 0 - 7.52281 -9.2716 0 0.116517 -8.86131 0 -7.27163 -8.49105 0 -11.8432 -8.13362 0 - -9.2137 -4.76007 0 -4.93719 6.55828 0 1.46346 11.0378 0 7.71407 7.19131 0 - 11.5423 -3.38143 0 11.5422 -16.5238 0 7.71306 -27.1015 0 1.45938 -30.9581 0 - -4.94742 -26.4944 0 -9.22786 -15.1927 0 -3.04093 0.343648 0 -0.648233 18.2537 0 - 2.22879 25.1643 0 4.82386 18.5211 0 6.36481 0.929716 0 6.3699 -20.8427 0 - 4.83798 -38.4371 0 2.24836 -45.0863 0 -0.629562 -38.1863 0 -3.03094 -20.3048 0 + 4.12614 1.39055 0 3.67913 19.0073 0 2.25455 25.6598 0 0.627571 18.7657 0 + -0.427214 0.928528 0 -0.427597 -21.083 0 0.62653 -38.9075 0 2.25316 -45.776 0 + 3.67786 -39.0852 0 4.12528 -21.4186 0 9.89563 -1.93524 0 6.82475 8.68643 0 + 1.31397 12.4696 0 -4.34522 7.93882 0 -7.87793 -3.30429 0 -7.87819 -17.1 0 + -4.34589 -28.3105 0 1.31317 -32.776 0 6.82425 -28.8946 0 9.89519 -18.1411 0 + 11.8274 -8.31099 0 7.2516 -8.79149 0 -0.139846 -9.26748 0 -7.54577 -9.69816 0 + -12.1273 -10.0769 0 -12.1273 -10.4227 0 -7.54576 -10.7614 0 -0.139666 -11.1117 0 + 7.25215 -11.4667 0 11.8283 -11.7839 0 9.23895 -15.3419 0 4.91634 -26.7477 0 + -1.52128 -31.3122 0 -7.81608 -27.469 0 -11.6749 -16.8267 0 -11.6747 -3.57756 0 + -7.81541 7.09719 0 -1.52019 11.0052 0 4.91793 6.53867 0 9.24145 -4.73493 0 + 3.1278 -20.3518 0 0.718834 -38.3334 0 -2.30275 -45.2522 0 -5.07991 -38.5982 0 + -6.73959 -20.9808 0 -6.73922 0.826391 0 -5.07885 18.4562 0 -2.30111 25.1349 0 + 0.721057 18.2536 0 3.13131 0.322385 0 -4.17332 -21.4299 0 -3.74662 -39.1271 0 + -2.19829 -45.7632 0 -0.398519 -38.8344 0 0.773945 -20.9527 0 0.774317 1.10706 0 + -0.397454 18.9765 0 -2.19665 25.8805 0 -3.74439 19.207 0 -4.16981 1.45923 0 + -9.87973 -18.1636 0 -6.78522 -28.8238 0 -1.26177 -32.6485 0 4.42612 -28.0864 0 + 7.98237 -16.7526 0 7.98259 -2.84313 0 4.42679 8.45825 0 -1.26068 12.9554 0 + -6.78364 9.03289 0 -9.87723 -1.75959 0 -11.812 -11.7955 0 -7.24498 -11.3516 0 + 0.13644 -10.9136 0 7.535 -10.4576 0 12.1129 -9.98419 0 12.1129 -9.51614 0 + 7.53501 -9.0828 0 0.13662 -8.70719 0 -7.24443 -8.39021 0 -11.8111 -8.1097 0 + -9.22056 -4.74553 0 -4.94206 6.63046 0 1.46182 11.1511 0 7.7139 7.33226 0 + 11.5424 -3.22666 0 11.5421 -16.3691 0 7.71323 -26.9606 0 1.46102 -30.8447 0 + -4.94256 -26.4222 0 -9.221 -15.1781 0 -3.03551 0.338265 0 -0.638264 18.2589 0 + 2.23927 25.1834 0 4.83144 18.5499 0 6.36755 0.963427 0 6.36717 -20.809 0 + 4.8304 -38.4082 0 2.23788 -45.0672 0 -0.639531 -38.181 0 -3.03636 -20.3102 0 - 4.12072 11.3998 0 3.66916 29.0519 0 2.24407 35.7369 0 0.61999 28.8649 0 - -0.429951 11.0387 0 -0.42486 -10.9728 0 0.63411 -28.8083 0 2.26364 -35.6989 0 - 3.68783 -29.0405 0 4.1307 -11.4093 0 9.90249 8.11772 0 6.82962 18.8618 0 - 1.31561 22.7347 0 -4.34505 18.2638 0 -7.87801 7.05071 0 -7.87811 -6.74497 0 - -4.34606 -17.9855 0 1.31153 -22.511 0 6.81939 -18.7193 0 9.88833 -8.08811 0 - 11.8594 1.76043 0 7.2788 1.43685 0 -0.119743 1.07413 0 -7.53357 0.71814 0 - -12.1232 0.376661 0 -12.1314 0.0308437 0 -7.55796 -0.345099 0 -0.159769 -0.77012 0 - 7.22495 -1.23832 0 11.7962 -1.71244 0 9.29781 -5.28257 0 4.9662 -16.5599 0 - -1.48308 -21.0319 0 -7.79209 -17.128 0 -11.6667 -6.45545 0 -11.6829 6.79367 0 - -7.8394 17.4382 0 -1.55839 21.2855 0 4.86807 16.7265 0 9.1826 5.32442 0 - 3.20355 -10.3289 0 0.782829 -28.2613 0 -2.25339 -35.1446 0 -5.0487 -28.4674 0 - -6.72891 -10.8384 0 -6.74989 10.9688 0 -5.11006 28.587 0 -2.35047 35.2425 0 - 0.657061 28.3257 0 3.05556 10.3453 0 -4.09757 -11.4527 0 -3.68262 -29.1993 0 - -2.14893 -35.8708 0 -0.367308 -28.9653 0 0.784621 -11.0951 0 0.763641 10.9647 0 - -0.428665 28.8456 0 -2.24601 35.7729 0 -3.80839 29.1348 0 -4.24556 11.4363 0 - -9.82087 -8.22291 0 -6.73537 -19.0117 0 -1.22357 -22.9288 0 4.45011 -18.4274 0 - 7.99054 -7.12387 0 7.97442 6.78564 0 4.4028 18.1173 0 -1.29888 22.6751 0 - -6.8335 18.845 0 -9.93608 8.18106 0 -11.78 -1.86687 0 -7.21778 -1.57997 0 - 0.156543 -1.25521 0 7.5472 -0.873941 0 12.117 -0.437774 0 12.1088 0.0302692 0 - 7.52281 0.5009 0 0.116517 0.951194 0 -7.27163 1.38145 0 -11.8432 1.81888 0 - -9.2137 5.2015 0 -4.93719 16.4551 0 1.46346 20.8861 0 7.71407 17.0073 0 - 11.5423 6.41834 0 11.5422 -6.72407 0 7.71306 -17.2856 0 1.45938 -21.1098 0 - -4.94742 -16.5976 0 -9.22786 -5.23111 0 -3.04093 10.329 0 -0.648233 28.2143 0 - 2.22879 35.1063 0 4.82386 28.4508 0 6.36481 10.8532 0 6.3699 -10.9192 0 - 4.83798 -28.5074 0 2.24836 -35.1443 0 -0.629562 -28.2257 0 -3.03094 -10.3195 0 + 4.12614 11.4052 0 3.67913 29.0467 0 2.25455 35.7177 0 0.627571 28.836 0 + -0.427214 11.005 0 -0.427597 -11.0065 0 0.62653 -28.8372 0 2.25316 -35.7181 0 + 3.67786 -29.0458 0 4.12528 -11.4039 0 9.89563 8.10319 0 6.82475 18.7896 0 + 1.31397 22.6213 0 -4.34522 18.1229 0 -7.87793 6.89594 0 -7.87819 -6.89974 0 + -4.34589 -18.1264 0 1.31317 -22.6243 0 6.82425 -18.7915 0 9.89519 -8.10265 0 + 11.8274 1.73651 0 7.2516 1.33601 0 -0.139846 0.920016 0 -7.54577 0.529337 0 + -12.1273 0.170574 0 -12.1273 -0.175243 0 -7.54576 -0.533901 0 -0.139666 -0.924238 0 + 7.25215 -1.33917 0 11.8283 -1.73636 0 9.23895 -5.30349 0 4.91634 -16.6446 0 + -1.52128 -21.1605 0 -7.81608 -17.285 0 -11.6749 -6.62645 0 -11.6747 6.62268 0 + -7.81541 17.2812 0 -1.52019 21.1569 0 4.91793 16.6418 0 9.24145 5.3035 0 + 3.1278 -10.3371 0 0.718834 -28.294 0 -2.30275 -35.1942 0 -5.07991 -28.5279 0 + -6.73959 -10.9043 0 -6.73922 10.9029 0 -5.07885 28.5265 0 -2.30111 35.1928 0 + 0.721057 28.293 0 3.13131 10.3371 0 -4.17332 -11.4445 0 -3.74662 -29.1665 0 + -2.19829 -35.8212 0 -0.398519 -28.9047 0 0.773945 -11.0291 0 0.774317 11.0306 0 + -0.397454 28.9062 0 -2.19665 35.8225 0 -3.74439 29.1676 0 -4.16981 11.4446 0 + -9.87973 -8.20199 0 -6.78522 -18.927 0 -1.26177 -22.8002 0 4.42612 -18.2705 0 + 7.98237 -6.95287 0 7.98259 6.95664 0 4.42679 18.2742 0 -1.26068 22.8037 0 + -6.78364 18.9297 0 -9.87723 8.20198 0 -11.812 -1.84295 0 -7.24498 -1.47913 0 + 0.13644 -1.10109 0 7.535 -0.685138 0 12.1129 -0.231687 0 12.1129 0.236356 0 + 7.53501 0.689703 0 0.13662 1.10531 0 -7.24443 1.48229 0 -11.8111 1.8428 0 + -9.22056 5.21604 0 -4.94206 16.5273 0 1.46182 20.9994 0 7.7139 17.1482 0 + 11.5424 6.5731 0 11.5421 -6.5693 0 7.71323 -17.1446 0 1.46102 -20.9964 0 + -4.94256 -16.5254 0 -9.221 -5.21657 0 -3.03551 10.3236 0 -0.638264 28.2195 0 + 2.23927 35.1255 0 4.83144 28.4796 0 6.36755 10.8869 0 6.36717 -10.8855 0 + 4.8304 -28.4785 0 2.23788 -35.1251 0 -0.639531 -28.2204 0 -3.03636 -10.3249 0 -- GitLab From 8aad40af4f2c7d8a87285ba5d246cbe8543f88cf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dennis=20Gl=C3=A4ser?= Date: Fri, 11 Feb 2022 12:08:23 +0100 Subject: [PATCH 7/8] [CHANGELOG] fluid props in porelastic spatial params --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index b4137e53fb..a2d762ab8d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -96,6 +96,7 @@ The parameters describing your dispersion tensor can then be included in your `s - the `temperature` and `extrusionFactor` interfaces in the problem class have been deprecated and have been moved to the spatial parameters. - Porous medium flow models should now inherit from the new base spatial parameters that can be found in the folder `dumux/porousmediumflow/`, which allow users to overload the new `temperature` and `extrusionFactor` interfaces. - Free flow and pore network models now also expect the user problems to expose spatial parameters, in which `gravity`, `temperature` and `extrusionFactor` are defined. The respective problem interfaces have been deprecated. +- The problem interfaces for fluid properties in the poroelastic model, namely `effectiveFluidDensity` and `effectivePorePressure`, have been deprecated and were moved to the spatial parameters. ### New experimental features (possibly subject to backwards-incompatible changes in the future) -- GitLab From 0678738fcfa487e381d84c37bff48b61d4c9a598 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dennis=20Gl=C3=A4ser?= Date: Fri, 11 Feb 2022 12:43:20 +0100 Subject: [PATCH 8/8] [geomechanics] minor cleanup --- dumux/geomechanics/fvproblem.hh | 2 +- test/geomechanics/poroelastic/spatialparams.hh | 7 +++---- .../poromechanics/el1p/spatialparams_poroelastic.hh | 10 +++++----- .../poromechanics/el2p/spatialparams_poroelastic.hh | 10 +++++----- 4 files changed, 14 insertions(+), 15 deletions(-) diff --git a/dumux/geomechanics/fvproblem.hh b/dumux/geomechanics/fvproblem.hh index dff383383d..1512eb9f99 100644 --- a/dumux/geomechanics/fvproblem.hh +++ b/dumux/geomechanics/fvproblem.hh @@ -27,7 +27,7 @@ #include #include -// for helpers in detail namespace (TODO: Remove after deprecation period) +// for helpers in detail namespace (TODO: Remove after deprecation period after release 3.5) #include "poroelastic/fvspatialparams.hh" namespace Dumux { diff --git a/test/geomechanics/poroelastic/spatialparams.hh b/test/geomechanics/poroelastic/spatialparams.hh index bccd9c8f24..0e8e0823a7 100644 --- a/test/geomechanics/poroelastic/spatialparams.hh +++ b/test/geomechanics/poroelastic/spatialparams.hh @@ -113,11 +113,10 @@ public: */ Scalar effectiveFluidDensityAtPos(const GlobalPosition& globalPos) const { - // This test uses the constant component, obtain density only once - static const Scalar rho = FluidSystem::density( - effectivePorePressureAtPos(globalPos), this->temperatureAtPos(globalPos) + return FluidSystem::density( + effectivePorePressureAtPos(globalPos), + this->temperatureAtPos(globalPos) ); - return rho; } //! Returns the Biot coefficient of the porous medium. diff --git a/test/multidomain/poromechanics/el1p/spatialparams_poroelastic.hh b/test/multidomain/poromechanics/el1p/spatialparams_poroelastic.hh index 0b76afdd1b..b06457535f 100644 --- a/test/multidomain/poromechanics/el1p/spatialparams_poroelastic.hh +++ b/test/multidomain/poromechanics/el1p/spatialparams_poroelastic.hh @@ -55,7 +55,7 @@ public: PoroElasticSpatialParams(std::shared_ptr gridGeometry, std::shared_ptr couplingManagerPtr) : ParentType(gridGeometry) - , couplingManagerPtr_(couplingManagerPtr) + , couplingManager_(couplingManagerPtr) , initPorosity_(getParam("SpatialParams.InitialPorosity")) { // Young's modulus [Pa] @@ -88,7 +88,7 @@ public: const SubControlVolume& scv) const { // get porous medium flow volume variables from coupling manager - const auto pmFlowVolVars = couplingManager().getPMFlowVolVars(element); + const auto& pmFlowVolVars = couplingManager().getPMFlowVolVars(element); return pmFlowVolVars.density(); } @@ -102,7 +102,7 @@ public: const FluxVarsCache& fluxVarsCache) const { // get porous medium flow volume variables from coupling manager - const auto pmFlowVolVars = couplingManager().getPMFlowVolVars(element); + const auto& pmFlowVolVars = couplingManager().getPMFlowVolVars(element); return pmFlowVolVars.pressure(); } @@ -112,10 +112,10 @@ public: //! Returns reference to the coupling manager. const CouplingManager& couplingManager() const - { return *couplingManagerPtr_; } + { return *couplingManager_; } private: - std::shared_ptr couplingManagerPtr_; + std::shared_ptr couplingManager_; Scalar initPorosity_; LameParams lameParams_; }; diff --git a/test/multidomain/poromechanics/el2p/spatialparams_poroelastic.hh b/test/multidomain/poromechanics/el2p/spatialparams_poroelastic.hh index 4dea4d2893..cd0c82d376 100644 --- a/test/multidomain/poromechanics/el2p/spatialparams_poroelastic.hh +++ b/test/multidomain/poromechanics/el2p/spatialparams_poroelastic.hh @@ -57,7 +57,7 @@ public: PoroElasticSpatialParams(std::shared_ptr gridGeometry, std::shared_ptr couplingManagerPtr) : ParentType(gridGeometry) - , couplingManagerPtr_(couplingManagerPtr) + , couplingManager_(couplingManagerPtr) , initPorosity_(getParam("SpatialParams.InitialPorosity")) { // Young's modulus [Pa] @@ -89,7 +89,7 @@ public: Scalar effectiveFluidDensity(const Element& element, const SubControlVolume& scv) const { // get porous medium flow volume variables from coupling manager - const auto pmFlowVolVars = couplingManager().getPMFlowVolVars(element); + const auto& pmFlowVolVars = couplingManager().getPMFlowVolVars(element); Scalar wPhaseDensity = pmFlowVolVars.density(FluidSystem::phase0Idx); Scalar nPhaseDensity = pmFlowVolVars.density(FluidSystem::phase1Idx); @@ -108,7 +108,7 @@ public: const FluxVarsCache& fluxVarsCache) const { // get porous medium flow volume variables from coupling manager - const auto pmFlowVolVars = couplingManager().getPMFlowVolVars(element); + const auto& pmFlowVolVars = couplingManager().getPMFlowVolVars(element); Scalar pw = pmFlowVolVars.pressure(FluidSystem::phase0Idx); Scalar pn = pmFlowVolVars.pressure(FluidSystem::phase1Idx); @@ -127,10 +127,10 @@ public: //! Returns reference to the coupling manager. const CouplingManager& couplingManager() const - { return *couplingManagerPtr_; } + { return *couplingManager_; } private: - std::shared_ptr couplingManagerPtr_; + std::shared_ptr couplingManager_; Scalar initPorosity_; LameParams lameParams_; }; -- GitLab