diff --git a/MaterialLib/SolidModels/CreateConstitutiveRelation.cpp b/MaterialLib/SolidModels/CreateConstitutiveRelation.cpp index 87250af2e14aa620e63bee8fecf8d79e34433a3a..aec10048af81bb850d0f999cb78c7da5989c5484 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 fbc223167f3524868e16083b5612a29d24b4ff48..f60e81d3f5f32613d9f8768592a05a6d84579142 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 d5301c95b39791127322ff9e52443c0dd490bb14..d50fbcb869e1e013694748f3675118092b08f352 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 e42f0846eceda5737becca8f7bf781a183e9fe5e..af4d50973a8dfc91b4dbc55eb246ba57da4fc10c 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 c1c36fb7a92464fed2b954237b4478d7e348e672..e47f3397708f3487304dac2f018cc54f4598a747 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 83e7a7cf10ac6ea84ab2e6301759a2e0f87892df..a756a4f96809e39a9eb9a05049bf94089b342496 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; } };