Skip to content
Snippets Groups Projects
Commit ce9a7c6d authored by wenqing's avatar wenqing
Browse files

[MFront] Added a member of getEquivalentPlasticStrain to MFront::MaterialStateVariables

parent 460b9b78
No related branches found
No related tags found
No related merge requests found
...@@ -160,6 +160,14 @@ const char* varTypeToString(int v) ...@@ -160,6 +160,14 @@ const char* varTypeToString(int v)
OGS_FATAL("Unknown variable type {:d}.", v); OGS_FATAL("Unknown variable type {:d}.", v);
} }
int getEquivalentPlasticStrainOffset(mgis::behaviour::Behaviour const& b)
{
return mgis::behaviour::contains(b.isvs, "EquivalentPlasticStrain")
? mgis::behaviour::getVariableOffset(
b.isvs, "EquivalentPlasticStrain", b.hypothesis)
: -1;
}
template <int DisplacementDim> template <int DisplacementDim>
MFront<DisplacementDim>::MFront( MFront<DisplacementDim>::MFront(
mgis::behaviour::Behaviour&& behaviour, mgis::behaviour::Behaviour&& behaviour,
...@@ -167,6 +175,8 @@ MFront<DisplacementDim>::MFront( ...@@ -167,6 +175,8 @@ MFront<DisplacementDim>::MFront(
boost::optional<ParameterLib::CoordinateSystem> const& boost::optional<ParameterLib::CoordinateSystem> const&
local_coordinate_system) local_coordinate_system)
: _behaviour(std::move(behaviour)), : _behaviour(std::move(behaviour)),
equivalent_plastic_strain_offset_(
getEquivalentPlasticStrainOffset(_behaviour)),
_material_properties(std::move(material_properties)), _material_properties(std::move(material_properties)),
_local_coordinate_system( _local_coordinate_system(
local_coordinate_system ? &local_coordinate_system.get() : nullptr) local_coordinate_system ? &local_coordinate_system.get() : nullptr)
...@@ -243,7 +253,8 @@ template <int DisplacementDim> ...@@ -243,7 +253,8 @@ template <int DisplacementDim>
std::unique_ptr<typename MechanicsBase<DisplacementDim>::MaterialStateVariables> std::unique_ptr<typename MechanicsBase<DisplacementDim>::MaterialStateVariables>
MFront<DisplacementDim>::createMaterialStateVariables() const MFront<DisplacementDim>::createMaterialStateVariables() const
{ {
return std::make_unique<MaterialStateVariables>(_behaviour); return std::make_unique<MaterialStateVariables>(
equivalent_plastic_strain_offset_, _behaviour);
} }
template <int DisplacementDim> template <int DisplacementDim>
...@@ -457,6 +468,20 @@ double MFront<DisplacementDim>::computeFreeEnergyDensity( ...@@ -457,6 +468,20 @@ double MFront<DisplacementDim>::computeFreeEnergyDensity(
return std::numeric_limits<double>::quiet_NaN(); return std::numeric_limits<double>::quiet_NaN();
} }
template <int DisplacementDim>
double MFront<
DisplacementDim>::MaterialStateVariables::getEquivalentPlasticStrain() const
{
if (equivalent_plastic_strain_offset_ >= 0)
{
return _behaviour_data.s1
.internal_state_variables[static_cast<mgis::size_type>(
equivalent_plastic_strain_offset_)];
}
return 0.0;
}
template class MFront<2>; template class MFront<2>;
template class MFront<3>; template class MFront<3>;
......
...@@ -43,8 +43,12 @@ public: ...@@ -43,8 +43,12 @@ public:
struct MaterialStateVariables struct MaterialStateVariables
: public MechanicsBase<DisplacementDim>::MaterialStateVariables : public MechanicsBase<DisplacementDim>::MaterialStateVariables
{ {
explicit MaterialStateVariables(mgis::behaviour::Behaviour const& b) explicit MaterialStateVariables(
: _behaviour_data{b} int const equivalent_plastic_strain_offset,
mgis::behaviour::Behaviour const& b)
: equivalent_plastic_strain_offset_(
equivalent_plastic_strain_offset),
_behaviour_data{b}
{ {
} }
...@@ -56,7 +60,10 @@ public: ...@@ -56,7 +60,10 @@ public:
mgis::behaviour::update(_behaviour_data); mgis::behaviour::update(_behaviour_data);
} }
int const equivalent_plastic_strain_offset_;
mgis::behaviour::BehaviourData _behaviour_data; mgis::behaviour::BehaviourData _behaviour_data;
double getEquivalentPlasticStrain() const override;
}; };
using KelvinVector = using KelvinVector =
...@@ -70,10 +77,9 @@ public: ...@@ -70,10 +77,9 @@ public:
boost::optional<ParameterLib::CoordinateSystem> const& boost::optional<ParameterLib::CoordinateSystem> const&
local_coordinate_system); local_coordinate_system);
std::unique_ptr< std::unique_ptr<
typename MechanicsBase<DisplacementDim>:: typename MechanicsBase<DisplacementDim>::MaterialStateVariables>
MaterialStateVariables> createMaterialStateVariables() createMaterialStateVariables() const override;
const override;
std::optional<std::tuple<KelvinVector, std::optional<std::tuple<KelvinVector,
std::unique_ptr<typename MechanicsBase< std::unique_ptr<typename MechanicsBase<
...@@ -106,6 +112,7 @@ public: ...@@ -106,6 +112,7 @@ public:
private: private:
mgis::behaviour::Behaviour _behaviour; mgis::behaviour::Behaviour _behaviour;
int const equivalent_plastic_strain_offset_;
std::vector<ParameterLib::Parameter<double> const*> _material_properties; std::vector<ParameterLib::Parameter<double> const*> _material_properties;
ParameterLib::CoordinateSystem const* const _local_coordinate_system; ParameterLib::CoordinateSystem const* const _local_coordinate_system;
}; };
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment