OGS
Coulomb.h
Go to the documentation of this file.
1
10#pragma once
11
12#include <Eigen/Core>
13#include <utility>
14
15#include "FractureModelBase.h"
18
19namespace MaterialLib
20{
21namespace Fracture
22{
23namespace Coulomb
24{
25template <int DisplacementDim>
27 : public FractureModelBase<DisplacementDim>::MaterialStateVariables
28{
30
31 void pushBackState() override { w_p_prev = w_p; }
32
35 Eigen::Matrix<double, DisplacementDim, 1> w_p =
36 Eigen::Matrix<double, DisplacementDim, 1>::Zero();
37
38 // Initial values from previous timestep
39 Eigen::Matrix<double, DisplacementDim, 1> w_p_prev;
40
42};
43
44template <int DisplacementDim>
45class Coulomb final : public FractureModelBase<DisplacementDim>
46{
47public:
48 std::unique_ptr<
51 {
52 return std::make_unique<StateVariables<DisplacementDim>>();
53 }
54
55public:
58 {
61
63 P const& normal_stiffness_, P const& shear_stiffness_,
64 P const& friction_angle_, P const& dilatancy_angle_,
65 P const& cohesion_)
66 : normal_stiffness(normal_stiffness_), shear_stiffness(shear_stiffness_),
67 friction_angle(friction_angle_), dilatancy_angle(dilatancy_angle_),
68 cohesion(cohesion_)
69 {
70 }
71
84 P const& cohesion;
85 };
86
87
88public:
89 explicit Coulomb(
90 NumLib::NewtonRaphsonSolverParameters nonlinear_solver_parameters,
91 double const penalty_aperture_cutoff,
92 bool const tension_cutoff,
93 MaterialProperties material_properties)
94 : _nonlinear_solver_parameters(std::move(nonlinear_solver_parameters)),
95 _penalty_aperture_cutoff(penalty_aperture_cutoff),
96 _tension_cutoff(tension_cutoff),
97 _mp(std::move(material_properties))
98 {
99 }
100
116 double const t,
118 double const aperture0,
119 Eigen::Ref<Eigen::VectorXd const>
120 sigma0,
121 Eigen::Ref<Eigen::VectorXd const>
122 w_prev,
123 Eigen::Ref<Eigen::VectorXd const>
124 w,
125 Eigen::Ref<Eigen::VectorXd const>
126 sigma_prev,
127 Eigen::Ref<Eigen::VectorXd>
128 sigma,
129 Eigen::Ref<Eigen::MatrixXd>
130 Kep,
132 material_state_variables) override;
133
134private:
136
142
145 bool const _tension_cutoff;
146
148};
149
150} // namespace Coulomb
151} // namespace Fracture
152} // namespace MaterialLib
153
154namespace MaterialLib
155{
156namespace Fracture
157{
158namespace Coulomb
159{
160extern template class Coulomb<2>;
161extern template class Coulomb<3>;
162} // namespace Coulomb
163} // namespace Fracture
164} // namespace MaterialLib
NumLib::NewtonRaphsonSolverParameters const _nonlinear_solver_parameters
Definition Coulomb.h:135
Coulomb(NumLib::NewtonRaphsonSolverParameters nonlinear_solver_parameters, double const penalty_aperture_cutoff, bool const tension_cutoff, MaterialProperties material_properties)
Definition Coulomb.h:89
void computeConstitutiveRelation(double const t, ParameterLib::SpatialPosition const &x, double const aperture0, Eigen::Ref< Eigen::VectorXd const > sigma0, Eigen::Ref< Eigen::VectorXd const > w_prev, Eigen::Ref< Eigen::VectorXd const > w, Eigen::Ref< Eigen::VectorXd const > sigma_prev, Eigen::Ref< Eigen::VectorXd > sigma, Eigen::Ref< Eigen::MatrixXd > Kep, typename FractureModelBase< DisplacementDim >::MaterialStateVariables &material_state_variables) override
Definition Coulomb.cpp:50
std::unique_ptr< typename FractureModelBase< DisplacementDim >::MaterialStateVariables > createMaterialStateVariables() override
Definition Coulomb.h:50
Variables specific to the material model.
Definition Coulomb.h:58
P const & shear_stiffness
Shear stiffness given in units of stress per length.
Definition Coulomb.h:75
P const & cohesion
Fracture cohesion in units of stress.
Definition Coulomb.h:84
P const & normal_stiffness
Normal stiffness given in units of stress per length.
Definition Coulomb.h:73
MaterialProperties(P const &normal_stiffness_, P const &shear_stiffness_, P const &friction_angle_, P const &dilatancy_angle_, P const &cohesion_)
Definition Coulomb.h:62
Eigen::Matrix< double, DisplacementDim, 1 > w_p
Definition Coulomb.h:35
Eigen::Matrix< double, DisplacementDim, 1 > w_p_prev
Definition Coulomb.h:39