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;
registerMooseObject("SolidMechanicsApp", CZMComputeDisplacementJumpTotalLagrangian)
Moose::GenericType< RankTwoTensor, is_ad > GenericRankTwoTensor
This interface material class computes the displacement jump in the interface natural coordinate syst...
static InputParameters validParams()
const unsigned int _ndisp
number of displacement components
void initQpStatefulProperties() override
Compute the displacement jump in interface coordinates across a cohesive zone for the total Lagrangia...
void initQpStatefulProperties() override
static InputParameters validParams()
std::vector< const GenericVariableGradient< is_ad > * > _grad_disp
the coupled displacement and neighbor displacement gradient
void computeRotationMatrices() override
method computing the required rotation matrices
void computeLocalDisplacementJump() override
compute the interface displacement increment using an incremental total Lagrangian approach
void computeFandR()
method computing F and the associated rotation
std::vector< const GenericVariableGradient< is_ad > * > _grad_disp_neighbor
const VariableGradient & _grad_zero
const MooseArray< ADRealVectorValue > & _ad_grad_zero