9static double fn = -4.0;
10static double en = -8.0;
11static double ze = 0.0;
13using GetElement2ndDerivMapType = std::map<ElementType, std::function<void(
const int,
const int,
const int,
16GetElement2ndDerivMapType get_element_2nd_derivs = {
18 {ElementType::QUD8, [](
const int insd,
const int ind2,
const int eNoN,
const int g,
const Array<double>& xi,
21 double lx = 1.0 - xi(0);
22 double ly = 1.0 - xi(1);
23 double ux = 1.0 + xi(0);
24 double uy = 1.0 + xi(1);
30 Nxx(2,0,g) = (lx+lx+ly+ly-3.0)/4.0;
34 Nxx(2,1,g) = -(ux+ux+ly+ly-3.0)/4.0;
38 Nxx(2,3,g) = (ux+ux+uy+uy-3.0)/4.0;
42 Nxx(2,3,g) = -(lx+lx+uy+uy-3.0)/4.0;
62 {ElementType::QUD9, [](
const int insd,
const int ind2,
const int eNoN,
const int g,
const Array<double>& xi,
65 double lx = 1.0 - xi(0,g);
66 double ly = 1.0 - xi(1,g);
67 double ux = 1.0 + xi(0,g);
68 double uy = 1.0 + xi(1,g);
72 Nxx(0,0,g) = -ly*my*0.5;
73 Nxx(1,0,g) = -lx*mx*0.5;
74 Nxx(2,0,g) = (lx-mx)*(ly-my)/4.0;
76 Nxx(0,1,g) = -ly*my*0.5;
77 Nxx(1,1,g) = ux*mx*0.5;
78 Nxx(2,1,g) = -(ux+mx)*(ly-my)/4.0;
80 Nxx(0,2,g) = uy*my*0.5;
81 Nxx(1,2,g) = ux*mx*0.5;
82 Nxx(2,2,g) = (ux+mx)*(uy+my)/4.0;
84 Nxx(0,3,g) = uy*my*0.5;
85 Nxx(1,3,g) = -lx*mx*0.5;
86 Nxx(2,3,g) = -(lx-mx)*(uy+my)/4.0;
90 Nxx(2,4,g) = mx*(ly-my);
94 Nxx(2,5,g) = -(ux+mx)*my;
98 Nxx(2,6,g) = -mx*(uy+my);
102 Nxx(2,7,g) = (lx-mx)*my;
104 Nxx(0,8,g) = -ly*uy*2.0;
105 Nxx(1,8,g) = -lx*ux*2.0;
106 Nxx(2,8,g) = mx*my*4.0;
110 {ElementType::TET10, [](
const int insd,
const int ind2,
const int eNoN,
const int g,
const Array<double>& xi,
112 Nxx.set_row(0, g, {fp, ze, ze, ze, ze, ze});
113 Nxx.set_row(1, g, {ze, fp, ze, ze, ze, ze});
114 Nxx.set_row(2, g, {ze, ze, fp, ze, ze, ze});
115 Nxx.set_row(3, g, {fp, fp, fp, fp, fp, fp});
116 Nxx.set_row(4, g, {ze, ze, ze, fp, ze, ze});
117 Nxx.set_row(5, g, {ze, ze, ze, ze, fp, ze});
118 Nxx.set_row(6, g, {ze, ze, ze, ze, ze, fp});
119 Nxx.set_row(7, g, {en, ze, ze, fn, ze, fn});
120 Nxx.set_row(8, g, {ze, en, ze, fn, fn, ze});
121 Nxx.set_row(9, g, {ze, ze, en, ze, fn, fn});
125 {ElementType::TRI6, [](
const int insd,
const int ind2,
const int eNoN,
const int g,
const Array<double>& xi,
128 Nxx.set_row(0, g, {fp, ze, ze});
129 Nxx.set_row(1, g, {ze, fp, ze});
130 Nxx.set_row(2, g, {fp, fp, fp});
131 Nxx.set_row(3, g, {ze, ze, fp});
132 Nxx.set_row(4, g, {ze, en, fn});
133 Nxx.set_row(5, g, {en, ze, fn});
The Array3 template class implements a simple interface to 3D arrays.
Definition Array3.h:25