From 1b479c49b9a00c20355d82e5e0b4b3f0bf4aad56 Mon Sep 17 00:00:00 2001 From: Dmitri Naumov <github@naumov.de> Date: Thu, 16 Jan 2020 13:37:33 +0100 Subject: [PATCH] [MatL] Pass local_coordinate_system to MFront. --- .../SolidModels/CreateConstitutiveRelation.cpp | 2 +- MaterialLib/SolidModels/MFront/CreateMFront.cpp | 9 ++++++++- MaterialLib/SolidModels/MFront/CreateMFront.h | 6 ++++++ MaterialLib/SolidModels/MFront/MFront.cpp | 8 ++++++-- MaterialLib/SolidModels/MFront/MFront.h | 12 ++++++++---- Tests/MaterialLib/MFront.cpp | 6 +++--- 6 files changed, 32 insertions(+), 11 deletions(-) diff --git a/MaterialLib/SolidModels/CreateConstitutiveRelation.cpp b/MaterialLib/SolidModels/CreateConstitutiveRelation.cpp index 87250af2e14..aec10048af8 100644 --- a/MaterialLib/SolidModels/CreateConstitutiveRelation.cpp +++ b/MaterialLib/SolidModels/CreateConstitutiveRelation.cpp @@ -75,7 +75,7 @@ createConstitutiveRelation( { #ifdef OGS_USE_MFRONT return MaterialLib::Solids::MFront::createMFront<DisplacementDim>( - parameters, config); + parameters, local_coordinate_system, config); #else // OGS_USE_MFRONT OGS_FATAL( "OGS is compiled without MFront support. See OGS_USE_MFRONT CMake " diff --git a/MaterialLib/SolidModels/MFront/CreateMFront.cpp b/MaterialLib/SolidModels/MFront/CreateMFront.cpp index fbc223167f3..f60e81d3f5f 100644 --- a/MaterialLib/SolidModels/MFront/CreateMFront.cpp +++ b/MaterialLib/SolidModels/MFront/CreateMFront.cpp @@ -55,6 +55,8 @@ namespace MFront template <int DisplacementDim> std::unique_ptr<MechanicsBase<DisplacementDim>> createMFront( std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters, + boost::optional<ParameterLib::CoordinateSystem> const& + local_coordinate_system, BaseLib::ConfigTree const& config) { INFO("### MFRONT ########################################################"); @@ -191,7 +193,8 @@ std::unique_ptr<MechanicsBase<DisplacementDim>> createMFront( INFO("### MFRONT END ####################################################"); return std::make_unique<MFront<DisplacementDim>>( - std::move(behaviour), std::move(material_properties)); + std::move(behaviour), std::move(material_properties), + local_coordinate_system); } } // namespace MFront } // namespace Solids @@ -205,9 +208,13 @@ namespace MFront { template std::unique_ptr<MechanicsBase<2>> createMFront<2>( std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters, + boost::optional<ParameterLib::CoordinateSystem> const& + local_coordinate_system, BaseLib::ConfigTree const& config); template std::unique_ptr<MechanicsBase<3>> createMFront<3>( std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters, + boost::optional<ParameterLib::CoordinateSystem> const& + local_coordinate_system, BaseLib::ConfigTree const& config); } // namespace MFront } // namespace Solids diff --git a/MaterialLib/SolidModels/MFront/CreateMFront.h b/MaterialLib/SolidModels/MFront/CreateMFront.h index d5301c95b39..d50fbcb869e 100644 --- a/MaterialLib/SolidModels/MFront/CreateMFront.h +++ b/MaterialLib/SolidModels/MFront/CreateMFront.h @@ -25,13 +25,19 @@ namespace MFront template <int DisplacementDim> std::unique_ptr<MechanicsBase<DisplacementDim>> createMFront( std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters, + boost::optional<ParameterLib::CoordinateSystem> const& + local_coordinate_system, BaseLib::ConfigTree const& config); extern template std::unique_ptr<MechanicsBase<2>> createMFront<2>( std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters, + boost::optional<ParameterLib::CoordinateSystem> const& + local_coordinate_system, BaseLib::ConfigTree const& config); extern template std::unique_ptr<MechanicsBase<3>> createMFront<3>( std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters, + boost::optional<ParameterLib::CoordinateSystem> const& + local_coordinate_system, BaseLib::ConfigTree const& config); } // namespace MFront } // namespace Solids diff --git a/MaterialLib/SolidModels/MFront/MFront.cpp b/MaterialLib/SolidModels/MFront/MFront.cpp index e42f0846ece..af4d50973a8 100644 --- a/MaterialLib/SolidModels/MFront/MFront.cpp +++ b/MaterialLib/SolidModels/MFront/MFront.cpp @@ -159,9 +159,13 @@ const char* varTypeToString(int v) template <int DisplacementDim> MFront<DisplacementDim>::MFront( mgis::behaviour::Behaviour&& behaviour, - std::vector<ParameterLib::Parameter<double> const*>&& material_properties) + std::vector<ParameterLib::Parameter<double> const*>&& material_properties, + boost::optional<ParameterLib::CoordinateSystem> const& + local_coordinate_system) : _behaviour(std::move(behaviour)), - _material_properties(std::move(material_properties)) + _material_properties(std::move(material_properties)), + _local_coordinate_system( + local_coordinate_system ? &local_coordinate_system.get() : nullptr) { auto const hypothesis = behaviour.hypothesis; diff --git a/MaterialLib/SolidModels/MFront/MFront.h b/MaterialLib/SolidModels/MFront/MFront.h index c1c36fb7a92..e47f3397708 100644 --- a/MaterialLib/SolidModels/MFront/MFront.h +++ b/MaterialLib/SolidModels/MFront/MFront.h @@ -66,11 +66,14 @@ public: MFront(mgis::behaviour::Behaviour&& behaviour, std::vector<ParameterLib::Parameter<double> const*>&& - material_properties); + material_properties, + boost::optional<ParameterLib::CoordinateSystem> const& + local_coordinate_system); - std::unique_ptr< - typename MechanicsBase<DisplacementDim>::MaterialStateVariables> - createMaterialStateVariables() const override; + std::unique_ptr< + typename MechanicsBase<DisplacementDim>:: + MaterialStateVariables> createMaterialStateVariables() + const override; std::optional<std::tuple<KelvinVector, std::unique_ptr<typename MechanicsBase< @@ -102,6 +105,7 @@ public: private: mgis::behaviour::Behaviour _behaviour; std::vector<ParameterLib::Parameter<double> const*> _material_properties; + ParameterLib::CoordinateSystem const* const _local_coordinate_system; }; extern template class MFront<2>; diff --git a/Tests/MaterialLib/MFront.cpp b/Tests/MaterialLib/MFront.cpp index 83e7a7cf10a..a756a4f9680 100644 --- a/Tests/MaterialLib/MFront.cpp +++ b/Tests/MaterialLib/MFront.cpp @@ -53,7 +53,7 @@ struct StandardElasticityBrickBehaviour &young_modulus, &poisson_ratio}; auto result = std::make_unique<MFront::MFront<Dim>>( - std::move(behaviour), std::move(parameters)); + std::move(behaviour), std::move(parameters), boost::none); return result; } }; @@ -74,7 +74,7 @@ struct ElasticBehaviour &young_modulus, &poisson_ratio}; auto result = std::make_unique<MFront::MFront<Dim>>( - std::move(behaviour), std::move(parameters)); + std::move(behaviour), std::move(parameters), boost::none); return result; } }; @@ -108,7 +108,7 @@ struct MohrCoulombAbboSloanBehaviour &tension_cut_off_parameter}; auto result = std::make_unique<MFront::MFront<Dim>>( - std::move(behaviour), std::move(parameters)); + std::move(behaviour), std::move(parameters), boost::none); return result; } }; -- GitLab