www.mooseframework.org
ADComputeIncrementalShellStrain.h
Go to the documentation of this file.
1 //* This file is part of the MOOSE framework
2 //* https://www.mooseframework.org
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 
12 #include "ADMaterial.h"
13 #include "libmesh/dense_matrix.h"
14 
15 #define usingComputeIncrementalShellStrainMembers \
16  usingMaterialMembers; \
17  using ADComputeIncrementalShellStrain<compute_stage>::_t_points; \
18  using ADComputeIncrementalShellStrain<compute_stage>::_2d_points; \
19  using ADComputeIncrementalShellStrain<compute_stage>::_nodes; \
20  using ADComputeIncrementalShellStrain<compute_stage>::_ge; \
21  using ADComputeIncrementalShellStrain<compute_stage>::_ge_old; \
22  using ADComputeIncrementalShellStrain<compute_stage>::_J_map; \
23  using ADComputeIncrementalShellStrain<compute_stage>::_J_map_old; \
24  using ADComputeIncrementalShellStrain<compute_stage>::_node_normal; \
25  using ADComputeIncrementalShellStrain<compute_stage>::_node_normal_old; \
26  using ADComputeIncrementalShellStrain<compute_stage>::_strain_vector; \
27  using ADComputeIncrementalShellStrain<compute_stage>::_soln_vector; \
28  using ADComputeIncrementalShellStrain<compute_stage>::_B; \
29  using ADComputeIncrementalShellStrain<compute_stage>::_strain_increment; \
30  using ADComputeIncrementalShellStrain<compute_stage>::_total_strain; \
31  using ADComputeIncrementalShellStrain<compute_stage>::_total_strain_old; \
32  using ADComputeIncrementalShellStrain<compute_stage>::_v1; \
33  using ADComputeIncrementalShellStrain<compute_stage>::_v2; \
34  using ADComputeIncrementalShellStrain<compute_stage>::_dxyz_dxi; \
35  using ADComputeIncrementalShellStrain<compute_stage>::_dxyz_deta; \
36  using ADComputeIncrementalShellStrain<compute_stage>::_dxyz_dzeta; \
37  using ADComputeIncrementalShellStrain<compute_stage>::_thickness; \
38  using ADComputeIncrementalShellStrain<compute_stage>::_dphidxi_map; \
39  using ADComputeIncrementalShellStrain<compute_stage>::_dphideta_map; \
40  using ADComputeIncrementalShellStrain<compute_stage>::_phi_map; \
41  using ADComputeIncrementalShellStrain<compute_stage>::_g1_a; \
42  using ADComputeIncrementalShellStrain<compute_stage>::_g1_c; \
43  using ADComputeIncrementalShellStrain<compute_stage>::_g2_b; \
44  using ADComputeIncrementalShellStrain<compute_stage>::_g2_d; \
45  using ADComputeIncrementalShellStrain<compute_stage>::_soln_disp_index; \
46  using ADComputeIncrementalShellStrain<compute_stage>::_soln_rot_index; \
47  using ADComputeIncrementalShellStrain<compute_stage>::_sol_old; \
48  using ADComputeIncrementalShellStrain<compute_stage>::computeBMatrix; \
49  using ADComputeIncrementalShellStrain<compute_stage>::computeSolnVector; \
50  using ADComputeIncrementalShellStrain<compute_stage>::updateGVectors; \
51  using ADComputeIncrementalShellStrain<compute_stage>::updatedxyz; \
52  using ADComputeIncrementalShellStrain<compute_stage>::computeGMatrix
53 
54 // Forward Declarations
55 template <ComputeStage>
57 
58 namespace libMesh
59 {
60 class QGauss;
61 }
62 
63 template <typename>
67 
69 
70 template <ComputeStage compute_stage>
71 class ADComputeIncrementalShellStrain : public ADMaterial<compute_stage>
72 {
73 public:
74  ADComputeIncrementalShellStrain(const InputParameters & parameters);
75 
76 protected:
77  virtual void initQpStatefulProperties() override;
78  virtual void computeProperties() override;
79 
81  virtual void computeSolnVector();
82 
84  virtual void computeBMatrix();
85 
87  virtual void computeNodeNormal();
88 
90  virtual void updateGVectors(){};
91 
93  virtual void updatedxyz(){};
94 
96  virtual void computeGMatrix();
97 
99  unsigned int _nrot;
100 
102  unsigned int _ndisp;
103 
105  std::vector<unsigned int> _rot_num;
106 
108  std::vector<unsigned int> _disp_num;
109 
111  const VariableValue & _thickness;
112 
114  const bool _large_strain;
115 
118 
121 
123  std::vector<const MaterialProperty<RankTwoTensor> *> _total_strain_old;
124 
126  NonlinearSystemBase & _nonlinear_sys;
127 
129  std::vector<std::vector<unsigned int>> _soln_disp_index;
130 
132  std::vector<std::vector<unsigned int>> _soln_rot_index;
133 
135  ADDenseVector _soln_vector;
136 
138  ADDenseVector _strain_vector;
139 
141  std::vector<const Node *> _nodes;
142 
144  ADMaterialProperty(RealVectorValue) & _node_normal;
145 
147  const MaterialProperty<RealVectorValue> & _node_normal_old;
148 
150  std::unique_ptr<QGauss> _t_qrule;
151 
153  std::vector<Point> _t_points;
154 
156  std::vector<Point> _2d_points;
157 
159  std::vector<std::vector<Real>> _dphidxi_map;
160 
162  std::vector<std::vector<Real>> _dphideta_map;
163 
165  std::vector<std::vector<Real>> _phi_map;
166 
168  std::vector<ADMaterialProperty(RealVectorValue) *> _dxyz_dxi;
169 
171  std::vector<ADMaterialProperty(RealVectorValue) *> _dxyz_deta;
172 
174  std::vector<ADMaterialProperty(RealVectorValue) *> _dxyz_dzeta;
175 
177  std::vector<const MaterialProperty<RealVectorValue> *> _dxyz_dxi_old;
178 
180  std::vector<const MaterialProperty<RealVectorValue> *> _dxyz_deta_old;
181 
183  std::vector<const MaterialProperty<RealVectorValue> *> _dxyz_dzeta_old;
184 
186  std::vector<ADRealVectorValue> _v1;
187 
189  std::vector<ADRealVectorValue> _v2;
190 
192  std::vector<ADMaterialProperty(DenseMatrix<Real>) *> _B;
193 
195  std::vector<const MaterialProperty<DenseMatrix<Real>> *> _B_old;
196 
199 
201  std::vector<const MaterialProperty<RankTwoTensor> *> _ge_old;
202 
204  std::vector<ADMaterialProperty(Real) *> _J_map;
205 
207  std::vector<const MaterialProperty<Real> *> _J_map_old;
208 
210  std::vector<MaterialProperty<RankTwoTensor> *> _rotation_matrix;
211 
213  std::vector<MaterialProperty<RankTwoTensor> *> _total_global_strain;
214 
216  ADRealVectorValue _x2;
217  ADRealVectorValue _x3;
218  const NumericVector<Number> * const & _sol;
219  const NumericVector<Number> & _sol_old;
220  ADRealVectorValue _g3_a;
221  ADRealVectorValue _g3_c;
222  ADRealVectorValue _g3_b;
223  ADRealVectorValue _g3_d;
224  ADRealVectorValue _g1_a;
225  ADRealVectorValue _g1_c;
226  ADRealVectorValue _g2_b;
227  ADRealVectorValue _g2_d;
229 
231 };
ADComputeIncrementalShellStrain::_t_qrule
std::unique_ptr< QGauss > _t_qrule
Quadrature rule in the out of plane direction.
Definition: ADComputeIncrementalShellStrain.h:150
ADComputeIncrementalShellStrain::initQpStatefulProperties
virtual void initQpStatefulProperties() override
Definition: ADComputeIncrementalShellStrain.C:165
ADComputeIncrementalShellStrain::_unrotated_total_strain
RankTwoTensor _unrotated_total_strain
Definition: ADComputeIncrementalShellStrain.h:228
ADComputeIncrementalShellStrain::_dxyz_dxi
std::vector< ADMaterialProperty(RealVectorValue) * > _dxyz_dxi
Derivative of global x, y and z w.r.t isoparametric coordinate xi.
Definition: ADComputeIncrementalShellStrain.h:168
ADComputeIncrementalShellStrain::_large_strain
const bool _large_strain
Flag to compute large strains.
Definition: ADComputeIncrementalShellStrain.h:114
ADComputeIncrementalShellStrain::_soln_vector
ADDenseVector _soln_vector
Vector that stores the incremental solution at all the 20 DOFs in the 4 noded element.
Definition: ADComputeIncrementalShellStrain.h:135
ADComputeIncrementalShellStrain::computeSolnVector
virtual void computeSolnVector()
Computes the 20x1 soln vector and its derivatives for each shell element.
ADComputeIncrementalShellStrain::_disp_num
std::vector< unsigned int > _disp_num
Variable numbers corresponding to the displacement variables.
Definition: ADComputeIncrementalShellStrain.h:108
ADComputeIncrementalShellStrain::_g2_d
ADRealVectorValue _g2_d
Definition: ADComputeIncrementalShellStrain.h:227
declareADValidParams
declareADValidParams(ADComputeIncrementalShellStrain)
DualRankTwoTensor
RankTwoTensorTempl< DualReal > DualRankTwoTensor
Definition: ADComputeIncrementalShellStrain.h:66
ADComputeIncrementalShellStrain::updatedxyz
virtual void updatedxyz()
Updates covariant vectors at each qp for finite rotations.
Definition: ADComputeIncrementalShellStrain.h:93
ADComputeIncrementalShellStrain::_total_strain
std::vector< ADMaterialProperty(RankTwoTensor) * > _total_strain
Total strain increment in the covariant coordinate system.
Definition: ADComputeIncrementalShellStrain.h:120
libMesh
Definition: RANFSNormalMechanicalContact.h:24
ADComputeIncrementalShellStrain::_g3_a
ADRealVectorValue _g3_a
Definition: ADComputeIncrementalShellStrain.h:220
ADComputeIncrementalShellStrain::_ge_old
std::vector< const MaterialProperty< RankTwoTensor > * > _ge_old
Old ge matrix for elasticity tensor conversion.
Definition: ADComputeIncrementalShellStrain.h:201
ADComputeIncrementalShellStrain::_x3
ADRealVectorValue _x3
Definition: ADComputeIncrementalShellStrain.h:217
ADComputeIncrementalShellStrain::_phi_map
std::vector< std::vector< Real > > _phi_map
Shape function value.
Definition: ADComputeIncrementalShellStrain.h:165
ADComputeIncrementalShellStrain::_dxyz_dxi_old
std::vector< const MaterialProperty< RealVectorValue > * > _dxyz_dxi_old
Old derivative of global x, y and z w.r.t isoparametric coordinate xi.
Definition: ADComputeIncrementalShellStrain.h:177
ADComputeIncrementalShellStrain::_dxyz_deta
std::vector< ADMaterialProperty(RealVectorValue) * > _dxyz_deta
Derivative of global x, y and z w.r.t isoparametric coordinate eta.
Definition: ADComputeIncrementalShellStrain.h:171
ADComputeIncrementalShellStrain::_sol_old
const NumericVector< Number > & _sol_old
Definition: ADComputeIncrementalShellStrain.h:219
ADComputeIncrementalShellStrain::_J_map
std::vector< ADMaterialProperty(Real) * > _J_map
Material property containing jacobian of transformation.
Definition: ADComputeIncrementalShellStrain.h:204
ADComputeIncrementalShellStrain::_g3_c
ADRealVectorValue _g3_c
Definition: ADComputeIncrementalShellStrain.h:221
ADComputeIncrementalShellStrain::_g2_b
ADRealVectorValue _g2_b
Definition: ADComputeIncrementalShellStrain.h:226
ADComputeIncrementalShellStrain::_v2
std::vector< ADRealVectorValue > _v2
First tangential vectors at nodes.
Definition: ADComputeIncrementalShellStrain.h:189
ADComputeIncrementalShellStrain::_dphidxi_map
std::vector< std::vector< Real > > _dphidxi_map
Derivatives of shape functions w.r.t isoparametric coordinates xi.
Definition: ADComputeIncrementalShellStrain.h:159
ADComputeIncrementalShellStrain::_soln_disp_index
std::vector< std::vector< unsigned int > > _soln_disp_index
Indices of solution vector corresponding to displacement DOFs in 3 directions at the 4 nodes.
Definition: ADComputeIncrementalShellStrain.h:129
ADComputeIncrementalShellStrain::computeBMatrix
virtual void computeBMatrix()
Computes the B matrix that connects strains to nodal displacements and rotations.
Definition: ADComputeIncrementalShellStrain.C:391
ADComputeIncrementalShellStrain::_B
std::vector< ADMaterialProperty(DenseMatrix< Real >) * > _B
B_matrix for small strain.
Definition: ADComputeIncrementalShellStrain.h:192
ADComputeIncrementalShellStrain::_node_normal_old
const MaterialProperty< RealVectorValue > & _node_normal_old
Material property storing the old normal to the element at the 4 nodes.
Definition: ADComputeIncrementalShellStrain.h:147
ADComputeIncrementalShellStrain::_ndisp
unsigned int _ndisp
Number of coupled displacement variables.
Definition: ADComputeIncrementalShellStrain.h:102
ADComputeIncrementalShellStrain::computeGMatrix
virtual void computeGMatrix()
Computes the transformation matrix from natural coordinates to local cartesian coordinates for elasti...
Definition: ADComputeIncrementalShellStrain.C:248
ADComputeIncrementalShellStrain::ADMaterialProperty
ADMaterialProperty(RealVectorValue) &_node_normal
Material property storing the normal to the element at the 4 nodes. Stored as a material property for...
ADComputeIncrementalShellStrain::_g1_c
ADRealVectorValue _g1_c
Definition: ADComputeIncrementalShellStrain.h:225
ADComputeIncrementalShellStrain::_thickness
const VariableValue & _thickness
Coupled variable for the shell thickness.
Definition: ADComputeIncrementalShellStrain.h:111
ADComputeIncrementalShellStrain::_ge
std::vector< ADMaterialProperty(RankTwoTensor) * > _ge
ge matrix for elasticity tensor conversion
Definition: ADComputeIncrementalShellStrain.h:198
ADComputeIncrementalShellStrain::_nrot
unsigned int _nrot
Number of coupled rotational variables.
Definition: ADComputeIncrementalShellStrain.h:99
ADComputeIncrementalShellStrain::_strain_increment
std::vector< ADMaterialProperty(RankTwoTensor) * > _strain_increment
Strain increment in the covariant coordinate system.
Definition: ADComputeIncrementalShellStrain.h:117
ADComputeIncrementalShellStrain::ADComputeIncrementalShellStrain
ADComputeIncrementalShellStrain(const InputParameters &parameters)
Definition: ADComputeIncrementalShellStrain.C:46
ADComputeIncrementalShellStrain::_dxyz_deta_old
std::vector< const MaterialProperty< RealVectorValue > * > _dxyz_deta_old
Old derivative of global x, y and z w.r.t isoparametric coordinate eta.
Definition: ADComputeIncrementalShellStrain.h:180
ADComputeIncrementalShellStrain::_rotation_matrix
std::vector< MaterialProperty< RankTwoTensor > * > _rotation_matrix
Rotation matrix material property.
Definition: ADComputeIncrementalShellStrain.h:210
ADComputeIncrementalShellStrain::_J_map_old
std::vector< const MaterialProperty< Real > * > _J_map_old
Old material property containing jacobian of transformation.
Definition: ADComputeIncrementalShellStrain.h:207
ADComputeIncrementalShellStrain::_g3_d
ADRealVectorValue _g3_d
Definition: ADComputeIncrementalShellStrain.h:223
ADComputeIncrementalShellStrain::usingMaterialMembers
usingMaterialMembers
Definition: ADComputeIncrementalShellStrain.h:230
ADComputeIncrementalShellStrain::_x2
ADRealVectorValue _x2
simulation variables
Definition: ADComputeIncrementalShellStrain.h:216
ADComputeIncrementalShellStrain::_nonlinear_sys
NonlinearSystemBase & _nonlinear_sys
Reference to the nonlinear system object.
Definition: ADComputeIncrementalShellStrain.h:126
ADComputeIncrementalShellStrain::_t_points
std::vector< Point > _t_points
Quadrature points in the out of plane direction in isoparametric coordinate system.
Definition: ADComputeIncrementalShellStrain.h:153
ADComputeIncrementalShellStrain::_g3_b
ADRealVectorValue _g3_b
Definition: ADComputeIncrementalShellStrain.h:222
ADComputeIncrementalShellStrain::_dxyz_dzeta
std::vector< ADMaterialProperty(RealVectorValue) * > _dxyz_dzeta
Derivative of global x, y and z w.r.t isoparametric coordinate zeta.
Definition: ADComputeIncrementalShellStrain.h:174
ADComputeIncrementalShellStrain::_B_old
std::vector< const MaterialProperty< DenseMatrix< Real > > * > _B_old
Old B_matrix for small strain.
Definition: ADComputeIncrementalShellStrain.h:195
ADComputeIncrementalShellStrain::_strain_vector
ADDenseVector _strain_vector
Vector that stores the strain in the the 2 axial and 3 shear directions.
Definition: ADComputeIncrementalShellStrain.h:138
ADComputeIncrementalShellStrain::_v1
std::vector< ADRealVectorValue > _v1
First tangential vectors at nodes.
Definition: ADComputeIncrementalShellStrain.h:186
ADComputeIncrementalShellStrain::_dxyz_dzeta_old
std::vector< const MaterialProperty< RealVectorValue > * > _dxyz_dzeta_old
Old derivative of global x, y and z w.r.t isoparametric coordinate zeta.
Definition: ADComputeIncrementalShellStrain.h:183
ADComputeIncrementalShellStrain::_2d_points
std::vector< Point > _2d_points
Quadrature points in the in-plane direction in isoparametric coordinate system.
Definition: ADComputeIncrementalShellStrain.h:156
ADComputeIncrementalShellStrain::_total_global_strain
std::vector< MaterialProperty< RankTwoTensor > * > _total_global_strain
Total strain in global coordinate system.
Definition: ADComputeIncrementalShellStrain.h:213
ADComputeIncrementalShellStrain::_dphideta_map
std::vector< std::vector< Real > > _dphideta_map
Derivatives of shape functions w.r.t isoparametric coordinates eta.
Definition: ADComputeIncrementalShellStrain.h:162
ADComputeIncrementalShellStrain::_nodes
std::vector< const Node * > _nodes
Vector storing pointers to the nodes of the shell element.
Definition: ADComputeIncrementalShellStrain.h:141
ADComputeIncrementalShellStrain::_rot_num
std::vector< unsigned int > _rot_num
Variable numbers corresponding to the rotational variables.
Definition: ADComputeIncrementalShellStrain.h:105
RankTwoTensorTempl
Definition: ACGrGrElasticDrivingForce.h:17
ADComputeIncrementalShellStrain::_soln_rot_index
std::vector< std::vector< unsigned int > > _soln_rot_index
Indices of solution vector corresponding to rotation DOFs in 2 directions at the 4 nodes.
Definition: ADComputeIncrementalShellStrain.h:132
ADComputeIncrementalShellStrain::_total_strain_old
std::vector< const MaterialProperty< RankTwoTensor > * > _total_strain_old
Old total strain increment in the covariant coordinate system.
Definition: ADComputeIncrementalShellStrain.h:123
ADComputeIncrementalShellStrain::computeProperties
virtual void computeProperties() override
Definition: ADComputeIncrementalShellStrain.C:179
ADComputeIncrementalShellStrain::_g1_a
ADRealVectorValue _g1_a
Definition: ADComputeIncrementalShellStrain.h:224
ADComputeIncrementalShellStrain::computeNodeNormal
virtual void computeNodeNormal()
Computes the node normal at each node.
Definition: ADComputeIncrementalShellStrain.C:383
ADComputeIncrementalShellStrain::_sol
const NumericVector< Number > *const & _sol
Definition: ADComputeIncrementalShellStrain.h:218
RankTwoTensor
RankTwoTensorTempl< Real > RankTwoTensor
Definition: ADComputeIncrementalShellStrain.h:64
ADComputeIncrementalShellStrain
Definition: ADComputeIncrementalShellStrain.h:56
ADComputeIncrementalShellStrain::updateGVectors
virtual void updateGVectors()
Updates the vectors required for shear locking computation for finite rotations.
Definition: ADComputeIncrementalShellStrain.h:90