13#include "libmesh/quadrature.h"
14#include "libmesh/utility.h"
15#include "libmesh/enum_quadrature_type.h"
16#include "libmesh/fe_type.h"
17#include "libmesh/string_to_enum.h"
18#include "libmesh/quadrature_gauss.h"
35 for (
unsigned int i = 0; i <
_t_points.size(); ++i)
45 for (
unsigned int t = 0; t <
_t_points.size(); ++t)
59 FEType fe_type(Utility::string_to_enum<Order>(
"First"),
60 Utility::string_to_enum<FEFamily>(
"LAGRANGE"));
64 _phi_map = fe->get_fe_map().get_phi_map();
66 for (
unsigned int i = 0; i < 4; ++i)
69 for (
unsigned int i = 0; i <
_2d_points.size(); ++i)
71 for (
unsigned int j = 0; j <
_t_points.size(); ++j)
81 for (
unsigned int k = 0; k <
_nodes.size(); ++k)
90 for (
unsigned int i = 0; i <
_2d_points.size(); ++i)
92 for (
unsigned int j = 0; j <
_t_points.size(); ++j)
95 for (
unsigned int temp1 = 0; temp1 < 5; ++temp1)
98 for (
unsigned int temp2 = 0; temp2 < 20; ++temp2)
111 for (
unsigned int ii = 0; ii < 3; ++ii)
112 for (
unsigned int jj = 0; jj < 3; ++jj)
125 for (
unsigned int k = 0; k <
_nodes.size(); ++k)
136 for (
unsigned int i = 0; i <
_2d_points.size(); ++i)
138 for (
unsigned int j = 0; j <
_t_points.size(); ++j)
140 for (
unsigned int component = 0; component < 3; ++component)
145 for (
unsigned int k = 0; k <
_nodes.size(); ++k)
168 for (
unsigned int component = 0; component < 3; ++component)
187 for (
unsigned int i = 0; i <
_2d_points.size(); ++i)
189 for (
unsigned int j = 0; j <
_t_points.size(); ++j)
191 (*
_B_nl[j])[i].resize(5, 20);
192 (*
_B_nl[j])[i].zero();
193 for (
unsigned int k = 0; k < 4; ++k)
195 for (
unsigned int p = 0;
p < 4; ++
p)
202 (*
_B_nl[j])[i](0, 4 + k) +=
207 (*
_B_nl[j])[i](0, 8 + k) +=
212 (*
_B_nl[j])[i](0, 12 + k) +=
218 (*
_B_nl[j])[i](0, 16 + k) +=
230 (*
_B_nl[j])[i](1, 4 + k) +=
235 (*
_B_nl[j])[i](1, 8 + k) +=
240 (*
_B_nl[j])[i](1, 12 + k) +=
246 (*
_B_nl[j])[i](1, 16 + k) +=
256 (*
_B_nl[j])[i](2, k) += 0.5 *
262 (*
_B_nl[j])[i](2, 4 + k) +=
269 (*
_B_nl[j])[i](2, 8 + k) +=
276 (*
_B_nl[j])[i](2, 12 + k) +=
285 (*
_B_nl[j])[i](2, 16 + k) +=
297 for (
unsigned int component = 0; component < 3; ++component)
300 (*
_B_nl[j])[i](3, 2 + component * 4) +=
304 (*
_B_nl[j])[i](3, 3 + component * 4) += -(*
_B_nl[j])[i](3, 2 + component * 4);
306 (*
_B_nl[j])[i](3, 1 + component * 4) +=
310 (*
_B_nl[j])[i](3, component * 4) += -(*
_B_nl[j])[i](3, 1 + component * 4);
313 (*
_B_nl[j])[i](3, 12 + 2) +=
316 (*
_B_nl[j])[i](3, 16 + 2) +=
319 (*
_B_nl[j])[i](3, 12 + 3) +=
322 (*
_B_nl[j])[i](3, 16 + 3) +=
327 (*
_B_nl[j])[i](3, 12 + 1) +=
330 (*
_B_nl[j])[i](3, 16 + 1) +=
333 (*
_B_nl[j])[i](3, 12 + 0) +=
336 (*
_B_nl[j])[i](3, 16 + 0) +=
341 (*
_B_nl[j])[i](4, 2 + component * 4) +=
345 (*
_B_nl[j])[i](4, 1 + component * 4) += -(*
_B_nl[j])[i](3, 2 + component * 4);
347 (*
_B_nl[j])[i](4, 3 + component * 4) +=
351 (*
_B_nl[j])[i](4, component * 4) += -(*
_B_nl[j])[i](3, 3 + component * 4);
354 (*
_B_nl[j])[i](4, 12 + 2) +=
357 (*
_B_nl[j])[i](4, 16 + 2) +=
360 (*
_B_nl[j])[i](4, 12 + 1) +=
363 (*
_B_nl[j])[i](4, 16 + 1) +=
368 (*
_B_nl[j])[i](4, 12 + 3) +=
371 (*
_B_nl[j])[i](4, 16 + 3) +=
374 (*
_B_nl[j])[i](4, 12 + 0) +=
377 (*
_B_nl[j])[i](4, 16 + 0) +=
registerMooseObject("SolidMechanicsApp", ADComputeFiniteShellStrain)
ADComputeFiniteShellStrain computes the strain increment term for shell elements under finite displac...
virtual void computeBNLMatrix()
Computes the B_nl matrix that connects the nonlinear strains to the nodal displacements and rotations...
virtual void initQpStatefulProperties() override
virtual void computeProperties() override
virtual void updateGVectors() override
Updates the vectors required for shear locking computation for finite rotations.
ADComputeFiniteShellStrain(const InputParameters ¶meters)
std::vector< ADMaterialProperty< DenseMatrix< Real > > * > _B_nl
Material property to store the B_nl matrix at each quadrature point.
virtual void computeNodeNormal() override
Computes the node normal at each node.
virtual void updatedxyz() override
Updates covariant vectors at each qp for finite rotations.
static InputParameters validParams()
virtual void computeSolnVector()
Computes the 20x1 soln vector and its derivatives for each shell element.
std::vector< ADRealVectorValue > _v1
First tangential vectors at nodes.
std::vector< const Node * > _nodes
Vector storing pointers to the nodes of the shell element.
virtual void computeGMatrix()
Computes the transformation matrix from natural coordinates to local cartesian coordinates for elasti...
std::vector< std::vector< Real > > _dphidxi_map
Derivatives of shape functions w.r.t isoparametric coordinates xi.
std::vector< const MaterialProperty< RankTwoTensor > * > _ge_old
Old ge matrix for elasticity tensor conversion.
const MaterialProperty< RealVectorValue > & _node_normal_old
Material property storing the old normal to the element at the 4 nodes.
std::vector< Point > _2d_points
Quadrature points in the in-plane direction in isoparametric coordinate system.
std::vector< ADMaterialProperty< RealVectorValue > * > _dxyz_dxi
Derivative of global x, y and z w.r.t isoparametric coordinate xi.
static InputParameters validParams()
std::vector< ADMaterialProperty< Real > * > _J_map
Material property containing jacobian of transformation.
const VariableValue & _thickness
Coupled variable for the shell thickness.
ADDenseVector _soln_vector
Vector that stores the incremental solution at all the 20 DOFs in the 4 noded element.
std::vector< std::vector< Real > > _dphideta_map
Derivatives of shape functions w.r.t isoparametric coordinates eta.
std::vector< ADMaterialProperty< DenseMatrix< Real > > * > _B
B_matrix for small strain.
std::vector< MaterialProperty< RankTwoTensor > * > _contravariant_transformation_matrix
Contravariant base vector matrix material property to transform strain.
std::vector< ADRealVectorValue > _v2
First tangential vectors at nodes.
ADDenseVector _strain_vector
Vector that stores the strain in the the 2 axial and 3 shear directions.
std::vector< ADMaterialProperty< RealVectorValue > * > _dxyz_deta
Derivative of global x, y and z w.r.t isoparametric coordinate eta.
std::vector< ADMaterialProperty< RankTwoTensor > * > _ge
ge matrix for elasticity tensor conversion
std::vector< std::vector< Real > > _phi_map
Shape function value.
std::vector< ADMaterialProperty< RankTwoTensor > * > _strain_increment
Strain increment in the covariant coordinate system.
std::vector< Point > _t_points
Quadrature points in the out of plane direction in isoparametric coordinate system.
std::vector< const MaterialProperty< Real > * > _J_map_old
Old material property containing jacobian of transformation.
std::vector< const MaterialProperty< RankTwoTensor > * > _total_strain_old
Old total strain increment in the covariant coordinate system.
virtual void computeBMatrix()
Computes the B matrix that connects strains to nodal displacements and rotations.
RankTwoTensor _unrotated_total_strain
const NumericVector< Number > & _sol_old
ADMaterialProperty< RealVectorValue > & _node_normal
Material property storing the normal to the element at the 4 nodes. Stored as a material property for...
std::vector< ADMaterialProperty< RankTwoTensor > * > _total_strain
Total strain increment in the covariant coordinate system.
std::vector< std::vector< unsigned int > > _soln_disp_index
Indices of solution vector corresponding to displacement DOFs in 3 directions at the 4 nodes.
std::vector< MaterialProperty< RankTwoTensor > * > _total_global_strain
Total strain in global coordinate system.
std::vector< ADMaterialProperty< RealVectorValue > * > _dxyz_dzeta
Derivative of global x, y and z w.r.t isoparametric coordinate zeta.
const FEBase *const & getFE(FEType type, unsigned int dim) const
virtual Assembly & assembly(const THREAD_ID tid, const unsigned int sys_num) override
FEProblemBase & _fe_problem
ADMaterialProperty< T > & declareADProperty(const std::string &name)
const Elem *const & _current_elem
const QBase *const & _qrule