52 answer.
at(1) = 0.125 * ( 1.0 - u ) * ( 1.0 - v ) * ( 1.0 + w ) * ( -u - v + w - 2.0 );
53 answer.
at(2) = 0.125 * ( 1.0 - u ) * ( 1.0 + v ) * ( 1.0 + w ) * ( -u + v + w - 2.0 );
54 answer.
at(3) = 0.125 * ( 1.0 + u ) * ( 1.0 + v ) * ( 1.0 + w ) * ( u + v + w - 2.0 );
55 answer.
at(4) = 0.125 * ( 1.0 + u ) * ( 1.0 - v ) * ( 1.0 + w ) * ( u - v + w - 2.0 );
56 answer.
at(5) = 0.125 * ( 1.0 - u ) * ( 1.0 - v ) * ( 1.0 - w ) * ( -u - v - w - 2.0 );
57 answer.
at(6) = 0.125 * ( 1.0 - u ) * ( 1.0 + v ) * ( 1.0 - w ) * ( -u + v - w - 2.0 );
58 answer.
at(7) = 0.125 * ( 1.0 + u ) * ( 1.0 + v ) * ( 1.0 - w ) * ( u + v - w - 2.0 );
59 answer.
at(8) = 0.125 * ( 1.0 + u ) * ( 1.0 - v ) * ( 1.0 - w ) * ( u - v - w - 2.0 );
61 answer.
at(9) = 0.25 * ( 1.0 - v * v ) * ( 1.0 - u ) * ( 1.0 + w );
62 answer.
at(10) = 0.25 * ( 1.0 - u * u ) * ( 1.0 + v ) * ( 1.0 + w );
63 answer.
at(11) = 0.25 * ( 1.0 - v * v ) * ( 1.0 + u ) * ( 1.0 + w );
64 answer.
at(12) = 0.25 * ( 1.0 - u * u ) * ( 1.0 - v ) * ( 1.0 + w );
66 answer.
at(13) = 0.25 * ( 1.0 - v * v ) * ( 1.0 - u ) * ( 1.0 - w );
67 answer.
at(14) = 0.25 * ( 1.0 - u * u ) * ( 1.0 + v ) * ( 1.0 - w );
68 answer.
at(15) = 0.25 * ( 1.0 - v * v ) * ( 1.0 + u ) * ( 1.0 - w );
69 answer.
at(16) = 0.25 * ( 1.0 - u * u ) * ( 1.0 - v ) * ( 1.0 - w );
71 answer.
at(17) = 0.25 * ( 1.0 - u ) * ( 1.0 - v ) * ( 1.0 - w * w );
72 answer.
at(18) = 0.25 * ( 1.0 - u ) * ( 1.0 + v ) * ( 1.0 - w * w );
73 answer.
at(19) = 0.25 * ( 1.0 + u ) * ( 1.0 + v ) * ( 1.0 - w * w );
74 answer.
at(20) = 0.25 * ( 1.0 + u ) * ( 1.0 - v ) * ( 1.0 - w * w );
98 this->
evalN(n, lcoords, cellgeo);
100 for (
int i = 1; i <= n.
giveSize(); i++ ) {
114 #define POINT_TOL 1.e-3 121 double convergence_limit, error = 0.0;
131 for (
int nite = 0; nite < 40; nite++ ) {
138 if ( error < convergence_limit ) {
149 if ( error > convergence_limit ) {
157 for (
int i = 1; i <= answer.
giveSize(); i++ ) {
172 double u = lcoords.
at(1);
174 answer.
at(1) = 0.5 * ( u - 1. ) * u;
175 answer.
at(2) = 0.5 * ( u + 1. ) * u;
176 answer.
at(3) = 1. - u * u;
182 double u = lcoords.
at(1);
195 double u = lcoords.
at(1);
209 double u = lcoords.
at(1);
221 edgeNodes = { 1, 2, 9};
222 }
else if ( iedge == 2 ) {
223 edgeNodes = { 2, 3, 10};
224 }
else if ( iedge == 3 ) {
225 edgeNodes = { 3, 4, 11};
226 }
else if ( iedge == 4 ) {
227 edgeNodes = { 4, 1, 12};
228 }
else if ( iedge == 5 ) {
229 edgeNodes = { 5, 6, 13};
230 }
else if ( iedge == 6 ) {
231 edgeNodes = { 6, 7, 14};
232 }
else if ( iedge == 7 ) {
233 edgeNodes = { 7, 8, 15};
234 }
else if ( iedge == 8 ) {
235 edgeNodes = { 8, 5, 16};
236 }
else if ( iedge == 9 ) {
237 edgeNodes = { 1, 5, 17};
238 }
else if ( iedge == 10 ) {
239 edgeNodes = { 2, 6, 18};
240 }
else if ( iedge == 11 ) {
241 edgeNodes = { 3, 7, 19};
242 }
else if ( iedge == 12 ) {
243 edgeNodes = { 4, 8, 20};
258 answer.
at(1) = ( 1. + ksi ) * ( 1. + eta ) * 0.25 * ( ksi + eta - 1. );
259 answer.
at(2) = ( 1. - ksi ) * ( 1. + eta ) * 0.25 * ( -ksi + eta - 1. );
260 answer.
at(3) = ( 1. - ksi ) * ( 1. - eta ) * 0.25 * ( -ksi - eta - 1. );
261 answer.
at(4) = ( 1. + ksi ) * ( 1. - eta ) * 0.25 * ( ksi - eta - 1. );
262 answer.
at(5) = 0.5 * ( 1. - ksi * ksi ) * ( 1. + eta );
263 answer.
at(6) = 0.5 * ( 1. - ksi ) * ( 1. - eta * eta );
264 answer.
at(7) = 0.5 * ( 1. - ksi * ksi ) * ( 1. - eta );
265 answer.
at(8) = 0.5 * ( 1. + ksi ) * ( 1. - eta * eta );
280 lcoords_hex = {-lcoords.
at(1), -lcoords.
at(2), 1};
281 }
else if ( isurf == 2 ) {
282 lcoords_hex = {-lcoords.
at(2), -lcoords.
at(1), -1};
283 }
else if ( isurf == 3 ) {
284 lcoords_hex = {-1, -lcoords.
at(1), lcoords.
at(2)};
285 }
else if ( isurf == 4 ) {
286 lcoords_hex = {-lcoords.
at(1), 1, lcoords.
at(2)};
287 }
else if ( isurf == 5 ) {
288 lcoords_hex = {1, lcoords.
at(1), lcoords.
at(2)};
289 }
else if ( isurf == 6 ) {
290 lcoords_hex = {lcoords.
at(1), -1, lcoords.
at(2)};
297 lcoords_hex = {-1, lcoords.
at(1), lcoords.
at(2)};
298 }
else if ( isurf == 2 ) {
299 lcoords_hex = {1, lcoords.
at(1), lcoords.
at(2)};
300 }
else if ( isurf == 3 ) {
301 lcoords_hex = {lcoords.
at(1), -1, lcoords.
at(2)};
302 }
else if ( isurf == 4 ) {
303 lcoords_hex = {lcoords.
at(1), 1, lcoords.
at(2)};
304 }
else if ( isurf == 5 ) {
305 lcoords_hex = {lcoords.
at(1), lcoords.
at(2), -1};
306 }
else if ( isurf == 6 ) {
307 lcoords_hex = {lcoords.
at(1), lcoords.
at(2), 1};
314 this->
evaldNdx(fullB, lcoords_hex, cellgeo);
316 for (
int i = 1; i <= snodes.
giveSize(); ++i ) {
317 for (
int j = 1; j <= 3; ++j ) {
318 answer.
at(i, j) = fullB.
at(snodes.
at(i), j);
336 dNdksi.at(1) = 0.25 * ( 1. + eta ) * ( 2.0 * ksi + eta );
337 dNdksi.at(2) = -0.25 * ( 1. + eta ) * ( -2.0 * ksi + eta );
338 dNdksi.at(3) = -0.25 * ( 1. - eta ) * ( -2.0 * ksi - eta );
339 dNdksi.at(4) = 0.25 * ( 1. - eta ) * ( 2.0 * ksi - eta );
340 dNdksi.at(5) = -ksi * ( 1. + eta );
341 dNdksi.at(6) = -0.5 * ( 1. - eta * eta );
342 dNdksi.at(7) = -ksi * ( 1. - eta );
343 dNdksi.at(8) = 0.5 * ( 1. - eta * eta );
345 dNdeta.
at(1) = 0.25 * ( 1. + ksi ) * ( 2.0 * eta + ksi );
346 dNdeta.
at(2) = 0.25 * ( 1. - ksi ) * ( 2.0 * eta - ksi );
347 dNdeta.
at(3) = -0.25 * ( 1. - ksi ) * ( -2.0 * eta - ksi );
348 dNdeta.
at(4) = -0.25 * ( 1. + ksi ) * ( -2.0 * eta + ksi );
349 dNdeta.
at(5) = 0.5 * ( 1. - ksi * ksi );
350 dNdeta.
at(6) = -eta * ( 1. - ksi );
351 dNdeta.
at(7) = -0.5 * ( 1. - ksi * ksi );
352 dNdeta.
at(8) = -eta * ( 1. + ksi );
354 for (
int i = 1; i <= 8; ++i ) {
375 for (
int i = 1; i <= n.
giveSize(); ++i ) {
398 nodes = { 3, 2, 1, 4, 10, 9, 12, 11};
399 }
else if ( isurf == 2 ) {
400 nodes = { 7, 8, 5, 6, 15, 16, 13, 14};
401 }
else if ( isurf == 3 ) {
402 nodes = { 2, 6, 5, 1, 18, 13, 17, 9};
403 }
else if ( isurf == 4 ) {
404 nodes = { 3, 7, 6, 2, 19, 14, 18, 10};
405 }
else if ( isurf == 5 ) {
406 nodes = { 3, 4, 8, 7, 11, 20, 15, 19};
407 }
else if ( isurf == 6 ) {
408 nodes = { 4, 1, 5, 8, 12, 17, 16, 20};
425 }
else if ( iSurf == 2 ) {
434 }
else if ( iSurf == 3 ) {
443 }
else if ( isurf == 4 ) {
452 }
else if ( isurf == 5 ) {
461 }
else if ( iSurf == 6 ) {
501 dN.
at(1, 1) = 0.125 * ( 1.0 - v ) * ( 1.0 + w ) * ( 2.0 * u + v - w + 1.0 );
502 dN.
at(2, 1) = 0.125 * ( 1.0 + v ) * ( 1.0 + w ) * ( 2.0 * u - v - w + 1.0 );
503 dN.
at(3, 1) = 0.125 * ( 1.0 + v ) * ( 1.0 + w ) * ( 2.0 * u + v + w - 1.0 );
504 dN.
at(4, 1) = 0.125 * ( 1.0 - v ) * ( 1.0 + w ) * ( 2.0 * u - v + w - 1.0 );
505 dN.
at(5, 1) = 0.125 * ( 1.0 - v ) * ( 1.0 - w ) * ( 2.0 * u + v + w + 1.0 );
506 dN.
at(6, 1) = 0.125 * ( 1.0 + v ) * ( 1.0 - w ) * ( 2.0 * u - v + w + 1.0 );
507 dN.
at(7, 1) = 0.125 * ( 1.0 + v ) * ( 1.0 - w ) * ( 2.0 * u + v - w - 1.0 );
508 dN.
at(8, 1) = 0.125 * ( 1.0 - v ) * ( 1.0 - w ) * ( 2.0 * u - v - w - 1.0 );
509 dN.
at(9, 1) = -0.25 * ( 1.0 - v * v ) * ( 1.0 + w );
510 dN.
at(10, 1) = -0.5 * u * ( 1.0 + v ) * ( 1.0 + w );
511 dN.
at(11, 1) = 0.25 * ( 1.0 - v * v ) * ( 1.0 + w );
512 dN.
at(12, 1) = -0.5 * u * ( 1.0 - v ) * ( 1.0 + w );
513 dN.
at(13, 1) = -0.25 * ( 1.0 - v * v ) * ( 1.0 - w );
514 dN.
at(14, 1) = -0.5 * u * ( 1.0 + v ) * ( 1.0 - w );
515 dN.
at(15, 1) = 0.25 * ( 1.0 - v * v ) * ( 1.0 - w );
516 dN.
at(16, 1) = -0.5 * u * ( 1.0 - v ) * ( 1.0 - w );
517 dN.
at(17, 1) = -0.25 * ( 1.0 - v ) * ( 1.0 - w * w );
518 dN.
at(18, 1) = -0.25 * ( 1.0 + v ) * ( 1.0 - w * w );
519 dN.
at(19, 1) = 0.25 * ( 1.0 + v ) * ( 1.0 - w * w );
520 dN.
at(20, 1) = 0.25 * ( 1.0 - v ) * ( 1.0 - w * w );
522 dN.
at(1, 2) = 0.125 * ( 1.0 - u ) * ( 1.0 + w ) * ( 2.0 * v + u - w + 1.0 );
523 dN.
at(2, 2) = 0.125 * ( 1.0 - u ) * ( 1.0 + w ) * ( 2.0 * v - u + w - 1.0 );
524 dN.
at(3, 2) = 0.125 * ( 1.0 + u ) * ( 1.0 + w ) * ( 2.0 * v + u + w - 1.0 );
525 dN.
at(4, 2) = 0.125 * ( 1.0 + u ) * ( 1.0 + w ) * ( 2.0 * v - u - w + 1.0 );
526 dN.
at(5, 2) = 0.125 * ( 1.0 - u ) * ( 1.0 - w ) * ( 2.0 * v + u + w + 1.0 );
527 dN.
at(6, 2) = 0.125 * ( 1.0 - u ) * ( 1.0 - w ) * ( 2.0 * v - u - w - 1.0 );
528 dN.
at(7, 2) = 0.125 * ( 1.0 + u ) * ( 1.0 - w ) * ( 2.0 * v + u - w - 1.0 );
529 dN.
at(8, 2) = 0.125 * ( 1.0 + u ) * ( 1.0 - w ) * ( 2.0 * v - u + w + 1.0 );
530 dN.
at(9, 2) = -0.5 * v * ( 1.0 - u ) * ( 1.0 + w );
531 dN.
at(10, 2) = 0.25 * ( 1.0 - u * u ) * ( 1.0 + w );
532 dN.
at(11, 2) = -0.5 * v * ( 1.0 + u ) * ( 1.0 + w );
533 dN.
at(12, 2) = -0.25 * ( 1.0 - u * u ) * ( 1.0 + w );
534 dN.
at(13, 2) = -0.5 * v * ( 1.0 - u ) * ( 1.0 - w );
535 dN.
at(14, 2) = 0.25 * ( 1.0 - u * u ) * ( 1.0 - w );
536 dN.
at(15, 2) = -0.5 * v * ( 1.0 + u ) * ( 1.0 - w );
537 dN.
at(16, 2) = -0.25 * ( 1.0 - u * u ) * ( 1.0 - w );
538 dN.
at(17, 2) = -0.25 * ( 1.0 - u ) * ( 1.0 - w * w );
539 dN.
at(18, 2) = 0.25 * ( 1.0 - u ) * ( 1.0 - w * w );
540 dN.
at(19, 2) = 0.25 * ( 1.0 + u ) * ( 1.0 - w * w );
541 dN.
at(20, 2) = -0.25 * ( 1.0 + u ) * ( 1.0 - w * w );
543 dN.
at(1, 3) = 0.125 * ( 1.0 - u ) * ( 1.0 - v ) * ( 2.0 * w - u - v - 1.0 );
544 dN.
at(2, 3) = 0.125 * ( 1.0 - u ) * ( 1.0 + v ) * ( 2.0 * w - u + v - 1.0 );
545 dN.
at(3, 3) = 0.125 * ( 1.0 + u ) * ( 1.0 + v ) * ( 2.0 * w + u + v - 1.0 );
546 dN.
at(4, 3) = 0.125 * ( 1.0 + u ) * ( 1.0 - v ) * ( 2.0 * w + u - v - 1.0 );
547 dN.
at(5, 3) = 0.125 * ( 1.0 - u ) * ( 1.0 - v ) * ( 2.0 * w + u + v + 1.0 );
548 dN.
at(6, 3) = 0.125 * ( 1.0 - u ) * ( 1.0 + v ) * ( 2.0 * w + u - v + 1.0 );
549 dN.
at(7, 3) = 0.125 * ( 1.0 + u ) * ( 1.0 + v ) * ( 2.0 * w - u - v + 1.0 );
550 dN.
at(8, 3) = 0.125 * ( 1.0 + u ) * ( 1.0 - v ) * ( 2.0 * w - u + v + 1.0 );
551 dN.
at(9, 3) = 0.25 * ( 1.0 - v * v ) * ( 1.0 - u );
552 dN.
at(10, 3) = 0.25 * ( 1.0 - u * u ) * ( 1.0 + v );
553 dN.
at(11, 3) = 0.25 * ( 1.0 - v * v ) * ( 1.0 + u );
554 dN.
at(12, 3) = 0.25 * ( 1.0 - u * u ) * ( 1.0 - v );
555 dN.
at(13, 3) = -0.25 * ( 1.0 - v * v ) * ( 1.0 - u );
556 dN.
at(14, 3) = -0.25 * ( 1.0 - u * u ) * ( 1.0 + v );
557 dN.
at(15, 3) = -0.25 * ( 1.0 - v * v ) * ( 1.0 + u );
558 dN.
at(16, 3) = -0.25 * ( 1.0 - u * u ) * ( 1.0 - v );
559 dN.
at(17, 3) = -0.5 * ( 1.0 - u ) * ( 1.0 - v ) * w;
560 dN.
at(18, 3) = -0.5 * ( 1.0 - u ) * ( 1.0 + v ) * w;
561 dN.
at(19, 3) = -0.5 * ( 1.0 + u ) * ( 1.0 + v ) * w;
562 dN.
at(20, 3) = -0.5 * ( 1.0 + u ) * ( 1.0 - v ) * w;
583 c1(2) * ( c2(1) * ( -3 * c3(0) - 3 * c4(0) - 12 * c5(0) + 14 * c6(0) + 14 * c8(0) ) +
584 c3(1) * ( 3 * c2(0) - 3 * c4(0) - 6 * c5(0) - 6 * c6(0) + 6 * c7(0) + 6 * c8(0) ) +
585 c4(1) * ( 3 * c2(0) + 3 * c3(0) - 14 * c5(0) - 14 * c7(0) + 12 * c8(0) ) +
586 c5(1) * ( 12 * c2(0) + 6 * c3(0) + 14 * c4(0) - 4 * c6(0) - 8 * c7(0) - 60 * c8(0) ) +
587 c6(1) * ( -14 * c2(0) + 6 * c3(0) + 4 * c5(0) + 12 * c7(0) - 8 * c8(0) ) +
588 c7(1) * ( -6 * c3(0) + 14 * c4(0) + 8 * c5(0) - 12 * c6(0) - 4 * c8(0) ) +
589 c8(1) * ( -14 * c2(0) - 6 * c3(0) - 12 * c4(0) + 60 * c5(0) + 8 * c6(0) + 4 * c7(0) ) ) +
590 c2(2) * ( c1(1) * ( 3 * c3(0) + 3 * c4(0) + 12 * c5(0) - 14 * c6(0) - 14 * c8(0) ) +
591 c3(1) * ( -3 * c1(0) - 3 * c4(0) + 14 * c5(0) - 12 * c6(0) + 14 * c7(0) ) +
592 c4(1) * ( -3 * c1(0) + 3 * c3(0) + 6 * c5(0) - 6 * c6(0) - 6 * c7(0) + 6 * c8(0) ) +
593 c5(1) * ( -12 * c1(0) - 14 * c3(0) - 6 * c4(0) + 60 * c6(0) + 8 * c7(0) + 4 * c8(0) ) +
594 c6(1) * ( 14 * c1(0) + 12 * c3(0) + 6 * c4(0) - 60 * c5(0) - 4 * c7(0) - 8 * c8(0) ) +
595 c7(1) * ( -14 * c3(0) + 6 * c4(0) - 8 * c5(0) + 4 * c6(0) + 12 * c8(0) ) +
596 c8(1) * ( 14 * c1(0) - 6 * c4(0) - 4 * c5(0) + 8 * c6(0) - 12 * c7(0) ) ) +
597 c3(2) * ( c1(1) * ( -3 * c2(0) + 3 * c4(0) + 6 * c5(0) + 6 * c6(0) - 6 * c7(0) - 6 * c8(0) ) +
598 c2(1) * ( 3 * c1(0) + 3 * c4(0) - 14 * c5(0) + 12 * c6(0) - 14 * c7(0) ) +
599 c4(1) * ( -3 * c1(0) - 3 * c2(0) + 14 * c6(0) - 12 * c7(0) + 14 * c8(0) ) +
600 c5(1) * ( -6 * c1(0) + 14 * c2(0) - 4 * c6(0) + 8 * c7(0) - 12 * c8(0) ) +
601 c6(1) * ( -6 * c1(0) - 12 * c2(0) - 14 * c4(0) + 4 * c5(0) + 60 * c7(0) + 8 * c8(0) ) +
602 c7(1) * ( 6 * c1(0) + 14 * c2(0) + 12 * c4(0) - 8 * c5(0) - 60 * c6(0) - 4 * c8(0) ) +
603 c8(1) * ( 6 * c1(0) - 14 * c4(0) + 12 * c5(0) - 8 * c6(0) + 4 * c7(0) ) ) +
604 c4(2) * ( c1(1) * ( -3 * c2(0) - 3 * c3(0) + 14 * c5(0) + 14 * c7(0) - 12 * c8(0) ) +
605 c2(1) * ( 3 * c1(0) - 3 * c3(0) - 6 * c5(0) + 6 * c6(0) + 6 * c7(0) - 6 * c8(0) ) +
606 c3(1) * ( 3 * c1(0) + 3 * c2(0) - 14 * c6(0) + 12 * c7(0) - 14 * c8(0) ) +
607 c5(1) * ( -14 * c1(0) + 6 * c2(0) + 12 * c6(0) - 8 * c7(0) + 4 * c8(0) ) +
608 c6(1) * ( -6 * c2(0) + 14 * c3(0) - 12 * c5(0) - 4 * c7(0) + 8 * c8(0) ) +
609 c7(1) * ( -14 * c1(0) - 6 * c2(0) - 12 * c3(0) + 8 * c5(0) + 4 * c6(0) + 60 * c8(0) ) +
610 c8(1) * ( 12 * c1(0) + 6 * c2(0) + 14 * c3(0) - 4 * c5(0) - 8 * c6(0) - 60 * c7(0) ) ) +
611 c5(2) * ( c1(1) * ( -12 * c2(0) - 6 * c3(0) - 14 * c4(0) + 4 * c6(0) + 8 * c7(0) + 60 * c8(0) ) +
612 c2(1) * ( 12 * c1(0) + 14 * c3(0) + 6 * c4(0) - 60 * c6(0) - 8 * c7(0) - 4 * c8(0) ) +
613 c3(1) * ( 6 * c1(0) - 14 * c2(0) + 4 * c6(0) - 8 * c7(0) + 12 * c8(0) ) +
614 c4(1) * ( 14 * c1(0) - 6 * c2(0) - 12 * c6(0) + 8 * c7(0) - 4 * c8(0) ) +
615 c6(1) * ( -4 * c1(0) + 60 * c2(0) - 4 * c3(0) + 12 * c4(0) - 32 * c7(0) - 32 * c8(0) ) +
616 c7(1) * ( -8 * c1(0) + 8 * c2(0) + 8 * c3(0) - 8 * c4(0) + 32 * c6(0) - 32 * c8(0) ) +
617 c8(1) * ( -60 * c1(0) + 4 * c2(0) - 12 * c3(0) + 4 * c4(0) + 32 * c6(0) + 32 * c7(0) ) ) +
618 c6(2) * ( c1(1) * ( 14 * c2(0) - 6 * c3(0) - 4 * c5(0) - 12 * c7(0) + 8 * c8(0) ) +
619 c2(1) * ( -14 * c1(0) - 12 * c3(0) - 6 * c4(0) + 60 * c5(0) + 4 * c7(0) + 8 * c8(0) ) +
620 c3(1) * ( 6 * c1(0) + 12 * c2(0) + 14 * c4(0) - 4 * c5(0) - 60 * c7(0) - 8 * c8(0) ) +
621 c4(1) * ( 6 * c2(0) - 14 * c3(0) + 12 * c5(0) + 4 * c7(0) - 8 * c8(0) ) +
622 c5(1) * ( 4 * c1(0) - 60 * c2(0) + 4 * c3(0) - 12 * c4(0) + 32 * c7(0) + 32 * c8(0) ) +
623 c7(1) * ( 12 * c1(0) - 4 * c2(0) + 60 * c3(0) - 4 * c4(0) - 32 * c5(0) - 32 * c8(0) ) +
624 c8(1) * ( -8 * c1(0) - 8 * c2(0) + 8 * c3(0) + 8 * c4(0) - 32 * c5(0) + 32 * c7(0) ) ) +
625 c7(2) * ( c1(1) * ( 6 * c3(0) - 14 * c4(0) - 8 * c5(0) + 12 * c6(0) + 4 * c8(0) ) +
626 c2(1) * ( 14 * c3(0) - 6 * c4(0) + 8 * c5(0) - 4 * c6(0) - 12 * c8(0) ) +
627 c3(1) * ( -6 * c1(0) - 14 * c2(0) - 12 * c4(0) + 8 * c5(0) + 60 * c6(0) + 4 * c8(0) ) +
628 c4(1) * ( 14 * c1(0) + 6 * c2(0) + 12 * c3(0) - 8 * c5(0) - 4 * c6(0) - 60 * c8(0) ) +
629 c5(1) * ( 8 * c1(0) - 8 * c2(0) - 8 * c3(0) + 8 * c4(0) - 32 * c6(0) + 32 * c8(0) ) +
630 c6(1) * ( -12 * c1(0) + 4 * c2(0) - 60 * c3(0) + 4 * c4(0) + 32 * c5(0) + 32 * c8(0) ) +
631 c8(1) * ( -4 * c1(0) + 12 * c2(0) - 4 * c3(0) + 60 * c4(0) - 32 * c5(0) - 32 * c6(0) ) ) +
632 c8(2) * ( c1(1) * ( 14 * c2(0) + 6 * c3(0) + 12 * c4(0) - 60 * c5(0) - 8 * c6(0) - 4 * c7(0) ) +
633 c2(1) * ( -14 * c1(0) + 6 * c4(0) + 4 * c5(0) - 8 * c6(0) + 12 * c7(0) ) +
634 c3(1) * ( -6 * c1(0) + 14 * c4(0) - 12 * c5(0) + 8 * c6(0) - 4 * c7(0) ) +
635 c4(1) * ( -12 * c1(0) - 6 * c2(0) - 14 * c3(0) + 4 * c5(0) + 8 * c6(0) + 60 * c7(0) ) +
636 c5(1) * ( 60 * c1(0) - 4 * c2(0) + 12 * c3(0) - 4 * c4(0) - 32 * c6(0) - 32 * c7(0) ) +
637 c6(1) * ( 8 * c1(0) + 8 * c2(0) - 8 * c3(0) - 8 * c4(0) + 32 * c5(0) - 32 * c7(0) ) +
638 c7(1) * ( 4 * c1(0) - 12 * c2(0) + 4 * c3(0) - 60 * c4(0) + 32 * c5(0) + 32 * c6(0) ) )
double giveDeterminant() const
Returns the trace (sum of diagonal components) of the receiver.
virtual double evaldNdx(FloatMatrix &answer, const FloatArray &lcoords, const FEICellGeometry &cellgeo)
Evaluates the matrix of derivatives of interpolation functions (shape functions) at given point...
void beVectorProductOf(const FloatArray &v1, const FloatArray &v2)
Computes vector product (or cross product) of vectors given as parameters, , and stores the result in...
bool solveForRhs(const FloatArray &b, FloatArray &answer, bool transpose=false)
Solves the system of linear equations .
double & at(int i)
Coefficient access function.
virtual const FloatArray * giveVertexCoordinates(int i) const =0
virtual double evalNXIntegral(int iEdge, const FEICellGeometry &cellgeo)
Computes the integral .
Class representing a general abstraction for cell geometry.
void clear()
Clears receiver (zero size).
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...
virtual int SetUpPointsOnSquare(int, MaterialMode mode)
Sets up receiver's integration points on unit square integration domain.
Class implementing an array of integers.
int & at(int i)
Coefficient access function.
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.
Abstract base class representing integration rule.
void beDifferenceOf(const FloatArray &a, const FloatArray &b)
Sets receiver to be a - b.
virtual void giveLocalDerivative(FloatMatrix &dN, const FloatArray &lcoords)
double distance(const FloatArray &x) const
Computes the distance between position represented by receiver and position given as parameter...
virtual void edgeLocal2global(FloatArray &answer, int iedge, const FloatArray &lcoords, const FEICellGeometry &cellgeo)
Evaluates edge global coordinates from given local ones.
virtual IntegrationRule * giveBoundaryIntegrationRule(int order, int boundary)
Sets up a suitable integration rule for integrating over the requested boundary.
virtual int SetUpPointsOnCube(int, MaterialMode mode)
Sets up receiver's integration points on unit cube integration domain.
double at(int i, int j) const
Coefficient access function.
void resize(int n)
Checks size of receiver towards requested bounds.
virtual double giveCharacteristicLength(const FEICellGeometry &cellgeo) const
virtual double edgeGiveTransformationJacobian(int iedge, const FloatArray &lcoords, const FEICellGeometry &cellgeo)
Evaluates the edge jacobian of transformation between local and global coordinates.
Class representing vector of real numbers.
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 void giveJacobianMatrixAt(FloatMatrix &jacobianMatrix, const FloatArray &lcoords, const FEICellGeometry &cellgeo)
Gives the jacobian matrix at the local coordinates.
Implementation of matrix containing floating point numbers.
virtual IntegrationRule * giveIntegrationRule(int order)
Sets up a suitable integration rule for numerical integrating over volume.
virtual void evalN(FloatArray &answer, const FloatArray &lcoords, const FEICellGeometry &cellgeo)
Evaluates the array of interpolation functions (shape functions) at given point.
double computeNorm() const
Computes the norm (or length) of the vector.
virtual double surfaceEvalNormal(FloatArray &answer, int isurf, const FloatArray &lcoords, const FEICellGeometry &cellgeo)
Evaluates the normal out of the surface at given point.
void resize(int rows, int cols)
Checks size of receiver towards requested bounds.
virtual void computeLocalSurfaceMapping(IntArray &nodes, int iSurf)
virtual int getRequiredNumberOfIntegrationPoints(integrationDomain dType, int approxOrder)
Abstract service.
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 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 surfaceLocal2global(FloatArray &answer, int isurf, const FloatArray &lcoords, const FEICellGeometry &cellgeo)
Evaluates edge global coordinates from given local ones.
void beProductOf(const FloatMatrix &a, const FloatMatrix &b)
Assigns to the receiver product of .
int giveSize() const
Returns the size of receiver.
virtual void computeLocalEdgeMapping(IntArray &edgeNodes, int iedge)
the oofem namespace is to define a context or scope in which all oofem names are defined.
virtual int global2local(FloatArray &answer, const FloatArray &lcoords, const FEICellGeometry &cellgeo)
Evaluates local coordinates from given global ones.
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 double surfaceGiveTransformationJacobian(int isurf, const FloatArray &lcoords, const FEICellGeometry &cellgeo)
Evaluates the edge jacobian of transformation between local and global coordinates.
virtual void local2global(FloatArray &answer, const FloatArray &lcoords, const FEICellGeometry &cellgeo)
Evaluates 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.