https://mooseframework.inl.gov
BilinearMixedModeCohesiveZoneModel.h
Go to the documentation of this file.
1 //* This file is part of the MOOSE framework
2 //* https://mooseframework.inl.gov
3 //*
4 //* All rights reserved, see COPYRIGHT for full restrictions
5 //* https://github.com/idaholab/moose/blob/master/COPYRIGHT
6 //*
7 //* Licensed under LGPL 2.1, please see LICENSE for details
8 //* https://www.gnu.org/licenses/lgpl-2.1.html
9 
10 #pragma once
11 
13 #include "TwoVector.h"
14 
19  virtual public WeightedVelocitiesUserObject,
20  virtual public PenaltySimpleCohesiveZoneModel
21 {
22 public:
24 
26 
27  virtual const ADVariableValue & czmGlobalTraction(unsigned int i) const;
28 
29  virtual void initialize() override;
30  virtual void finalize() override;
31  virtual void reinit() override;
32  virtual void timestepSetup() override;
33 
34  // Getters for analysis output
35  Real getModeMixityRatio(const Node * const node) const;
36  Real getCohesiveDamage(const Node * const node) const;
37  Real getLocalDisplacementNormal(const Node * const node) const;
38  Real getLocalDisplacementTangential(const Node * const node) const;
39 
40 protected:
41  virtual void computeQpProperties() override;
42  virtual void computeQpIProperties() override;
43 
44  virtual bool constrainedByOwner() const override { return false; }
45 
46  // Compute CZM kinematics.
47  virtual void prepareJumpKinematicQuantities() override;
48  virtual void computeFandR(const Node * const node) override;
49 
50  // @{
51  // Compute CZM bilinear traction law.
52  virtual void computeModeMixity(const Node * const node);
53  virtual void computeCriticalDisplacementJump(const Node * const node);
54  virtual void computeFinalDisplacementJump(const Node * const node);
55  virtual void computeEffectiveDisplacementJump(const Node * const node);
56  virtual void computeDamage(const Node * const node);
57  // @}
58 
60  virtual void computeBilinearMixedModeTraction(const Node * const node) override;
61 
63  virtual void computeGlobalTraction(const Node * const node) override;
64 
66  template <class T>
67  T normalizeQuantity(const std::unordered_map<const DofObject *, T> & map,
68  const Node * const node);
69 
71  const unsigned int _ndisp;
72 
74  std::vector<const GenericVariableGradient<true> *> _grad_disp;
75 
77  std::vector<const GenericVariableGradient<true> *> _grad_disp_neighbor;
78 
81  std::unordered_map<const DofObject *, ADRankTwoTensor> _dof_to_rotation_matrix;
82 
84  std::unordered_map<const DofObject *, ADRealVectorValue> _dof_to_interface_displacement_jump;
85 
88 
91 
93  std::unordered_map<const DofObject *, ADRankTwoTensor> _dof_to_F;
94 
96  std::unordered_map<const DofObject *, ADRankTwoTensor> _dof_to_F_neighbor;
97 
99  std::unordered_map<const DofObject *, ADRankTwoTensor> _dof_to_interface_F;
100 
102  std::unordered_map<const DofObject *, ADRankTwoTensor> _dof_to_interface_R;
103 
105  std::unordered_map<const DofObject *, ADReal> _dof_to_mode_mixity_ratio;
106 
109 
112 
115 
118 
121 
124 
127 
130 
131  // Penalty stiffness for bilinear traction model
133 
136  {
137  POWER_LAW,
138  BK
140 
143 
146 
149 
151  std::vector<ADVariableValue> _czm_interpolated_traction;
152 
153  // @{
154  // Strength material properties at the nodes
155  std::unordered_map<const DofObject *, ADReal> _dof_to_normal_strength;
156  std::unordered_map<const DofObject *, ADReal> _dof_to_shear_strength;
157  // @}
158 
159  // @{
160  // Fracture properties at the nodes
161  std::unordered_map<const DofObject *, ADReal> _dof_to_GI_c;
162  std::unordered_map<const DofObject *, ADReal> _dof_to_GII_c;
163  // @}
164 
165  // @{
166  // The parameters in the damage evolution law: Maps node to damage
167  std::unordered_map<const DofObject *, ADReal> _dof_to_delta_initial;
168  std::unordered_map<const DofObject *, ADReal> _dof_to_delta_final;
169  std::unordered_map<const DofObject *, ADReal> _dof_to_delta_max;
170  std::unordered_map<const DofObject *, std::pair<ADReal, Real>> _dof_to_damage;
171  // @}
172 
174  std::unordered_map<const DofObject *, ADRealVectorValue> _dof_to_czm_traction;
175 
176  std::unordered_map<const DofObject *, ADRealVectorValue> _dof_to_displacement_jump;
177 };
std::unordered_map< const DofObject *, ADRealVectorValue > _dof_to_interface_displacement_jump
Map from degree of freedom to local displacement jump.
std::unordered_map< const DofObject *, ADReal > _dof_to_normal_strength
ADReal _normal_strength_interpolation
Interpolated value of normal_strength.
Real getModeMixityRatio(const Node *const node) const
std::unordered_map< const DofObject *, ADRankTwoTensor > _dof_to_interface_F
Map from degree of freedom to interface deformation gradient tensor.
std::unordered_map< const DofObject *, ADRankTwoTensor > _dof_to_rotation_matrix
*** Kinematics/displacement jump quantities *** Map from degree of freedom to rotation matrix ...
virtual void computeFandR(const Node *const node) override
const MaterialProperty< Real > & _GI_c
Fracture parameter mode I.
const Real _regularization_alpha
Parameter for the regularization of the Macaulay bracket.
std::vector< const GenericVariableGradient< true > * > _grad_disp
Coupled displacement gradients.
const unsigned int _ndisp
Number of displacement components.
virtual const ADVariableValue & czmGlobalTraction(unsigned int i) const
std::unordered_map< const DofObject *, ADReal > _dof_to_delta_initial
User object for computing weighted gaps and contact pressure for penalty based mortar constraints...
std::unordered_map< const DofObject *, ADRankTwoTensor > _dof_to_interface_R
Map from degree of freedom to interface rotation tensor.
virtual void computeBilinearMixedModeTraction(const Node *const node) override
Encapsulate the CZM constitutive behavior.
Creates dof object to weighted tangential velocities map.
const MaterialProperty< Real > & _GII_c
Fracture parameter mode II.
Real getCohesiveDamage(const Node *const node) const
DualNumber< Real, DNDerivativeType, true > ADReal
const Real _viscosity
Viscosity for damage model.
std::unordered_map< const DofObject *, ADRealVectorValue > _dof_to_displacement_jump
ADReal _shear_strength_interpolation
Interpolated value of shear_strength.
std::unordered_map< const DofObject *, std::pair< ADReal, Real > > _dof_to_damage
std::unordered_map< const DofObject *, ADReal > _dof_to_delta_max
std::unordered_map< const DofObject *, ADReal > _dof_to_GII_c
virtual void computeQpIProperties() override
Computes properties that are functions both of _qp and _i, for example the weighted gap...
MixedModeCriterion
Mixed-mode propagation criterion.
virtual void computeQpProperties() override
Computes properties that are functions only of the current quadrature point (_qp), e.g.
Real getLocalDisplacementTangential(const Node *const node) const
virtual void computeGlobalTraction(const Node *const node) override
Compute global traction for mortar application.
std::unordered_map< const DofObject *, ADRealVectorValue > _dof_to_czm_traction
Total Lagrangian stress to be applied on CZM interface.
ADRankTwoTensor _F_interpolation
Deformation gradient for interpolation.
const MaterialProperty< Real > & _shear_strength
The shear strength material property.
std::vector< ADVariableValue > _czm_interpolated_traction
The global traction.
const MaterialProperty< Real > & _normal_strength
The normal strength material property.
std::unordered_map< const DofObject *, ADRankTwoTensor > _dof_to_F_neighbor
Map from degree of freedom to neighbor, interpolated deformation gradient tensor. ...
ADRankTwoTensor _F_neighbor_interpolation
Deformation gradient for interpolation of the neighbor projection.
std::unordered_map< const DofObject *, ADReal > _dof_to_delta_final
std::unordered_map< const DofObject *, ADRankTwoTensor > _dof_to_F
Map from degree of freedom to secondary, interpolated deformation gradient tensor.
virtual void computeModeMixity(const Node *const node)
T normalizeQuantity(const std::unordered_map< const DofObject *, T > &map, const Node *const node)
Normalize mortar quantities (remove mortar integral scaling)
BilinearMixedModeCohesiveZoneModel(const InputParameters &parameters)
std::unordered_map< const DofObject *, ADReal > _dof_to_shear_strength
virtual void computeDamage(const Node *const node)
ADReal _GI_c_interpolation
Interpolated value of fracture paramter mode I.
virtual void computeCriticalDisplacementJump(const Node *const node)
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
std::unordered_map< const DofObject *, ADReal > _dof_to_GI_c
std::vector< const GenericVariableGradient< true > * > _grad_disp_neighbor
Coupled displacement and neighbor displacement gradient.
User object that interface pressure resulting from a simple traction separation law.
const InputParameters & parameters() const
enum BilinearMixedModeCohesiveZoneModel::MixedModeCriterion _mix_mode_criterion
User object that interface pressure resulting from a simple traction separation law.
virtual void computeFinalDisplacementJump(const Node *const node)
const Real _power_law_parameter
Power law parameter for bilinear traction model.
Real getLocalDisplacementNormal(const Node *const node) const
virtual void computeEffectiveDisplacementJump(const Node *const node)
ADReal _GII_c_interpolation
Interpolated value of fracture paramter mode II.
std::unordered_map< const DofObject *, ADReal > _dof_to_mode_mixity_ratio
Map from degree of freedom to mode mixity ratio (AD needed?)