48 double x = lcoords[0];
49 double y = lcoords[1];
50 double z = lcoords[2];
52 0.5 * ( ( 1. - x - y ) * ( 2. * ( 1. - x - y ) - 1. ) * ( 1. - z ) - ( 1. - x - y ) * ( 1. - z * z ) ),
53 0.5 * ( x * ( 2. * x - 1. ) * ( 1. - z ) - x * ( 1. - z * z ) ),
54 0.5 * ( y * ( 2. * y - 1. ) * ( 1. - z ) - y * ( 1. - z * z ) ),
55 0.5 * ( ( 1. - x - y ) * ( 2. * ( 1. - x - y ) - 1. ) * ( 1. + z ) - ( 1. - x - y ) * ( 1. - z * z ) ),
56 0.5 * ( x * ( 2. * x - 1. ) * ( 1. + z ) - x * ( 1. - z * z ) ),
57 0.5 * ( y * ( 2. * y - 1. ) * ( 1. + z ) - y * ( 1. - z * z ) ),
58 2. * ( 1. - x - y ) * x * ( 1. - z ),
59 2. * x * y * ( 1. - z ),
60 2. * y * ( 1. - x - y ) * ( 1. - z ),
61 2. * x * ( 1. - x - y ) * ( 1. + z ),
62 2. * x * y * ( 1. + z ),
63 2. * y * ( 1. - x - y ) * ( 1. + z ),
64 ( 1. - x - y ) * ( 1. - z * z ),
80 answer.
at(1) = 0.5 * ( ( 1. - x - y ) * ( 2. * ( 1. - x - y ) - 1. ) * ( 1. - z ) - ( 1. - x - y ) * ( 1. - z * z ) );
81 answer.
at(2) = 0.5 * ( x * ( 2. * x - 1. ) * ( 1. - z ) - x * ( 1. - z * z ) );
82 answer.
at(3) = 0.5 * ( y * ( 2. * y - 1. ) * ( 1. - z ) - y * ( 1. - z * z ) );
83 answer.
at(4) = 0.5 * ( ( 1. - x - y ) * ( 2. * ( 1. - x - y ) - 1. ) * ( 1. + z ) - ( 1. - x - y ) * ( 1. - z * z ) );
84 answer.
at(5) = 0.5 * ( x * ( 2. * x - 1. ) * ( 1. + z ) - x * ( 1. - z * z ) );
85 answer.
at(6) = 0.5 * ( y * ( 2. * y - 1. ) * ( 1. + z ) - y * ( 1. - z * z ) );
86 answer.
at(7) = 2. * ( 1. - x - y ) * x * ( 1. - z );
87 answer.
at(8) = 2. * x * y * ( 1. - z );
88 answer.
at(9) = 2. * y * ( 1. - x - y ) * ( 1. - z );
89 answer.
at(10) = 2. * x * ( 1. - x - y ) * ( 1. + z );
90 answer.
at(11) = 2. * x * y * ( 1. + z );
91 answer.
at(12) = 2. * y * ( 1. - x - y ) * ( 1. + z );
92 answer.
at(13) = ( 1. - x - y ) * ( 1. - z * z );
93 answer.
at(14) = x * ( 1. - z * z );
94 answer.
at(15) = y * ( 1. - z * z );
101 double x = lcoords[0];
102 double y = lcoords[1];
103 double z = lcoords[2];
106 1. / 2. - ( z - 1. ) * ( x + y - 1. ) - z * z / 2. - ( ( z - 1. ) * ( 2. * x + 2. * y - 1. ) ) / 2.,
107 1. / 2. - ( z - 1. ) * ( x + y - 1. ) - z * z / 2. - ( ( z - 1. ) * ( 2. * x + 2. * y - 1. ) ) / 2.,
108 -z * ( x + y - 1. ) - ( ( 2. * x + 2. * y - 1. ) * ( x + y - 1. ) ) / 2.,
109 z * z / 2. - x * ( z - 1. ) - ( ( 2. * x - 1. ) * ( z - 1. ) ) / 2. - 1 / 2.,
111 x * z - ( x * ( 2. * x - 1. ) ) / 2.,
113 z * z / 2. - y * ( z - 1. ) - ( ( 2. * y - 1. ) * ( z - 1. ) ) / 2. - 1. / 2.,
114 y * z - ( y * ( 2 * y - 1. ) ) / 2.,
115 ( ( z + 1. ) * ( 2. * x + 2. * y - 1. ) ) / 2. + ( z + 1. ) * ( x + y - 1. ) - z * z / 2. + 1. / 2.,
116 ( ( z + 1. ) * ( 2. * x + 2. * y - 1. ) ) / 2. + ( z + 1. ) * ( x + y - 1. ) - z * z / 2. + 1. / 2.,
117 ( ( 2. * x + 2. * y - 1. ) * ( x + y - 1. ) ) / 2. - z * ( x + y - 1. ),
118 ( ( 2. * x - 1. ) * ( z + 1. ) ) / 2. + x * ( z + 1. ) + z * z / 2. - 1. / 2., 0., ( x * ( 2. * x - 1. ) ) / 2. + x * z,
119 0., ( ( 2. * y - 1. ) * ( z + 1. ) ) / 2. + y * ( z + 1. ) + z * z / 2. - 1. / 2., ( y * ( 2. * y - 1. ) ) / 2. + y * z,
120 ( z - 1. ) * ( 2. * x + 2. * y - 2. ) + 2. * x * ( z - 1. ), 2. * x * ( z - 1. ), x * ( 2. * x + 2. * y - 2. ),
121 -2. * y * ( z - 1. ), -2. * x * ( z - 1. ), -2. * x * y,
122 2. * y * ( z - 1. ), 2. * ( z - 1. ) * ( x + y - 1. ) + 2. * y * ( z - 1. ), 2. * y * ( x + y - 1. ),
123 -2. * ( z + 1. ) * ( x + y - 1. ) - 2. * x * ( z + 1. ), -2. * x * ( z + 1. ), -2. * x * ( x + y - 1. ),
124 2. * y * ( z + 1. ), 2. * x * ( z + 1. ), 2. * x * y,
125 -2. * y * ( z + 1. ), -2. * ( z + 1. ) * ( x + y - 1. ) - 2. * y * ( z + 1. ), -2. * y * ( x + y - 1. ),
126 z * z - 1., z * z - 1., 2. * z * ( x + y - 1. ),
127 1. - z * z, 0., -2. * x * z,
128 0., 1. - z * z, -2. * y * z,
143 dN.
at(1, 1) = 1. / 2. - ( z - 1. ) * ( x + y - 1. ) - z * z / 2. - ( ( z - 1. ) * ( 2. * x + 2. * y - 1. ) ) / 2.;
144 dN.
at(2, 1) = z * z / 2. - x * ( z - 1. ) - ( ( 2. * x - 1. ) * ( z - 1. ) ) / 2. - 1 / 2.;
146 dN.
at(4, 1) = ( ( z + 1. ) * ( 2. * x + 2. * y - 1. ) ) / 2. + ( z + 1. ) * ( x + y - 1. ) - z * z / 2. + 1. / 2.;
147 dN.
at(5, 1) = ( ( 2. * x - 1. ) * ( z + 1. ) ) / 2. + x * ( z + 1. ) + z * z / 2. - 1. / 2.;
149 dN.
at(7, 1) = ( z - 1. ) * ( 2. * x + 2. * y - 2. ) + 2. * x * ( z - 1. );
150 dN.
at(8, 1) = -2. * y * ( z - 1. );
151 dN.
at(9, 1) = 2. * y * ( z - 1. );
152 dN.
at(10, 1) = -2. * ( z + 1. ) * ( x + y - 1. ) - 2. * x * ( z + 1. );
153 dN.
at(11, 1) = 2. * y * ( z + 1. );
154 dN.
at(12, 1) = -2. * y * ( z + 1. );
155 dN.
at(13, 1) = z * z - 1.;
156 dN.
at(14, 1) = 1. - z * z;
159 dN.
at(1, 2) = 1. / 2. - ( z - 1. ) * ( x + y - 1. ) - z * z / 2. - ( ( z - 1. ) * ( 2. * x + 2. * y - 1. ) ) / 2.;
161 dN.
at(3, 2) = z * z / 2. - y * ( z - 1. ) - ( ( 2. * y - 1. ) * ( z - 1. ) ) / 2. - 1. / 2.;
162 dN.
at(4, 2) = ( ( z + 1. ) * ( 2. * x + 2. * y - 1. ) ) / 2. + ( z + 1. ) * ( x + y - 1. ) - z * z / 2. + 1. / 2.;
164 dN.
at(6, 2) = ( ( 2. * y - 1. ) * ( z + 1. ) ) / 2. + y * ( z + 1. ) + z * z / 2. - 1. / 2.;
165 dN.
at(7, 2) = 2. * x * ( z - 1. );
166 dN.
at(8, 2) = -2. * x * ( z - 1. );
167 dN.
at(9, 2) = 2. * ( z - 1. ) * ( x + y - 1. ) + 2. * y * ( z - 1. );
168 dN.
at(10, 2) = -2. * x * ( z + 1. );
169 dN.
at(11, 2) = 2. * x * ( z + 1. );
170 dN.
at(12, 2) = -2. * ( z + 1. ) * ( x + y - 1. ) - 2. * y * ( z + 1. );
171 dN.
at(13, 2) = z * z - 1.;
173 dN.
at(15, 2) = 1. - z * z;
175 dN.
at(1, 3) = -z * ( x + y - 1. ) - ( ( 2. * x + 2. * y - 1. ) * ( x + y - 1. ) ) / 2.;
176 dN.
at(2, 3) = x * z - ( x * ( 2. * x - 1. ) ) / 2.;
177 dN.
at(3, 3) = y * z - ( y * ( 2 * y - 1. ) ) / 2.;
178 dN.
at(4, 3) = ( ( 2. * x + 2. * y - 1. ) * ( x + y - 1. ) ) / 2. - z * ( x + y - 1. );
179 dN.
at(5, 3) = ( x * ( 2. * x - 1. ) ) / 2. + x * z;
180 dN.
at(6, 3) = ( y * ( 2. * y - 1. ) ) / 2. + y * z;
181 dN.
at(7, 3) = x * ( 2. * x + 2. * y - 2. );
182 dN.
at(8, 3) = -2. * x * y;
183 dN.
at(9, 3) = 2. * y * ( x + y - 1. );
184 dN.
at(10, 3) = -2. * x * ( x + y - 1. );
185 dN.
at(11, 3) = 2. * x * y;
186 dN.
at(12, 3) = -2. * y * ( x + y - 1. );
187 dN.
at(13, 3) = 2. * z * ( x + y - 1. );
188 dN.
at(14, 3) = -2. * x * z;
189 dN.
at(15, 3) = -2. * y * z;
269 double convergence_limit, error = 0.0;
279 for (
int nite = 0; nite < 40; nite++ ) {
286 if ( error < convergence_limit ) {
297 if ( error > convergence_limit ) {
305 for (
int i = 1; i <= answer.
giveSize(); i++ ) {
427 answer.
at(1) = ( 2. * l1 - 1. ) * l1;
428 answer.
at(2) = ( 2. * l2 - 1. ) * l2;
429 answer.
at(3) = ( 2. * l3 - 1. ) * l3;
430 answer.
at(4) = 4. * l1 * l2;
431 answer.
at(5) = 4. * l2 * l3;
432 answer.
at(6) = 4. * l3 * l1;
434 double ksi = lcoords.
at(1);
435 double eta = lcoords.
at(2);
438 answer.
at(1) = ( 1. + ksi ) * ( 1. + eta ) * 0.25 * ( ksi + eta - 1. );
439 answer.
at(2) = ( 1. - ksi ) * ( 1. + eta ) * 0.25 * ( -ksi + eta - 1. );
440 answer.
at(3) = ( 1. - ksi ) * ( 1. - eta ) * 0.25 * ( -ksi - eta - 1. );
441 answer.
at(4) = ( 1. + ksi ) * ( 1. - eta ) * 0.25 * ( ksi - eta - 1. );
442 answer.
at(5) = 0.5 * ( 1. - ksi * ksi ) * ( 1. + eta );
443 answer.
at(6) = 0.5 * ( 1. - ksi ) * ( 1. - eta * eta );
444 answer.
at(7) = 0.5 * ( 1. - ksi * ksi ) * ( 1. - eta );
445 answer.
at(8) = 0.5 * ( 1. + ksi ) * ( 1. - eta * eta );
467FEI3dWedgeQuad :: computeLocalSurfaceMapping(
int isurf)
const
470 return {1, 2, 3, 7, 8, 9};
471 }
else if ( isurf == 2 ) {
472 return {4, 5, 6, 10, 11, 12};
473 }
else if ( isurf == 3 ) {
474 return {1, 2, 5, 4, 7, 14, 10, 13};
475 }
else if ( isurf == 4 ) {
476 return {2, 3, 6, 5, 8, 15, 11, 14};
477 }
else if ( isurf == 5 ) {
478 return {3, 1, 4, 6, 9, 13, 12, 15};
493 if ( snodes.giveSize() == 6 ) {
500 dNdksi(0) = 4.0 * l1 - 1.0;
502 dNdksi(2) = -1.0 * ( 4.0 * l3 - 1.0 );
503 dNdksi(3) = 4.0 * l2;
504 dNdksi(4) = -4.0 * l2;
505 dNdksi(5) = 4.0 * l3 - 4.0 * l1;
509 dNdeta(1) = 4.0 * l2 - 1.0;
510 dNdeta(2) = -1.0 * ( 4.0 * l3 - 1.0 );
511 dNdeta(3) = 4.0 * l1;
512 dNdeta(4) = 4.0 * l3 - 4.0 * l2;
513 dNdeta(5) = -4.0 * l1;
520 dNdksi.
at(1) = 0.25 * ( 1. + eta ) * ( 2.0 * ksi + eta );
521 dNdksi.
at(2) = -0.25 * ( 1. + eta ) * ( -2.0 * ksi + eta );
522 dNdksi.
at(3) = -0.25 * ( 1. - eta ) * ( -2.0 * ksi - eta );
523 dNdksi.
at(4) = 0.25 * ( 1. - eta ) * ( 2.0 * ksi - eta );
524 dNdksi.
at(5) = -ksi * ( 1. + eta );
525 dNdksi.
at(6) = -0.5 * ( 1. - eta * eta );
526 dNdksi.
at(7) = -ksi * ( 1. - eta );
527 dNdksi.
at(8) = 0.5 * ( 1. - eta * eta );
530 dNdeta.
at(1) = 0.25 * ( 1. + ksi ) * ( 2.0 * eta + ksi );
531 dNdeta.
at(2) = 0.25 * ( 1. - ksi ) * ( 2.0 * eta - ksi );
532 dNdeta.
at(3) = -0.25 * ( 1. - ksi ) * ( -2.0 * eta - ksi );
533 dNdeta.
at(4) = -0.25 * ( 1. + ksi ) * ( -2.0 * eta + ksi );
534 dNdeta.
at(5) = 0.5 * ( 1. - ksi * ksi );
535 dNdeta.
at(6) = -eta * ( 1. - ksi );
536 dNdeta.
at(7) = -0.5 * ( 1. - ksi * ksi );
537 dNdeta.
at(8) = -eta * ( 1. + ksi );
540 for (
int i = 1; i <= snodes.giveSize(); ++i ) {
574 auto iRule = std::make_unique<GaussIntegrationRule>(1,
nullptr);
575 if ( boundary <= 2 ) {
576 int points = iRule->getRequiredNumberOfIntegrationPoints(
_Triangle,
order + 2);
577 iRule->SetUpPointsOnTriangle(points, _Unknown);
580 int points = iRule->getRequiredNumberOfIntegrationPoints(
_Square,
order + 2);
581 iRule->SetUpPointsOnSquare(points, _Unknown);
583 return std::move(iRule);