OGS
CohesiveZoneModeI.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"
11
12namespace MaterialLib
13{
14namespace Fracture
15{
16namespace CohesiveZoneModeI
17{
20{
23
24 MaterialPropertiesParameters(P const& normal_stiffness_,
25 P const& shear_stiffness_,
26 P const& fracture_toughness_,
27 P const& peak_normal_traction_)
28 : normal_stiffness(normal_stiffness_),
29 shear_stiffness(shear_stiffness_),
30 fracture_toughness(fracture_toughness_),
31 peak_normal_traction(peak_normal_traction_)
32 {
33 }
34
36 double fracture_opening_at_peak_traction(double const t, X const& x) const
37 {
38 return peak_normal_traction(t, x)[0] / normal_stiffness(t, x)[0];
39 }
40
43 X const& x) const
44 {
45 if (peak_normal_traction(t, x)[0] == 0.0)
46 {
47 return 0.0;
48 }
49
50 return 2 * fracture_toughness(t, x)[0] / peak_normal_traction(t, x)[0];
51 }
52
57
74};
75
79{
82 : Kn(mp.normal_stiffness(t, x)[0]),
83 Ks(mp.shear_stiffness(t, x)[0]),
84 Gc(mp.fracture_toughness(t, x)[0]),
85 t_np(mp.peak_normal_traction(t, x)[0]),
86 w_np(mp.fracture_opening_at_peak_traction(t, x)),
87 w_nf(mp.fracture_opening_at_residual_traction(t, x))
88 {
89 }
90
91 double const Kn;
92 double const Ks;
93 double const Gc;
94 double const t_np;
95 double const w_np;
96 double const w_nf;
97};
98
99template <int DisplacementDim>
101 : public FractureModelBase<DisplacementDim>::MaterialStateVariables
102{
104
105 void pushBackState() override { damage_prev = damage; }
106
107 double damage;
108
109 // Initial values from previous timestep
110 double damage_prev;
111};
112
118template <int DisplacementDim>
119class CohesiveZoneModeI final : public FractureModelBase<DisplacementDim>
120{
121public:
122 std::unique_ptr<
125 {
126 return std::make_unique<StateVariables<DisplacementDim>>();
127 }
128
129public:
130public:
131 explicit CohesiveZoneModeI(double const penalty_aperture_cutoff,
132 bool const tension_cutoff,
133 MaterialPropertiesParameters material_properties)
134 : _penalty_aperture_cutoff(penalty_aperture_cutoff),
135 _tension_cutoff(tension_cutoff),
136 _mp(std::move(material_properties))
137 {
138 }
139
156 double const t,
158 double const aperture0,
159 Eigen::Ref<Eigen::VectorXd const>
160 sigma0,
161 Eigen::Ref<Eigen::VectorXd const>
162 w_prev,
163 Eigen::Ref<Eigen::VectorXd const>
164 w,
165 Eigen::Ref<Eigen::VectorXd const>
166 sigma_prev,
167 Eigen::Ref<Eigen::VectorXd>
168 sigma,
169 Eigen::Ref<Eigen::MatrixXd>
170 C,
172 material_state_variables) override;
173
175 double const t, ParameterLib::SpatialPosition const& x) const
176 {
177 return MaterialProperties(t, x, _mp);
178 }
179
180private:
186
189 bool const _tension_cutoff;
190
192};
193
194} // namespace CohesiveZoneModeI
195} // namespace Fracture
196} // namespace MaterialLib
197
198namespace MaterialLib
199{
200namespace Fracture
201{
202namespace CohesiveZoneModeI
203{
204extern template class CohesiveZoneModeI<2>;
205extern template class CohesiveZoneModeI<3>;
206} // namespace CohesiveZoneModeI
207} // namespace Fracture
208} // namespace MaterialLib
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 > C, typename FractureModelBase< DisplacementDim >::MaterialStateVariables &material_state_variables) override
CohesiveZoneModeI(double const penalty_aperture_cutoff, bool const tension_cutoff, MaterialPropertiesParameters material_properties)
MaterialProperties evaluatedMaterialProperties(double const t, ParameterLib::SpatialPosition const &x) const
std::unique_ptr< typename FractureModelBase< DisplacementDim >::MaterialStateVariables > createMaterialStateVariables() override
P const & shear_stiffness
Shear stiffness given in units of stress per length.
double fracture_opening_at_peak_traction(double const t, X const &x) const
Assuming initially stress-free state.
double fracture_opening_at_residual_traction(double const t, X const &x) const
Assuming initially stress-free state.
P const & normal_stiffness
Normal stiffness given in units of stress per length.
MaterialPropertiesParameters(P const &normal_stiffness_, P const &shear_stiffness_, P const &fracture_toughness_, P const &peak_normal_traction_)
MaterialProperties(double const t, ParameterLib::SpatialPosition const &x, MaterialPropertiesParameters const &mp)