47 double x1, x2, x3, x4;
48 double y1, y2, y3, y4;
49 double z1, z2, z3, z4;
71 double area = x1*y3*z2 - x1*y2*z3 + x2*y1*z3 - x2*y3*z1 - x3*y1*z2 + x3*y2*z1 + x1*y2*z4 - x1*y4*z2 - x2*y1*z4 + x2*y4*z1 + x4*y1*z2 - x4*y2*z1 - x1*y3*z4 + x1*y4*z3
72 + x3*y1*z4 - x3*y4*z1 - x4*y1*z3 + x4*y3*z1 - 2*x1*y2*z6 + 2*x1*y3*z5 - 2*x1*y5*z3 + 2*x1*y6*z2 + 2*x2*y1*z6 + x2*y3*z4 - x2*y4*z3 - 2*x2*y6*z1 - 2*x3*y1*z5 - x3*y2*z4
73 + x3*y4*z2 + 2*x3*y5*z1 + x4*y2*z3 - x4*y3*z2 + 2*x5*y1*z3 - 2*x5*y3*z1 - 2*x6*y1*z2 + 2*x6*y2*z1 - 2*x1*y2*z7 + 2*x1*y3*z6 - 2*x1*y4*z5 + 2*x1*y5*z4 - 2*x1*y6*z3 + 2*x1*y7*z2
74 + 2*x2*y1*z7 - 2*x2*y3*z5 + 2*x2*y5*z3 - 2*x2*y7*z1 - 2*x3*y1*z6 + 2*x3*y2*z5 - 2*x3*y5*z2 + 2*x3*y6*z1 + 2*x4*y1*z5 - 2*x4*y5*z1 - 2*x5*y1*z4 - 2*x5*y2*z3 + 2*x5*y3*z2
75 + 2*x5*y4*z1 + 2*x6*y1*z3 - 2*x6*y3*z1 - 2*x7*y1*z2 + 2*x7*y2*z1 + 2*x1*y2*z8 - 2*x1*y8*z2 - 2*x2*y1*z8 + 2*x2*y4*z5
76 + - 2*x2*y5*z4 + 2*x2*y8*z1 - 2*x4*y2*z5 + 2*x4*y5*z2 + 2*x5*y2*z4 - 2*x5*y4*z2 + 2*x8*y1*z2 - 2*x8*y2*z1 + 2*x1*y2*z9 - 2*x1*y3*z8 + 2*x1*y4*z7 - 4*x1*y5*z6 + 4*x1*y6*z5
77 + - 2*x1*y7*z4 + 2*x1*y8*z3 - 2*x1*y9*z2 - 2*x2*y1*z9 - 2*x2*y3*z7 - 2*x2*y4*z6 + 2*x2*y6*z4 + 2*x2*y7*z3 + 2*x2*y9*z1 + 2*x3*y1*z8 + 2*x3*y2*z7 - 2*x3*y7*z2 - 2*x3*y8*z1
78 + - 2*x4*y1*z7 + 2*x4*y2*z6 - 2*x4*y6*z2 + 2*x4*y7*z1 + 4*x5*y1*z6 - 4*x5*y6*z1 - 4*x6*y1*z5 - 2*x6*y2*z4 + 2*x6*y4*z2 + 4*x6*y5*z1 + 2*x7*y1*z4 - 2*x7*y2*z3 + 2*x7*y3*z2
79 + - 2*x7*y4*z1 - 2*x8*y1*z3 + 2*x8*y3*z1 + 2*x9*y1*z2 - 2*x9*y2*z1 - 4*x1*y5*z7 + 4*x1*y7*z5 + 4*x2*y5*z6 - 4*x2*y6*z5 + 2*x3*y4*z6 - 2*x3*y6*z4 - 2*x4*y3*z6 + 2*x4*y6*z3
80 + 4*x5*y1*z7 - 4*x5*y2*z6 + 4*x5*y6*z2 - 4*x5*y7*z1 + 4*x6*y2*z5 + 2*x6*y3*z4 - 2*x6*y4*z3 - 4*x6*y5*z2 - 4*x7*y1*z5 + 4*x7*y5*z1 - 2*x1*y3*z10 - 2*x1*y4*z9 + 4*x1*y5*z8
81 + - 4*x1*y6*z7 + 4*x1*y7*z6 - 4*x1*y8*z5 + 2*x1*y9*z4 + 2*x1*y10*z3 + 2*x2*y3*z9 + 2*x2*y4*z8 + 4*x2*y5*z7 - 4*x2*y7*z5 - 2*x2*y8*z4 - 2*x2*y9*z3 + 2*x3*y1*z10 - 2*x3*y2*z9
82 + - 2*x3*y4*z7 - 4*x3*y5*z6 + 4*x3*y6*z5 + 2*x3*y7*z4 + 2*x3*y9*z2 - 2*x3*y10*z1 + 2*x4*y1*z9
83 + - 2*x4*y2*z8 + 2*x4*y3*z7 - 2*x4*y7*z3 + 2*x4*y8*z2 - 2*x4*y9*z1 - 4*x5*y1*z8 - 4*x5*y2*z7 + 4*x5*y3*z6 - 4*x5*y6*z3 + 4*x5*y7*z2 + 4*x5*y8*z1 + 4*x6*y1*z7 - 4*x6*y3*z5
84 + 4*x6*y5*z3 - 4*x6*y7*z1 - 4*x7*y1*z6 + 4*x7*y2*z5 - 2*x7*y3*z4 + 2*x7*y4*z3 - 4*x7*y5*z2 + 4*x7*y6*z1 + 4*x8*y1*z5 + 2*x8*y2*z4 - 2*x8*y4*z2 - 4*x8*y5*z1 - 2*x9*y1*z4
85 + 2*x9*y2*z3 - 2*x9*y3*z2 + 2*x9*y4*z1 - 2*x10*y1*z3 + 2*x10*y3*z1 + 2*x1*y4*z10 + 4*x1*y5*z9 - 4*x1*y9*z5 - 2*x1*y10*z4 + 2*x2*y3*z10 - 4*x2*y5*z8 - 4*x2*y6*z7 + 4*x2*y7*z6
86 + 4*x2*y8*z5 - 2*x2*y10*z3 - 2*x3*y2*z10 - 2*x3*y4*z8 + 4*x3*y5*z7 - 4*x3*y7*z5 + 2*x3*y8*z4 + 2*x3*y10*z2 - 2*x4*y1*z10 + 2*x4*y3*z8 + 4*x4*y5*z6 - 4*x4*y6*z5 - 2*x4*y8*z3
87 + 2*x4*y10*z1 - 4*x5*y1*z9 + 4*x5*y2*z8 - 4*x5*y3*z7 - 4*x5*y4*z6 + 4*x5*y6*z4 + 4*x5*y7*z3 - 4*x5*y8*z2 + 4*x5*y9*z1 + 4*x6*y2*z7 + 4*x6*y4*z5 - 4*x6*y5*z4 - 4*x6*y7*z2
88 + - 4*x7*y2*z6 + 4*x7*y3*z5 - 4*x7*y5*z3 + 4*x7*y6*z2 - 4*x8*y2*z5 - 2*x8*y3*z4 + 2*x8*y4*z3 + 4*x8*y5*z2 + 4*x9*y1*z5 - 4*x9*y5*z1 + 2*x10*y1*z4 + 2*x10*y2*z3 - 2*x10*y3*z2 -
89 + 2*x10*y4*z1 + 4*x1*y6*z9 - 4*x1*y7*z8 + 4*x1*y8*z7 - 4*x1*y9*z6
90 + - 2*x2*y4*z10 - 4*x2*y5*z9 + 4*x2*y9*z5 + 2*x2*y10*z4 + 2*x3*y4*z9 + 4*x3*y5*z8 + 4*x3*y6*z7 - 4*x3*y7*z6 - 4*x3*y8*z5 - 2*x3*y9*z4 + 2*x4*y2*z10 - 2*x4*y3*z9 - 4*x4*y5*z7
91 + 4*x4*y7*z5 + 2*x4*y9*z3 - 2*x4*y10*z2 + 4*x5*y2*z9 - 4*x5*y3*z8 + 4*x5*y4*z7 - 4*x5*y7*z4 + 4*x5*y8*z3 - 4*x5*y9*z2 - 4*x6*y1*z9 - 4*x6*y3*z7 + 4*x6*y7*z3 + 4*x6*y9*z1
92 + 4*x7*y1*z8 + 4*x7*y3*z6 - 4*x7*y4*z5 + 4*x7*y5*z4 - 4*x7*y6*z3 - 4*x7*y8*z1 - 4*x8*y1*z7 + 4*x8*y3*z5 - 4*x8*y5*z3 + 4*x8*y7*z1 + 4*x9*y1*z6
93 + - 4*x9*y2*z5 + 2*x9*y3*z4 - 2*x9*y4*z3 + 4*x9*y5*z2 - 4*x9*y6*z1 - 2*x10*y2*z4 + 2*x10*y4*z2 - 4*x1*y6*z10 + 4*x1*y10*z6 + 4*x2*y6*z9 - 4*x2*y7*z8 + 4*x2*y8*z7 - 4*x2*y9*z6
94 + - 4*x3*y5*z9 + 4*x3*y9*z5 - 4*x4*y5*z8 + 4*x4*y6*z7 - 4*x4*y7*z6 + 4*x4*y8*z5 + 4*x5*y3*z9 + 4*x5*y4*z8 - 4*x5*y8*z4 - 4*x5*y9*z3 + 4*x6*y1*z10 - 4*x6*y2*z9 - 4*x6*y4*z7
95 + 4*x6*y7*z4 + 4*x6*y9*z2 - 4*x6*y10*z1 + 4*x7*y2*z8 + 4*x7*y4*z6 - 4*x7*y6*z4 - 4*x7*y8*z2 - 4*x8*y2*z7 - 4*x8*y4*z5 + 4*x8*y5*z4 + 4*x8*y7*z2
96 + 4*x9*y2*z6 - 4*x9*y3*z5 + 4*x9*y5*z3 - 4*x9*y6*z2 - 4*x10*y1*z6 + 4*x10*y6*z1 - 4*x1*y7*z10 - 4*x1*y8*z9 + 4*x1*y9*z8 + 4*x1*y10*z7 + 4*x2*y6*z10 - 4*x2*y10*z6 - 4*x3*y6*z9
97 + 4*x3*y7*z8 - 4*x3*y8*z7 + 4*x3*y9*z6 + 4*x4*y5*z9 - 4*x4*y9*z5 - 4*x5*y4*z9 - 16*x5*y6*z7 + 16*x5*y7*z6 + 4*x5*y9*z4 - 4*x6*y2*z10 + 4*x6*y3*z9 + 16*x6*y5*z7 - 16*x6*y7*z5
98 + - 4*x6*y9*z3 + 4*x6*y10*z2 + 4*x7*y1*z10 - 4*x7*y3*z8 - 16*x7*y5*z6 + 16*x7*y6*z5 + 4*x7*y8*z3 - 4*x7*y10*z1 + 4*x8*y1*z9 + 4*x8*y3*z7 - 4*x8*y7*z3 - 4*x8*y9*z1 - 4*x9*y1*z8
99 + - 4*x9*y3*z6 + 4*x9*y4*z5 - 4*x9*y5*z4 + 4*x9*y6*z3 + 4*x9*y8*z1 - 4*x10*y1*z7 + 4*x10*y2*z6 - 4*x10*y6*z2 + 4*x10*y7*z1 + 4*x1*y8*z10 - 4*x1*y10*z8 + 4*x2*y7*z10 - 4*x2*y8*z9
100 + 4*x2*y9*z8 - 4*x2*y10*z7 - 4*x3*y6*z10 + 4*x3*y10*z6 - 4*x4*y6*z9 + 4*x4*y7*z8 - 4*x4*y8*z7 + 4*x4*y9*z6 + 4*x6*y3*z10 + 4*x6*y4*z9 - 4*x6*y9*z4 - 4*x6*y10*z3 - 4*x7*y2*z10
101 + - 4*x7*y4*z8 + 4*x7*y8*z4 + 4*x7*y10*z2 - 4*x8*y1*z10 + 4*x8*y2*z9 + 4*x8*y4*z7 - 4*x8*y7*z4 - 4*x8*y9*z2 + 4*x8*y10*z1 - 4*x9*y2*z8 - 4*x9*y4*z6 + 4*x9*y6*z4 + 4*x9*y8*z2
102 + 4*x10*y1*z8 + 4*x10*y2*z7 - 4*x10*y3*z6 + 4*x10*y6*z3 - 4*x10*y7*z2 - 4*x10*y8*z1 + 4*x1*y9*z10 - 4*x1*y10*z9 - 4*x2*y8*z10 + 4*x2*y10*z8 + 4*x3*y7*z10 + 4*x3*y8*z9 - 4*x3*y9*z8
103 + - 4*x3*y10*z7 + 4*x4*y6*z10 - 4*x4*y10*z6 + 16*x5*y6*z9 - 16*x5*y7*z8 + 16*x5*y8*z7 - 16*x5*y9*z6 - 4*x6*y4*z10 - 16*x6*y5*z9 + 16*x6*y9*z5 + 4*x6*y10*z4 - 4*x7*y3*z10 + 16*x7*y5*z8
104 + - 16*x7*y8*z5 + 4*x7*y10*z3 + 4*x8*y2*z10 - 4*x8*y3*z9 - 16*x8*y5*z7 + 16*x8*y7*z5 + 4*x8*y9*z3 - 4*x8*y10*z2 - 4*x9*y1*z10 + 4*x9*y3*z8 + 16*x9*y5*z6 - 16*x9*y6*z5 - 4*x9*y8*z3
105 + 4*x9*y10*z1 + 4*x10*y1*z9 - 4*x10*y2*z8 + 4*x10*y3*z7 + 4*x10*y4*z6 - 4*x10*y6*z4 - 4*x10*y7*z3 + 4*x10*y8*z2 - 4*x10*y9*z1 - 4*x2*y9*z10 + 4*x2*y10*z9 + 4*x3*y8*z10 - 4*x3*y10*z8
106 + - 4*x4*y7*z10 + 4*x4*y8*z9 - 4*x4*y9*z8 + 4*x4*y10*z7 + 4*x7*y4*z10 - 4*x7*y10*z4 - 4*x8*y3*z10 - 4*x8*y4*z9 + 4*x8*y9*z4 + 4*x8*y10*z3 + 4*x9*y2*z10 + 4*x9*y4*z8 - 4*x9*y8*z4
107 + - 4*x9*y10*z2 - 4*x10*y2*z9 + 4*x10*y3*z8 - 4*x10*y4*z7 + 4*x10*y7*z4 - 4*x10*y8*z3 + 4*x10*y9*z2 - 4*x3*y9*z10 + 4*x3*y10*z9 - 4*x4*y8*z10 + 4*x4*y10*z8 - 16*x5*y8*z9 + 16*x5*y9*z8
108 + 4*x8*y4*z10 + 16*x8*y5*z9 - 16*x8*y9*z5 - 4*x8*y10*z4 + 4*x9*y3*z10 - 16*x9*y5*z8 + 16*x9*y8*z5 - 4*x9*y10*z3 - 4*x10*y3*z9 - 4*x10*y4*z8 + 4*x10*y8*z4 + 4*x10*y9*z3 + 4*x4*y9*z10
109 + - 4*x4*y10*z9 + 16*x6*y7*z10 - 16*x6*y10*z7 - 16*x7*y6*z10 + 16*x7*y10*z6 - 4*x9*y4*z10 + 4*x9*y10*z4 + 4*x10*y4*z9 + 16*x10*y6*z7 - 16*x10*y7*z6 - 4*x10*y9*z4 - 16*x6*y9*z10
110 + 16*x6*y10*z9 + 16*x7*y8*z10 - 16*x7*y10*z8 - 16*x8*y7*z10 + 16*x8*y10*z7 + 16*x9*y6*z10 - 16*x9*y10*z6 - 16*x10*y6*z9 + 16*x10*y7*z8 - 16*x10*y8*z7 + 16*x10*y9*z6 + 16*x8*y9*z10
111 + - 16*x8*y10*z9 - 16*x9*y8*z10 + 16*x9*y10*z8 + 16*x10*y8*z9 - 16*x10*y9*z8;
115 double area = x1 * y3 * z2 - x1 * y2 * z3 + x2 * y1 * z3 - x2 * y3 * z1 - x3 * y1 * z2 + x3 * y2 * z1 + x1 * y2 * z4 - x1 * y4 * z2 - x2 * y1 * z4 + x2 * y4 * z1 + x4 * y1 * z2 - x4 * y2 * z1 -
116 x1 * y3 * z4 + x1 * y4 * z3 + x3 * y1 * z4 - x3 * y4 * z1 - x4 * y1 * z3 + x4 * y3 * z1 + x2 * y3 * z4 - x2 * y4 * z3 - x3 * y2 * z4 + x3 * y4 * z2 + x4 * y2 * z3 - x4 * y3 * z2;
127 double x1 = lcoords(0);
128 double x2 = lcoords(1);
129 double x3 = lcoords(2);
130 double x4 = 1.0 - x1 - x2 - x3;
133 answer(0) = x1 * ( 2 * x1 - 1 );
134 answer(1) = x2 * ( 2 * x2 - 1 );
135 answer(2) = x3 * ( 2 * x3 - 1 );
136 answer(3) = x4 * ( 2 * x4 - 1 );
138 answer(4) = 4 * x1 * x2;
139 answer(5) = 4 * x2 * x3;
140 answer(6) = 4 * x3 * x1;
141 answer(7) = 4 * x1 * x4;
142 answer(8) = 4 * x2 * x4;
143 answer(9) = 4 * x3 * x4;
150 this->
evaldNdxi(dNduvw, lcoords, cellgeo);
165 double x1 = lcoords(0);
166 double x2 = lcoords(1);
167 double x3 = lcoords(2);
168 double x4 = 1.0 - x1 - x2 - x3;
173 answer(0, 0) = 4 * x1 - 1;
176 answer(3, 0) = -4 * x4 + 1;
177 answer(4, 0) = 4 * x2;
179 answer(6, 0) = 4 * x3;
180 answer(7, 0) = 4 * ( x4 - x1 );
181 answer(8, 0) = -4 * x2;
182 answer(9, 0) = -4 * x3;
186 answer(1, 1) = 4 * x2 - 1;
188 answer(3, 1) = -4 * x4 + 1;
189 answer(4, 1) = 4 * x1;
190 answer(5, 1) = 4 * x3;
192 answer(7, 1) = -4 * x1;
193 answer(8, 1) = 4 * ( x4 - x2 );
194 answer(9, 1) = -4 * x3;
199 answer(2, 2) = 4 * x3 - 1;
200 answer(3, 2) = -4 * x4 + 1;
202 answer(5, 2) = 4 * x2;
203 answer(6, 2) = 4 * x1;
204 answer(7, 2) = -4 * x1;
205 answer(8, 2) = -4 * x2;
206 answer(9, 2) = 4 * ( x4 - x3 );
214 this->
evalN(N, lcoords, cellgeo);
216 for (
int i = 1; i <= N.
giveSize(); i++ ) {
221 #define POINT_TOL 1e-6 228 double convergence_limit, error = 0.0;
235 lcoords_guess.
zero();
238 for (
int nite = 0; nite < 10; nite++ ) {
245 if ( error < convergence_limit ) {
254 lcoords_guess.
add(delta);
256 if ( error > convergence_limit ) {
263 answer(0) = lcoords_guess(0);
264 answer(1) = lcoords_guess(1);
265 answer(2) = lcoords_guess(2);
268 for (
int i = 0; i < 3; i++ ) {
272 }
else if ( answer(i) > ( 1. +
POINT_TOL ) ) {
278 answer(3) = 1.0 - answer(0) - answer(1) - answer(2);
297 this->
evaldNdxi(dNduvw, lcoords, cellgeo);
309 double xi = lcoords.
at(1);
311 answer(0) = 0.5 * ( xi - 1.0 ) * xi;
312 answer(1) = 0.5 * ( xi + 1.0 ) * xi;
313 answer(2) = 1.0 - xi * xi;
333 this->
edgeEvalN(N, iedge, lcoords, cellgeo);
336 for (
int i = 0; i < N.
giveSize(); ++i ) {
362 }
else if ( iedge == 2 ) {
366 }
else if ( iedge == 3 ) {
370 }
else if ( iedge == 4 ) {
374 }
else if ( iedge == 5 ) {
378 }
else if ( iedge == 6 ) {
398 double l1 = lcoords.
at(1);
399 double l2 = lcoords.
at(2);
400 double l3 = 1. - l1 - l2;
404 answer.
at(1) = ( 2. * l1 - 1. ) * l1;
405 answer.
at(2) = ( 2. * l2 - 1. ) * l2;
406 answer.
at(3) = ( 2. * l3 - 1. ) * l3;
407 answer.
at(4) = 4. * l1 * l2;
408 answer.
at(5) = 4. * l2 * l3;
409 answer.
at(6) = 4. * l3 * l1;
422 for (
int i = 0; i < N.
giveSize(); ++i ) {
434 lcoords_tet.
at(snodes.
at(1)) = lcoords.
at(1);
435 lcoords_tet.
at(snodes.
at(2)) = lcoords.
at(2);
436 lcoords_tet.
at(snodes.
at(3)) = 1. - lcoords.
at(1) - lcoords.
at(2);
439 this->
evaldNdx(fullB, lcoords_tet, cellgeo);
441 for (
int i = 1; i <= snodes.
giveSize(); ++i ) {
442 for (
int j = 1; j <= 3; ++j ) {
443 answer.
at(i, j) = fullB.
at(snodes.
at(i), j);
462 dNdxi(0) = 4.0 * l1 - 1.0;
464 dNdxi(2) = -1.0 * ( 4.0 * l3 - 1.0 );
466 dNdxi(4) = -4.0 * l2;
467 dNdxi(5) = 4.0 * l3 - 4.0 * l1;
470 dNdeta(1) = 4.0 * l2 - 1.0;
471 dNdeta(2) = -1.0 * ( 4.0 * l3 - 1.0 );
472 dNdeta(3) = 4.0 * l1;
473 dNdeta(4) = 4.0 * l3 - 4.0 * l2;
474 dNdeta(5) = -4.0 * l1;
476 for (
int i = 0; i < 6; ++i ) {
495 int aNode = 0, bNode = 0, cNode = 0, dNode = 0, eNode = 0, fNode = 0;
505 }
else if ( isurf == 2 ) {
512 }
else if ( isurf == 3 ) {
519 }
else if ( isurf == 4 ) {
530 surfNodes.
at(1) = aNode;
531 surfNodes.
at(2) = bNode;
532 surfNodes.
at(3) = cNode;
533 surfNodes.
at(4) = dNode;
534 surfNodes.
at(5) = eNode;
535 surfNodes.
at(6) = fNode;
552 c1(2) * ( c2(1) * ( -2 * c3(0) - 3 * c4(0) + 5 * c5(0) + 5 * c6(0) ) +
553 c3(1) * ( 2 * c2(0) - 5 * c4(0) - 5 * c5(0) + 3 * c6(0) ) +
554 c4(1) * ( 3 * c2(0) + 5 * c3(0) - 4 * c5(0) - 24 * c6(0) ) +
555 c5(1) * ( -5 * c2(0) + 5 * c3(0) + 4 * c4(0) - 4 * c6(0) ) +
556 c6(1) * ( -5 * c2(0) - 3 * c3(0) + 24 * c4(0) + 4 * c5(0) ) ) +
557 c2(2) * ( c1(1) * ( 2 * c3(0) + 3 * c4(0) - 5 * c5(0) - 5 * c6(0) ) +
558 c3(1) * ( -2 * c1(0) + 5 * c4(0) - 3 * c5(0) + 5 * c6(0) ) +
559 c4(1) * ( -3 * c1(0) - 5 * c3(0) + 24 * c5(0) + 4 * c6(0) ) +
560 c5(1) * ( 5 * c1(0) + 3 * c3(0) - 24 * c4(0) - 4 * c6(0) ) +
561 c6(1) * ( 5 * c1(0) - 5 * c3(0) - 4 * c4(0) + 4 * c5(0) ) ) +
562 c3(2) * ( c1(1) * ( -2 * c2(0) + 5 * c4(0) + 5 * c5(0) - 3 * c6(0) ) +
563 c2(1) * ( 2 * c1(0) - 5 * c4(0) + 3 * c5(0) - 5 * c6(0) ) +
564 c4(1) * ( -5 * c1(0) + 5 * c2(0) - 4 * c5(0) + 4 * c6(0) ) +
565 c5(1) * ( -5 * c1(0) - 3 * c2(0) + 4 * c4(0) + 24 * c6(0) ) +
566 c6(1) * ( 3 * c1(0) + 5 * c2(0) - 4 * c4(0) - 24 * c5(0) ) ) +
567 c4(2) * ( c1(1) * ( -3 * c2(0) - 5 * c3(0) + 4 * c5(0) + 24 * c6(0) ) +
568 c2(1) * ( 3 * c1(0) + 5 * c3(0) - 24 * c5(0) - 4 * c6(0) ) +
569 c3(1) * ( 5 * c1(0) - 5 * c2(0) + 4 * c5(0) - 4 * c6(0) ) +
570 c5(1) * ( -4 * c1(0) + 24 * c2(0) - 4 * c3(0) - 16 * c6(0) ) +
571 c6(1) * ( -24 * c1(0) + 4 * c2(0) + 4 * c3(0) + 16 * c5(0) ) ) +
572 c5(2) * ( c1(1) * ( 5 * c2(0) - 5 * c3(0) - 4 * c4(0) + 4 * c6(0) ) +
573 c2(1) * ( -5 * c1(0) - 3 * c3(0) + 24 * c4(0) + 4 * c6(0) ) +
574 c3(1) * ( 5 * c1(0) + 3 * c2(0) - 4 * c4(0) - 24 * c6(0) ) +
575 c4(1) * ( 4 * c1(0) - 24 * c2(0) + 4 * c3(0) + 16 * c6(0) ) +
576 c6(1) * ( -4 * c1(0) - 4 * c2(0) + 24 * c3(0) - 16 * c4(0) ) ) +
577 c6(2) * ( c1(1) * ( 5 * c2(0) + 3 * c3(0) - 24 * c4(0) - 4 * c5(0) ) +
578 c2(1) * ( -5 * c1(0) + 5 * c3(0) + 4 * c4(0) - 4 * c5(0) ) +
579 c3(1) * ( -3 * c1(0) - 5 * c2(0) + 4 * c4(0) + 24 * c5(0) ) +
580 c4(1) * ( 24 * c1(0) - 4 * c2(0) - 4 * c3(0) - 16 * c5(0) ) +
581 c5(1) * ( 4 * c1(0) + 4 * c2(0) - 24 * c3(0) + 16 * c4(0) ) )
double giveDeterminant() const
Returns the trace (sum of diagonal components) of the receiver.
void beVectorProductOf(const FloatArray &v1, const FloatArray &v2)
Computes vector product (or cross product) of vectors given as parameters, , and stores the result in...
virtual void evaldNdxi(FloatMatrix &answer, const FloatArray &lcoords, const FEICellGeometry &cellgeo)
Evaluates the matrix of derivatives of interpolation functions (shape functions) at given point...
bool solveForRhs(const FloatArray &b, FloatArray &answer, bool transpose=false)
Solves the system of linear equations .
virtual IntegrationRule * giveBoundaryIntegrationRule(int order, int boundary)
Sets up a suitable integration rule for integrating over the requested boundary.
double & at(int i)
Coefficient access function.
virtual const FloatArray * giveVertexCoordinates(int i) const =0
Class representing a general abstraction for cell geometry.
void clear()
Clears receiver (zero size).
virtual int global2local(FloatArray &answer, const FloatArray &lcoords, const FEICellGeometry &cellgeo)
Evaluates local coordinates from given global ones.
virtual int SetUpPointsOnTetrahedra(int, MaterialMode mode)
Sets up receiver's integration points on tetrahedra (volume coords) integration domain.
virtual void local2global(FloatArray &answer, const FloatArray &lcoords, const FEICellGeometry &cellgeo)
Evaluates global coordinates from given local ones.
virtual double evaldNdx(FloatMatrix &answer, const FloatArray &lcoords, const FEICellGeometry &cellgeo)
Evaluates the matrix of derivatives of interpolation functions (shape functions) at given point...
virtual void computeLocalEdgeMapping(IntArray &edgeNodes, int iedge)
Class implementing an array of integers.
int & at(int i)
Coefficient access function.
virtual void surfaceEvaldNdx(FloatMatrix &answer, int isurf, const FloatArray &lcoords, const FEICellGeometry &cellgeo)
Evaluates the matrix of derivatives of edge interpolation functions (shape functions) at given point...
Abstract base class representing integration rule.
void beDifferenceOf(const FloatArray &a, const FloatArray &b)
Sets receiver to be a - b.
virtual double surfaceEvalNormal(FloatArray &answer, int isurf, const FloatArray &lcoords, const FEICellGeometry &cellgeo)
Evaluates the normal out of the surface at given point.
double distance(const FloatArray &x) const
Computes the distance between position represented by receiver and position given as parameter...
virtual void surfaceEvalN(FloatArray &answer, int isurf, const FloatArray &lcoords, const FEICellGeometry &cellgeo)
Evaluates the array of edge interpolation functions (shape functions) at given point.
virtual void evalN(FloatArray &answer, const FloatArray &lcoords, const FEICellGeometry &cellgeo)
Evaluates the array of interpolation functions (shape functions) at given point.
virtual double giveCharacteristicLength(const FEICellGeometry &cellgeo) const
Returns a characteristic length of the geometry, typically a diagonal or edge length.
virtual double giveVolume(const FEICellGeometry &cellgeo) const
Computes the exact volume.
virtual void giveJacobianMatrixAt(FloatMatrix &jacobianMatrix, const FloatArray &lcoords, const FEICellGeometry &cellgeo)
Gives the jacobian matrix at the local coordinates.
virtual IntegrationRule * giveIntegrationRule(int order)
Sets up a suitable integration rule for numerical integrating over volume.
virtual double surfaceGiveTransformationJacobian(int isurf, const FloatArray &lcoords, const FEICellGeometry &cellgeo)
Evaluates the edge jacobian of transformation between local and global coordinates.
double at(int i, int j) const
Coefficient access function.
void resize(int n)
Checks size of receiver towards requested bounds.
Class representing vector of real numbers.
Implementation of matrix containing floating point numbers.
virtual void computeLocalSurfaceMapping(IntArray &edgeNodes, int iedge)
virtual void edgeEvalN(FloatArray &answer, int iedge, const FloatArray &lcoords, const FEICellGeometry &cellgeo)
Evaluates the array of edge interpolation functions (shape functions) at given point.
virtual double edgeGiveTransformationJacobian(int iedge, const FloatArray &lcoords, const FEICellGeometry &cellgeo)
Evaluates the edge jacobian of transformation between local and global coordinates.
double computeNorm() const
Computes the norm (or length) of the vector.
void resize(int rows, int cols)
Checks size of receiver towards requested bounds.
virtual int getRequiredNumberOfIntegrationPoints(integrationDomain dType, int approxOrder)
Abstract service.
double edgeComputeLength(IntArray &edgeNodes, const FEICellGeometry &cellgeo)
void zero()
Zeroes all coefficients of receiver.
void setColumn(const FloatArray &src, int c)
Sets the values of the matrix in specified column.
virtual void surfaceLocal2global(FloatArray &answer, int isurf, const FloatArray &lcoords, const FEICellGeometry &cellgeo)
Evaluates edge global coordinates from given local ones.
virtual int SetUpPointsOnTriangle(int, MaterialMode mode)
Sets up receiver's integration points on triangular (area coords) integration domain.
virtual double evalNXIntegral(int iEdge, const FEICellGeometry &cellgeo)
Computes the integral .
void beProductOf(const FloatMatrix &a, const FloatMatrix &b)
Assigns to the receiver product of .
int giveSize() const
Returns the size of receiver.
the oofem namespace is to define a context or scope in which all oofem names are defined.
void beInverseOf(const FloatMatrix &src)
Modifies receiver to become inverse of given parameter.
double normalize()
Normalizes receiver.
int giveNumberOfRows() const
Returns number of rows of receiver.
virtual void edgeEvaldNdx(FloatMatrix &answer, int iedge, const FloatArray &lcoords, const FEICellGeometry &cellgeo)
Evaluates the matrix of derivatives of edge interpolation functions (shape functions) at given point...
virtual void edgeLocal2global(FloatArray &answer, int iedge, const FloatArray &lcoords, const FEICellGeometry &cellgeo)
Evaluates edge global coordinates from given local ones.
void add(const FloatArray &src)
Adds array src to receiver.
Class representing Gaussian-quadrature integration rule.
void resize(int s)
Resizes receiver towards requested size.