35 #include "../sm/Elements/Shells/mitc4.h" 36 #include "../sm/Materials/structuralms.h" 37 #include "../sm/Materials/structuralmaterial.h" 38 #include "../sm/CrossSections/structuralcrosssection.h" 44 #include "../sm/CrossSections/variablecrosssection.h" 179 for (
int i = 1; i <= 4; i++ ) {
185 for (
int j = 1; j <= neighbours.
giveSize(); j++ ) {
195 directors.
at(1, i) = nodeDir.
at(1) / count;
196 directors.
at(2, i) = nodeDir.
at(2) / count;
197 directors.
at(3, i) = nodeDir.
at(3) / count;
268 double a1, a2, a3, a4;
278 FloatArray V11(3), V12(3), V13(3), V14(3), V21(3), V22(3), V23(3), V24(3);
279 V11.beVectorProductOf(e2, V1);
281 V12.beVectorProductOf(e2, V2);
283 V13.beVectorProductOf(e2, V3);
285 V14.beVectorProductOf(e2, V4);
288 V21.beVectorProductOf(V1, V11);
289 V22.beVectorProductOf(V2, V12);
290 V23.beVectorProductOf(V3, V13);
296 answer.
at(1, 1) = answer.
at(2, 2) = answer.
at(3, 3) = h.
at(1);
297 answer.
at(1, 4) = -iLocCoord.
at(3) / 2.0 *a1 *h.
at(1) * V21.at(1);
298 answer.
at(1, 5) = iLocCoord.
at(3) / 2.0 *a1 *h.
at(1) * V11.at(1);
299 answer.
at(2, 4) = -iLocCoord.
at(3) / 2.0 *a1 *h.
at(1) * V21.at(2);
300 answer.
at(2, 5) = iLocCoord.
at(3) / 2.0 *a1 *h.
at(1) * V11.at(2);
301 answer.
at(3, 4) = -iLocCoord.
at(3) / 2.0 *a1 *h.
at(1) * V21.at(3);
302 answer.
at(3, 5) = iLocCoord.
at(3) / 2.0 *a1 *h.
at(1) * V11.at(3);
304 answer.
at(1, 7) = answer.
at(2, 8) = answer.
at(3, 9) = h.
at(2);
305 answer.
at(1, 10) = -iLocCoord.
at(3) / 2.0 *a2 *h.
at(2) * V22.at(1);
306 answer.
at(1, 11) = iLocCoord.
at(3) / 2.0 *a2 *h.
at(2) * V12.at(1);
307 answer.
at(2, 10) = -iLocCoord.
at(3) / 2.0 *a2 *h.
at(2) * V22.at(2);
308 answer.
at(2, 11) = iLocCoord.
at(3) / 2.0 *a2 *h.
at(2) * V12.at(2);
309 answer.
at(3, 10) = -iLocCoord.
at(3) / 2.0 *a2 *h.
at(2) * V22.at(3);
310 answer.
at(3, 11) = iLocCoord.
at(3) / 2.0 *a2 *h.
at(2) * V12.at(3);
312 answer.
at(1, 13) = answer.
at(2, 14) = answer.
at(3, 15) = h.
at(3);
313 answer.
at(1, 16) = -iLocCoord.
at(3) / 2.0 *a3 *h.
at(3) * V23.at(1);
314 answer.
at(1, 17) = iLocCoord.
at(3) / 2.0 *a3 *h.
at(3) * V13.at(1);
315 answer.
at(2, 16) = -iLocCoord.
at(3) / 2.0 *a3 *h.
at(3) * V23.at(2);
316 answer.
at(2, 17) = iLocCoord.
at(3) / 2.0 *a3 *h.
at(3) * V13.at(2);
317 answer.
at(3, 16) = -iLocCoord.
at(3) / 2.0 *a3 *h.
at(3) * V23.at(3);
318 answer.
at(3, 17) = iLocCoord.
at(3) / 2.0 *a3 *h.
at(3) * V13.at(3);
320 answer.
at(1, 19) = answer.
at(2, 20) = answer.
at(3, 21) = h.
at(4);
321 answer.
at(1, 23) = -iLocCoord.
at(3) / 2.0 *a4 *h.
at(4) * V24.
at(1);
322 answer.
at(1, 24) = iLocCoord.
at(3) / 2.0 *a4 *h.
at(4) * V14.at(1);
323 answer.
at(2, 23) = -iLocCoord.
at(3) / 2.0 *a4 *h.
at(4) * V24.
at(2);
324 answer.
at(2, 24) = iLocCoord.
at(3) / 2.0 *a4 *h.
at(4) * V14.at(2);
325 answer.
at(3, 23) = -iLocCoord.
at(3) / 2.0 *a4 *h.
at(4) * V24.
at(3);
326 answer.
at(3, 24) = iLocCoord.
at(3) / 2.0 *a4 *h.
at(4) * V14.at(3);
341 double &y1,
double &y2,
double &y3,
double &y4,
342 double &z1,
double &z2,
double &z3,
double &z4)
376 OOFEM_ERROR(
"cannot transform coordinates - size mismatch");
407 D_u, D_v, D_w, R_u, R_v, R_w
428 return detJ * weight;
440 jacobianMatrix.
resize(3, 3);
442 double x1, x2, x3, x4, y1, y2, y3, y4, z1, z2, z3, z4;
443 this->
giveNodeCoordinates(x1, x2, x3, x4, y1, y2, y3, y4, z1, z2, z3, z4);
445 double r3 = lcoords.
at(3);
452 double a1, a2, a3, a4;
461 hk1.
at(1) = dn.
at(1, 1);
462 hk1.
at(2) = dn.
at(2, 1);
463 hk1.
at(3) = dn.
at(3, 1);
464 hk1.
at(4) = dn.
at(4, 1);
468 hk2.
at(1) = dn.
at(1, 2);
469 hk2.
at(2) = dn.
at(2, 2);
470 hk2.
at(3) = dn.
at(3, 2);
471 hk2.
at(4) = dn.
at(4, 2);
473 double h1, h2, h3, h4;
481 jacobianMatrix.
at(1, 1) = hk1.
at(1) * x1 + hk1.
at(2) * x2 + hk1.
at(3) * x3 + hk1.
at(4) * x4 + r3 / 2. * ( a1 * hk1.
at(1) * V1.
at(1) + a2 * hk1.
at(2) * V2.
at(1) + a3 * hk1.
at(3) * V3.
at(1) + a4 * hk1.
at(4) * V4.
at(1) );
482 jacobianMatrix.
at(1, 2) = hk1.
at(1) * y1 + hk1.
at(2) * y2 + hk1.
at(3) * y3 + hk1.
at(4) * y4 + r3 / 2. * ( a1 * hk1.
at(1) * V1.
at(2) + a2 * hk1.
at(2) * V2.
at(2) + a3 * hk1.
at(3) * V3.
at(2) + a4 * hk1.
at(4) * V4.
at(2) );
483 jacobianMatrix.
at(1, 3) = r3 / 2. * ( a1 * hk1.
at(1) * V1.
at(3) + a2 * hk1.
at(2) * V2.
at(3) + a3 * hk1.
at(3) * V3.
at(3) + a4 * hk1.
at(4) * V4.
at(3) );
484 jacobianMatrix.
at(2, 1) = hk2.
at(1) * x1 + hk2.
at(2) * x2 + hk2.
at(3) * x3 + hk2.
at(4) * x4 + r3 / 2. * ( a1 * hk2.
at(1) * V1.
at(1) + a2 * hk2.
at(2) * V2.
at(1) + a3 * hk2.
at(3) * V3.
at(1) + a4 * hk2.
at(4) * V4.
at(1) );
485 jacobianMatrix.
at(2, 2) = hk2.
at(1) * y1 + hk2.
at(2) * y2 + hk2.
at(3) * y3 + hk2.
at(4) * y4 + r3 / 2. * ( a1 * hk2.
at(1) * V1.
at(2) + a2 * hk2.
at(2) * V2.
at(2) + a3 * hk2.
at(3) * V3.
at(2) + a4 * hk2.
at(4) * V4.
at(2) );
486 jacobianMatrix.
at(2, 3) = r3 / 2. * ( a1 * hk2.
at(1) * V1.
at(3) + a2 * hk2.
at(2) * V2.
at(3) + a3 * hk2.
at(3) * V3.
at(3) + a4 * hk2.
at(4) * V4.
at(3) );
487 jacobianMatrix.
at(3, 1) = 1. / 2. * ( a1 * h1 * V1.
at(1) + a2 * h2 * V2.
at(1) + a3 * h3 * V3.
at(1) + a4 * h4 * V4.
at(1) );
488 jacobianMatrix.
at(3, 2) = 1. / 2. * ( a1 * h1 * V1.
at(2) + a2 * h2 * V2.
at(2) + a3 * h3 * V3.
at(2) + a4 * h4 * V4.
at(2) );
489 jacobianMatrix.
at(3, 3) = 1. / 2. * ( a1 * h1 * V1.
at(3) + a2 * h2 * V2.
at(3) + a3 * h3 * V3.
at(3) + a4 * h4 * V4.
at(3) );
499 if ( drillType == 1 ) {
506 while ( answer.
at(j, j) == 0 ) {
511 for (
int i = j; i <= 24; i++ ) {
517 if ( relDrillCoeff == 0.0 ) {
518 relDrillCoeff = 0.001;
523 drillStiffness.
resize(4, 4);
524 drillStiffness.
zero();
525 for (
int i = 1; i <= 4; i++ ) {
545 answer.
assemble(drillStiffness, drillDofs);
557 if ( drillType == 1 ) {
584 drillStiffness.
resize(4, 4);
585 drillStiffness.
zero();
586 for (
int i = 1; i <= 4; i++ ) {
590 drillMoment.
beProductOf(drillStiffness, drillUnknowns);
592 answer.
assemble(drillMoment, drillDofs);
608 double x1, x2, x3, x4, y1, y2, y3, y4, z1, z2, z3, z4;
609 this->
giveNodeCoordinates(x1, x2, x3, x4, y1, y2, y3, y4, z1, z2, z3, z4);
626 double a1, a2, a3, a4;
641 double sb = 2 * inv.
at(1, 1) * inv.
at(3, 3);
642 double sa = 2 * inv.
at(1, 2) * inv.
at(3, 3);
643 double cb = 2 * inv.
at(2, 1) * inv.
at(3, 3);
644 double ca = 2 * inv.
at(2, 2) * inv.
at(3, 3);
650 FloatArray V11(3), V12(3), V13(3), V14(3), V21(3), V22(3), V23(3), V24(3);
651 V11.beVectorProductOf(e2, V1);
653 V12.beVectorProductOf(e2, V2);
655 V13.beVectorProductOf(e2, V3);
657 V14.beVectorProductOf(e2, V4);
660 V21.beVectorProductOf(V1, V11);
661 V22.beVectorProductOf(V2, V12);
662 V23.beVectorProductOf(V3, V13);
667 answer.
at(4, 1) = 1. / 32. * ( ( a1 * V1.
at(1) + a2 * V2.
at(1) ) * ( cb * ( 1. + r2 ) ) + ( a1 * V1.
at(1) + a4 * V4.
at(1) ) * ( ca * ( 1. + r1 ) ) );
668 answer.
at(4, 2) = 1. / 32. * ( ( a1 * V1.
at(2) + a2 * V2.
at(2) ) * ( cb * ( 1. + r2 ) ) + ( a1 * V1.
at(2) + a4 * V4.
at(2) ) * ( ca * ( 1. + r1 ) ) );
669 answer.
at(4, 3) = 1. / 32. * ( ( a1 * V1.
at(3) + a2 * V2.
at(3) ) * ( cb * ( 1. + r2 ) ) + ( a1 * V1.
at(3) + a4 * V4.
at(3) ) * ( ca * ( 1. + r1 ) ) );
670 answer.
at(4, 4) = -a1 / 32. * ( ( V21.dotProduct({ x1 - x2, y1 - y2, z1 - z2 }) * ( cb * ( 1. + r2 ) ) ) + ( V21.dotProduct({ x1 - x4, y1 - y4, z1 - z4 }) * ( ca * ( 1. + r1 ) ) ) );
671 answer.
at(4, 5) = a1 / 32. * ( ( V11.dotProduct({ x1 - x2, y1 - y2, z1 - z2 }) * ( cb * ( 1. + r2 ) ) ) + ( V11.dotProduct({ x1 - x4, y1 - y4, z1 - z4 }) * ( ca * ( 1. + r1 ) ) ) );
673 answer.
at(4, 7) = 1. / 32. * ( -( a1 * V1.
at(1) + a2 * V2.
at(1) ) * ( cb * ( 1. + r2 ) ) + ( a2 * V2.
at(1) + a3 * V3.
at(1) ) * ( ca * ( 1. - r1 ) ) );
674 answer.
at(4, 8) = 1. / 32. * ( -( a1 * V1.
at(2) + a2 * V2.
at(2) ) * ( cb * ( 1. + r2 ) ) + ( a2 * V2.
at(2) + a3 * V3.
at(2) ) * ( ca * ( 1. - r1 ) ) );
675 answer.
at(4, 9) = 1. / 32. * ( -( a1 * V1.
at(3) + a2 * V2.
at(3) ) * ( cb * ( 1. + r2 ) ) + ( a2 * V2.
at(3) + a3 * V3.
at(3) ) * ( ca * ( 1. - r1 ) ) );
676 answer.
at(4, 10) = -a1 / 32. * ( ( V21.dotProduct({ x1 - x2, y1 - y2, z1 - z2 }) * ( cb * ( 1. + r2 ) ) ) + ( V21.dotProduct({ x2 - x3, y2 - y3, z2 - z3 }) * ( ca * ( 1. - r1 ) ) ) );
677 answer.
at(4, 11) = a1 / 32. * ( ( V11.dotProduct({ x1 - x2, y1 - y2, z1 - z2 }) * ( cb * ( 1. + r2 ) ) ) + ( V11.dotProduct({ x2 - x3, y2 - y3, z2 - z3 }) * ( ca * ( 1. - r1 ) ) ) );
679 answer.
at(4, 13) = 1. / 32. * ( -( a3 * V3.
at(1) + a4 * V4.
at(1) ) * ( cb * ( 1. - r2 ) ) - ( a2 * V2.
at(1) + a3 * V3.
at(1) ) * ( ca * ( 1. - r1 ) ) );
680 answer.
at(4, 14) = 1. / 32. * ( -( a3 * V3.
at(2) + a4 * V4.
at(2) ) * ( cb * ( 1. - r2 ) ) - ( a2 * V2.
at(2) + a3 * V3.
at(2) ) * ( ca * ( 1. - r1 ) ) );
681 answer.
at(4, 15) = 1. / 32. * ( -( a3 * V3.
at(3) + a4 * V4.
at(3) ) * ( cb * ( 1. - r2 ) ) - ( a2 * V2.
at(3) + a3 * V3.
at(3) ) * ( ca * ( 1. - r1 ) ) );
682 answer.
at(4, 16) = -a1 / 32. * ( ( V21.dotProduct({ x4 - x3, y4 - y3, z4 - z3 }) * ( cb * ( 1. - r2 ) ) ) + ( V21.dotProduct({ x2 - x3, y2 - y3, z2 - z3 }) * ( ca * ( 1. - r1 ) ) ) );
683 answer.
at(4, 17) = a1 / 32. * ( ( V11.dotProduct({ x4 - x3, y4 - y3, z4 - z3 }) * ( cb * ( 1. - r2 ) ) ) + ( V11.dotProduct({ x2 - x3, y2 - y3, z2 - z3 }) * ( ca * ( 1. - r1 ) ) ) );
685 answer.
at(4, 19) = 1. / 32. * ( ( a3 * V3.
at(1) + a4 * V4.
at(1) ) * ( cb * ( 1. - r2 ) ) - ( a1 * V1.
at(1) + a4 * V4.
at(1) ) * ( ca * ( 1. + r1 ) ) );
686 answer.
at(4, 20) = 1. / 32. * ( ( a3 * V3.
at(2) + a4 * V4.
at(2) ) * ( cb * ( 1. - r2 ) ) - ( a1 * V1.
at(2) + a4 * V4.
at(2) ) * ( ca * ( 1. + r1 ) ) );
687 answer.
at(4, 21) = 1. / 32. * ( ( a3 * V3.
at(3) + a4 * V4.
at(3) ) * ( cb * ( 1. - r2 ) ) - ( a1 * V1.
at(3) + a4 * V4.
at(3) ) * ( ca * ( 1. + r1 ) ) );
688 answer.
at(4, 22) = -a1 / 32. * ( ( V21.dotProduct({ x4 - x3, y4 - y3, z4 - z3 }) * ( cb * ( 1. - r2 ) ) ) + ( V21.dotProduct({ x1 - x4, y1 - y4, z1 - z4 }) * ( ca * ( 1. + r1 ) ) ) );
689 answer.
at(4, 23) = a1 / 32. * ( ( V11.dotProduct({ x4 - x3, y4 - y3, z4 - z3 }) * ( cb * ( 1. - r2 ) ) ) + ( V11.dotProduct({ x1 - x4, y1 - y4, z1 - z4 }) * ( ca * ( 1. + r1 ) ) ) );
691 answer.
at(5, 1) = 1. / 32. * ( ( a1 * V1.
at(1) + a2 * V2.
at(1) ) * ( sb * ( 1. + r2 ) ) + ( a1 * V1.
at(1) + a4 * V4.
at(1) ) * ( sa * ( 1. + r1 ) ) );
692 answer.
at(5, 2) = 1. / 32. * ( ( a1 * V1.
at(2) + a2 * V2.
at(2) ) * ( sb * ( 1. + r2 ) ) + ( a1 * V1.
at(2) + a4 * V4.
at(2) ) * ( sa * ( 1. + r1 ) ) );
693 answer.
at(5, 3) = 1. / 32. * ( ( a1 * V1.
at(3) + a2 * V2.
at(3) ) * ( sb * ( 1. + r2 ) ) + ( a1 * V1.
at(3) + a4 * V4.
at(3) ) * ( sa * ( 1. + r1 ) ) );
694 answer.
at(5, 4) = -a1 / 32. * ( ( V21.dotProduct({ x1 - x2, y1 - y2, z1 - z2 }) * ( sb * ( 1. + r2 ) ) ) + ( V21.dotProduct({ x1 - x4, y1 - y4, z1 - z4 }) * ( sa * ( 1. + r1 ) ) ) );
695 answer.
at(5, 5) = a1 / 32. * ( ( V11.dotProduct({ x1 - x2, y1 - y2, z1 - z2 }) * ( sb * ( 1. + r2 ) ) ) + ( V11.dotProduct({ x1 - x4, y1 - y4, z1 - z4 }) * ( sa * ( 1. + r1 ) ) ) );
697 answer.
at(5, 7) = 1. / 32. * ( -( a1 * V1.
at(1) + a2 * V2.
at(1) ) * ( sb * ( 1. + r2 ) ) + ( a2 * V2.
at(1) + a3 * V3.
at(1) ) * ( sa * ( 1. - r1 ) ) );
698 answer.
at(5, 8) = 1. / 32. * ( -( a1 * V1.
at(2) + a2 * V2.
at(2) ) * ( sb * ( 1. + r2 ) ) + ( a2 * V2.
at(2) + a3 * V3.
at(2) ) * ( sa * ( 1. - r1 ) ) );
699 answer.
at(5, 9) = 1. / 32. * ( -( a1 * V1.
at(3) + a2 * V2.
at(3) ) * ( sb * ( 1. + r2 ) ) + ( a2 * V2.
at(3) + a3 * V3.
at(3) ) * ( sa * ( 1. - r1 ) ) );
700 answer.
at(5, 10) = -a1 / 32. * ( ( V21.dotProduct({ x1 - x2, y1 - y2, z1 - z2 }) * ( sb * ( 1. + r2 ) ) ) + ( V21.dotProduct({ x2 - x3, y2 - y3, z2 - z3 }) * ( sa * ( 1. - r1 ) ) ) );
701 answer.
at(5, 11) = a1 / 32. * ( ( V11.dotProduct({ x1 - x2, y1 - y2, z1 - z2 }) * ( sb * ( 1. + r2 ) ) ) + ( V11.dotProduct({ x2 - x3, y2 - y3, z2 - z3 }) * ( sa * ( 1. - r1 ) ) ) );
703 answer.
at(5, 13) = 1. / 32. * ( -( a3 * V3.
at(1) + a4 * V4.
at(1) ) * ( sb * ( 1. - r2 ) ) - ( a2 * V2.
at(1) + a3 * V3.
at(1) ) * ( sa * ( 1. - r1 ) ) );
704 answer.
at(5, 14) = 1. / 32. * ( -( a3 * V3.
at(2) + a4 * V4.
at(2) ) * ( sb * ( 1. - r2 ) ) - ( a2 * V2.
at(2) + a3 * V3.
at(2) ) * ( sa * ( 1. - r1 ) ) );
705 answer.
at(5, 15) = 1. / 32. * ( -( a3 * V3.
at(3) + a4 * V4.
at(3) ) * ( sb * ( 1. - r2 ) ) - ( a2 * V2.
at(3) + a3 * V3.
at(3) ) * ( sa * ( 1. - r1 ) ) );
706 answer.
at(5, 16) = -a1 / 32. * ( ( V21.dotProduct({ x4 - x3, y4 - y3, z4 - z3 }) * ( sb * ( 1. - r2 ) ) ) + ( V21.dotProduct({ x2 - x3, y2 - y3, z2 - z3 }) * ( sa * ( 1. - r1 ) ) ) );
707 answer.
at(5, 17) = a1 / 32. * ( ( V11.dotProduct({ x4 - x3, y4 - y3, z4 - z3 }) * ( sb * ( 1. - r2 ) ) ) + ( V11.dotProduct({ x2 - x3, y2 - y3, z2 - z3 }) * ( sa * ( 1. - r1 ) ) ) );
709 answer.
at(5, 19) = 1. / 32. * ( ( a3 * V3.
at(1) + a4 * V4.
at(1) ) * ( sb * ( 1. - r2 ) ) - ( a1 * V1.
at(1) + a4 * V4.
at(1) ) * ( sa * ( 1. + r1 ) ) );
710 answer.
at(5, 20) = 1. / 32. * ( ( a3 * V3.
at(2) + a4 * V4.
at(2) ) * ( sb * ( 1. - r2 ) ) - ( a1 * V1.
at(2) + a4 * V4.
at(2) ) * ( sa * ( 1. + r1 ) ) );
711 answer.
at(5, 21) = 1. / 32. * ( ( a3 * V3.
at(3) + a4 * V4.
at(3) ) * ( sb * ( 1. - r2 ) ) - ( a1 * V1.
at(3) + a4 * V4.
at(3) ) * ( sa * ( 1. + r1 ) ) );
712 answer.
at(5, 22) = -a1 / 32. * ( ( V21.dotProduct({ x4 - x3, y4 - y3, z4 - z3 }) * ( sb * ( 1. - r2 ) ) ) + ( V21.dotProduct({ x1 - x4, y1 - y4, z1 - z4 }) * ( sa * ( 1. + r1 ) ) ) );
713 answer.
at(5, 23) = a1 / 32. * ( ( V11.dotProduct({ x4 - x3, y4 - y3, z4 - z3 }) * ( sb * ( 1. - r2 ) ) ) + ( V11.dotProduct({ x1 - x4, y1 - y4, z1 - z4 }) * ( sa * ( 1. + r1 ) ) ) );
717 answer.
at(1, 1) = hkx.
at(1);
718 answer.
at(1, 4) = -r3 / 2. *a1 *hkx.
at(1) * V21.at(1);
719 answer.
at(1, 5) = r3 / 2. *a1 *hkx.
at(1) * V11.at(1);
720 answer.
at(1, 7) = hkx.
at(2);
721 answer.
at(1, 10) = -r3 / 2. *a2 *hkx.
at(2) * V22.at(1);
722 answer.
at(1, 11) = r3 / 2. *a2 *hkx.
at(2) * V12.at(1);
723 answer.
at(1, 13) = hkx.
at(3);
724 answer.
at(1, 16) = -r3 / 2. *a3 *hkx.
at(3) * V23.at(1);
725 answer.
at(1, 17) = r3 / 2. *a3 *hkx.
at(3) * V13.at(1);
726 answer.
at(1, 19) = hkx.
at(4);
727 answer.
at(1, 22) = -r3 / 2. *a4 *hkx.
at(4) * V24.
at(1);
728 answer.
at(1, 23) = r3 / 2. *a4 *hkx.
at(4) * V14.at(1);
730 answer.
at(2, 2) = hky.
at(1);
731 answer.
at(2, 4) = -r3 / 2. *a1 *hky.
at(1) * V21.at(2);
732 answer.
at(2, 5) = r3 / 2. *a1 *hky.
at(1) * V11.at(2);
734 answer.
at(2, 8) = hky.
at(2);
735 answer.
at(2, 10) = -r3 / 2. *a2 *hky.
at(2) * V22.at(2);
736 answer.
at(2, 11) = r3 / 2. *a2 *hky.
at(2) * V12.at(2);
738 answer.
at(2, 14) = hky.
at(3);
739 answer.
at(2, 16) = -r3 / 2. *a3 *hky.
at(3) * V23.at(2);
740 answer.
at(2, 17) = r3 / 2. *a3 *hky.
at(3) * V13.at(2);
742 answer.
at(2, 20) = hky.
at(4);
743 answer.
at(2, 22) = -r3 / 2. *a4 *hky.
at(4) * V24.
at(2);
744 answer.
at(2, 23) = r3 / 2. *a4 *hky.
at(4) * V14.at(2);
746 answer.
at(6, 1) = hky.
at(1);
747 answer.
at(6, 2) = hkx.
at(1);
748 answer.
at(6, 4) = -r3 / 2. * a1 * ( hkx.
at(1) * V21.at(2) + hky.
at(1) * V21.at(1) );
749 answer.
at(6, 5) = r3 / 2. * a1 * ( hky.
at(1) * V11.at(1) + hky.
at(1) * V11.at(2) );
751 answer.
at(6, 7) = hky.
at(2);
752 answer.
at(6, 8) = hkx.
at(2);
753 answer.
at(6, 10) = -r3 / 2. * a2 * ( hkx.
at(2) * V22.at(2) + hky.
at(2) * V22.at(1) );
754 answer.
at(6, 11) = r3 / 2. * a2 * ( hky.
at(2) * V12.at(1) + hky.
at(2) * V12.at(2) );
756 answer.
at(6, 13) = hky.
at(3);
757 answer.
at(6, 14) = hkx.
at(3);
758 answer.
at(6, 16) = -r3 / 2. * a3 * ( hkx.
at(3) * V23.at(2) + hky.
at(3) * V23.at(1) );
759 answer.
at(6, 17) = r3 / 2. * a3 * ( hky.
at(3) * V13.at(1) + hky.
at(3) * V13.at(2) );
761 answer.
at(6, 19) = hky.
at(4);
762 answer.
at(6, 20) = hkx.
at(4);
763 answer.
at(6, 22) = -r3 / 2. * a4 * ( hkx.
at(4) * V24.
at(2) + hky.
at(4) * V24.
at(1) );
764 answer.
at(6, 23) = r3 / 2. * a4 * ( hky.
at(4) * V14.at(1) + hky.
at(4) * V14.at(2) );
803 for (
int i = 1; i <= 3; i++ ) {
822 coordA.
add( * this->
giveNode(3)->giveCoordinates() );
827 coordB.
add( * this->
giveNode(4)->giveCoordinates() );
836 coordA.
add( * this->
giveNode(3)->giveCoordinates() );
841 coordB.
add( * this->
giveNode(2)->giveCoordinates() );
879 FloatArray V11(3), V12(3), V13(3), V14(3), V21(3), V22(3), V23(3), V24(3);
880 V11.beVectorProductOf(e2, V1);
882 V12.beVectorProductOf(e2, V2);
884 V13.beVectorProductOf(e2, V3);
886 V14.beVectorProductOf(e2, V4);
889 V21.beVectorProductOf(V1, V11);
890 V22.beVectorProductOf(V2, V12);
891 V23.beVectorProductOf(V3, V13);
899 answer1.
at(1, 1) = V11.dotProduct(e1);
900 answer1.
at(1, 2) = V11.dotProduct(e2);
901 answer1.
at(1, 3) = V11.dotProduct(e3);
902 answer1.
at(2, 1) = V21.dotProduct(e1);
903 answer1.
at(2, 2) = V21.dotProduct(e2);
904 answer1.
at(2, 3) = V21.dotProduct(e3);
909 answer2.
at(1, 1) = V12.dotProduct(e1);
910 answer2.
at(1, 2) = V12.dotProduct(e2);
911 answer2.
at(1, 3) = V12.dotProduct(e3);
912 answer2.
at(2, 1) = V22.dotProduct(e1);
913 answer2.
at(2, 2) = V22.dotProduct(e2);
914 answer2.
at(2, 3) = V22.dotProduct(e3);
919 answer3.
at(1, 1) = V13.dotProduct(e1);
920 answer3.
at(1, 2) = V13.dotProduct(e2);
921 answer3.
at(1, 3) = V13.dotProduct(e3);
922 answer3.
at(2, 1) = V23.dotProduct(e1);
923 answer3.
at(2, 2) = V23.dotProduct(e2);
924 answer3.
at(2, 3) = V23.dotProduct(e3);
929 answer4.
at(1, 1) = V14.dotProduct(e1);
930 answer4.
at(1, 2) = V14.dotProduct(e2);
931 answer4.
at(1, 3) = V14.dotProduct(e3);
955 for (
int i = 0; i <= 3; i++ ) {
999 answer.
at(1, 1) = stress.
at(1);
1000 answer.
at(2, 2) = stress.
at(2);
1001 answer.
at(3, 3) = stress.
at(3);
1002 answer.
at(1, 2) = stress.
at(4);
1003 answer.
at(2, 1) = stress.
at(4);
1004 answer.
at(2, 3) = stress.
at(5);
1005 answer.
at(3, 2) = stress.
at(5);
1006 answer.
at(1, 3) = stress.
at(6);
1007 answer.
at(3, 1) = stress.
at(6);
1013 answer.
at(1, 1) = strain.
at(1);
1014 answer.
at(2, 2) = strain.
at(2);
1015 answer.
at(3, 3) = strain.
at(3);
1016 answer.
at(2, 3) = strain.
at(4) / 2.;
1017 answer.
at(3, 2) = strain.
at(4) / 2.;
1018 answer.
at(1, 3) = strain.
at(5) / 2.;
1019 answer.
at(3, 1) = strain.
at(5) / 2.;
1020 answer.
at(1, 2) = strain.
at(6) / 2.;
1021 answer.
at(2, 1) = strain.
at(6) / 2.;
1038 fprintf(file,
" GP %d :", i + 1);
1041 fprintf(file,
" forces ");
1042 for (
auto &val : v ) {
1043 fprintf(file,
" %.4e", val);
1047 fprintf(file,
"\n moments ");
1048 for (
auto &val : v ) {
1049 fprintf(file,
" %.4e", val);
1053 fprintf(file,
"\n strains ");
1054 for (
auto &val : v ) {
1055 fprintf(file,
" %.4e", val);
1059 fprintf(file,
"\n curvatures ");
1060 for (
auto &val : v ) {
1061 fprintf(file,
" %.4e", val);
1064 for (
int j = 0; j <
nPointsZ; j++ ) {
1067 fprintf(file,
"\n GP %d.%d :", i + 1, j + 1);
1069 this->
giveIPValue(v, gp, IST_StrainTensor, tStep);
1070 fprintf(file,
" strains ");
1071 for (
auto &val : v ) {
1072 fprintf(file,
" %.4e", val);
1075 this->
giveIPValue(v, gp, IST_StressTensor, tStep);
1076 fprintf(file,
"\n stresses ");
1077 for (
auto &val : v ) {
1078 fprintf(file,
" %.4e", val);
1081 fprintf(file,
"\n");
1090 if ( type == IST_ShellMomentTensor || type == IST_ShellForceTensor ) {
1091 double J, thickness, z, w;
1096 for (
int i = 0; i <
nPointsZ; i++ ) {
1099 J = thickness / 2.0;
1100 if ( type == IST_ShellMomentTensor ) {
1102 }
else if ( type == IST_ShellForceTensor ) {
1110 mLocal.
add(w, localStress);
1117 }
else if ( type == IST_CurvatureTensor ) {
1136 for (
int i = 0; i < 4; i++ ) {
1137 rotX(i) = dofs.
at(i * 6 + 4);
1138 rotY(i) = dofs.
at(i * 6 + 5);
1143 cLocal.
at(2) = -rotX.dotProduct(hky);
1144 cLocal.
at(6) = rotY.
dotProduct(hky) - rotX.dotProduct(hkx);
1147 }
else if ( type == IST_ShellStrainTensor ) {
1155 this->
giveIPValue(answer, midGP, IST_StrainTensor, tStep);
1157 OOFEM_ERROR(
"MITC4Shell :: giveMidplaneIPValue - unknown type");
1174 hk1.at(1) = dn.
at(1, 1);
1175 hk1.at(2) = dn.
at(2, 1);
1176 hk1.at(3) = dn.
at(3, 1);
1177 hk1.at(4) = dn.
at(4, 1);
1180 hk2.
at(1) = dn.
at(1, 2);
1181 hk2.
at(2) = dn.
at(2, 2);
1182 hk2.
at(3) = dn.
at(3, 2);
1183 hk2.
at(4) = dn.
at(4, 2);
1193 hkx.
at(1) = dndx.
at(1, 1);
1194 hkx.
at(2) = dndx.
at(2, 1);
1195 hkx.
at(3) = dndx.
at(3, 1);
1196 hkx.
at(4) = dndx.
at(4, 1);
1199 hky.
at(1) = dndx.
at(1, 2);
1200 hky.
at(2) = dndx.
at(2, 2);
1201 hky.
at(3) = dndx.
at(3, 2);
1202 hky.
at(4) = dndx.
at(4, 2);
1221 if ( type == IST_StrainTensor ) {
1226 answer.
at(1) = globTensor.
at(1, 1);
1227 answer.
at(2) = globTensor.
at(2, 2);
1228 answer.
at(3) = globTensor.
at(3, 3);
1229 answer.
at(4) = 2 * globTensor.
at(2, 3);
1230 answer.
at(5) = 2 * globTensor.
at(1, 3);
1231 answer.
at(6) = 2 * globTensor.
at(1, 2);
1234 }
else if ( type == IST_StressTensor ) {
1239 answer.
at(1) = globTensor.
at(1, 1);
1240 answer.
at(2) = globTensor.
at(2, 2);
1241 answer.
at(3) = globTensor.
at(3, 3);
1242 answer.
at(4) = globTensor.
at(2, 3);
1243 answer.
at(5) = globTensor.
at(1, 3);
1244 answer.
at(6) = globTensor.
at(1, 2);
1247 }
else if ( type == IST_ShellMomentTensor || type == IST_ShellForceTensor || type == IST_CurvatureTensor || type == IST_ShellStrainTensor ) {
1266 std :: vector< FloatArray >lc(3);
1269 for (
int _i = 0; _i < 4; _i++ ) {
1274 answer.
at(1) = inputCoords_ElCS.
at(1);
1275 answer.
at(2) = inputCoords_ElCS.
at(2);
1276 GaussPoint _gp(NULL, 1, answer, 2.0, _2dPlate);
1280 return inplane && outofplane;
1296 for (
int _i = 1; _i <= 3; _i++ ) {
1313 for (
int i = 1; i <= 3; i++ ) {
1327 double x1 = 0.0, x2 = 0.0, y = 0.0;
1346 const FloatArray &coord = gp->giveNaturalCoordinates();
1354 A.
at(2, 2) += u * u;
1355 A.
at(2, 3) += u * v;
1357 A.
at(3, 2) += v * u;
1358 A.
at(3, 3) += v * v;
1360 for (
int j = 1; j <= size; j++ ) {
1363 r.
at(2, j) += y * u;
1364 r.
at(3, j) += y * v;
1392 for (
int j = 1; j <= size; j++ ) {
1393 answer.
at(j) = b.
at(1, j) + x1 *b.
at(2, j) + x2 *b.
at(3, j);
1403 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12
1405 }
else if ( iEdge == 2 ) {
1407 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18
1409 }
else if ( iEdge == 3 ) {
1411 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24
1413 }
else if ( iEdge == 4 ) {
1415 19, 20, 21, 22, 23, 24, 1, 2, 3, 4, 5, 6
1426 std :: vector< FloatArray >lc = {
1429 this->
giveNodeCoordinates( lc [ 0 ].at(1), lc [ 1 ].at(1), lc [ 2 ].at(1), lc [ 3 ].at(1),
1430 lc [ 0 ].at(2), lc [ 1 ].at(2), lc [ 2 ].at(2), lc [ 3 ].at(2),
1431 lc [ 0 ].at(3), lc [ 1 ].at(3), lc [ 2 ].at(3), lc [ 3 ].at(3) );
1495 coords.
at(1) = coords2.
at(1);
1496 coords.
at(2) = coords2.
at(2);
1508 for ( i = 1; i <= 24; i++ ) {
1530 double detJ, weight;
1537 this->
giveNodeCoordinates( x.at(1), x.at(2), x.at(3), x.at(4), y.at(1), y.at(2), y.at(3), y.at(4), z.
at(1), z.
at(2), z.
at(3), z.
at(4) );
1545 double xl = x.at(i);
1546 double yl = y.at(i);
1548 jacobianMatrix.
at(1, 1) += dn.
at(i, 1) * xl;
1549 jacobianMatrix.
at(1, 2) += dn.
at(i, 1) * yl;
1550 jacobianMatrix.
at(2, 1) += dn.
at(i, 2) * xl;
1551 jacobianMatrix.
at(2, 2) += dn.
at(i, 2) * yl;
1555 return detJ * weight;
double giveDeterminant() const
Returns the trace (sum of diagonal components) of the receiver.
void giveDirectorVectors(FloatArray &V1, FloatArray &V2, FloatArray &V3, FloatArray &V4)
CrossSection * giveCrossSection()
Relative penalty stiffness for drilling DOFs.
InternalStateType
Type representing the physical meaning of element or constitutive model internal variable.
The element interface required by NodalAvergagingRecoveryModel.
virtual void computeConstitutiveMatrixAt(FloatMatrix &answer, MatResponseMode rMode, GaussPoint *gp, TimeStep *tStep)
Computes constitutive matrix of receiver.
void subtract(const FloatArray &src)
Subtracts array src to receiver.
void giveCharacteristicTensor(FloatMatrix &answer, CharTensor type, GaussPoint *gp, TimeStep *tStep)
virtual void setupIRForMassMtrxIntegration(IntegrationRule &iRule)
Setup Integration Rule Gauss Points for Mass Matrix integration.
virtual void giveEdgeDofMapping(IntArray &answer, int iEdge) const
Assembles edge dof mapping mask, which provides mapping between edge local DOFs and "global" element ...
int number
Component number.
The element interface required by ZZNodalRecoveryModel.
virtual int global2local(FloatArray &answer, const FloatArray &lcoords, const FEICellGeometry &cellgeo)
Default implementation using Newton's method to find the local coordinates.
virtual SPRPatchType SPRNodalRecoveryMI_givePatchType()
virtual void giveRealStress_3dDegeneratedShell(FloatArray &answer, GaussPoint *gp, const FloatArray &reducedStrain, TimeStep *tStep)
virtual int giveIPValue(FloatArray &answer, GaussPoint *gp, InternalStateType type, TimeStep *tStep)
Returns the integration point corresponding value in full form.
int nlGeometry
Flag indicating if geometrical nonlinearities apply.
void beVectorProductOf(const FloatArray &v1, const FloatArray &v2)
Computes vector product (or cross product) of vectors given as parameters, , and stores the result in...
void computeVectorOf(ValueModeType u, TimeStep *tStep, FloatArray &answer)
Returns local vector of unknowns.
virtual void giveSurfaceDofMapping(IntArray &answer, int iSurf) const
Assembles surface dof mapping mask, which provides mapping between surface local DOFs and "global" el...
virtual void printOutputAt(FILE *file, TimeStep *tStep)
Prints output of receiver to stream, for given time step.
virtual IntegrationRule * giveDefaultIntegrationRulePtr()
Access method for default integration rule.
virtual IRResultType initializeFrom(InputRecord *ir)
Initializes receiver according to object description stored in input record.
void giveLocalDirectorVectors(FloatArray &V1, FloatArray &V2, FloatArray &V3, FloatArray &V4)
Director vector component in y-axis.
bool solveForRhs(const FloatArray &b, FloatArray &answer, bool transpose=false)
Solves the system of linear equations .
Wrapper around cell with vertex coordinates stored in FloatArray**.
The element interface required by ZZNodalRecoveryModel.
Abstract base class for "structural" finite elements with geometrical nonlinearities.
void zero()
Sets all component to zero.
double & at(int i)
Coefficient access function.
void beSubMatrixOf(const FloatMatrix &src, int topRow, int bottomRow, int topCol, int bottomCol)
Assigns to the receiver the sub-matrix of another matrix.
virtual void computeStressVector(FloatArray &answer, const FloatArray &strain, GaussPoint *gp, TimeStep *tStep)
Computes the stress vector of receiver at given integration point, at time step tStep.
ConnectivityTable * giveConnectivityTable()
Returns receiver's associated connectivity table.
virtual Interface * giveInterface(InterfaceType interface)
Interface requesting service.
const FloatMatrix * computeGtoLRotationMatrix()
virtual double edgeGiveTransformationJacobian(int iedge, const FloatArray &lcoords, const FEICellGeometry &cellgeo)
Evaluates the edge Jacobian of transformation between local and global coordinates.
void givedNdx(FloatArray &hkx, FloatArray &hky, FloatArray coords)
virtual void boundarySurfaceEvalN(FloatArray &answer, int isurf, const FloatArray &lcoords, const FEICellGeometry &cellgeo)=0
Evaluates the array of edge interpolation functions (shape functions) at given point.
virtual void SPRNodalRecoveryMI_giveDofMansDeterminedByPatch(IntArray &answer, int pap)
virtual void giveDofManDofIDMask(int inode, IntArray &) const
Returns dofmanager dof mask for node.
#define _IFT_NLStructuralElement_nlgeoflag
This class implements an quad element based on Mixed Interpolation of Tensorial Components (MITC)...
virtual int SetUpPointsOnSquare(int, MaterialMode mode)
Sets up receiver's integration points on unit square integration domain.
virtual double giveCoordinate(int i)
void computeLocalBaseVectors(FloatArray &e1, FloatArray &e2, FloatArray &e3)
static FEI2dQuadLin interp_lin
Element geometry approximation.
virtual void giveInternalForcesVector(FloatArray &answer, TimeStep *tStep, int useUpdatedGpRecord)
Evaluates nodal representation of real internal forces.
Class implementing an array of integers.
int & at(int i)
Coefficient access function.
MatResponseMode
Describes the character of characteristic material matrix.
void giveNodeCoordinates(double &x1, double &x2, double &x3, double &x4, double &y1, double &y2, double &y3, double &y4, double &z1, double &z2, double &z3, double &z4)
FloatMatrix GtoLRotationMatrix
Transformation Matrix form GtoL(3,3) is stored at the element level for computation efficiency...
Abstract base class representing integration rule.
void beDifferenceOf(const FloatArray &a, const FloatArray &b)
Sets receiver to be a - b.
virtual double computeEdgeVolumeAround(GaussPoint *gp, int iEdge)
Computes volume related to integration point on local edge.
void setSubMatrix(const FloatMatrix &src, int sr, int sc)
Adds the given matrix as sub-matrix to receiver.
void beColumnOf(const FloatMatrix &mat, int col)
Reciever will be set to a given column in a matrix.
Class representing a general abstraction for finite element interpolation class.
bool isNotEmpty() const
Tests for empty matrix.
double giveNaturalCoordinate(int i) const
Returns i-th natural element coordinate of receiver.
void computeLToDirectorRotationMatrix(FloatMatrix &answer1, FloatMatrix &answer2, FloatMatrix &answer3, FloatMatrix &answer4)
virtual void computeStiffnessMatrix(FloatMatrix &answer, MatResponseMode rMode, TimeStep *tStep)
Computes the stiffness matrix of receiver.
virtual int giveIPValue(FloatArray &answer, GaussPoint *gp, InternalStateType type, TimeStep *tStep)
Returns the integration point corresponding value in full form.
Director vector component in z-axis.
virtual void computeEdgeNMatrix(FloatMatrix &answer, int boundaryID, const FloatArray &lcoords)
computes edge interpolation matrix
Element * giveElement(int n)
Service for accessing particular domain fe element.
void giveLocalCoordinates(FloatArray &answer, FloatArray &global)
double dotProduct(const FloatArray &x) const
Computes the dot product (or inner product) of receiver and argument.
int computeLoadGToLRotationMtrx(FloatMatrix &answer)
Returns transformation matrix from global coordinate system to local element coordinate system for el...
virtual void computeLocalEdgeMapping(IntArray &edgeNodes, int iedge)
DofIDItem
Type representing particular dof type.
int giveNumber()
Returns number of receiver.
virtual void computeGaussPoints()
Initializes the array of integration rules member variable.
virtual double giveWeight()
Returns integration weight of receiver.
virtual integrationDomain giveIntegrationDomain() const
Returns integration domain for receiver, used to initialize integration point over receiver volume...
StructuralCrossSection * giveStructuralCrossSection()
Helper function which returns the structural cross-section for the element.
void giveThickness(double &a1, double &a2, double &a3, double &a4)
virtual void NodalAveragingRecoveryMI_computeNodalValue(FloatArray &answer, int node, InternalStateType type, TimeStep *tStep)
Computes the element value in given node.
Class representing connectivity table.
Wrapper around element definition to provide FEICellGeometry interface.
virtual void boundaryEdgeEvalN(FloatArray &answer, int boundary, const FloatArray &lcoords, const FEICellGeometry &cellgeo)=0
Evaluates the basis functions on the requested boundary.
void beProductOf(const FloatMatrix &aMatrix, const FloatArray &anArray)
Receiver becomes the result of the product of aMatrix and anArray.
virtual void computeStrainVector(FloatArray &answer, GaussPoint *gp, TimeStep *tStep)
Compute strain vector of receiver evaluated at given integration point at given time step from elemen...
double at(int i, int j) const
Coefficient access function.
void resize(int n)
Checks size of receiver towards requested bounds.
virtual IntegrationRule * GetSurfaceIntegrationRule(int approxOrder)
void giveMidplaneIPValue(FloatArray &answer, int gpXY, InternalStateType type, TimeStep *tStep)
MITC4Shell(int n, Domain *d)
const FloatArray & giveGlobalCoordinates()
virtual int setupIntegrationPoints(IntegrationRule &irule, int npoints, Element *element)
Sets up integration rule for the given element.
int numberOfGaussPoints
Number of integration points as specified by nip.
void beNMatrixOf(const FloatArray &n, int nsd)
Assigns the receiver to be a repeated diagonal matrix.
virtual int computeGlobalCoordinates(FloatArray &answer, const FloatArray &lcoords)
Computes the global coordinates from given element's local coordinates.
Class representing vector of real numbers.
Implementation of matrix containing floating point numbers.
#define _IFT_MITC4Shell_directorType
IRResultType
Type defining the return values of InputRecord reading operations.
void giveNodeNeighbourList(IntArray &answer, IntArray &nodeList)
Returns list of elements sharing given nodes.
virtual double give(CrossSectionProperty a, GaussPoint *gp)
Returns the value of cross section property at given point.
virtual void computeStiffnessMatrix(FloatMatrix &answer, MatResponseMode rMode, TimeStep *tStep)
Computes the stiffness matrix of receiver.
static void transformStrainVectorTo(FloatArray &answer, const FloatMatrix &base, const FloatArray &strainVector, bool transpose=false)
Transforms 3d strain vector into another coordinate system.
void beSubArrayOf(const FloatArray &src, const IntArray &indx)
Extract sub vector form src array and stores the result into receiver.
void assemble(const FloatArray &fe, const IntArray &loc)
Assembles the array fe (typically, the load vector of a finite element) into the receiver, using loc as location array.
void resize(int rows, int cols)
Checks size of receiver towards requested bounds.
virtual int computeLoadLEToLRotationMatrix(FloatMatrix &answer, int iEdge, GaussPoint *gp)
Returns transformation matrix from local edge c.s to element local coordinate system of load vector c...
virtual double computeVolumeAround(GaussPoint *gp)
Returns volume related to given integration point.
virtual int getRequiredNumberOfIntegrationPoints(integrationDomain dType, int approxOrder)
Abstract service.
void giveJacobian(FloatArray lcoords, FloatMatrix &jacobianMatrix)
int giveNumberOfIntegrationPoints() const
Returns number of integration points of receiver.
void zero()
Zeroes all coefficients of receiver.
virtual void SPRNodalRecoveryMI_giveSPRAssemblyPoints(IntArray &pap)
void times(double s)
Multiplies receiver with scalar.
virtual int SPRNodalRecoveryMI_giveNumberOfIP()
virtual void computeNmatrixAt(const FloatArray &iLocCoord, FloatMatrix &answer)
Computes interpolation matrix for element unknowns.
The spatial localizer element interface associated to spatial localizer.
virtual void give3dDegeneratedShellStiffMtrx(FloatMatrix &answer, MatResponseMode rMode, GaussPoint *gp, TimeStep *tStep)
Method for computing 3d shell stiffness matrix on degenerated shell elements.
Abstract base class for all "structural" constitutive models.
std::vector< std::unique_ptr< IntegrationRule > > integrationRulesArray
List of integration rules of receiver (each integration rule contains associated integration points a...
virtual IRResultType initializeFrom(InputRecord *ir)
Initializes receiver according to object description stored in input record.
int setUpIntegrationPoints(integrationDomain intdomain, int nPoints, MaterialMode matMode)
Initializes the receiver.
virtual FloatArray * giveCoordinates()
void beProductTOf(const FloatMatrix &a, const FloatMatrix &b)
Assigns to the receiver product of .
void zero()
Zeroes all coefficient of receiver.
Domain * giveDomain() const
Type of artificially added drilling stiffness for drilling DOFs.
InterfaceType
Enumerative type, used to identify interface type.
virtual void giveInternalForcesVector(FloatArray &answer, TimeStep *tStep, int useUpdatedGpRecord=0)
Evaluates nodal representation of real internal forces.
void beProductOf(const FloatMatrix &a, const FloatMatrix &b)
Assigns to the receiver product of .
virtual void computeSurfaceNMatrixAt(FloatMatrix &answer, int iSurf, GaussPoint *sgp)
int giveSize() const
Returns the size of receiver.
Abstract base class for all structural cross section models.
virtual void computeBmatrixAt(GaussPoint *gp, FloatMatrix &answer, int=1, int=ALL_STRAINS)
Computes the geometrical matrix of receiver in given integration point.
virtual void evaldNdxi(FloatMatrix &answer, const FloatArray &lcoords, const FEICellGeometry &cellgeo)
Evaluates the matrix of derivatives of interpolation functions (shape functions) at given point...
the oofem namespace is to define a context or scope in which all oofem names are defined.
void assemble(const FloatMatrix &src, const IntArray &loc)
Assembles the contribution using localization array into receiver.
virtual bool computeLocalCoordinates(FloatArray &answer, const FloatArray &coords)
Computes the element local coordinates from given global coordinates.
void beInverseOf(const FloatMatrix &src)
Modifies receiver to become inverse of given parameter.
double normalize()
Normalizes receiver.
Node * giveNode(int i) const
Returns reference to the i-th node of element.
int giveNumberOfRows() const
Returns number of rows of receiver.
static void transformStressVectorTo(FloatArray &answer, const FloatMatrix &base, const FloatArray &stressVector, bool transpose=false)
Transforms 3d stress vector into another coordinate system.
Director vector component in x-axis.
Class representing integration point in finite element program.
Class representing solution step.
virtual Material * giveMaterial(IntegrationPoint *ip)
Returns the material associated with the GP.
#define _IFT_MITC4Shell_nipZ
int numberOfDofMans
Number of dofmanagers.
void add(const FloatArray &src)
Adds array src to receiver.
virtual MaterialMode giveMaterialMode()
Returns material mode for receiver integration points.
virtual double computeSurfaceVolumeAround(GaussPoint *gp, int iSurf)
Computes volume related to integration point on local surface.
virtual void computeSurfaceNMatrix(FloatMatrix &answer, int boundaryID, const FloatArray &lcoords)
Computes surface interpolation matrix.
virtual void evalN(FloatArray &answer, const FloatArray &lcoords, const FEICellGeometry &cellgeo)
Evaluates the array of interpolation functions (shape functions) at given point.
const FloatArray & giveNaturalCoordinates()
Returns coordinate array of receiver.
virtual FEInterpolation * giveInterpolation() const
Class representing Gaussian-quadrature integration rule.
void resize(int s)
Resizes receiver towards requested size.