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
 

Constructor & Destructor Documentation

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

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 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;
100 double degradation = 0.0;
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

References 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 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 }

References MaterialLib::Fracture::CohesiveZoneModeI::CohesiveZoneModeI< DisplacementDim >::_mp.

Member Data Documentation

◆ _mp

◆ _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: