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 fe_type.set_p_refinement(false);
62 auto & fe = _fe_problem.assembly(_tid, /*nl_sys_num=*/0).getFE(fe_type, dim);
63 _dphidxi_map = fe->get_fe_map().get_dphidxi_map();
64 _dphideta_map = fe->get_fe_map().get_dphideta_map();
65 _phi_map = fe->get_fe_map().get_phi_map();
66
67 for (unsigned int i = 0; i < 4; ++i)
68 _nodes[i] = _current_elem->node_ptr(i);
69
70 for (unsigned int i = 0; i < _2d_points.size(); ++i)
71 {
72 for (unsigned int j = 0; j < _t_points.size(); ++j)
73 {
74 (*_ge[j])[i] = (*_ge_old[j])[i];
75 (*_J_map[j])[i] = (*_J_map_old[j])[i];
76 }
77 }
78
80 updatedxyz();
81
82 for (unsigned int k = 0; k < _nodes.size(); ++k)
84
86
88
90
91 for (unsigned int i = 0; i < _2d_points.size(); ++i)
92 {
93 for (unsigned int j = 0; j < _t_points.size(); ++j)
94 {
95 // compute strain increment in covariant coordinate system using B and _soln_vector
96 for (unsigned int temp1 = 0; temp1 < 5; ++temp1)
97 {
98 _strain_vector(temp1) = 0.0;
99 for (unsigned int temp2 = 0; temp2 < 20; ++temp2)
100 _strain_vector(temp1) += (*_B[j])[i](temp1, temp2) * _soln_vector(temp2);
101 }
102
103 (*_strain_increment[j])[i](0, 0) = _strain_vector(0);
104 (*_strain_increment[j])[i](1, 1) = _strain_vector(1);
105 (*_strain_increment[j])[i](0, 1) = _strain_vector(2);
106 (*_strain_increment[j])[i](0, 2) = _strain_vector(3);
107 (*_strain_increment[j])[i](1, 2) = _strain_vector(4);
108 (*_strain_increment[j])[i](1, 0) = (*_strain_increment[j])[i](0, 1);
109 (*_strain_increment[j])[i](2, 0) = (*_strain_increment[j])[i](0, 2);
110 (*_strain_increment[j])[i](2, 1) = (*_strain_increment[j])[i](1, 2);
111 (*_total_strain[j])[i] = (*_total_strain_old[j])[i] + (*_strain_increment[j])[i];
112 for (unsigned int ii = 0; ii < 3; ++ii)
113 for (unsigned int jj = 0; jj < 3; ++jj)
117 (*_contravariant_transformation_matrix[j])[i].transpose();
118 }
119 }
120}
121
122void
124{
125 // update _node_normal
126 for (unsigned int k = 0; k < _nodes.size(); ++k)
127 {
128 _node_normal[k] =
129 -_v2[k] * _soln_vector(12 + k) + _v1[k] * _soln_vector(16 + k) + _node_normal_old[k];
130 _node_normal[k] /= _node_normal[k].norm();
131 }
132}
133
134void
136{
137 for (unsigned int i = 0; i < _2d_points.size(); ++i)
138 {
139 for (unsigned int j = 0; j < _t_points.size(); ++j)
140 {
141 for (unsigned int component = 0; component < 3; ++component)
142 {
143 (*_dxyz_dxi[j])[i](component) = 0.0;
144 (*_dxyz_deta[j])[i](component) = 0.0;
145 (*_dxyz_dzeta[j])[i](component) = 0.0;
146 for (unsigned int k = 0; k < _nodes.size(); ++k)
147 {
148 (*_dxyz_dxi[j])[i](component) +=
149 _dphidxi_map[k][i] *
150 ((*_nodes[k])(component) + _sol_old(_soln_disp_index[k][component])) +
151 _t_points[j](0) / 2.0 * _thickness[i] * _dphidxi_map[k][i] *
152 _node_normal_old[k](component);
153 (*_dxyz_deta[j])[i](component) +=
154 _dphideta_map[k][i] *
155 ((*_nodes[k])(component) + _sol_old(_soln_disp_index[k][component])) +
156 _t_points[j](0) / 2.0 * _thickness[i] * _dphideta_map[k][i] *
157 _node_normal_old[k](component);
158 (*_dxyz_dzeta[j])[i](component) +=
159 _thickness[i] * _phi_map[k][i] * _node_normal_old[k](component) / 2.0;
160 }
161 }
162 }
163 }
164}
165
166void
168{
169 for (unsigned int component = 0; component < 3; ++component)
170 {
171 _g1_a(component) +=
172 0.5 * (_sol_old(_soln_disp_index[2][component]) - _sol_old(_soln_disp_index[3][component]));
173 _g1_c(component) +=
174 0.5 * (_sol_old(_soln_disp_index[1][component]) - _sol_old(_soln_disp_index[0][component]));
175 _g2_b(component) +=
176 0.5 * (_sol_old(_soln_disp_index[3][component]) - _sol_old(_soln_disp_index[0][component]));
177 _g2_d(component) +=
178 0.5 * (_sol_old(_soln_disp_index[2][component]) - _sol_old(_soln_disp_index[1][component]));
179 }
180}
181
182void
184{
185 // compute BNL matrix - rows correspond to [ux1, ux2, ux3, ux4, uy1, uy2, uy3, uy4, uz1, uz2, uz3,
186 // uz4, a1, a2, a3, a4, b1, b2, b3, b4]
187
188 for (unsigned int i = 0; i < _2d_points.size(); ++i)
189 {
190 for (unsigned int j = 0; j < _t_points.size(); ++j)
191 {
192 (*_B_nl[j])[i].resize(5, 20);
193 (*_B_nl[j])[i].zero();
194 for (unsigned int k = 0; k < 4; ++k)
195 {
196 for (unsigned int p = 0; p < 4; ++p) // loop over nodes
197 {
198 // corresponding to strain(0,0)
199 (*_B_nl[j])[i](0, k) += _dphidxi_map[k][i] * _dphidxi_map[p][i] *
200 (_soln_vector(p) + _t_points[j](0) / 2.0 * _thickness[i] *
201 (-_soln_vector(p + 12) * _v2[p](0) +
202 _soln_vector(p + 16) * _v1[p](0)));
203 (*_B_nl[j])[i](0, 4 + k) +=
204 _dphidxi_map[k][i] * _dphidxi_map[p][i] *
205 (_soln_vector(p + 4) +
206 _t_points[j](0) / 2.0 * _thickness[i] *
207 (-_soln_vector(p + 12) * _v2[p](1) + _soln_vector(p + 16) * _v1[p](1)));
208 (*_B_nl[j])[i](0, 8 + k) +=
209 _dphidxi_map[k][i] * _dphidxi_map[p][i] *
210 (_soln_vector(p + 8) +
211 _t_points[j](0) / 2.0 * _thickness[i] *
212 (-_soln_vector(p + 12) * _v2[p](2) + _soln_vector(p + 16) * _v1[p](2)));
213 (*_B_nl[j])[i](0, 12 + k) +=
214 _t_points[j](0) / 2.0 * _thickness[i] * _dphidxi_map[k][i] * _dphidxi_map[p][i] *
215 (-(_v2[p](0) * _soln_vector(p) + _v2[p](1) * _soln_vector(p + 4) +
216 _v2[p](2) * _soln_vector(p + 8)) +
217 _t_points[j](0) / 2.0 * _thickness[i] * _v2[k] *
218 (_v2[p] * _soln_vector(p + 12) - _v1[p] * _soln_vector(p + 16)));
219 (*_B_nl[j])[i](0, 16 + k) +=
220 _t_points[j](0) / 2.0 * _thickness[i] * _dphidxi_map[k][i] * _dphidxi_map[p][i] *
221 ((_v1[p](0) * _soln_vector(p) + _v1[p](1) * _soln_vector(p + 4) +
222 _v1[p](2) * _soln_vector(p + 8)) +
223 _t_points[j](0) / 2.0 * _thickness[i] * _v1[k] *
224 (-_v2[p] * _soln_vector(p + 12) + _v1[p] * _soln_vector(p + 16)));
225
226 // corresponding to strain(1,1)
227 (*_B_nl[j])[i](1, k) += _dphideta_map[k][i] * _dphideta_map[p][i] *
228 (_soln_vector(p) + _t_points[j](0) / 2.0 * _thickness[i] *
229 (-_soln_vector(p + 12) * _v2[p](0) +
230 _soln_vector(p + 16) * _v1[p](0)));
231 (*_B_nl[j])[i](1, 4 + k) +=
232 _dphideta_map[k][i] * _dphideta_map[p][i] *
233 (_soln_vector(p + 4) +
234 _t_points[j](0) / 2.0 * _thickness[i] *
235 (-_soln_vector(p + 12) * _v2[p](1) + _soln_vector(p + 16) * _v1[p](1)));
236 (*_B_nl[j])[i](1, 8 + k) +=
237 _dphideta_map[k][i] * _dphideta_map[p][i] *
238 (_soln_vector(p + 8) +
239 _t_points[j](0) / 2.0 * _thickness[i] *
240 (-_soln_vector(p + 12) * _v2[p](2) + _soln_vector(p + 16) * _v1[p](2)));
241 (*_B_nl[j])[i](1, 12 + k) +=
242 _t_points[j](0) / 2.0 * _thickness[i] * _dphideta_map[k][i] * _dphideta_map[p][i] *
243 (-(_v2[p](0) * _soln_vector(p) + _v2[p](1) * _soln_vector(p + 4) +
244 _v2[p](2) * _soln_vector(p + 8)) +
245 _t_points[j](0) / 2.0 * _thickness[i] * _v2[k] *
246 (_v2[p] * _soln_vector(p + 12) - _v1[p] * _soln_vector(p + 16)));
247 (*_B_nl[j])[i](1, 16 + k) +=
248 _t_points[j](0) / 2.0 * _thickness[i] * _dphideta_map[k][i] * _dphideta_map[p][i] *
249 ((_v1[p](0) * _soln_vector(p) + _v1[p](1) * _soln_vector(p + 4) +
250 _v1[p](2) * _soln_vector(p + 8)) +
251 _t_points[j](0) / 2.0 * _thickness[i] * _v1[k] *
252 (-_v2[p] * _soln_vector(p + 12) + _v1[p] * _soln_vector(p + 16)));
253
254 // terms corresponding to strain(2,2) are 0.
255
256 // corresponding to strain(0,1)
257 (*_B_nl[j])[i](2, k) += 0.5 *
258 (_dphidxi_map[k][i] * _dphideta_map[p][i] +
259 _dphideta_map[k][i] * _dphidxi_map[p][i]) *
260 (_soln_vector(p) + _t_points[j](0) / 2.0 * _thickness[i] *
261 (-_soln_vector(p + 12) * _v2[p](0) +
262 _soln_vector(p + 16) * _v1[p](0)));
263 (*_B_nl[j])[i](2, 4 + k) +=
264 0.5 *
265 (_dphidxi_map[k][i] * _dphideta_map[p][i] +
266 _dphideta_map[k][i] * _dphidxi_map[p][i]) *
267 (_soln_vector(p + 4) +
268 _t_points[j](0) / 2.0 * _thickness[i] *
269 (-_soln_vector(p + 12) * _v2[p](1) + _soln_vector(p + 16) * _v1[p](1)));
270 (*_B_nl[j])[i](2, 8 + k) +=
271 0.5 *
272 (_dphidxi_map[k][i] * _dphideta_map[p][i] +
273 _dphideta_map[k][i] * _dphidxi_map[p][i]) *
274 (_soln_vector(p + 8) +
275 _t_points[j](0) / 2.0 * _thickness[i] *
276 (-_soln_vector(p + 12) * _v2[p](2) + _soln_vector(p + 16) * _v1[p](2)));
277 (*_B_nl[j])[i](2, 12 + k) +=
278 _t_points[j](0) * 0.25 *
279 (_dphidxi_map[k][i] * _dphideta_map[p][i] +
280 _dphideta_map[k][i] * _dphidxi_map[p][i]) *
281 _thickness[i] *
282 (-(_v2[k](0) * _soln_vector(p) + _v2[k](1) * _soln_vector(p + 4) +
283 _v2[k](2) * _soln_vector(p + 8)) +
284 _t_points[j](0) / 2.0 * _thickness[i] * _v2[k] *
285 (_v2[p] * _soln_vector(p + 12) - _v1[p] * _soln_vector(p + 16)));
286 (*_B_nl[j])[i](2, 16 + k) +=
287 _t_points[j](0) * 0.25 *
288 (_dphidxi_map[k][i] * _dphideta_map[p][i] +
289 _dphideta_map[k][i] * _dphidxi_map[p][i]) *
290 _thickness[i] *
291 ((_v1[k](0) * _soln_vector(p) + _v1[k](1) * _soln_vector(p + 4) +
292 _v1[k](2) * _soln_vector(p + 8)) +
293 _t_points[j](0) / 2.0 * _thickness[i] * _v1[k] *
294 (-_v2[p] * _soln_vector(p + 12) + _v1[p] * _soln_vector(p + 16)));
295 }
296 }
297
298 for (unsigned int component = 0; component < 3; ++component)
299 {
300 // corresponding to strain(0,2)
301 (*_B_nl[j])[i](3, 2 + component * 4) +=
302 1.0 / 32.0 * (1.0 + _2d_points[i](1)) * _thickness[i] *
303 (-_soln_vector(12 + 2) * _v2[2](component) + _soln_vector(16 + 2) * _v1[2](component) -
304 _soln_vector(12 + 3) * _v2[3](component) + _soln_vector(16 + 3) * _v1[3](component));
305 (*_B_nl[j])[i](3, 3 + component * 4) += -(*_B_nl[j])[i](3, 2 + component * 4);
306
307 (*_B_nl[j])[i](3, 1 + component * 4) +=
308 1.0 / 32.0 * (1.0 - _2d_points[i](1)) * _thickness[i] *
309 (-_soln_vector(12 + 1) * _v2[1](component) + _soln_vector(16 + 1) * _v1[1](component) -
310 _soln_vector(12 + 0) * _v2[0](component) + _soln_vector(16 + 0) * _v1[0](component));
311 (*_B_nl[j])[i](3, component * 4) += -(*_B_nl[j])[i](3, 1 + component * 4);
312
313 // adding contributions corresponding to alpha 2 and 3 and beta 2 and 3
314 (*_B_nl[j])[i](3, 12 + 2) +=
315 -1.0 / 32.0 * (1.0 + _2d_points[i](1)) * _thickness[i] * _v2[2](component) *
316 (_soln_vector(2 + component * 4) - _soln_vector(3 + component * 4));
317 (*_B_nl[j])[i](3, 16 + 2) +=
318 1.0 / 32.0 * (1.0 + _2d_points[i](1)) * _thickness[i] * _v1[2](component) *
319 (_soln_vector(2 + component * 4) - _soln_vector(3 + component * 4));
320 (*_B_nl[j])[i](3, 12 + 3) +=
321 -1.0 / 32.0 * (1.0 + _2d_points[i](1)) * _thickness[i] * _v2[3](component) *
322 (_soln_vector(2 + component * 4) - _soln_vector(3 + component * 4));
323 (*_B_nl[j])[i](3, 16 + 3) +=
324 1.0 / 32.0 * (1.0 + _2d_points[i](1)) * _thickness[i] * _v1[3](component) *
325 (_soln_vector(2 + component * 4) - _soln_vector(3 + component * 4));
326
327 // adding contributions corresponding to alpha 1 and 0 and beta 1 and 0
328 (*_B_nl[j])[i](3, 12 + 1) +=
329 -1.0 / 32.0 * (1.0 - _2d_points[i](1)) * _thickness[i] * _v2[1](component) *
330 (_soln_vector(1 + component * 4) - _soln_vector(component * 4));
331 (*_B_nl[j])[i](3, 16 + 1) +=
332 1.0 / 32.0 * (1.0 - _2d_points[i](1)) * _thickness[i] * _v1[1](component) *
333 (_soln_vector(1 + component * 4) - _soln_vector(component * 4));
334 (*_B_nl[j])[i](3, 12 + 0) +=
335 -1.0 / 32.0 * (1.0 - _2d_points[i](1)) * _thickness[i] * _v2[0](component) *
336 (_soln_vector(1 + component * 4) - _soln_vector(component * 4));
337 (*_B_nl[j])[i](3, 16 + 0) +=
338 1.0 / 32.0 * (1.0 - _2d_points[i](1)) * _thickness[i] * _v1[0](component) *
339 (_soln_vector(1 + component * 4) - _soln_vector(component * 4));
340
341 // corresponding to strain(1,2)
342 (*_B_nl[j])[i](4, 2 + component * 4) +=
343 1.0 / 32.0 * (1.0 + _2d_points[i](0)) * _thickness[i] *
344 (-_soln_vector(12 + 2) * _v2[2](component) + _soln_vector(16 + 2) * _v1[2](component) -
345 _soln_vector(12 + 1) * _v2[1](component) + _soln_vector(16 + 1) * _v1[1](component));
346 (*_B_nl[j])[i](4, 1 + component * 4) += -(*_B_nl[j])[i](3, 2 + component * 4);
347
348 (*_B_nl[j])[i](4, 3 + component * 4) +=
349 1.0 / 32.0 * (1.0 - _2d_points[i](0)) * _thickness[i] *
350 (-_soln_vector(12 + 3) * _v2[3](component) + _soln_vector(16 + 3) * _v1[3](component) -
351 _soln_vector(12 + 0) * _v2[0](component) + _soln_vector(16 + 0) * _v1[0](component));
352 (*_B_nl[j])[i](4, component * 4) += -(*_B_nl[j])[i](3, 3 + component * 4);
353
354 // adding contributions corresponding to alpha 2, 1 and beta 2 , 1
355 (*_B_nl[j])[i](4, 12 + 2) +=
356 -1.0 / 32.0 * (1.0 + _2d_points[i](0)) * _thickness[i] * _v2[2](component) *
357 (_soln_vector(2 + component * 4) - _soln_vector(1 + component * 4));
358 (*_B_nl[j])[i](4, 16 + 2) +=
359 1.0 / 32.0 * (1.0 + _2d_points[i](0)) * _thickness[i] * _v1[2](component) *
360 (_soln_vector(2 + component * 4) - _soln_vector(1 + component * 4));
361 (*_B_nl[j])[i](4, 12 + 1) +=
362 -1.0 / 32.0 * (1.0 + _2d_points[i](0)) * _thickness[i] * _v2[1](component) *
363 (_soln_vector(2 + component * 4) - _soln_vector(1 + component * 4));
364 (*_B_nl[j])[i](4, 16 + 1) +=
365 1.0 / 32.0 * (1.0 + _2d_points[i](0)) * _thickness[i] * _v1[1](component) *
366 (_soln_vector(2 + component * 4) - _soln_vector(1 + component * 4));
367
368 // adding contributions corresponding to alpha 3, 0 and beta 3 , 0
369 (*_B_nl[j])[i](4, 12 + 3) +=
370 -1.0 / 32.0 * (1.0 - _2d_points[i](0)) * _thickness[i] * _v2[3](component) *
371 (_soln_vector(3 + component * 4) - _soln_vector(component * 4));
372 (*_B_nl[j])[i](4, 16 + 3) +=
373 1.0 / 32.0 * (1.0 - _2d_points[i](0)) * _thickness[i] * _v1[3](component) *
374 (_soln_vector(3 + component * 4) - _soln_vector(component * 4));
375 (*_B_nl[j])[i](4, 12 + 0) +=
376 -1.0 / 32.0 * (1.0 - _2d_points[i](0)) * _thickness[i] * _v2[0](component) *
377 (_soln_vector(3 + component * 4) - _soln_vector(component * 4));
378 (*_B_nl[j])[i](4, 16 + 0) +=
379 1.0 / 32.0 * (1.0 - _2d_points[i](0)) * _thickness[i] * _v1[0](component) *
380 (_soln_vector(3 + component * 4) - _soln_vector(component * 4));
381 }
382 }
383 }
384}
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)