https://mooseframework.inl.gov
Loading...
Searching...
No Matches
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
39void
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
49void
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
121void
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
133void
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] *
149 ((*_nodes[k])(component) + _sol_old(_soln_disp_index[k][component])) +
150 _t_points[j](0) / 2.0 * _thickness[i] * _dphidxi_map[k][i] *
151 _node_normal_old[k](component);
152 (*_dxyz_deta[j])[i](component) +=
153 _dphideta_map[k][i] *
154 ((*_nodes[k])(component) + _sol_old(_soln_disp_index[k][component])) +
155 _t_points[j](0) / 2.0 * _thickness[i] * _dphideta_map[k][i] *
156 _node_normal_old[k](component);
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
165void
167{
168 for (unsigned int component = 0; component < 3; ++component)
169 {
170 _g1_a(component) +=
171 0.5 * (_sol_old(_soln_disp_index[2][component]) - _sol_old(_soln_disp_index[3][component]));
172 _g1_c(component) +=
173 0.5 * (_sol_old(_soln_disp_index[1][component]) - _sol_old(_soln_disp_index[0][component]));
174 _g2_b(component) +=
175 0.5 * (_sol_old(_soln_disp_index[3][component]) - _sol_old(_soln_disp_index[0][component]));
176 _g2_d(component) +=
177 0.5 * (_sol_old(_soln_disp_index[2][component]) - _sol_old(_soln_disp_index[1][component]));
178 }
179}
180
181void
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}
registerMooseObject("SolidMechanicsApp", ADComputeFiniteShellStrain)
const Real p
unsigned int dim
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 &parameters)
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.
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.
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
void addClassDescription(const std::string &doc_string)
THREAD_ID _tid
unsigned int _qp
FEProblemBase & _fe_problem
ADMaterialProperty< T > & declareADProperty(const std::string &name)
const Elem *const & _current_elem
const QBase *const & _qrule
auto raw_value(const Eigen::Map< T > &in)