35static double fp = 4.0;
36static double fn = -4.0;
37static double en = -8.0;
38static double ze = 0.0;
40using GetElement2ndDerivMapType = std::map<ElementType, std::function<void(
const int,
const int,
const int,
43GetElement2ndDerivMapType get_element_2nd_derivs = {
45 {ElementType::QUD8, [](
const int insd,
const int ind2,
const int eNoN,
const int g,
const Array<double>& xi,
48 double lx = 1.0 - xi(0);
49 double ly = 1.0 - xi(1);
50 double ux = 1.0 + xi(0);
51 double uy = 1.0 + xi(1);
57 Nxx(2,0,g) = (lx+lx+ly+ly-3.0)/4.0;
61 Nxx(2,1,g) = -(ux+ux+ly+ly-3.0)/4.0;
65 Nxx(2,3,g) = (ux+ux+uy+uy-3.0)/4.0;
69 Nxx(2,3,g) = -(lx+lx+uy+uy-3.0)/4.0;
89 {ElementType::QUD9, [](
const int insd,
const int ind2,
const int eNoN,
const int g,
const Array<double>& xi,
92 double lx = 1.0 - xi(0,g);
93 double ly = 1.0 - xi(1,g);
94 double ux = 1.0 + xi(0,g);
95 double uy = 1.0 + xi(1,g);
99 Nxx(0,0,g) = -ly*my*0.5;
100 Nxx(1,0,g) = -lx*mx*0.5;
101 Nxx(2,0,g) = (lx-mx)*(ly-my)/4.0;
103 Nxx(0,1,g) = -ly*my*0.5;
104 Nxx(1,1,g) = ux*mx*0.5;
105 Nxx(2,1,g) = -(ux+mx)*(ly-my)/4.0;
107 Nxx(0,2,g) = uy*my*0.5;
108 Nxx(1,2,g) = ux*mx*0.5;
109 Nxx(2,2,g) = (ux+mx)*(uy+my)/4.0;
111 Nxx(0,3,g) = uy*my*0.5;
112 Nxx(1,3,g) = -lx*mx*0.5;
113 Nxx(2,3,g) = -(lx-mx)*(uy+my)/4.0;
117 Nxx(2,4,g) = mx*(ly-my);
121 Nxx(2,5,g) = -(ux+mx)*my;
125 Nxx(2,6,g) = -mx*(uy+my);
129 Nxx(2,7,g) = (lx-mx)*my;
131 Nxx(0,8,g) = -ly*uy*2.0;
132 Nxx(1,8,g) = -lx*ux*2.0;
133 Nxx(2,8,g) = mx*my*4.0;
137 {ElementType::TET10, [](
const int insd,
const int ind2,
const int eNoN,
const int g,
const Array<double>& xi,
139 Nxx.set_row(0, g, {fp, ze, ze, ze, ze, ze});
140 Nxx.set_row(1, g, {ze, fp, ze, ze, ze, ze});
141 Nxx.set_row(2, g, {ze, ze, fp, ze, ze, ze});
142 Nxx.set_row(3, g, {fp, fp, fp, fp, fp, fp});
143 Nxx.set_row(4, g, {ze, ze, ze, fp, ze, ze});
144 Nxx.set_row(5, g, {ze, ze, ze, ze, fp, ze});
145 Nxx.set_row(6, g, {ze, ze, ze, ze, ze, fp});
146 Nxx.set_row(7, g, {en, ze, ze, fn, ze, fn});
147 Nxx.set_row(8, g, {ze, en, ze, fn, fn, ze});
148 Nxx.set_row(9, g, {ze, ze, en, ze, fn, fn});
152 {ElementType::TRI6, [](
const int insd,
const int ind2,
const int eNoN,
const int g,
const Array<double>& xi,
155 Nxx.set_row(0, g, {fp, ze, ze});
156 Nxx.set_row(1, g, {ze, fp, ze});
157 Nxx.set_row(2, g, {fp, fp, fp});
158 Nxx.set_row(3, g, {ze, ze, fp});
159 Nxx.set_row(4, g, {ze, en, fn});
160 Nxx.set_row(5, g, {en, ze, fn});
The Array3 template class implements a simple interface to 3D arrays.
Definition Array3.h:52