OGS
MFront.h
Go to the documentation of this file.
1 
10 #pragma once
11 
13 
14 #include <MGIS/Behaviour/Behaviour.hxx>
15 #include <MGIS/Behaviour/BehaviourData.hxx>
16 
17 #include "ParameterLib/Parameter.h"
18 
19 namespace MaterialLib
20 {
21 namespace Solids
22 {
23 namespace MFront
24 {
26 const char* toString(mgis::behaviour::Behaviour::Kinematic);
27 
29 const char* toString(mgis::behaviour::Behaviour::Symmetry);
30 
32 const char* btypeToString(int);
33 
35 const char* varTypeToString(int);
36 
39 template <int DisplacementDim>
40 class MFront : public MechanicsBase<DisplacementDim>
41 {
42 public:
44  : public MechanicsBase<DisplacementDim>::MaterialStateVariables
45  {
47  int const equivalent_plastic_strain_offset,
48  mgis::behaviour::Behaviour const& b)
50  equivalent_plastic_strain_offset),
52  {
53  }
54 
57 
58  void pushBackState() override
59  {
60  mgis::behaviour::update(_behaviour_data);
61  }
62 
64  mgis::behaviour::BehaviourData _behaviour_data;
65 
66  double getEquivalentPlasticStrain() const override;
67  };
68 
69  using KelvinVector =
71  using KelvinMatrix =
73 
74  MFront(mgis::behaviour::Behaviour&& behaviour,
75  std::vector<ParameterLib::Parameter<double> const*>&&
76  material_properties,
77  std::optional<ParameterLib::CoordinateSystem> const&
78  local_coordinate_system);
79 
80  std::unique_ptr<
82  createMaterialStateVariables() const override;
83 
84  std::optional<std::tuple<KelvinVector,
85  std::unique_ptr<typename MechanicsBase<
86  DisplacementDim>::MaterialStateVariables>,
87  KelvinMatrix>>
89  MaterialPropertyLib::VariableArray const& variable_array_prev,
90  MaterialPropertyLib::VariableArray const& variable_array,
91  double const t,
93  double const dt,
95  material_state_variables) const override;
96 
97  std::vector<typename MechanicsBase<DisplacementDim>::InternalVariable>
98  getInternalVariables() const override;
99 
100  double getBulkModulus(double const /*t*/,
101  ParameterLib::SpatialPosition const& /*x*/,
102  KelvinMatrix const* const /*C*/) const override;
103 
105  double const t,
107  double const dt,
108  KelvinVector const& eps,
109  KelvinVector const& sigma,
111  material_state_variables) const override;
112 
113 private:
114  mgis::behaviour::Behaviour _behaviour;
116  std::vector<ParameterLib::Parameter<double> const*> _material_properties;
118 };
119 
120 extern template class MFront<2>;
121 extern template class MFront<3>;
122 
123 } // namespace MFront
124 } // namespace Solids
125 } // namespace MaterialLib
mgis::behaviour::Behaviour _behaviour
Definition: MFront.h:114
std::optional< std::tuple< KelvinVector, std::unique_ptr< typename MechanicsBase< DisplacementDim >::MaterialStateVariables >, KelvinMatrix > > integrateStress(MaterialPropertyLib::VariableArray const &variable_array_prev, MaterialPropertyLib::VariableArray const &variable_array, double const t, ParameterLib::SpatialPosition const &x, double const dt, typename MechanicsBase< DisplacementDim >::MaterialStateVariables const &material_state_variables) const override
Definition: MFront.cpp:267
std::vector< typename MechanicsBase< DisplacementDim >::InternalVariable > getInternalVariables() const override
Definition: MFront.cpp:420
std::vector< ParameterLib::Parameter< double > const * > _material_properties
Definition: MFront.h:116
MFront(mgis::behaviour::Behaviour &&behaviour, std::vector< ParameterLib::Parameter< double > const * > &&material_properties, std::optional< ParameterLib::CoordinateSystem > const &local_coordinate_system)
Definition: MFront.cpp:174
MathLib::KelvinVector::KelvinVectorType< DisplacementDim > KelvinVector
Definition: MFront.h:70
int const equivalent_plastic_strain_offset_
Definition: MFront.h:115
double computeFreeEnergyDensity(double const t, ParameterLib::SpatialPosition const &x, double const dt, KelvinVector const &eps, KelvinVector const &sigma, typename MechanicsBase< DisplacementDim >::MaterialStateVariables const &material_state_variables) const override
Definition: MFront.cpp:493
std::unique_ptr< typename MechanicsBase< DisplacementDim >::MaterialStateVariables > createMaterialStateVariables() const override
Definition: MFront.cpp:256
ParameterLib::CoordinateSystem const *const _local_coordinate_system
Definition: MFront.h:117
double getBulkModulus(double const, ParameterLib::SpatialPosition const &, KelvinMatrix const *const) const override
Definition: MFront.cpp:475
const char * btypeToString(int btype)
Converts MGIS behaviour type to a string representation.
Definition: MFront.cpp:136
const char * toString(mgis::behaviour::Behaviour::Kinematic kin)
Converts MGIS kinematic to a string representation.
Definition: MFront.cpp:103
const char * varTypeToString(int v)
Converts MGIS variable type to a string representation.
Definition: MFront.cpp:150
std::array< VariableType, static_cast< int >(Variable::number_of_variables)> VariableArray
Definition: VariableType.h:108
Eigen::Matrix< double, kelvin_vector_dimensions(DisplacementDim), 1, Eigen::ColMajor > KelvinVectorType
Definition: KelvinVector.h:48
Eigen::Matrix< double, kelvin_vector_dimensions(DisplacementDim), kelvin_vector_dimensions(DisplacementDim), Eigen::RowMajor > KelvinMatrixType
Definition: KelvinVector.h:56
MaterialStateVariables(MaterialStateVariables const &)=default
MaterialStateVariables(int const equivalent_plastic_strain_offset, mgis::behaviour::Behaviour const &b)
Definition: MFront.h:46
MaterialStateVariables(MaterialStateVariables &&)=delete
mgis::behaviour::BehaviourData _behaviour_data
Definition: MFront.h:64
MathLib::KelvinVector::KelvinVectorType< DisplacementDim > KelvinVector
Definition: MechanicsBase.h:75
MathLib::KelvinVector::KelvinMatrixType< DisplacementDim > KelvinMatrix
Definition: MechanicsBase.h:77