OGS
Coulomb.h
Go to the documentation of this file.
1// SPDX-FileCopyrightText: Copyright (c) OpenGeoSys Community (opengeosys.org)
2// SPDX-License-Identifier: BSD-3-Clause
3
4#pragma once
5
6#include <Eigen/Core>
7#include <utility>
8
9#include "FractureModelBase.h"
12
13namespace MaterialLib
14{
15namespace Fracture
16{
17namespace Coulomb
18{
19template <int DisplacementDim>
21 : public FractureModelBase<DisplacementDim>::MaterialStateVariables
22{
24
25 void pushBackState() override { w_p_prev = w_p; }
26
29 Eigen::Matrix<double, DisplacementDim, 1> w_p =
30 Eigen::Matrix<double, DisplacementDim, 1>::Zero();
31
32 // Initial values from previous timestep
33 Eigen::Matrix<double, DisplacementDim, 1> w_p_prev;
34
36};
37
38template <int DisplacementDim>
39class Coulomb final : public FractureModelBase<DisplacementDim>
40{
41public:
42 std::unique_ptr<
45 {
46 return std::make_unique<StateVariables<DisplacementDim>>();
47 }
48
49public:
52 {
55
57 P const& normal_stiffness_, P const& shear_stiffness_,
58 P const& friction_angle_, P const& dilatancy_angle_,
59 P const& cohesion_)
60 : normal_stiffness(normal_stiffness_), shear_stiffness(shear_stiffness_),
61 friction_angle(friction_angle_), dilatancy_angle(dilatancy_angle_),
62 cohesion(cohesion_)
63 {
64 }
65
78 P const& cohesion;
79 };
80
81
82public:
83 explicit Coulomb(
84 NumLib::NewtonRaphsonSolverParameters nonlinear_solver_parameters,
85 double const penalty_aperture_cutoff,
86 bool const tension_cutoff,
87 MaterialProperties material_properties)
88 : _nonlinear_solver_parameters(std::move(nonlinear_solver_parameters)),
89 _penalty_aperture_cutoff(penalty_aperture_cutoff),
90 _tension_cutoff(tension_cutoff),
91 _mp(std::move(material_properties))
92 {
93 }
94
110 double const t,
112 double const aperture0,
113 Eigen::Ref<Eigen::VectorXd const>
114 sigma0,
115 Eigen::Ref<Eigen::VectorXd const>
116 w_prev,
117 Eigen::Ref<Eigen::VectorXd const>
118 w,
119 Eigen::Ref<Eigen::VectorXd const>
120 sigma_prev,
121 Eigen::Ref<Eigen::VectorXd>
122 sigma,
123 Eigen::Ref<Eigen::MatrixXd>
124 Kep,
126 material_state_variables) override;
127
128private:
130
136
139 bool const _tension_cutoff;
140
142};
143
144} // namespace Coulomb
145} // namespace Fracture
146} // namespace MaterialLib
147
148namespace MaterialLib
149{
150namespace Fracture
151{
152namespace Coulomb
153{
154extern template class Coulomb<2>;
155extern template class Coulomb<3>;
156} // namespace Coulomb
157} // namespace Fracture
158} // namespace MaterialLib
NumLib::NewtonRaphsonSolverParameters const _nonlinear_solver_parameters
Definition Coulomb.h:129
Coulomb(NumLib::NewtonRaphsonSolverParameters nonlinear_solver_parameters, double const penalty_aperture_cutoff, bool const tension_cutoff, MaterialProperties material_properties)
Definition Coulomb.h:83
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:44
std::unique_ptr< typename FractureModelBase< DisplacementDim >::MaterialStateVariables > createMaterialStateVariables() override
Definition Coulomb.h:44
Variables specific to the material model.
Definition Coulomb.h:52
P const & shear_stiffness
Shear stiffness given in units of stress per length.
Definition Coulomb.h:69
P const & cohesion
Fracture cohesion in units of stress.
Definition Coulomb.h:78
P const & normal_stiffness
Normal stiffness given in units of stress per length.
Definition Coulomb.h:67
MaterialProperties(P const &normal_stiffness_, P const &shear_stiffness_, P const &friction_angle_, P const &dilatancy_angle_, P const &cohesion_)
Definition Coulomb.h:56
Eigen::Matrix< double, DisplacementDim, 1 > w_p
Definition Coulomb.h:29
Eigen::Matrix< double, DisplacementDim, 1 > w_p_prev
Definition Coulomb.h:33