23 "Compute the displacement jump increment across a czm interface in local " 24 "coordinates for the Total Lagrangian kinematic formulation");
33 _F(this->template declareGenericPropertyByName<
RankTwoTensor, is_ad>(_base_name +
"F_czm")),
34 _R(this->template declareGenericPropertyByName<
RankTwoTensor, is_ad>(_base_name +
36 _czm_reference_rotation(this->template declareGenericPropertyByName<
RankTwoTensor, is_ad>(
37 _base_name +
"czm_reference_rotation"))
40 for (
unsigned int i = 0; i <
_ndisp; ++i)
42 _grad_disp.push_back(&this->
template coupledGenericGradient<is_ad>(
"displacements", i));
44 &this->
template coupledGenericNeighborGradient<is_ad>(
"displacements", i));
48 for (
unsigned int i =
_ndisp; i < 3; i++)
68 _displacement_jump_global[_qp] = 0;
69 _F[_qp].setToIdentity();
70 _R[_qp].setToIdentity();
77 _interface_displacement_jump[_qp] =
78 _czm_total_rotation[_qp].transpose() * _displacement_jump_global[_qp];
85 _czm_reference_rotation[_qp] = CohesiveZoneModelTools::computeReferenceRotation<is_ad>(
86 _normals[_qp], this->_mesh.dimension());
88 _czm_total_rotation[_qp] = _R[_qp] * _czm_reference_rotation[_qp];
97 (*_grad_disp[0])[_qp], (*_grad_disp[1])[_qp], (*_grad_disp[2])[_qp]));
98 const auto F_neighbor =
101 (*_grad_disp_neighbor[1])[_qp],
102 (*_grad_disp_neighbor[2])[_qp]));
104 _F[_qp] = 0.5 * (
F + F_neighbor);
110 for (
unsigned int i = 0; i < 3; i++)
111 for (
unsigned int j = 0;
j < 3;
j++)
113 throw MooseException(
"CZMMaterialBaseIncremental _F is not finite, reducing time step");
115 using FR2T = std::conditional_t<is_ad, ADFactorizedRankTwoTensor, FactorizedRankTwoTensor>;
116 const FR2T
C = _F[_qp].transpose() * _F[_qp];
117 const auto Uinv = MathUtils::sqrt(
C).inverse().get();
118 _R[_qp] = _F[_qp] * Uinv;
std::vector< const GenericVariableGradient< is_ad > * > _grad_disp_neighbor
const VariableGradient & _grad_zero
const MooseArray< ADRealVectorValue > & _ad_grad_zero
void initQpStatefulProperties() override
std::vector< const GenericVariableGradient< is_ad > * > _grad_disp
the coupled displacement and neighbor displacement gradient
void computeRotationMatrices() override
method computing the required rotation matrices
static InputParameters validParams()
static const std::string F
Compute the displacement jump in interface coordinates across a cohesive zone for the total Lagrangia...
const unsigned int _ndisp
number of displacement components
void initQpStatefulProperties() override
registerMooseObject("SolidMechanicsApp", CZMComputeDisplacementJumpTotalLagrangian)
void computeFandR()
method computing F and the associated rotation
void computeLocalDisplacementJump() override
compute the interface displacement increment using an incremental total Lagrangian approach ...
static InputParameters validParams()
static const std::complex< double > j(0, 1)
Complex number "j" (also known as "i")
This interface material class computes the displacement jump in the interface natural coordinate syst...
static const std::string C
Moose::GenericType< RankTwoTensor, is_ad > GenericRankTwoTensor