35 #include "../sm/Elements/igaelements.h" 36 #include "../sm/CrossSections/structuralcrosssection.h" 139 #define COMPUTE_STRAIN 155 EASValsSetFillStyle(FILL_SOLID);
163 for ( j = 0; j < 4; j++ ) {
168 sign [ 0 ].
at(1) = 1;
169 sign [ 0 ].
at(2) = 1;
170 sign [ 1 ].
at(1) = -1;
171 sign [ 1 ].
at(2) = 1;
172 sign [ 2 ].
at(1) = -1;
173 sign [ 2 ].
at(2) = -1;
174 sign [ 3 ].
at(1) = 1;
175 sign [ 3 ].
at(2) = -1;
186 span = iRule->giveKnotSpan();
189 int i, j, k, nseg = 4;
190 double du = ( knotVector [ 0 ] [ span->
at(1) + 1 ] - knotVector [ 0 ] [ span->
at(1) ] ) / nseg;
191 double dv = ( knotVector [ 1 ] [ span->
at(2) + 1 ] - knotVector [ 1 ] [ span->
at(2) ] ) / nseg;
192 for ( i = 1; i <= nseg; i++ ) {
193 for ( j = 1; j <= nseg; j++ ) {
194 c [ 0 ].
at(1) = knotVector [ 0 ] [ span->
at(1) ] + du * ( i - 1 );
195 c [ 0 ].
at(2) = knotVector [ 1 ] [ span->
at(2) ] + dv * ( j - 1 );
196 c [ 1 ].
at(1) = knotVector [ 0 ] [ span->
at(1) ] + du * i;
197 c [ 1 ].
at(2) = knotVector [ 1 ] [ span->
at(2) ] + dv * ( j - 1 );
198 c [ 2 ].
at(1) = knotVector [ 0 ] [ span->
at(1) ] + du * i;
199 c [ 2 ].
at(2) = knotVector [ 1 ] [ span->
at(2) ] + dv * j;
200 c [ 3 ].
at(1) = knotVector [ 0 ] [ span->
at(1) ] + du * ( i - 1 );
201 c [ 3 ].
at(2) = knotVector [ 1 ] [ span->
at(2) ] + dv * j;
203 for ( k = 0; k < 4; k++ ) {
205 p [ k ].x = ( FPNum ) cg [ k ].at(1);
206 p [ k ].y = ( FPNum ) cg [ k ].at(2);
209 #ifdef QUARTER_PLATE_WITH_HOLE_SINGLE_PATCH 211 if ( c [ k ].at(1) > 0.99999 && c [ k ].
at(2) > 0.495 && c [ k ].
at(2) < 0.505 ) {
212 c [ k ].
at(1) += sign [ k ].
at(1) * du / 10.0;
213 c [ k ].
at(2) += sign [ k ].
at(2) * dv / 10.0;
214 c [ k ].
at(3) += sign [ k ].
at(3) * dw / 10.0;
219 GaussPoint gp(iRule.get(), 999, c [ k ], 1.0, _PlaneStress);
220 #ifdef COMPUTE_STRAIN 223 #ifdef COMPUTE_STRESS 228 s [ k ] = val.
at(indx);
235 if ( ( fabs(s [ 0 ]) > 1.e5 ) || ( fabs(s [ 1 ]) > 1.e5 ) || ( fabs(s [ 2 ]) > 1.e5 ) || ( fabs(s [ 3 ]) > 1.e5 ) ) {
241 go = CreateQuadWD3D(p, s [ 0 ], s [ 1 ], s [ 2 ], s [ 3 ]);
242 EGWithMaskChangeAttributes(WIDTH_MASK | FILL_MASK | COLOR_MASK | EDGE_COLOR_MASK | EDGE_FLAG_MASK | LAYER_MASK, go);
243 EGAttachObject(go, ( EObjectP )
this);
244 EMAddGraphicsToModel(ESIModel(), go);
266 EASValsSetFillStyle(FILL_SOLID);
267 EASValsSetEdgeFlag(
true);
275 for ( j = 0; j < 4; j++ ) {
280 sign [ 0 ].
at(1) = 1;
281 sign [ 0 ].
at(2) = 1;
282 sign [ 1 ].
at(1) = -1;
283 sign [ 1 ].
at(2) = 1;
284 sign [ 2 ].
at(1) = -1;
285 sign [ 2 ].
at(2) = -1;
286 sign [ 3 ].
at(1) = 1;
287 sign [ 3 ].
at(2) = -1;
300 span = iRule->giveKnotSpan();
303 int i, j, k, nseg = 8;
304 double du = ( knotVector [ 0 ] [ span->
at(1) + 1 ] - knotVector [ 0 ] [ span->
at(1) ] ) / nseg;
305 double dv = ( knotVector [ 1 ] [ span->
at(2) + 1 ] - knotVector [ 1 ] [ span->
at(2) ] ) / nseg;
306 for ( i = 1; i <= nseg; i++ ) {
307 for ( j = 1; j <= nseg; j++ ) {
308 c [ 0 ].
at(1) = knotVector [ 0 ] [ span->
at(1) ] + du * ( i - 1 );
309 c [ 0 ].
at(2) = knotVector [ 1 ] [ span->
at(2) ] + dv * ( j - 1 );
310 c [ 1 ].
at(1) = knotVector [ 0 ] [ span->
at(1) ] + du * i;
311 c [ 1 ].
at(2) = knotVector [ 1 ] [ span->
at(2) ] + dv * ( j - 1 );
312 c [ 2 ].
at(1) = knotVector [ 0 ] [ span->
at(1) ] + du * i;
313 c [ 2 ].
at(2) = knotVector [ 1 ] [ span->
at(2) ] + dv * j;
314 c [ 3 ].
at(1) = knotVector [ 0 ] [ span->
at(1) ] + du * ( i - 1 );
315 c [ 3 ].
at(2) = knotVector [ 1 ] [ span->
at(2) ] + dv * j;
317 for ( k = 0; k < 4; k++ ) {
319 p [ k ].x = ( FPNum ) cg [ k ].at(1);
320 p [ k ].y = ( FPNum ) cg [ k ].at(2);
324 if ( c [ k ].at(1) > 0.99999 && c [ k ].
at(2) > 0.495 && c [ k ].
at(2) < 0.505 ) {
325 c [ k ].
at(1) += sign [ k ].
at(1) * du / 10.0;
326 c [ k ].
at(2) += sign [ k ].
at(2) * dv / 10.0;
330 GaussPoint gp(iRule.get(), 999, c [ k ], 1.0, _PlaneStress);
331 #ifdef COMPUTE_STRAIN 334 #ifdef COMPUTE_STRESS 339 s [ k ] = val.
at(indx);
341 #ifdef QUARTER_PLATE_WITH_HOLE 343 if ( cg [ k ].at(1) <= 1.0 + 1.0e-10 && cg [ k ].at(2) <= 1.0e-10 ) {
344 fprintf(stderr,
"A: syy = %e\n", s [ k ]);
348 if ( cg [ k ].at(1) <= 1.0e-10 && cg [ k ].at(2) <= 1.0 + 1.0e-10 ) {
349 fprintf(stderr,
"B: sxx = %e\n", s [ k ]);
353 double x, y, r, phi, rate,
E, G, kap, ny;
369 s [ k ] = 0.5 * ( 2.0 + 3.0 * rate * rate * cos(4.0 * phi) - rate * ( 3 * cos(2.0 * phi) + 2.0 * cos(4.0 * phi) ) );
372 s [ k ] = 0.5 * ( -3.0 * rate * rate * cos(4.0 * phi) - rate * ( cos(2.0 * phi) - 2.0 * cos(4.0 * phi) ) );
375 s [ k ] = 0.5 * ( 3.0 * rate * rate * sin(4.0 * phi) - rate * ( sin(2.0 * phi) + 2.0 * sin(4.0 * phi) ) );
379 if ( cg [ k ].at(1) <= 1.0 + 1.0e-10 && cg [ k ].
at(2) <= 1.0e-10 ) {
380 fprintf(stderr,
"A: syy = %e\n", s [ k ]);
384 if ( cg [ k ].at(1) <= 1.0e-10 && cg [ k ].at(2) <= 1.0 + 1.0e-10 ) {
385 fprintf(stderr,
"B: sxx = %e\n", s [ k ]);
393 G = E / ( 2.0 * ( 1.0 + ny ) );
394 kap = ( 3.0 - ny ) / ( 1.0 + ny );
397 s [ k ] = ( r * ( kap + 1.0 ) * cos(phi) + 2.0 * rate * ( ( 1.0 + kap ) * cos(phi) + cos(3.0 * phi) ) - 2.0 * rate * rate * rate * cos(3.0 * phi) ) / ( 8.0 * G );
400 s [ k ] = ( r * ( kap - 3.0 ) * sin(phi) + 2.0 * rate * ( ( 1.0 - kap ) * sin(phi) + sin(3.0 * phi) ) - 2.0 * rate * rate * rate * sin(3.0 * phi) ) / ( 8.0 * G );
404 if ( cg [ k ].at(1) <= 1.0 + 1.0e-10 && cg [ k ].
at(2) <= 1.0e-10 ) {
405 fprintf(stderr,
"A: ux = %e\n", s [ k ]);
409 if ( cg [ k ].at(1) <= 1.0e-10 && cg [ k ].at(2) <= 1.0 + 1.0e-10 ) {
410 fprintf(stderr,
"B: uy = %e\n", s [ k ]);
415 if ( s [ k ] < mins ) {
418 if ( s [ k ] > maxs ) {
428 if ( ( fabs(s [ 0 ]) > 1.e5 ) || ( fabs(s [ 1 ]) > 1.e5 ) || ( fabs(s [ 2 ]) > 1.e5 ) || ( fabs(s [ 3 ]) > 1.e5 ) ) {
434 go = CreateQuadWD3D(p, s [ 0 ], s [ 1 ], s [ 2 ], s [ 3 ]);
435 EGWithMaskChangeAttributes(WIDTH_MASK | FILL_MASK | COLOR_MASK | EDGE_COLOR_MASK | EDGE_FLAG_MASK | LAYER_MASK, go);
436 EGAttachObject(go, ( EObjectP )
this);
437 EMAddGraphicsToModel(ESIModel(), go);
443 #ifdef QUARTER_PLATE_WITH_HOLE 444 fprintf(stderr,
"%d: %e %e %e %e\n", indx, mins, maxs, ( 10.0 * mins + maxs ) / 11.0, ( 10.0 * maxs + mins ) / 11.0);
468 EASValsSetFillStyle(FILL_SOLID);
469 EASValsSetEdgeFlag(
true);
477 for ( j = 0; j < 4; j++ ) {
482 sign [ 0 ].
at(1) = 1;
483 sign [ 0 ].
at(2) = 1;
484 sign [ 1 ].
at(1) = -1;
485 sign [ 1 ].
at(2) = 1;
486 sign [ 2 ].
at(1) = -1;
487 sign [ 2 ].
at(2) = -1;
488 sign [ 3 ].
at(1) = 1;
489 sign [ 3 ].
at(2) = -1;
500 span = iRule->giveKnotSpan();
503 int i, j, k, nseg = 4;
504 double du = ( knotVector [ 0 ] [ span->
at(1) + 1 ] - knotVector [ 0 ] [ span->
at(1) ] ) / nseg;
505 double dv = ( knotVector [ 1 ] [ span->
at(2) + 1 ] - knotVector [ 1 ] [ span->
at(2) ] ) / nseg;
506 for ( i = 1; i <= nseg; i++ ) {
507 for ( j = 1; j <= nseg; j++ ) {
508 c [ 0 ].
at(1) = knotVector [ 0 ] [ span->
at(1) ] + du * ( i - 1 );
509 c [ 0 ].
at(2) = knotVector [ 1 ] [ span->
at(2) ] + dv * ( j - 1 );
510 c [ 1 ].
at(1) = knotVector [ 0 ] [ span->
at(1) ] + du * i;
511 c [ 1 ].
at(2) = knotVector [ 1 ] [ span->
at(2) ] + dv * ( j - 1 );
512 c [ 2 ].
at(1) = knotVector [ 0 ] [ span->
at(1) ] + du * i;
513 c [ 2 ].
at(2) = knotVector [ 1 ] [ span->
at(2) ] + dv * j;
514 c [ 3 ].
at(1) = knotVector [ 0 ] [ span->
at(1) ] + du * ( i - 1 );
515 c [ 3 ].
at(2) = knotVector [ 1 ] [ span->
at(2) ] + dv * j;
517 for ( k = 0; k < 4; k++ ) {
519 p [ k ].x = ( FPNum ) cg [ k ].at(1);
520 p [ k ].y = ( FPNum ) cg [ k ].at(2);
523 #ifdef QUARTER_PLATE_WITH_HOLE_SINGLE_PATCH 525 if ( c [ k ].at(1) > 0.99999 && c [ k ].
at(2) > 0.495 && c [ k ].
at(2) < 0.505 ) {
526 c [ k ].
at(1) += sign [ k ].
at(1) * du / 10.0;
527 c [ k ].
at(2) += sign [ k ].
at(2) * dv / 10.0;
532 GaussPoint gp(iRule.get(), 999, c [ k ], 1.0, _PlaneStress);
533 #ifdef COMPUTE_STRAIN 536 #ifdef COMPUTE_STRESS 541 s [ k ] = val.
at(indx);
548 if ( ( fabs(s [ 0 ]) > 1.e5 ) || ( fabs(s [ 1 ]) > 1.e5 ) || ( fabs(s [ 2 ]) > 1.e5 ) || ( fabs(s [ 3 ]) > 1.e5 ) ) {
554 go = CreateQuadWD3D(p, s [ 0 ], s [ 1 ], s [ 2 ], s [ 3 ]);
555 EGWithMaskChangeAttributes(WIDTH_MASK | FILL_MASK | COLOR_MASK | EDGE_COLOR_MASK | EDGE_FLAG_MASK | LAYER_MASK, go);
556 EGAttachObject(go, ( EObjectP )
this);
557 EMAddGraphicsToModel(ESIModel(), go);
581 EASValsSetFillStyle(FILL_SOLID);
582 EASValsSetEdgeFlag(
true);
590 for ( j = 0; j < 8; j++ ) {
596 sign [ 0 ].
at(1) = 1;
597 sign [ 0 ].
at(2) = 1;
598 sign [ 0 ].
at(3) = 1;
599 sign [ 1 ].
at(1) = -1;
600 sign [ 1 ].
at(2) = 1;
601 sign [ 1 ].
at(3) = 1;
602 sign [ 2 ].
at(1) = -1;
603 sign [ 2 ].
at(2) = -1;
604 sign [ 2 ].
at(3) = 1;
605 sign [ 3 ].
at(1) = 1;
606 sign [ 3 ].
at(2) = -1;
607 sign [ 3 ].
at(3) = 1;
608 sign [ 4 ].
at(1) = 1;
609 sign [ 4 ].
at(2) = 1;
610 sign [ 4 ].
at(3) = -1;
611 sign [ 5 ].
at(1) = -1;
612 sign [ 5 ].
at(2) = 1;
613 sign [ 5 ].
at(3) = -1;
614 sign [ 6 ].
at(1) = -1;
615 sign [ 6 ].
at(2) = -1;
616 sign [ 6 ].
at(3) = -1;
617 sign [ 7 ].
at(1) = 1;
618 sign [ 7 ].
at(2) = -1;
619 sign [ 7 ].
at(3) = -1;
643 span = iRule->giveKnotSpan();
646 int i, j, k, m, nseg = 8;
647 double du = ( knotVector [ 0 ] [ span->
at(1) + 1 ] - knotVector [ 0 ] [ span->
at(1) ] ) / nseg;
648 double dv = ( knotVector [ 1 ] [ span->
at(2) + 1 ] - knotVector [ 1 ] [ span->
at(2) ] ) / nseg;
649 double dw = ( knotVector [ 2 ] [ span->
at(3) + 1 ] - knotVector [ 2 ] [ span->
at(3) ] ) / nseg;
651 #ifdef DRAW_VISIBLE_CONTOUR 654 int kk, ii, nd [ 6 ] [ 4 ] = { { 0, 1, 2, 3 }, { 4, 5, 6, 7 }, { 0, 1, 5, 4 }, { 1, 2, 6, 5 }, { 2, 3, 7, 6 }, { 3, 0, 4, 7 } };
657 for ( i = 1; i <= nseg; i++ ) {
658 for ( j = 1; j <= nseg; j++ ) {
659 for ( m = 1; m <= nseg; m++ ) {
660 c [ 0 ].
at(1) = knotVector [ 0 ] [ span->
at(1) ] + du * ( i - 1 );
661 c [ 0 ].
at(2) = knotVector [ 1 ] [ span->
at(2) ] + dv * ( j - 1 );
662 c [ 0 ].
at(3) = knotVector [ 2 ] [ span->
at(3) ] + dw * ( m - 1 );
663 c [ 1 ].
at(1) = knotVector [ 0 ] [ span->
at(1) ] + du * i;
664 c [ 1 ].
at(2) = knotVector [ 1 ] [ span->
at(2) ] + dv * ( j - 1 );
665 c [ 1 ].
at(3) = knotVector [ 2 ] [ span->
at(3) ] + dw * ( m - 1 );
666 c [ 2 ].
at(1) = knotVector [ 0 ] [ span->
at(1) ] + du * i;
667 c [ 2 ].
at(2) = knotVector [ 1 ] [ span->
at(2) ] + dv * j;
668 c [ 2 ].
at(3) = knotVector [ 2 ] [ span->
at(3) ] + dw * ( m - 1 );
669 c [ 3 ].
at(1) = knotVector [ 0 ] [ span->
at(1) ] + du * ( i - 1 );
670 c [ 3 ].
at(2) = knotVector [ 1 ] [ span->
at(2) ] + dv * j;
671 c [ 3 ].
at(3) = knotVector [ 2 ] [ span->
at(3) ] + dw * ( m - 1 );
672 c [ 4 ].
at(1) = knotVector [ 0 ] [ span->
at(1) ] + du * ( i - 1 );
673 c [ 4 ].
at(2) = knotVector [ 1 ] [ span->
at(2) ] + dv * ( j - 1 );
674 c [ 4 ].
at(3) = knotVector [ 2 ] [ span->
at(3) ] + dw * m;
675 c [ 5 ].
at(1) = knotVector [ 0 ] [ span->
at(1) ] + du * i;
676 c [ 5 ].
at(2) = knotVector [ 1 ] [ span->
at(2) ] + dv * ( j - 1 );
677 c [ 5 ].
at(3) = knotVector [ 2 ] [ span->
at(3) ] + dw * m;
678 c [ 6 ].
at(1) = knotVector [ 0 ] [ span->
at(1) ] + du * i;
679 c [ 6 ].
at(2) = knotVector [ 1 ] [ span->
at(2) ] + dv * j;
680 c [ 6 ].
at(3) = knotVector [ 2 ] [ span->
at(3) ] + dw * m;
681 c [ 7 ].
at(1) = knotVector [ 0 ] [ span->
at(1) ] + du * ( i - 1 );
682 c [ 7 ].
at(2) = knotVector [ 1 ] [ span->
at(2) ] + dv * j;
683 c [ 7 ].
at(3) = knotVector [ 2 ] [ span->
at(3) ] + dw * m;
685 for ( k = 0; k < 8; k++ ) {
687 p [ k ].x = ( FPNum ) cg [ k ].at(1);
688 p [ k ].y = ( FPNum ) cg [ k ].at(2);
689 p [ k ].z = ( FPNum ) cg [ k ].at(3);
692 #ifdef DRAW_VISIBLE_CONTOUR 693 #ifdef SPHERE_WITH_HOLE 697 for ( kk = 0; kk < 6; kk++ ) {
698 double xx = 0.0, yy = 0.0, zz = 0.0, rr, r;
699 for ( ii = 0; ii < 4; ii++ ) {
700 xx += ( pp [ ii ].x = p [ nd [ kk ] [ ii ] ].x );
701 yy += ( pp [ ii ].y = p [ nd [ kk ] [ ii ] ].y );
702 zz += ( pp [ ii ].z = p [ nd [ kk ] [ ii ] ].z );
703 ss [ ii ] = s [ nd [ kk ] [ ii ] ];
708 rr = xx * xx + yy * yy;
711 if ( zz < 2.0001 || yy < 0.0001 || rr < 1.0 || r < 25.0 || r > 5.99 * 5.99 ) {
721 for ( k = 0; k < 8; k++ ) {
723 GaussPoint gp(iRule.get(), 999, c [ k ], 1.0, _3dMat);
724 #ifdef COMPUTE_STRAIN 727 #ifdef COMPUTE_STRESS 732 s [ k ] = val.
at(indx);
737 vonMisses = sqrt( ( ( val.
at(1) - val.
at(2) ) * ( val.
at(1) - val.
at(2) ) + ( val.
at(2) - val.
at(3) ) * ( val.
at(2) - val.
at(3) ) + ( val.
at(1) - val.
at(3) ) * ( val.
at(1) - val.
at(3) ) + 6.0 * ( val.
at(4) * val.
at(4) + val.
at(5) * val.
at(5) + val.
at(6) * val.
at(6) ) ) / 2.0 );
743 double x, y, z, r, r2, rr;
744 FloatMatrix sigma(3, 3), T(3, 3), product(3, 3), result(3, 3);
746 sigma.at(1, 1) = val.
at(1);
747 sigma.at(1, 2) = val.
at(6);
748 sigma.at(1, 3) = val.
at(5);
749 sigma.at(2, 1) = val.
at(6);
750 sigma.at(2, 2) = val.
at(2);
751 sigma.at(2, 3) = val.
at(4);
752 sigma.at(3, 1) = val.
at(5);
753 sigma.at(3, 2) = val.
at(4);
754 sigma.at(3, 3) = val.
at(3);
759 r2 = x * x + y * y + z * z;
761 rr = sqrt(x * x + y * y);
763 T.at(1, 1) = -z * z * y / rr / r2 - y * rr / r2;
764 T.at(1, 2) = z * z * x / rr / r2 + x * rr / r2;
766 T.at(2, 1) = -z * x / rr / r;
767 T.at(2, 2) = -z * y / rr / r;
773 product.beProductOf(T, sigma);
776 val.
at(1) = result.
at(1, 1);
777 val.
at(6) = result.
at(1, 2);
778 val.
at(5) = result.
at(1, 3);
779 val.
at(6) = result.
at(2, 1);
780 val.
at(2) = result.
at(2, 2);
781 val.
at(4) = result.
at(2, 3);
782 val.
at(5) = result.
at(3, 1);
783 val.
at(4) = result.
at(3, 2);
784 val.
at(3) = result.
at(3, 3);
786 s [ k ] = val.
at(indx);
789 #ifdef SPHERE_WITH_HOLE 790 if ( s [ k ] < mins ) {
793 if ( s [ k ] > maxs ) {
807 if ( ( fabs(s [ 0 ]) > 1.e5 ) || ( fabs(s [ 1 ]) > 1.e5 ) || ( fabs(s [ 2 ]) > 1.e5 ) || ( fabs(s [ 3 ]) > 1.e5 ) ) {
811 if ( ( fabs(s [ 4 ]) > 1.e5 ) || ( fabs(s [ 5 ]) > 1.e5 ) || ( fabs(s [ 6 ]) > 1.e5 ) || ( fabs(s [ 7 ]) > 1.e5 ) ) {
817 #ifdef DRAW_VISIBLE_CONTOUR 818 #ifdef SPHERE_WITH_HOLE 819 for ( kk = 0; kk < 6; kk++ ) {
820 double xx = 0.0, yy = 0.0, zz = 0.0, rr, r;
821 for ( ii = 0; ii < 4; ii++ ) {
822 xx += ( pp [ ii ].x = p [ nd [ kk ] [ ii ] ].x );
823 yy += ( pp [ ii ].y = p [ nd [ kk ] [ ii ] ].y );
824 zz += ( pp [ ii ].z = p [ nd [ kk ] [ ii ] ].z );
825 ss [ ii ] = s [ nd [ kk ] [ ii ] ];
830 rr = xx * xx + yy * yy;
833 if ( zz < 2.0001 || yy < 0.0001 || rr < 1.0 || r < 25.0 || r > 5.99 * 5.99 ) {
834 go = CreateQuadWD3D(pp, ss [ 0 ], ss [ 1 ], ss [ 2 ], ss [ 3 ]);
835 EGWithMaskChangeAttributes(LAYER_MASK | EDGE_COLOR_MASK | EDGE_FLAG_MASK, go);
836 EMAddGraphicsToModel(ESIModel(), go);
841 go = CreateHexahedronWD(p, s);
842 EGWithMaskChangeAttributes(WIDTH_MASK | FILL_MASK | COLOR_MASK | EDGE_COLOR_MASK | EDGE_FLAG_MASK | LAYER_MASK, go);
843 EGAttachObject(go, ( EObjectP )
this);
844 EMAddGraphicsToModel(ESIModel(), go);
852 #ifdef SPHERE_WITH_HOLE 853 fprintf(stderr,
"%d %e %e %e %e\n", indx, mins, maxs, ( 10.0 * mins + maxs ) / 11.0, ( 10.0 * maxs + mins ) / 11.0);
BSplineInterpolation interpolation
int testElementGraphicActivity(Element *)
Test if particular element passed fulfills various filtering criteria for its graphics output...
Interpolation for B-splines.
virtual FEInterpolation * giveInterpolation() const
Interpolation class for NURBS.
virtual int checkConsistency()
Performs consistency check.
IGATSplineElement setups integration rules differently from IGAElement.
General purpose 3d structural element evaluator.
virtual int giveNumberOfControlPoints(int dim)
virtual FEInterpolation * giveInterpolation() const
double & at(int i)
Coefficient access function.
virtual void drawScalar(oofegGraphicContext &gc, TimeStep *tStep)
oofem::oofegGraphicContext gc[OOFEG_LAST_LAYER]
virtual void drawScalar(oofegGraphicContext &gc, TimeStep *tStep)
NURBSSpace3dElement(int n, Domain *aDomain)
void computeStrainVector(FloatArray &answer, GaussPoint *gp, TimeStep *tStep, FloatArray &u)
Optimized version, allowing to pass element displacements as parameter.
Class implementing an array of integers.
int & at(int i)
Coefficient access function.
virtual int giveNumberOfDofManagers() const
virtual FEInterpolation * giveInterpolation() const
Class representing a general abstraction for finite element interpolation class.
InternalStateType giveIntVarType()
Implements base IGAElement, supposed to be a parent class of all elements with B-spline or NURBS base...
virtual IRResultType initializeFrom(InputRecord *ir)
Initializes receiver according to object description stored in input record.
NURBSPlaneStressElement(int n, Domain *aDomain)
virtual IRResultType initializeFrom(InputRecord *ir)
Initializes receiver according to object description stored in input record.
virtual void computeStressVector(FloatArray &answer, const FloatArray &strain, GaussPoint *gp, TimeStep *tStep)
Computes the stress vector.
double at(int i, int j) const
Coefficient access function.
void resize(int n)
Checks size of receiver towards requested bounds.
TSplinePlaneStressElement(int n, Domain *aDomain)
virtual int checkConsistency()
Performs consistency check.
virtual void drawScalar(oofegGraphicContext &gc, TimeStep *tStep)
Class representing vector of real numbers.
Implementation of matrix containing floating point numbers.
IRResultType
Type defining the return values of InputRecord reading operations.
IRResultType initializeFrom(InputRecord *ir)
Initializes receiver according to object description stored in input record.
TSplineInterpolation interpolation
void computeVectorOf(ValueModeType u, TimeStep *tStep, FloatArray &answer)
virtual const double *const * giveKnotVector()
Returns the subdivision of patch parametric space.
BsplinePlaneStressElement(int n, Domain *aDomain)
virtual int checkConsistency()
Performs consistency check.
virtual void drawScalar(oofegGraphicContext &gc, TimeStep *tStep)
std::vector< std::unique_ptr< IntegrationRule > > integrationRulesArray
List of integration rules of receiver (each integration rule contains associated integration points a...
General purpose Plane stress structural element evaluator.
void beProductTOf(const FloatMatrix &a, const FloatMatrix &b)
Assigns to the receiver product of .
NURBSInterpolation interpolation
Geometry wrapper for IGA elements.
virtual IRResultType initializeFrom(InputRecord *ir)
Initializes receiver according to object description stored in input record.
the oofem namespace is to define a context or scope in which all oofem names are defined.
#define OOFEG_VARPLOT_PATTERN_LAYER
Class representing integration point in finite element program.
#define OOFEM_WARNING(...)
Class representing solution step.
virtual void local2global(FloatArray &answer, const FloatArray &lcoords, const FEICellGeometry &cellgeo)=0
Evaluates global coordinates from given local ones.
void resize(int s)
Resizes receiver towards requested size.