OGS
MaterialLib::Fracture::CohesiveZoneModeI::CohesiveZoneModeI< DisplacementDim > Class Template Referencefinal

## Detailed Description

template<int DisplacementDim>
class MaterialLib::Fracture::CohesiveZoneModeI::CohesiveZoneModeI< DisplacementDim >

The cohesive zone delamination model for mode I fracture introduced herein follows a bilinear traction-separation law which is characterized by four basic parameters: the initial normal and shear stiffness $$K_n$$, $$K_s$$, the fracture toughness $$G_c$$ (also referred to as critical energy release rate), and the peak tensile normal traction $$t_{n,p}$$.

Definition at line 125 of file CohesiveZoneModeI.h.

#include <CohesiveZoneModeI.h>

Inheritance diagram for MaterialLib::Fracture::CohesiveZoneModeI::CohesiveZoneModeI< DisplacementDim >:
[legend]
Collaboration diagram for MaterialLib::Fracture::CohesiveZoneModeI::CohesiveZoneModeI< DisplacementDim >:
[legend]

## Public Member Functions

std::unique_ptr< typename FractureModelBase< DisplacementDim >::MaterialStateVariables > createMaterialStateVariables () override

CohesiveZoneModeI (double const penalty_aperture_cutoff, bool const tension_cutoff, MaterialPropertiesParameters material_properties)

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

MaterialProperties evaluatedMaterialProperties (double const t, ParameterLib::SpatialPosition const &x) const

Public Member Functions inherited from MaterialLib::Fracture::FractureModelBase< DisplacementDim >
virtual ~FractureModelBase ()=default

virtual 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, MaterialStateVariables &material_state_variables)=0

## Private Attributes

double const _penalty_aperture_cutoff

bool const _tension_cutoff

MaterialPropertiesParameters _mp

## ◆ CohesiveZoneModeI()

template<int DisplacementDim>
 MaterialLib::Fracture::CohesiveZoneModeI::CohesiveZoneModeI< DisplacementDim >::CohesiveZoneModeI ( double const penalty_aperture_cutoff, bool const tension_cutoff, MaterialPropertiesParameters material_properties )
inlineexplicit

Definition at line 137 of file CohesiveZoneModeI.h.

140 : _penalty_aperture_cutoff(penalty_aperture_cutoff),
141 _tension_cutoff(tension_cutoff),
142 _mp(std::move(material_properties))
143 {
144 }

## ◆ computeConstitutiveRelation()

template<int DisplacementDim>
 void MaterialLib::Fracture::CohesiveZoneModeI::CohesiveZoneModeI< DisplacementDim >::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

Computation of the constitutive relation for the Cohesive Zone Mode I model.

Parameters
 t current time x current position in space aperture0 initial fracture's aperture sigma0 initial stress w_prev fracture displacement at previous time step w fracture displacement at current time step sigma_prev stress at previous time step sigma stress at current time step C tangent matrix for stress and fracture displacements material_state_variables material state variables

Undamaged stiffness used in compression.

Definition at line 36 of file CohesiveZoneModeI.cpp.

54{
55 assert(dynamic_cast<StateVariables<DisplacementDim> const*>(
56 &material_state_variables) != nullptr);
57
58 auto& state =
59 static_cast<StateVariables<DisplacementDim>&>(material_state_variables);
60 // reset damage in each iteration
61 state.setInitialConditions();
62
63 auto const mp = evaluatedMaterialProperties(t, x);
64
65 C.setZero();
66
67 // Separately compute shear and normal stresses because of the penalty for
68 // the normal component.
69 const int index_ns = DisplacementDim - 1;
70 double const w_n = w[index_ns];
71 for (int i = 0; i < index_ns; i++)
72 {
73 C(i, i) = mp.Ks;
74 }
75
76 sigma.noalias() = C * w;
77
78 double const aperture = w_n + aperture0;
79
80 sigma.coeffRef(index_ns) =
81 mp.Kn * w_n * logPenalty(aperture0, aperture, _penalty_aperture_cutoff);
82
83 C(index_ns, index_ns) =
84 mp.Kn *
86
87 sigma.noalias() += sigma0;
88
89 // Exit if fracture is closing
90 if (sigma[index_ns] < 0)
91 {
92 return;
93 }
94
95 //
96 // Continue with fracture opening.
97 //
98 // effective opening calculated by shift to state corresponding to sigma0=0
99 const double w_n_effective = w_n + sigma0[index_ns] / mp.Kn;
101 if (mp.w_nf == 0.0) // can be used to model tension-cutoff
102 {
103 state.damage_prev = 1.0;
104 state.damage = 1.0;
105 }
106 else
107 {
108 state.damage =
109 computeDamage(state.damage_prev, w_n_effective, mp.w_np, mp.w_nf);
110 degradation = ((1 - state.damage) * mp.w_np) /
111 (mp.w_np + state.damage * (mp.w_nf - mp.w_np));
112 }
113
114 // Degrade stiffness tensor in tension.
115 C = C * degradation;
116 // Create effective relative displacement vector
117 Eigen::VectorXd w_eff = w;
118 // Only origin of normal entry is shifted, shear unaffected
119 w_eff[index_ns] = w_n_effective;
120 sigma = C * w_eff;
121
122 if (state.damage > state.damage_prev)
123 {
124 // If damage is increasing, provide extension to consistent tangent.
125
126 Eigen::Matrix<double, DisplacementDim, 1> dd_dw =
127 Eigen::Matrix<double, DisplacementDim, 1>::Zero();
128
129 double const tmp = mp.w_np + state.damage * (mp.w_nf - mp.w_np);
130 dd_dw[index_ns] =
131 (mp.w_np * mp.w_nf) / ((mp.w_nf - mp.w_np) * (tmp * tmp));
132
133 C -= C * w_eff * (dd_dw).transpose();
134 }
135
136 // TODO (nagel) Initial stress not considered, yet.
137 // sigma.noalias() += sigma0;
138}
MaterialProperties evaluatedMaterialProperties(double const t, ParameterLib::SpatialPosition const &x) const
double computeDamage(double const damage_prev, double const w_n, double const w_np, double const w_nf)
double logPenalty(double const aperture0, double const aperture, double const aperture_cutoff)
Definition LogPenalty.h:49
double logPenaltyDerivative(double const aperture0, double const aperture, double const aperture_cutoff)
Definition LogPenalty.h:23

## ◆ createMaterialStateVariables()

template<int DisplacementDim>
 std::unique_ptr< typename FractureModelBase< DisplacementDim >::MaterialStateVariables > MaterialLib::Fracture::CohesiveZoneModeI::CohesiveZoneModeI< DisplacementDim >::createMaterialStateVariables ( )
inlineoverridevirtual

Polymorphic creator for MaterialStateVariables objects specific for a material model.

Definition at line 130 of file CohesiveZoneModeI.h.

131 {
132 return std::make_unique<StateVariables<DisplacementDim>>();
133 }

## ◆ evaluatedMaterialProperties()

template<int DisplacementDim>
 MaterialProperties MaterialLib::Fracture::CohesiveZoneModeI::CohesiveZoneModeI< DisplacementDim >::evaluatedMaterialProperties ( double const t, ParameterLib::SpatialPosition const & x ) const
inline

Definition at line 180 of file CohesiveZoneModeI.h.

182 {
183 return MaterialProperties(t, x, _mp);
184 }

## ◆ _mp

template<int DisplacementDim>
 MaterialPropertiesParameters MaterialLib::Fracture::CohesiveZoneModeI::CohesiveZoneModeI< DisplacementDim >::_mp
private

Definition at line 197 of file CohesiveZoneModeI.h.

## ◆ _penalty_aperture_cutoff

template<int DisplacementDim>
 double const MaterialLib::Fracture::CohesiveZoneModeI::CohesiveZoneModeI< DisplacementDim >::_penalty_aperture_cutoff
private

Compressive normal displacements above this value will not enter the computation of the normal stiffness modulus of the fracture.

Note
Setting this to the initial aperture value allows negative apertures.

Definition at line 191 of file CohesiveZoneModeI.h.

## ◆ _tension_cutoff

template<int DisplacementDim>
 bool const MaterialLib::Fracture::CohesiveZoneModeI::CohesiveZoneModeI< DisplacementDim >::_tension_cutoff
private

If set no resistance to open the fracture over the initial aperture is opposed.

Definition at line 195 of file CohesiveZoneModeI.h.

The documentation for this class was generated from the following files: