https://mooseframework.inl.gov
ADComputeFiniteShellStrain.C
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 
11 #include "DenseMatrix.h"
12 
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"
19 
21 
24 {
26  params.addClassDescription("Compute a large strain increment for the shell.");
27  return params;
28 }
29 
31  : ADComputeIncrementalShellStrain(parameters), _B_nl()
32 {
33  _B_nl.resize(_t_points.size());
34 
35  for (unsigned int i = 0; i < _t_points.size(); ++i)
36  _B_nl[i] = &declareADProperty<DenseMatrix<Real>>("B_nl_t_points_" + std::to_string(i));
37 }
38 
39 void
41 {
43 
44  ADDenseMatrix b(5, 20);
45  for (unsigned int t = 0; t < _t_points.size(); ++t)
46  (*_B_nl[t])[_qp] = b;
47 }
48 
49 void
51 {
52  // quadrature points in isoparametric space
53  _2d_points = _qrule->get_points(); // would be in 2D
54 
55  unsigned int dim = _current_elem->dim();
56 
57  // derivatives of shape functions (dphidxi, dphideta and dphidzeta) evaluated at quadrature points
58  // (in isoparametric space).
59  FEType fe_type(Utility::string_to_enum<Order>("First"),
60  Utility::string_to_enum<FEFamily>("LAGRANGE"));
61  auto & fe = _fe_problem.assembly(_tid, /*nl_sys_num=*/0).getFE(fe_type, dim);
62  _dphidxi_map = fe->get_fe_map().get_dphidxi_map();
63  _dphideta_map = fe->get_fe_map().get_dphideta_map();
64  _phi_map = fe->get_fe_map().get_phi_map();
65 
66  for (unsigned int i = 0; i < 4; ++i)
67  _nodes[i] = _current_elem->node_ptr(i);
68 
69  for (unsigned int i = 0; i < _2d_points.size(); ++i)
70  {
71  for (unsigned int j = 0; j < _t_points.size(); ++j)
72  {
73  (*_ge[j])[i] = (*_ge_old[j])[i];
74  (*_J_map[j])[i] = (*_J_map_old[j])[i];
75  }
76  }
77 
79  updatedxyz();
80 
81  for (unsigned int k = 0; k < _nodes.size(); ++k)
83 
85 
87 
89 
90  for (unsigned int i = 0; i < _2d_points.size(); ++i)
91  {
92  for (unsigned int j = 0; j < _t_points.size(); ++j)
93  {
94  // compute strain increment in covariant coordinate system using B and _soln_vector
95  for (unsigned int temp1 = 0; temp1 < 5; ++temp1)
96  {
97  _strain_vector(temp1) = 0.0;
98  for (unsigned int temp2 = 0; temp2 < 20; ++temp2)
99  _strain_vector(temp1) += (*_B[j])[i](temp1, temp2) * _soln_vector(temp2);
100  }
101 
102  (*_strain_increment[j])[i](0, 0) = _strain_vector(0);
103  (*_strain_increment[j])[i](1, 1) = _strain_vector(1);
104  (*_strain_increment[j])[i](0, 1) = _strain_vector(2);
105  (*_strain_increment[j])[i](0, 2) = _strain_vector(3);
106  (*_strain_increment[j])[i](1, 2) = _strain_vector(4);
107  (*_strain_increment[j])[i](1, 0) = (*_strain_increment[j])[i](0, 1);
108  (*_strain_increment[j])[i](2, 0) = (*_strain_increment[j])[i](0, 2);
109  (*_strain_increment[j])[i](2, 1) = (*_strain_increment[j])[i](1, 2);
110  (*_total_strain[j])[i] = (*_total_strain_old[j])[i] + (*_strain_increment[j])[i];
111  for (unsigned int ii = 0; ii < 3; ++ii)
112  for (unsigned int jj = 0; jj < 3; ++jj)
116  (*_contravariant_transformation_matrix[j])[i].transpose();
117  }
118  }
119 }
120 
121 void
123 {
124  // update _node_normal
125  for (unsigned int k = 0; k < _nodes.size(); ++k)
126  {
127  _node_normal[k] =
128  -_v2[k] * _soln_vector(12 + k) + _v1[k] * _soln_vector(16 + k) + _node_normal_old[k];
129  _node_normal[k] /= _node_normal[k].norm();
130  }
131 }
132 
133 void
135 {
136  for (unsigned int i = 0; i < _2d_points.size(); ++i)
137  {
138  for (unsigned int j = 0; j < _t_points.size(); ++j)
139  {
140  for (unsigned int component = 0; component < 3; ++component)
141  {
142  (*_dxyz_dxi[j])[i](component) = 0.0;
143  (*_dxyz_deta[j])[i](component) = 0.0;
144  (*_dxyz_dzeta[j])[i](component) = 0.0;
145  for (unsigned int k = 0; k < _nodes.size(); ++k)
146  {
147  (*_dxyz_dxi[j])[i](component) +=
148  _dphidxi_map[k][i] *
150  _t_points[j](0) / 2.0 * _thickness[i] * _dphidxi_map[k][i] *
152  (*_dxyz_deta[j])[i](component) +=
153  _dphideta_map[k][i] *
155  _t_points[j](0) / 2.0 * _thickness[i] * _dphideta_map[k][i] *
157  (*_dxyz_dzeta[j])[i](component) +=
158  _thickness[i] * _phi_map[k][i] * _node_normal_old[k](component) / 2.0;
159  }
160  }
161  }
162  }
163 }
164 
165 void
167 {
168  for (unsigned int component = 0; component < 3; ++component)
169  {
170  _g1_a(component) +=
172  _g1_c(component) +=
174  _g2_b(component) +=
176  _g2_d(component) +=
178  }
179 }
180 
181 void
183 {
184  // compute BNL matrix - rows correspond to [ux1, ux2, ux3, ux4, uy1, uy2, uy3, uy4, uz1, uz2, uz3,
185  // uz4, a1, a2, a3, a4, b1, b2, b3, b4]
186 
187  for (unsigned int i = 0; i < _2d_points.size(); ++i)
188  {
189  for (unsigned int j = 0; j < _t_points.size(); ++j)
190  {
191  (*_B_nl[j])[i].resize(5, 20);
192  (*_B_nl[j])[i].zero();
193  for (unsigned int k = 0; k < 4; ++k)
194  {
195  for (unsigned int p = 0; p < 4; ++p) // loop over nodes
196  {
197  // corresponding to strain(0,0)
198  (*_B_nl[j])[i](0, k) += _dphidxi_map[k][i] * _dphidxi_map[p][i] *
199  (_soln_vector(p) + _t_points[j](0) / 2.0 * _thickness[i] *
200  (-_soln_vector(p + 12) * _v2[p](0) +
201  _soln_vector(p + 16) * _v1[p](0)));
202  (*_B_nl[j])[i](0, 4 + k) +=
203  _dphidxi_map[k][i] * _dphidxi_map[p][i] *
204  (_soln_vector(p + 4) +
205  _t_points[j](0) / 2.0 * _thickness[i] *
206  (-_soln_vector(p + 12) * _v2[p](1) + _soln_vector(p + 16) * _v1[p](1)));
207  (*_B_nl[j])[i](0, 8 + k) +=
208  _dphidxi_map[k][i] * _dphidxi_map[p][i] *
209  (_soln_vector(p + 8) +
210  _t_points[j](0) / 2.0 * _thickness[i] *
211  (-_soln_vector(p + 12) * _v2[p](2) + _soln_vector(p + 16) * _v1[p](2)));
212  (*_B_nl[j])[i](0, 12 + k) +=
213  _t_points[j](0) / 2.0 * _thickness[i] * _dphidxi_map[k][i] * _dphidxi_map[p][i] *
214  (-(_v2[p](0) * _soln_vector(p) + _v2[p](1) * _soln_vector(p + 4) +
215  _v2[p](2) * _soln_vector(p + 8)) +
216  _t_points[j](0) / 2.0 * _thickness[i] * _v2[k] *
217  (_v2[p] * _soln_vector(p + 12) - _v1[p] * _soln_vector(p + 16)));
218  (*_B_nl[j])[i](0, 16 + k) +=
219  _t_points[j](0) / 2.0 * _thickness[i] * _dphidxi_map[k][i] * _dphidxi_map[p][i] *
220  ((_v1[p](0) * _soln_vector(p) + _v1[p](1) * _soln_vector(p + 4) +
221  _v1[p](2) * _soln_vector(p + 8)) +
222  _t_points[j](0) / 2.0 * _thickness[i] * _v1[k] *
223  (-_v2[p] * _soln_vector(p + 12) + _v1[p] * _soln_vector(p + 16)));
224 
225  // corresponding to strain(1,1)
226  (*_B_nl[j])[i](1, k) += _dphideta_map[k][i] * _dphideta_map[p][i] *
227  (_soln_vector(p) + _t_points[j](0) / 2.0 * _thickness[i] *
228  (-_soln_vector(p + 12) * _v2[p](0) +
229  _soln_vector(p + 16) * _v1[p](0)));
230  (*_B_nl[j])[i](1, 4 + k) +=
231  _dphideta_map[k][i] * _dphideta_map[p][i] *
232  (_soln_vector(p + 4) +
233  _t_points[j](0) / 2.0 * _thickness[i] *
234  (-_soln_vector(p + 12) * _v2[p](1) + _soln_vector(p + 16) * _v1[p](1)));
235  (*_B_nl[j])[i](1, 8 + k) +=
236  _dphideta_map[k][i] * _dphideta_map[p][i] *
237  (_soln_vector(p + 8) +
238  _t_points[j](0) / 2.0 * _thickness[i] *
239  (-_soln_vector(p + 12) * _v2[p](2) + _soln_vector(p + 16) * _v1[p](2)));
240  (*_B_nl[j])[i](1, 12 + k) +=
241  _t_points[j](0) / 2.0 * _thickness[i] * _dphideta_map[k][i] * _dphideta_map[p][i] *
242  (-(_v2[p](0) * _soln_vector(p) + _v2[p](1) * _soln_vector(p + 4) +
243  _v2[p](2) * _soln_vector(p + 8)) +
244  _t_points[j](0) / 2.0 * _thickness[i] * _v2[k] *
245  (_v2[p] * _soln_vector(p + 12) - _v1[p] * _soln_vector(p + 16)));
246  (*_B_nl[j])[i](1, 16 + k) +=
247  _t_points[j](0) / 2.0 * _thickness[i] * _dphideta_map[k][i] * _dphideta_map[p][i] *
248  ((_v1[p](0) * _soln_vector(p) + _v1[p](1) * _soln_vector(p + 4) +
249  _v1[p](2) * _soln_vector(p + 8)) +
250  _t_points[j](0) / 2.0 * _thickness[i] * _v1[k] *
251  (-_v2[p] * _soln_vector(p + 12) + _v1[p] * _soln_vector(p + 16)));
252 
253  // terms corresponding to strain(2,2) are 0.
254 
255  // corresponding to strain(0,1)
256  (*_B_nl[j])[i](2, k) += 0.5 *
257  (_dphidxi_map[k][i] * _dphideta_map[p][i] +
258  _dphideta_map[k][i] * _dphidxi_map[p][i]) *
259  (_soln_vector(p) + _t_points[j](0) / 2.0 * _thickness[i] *
260  (-_soln_vector(p + 12) * _v2[p](0) +
261  _soln_vector(p + 16) * _v1[p](0)));
262  (*_B_nl[j])[i](2, 4 + k) +=
263  0.5 *
264  (_dphidxi_map[k][i] * _dphideta_map[p][i] +
265  _dphideta_map[k][i] * _dphidxi_map[p][i]) *
266  (_soln_vector(p + 4) +
267  _t_points[j](0) / 2.0 * _thickness[i] *
268  (-_soln_vector(p + 12) * _v2[p](1) + _soln_vector(p + 16) * _v1[p](1)));
269  (*_B_nl[j])[i](2, 8 + k) +=
270  0.5 *
271  (_dphidxi_map[k][i] * _dphideta_map[p][i] +
272  _dphideta_map[k][i] * _dphidxi_map[p][i]) *
273  (_soln_vector(p + 8) +
274  _t_points[j](0) / 2.0 * _thickness[i] *
275  (-_soln_vector(p + 12) * _v2[p](2) + _soln_vector(p + 16) * _v1[p](2)));
276  (*_B_nl[j])[i](2, 12 + k) +=
277  _t_points[j](0) * 0.25 *
278  (_dphidxi_map[k][i] * _dphideta_map[p][i] +
279  _dphideta_map[k][i] * _dphidxi_map[p][i]) *
280  _thickness[i] *
281  (-(_v2[k](0) * _soln_vector(p) + _v2[k](1) * _soln_vector(p + 4) +
282  _v2[k](2) * _soln_vector(p + 8)) +
283  _t_points[j](0) / 2.0 * _thickness[i] * _v2[k] *
284  (_v2[p] * _soln_vector(p + 12) - _v1[p] * _soln_vector(p + 16)));
285  (*_B_nl[j])[i](2, 16 + k) +=
286  _t_points[j](0) * 0.25 *
287  (_dphidxi_map[k][i] * _dphideta_map[p][i] +
288  _dphideta_map[k][i] * _dphidxi_map[p][i]) *
289  _thickness[i] *
290  ((_v1[k](0) * _soln_vector(p) + _v1[k](1) * _soln_vector(p + 4) +
291  _v1[k](2) * _soln_vector(p + 8)) +
292  _t_points[j](0) / 2.0 * _thickness[i] * _v1[k] *
293  (-_v2[p] * _soln_vector(p + 12) + _v1[p] * _soln_vector(p + 16)));
294  }
295  }
296 
297  for (unsigned int component = 0; component < 3; ++component)
298  {
299  // corresponding to strain(0,2)
300  (*_B_nl[j])[i](3, 2 + component * 4) +=
301  1.0 / 32.0 * (1.0 + _2d_points[i](1)) * _thickness[i] *
302  (-_soln_vector(12 + 2) * _v2[2](component) + _soln_vector(16 + 2) * _v1[2](component) -
303  _soln_vector(12 + 3) * _v2[3](component) + _soln_vector(16 + 3) * _v1[3](component));
304  (*_B_nl[j])[i](3, 3 + component * 4) += -(*_B_nl[j])[i](3, 2 + component * 4);
305 
306  (*_B_nl[j])[i](3, 1 + component * 4) +=
307  1.0 / 32.0 * (1.0 - _2d_points[i](1)) * _thickness[i] *
308  (-_soln_vector(12 + 1) * _v2[1](component) + _soln_vector(16 + 1) * _v1[1](component) -
309  _soln_vector(12 + 0) * _v2[0](component) + _soln_vector(16 + 0) * _v1[0](component));
310  (*_B_nl[j])[i](3, component * 4) += -(*_B_nl[j])[i](3, 1 + component * 4);
311 
312  // adding contributions corresponding to alpha 2 and 3 and beta 2 and 3
313  (*_B_nl[j])[i](3, 12 + 2) +=
314  -1.0 / 32.0 * (1.0 + _2d_points[i](1)) * _thickness[i] * _v2[2](component) *
315  (_soln_vector(2 + component * 4) - _soln_vector(3 + component * 4));
316  (*_B_nl[j])[i](3, 16 + 2) +=
317  1.0 / 32.0 * (1.0 + _2d_points[i](1)) * _thickness[i] * _v1[2](component) *
318  (_soln_vector(2 + component * 4) - _soln_vector(3 + component * 4));
319  (*_B_nl[j])[i](3, 12 + 3) +=
320  -1.0 / 32.0 * (1.0 + _2d_points[i](1)) * _thickness[i] * _v2[3](component) *
321  (_soln_vector(2 + component * 4) - _soln_vector(3 + component * 4));
322  (*_B_nl[j])[i](3, 16 + 3) +=
323  1.0 / 32.0 * (1.0 + _2d_points[i](1)) * _thickness[i] * _v1[3](component) *
324  (_soln_vector(2 + component * 4) - _soln_vector(3 + component * 4));
325 
326  // adding contributions corresponding to alpha 1 and 0 and beta 1 and 0
327  (*_B_nl[j])[i](3, 12 + 1) +=
328  -1.0 / 32.0 * (1.0 - _2d_points[i](1)) * _thickness[i] * _v2[1](component) *
329  (_soln_vector(1 + component * 4) - _soln_vector(component * 4));
330  (*_B_nl[j])[i](3, 16 + 1) +=
331  1.0 / 32.0 * (1.0 - _2d_points[i](1)) * _thickness[i] * _v1[1](component) *
332  (_soln_vector(1 + component * 4) - _soln_vector(component * 4));
333  (*_B_nl[j])[i](3, 12 + 0) +=
334  -1.0 / 32.0 * (1.0 - _2d_points[i](1)) * _thickness[i] * _v2[0](component) *
335  (_soln_vector(1 + component * 4) - _soln_vector(component * 4));
336  (*_B_nl[j])[i](3, 16 + 0) +=
337  1.0 / 32.0 * (1.0 - _2d_points[i](1)) * _thickness[i] * _v1[0](component) *
338  (_soln_vector(1 + component * 4) - _soln_vector(component * 4));
339 
340  // corresponding to strain(1,2)
341  (*_B_nl[j])[i](4, 2 + component * 4) +=
342  1.0 / 32.0 * (1.0 + _2d_points[i](0)) * _thickness[i] *
343  (-_soln_vector(12 + 2) * _v2[2](component) + _soln_vector(16 + 2) * _v1[2](component) -
344  _soln_vector(12 + 1) * _v2[1](component) + _soln_vector(16 + 1) * _v1[1](component));
345  (*_B_nl[j])[i](4, 1 + component * 4) += -(*_B_nl[j])[i](3, 2 + component * 4);
346 
347  (*_B_nl[j])[i](4, 3 + component * 4) +=
348  1.0 / 32.0 * (1.0 - _2d_points[i](0)) * _thickness[i] *
349  (-_soln_vector(12 + 3) * _v2[3](component) + _soln_vector(16 + 3) * _v1[3](component) -
350  _soln_vector(12 + 0) * _v2[0](component) + _soln_vector(16 + 0) * _v1[0](component));
351  (*_B_nl[j])[i](4, component * 4) += -(*_B_nl[j])[i](3, 3 + component * 4);
352 
353  // adding contributions corresponding to alpha 2, 1 and beta 2 , 1
354  (*_B_nl[j])[i](4, 12 + 2) +=
355  -1.0 / 32.0 * (1.0 + _2d_points[i](0)) * _thickness[i] * _v2[2](component) *
356  (_soln_vector(2 + component * 4) - _soln_vector(1 + component * 4));
357  (*_B_nl[j])[i](4, 16 + 2) +=
358  1.0 / 32.0 * (1.0 + _2d_points[i](0)) * _thickness[i] * _v1[2](component) *
359  (_soln_vector(2 + component * 4) - _soln_vector(1 + component * 4));
360  (*_B_nl[j])[i](4, 12 + 1) +=
361  -1.0 / 32.0 * (1.0 + _2d_points[i](0)) * _thickness[i] * _v2[1](component) *
362  (_soln_vector(2 + component * 4) - _soln_vector(1 + component * 4));
363  (*_B_nl[j])[i](4, 16 + 1) +=
364  1.0 / 32.0 * (1.0 + _2d_points[i](0)) * _thickness[i] * _v1[1](component) *
365  (_soln_vector(2 + component * 4) - _soln_vector(1 + component * 4));
366 
367  // adding contributions corresponding to alpha 3, 0 and beta 3 , 0
368  (*_B_nl[j])[i](4, 12 + 3) +=
369  -1.0 / 32.0 * (1.0 - _2d_points[i](0)) * _thickness[i] * _v2[3](component) *
370  (_soln_vector(3 + component * 4) - _soln_vector(component * 4));
371  (*_B_nl[j])[i](4, 16 + 3) +=
372  1.0 / 32.0 * (1.0 - _2d_points[i](0)) * _thickness[i] * _v1[3](component) *
373  (_soln_vector(3 + component * 4) - _soln_vector(component * 4));
374  (*_B_nl[j])[i](4, 12 + 0) +=
375  -1.0 / 32.0 * (1.0 - _2d_points[i](0)) * _thickness[i] * _v2[0](component) *
376  (_soln_vector(3 + component * 4) - _soln_vector(component * 4));
377  (*_B_nl[j])[i](4, 16 + 0) +=
378  1.0 / 32.0 * (1.0 - _2d_points[i](0)) * _thickness[i] * _v1[0](component) *
379  (_soln_vector(3 + component * 4) - _soln_vector(component * 4));
380  }
381  }
382  }
383 }
std::vector< ADMaterialProperty< RankTwoTensor > * > _strain_increment
Strain increment in the covariant coordinate system.
const MaterialProperty< RealVectorValue > & _node_normal_old
Material property storing the old normal to the element at the 4 nodes.
virtual void computeNodeNormal() override
Computes the node normal at each node.
FEProblemBase & _fe_problem
const QBase *const & _qrule
virtual void initQpStatefulProperties() override
std::vector< ADRealVectorValue > _v2
First tangential vectors at nodes.
std::vector< std::vector< Real > > _dphidxi_map
Derivatives of shape functions w.r.t isoparametric coordinates xi.
const NumericVector< Number > & _sol_old
std::vector< MaterialProperty< RankTwoTensor > * > _contravariant_transformation_matrix
Contravariant base vector matrix material property to transform strain.
std::vector< const MaterialProperty< Real > * > _J_map_old
Old material property containing jacobian of transformation.
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.
unsigned int dim
static const std::string component
Definition: NS.h:153
registerMooseObject("SolidMechanicsApp", ADComputeFiniteShellStrain)
std::vector< ADMaterialProperty< RankTwoTensor > * > _total_strain
Total strain increment in the covariant coordinate system.
std::vector< ADMaterialProperty< RealVectorValue > * > _dxyz_dzeta
Derivative of global x, y and z w.r.t isoparametric coordinate zeta.
auto raw_value(const Eigen::Map< T > &in)
const VariableValue & _thickness
Coupled variable for the shell thickness.
virtual void updatedxyz() override
Updates covariant vectors at each qp for finite rotations.
const Number zero
ADComputeFiniteShellStrain(const InputParameters &parameters)
virtual Assembly & assembly(const THREAD_ID tid, const unsigned int sys_num) override
virtual void computeBMatrix()
Computes the B matrix that connects strains to nodal displacements and rotations. ...
unsigned int _qp
virtual void updateGVectors() override
Updates the vectors required for shear locking computation for finite rotations.
ADComputeFiniteShellStrain computes the strain increment term for shell elements under finite displac...
std::vector< ADMaterialProperty< RealVectorValue > * > _dxyz_deta
Derivative of global x, y and z w.r.t isoparametric coordinate eta.
virtual void computeGMatrix()
Computes the transformation matrix from natural coordinates to local cartesian coordinates for elasti...
std::vector< const MaterialProperty< RankTwoTensor > * > _ge_old
Old ge matrix for elasticity tensor conversion.
THREAD_ID _tid
std::vector< const Node * > _nodes
Vector storing pointers to the nodes of the shell element.
std::vector< Point > _t_points
Quadrature points in the out of plane direction in isoparametric coordinate system.
ADDenseVector _strain_vector
Vector that stores the strain in the the 2 axial and 3 shear directions.
std::vector< ADMaterialProperty< RealVectorValue > * > _dxyz_dxi
Derivative of global x, y and z w.r.t isoparametric coordinate xi.
ADDenseVector _soln_vector
Vector that stores the incremental solution at all the 20 DOFs in the 4 noded element.
ADMaterialProperty< RealVectorValue > & _node_normal
Material property storing the normal to the element at the 4 nodes. Stored as a material property for...
std::vector< ADRealVectorValue > _v1
First tangential vectors at nodes.
virtual void computeProperties() override
std::vector< std::vector< unsigned int > > _soln_disp_index
Indices of solution vector corresponding to displacement DOFs in 3 directions at the 4 nodes...
virtual void computeBNLMatrix()
Computes the B_nl matrix that connects the nonlinear strains to the nodal displacements and rotations...
ADMaterialProperty< T > & declareADProperty(const std::string &name)
std::vector< ADMaterialProperty< RankTwoTensor > * > _ge
ge matrix for elasticity tensor conversion
std::vector< std::vector< Real > > _phi_map
Shape function value.
std::vector< MaterialProperty< RankTwoTensor > * > _total_global_strain
Total strain in global coordinate system.
void addClassDescription(const std::string &doc_string)
static const std::complex< double > j(0, 1)
Complex number "j" (also known as "i")
const FEBase *const & getFE(FEType type, unsigned int dim) const
virtual void computeSolnVector()
Computes the 20x1 soln vector and its derivatives for each shell element.
std::vector< ADMaterialProperty< DenseMatrix< Real > > * > _B_nl
Material property to store the B_nl matrix at each quadrature point.
std::vector< Point > _2d_points
Quadrature points in the in-plane direction in isoparametric coordinate system.
std::vector< ADMaterialProperty< Real > * > _J_map
Material property containing jacobian of transformation.
static InputParameters validParams()
static const std::string k
Definition: NS.h:130
const Elem *const & _current_elem
std::vector< const MaterialProperty< RankTwoTensor > * > _total_strain_old
Old total strain increment in the covariant coordinate system.