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 119 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

Constructor & Destructor Documentation

◆ CohesiveZoneModeI()

Member Function Documentation

◆ 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
tcurrent time
xcurrent position in space
aperture0initial fracture's aperture
sigma0initial stress
w_prevfracture displacement at previous time step
wfracture displacement at current time step
sigma_prevstress at previous time step
sigmastress at current time step
Ctangent matrix for stress and fracture displacements
material_state_variablesmaterial state variables

Undamaged stiffness used in compression.

Definition at line 30 of file CohesiveZoneModeI.cpp.

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

References _penalty_aperture_cutoff, evaluatedMaterialProperties(), MaterialLib::Fracture::logPenalty(), MaterialLib::Fracture::logPenaltyDerivative(), and MaterialLib::Fracture::CohesiveZoneModeI::StateVariables< DisplacementDim >::setInitialConditions().

◆ 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.

Implements MaterialLib::Fracture::FractureModelBase< DisplacementDim >.

Definition at line 124 of file CohesiveZoneModeI.h.

◆ evaluatedMaterialProperties()

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

Definition at line 174 of file CohesiveZoneModeI.h.

176 {
177 return MaterialProperties(t, x, _mp);
178 }

References _mp.

Referenced by computeConstitutiveRelation().

Member Data Documentation

◆ _mp

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

Definition at line 191 of file CohesiveZoneModeI.h.

Referenced by CohesiveZoneModeI(), and evaluatedMaterialProperties().

◆ _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 185 of file CohesiveZoneModeI.h.

Referenced by CohesiveZoneModeI(), and computeConstitutiveRelation().

◆ _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 189 of file CohesiveZoneModeI.h.

Referenced by CohesiveZoneModeI().


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