35 #include "../sm/Materials/structuralmaterial.h" 38 #include "../sm/Materials/structuralms.h" 39 #include "../sm/Elements/structuralelement.h" 40 #include "../sm/Elements/nlstructuralelement.h" 73 return mode == _3dMat || mode == _PlaneStress || mode == _PlaneStrain || mode == _1dMat ||
74 mode == _PlateLayer || mode == _2dBeamLayer || mode == _Fiber;
83 if ( mode == _3dMat ) {
85 }
else if ( mode == _3dDegeneratedShell ) {
87 }
else if ( mode == _PlaneStrain ) {
89 }
else if ( mode == _PlaneStress ) {
91 }
else if ( mode == _1dMat ) {
93 }
else if ( mode == _2dBeamLayer ) {
95 }
else if ( mode == _PlateLayer ) {
97 }
else if ( mode == _Fiber ) {
99 }
else if ( mode == _2dLattice ) {
101 }
else if ( mode == _3dLattice ) {
103 }
else if ( mode == _2dPlateSubSoil ) {
105 }
else if ( mode == _3dBeamSubSoil ) {
147 for (
int i = 1, j = 1; i <= 6; i++ ) {
149 stressControl.
at(j++) = i;
155 for (
int i = 1; i <= strainControl.
giveSize(); ++i ) {
156 vE.
at( strainControl.
at(i) ) = reducedStrain.
at(i);
160 for (
int k = 0; k < 10; k++ ) {
177 reducedTangent.
beSubMatrixOf(tangent, stressControl, stressControl);
178 reducedTangent.
solveForRhs(reducedvS, increment_vE);
180 vE.
assemble(increment_vE, stressControl);
202 for (
int i = 1, j = 1; i <= 6; i++ ) {
204 stressControl.
at(j++) = i;
215 for (
int k = 0; k < 100; k++ ) {
225 reducedTangent.
beSubMatrixOf(tangent, stressControl, stressControl);
226 reducedTangent.
solveForRhs(reducedvS, increment_vE);
228 vE.
assemble(increment_vE, stressControl);
364 for (
int i = 1, j = 1; i <= 9; i++ ) {
366 P_control.
at(j++) = i;
372 for (
int i = 1; i <= F_control.
giveSize(); ++i ) {
373 vF.
at( F_control.
at(i) ) = reducedvF.
at(i);
377 for (
int k = 0; k < 100; k++ ) {
386 tangent_Pcontrol.
beSubMatrixOf(tangent, P_control, P_control);
387 tangent_Pcontrol.
solveForRhs(vP_control, increment_vF);
388 vF.
assemble(increment_vF, P_control);
406 for (
int i = 1; i <= 8; i++ ) {
407 P_control.
at(i) = i + 1;
412 vF.
at(1) = reducedvF.
at(1);
414 for (
int k = 0; k < 100; k++ ) {
423 tangent_Pcontrol.
beSubMatrixOf(tangent, P_control, P_control);
424 tangent_Pcontrol.
solveForRhs(vP_control, increment_vF);
425 vF.
assemble(increment_vF, P_control);
441 if ( matMode == _3dMat ) {
447 answer(0, 0) = F(0) * C(0, 0) * F(0) + F(0) * C(0, 5) * F(5) + F(0) * C(0, 4) * F(4) + F(5) * C(5, 0) * F(0) + F(5) * C(5, 5) * F(5) + F(5) * C(5, 4) * F(4) + F(4) * C(4, 0) * F(0) + F(4) * C(4, 5) * F(5) + F(4) * C(4, 4) * F(4) +
S(0);
448 answer(0, 1) = F(0) * C(0, 5) * F(8) + F(0) * C(0, 1) * F(1) + F(0) * C(0, 3) * F(3) + F(5) * C(5, 5) * F(8) + F(5) * C(5, 1) * F(1) + F(5) * C(5, 3) * F(3) + F(4) * C(4, 5) * F(8) + F(4) * C(4, 1) * F(1) + F(4) * C(4, 3) * F(3) + 0.0;
449 answer(0, 2) = F(0) * C(0, 4) * F(7) + F(0) * C(0, 3) * F(6) + F(0) * C(0, 2) * F(2) + F(5) * C(5, 4) * F(7) + F(5) * C(5, 3) * F(6) + F(5) * C(5, 2) * F(2) + F(4) * C(4, 4) * F(7) + F(4) * C(4, 3) * F(6) + F(4) * C(4, 2) * F(2) + 0.0;
450 answer(0, 3) = F(0) * C(0, 4) * F(8) + F(0) * C(0, 3) * F(1) + F(0) * C(0, 2) * F(3) + F(5) * C(5, 4) * F(8) + F(5) * C(5, 3) * F(1) + F(5) * C(5, 2) * F(3) + F(4) * C(4, 4) * F(8) + F(4) * C(4, 3) * F(1) + F(4) * C(4, 2) * F(3) + 0.0;
451 answer(0, 4) = F(0) * C(0, 4) * F(0) + F(0) * C(0, 3) * F(5) + F(0) * C(0, 2) * F(4) + F(5) * C(5, 4) * F(0) + F(5) * C(5, 3) * F(5) + F(5) * C(5, 2) * F(4) + F(4) * C(4, 4) * F(0) + F(4) * C(4, 3) * F(5) + F(4) * C(4, 2) * F(4) +
S(4);
452 answer(0, 5) = F(0) * C(0, 5) * F(0) + F(0) * C(0, 1) * F(5) + F(0) * C(0, 3) * F(4) + F(5) * C(5, 5) * F(0) + F(5) * C(5, 1) * F(5) + F(5) * C(5, 3) * F(4) + F(4) * C(4, 5) * F(0) + F(4) * C(4, 1) * F(5) + F(4) * C(4, 3) * F(4) +
S(5);
453 answer(0, 6) = F(0) * C(0, 5) * F(7) + F(0) * C(0, 1) * F(6) + F(0) * C(0, 3) * F(2) + F(5) * C(5, 5) * F(7) + F(5) * C(5, 1) * F(6) + F(5) * C(5, 3) * F(2) + F(4) * C(4, 5) * F(7) + F(4) * C(4, 1) * F(6) + F(4) * C(4, 3) * F(2) + 0.0;
454 answer(0, 7) = F(0) * C(0, 0) * F(7) + F(0) * C(0, 5) * F(6) + F(0) * C(0, 4) * F(2) + F(5) * C(5, 0) * F(7) + F(5) * C(5, 5) * F(6) + F(5) * C(5, 4) * F(2) + F(4) * C(4, 0) * F(7) + F(4) * C(4, 5) * F(6) + F(4) * C(4, 4) * F(2) + 0.0;
455 answer(0, 8) = F(0) * C(0, 0) * F(8) + F(0) * C(0, 5) * F(1) + F(0) * C(0, 4) * F(3) + F(5) * C(5, 0) * F(8) + F(5) * C(5, 5) * F(1) + F(5) * C(5, 4) * F(3) + F(4) * C(4, 0) * F(8) + F(4) * C(4, 5) * F(1) + F(4) * C(4, 4) * F(3) + 0.0;
456 answer(1, 0) = F(8) * C(5, 0) * F(0) + F(8) * C(5, 5) * F(5) + F(8) * C(5, 4) * F(4) + F(1) * C(1, 0) * F(0) + F(1) * C(1, 5) * F(5) + F(1) * C(1, 4) * F(4) + F(3) * C(3, 0) * F(0) + F(3) * C(3, 5) * F(5) + F(3) * C(3, 4) * F(4) + 0.0;
457 answer(1, 1) = F(8) * C(5, 5) * F(8) + F(8) * C(5, 1) * F(1) + F(8) * C(5, 3) * F(3) + F(1) * C(1, 5) * F(8) + F(1) * C(1, 1) * F(1) + F(1) * C(1, 3) * F(3) + F(3) * C(3, 5) * F(8) + F(3) * C(3, 1) * F(1) + F(3) * C(3, 3) * F(3) +
S(1);
458 answer(1, 2) = F(8) * C(5, 4) * F(7) + F(8) * C(5, 3) * F(6) + F(8) * C(5, 2) * F(2) + F(1) * C(1, 4) * F(7) + F(1) * C(1, 3) * F(6) + F(1) * C(1, 2) * F(2) + F(3) * C(3, 4) * F(7) + F(3) * C(3, 3) * F(6) + F(3) * C(3, 2) * F(2) + 0.0;
459 answer(1, 3) = F(8) * C(5, 4) * F(8) + F(8) * C(5, 3) * F(1) + F(8) * C(5, 2) * F(3) + F(1) * C(1, 4) * F(8) + F(1) * C(1, 3) * F(1) + F(1) * C(1, 2) * F(3) + F(3) * C(3, 4) * F(8) + F(3) * C(3, 3) * F(1) + F(3) * C(3, 2) * F(3) +
S(3);
460 answer(1, 4) = F(8) * C(5, 4) * F(0) + F(8) * C(5, 3) * F(5) + F(8) * C(5, 2) * F(4) + F(1) * C(1, 4) * F(0) + F(1) * C(1, 3) * F(5) + F(1) * C(1, 2) * F(4) + F(3) * C(3, 4) * F(0) + F(3) * C(3, 3) * F(5) + F(3) * C(3, 2) * F(4) + 0.0;
461 answer(1, 5) = F(8) * C(5, 5) * F(0) + F(8) * C(5, 1) * F(5) + F(8) * C(5, 3) * F(4) + F(1) * C(1, 5) * F(0) + F(1) * C(1, 1) * F(5) + F(1) * C(1, 3) * F(4) + F(3) * C(3, 5) * F(0) + F(3) * C(3, 1) * F(5) + F(3) * C(3, 3) * F(4) + 0.0;
462 answer(1, 6) = F(8) * C(5, 5) * F(7) + F(8) * C(5, 1) * F(6) + F(8) * C(5, 3) * F(2) + F(1) * C(1, 5) * F(7) + F(1) * C(1, 1) * F(6) + F(1) * C(1, 3) * F(2) + F(3) * C(3, 5) * F(7) + F(3) * C(3, 1) * F(6) + F(3) * C(3, 3) * F(2) + 0.0;
463 answer(1, 7) = F(8) * C(5, 0) * F(7) + F(8) * C(5, 5) * F(6) + F(8) * C(5, 4) * F(2) + F(1) * C(1, 0) * F(7) + F(1) * C(1, 5) * F(6) + F(1) * C(1, 4) * F(2) + F(3) * C(3, 0) * F(7) + F(3) * C(3, 5) * F(6) + F(3) * C(3, 4) * F(2) + 0.0;
464 answer(1, 8) = F(8) * C(5, 0) * F(8) + F(8) * C(5, 5) * F(1) + F(8) * C(5, 4) * F(3) + F(1) * C(1, 0) * F(8) + F(1) * C(1, 5) * F(1) + F(1) * C(1, 4) * F(3) + F(3) * C(3, 0) * F(8) + F(3) * C(3, 5) * F(1) + F(3) * C(3, 4) * F(3) +
S(5);
465 answer(2, 0) = F(7) * C(4, 0) * F(0) + F(7) * C(4, 5) * F(5) + F(7) * C(4, 4) * F(4) + F(6) * C(3, 0) * F(0) + F(6) * C(3, 5) * F(5) + F(6) * C(3, 4) * F(4) + F(2) * C(2, 0) * F(0) + F(2) * C(2, 5) * F(5) + F(2) * C(2, 4) * F(4) + 0.0;
466 answer(2, 1) = F(7) * C(4, 5) * F(8) + F(7) * C(4, 1) * F(1) + F(7) * C(4, 3) * F(3) + F(6) * C(3, 5) * F(8) + F(6) * C(3, 1) * F(1) + F(6) * C(3, 3) * F(3) + F(2) * C(2, 5) * F(8) + F(2) * C(2, 1) * F(1) + F(2) * C(2, 3) * F(3) + 0.0;
467 answer(2, 2) = F(7) * C(4, 4) * F(7) + F(7) * C(4, 3) * F(6) + F(7) * C(4, 2) * F(2) + F(6) * C(3, 4) * F(7) + F(6) * C(3, 3) * F(6) + F(6) * C(3, 2) * F(2) + F(2) * C(2, 4) * F(7) + F(2) * C(2, 3) * F(6) + F(2) * C(2, 2) * F(2) +
S(2);
468 answer(2, 3) = F(7) * C(4, 4) * F(8) + F(7) * C(4, 3) * F(1) + F(7) * C(4, 2) * F(3) + F(6) * C(3, 4) * F(8) + F(6) * C(3, 3) * F(1) + F(6) * C(3, 2) * F(3) + F(2) * C(2, 4) * F(8) + F(2) * C(2, 3) * F(1) + F(2) * C(2, 2) * F(3) + 0.0;
469 answer(2, 4) = F(7) * C(4, 4) * F(0) + F(7) * C(4, 3) * F(5) + F(7) * C(4, 2) * F(4) + F(6) * C(3, 4) * F(0) + F(6) * C(3, 3) * F(5) + F(6) * C(3, 2) * F(4) + F(2) * C(2, 4) * F(0) + F(2) * C(2, 3) * F(5) + F(2) * C(2, 2) * F(4) + 0.0;
470 answer(2, 5) = F(7) * C(4, 5) * F(0) + F(7) * C(4, 1) * F(5) + F(7) * C(4, 3) * F(4) + F(6) * C(3, 5) * F(0) + F(6) * C(3, 1) * F(5) + F(6) * C(3, 3) * F(4) + F(2) * C(2, 5) * F(0) + F(2) * C(2, 1) * F(5) + F(2) * C(2, 3) * F(4) + 0.0;
471 answer(2, 6) = F(7) * C(4, 5) * F(7) + F(7) * C(4, 1) * F(6) + F(7) * C(4, 3) * F(2) + F(6) * C(3, 5) * F(7) + F(6) * C(3, 1) * F(6) + F(6) * C(3, 3) * F(2) + F(2) * C(2, 5) * F(7) + F(2) * C(2, 1) * F(6) + F(2) * C(2, 3) * F(2) +
S(3);
472 answer(2, 7) = F(7) * C(4, 0) * F(7) + F(7) * C(4, 5) * F(6) + F(7) * C(4, 4) * F(2) + F(6) * C(3, 0) * F(7) + F(6) * C(3, 5) * F(6) + F(6) * C(3, 4) * F(2) + F(2) * C(2, 0) * F(7) + F(2) * C(2, 5) * F(6) + F(2) * C(2, 4) * F(2) +
S(4);
473 answer(2, 8) = F(7) * C(4, 0) * F(8) + F(7) * C(4, 5) * F(1) + F(7) * C(4, 4) * F(3) + F(6) * C(3, 0) * F(8) + F(6) * C(3, 5) * F(1) + F(6) * C(3, 4) * F(3) + F(2) * C(2, 0) * F(8) + F(2) * C(2, 5) * F(1) + F(2) * C(2, 4) * F(3) + 0.0;
474 answer(3, 0) = F(8) * C(4, 0) * F(0) + F(8) * C(4, 5) * F(5) + F(8) * C(4, 4) * F(4) + F(1) * C(3, 0) * F(0) + F(1) * C(3, 5) * F(5) + F(1) * C(3, 4) * F(4) + F(3) * C(2, 0) * F(0) + F(3) * C(2, 5) * F(5) + F(3) * C(2, 4) * F(4) + 0.0;
475 answer(3, 1) = F(8) * C(4, 5) * F(8) + F(8) * C(4, 1) * F(1) + F(8) * C(4, 3) * F(3) + F(1) * C(3, 5) * F(8) + F(1) * C(3, 1) * F(1) + F(1) * C(3, 3) * F(3) + F(3) * C(2, 5) * F(8) + F(3) * C(2, 1) * F(1) + F(3) * C(2, 3) * F(3) +
S(3);
476 answer(3, 2) = F(8) * C(4, 4) * F(7) + F(8) * C(4, 3) * F(6) + F(8) * C(4, 2) * F(2) + F(1) * C(3, 4) * F(7) + F(1) * C(3, 3) * F(6) + F(1) * C(3, 2) * F(2) + F(3) * C(2, 4) * F(7) + F(3) * C(2, 3) * F(6) + F(3) * C(2, 2) * F(2) + 0.0;
477 answer(3, 3) = F(8) * C(4, 4) * F(8) + F(8) * C(4, 3) * F(1) + F(8) * C(4, 2) * F(3) + F(1) * C(3, 4) * F(8) + F(1) * C(3, 3) * F(1) + F(1) * C(3, 2) * F(3) + F(3) * C(2, 4) * F(8) + F(3) * C(2, 3) * F(1) + F(3) * C(2, 2) * F(3) +
S(2);
478 answer(3, 4) = F(8) * C(4, 4) * F(0) + F(8) * C(4, 3) * F(5) + F(8) * C(4, 2) * F(4) + F(1) * C(3, 4) * F(0) + F(1) * C(3, 3) * F(5) + F(1) * C(3, 2) * F(4) + F(3) * C(2, 4) * F(0) + F(3) * C(2, 3) * F(5) + F(3) * C(2, 2) * F(4) + 0.0;
479 answer(3, 5) = F(8) * C(4, 5) * F(0) + F(8) * C(4, 1) * F(5) + F(8) * C(4, 3) * F(4) + F(1) * C(3, 5) * F(0) + F(1) * C(3, 1) * F(5) + F(1) * C(3, 3) * F(4) + F(3) * C(2, 5) * F(0) + F(3) * C(2, 1) * F(5) + F(3) * C(2, 3) * F(4) + 0.0;
480 answer(3, 6) = F(8) * C(4, 5) * F(7) + F(8) * C(4, 1) * F(6) + F(8) * C(4, 3) * F(2) + F(1) * C(3, 5) * F(7) + F(1) * C(3, 1) * F(6) + F(1) * C(3, 3) * F(2) + F(3) * C(2, 5) * F(7) + F(3) * C(2, 1) * F(6) + F(3) * C(2, 3) * F(2) + 0.0;
481 answer(3, 7) = F(8) * C(4, 0) * F(7) + F(8) * C(4, 5) * F(6) + F(8) * C(4, 4) * F(2) + F(1) * C(3, 0) * F(7) + F(1) * C(3, 5) * F(6) + F(1) * C(3, 4) * F(2) + F(3) * C(2, 0) * F(7) + F(3) * C(2, 5) * F(6) + F(3) * C(2, 4) * F(2) + 0.0;
482 answer(3, 8) = F(8) * C(4, 0) * F(8) + F(8) * C(4, 5) * F(1) + F(8) * C(4, 4) * F(3) + F(1) * C(3, 0) * F(8) + F(1) * C(3, 5) * F(1) + F(1) * C(3, 4) * F(3) + F(3) * C(2, 0) * F(8) + F(3) * C(2, 5) * F(1) + F(3) * C(2, 4) * F(3) +
S(4);
483 answer(4, 0) = F(0) * C(4, 0) * F(0) + F(0) * C(4, 5) * F(5) + F(0) * C(4, 4) * F(4) + F(5) * C(3, 0) * F(0) + F(5) * C(3, 5) * F(5) + F(5) * C(3, 4) * F(4) + F(4) * C(2, 0) * F(0) + F(4) * C(2, 5) * F(5) + F(4) * C(2, 4) * F(4) +
S(4);
484 answer(4, 1) = F(0) * C(4, 5) * F(8) + F(0) * C(4, 1) * F(1) + F(0) * C(4, 3) * F(3) + F(5) * C(3, 5) * F(8) + F(5) * C(3, 1) * F(1) + F(5) * C(3, 3) * F(3) + F(4) * C(2, 5) * F(8) + F(4) * C(2, 1) * F(1) + F(4) * C(2, 3) * F(3) + 0.0;
485 answer(4, 2) = F(0) * C(4, 4) * F(7) + F(0) * C(4, 3) * F(6) + F(0) * C(4, 2) * F(2) + F(5) * C(3, 4) * F(7) + F(5) * C(3, 3) * F(6) + F(5) * C(3, 2) * F(2) + F(4) * C(2, 4) * F(7) + F(4) * C(2, 3) * F(6) + F(4) * C(2, 2) * F(2) + 0.0;
486 answer(4, 3) = F(0) * C(4, 4) * F(8) + F(0) * C(4, 3) * F(1) + F(0) * C(4, 2) * F(3) + F(5) * C(3, 4) * F(8) + F(5) * C(3, 3) * F(1) + F(5) * C(3, 2) * F(3) + F(4) * C(2, 4) * F(8) + F(4) * C(2, 3) * F(1) + F(4) * C(2, 2) * F(3) + 0.0;
487 answer(4, 4) = F(0) * C(4, 4) * F(0) + F(0) * C(4, 3) * F(5) + F(0) * C(4, 2) * F(4) + F(5) * C(3, 4) * F(0) + F(5) * C(3, 3) * F(5) + F(5) * C(3, 2) * F(4) + F(4) * C(2, 4) * F(0) + F(4) * C(2, 3) * F(5) + F(4) * C(2, 2) * F(4) +
S(2);
488 answer(4, 5) = F(0) * C(4, 5) * F(0) + F(0) * C(4, 1) * F(5) + F(0) * C(4, 3) * F(4) + F(5) * C(3, 5) * F(0) + F(5) * C(3, 1) * F(5) + F(5) * C(3, 3) * F(4) + F(4) * C(2, 5) * F(0) + F(4) * C(2, 1) * F(5) + F(4) * C(2, 3) * F(4) +
S(3);
489 answer(4, 6) = F(0) * C(4, 5) * F(7) + F(0) * C(4, 1) * F(6) + F(0) * C(4, 3) * F(2) + F(5) * C(3, 5) * F(7) + F(5) * C(3, 1) * F(6) + F(5) * C(3, 3) * F(2) + F(4) * C(2, 5) * F(7) + F(4) * C(2, 1) * F(6) + F(4) * C(2, 3) * F(2) + 0.0;
490 answer(4, 7) = F(0) * C(4, 0) * F(7) + F(0) * C(4, 5) * F(6) + F(0) * C(4, 4) * F(2) + F(5) * C(3, 0) * F(7) + F(5) * C(3, 5) * F(6) + F(5) * C(3, 4) * F(2) + F(4) * C(2, 0) * F(7) + F(4) * C(2, 5) * F(6) + F(4) * C(2, 4) * F(2) + 0.0;
491 answer(4, 8) = F(0) * C(4, 0) * F(8) + F(0) * C(4, 5) * F(1) + F(0) * C(4, 4) * F(3) + F(5) * C(3, 0) * F(8) + F(5) * C(3, 5) * F(1) + F(5) * C(3, 4) * F(3) + F(4) * C(2, 0) * F(8) + F(4) * C(2, 5) * F(1) + F(4) * C(2, 4) * F(3) + 0.0;
492 answer(5, 0) = F(0) * C(5, 0) * F(0) + F(0) * C(5, 5) * F(5) + F(0) * C(5, 4) * F(4) + F(5) * C(1, 0) * F(0) + F(5) * C(1, 5) * F(5) + F(5) * C(1, 4) * F(4) + F(4) * C(3, 0) * F(0) + F(4) * C(3, 5) * F(5) + F(4) * C(3, 4) * F(4) +
S(5);
493 answer(5, 1) = F(0) * C(5, 5) * F(8) + F(0) * C(5, 1) * F(1) + F(0) * C(5, 3) * F(3) + F(5) * C(1, 5) * F(8) + F(5) * C(1, 1) * F(1) + F(5) * C(1, 3) * F(3) + F(4) * C(3, 5) * F(8) + F(4) * C(3, 1) * F(1) + F(4) * C(3, 3) * F(3) + 0.0;
494 answer(5, 2) = F(0) * C(5, 4) * F(7) + F(0) * C(5, 3) * F(6) + F(0) * C(5, 2) * F(2) + F(5) * C(1, 4) * F(7) + F(5) * C(1, 3) * F(6) + F(5) * C(1, 2) * F(2) + F(4) * C(3, 4) * F(7) + F(4) * C(3, 3) * F(6) + F(4) * C(3, 2) * F(2) + 0.0;
495 answer(5, 3) = F(0) * C(5, 4) * F(8) + F(0) * C(5, 3) * F(1) + F(0) * C(5, 2) * F(3) + F(5) * C(1, 4) * F(8) + F(5) * C(1, 3) * F(1) + F(5) * C(1, 2) * F(3) + F(4) * C(3, 4) * F(8) + F(4) * C(3, 3) * F(1) + F(4) * C(3, 2) * F(3) + 0.0;
496 answer(5, 4) = F(0) * C(5, 4) * F(0) + F(0) * C(5, 3) * F(5) + F(0) * C(5, 2) * F(4) + F(5) * C(1, 4) * F(0) + F(5) * C(1, 3) * F(5) + F(5) * C(1, 2) * F(4) + F(4) * C(3, 4) * F(0) + F(4) * C(3, 3) * F(5) + F(4) * C(3, 2) * F(4) +
S(3);
497 answer(5, 5) = F(0) * C(5, 5) * F(0) + F(0) * C(5, 1) * F(5) + F(0) * C(5, 3) * F(4) + F(5) * C(1, 5) * F(0) + F(5) * C(1, 1) * F(5) + F(5) * C(1, 3) * F(4) + F(4) * C(3, 5) * F(0) + F(4) * C(3, 1) * F(5) + F(4) * C(3, 3) * F(4) +
S(1);
498 answer(5, 6) = F(0) * C(5, 5) * F(7) + F(0) * C(5, 1) * F(6) + F(0) * C(5, 3) * F(2) + F(5) * C(1, 5) * F(7) + F(5) * C(1, 1) * F(6) + F(5) * C(1, 3) * F(2) + F(4) * C(3, 5) * F(7) + F(4) * C(3, 1) * F(6) + F(4) * C(3, 3) * F(2) + 0.0;
499 answer(5, 7) = F(0) * C(5, 0) * F(7) + F(0) * C(5, 5) * F(6) + F(0) * C(5, 4) * F(2) + F(5) * C(1, 0) * F(7) + F(5) * C(1, 5) * F(6) + F(5) * C(1, 4) * F(2) + F(4) * C(3, 0) * F(7) + F(4) * C(3, 5) * F(6) + F(4) * C(3, 4) * F(2) + 0.0;
500 answer(5, 8) = F(0) * C(5, 0) * F(8) + F(0) * C(5, 5) * F(1) + F(0) * C(5, 4) * F(3) + F(5) * C(1, 0) * F(8) + F(5) * C(1, 5) * F(1) + F(5) * C(1, 4) * F(3) + F(4) * C(3, 0) * F(8) + F(4) * C(3, 5) * F(1) + F(4) * C(3, 4) * F(3) + 0.0;
501 answer(6, 0) = F(7) * C(5, 0) * F(0) + F(7) * C(5, 5) * F(5) + F(7) * C(5, 4) * F(4) + F(6) * C(1, 0) * F(0) + F(6) * C(1, 5) * F(5) + F(6) * C(1, 4) * F(4) + F(2) * C(3, 0) * F(0) + F(2) * C(3, 5) * F(5) + F(2) * C(3, 4) * F(4) + 0.0;
502 answer(6, 1) = F(7) * C(5, 5) * F(8) + F(7) * C(5, 1) * F(1) + F(7) * C(5, 3) * F(3) + F(6) * C(1, 5) * F(8) + F(6) * C(1, 1) * F(1) + F(6) * C(1, 3) * F(3) + F(2) * C(3, 5) * F(8) + F(2) * C(3, 1) * F(1) + F(2) * C(3, 3) * F(3) + 0.0;
503 answer(6, 2) = F(7) * C(5, 4) * F(7) + F(7) * C(5, 3) * F(6) + F(7) * C(5, 2) * F(2) + F(6) * C(1, 4) * F(7) + F(6) * C(1, 3) * F(6) + F(6) * C(1, 2) * F(2) + F(2) * C(3, 4) * F(7) + F(2) * C(3, 3) * F(6) + F(2) * C(3, 2) * F(2) +
S(3);
504 answer(6, 3) = F(7) * C(5, 4) * F(8) + F(7) * C(5, 3) * F(1) + F(7) * C(5, 2) * F(3) + F(6) * C(1, 4) * F(8) + F(6) * C(1, 3) * F(1) + F(6) * C(1, 2) * F(3) + F(2) * C(3, 4) * F(8) + F(2) * C(3, 3) * F(1) + F(2) * C(3, 2) * F(3) + 0.0;
505 answer(6, 4) = F(7) * C(5, 4) * F(0) + F(7) * C(5, 3) * F(5) + F(7) * C(5, 2) * F(4) + F(6) * C(1, 4) * F(0) + F(6) * C(1, 3) * F(5) + F(6) * C(1, 2) * F(4) + F(2) * C(3, 4) * F(0) + F(2) * C(3, 3) * F(5) + F(2) * C(3, 2) * F(4) + 0.0;
506 answer(6, 5) = F(7) * C(5, 5) * F(0) + F(7) * C(5, 1) * F(5) + F(7) * C(5, 3) * F(4) + F(6) * C(1, 5) * F(0) + F(6) * C(1, 1) * F(5) + F(6) * C(1, 3) * F(4) + F(2) * C(3, 5) * F(0) + F(2) * C(3, 1) * F(5) + F(2) * C(3, 3) * F(4) + 0.0;
507 answer(6, 6) = F(7) * C(5, 5) * F(7) + F(7) * C(5, 1) * F(6) + F(7) * C(5, 3) * F(2) + F(6) * C(1, 5) * F(7) + F(6) * C(1, 1) * F(6) + F(6) * C(1, 3) * F(2) + F(2) * C(3, 5) * F(7) + F(2) * C(3, 1) * F(6) + F(2) * C(3, 3) * F(2) +
S(1);
508 answer(6, 7) = F(7) * C(5, 0) * F(7) + F(7) * C(5, 5) * F(6) + F(7) * C(5, 4) * F(2) + F(6) * C(1, 0) * F(7) + F(6) * C(1, 5) * F(6) + F(6) * C(1, 4) * F(2) + F(2) * C(3, 0) * F(7) + F(2) * C(3, 5) * F(6) + F(2) * C(3, 4) * F(2) +
S(5);
509 answer(6, 8) = F(7) * C(5, 0) * F(8) + F(7) * C(5, 5) * F(1) + F(7) * C(5, 4) * F(3) + F(6) * C(1, 0) * F(8) + F(6) * C(1, 5) * F(1) + F(6) * C(1, 4) * F(3) + F(2) * C(3, 0) * F(8) + F(2) * C(3, 5) * F(1) + F(2) * C(3, 4) * F(3) + 0.0;
510 answer(7, 0) = F(7) * C(0, 0) * F(0) + F(7) * C(0, 5) * F(5) + F(7) * C(0, 4) * F(4) + F(6) * C(5, 0) * F(0) + F(6) * C(5, 5) * F(5) + F(6) * C(5, 4) * F(4) + F(2) * C(4, 0) * F(0) + F(2) * C(4, 5) * F(5) + F(2) * C(4, 4) * F(4) + 0.0;
511 answer(7, 1) = F(7) * C(0, 5) * F(8) + F(7) * C(0, 1) * F(1) + F(7) * C(0, 3) * F(3) + F(6) * C(5, 5) * F(8) + F(6) * C(5, 1) * F(1) + F(6) * C(5, 3) * F(3) + F(2) * C(4, 5) * F(8) + F(2) * C(4, 1) * F(1) + F(2) * C(4, 3) * F(3) + 0.0;
512 answer(7, 2) = F(7) * C(0, 4) * F(7) + F(7) * C(0, 3) * F(6) + F(7) * C(0, 2) * F(2) + F(6) * C(5, 4) * F(7) + F(6) * C(5, 3) * F(6) + F(6) * C(5, 2) * F(2) + F(2) * C(4, 4) * F(7) + F(2) * C(4, 3) * F(6) + F(2) * C(4, 2) * F(2) +
S(4);
513 answer(7, 3) = F(7) * C(0, 4) * F(8) + F(7) * C(0, 3) * F(1) + F(7) * C(0, 2) * F(3) + F(6) * C(5, 4) * F(8) + F(6) * C(5, 3) * F(1) + F(6) * C(5, 2) * F(3) + F(2) * C(4, 4) * F(8) + F(2) * C(4, 3) * F(1) + F(2) * C(4, 2) * F(3) + 0.0;
514 answer(7, 4) = F(7) * C(0, 4) * F(0) + F(7) * C(0, 3) * F(5) + F(7) * C(0, 2) * F(4) + F(6) * C(5, 4) * F(0) + F(6) * C(5, 3) * F(5) + F(6) * C(5, 2) * F(4) + F(2) * C(4, 4) * F(0) + F(2) * C(4, 3) * F(5) + F(2) * C(4, 2) * F(4) + 0.0;
515 answer(7, 5) = F(7) * C(0, 5) * F(0) + F(7) * C(0, 1) * F(5) + F(7) * C(0, 3) * F(4) + F(6) * C(5, 5) * F(0) + F(6) * C(5, 1) * F(5) + F(6) * C(5, 3) * F(4) + F(2) * C(4, 5) * F(0) + F(2) * C(4, 1) * F(5) + F(2) * C(4, 3) * F(4) + 0.0;
516 answer(7, 6) = F(7) * C(0, 5) * F(7) + F(7) * C(0, 1) * F(6) + F(7) * C(0, 3) * F(2) + F(6) * C(5, 5) * F(7) + F(6) * C(5, 1) * F(6) + F(6) * C(5, 3) * F(2) + F(2) * C(4, 5) * F(7) + F(2) * C(4, 1) * F(6) + F(2) * C(4, 3) * F(2) +
S(5);
517 answer(7, 7) = F(7) * C(0, 0) * F(7) + F(7) * C(0, 5) * F(6) + F(7) * C(0, 4) * F(2) + F(6) * C(5, 0) * F(7) + F(6) * C(5, 5) * F(6) + F(6) * C(5, 4) * F(2) + F(2) * C(4, 0) * F(7) + F(2) * C(4, 5) * F(6) + F(2) * C(4, 4) * F(2) +
S(0);
518 answer(7, 8) = F(7) * C(0, 0) * F(8) + F(7) * C(0, 5) * F(1) + F(7) * C(0, 4) * F(3) + F(6) * C(5, 0) * F(8) + F(6) * C(5, 5) * F(1) + F(6) * C(5, 4) * F(3) + F(2) * C(4, 0) * F(8) + F(2) * C(4, 5) * F(1) + F(2) * C(4, 4) * F(3) + 0.0;
519 answer(8, 0) = F(8) * C(0, 0) * F(0) + F(8) * C(0, 5) * F(5) + F(8) * C(0, 4) * F(4) + F(1) * C(5, 0) * F(0) + F(1) * C(5, 5) * F(5) + F(1) * C(5, 4) * F(4) + F(3) * C(4, 0) * F(0) + F(3) * C(4, 5) * F(5) + F(3) * C(4, 4) * F(4) + 0.0;
520 answer(8, 1) = F(8) * C(0, 5) * F(8) + F(8) * C(0, 1) * F(1) + F(8) * C(0, 3) * F(3) + F(1) * C(5, 5) * F(8) + F(1) * C(5, 1) * F(1) + F(1) * C(5, 3) * F(3) + F(3) * C(4, 5) * F(8) + F(3) * C(4, 1) * F(1) + F(3) * C(4, 3) * F(3) +
S(5);
521 answer(8, 2) = F(8) * C(0, 4) * F(7) + F(8) * C(0, 3) * F(6) + F(8) * C(0, 2) * F(2) + F(1) * C(5, 4) * F(7) + F(1) * C(5, 3) * F(6) + F(1) * C(5, 2) * F(2) + F(3) * C(4, 4) * F(7) + F(3) * C(4, 3) * F(6) + F(3) * C(4, 2) * F(2) + 0.0;
522 answer(8, 3) = F(8) * C(0, 4) * F(8) + F(8) * C(0, 3) * F(1) + F(8) * C(0, 2) * F(3) + F(1) * C(5, 4) * F(8) + F(1) * C(5, 3) * F(1) + F(1) * C(5, 2) * F(3) + F(3) * C(4, 4) * F(8) + F(3) * C(4, 3) * F(1) + F(3) * C(4, 2) * F(3) +
S(4);
523 answer(8, 4) = F(8) * C(0, 4) * F(0) + F(8) * C(0, 3) * F(5) + F(8) * C(0, 2) * F(4) + F(1) * C(5, 4) * F(0) + F(1) * C(5, 3) * F(5) + F(1) * C(5, 2) * F(4) + F(3) * C(4, 4) * F(0) + F(3) * C(4, 3) * F(5) + F(3) * C(4, 2) * F(4) + 0.0;
524 answer(8, 5) = F(8) * C(0, 5) * F(0) + F(8) * C(0, 1) * F(5) + F(8) * C(0, 3) * F(4) + F(1) * C(5, 5) * F(0) + F(1) * C(5, 1) * F(5) + F(1) * C(5, 3) * F(4) + F(3) * C(4, 5) * F(0) + F(3) * C(4, 1) * F(5) + F(3) * C(4, 3) * F(4) + 0.0;
525 answer(8, 6) = F(8) * C(0, 5) * F(7) + F(8) * C(0, 1) * F(6) + F(8) * C(0, 3) * F(2) + F(1) * C(5, 5) * F(7) + F(1) * C(5, 1) * F(6) + F(1) * C(5, 3) * F(2) + F(3) * C(4, 5) * F(7) + F(3) * C(4, 1) * F(6) + F(3) * C(4, 3) * F(2) + 0.0;
526 answer(8, 7) = F(8) * C(0, 0) * F(7) + F(8) * C(0, 5) * F(6) + F(8) * C(0, 4) * F(2) + F(1) * C(5, 0) * F(7) + F(1) * C(5, 5) * F(6) + F(1) * C(5, 4) * F(2) + F(3) * C(4, 0) * F(7) + F(3) * C(4, 5) * F(6) + F(3) * C(4, 4) * F(2) + 0.0;
527 answer(8, 8) = F(8) * C(0, 0) * F(8) + F(8) * C(0, 5) * F(1) + F(8) * C(0, 4) * F(3) + F(1) * C(5, 0) * F(8) + F(1) * C(5, 5) * F(1) + F(1) * C(5, 4) * F(3) + F(3) * C(4, 0) * F(8) + F(3) * C(4, 5) * F(1) + F(3) * C(4, 4) * F(3) +
S(0);
537 for (
int i = 1; i <= 3; i++ ) {
538 for (
int j = 1; j <= 3; j++ ) {
539 for (
int k = 1; k <= 3; k++ ) {
540 for (
int l = 1; l <= 3; l++ ) {
541 for (
int m = 1; m <= 3; m++ ) {
542 for (
int n = 1; n <= 3; n++ ) {
543 answer.
at(
giveVI(i, j),
giveVI(k, l) ) += I.
at(i, k) * S.
at(
giveSymVI(j, l) ) + F.
at(
giveVI(i, m) ) * F.
at(
giveVI(k, n) ) * C.
at(
giveSymVI(m, j),
giveSymVI(n, l) );
552 }
else if ( matMode == _PlaneStress ) {
556 answer(0, 0) = F(0) * C(0, 0) * F(0) + F(0) * C(0, 2) * F(2) + F(2) * C(2, 0) * F(0) + F(2) * C(2, 2) * F(2) +
S(0);
557 answer(0, 1) = F(0) * C(0, 2) * F(3) + F(0) * C(0, 1) * F(1) + F(2) * C(2, 2) * F(3) + F(2) * C(2, 1) * F(1) + 0.0;
558 answer(0, 2) = F(0) * C(0, 2) * F(0) + F(0) * C(0, 1) * F(2) + F(2) * C(2, 2) * F(0) + F(2) * C(2, 1) * F(2) +
S(2);
559 answer(0, 3) = F(0) * C(0, 0) * F(3) + F(0) * C(0, 2) * F(1) + F(2) * C(2, 0) * F(3) + F(2) * C(2, 2) * F(1) + 0.0;
560 answer(1, 0) = F(3) * C(2, 0) * F(0) + F(3) * C(2, 2) * F(2) + F(1) * C(1, 0) * F(0) + F(1) * C(1, 2) * F(2) + 0.0;
561 answer(1, 1) = F(3) * C(2, 2) * F(3) + F(3) * C(2, 1) * F(1) + F(1) * C(1, 2) * F(3) + F(1) * C(1, 1) * F(1) +
S(1);
562 answer(1, 2) = F(3) * C(2, 2) * F(0) + F(3) * C(2, 1) * F(2) + F(1) * C(1, 2) * F(0) + F(1) * C(1, 1) * F(2) + 0.0;
563 answer(1, 3) = F(3) * C(2, 0) * F(3) + F(3) * C(2, 2) * F(1) + F(1) * C(1, 0) * F(3) + F(1) * C(1, 2) * F(1) +
S(2);
564 answer(2, 0) = F(0) * C(2, 0) * F(0) + F(0) * C(2, 2) * F(2) + F(2) * C(1, 0) * F(0) + F(2) * C(1, 2) * F(2) +
S(2);
565 answer(2, 1) = F(0) * C(2, 2) * F(3) + F(0) * C(2, 1) * F(1) + F(2) * C(1, 2) * F(3) + F(2) * C(1, 1) * F(1) + 0.0;
566 answer(2, 2) = F(0) * C(2, 2) * F(0) + F(0) * C(2, 1) * F(2) + F(2) * C(1, 2) * F(0) + F(2) * C(1, 1) * F(2) +
S(1);
567 answer(2, 3) = F(0) * C(2, 0) * F(3) + F(0) * C(2, 2) * F(1) + F(2) * C(1, 0) * F(3) + F(2) * C(1, 2) * F(1) + 0.0;
568 answer(3, 0) = F(3) * C(0, 0) * F(0) + F(3) * C(0, 2) * F(2) + F(1) * C(2, 0) * F(0) + F(1) * C(2, 2) * F(2) + 0.0;
569 answer(3, 1) = F(3) * C(0, 2) * F(3) + F(3) * C(0, 1) * F(1) + F(1) * C(2, 2) * F(3) + F(1) * C(2, 1) * F(1) +
S(2);
570 answer(3, 2) = F(3) * C(0, 2) * F(0) + F(3) * C(0, 1) * F(2) + F(1) * C(2, 2) * F(0) + F(1) * C(2, 1) * F(2) + 0.0;
571 answer(3, 3) = F(3) * C(0, 0) * F(3) + F(3) * C(0, 2) * F(1) + F(1) * C(2, 0) * F(3) + F(1) * C(2, 2) * F(1) +
S(0);
572 }
else if ( matMode == _PlaneStrain ) {
576 answer(0, 0) = F(0) * C(0, 0) * F(0) + F(0) * C(0, 3) * F(3) + F(3) * C(3, 0) * F(0) + F(3) * C(3, 3) * F(3) +
S(0);
577 answer(0, 1) = F(0) * C(0, 3) * F(4) + F(0) * C(0, 1) * F(1) + F(3) * C(3, 3) * F(4) + F(3) * C(3, 1) * F(1) + 0.0;
578 answer(0, 2) = F(0) * C(0, 2) * F(2) + F(3) * C(3, 2) * F(2) + 0.0;
579 answer(0, 3) = F(0) * C(0, 3) * F(0) + F(0) * C(0, 1) * F(3) + F(3) * C(3, 3) * F(0) + F(3) * C(3, 1) * F(3) +
S(3);
580 answer(0, 4) = F(0) * C(0, 0) * F(4) + F(0) * C(0, 3) * F(1) + F(3) * C(3, 0) * F(4) + F(3) * C(3, 3) * F(1) + 0.0;
581 answer(1, 0) = F(4) * C(3, 0) * F(0) + F(4) * C(3, 3) * F(3) + F(1) * C(1, 0) * F(0) + F(1) * C(1, 3) * F(3) + 0.0;
582 answer(1, 1) = F(4) * C(3, 3) * F(4) + F(4) * C(3, 1) * F(1) + F(1) * C(1, 3) * F(4) + F(1) * C(1, 1) * F(1) +
S(1);
583 answer(1, 2) = F(4) * C(3, 2) * F(2) + F(1) * C(1, 2) * F(2) + 0.0;
584 answer(1, 3) = F(4) * C(3, 3) * F(0) + F(4) * C(3, 1) * F(3) + F(1) * C(1, 3) * F(0) + F(1) * C(1, 1) * F(3) + 0.0;
585 answer(1, 4) = F(4) * C(3, 0) * F(4) + F(4) * C(3, 3) * F(1) + F(1) * C(1, 0) * F(4) + F(1) * C(1, 3) * F(1) +
S(3);
586 answer(2, 0) = F(2) * C(2, 0) * F(0) + F(2) * C(2, 3) * F(3) + 0.0;
587 answer(2, 1) = F(2) * C(2, 3) * F(4) + F(2) * C(2, 1) * F(1) + 0.0;
588 answer(2, 2) = F(2) * C(2, 2) * F(2) +
S(2);
589 answer(2, 3) = F(2) * C(2, 3) * F(0) + F(2) * C(2, 1) * F(3) + 0.0;
590 answer(2, 4) = F(2) * C(2, 0) * F(4) + F(2) * C(2, 3) * F(1) + 0.0;
591 answer(3, 0) = F(0) * C(3, 0) * F(0) + F(0) * C(3, 3) * F(3) + F(3) * C(1, 0) * F(0) + F(3) * C(1, 3) * F(3) +
S(3);
592 answer(3, 1) = F(0) * C(3, 3) * F(4) + F(0) * C(3, 1) * F(1) + F(3) * C(1, 3) * F(4) + F(3) * C(1, 1) * F(1) + 0.0;
593 answer(3, 2) = F(0) * C(3, 2) * F(2) + F(3) * C(1, 2) * F(2) + 0.0;
594 answer(3, 3) = F(0) * C(3, 3) * F(0) + F(0) * C(3, 1) * F(3) + F(3) * C(1, 3) * F(0) + F(3) * C(1, 1) * F(3) +
S(1);
595 answer(3, 4) = F(0) * C(3, 0) * F(4) + F(0) * C(3, 3) * F(1) + F(3) * C(1, 0) * F(4) + F(3) * C(1, 3) * F(1) + 0.0;
596 answer(4, 0) = F(4) * C(0, 0) * F(0) + F(4) * C(0, 3) * F(3) + F(1) * C(3, 0) * F(0) + F(1) * C(3, 3) * F(3) + 0.0;
597 answer(4, 1) = F(4) * C(0, 3) * F(4) + F(4) * C(0, 1) * F(1) + F(1) * C(3, 3) * F(4) + F(1) * C(3, 1) * F(1) +
S(3);
598 answer(4, 2) = F(4) * C(0, 2) * F(2) + F(1) * C(3, 2) * F(2) + 0.0;
599 answer(4, 3) = F(4) * C(0, 3) * F(0) + F(4) * C(0, 1) * F(3) + F(1) * C(3, 3) * F(0) + F(1) * C(3, 1) * F(3) + 0.0;
600 answer(4, 4) = F(4) * C(0, 0) * F(4) + F(4) * C(0, 3) * F(1) + F(1) * C(3, 0) * F(4) + F(1) * C(3, 3) * F(1) +
S(0);
601 }
else if ( matMode == _1dMat ) {
606 answer(0, 0) = F(0) * C(0, 0) * F(0) +
S(0);
778 answer = reducedStrainVector;
780 if ( epsilonTemperature.
giveSize() ) {
781 answer.
subtract(epsilonTemperature);
792 answer = reducedStrainVector;
794 if ( epsilonTemperature.
giveSize() ) {
795 answer.
subtract(epsilonTemperature);
824 for (
int i = 1; i <= mask.
giveSize(); i++ ) {
825 answer.
at( mask.
at(i) ) = i;
850 case _3dDegeneratedShell:
927 case _PlaneStressRot:
963 case _2dPlateSubSoil:
1007 for (
int i = 1; i <= 9; i++ ) {
1059 invAnswer.
at(1, 1) = invMat3d.
at(1, 1);
1060 invAnswer.
at(1, 2) = invMat3d.
at(1, 2);
1061 invAnswer.
at(1, 3) = invMat3d.
at(1, 6);
1063 invAnswer.
at(2, 1) = invMat3d.
at(2, 1);
1064 invAnswer.
at(2, 2) = invMat3d.
at(2, 2);
1065 invAnswer.
at(2, 3) = invMat3d.
at(2, 6);
1067 invAnswer.
at(3, 1) = invMat3d.
at(6, 1);
1068 invAnswer.
at(3, 2) = invMat3d.
at(6, 2);
1069 invAnswer.
at(3, 3) = invMat3d.
at(6, 6);
1091 answer.
at(1, 1) = m3d.
at(1, 1);
1092 answer.
at(1, 2) = m3d.
at(1, 2);
1093 answer.
at(1, 4) = m3d.
at(1, 6);
1095 answer.
at(2, 1) = m3d.
at(2, 1);
1096 answer.
at(2, 2) = m3d.
at(2, 2);
1097 answer.
at(2, 4) = m3d.
at(2, 6);
1099 answer.
at(3, 1) = m3d.
at(3, 1);
1100 answer.
at(3, 2) = m3d.
at(3, 2);
1101 answer.
at(3, 4) = m3d.
at(3, 6);
1103 answer.
at(4, 1) = m3d.
at(6, 1);
1104 answer.
at(4, 2) = m3d.
at(6, 2);
1105 answer.
at(4, 4) = m3d.
at(6, 6);
1123 val11 = invMat3d.
at(1, 1);
1125 answer.
at(1, 1) = 1. / val11;
1144 invMatLayer.
at(1, 1) = invMat3d.
at(1, 1);
1145 invMatLayer.
at(1, 2) = invMat3d.
at(1, 5);
1146 invMatLayer.
at(2, 1) = invMat3d.
at(5, 1);
1147 invMatLayer.
at(2, 2) = invMat3d.
at(5, 5);
1169 for (
int i = 1; i <= 2; i++ ) {
1170 for (
int j = 1; j <= 2; j++ ) {
1171 invMatLayer.
at(i, j) = invMat3d.
at(i, j);
1175 for (
int i = 4; i <= 6; i++ ) {
1176 for (
int j = 4; j <= 6; j++ ) {
1177 invMatLayer.
at(i - 1, j - 1) = invMat3d.
at(i, j);
1181 for (
int i = 1; i <= 2; i++ ) {
1182 for (
int j = 4; j <= 6; j++ ) {
1183 invMatLayer.
at(i, j - 1) = invMat3d.
at(i, j);
1184 invMatLayer.
at(j - 1, i) = invMat3d.
at(j, i);
1206 invMatLayer.
at(1, 1) = invMat3d.
at(1, 1);
1207 invMatLayer.
at(1, 2) = invMat3d.
at(1, 5);
1208 invMatLayer.
at(1, 3) = invMat3d.
at(1, 6);
1209 invMatLayer.
at(2, 1) = invMat3d.
at(5, 1);
1210 invMatLayer.
at(2, 2) = invMat3d.
at(5, 5);
1211 invMatLayer.
at(2, 3) = invMat3d.
at(5, 6);
1212 invMatLayer.
at(3, 1) = invMat3d.
at(6, 1);
1213 invMatLayer.
at(3, 2) = invMat3d.
at(6, 5);
1214 invMatLayer.
at(3, 3) = invMat3d.
at(6, 6);
1228 OOFEM_ERROR(
"No general implementation provided");
1240 OOFEM_ERROR(
"No general implementation provided");
1249 OOFEM_ERROR(
"No general implementation provided");
1257 OOFEM_ERROR(
"No general implementation provided");
1289 if ( !( size == 1 || size == 3 || size == 4 || size == 6 ) ) {
1294 int nonzeroFlag = 0;
1298 answer.
at(1) = s.
at(1);
1300 }
else if ( size == 3 || size == 4 ) {
1302 double ast, dst, D = 0.0;
1305 for (
int i = 1; i <= size; i++ ) {
1306 if ( fabs( s.
at(i) ) > 1.e-20 ) {
1311 if ( nonzeroFlag == 0 ) {
1316 ast = s.
at(1) + s.
at(2);
1317 dst = s.
at(1) - s.
at(2);
1319 D = dst * dst + s.
at(size) * s.
at(size);
1321 D = dst * dst + 4.0 * s.
at(size) * s.
at(size);
1331 answer.
at(1) = 0.5 * ( ast - D );
1332 answer.
at(2) = 0.5 * ( ast + D );
1334 answer.
at(3) = s.
at(3);
1338 double I1 = 0.0, I2 = 0.0, I3 = 0.0, help, s1, s2, s3;
1340 for (
int i = 1; i <= size; i++ ) {
1341 if ( fabs( s.
at(i) ) > 1.e-20 ) {
1348 if ( nonzeroFlag == 0 ) {
1353 I1 = s.
at(1) + s.
at(2) + s.
at(3);
1354 I2 = s.
at(1) * s.
at(2) + s.
at(2) * s.
at(3) + s.
at(3) * s.
at(1) -
1355 ( s.
at(4) * s.
at(4) + s.
at(5) * s.
at(5) + s.
at(6) * s.
at(6) );
1356 I3 = s.
at(1) * s.
at(2) * s.
at(3) + 2. * s.
at(4) * s.
at(5) * s.
at(6) -
1357 ( s.
at(1) * s.
at(4) * s.
at(4) + s.
at(2) * s.
at(5) * s.
at(5) +
1358 s.
at(3) * s.
at(6) * s.
at(6) );
1360 help = ( s.
at(1) + s.
at(2) + s.
at(3) ) / 3.0;
1362 I2 = -( 1. / 6. ) * ( ( s.
at(1) - s.
at(2) ) * ( s.
at(1) - s.
at(2) ) + ( s.
at(2) - s.
at(3) ) * ( s.
at(2) - s.
at(3) ) +
1363 ( s.
at(3) - s.
at(1) ) * ( s.
at(3) - s.
at(1) ) ) - s.
at(4) * s.
at(4) - s.
at(5) * s.
at(5) -
1365 I3 = ( s.
at(1) - help ) * ( s.
at(2) - help ) * ( s.
at(3) - help ) + 2. * s.
at(4) * s.
at(5) * s.
at(6) -
1366 s.
at(5) * s.
at(5) * ( s.
at(2) - help ) - s.
at(4) * s.
at(4) * ( s.
at(1) - help ) -
1367 s.
at(6) * s.
at(6) * ( s.
at(3) - help );
1369 I1 = s.
at(1) + s.
at(2) + s.
at(3);
1370 I2 = s.
at(1) * s.
at(2) + s.
at(2) * s.
at(3) + s.
at(3) * s.
at(1) -
1371 0.25 * ( s.
at(4) * s.
at(4) + s.
at(5) * s.
at(5) + s.
at(6) * s.
at(6) );
1372 I3 = s.
at(1) * s.
at(2) * s.
at(3) +
1373 0.25 * ( s.
at(4) * s.
at(5) * s.
at(6) - s.
at(1) * s.
at(4) * s.
at(4) -
1374 s.
at(2) * s.
at(5) * s.
at(5) - s.
at(3) * s.
at(6) * s.
at(6) );
1385 cubic3r( (
double ) -1., I1, -I2, I3, & s1, & s2, & s3, & n );
1400 if (answer.
at(1) != answer.
at(1)) {
1402 printf(
"%.10e %.10e %.10e\n", I1, I2, I3);
1411 for (
int i = 1; i < answer.
giveSize(); i++ ) {
1412 for (
int j = 1; j < answer.
giveSize(); j++ ) {
1413 if ( answer.
at(j + 1) > answer.
at(j) ) {
1414 swap = answer.
at(j + 1);
1415 answer.
at(j + 1) = answer.
at(j);
1416 answer.
at(j) = swap;
1456 int nonzeroFlag = 0;
1459 if ( !( size == 1 || size == 3 || size == 4 || size == 6 ) ) {
1465 answer.
at(1) = s.
at(1);
1469 }
else if ( size == 3 || size == 4 ) {
1475 for (
int i = 1; i <= size; i++ ) {
1476 if ( fabs( s.
at(i) ) > 1.e-20 ) {
1481 if ( nonzeroFlag == 0 ) {
1488 ss.
at(1, 1) = s.
at(1);
1489 ss.
at(2, 2) = s.
at(2);
1492 ss.
at(1, 2) = ss.
at(2, 1) = 0.5 * s.
at(size);
1494 ss.
at(1, 2) = ss.
at(2, 1) = s.
at(size);
1505 for (
int i = 1; i <= size; i++ ) {
1506 if ( fabs( s.
at(i) ) > 1.e-20 ) {
1511 if ( nonzeroFlag == 0 ) {
1519 ss.
at(1, 1) = s.
at(1);
1520 ss.
at(2, 2) = s.
at(2);
1521 ss.
at(3, 3) = s.
at(3);
1522 ss.
at(1, 2) = ss.
at(2, 1) = s.
at(6);
1523 ss.
at(1, 3) = ss.
at(3, 1) = s.
at(5);
1524 ss.
at(2, 3) = ss.
at(3, 2) = s.
at(4);
1526 help = ( s.
at(1) + s.
at(2) + s.
at(3) ) / 3.0;
1527 ss.
at(1, 1) = s.
at(1) - help;
1528 ss.
at(2, 2) = s.
at(2) - help;
1529 ss.
at(3, 3) = s.
at(3) - help;
1530 ss.
at(1, 2) = ss.
at(2, 1) = s.
at(6);
1531 ss.
at(1, 3) = ss.
at(3, 1) = s.
at(5);
1532 ss.
at(2, 3) = ss.
at(3, 2) = s.
at(4);
1534 ss.
at(1, 1) = s.
at(1);
1535 ss.
at(2, 2) = s.
at(2);
1536 ss.
at(3, 3) = s.
at(3);
1537 ss.
at(1, 2) = ss.
at(2, 1) = 0.5 * s.
at(6);
1538 ss.
at(1, 3) = ss.
at(3, 1) = 0.5 * s.
at(5);
1539 ss.
at(2, 3) = ss.
at(3, 2) = 0.5 * s.
at(4);
1546 ss.Jacobi(& answer, & dir, & i);
1548 ss.
jaco_(answer, dir, 10);
1556 for (
int ii = 1; ii < nval; ii++ ) {
1557 for (
int jj = 1; jj < nval; jj++ ) {
1558 if ( answer.
at(jj + 1) > answer.
at(jj) ) {
1560 swap = answer.
at(jj + 1);
1561 answer.
at(jj + 1) = answer.
at(jj);
1562 answer.
at(jj) = swap;
1563 for (
int kk = 1; kk <= nval; kk++ ) {
1564 swap = dir.
at(kk, jj + 1);
1565 dir.
at(kk, jj + 1) = dir.
at(kk, jj);
1566 dir.
at(kk, jj) = swap;
1577 double vol = s[0] + s[1] + s[2];
1578 double mean = vol / 3.0;
1606 strain[0] = 1. / ( 2. * GModulus ) * stress [ 0 ];
1607 strain[1] = 1. / ( 2. * GModulus ) * stress [ 1 ];
1608 strain[2] = 1. / ( 2. * GModulus ) * stress [ 2 ];
1609 strain[3] = 1. / GModulus * stress [ 3 ];
1610 strain[4] = 1. / GModulus * stress [ 4 ];
1611 strain[5] = 1. / GModulus * stress [ 5 ];
1625 stress[0] = 2. * GModulus * strain [ 0 ];
1626 stress[1] = 2. * GModulus * strain [ 1 ];
1627 stress[2] = 2. * GModulus * strain [ 2 ];
1628 stress[3] = GModulus * strain [ 3 ];
1629 stress[4] = GModulus * strain [ 4 ];
1630 stress[5] = GModulus * strain [ 5 ];
1636 double factor = EModulus / ( ( 1. + nu ) * ( 1. - 2. * nu ) );
1639 stress[0] = factor * ( ( 1. - nu ) * strain [ 0 ] + nu * strain [ 1 ] + nu * strain [ 2 ] );
1640 stress[1] = factor * ( nu * strain [ 0 ] + ( 1. - nu ) * strain [ 1 ] + nu * strain [ 2 ] );
1641 stress[2] = factor * ( nu * strain [ 0 ] + nu * strain [ 1 ] + ( 1. - nu ) * strain [ 2 ] );
1642 stress[3] = factor * ( ( ( 1. - 2. * nu ) / 2. ) * strain [ 3 ] );
1643 stress[4] = factor * ( ( ( 1. - 2. * nu ) / 2. ) * strain [ 4 ] );
1644 stress[5] = factor * ( ( ( 1. - 2. * nu ) / 2. ) * strain [ 5 ] );
1651 strain[0] = ( stress [ 0 ] - nu * stress [ 1 ] - nu * stress [ 2 ] ) / EModulus;
1652 strain[1] = ( -nu * stress [ 0 ] + stress [ 1 ] - nu * stress [ 2 ] ) / EModulus;
1653 strain[2] = ( -nu * stress [ 0 ] - nu * stress [ 1 ] + stress [ 2 ] ) / EModulus;
1654 strain[3] = ( 2. * ( 1. + nu ) * stress [ 3 ] ) / EModulus;
1655 strain[4] = ( 2. * ( 1. + nu ) * stress [ 4 ] ) / EModulus;
1656 strain[5] = ( 2. * ( 1. + nu ) * stress [ 5 ] ) / EModulus;
1663 return fabs(s [ 0 ]);
1666 return sqrt(s [ 0 ] * s [ 0 ] + s [ 1 ] * s [ 1 ] + s [ 2 ] * s [ 2 ] +
1667 2. * s [ 3 ] * s [ 3 ] + 2. * s [ 4 ] * s [ 4 ] + 2. * s [ 5 ] * s [ 5 ]);
1677 return s [ 0 ] + s [ 1 ] + s [ 2 ];
1683 return .5 * ( s [ 0 ] * s [ 0 ] + s [ 1 ] * s [ 1 ] + s [ 2 ] * s [ 2 ] ) +
1684 s [ 3 ] * s [ 3 ] + s [ 4 ] * s [ 4 ] + s [ 5 ] * s [ 5 ];
1690 return ( 1. / 3. ) * ( s [ 0 ] * s [ 0 ] * s [ 0 ] + 3. * s [ 0 ] * s [ 5 ] * s [ 5 ] +
1691 3. * s [ 0 ] * s [ 4 ] * s [ 4 ] + 6. * s [ 3 ] * s [ 5 ] * s [ 4 ] +
1692 3. * s [ 1 ] * s [ 5 ] * s [ 5 ] + 3 * s [ 2 ] * s [ 4 ] * s [ 4 ] +
1693 s [ 1 ] * s [ 1 ] * s [ 1 ] + 3. * s [ 1 ] * s [ 3 ] * s [ 3 ] +
1694 3. * s [ 2 ] * s [ 3 ] * s [ 3 ] + s [ 2 ] * s [ 2 ] * s [ 2 ] );
1733 return 1. / 3. * acos(c1);
1742 if ( currentStress == NULL ) {
1746 if ( currentStress->
giveSize() == 3 ) {
1749 return sqrt( currentStress->
at(1) * currentStress->
at(1) + currentStress->
at(2) * currentStress->
at(2)
1750 - currentStress->
at(1) * currentStress->
at(2) + 3 * currentStress->
at(3) * currentStress->
at(3) );
1751 }
else if ( currentStress->
giveSize() == 4 ) {
1753 v1 = ( ( currentStress->
at(1) - currentStress->
at(2) ) * ( currentStress->
at(1) - currentStress->
at(2) ) );
1754 v2 = ( ( currentStress->
at(2) - currentStress->
at(3) ) * ( currentStress->
at(2) - currentStress->
at(3) ) );
1755 v3 = ( ( currentStress->
at(3) - currentStress->
at(1) ) * ( currentStress->
at(3) - currentStress->
at(1) ) );
1757 J2 = ( 1. / 6. ) * ( v1 + v2 + v3 ) + currentStress->
at(4) * currentStress->
at(4);
1759 return sqrt(3 * J2);
1760 }
else if ( currentStress->
giveSize() == 6 ) {
1762 v1 = ( ( currentStress->
at(1) - currentStress->
at(2) ) * ( currentStress->
at(1) - currentStress->
at(2) ) );
1763 v2 = ( ( currentStress->
at(2) - currentStress->
at(3) ) * ( currentStress->
at(2) - currentStress->
at(3) ) );
1764 v3 = ( ( currentStress->
at(3) - currentStress->
at(1) ) * ( currentStress->
at(3) - currentStress->
at(1) ) );
1766 J2 = ( 1. / 6. ) * ( v1 + v2 + v3 ) + currentStress->
at(4) * currentStress->
at(4) +
1767 currentStress->
at(5) * currentStress->
at(5) + currentStress->
at(6) * currentStress->
at(6);
1769 return sqrt(3 * J2);
1799 answer.
at(1, 1) = t.
at(1, 1) * t.
at(1, 1);
1800 answer.
at(1, 2) = t.
at(2, 1) * t.
at(2, 1);
1801 answer.
at(1, 3) = t.
at(3, 1) * t.
at(3, 1);
1802 answer.
at(1, 4) = t.
at(2, 1) * t.
at(3, 1);
1803 answer.
at(1, 5) = t.
at(1, 1) * t.
at(3, 1);
1804 answer.
at(1, 6) = t.
at(1, 1) * t.
at(2, 1);
1806 answer.
at(2, 1) = t.
at(1, 2) * t.
at(1, 2);
1807 answer.
at(2, 2) = t.
at(2, 2) * t.
at(2, 2);
1808 answer.
at(2, 3) = t.
at(3, 2) * t.
at(3, 2);
1809 answer.
at(2, 4) = t.
at(2, 2) * t.
at(3, 2);
1810 answer.
at(2, 5) = t.
at(1, 2) * t.
at(3, 2);
1811 answer.
at(2, 6) = t.
at(1, 2) * t.
at(2, 2);
1813 answer.
at(3, 1) = t.
at(1, 3) * t.
at(1, 3);
1814 answer.
at(3, 2) = t.
at(2, 3) * t.
at(2, 3);
1815 answer.
at(3, 3) = t.
at(3, 3) * t.
at(3, 3);
1816 answer.
at(3, 4) = t.
at(2, 3) * t.
at(3, 3);
1817 answer.
at(3, 5) = t.
at(1, 3) * t.
at(3, 3);
1818 answer.
at(3, 6) = t.
at(1, 3) * t.
at(2, 3);
1820 answer.
at(4, 1) = 2.0 * t.
at(1, 2) * t.
at(1, 3);
1821 answer.
at(4, 2) = 2.0 * t.
at(2, 2) * t.
at(2, 3);
1822 answer.
at(4, 3) = 2.0 * t.
at(3, 2) * t.
at(3, 3);
1823 answer.
at(4, 4) = ( t.
at(2, 2) * t.
at(3, 3) + t.
at(3, 2) * t.
at(2, 3) );
1824 answer.
at(4, 5) = ( t.
at(1, 2) * t.
at(3, 3) + t.
at(3, 2) * t.
at(1, 3) );
1825 answer.
at(4, 6) = ( t.
at(1, 2) * t.
at(2, 3) + t.
at(2, 2) * t.
at(1, 3) );
1827 answer.
at(5, 1) = 2.0 * t.
at(1, 1) * t.
at(1, 3);
1828 answer.
at(5, 2) = 2.0 * t.
at(2, 1) * t.
at(2, 3);
1829 answer.
at(5, 3) = 2.0 * t.
at(3, 1) * t.
at(3, 3);
1830 answer.
at(5, 4) = ( t.
at(2, 1) * t.
at(3, 3) + t.
at(3, 1) * t.
at(2, 3) );
1831 answer.
at(5, 5) = ( t.
at(1, 1) * t.
at(3, 3) + t.
at(3, 1) * t.
at(1, 3) );
1832 answer.
at(5, 6) = ( t.
at(1, 1) * t.
at(2, 3) + t.
at(2, 1) * t.
at(1, 3) );
1834 answer.
at(6, 1) = 2.0 * t.
at(1, 1) * t.
at(1, 2);
1835 answer.
at(6, 2) = 2.0 * t.
at(2, 1) * t.
at(2, 2);
1836 answer.
at(6, 3) = 2.0 * t.
at(3, 1) * t.
at(3, 2);
1837 answer.
at(6, 4) = ( t.
at(2, 1) * t.
at(3, 2) + t.
at(3, 1) * t.
at(2, 2) );
1838 answer.
at(6, 5) = ( t.
at(1, 1) * t.
at(3, 2) + t.
at(3, 1) * t.
at(1, 2) );
1839 answer.
at(6, 6) = ( t.
at(1, 1) * t.
at(2, 2) + t.
at(2, 1) * t.
at(1, 2) );
1866 answer.
at(1, 1) = t.
at(1, 1) * t.
at(1, 1);
1867 answer.
at(1, 2) = t.
at(2, 1) * t.
at(2, 1);
1868 answer.
at(1, 3) = t.
at(1, 1) * t.
at(2, 1);
1870 answer.
at(2, 1) = t.
at(1, 2) * t.
at(1, 2);
1871 answer.
at(2, 2) = t.
at(2, 2) * t.
at(2, 2);
1872 answer.
at(2, 3) = t.
at(1, 2) * t.
at(2, 2);
1874 answer.
at(3, 1) = 2.0 * t.
at(1, 1) * t.
at(1, 2);
1875 answer.
at(3, 2) = 2.0 * t.
at(2, 1) * t.
at(2, 2);
1876 answer.
at(3, 3) = ( t.
at(1, 1) * t.
at(2, 2) + t.
at(2, 1) * t.
at(1, 2) );
1903 answer.
at(1, 1) = t.
at(1, 1) * t.
at(1, 1);
1904 answer.
at(1, 2) = t.
at(2, 1) * t.
at(2, 1);
1905 answer.
at(1, 3) = t.
at(3, 1) * t.
at(3, 1);
1906 answer.
at(1, 4) = 2.0 * t.
at(2, 1) * t.
at(3, 1);
1907 answer.
at(1, 5) = 2.0 * t.
at(1, 1) * t.
at(3, 1);
1908 answer.
at(1, 6) = 2.0 * t.
at(1, 1) * t.
at(2, 1);
1910 answer.
at(2, 1) = t.
at(1, 2) * t.
at(1, 2);
1911 answer.
at(2, 2) = t.
at(2, 2) * t.
at(2, 2);
1912 answer.
at(2, 3) = t.
at(3, 2) * t.
at(3, 2);
1913 answer.
at(2, 4) = 2.0 * t.
at(2, 2) * t.
at(3, 2);
1914 answer.
at(2, 5) = 2.0 * t.
at(1, 2) * t.
at(3, 2);
1915 answer.
at(2, 6) = 2.0 * t.
at(1, 2) * t.
at(2, 2);
1917 answer.
at(3, 1) = t.
at(1, 3) * t.
at(1, 3);
1918 answer.
at(3, 2) = t.
at(2, 3) * t.
at(2, 3);
1919 answer.
at(3, 3) = t.
at(3, 3) * t.
at(3, 3);
1920 answer.
at(3, 4) = 2.0 * t.
at(2, 3) * t.
at(3, 3);
1921 answer.
at(3, 5) = 2.0 * t.
at(1, 3) * t.
at(3, 3);
1922 answer.
at(3, 6) = 2.0 * t.
at(1, 3) * t.
at(2, 3);
1924 answer.
at(4, 1) = t.
at(1, 2) * t.
at(1, 3);
1925 answer.
at(4, 2) = t.
at(2, 2) * t.
at(2, 3);
1926 answer.
at(4, 3) = t.
at(3, 2) * t.
at(3, 3);
1927 answer.
at(4, 4) = ( t.
at(2, 2) * t.
at(3, 3) + t.
at(3, 2) * t.
at(2, 3) );
1928 answer.
at(4, 5) = ( t.
at(1, 2) * t.
at(3, 3) + t.
at(3, 2) * t.
at(1, 3) );
1929 answer.
at(4, 6) = ( t.
at(1, 2) * t.
at(2, 3) + t.
at(2, 2) * t.
at(1, 3) );
1931 answer.
at(5, 1) = t.
at(1, 1) * t.
at(1, 3);
1932 answer.
at(5, 2) = t.
at(2, 1) * t.
at(2, 3);
1933 answer.
at(5, 3) = t.
at(3, 1) * t.
at(3, 3);
1934 answer.
at(5, 4) = ( t.
at(2, 1) * t.
at(3, 3) + t.
at(3, 1) * t.
at(2, 3) );
1935 answer.
at(5, 5) = ( t.
at(1, 1) * t.
at(3, 3) + t.
at(3, 1) * t.
at(1, 3) );
1936 answer.
at(5, 6) = ( t.
at(1, 1) * t.
at(2, 3) + t.
at(2, 1) * t.
at(1, 3) );
1938 answer.
at(6, 1) = t.
at(1, 1) * t.
at(1, 2);
1939 answer.
at(6, 2) = t.
at(2, 1) * t.
at(2, 2);
1940 answer.
at(6, 3) = t.
at(3, 1) * t.
at(3, 2);
1941 answer.
at(6, 4) = ( t.
at(2, 1) * t.
at(3, 2) + t.
at(3, 1) * t.
at(2, 2) );
1942 answer.
at(6, 5) = ( t.
at(1, 1) * t.
at(3, 2) + t.
at(3, 1) * t.
at(1, 2) );
1943 answer.
at(6, 6) = ( t.
at(1, 1) * t.
at(2, 2) + t.
at(2, 1) * t.
at(1, 2) );
1970 answer.
at(1, 1) = t.
at(1, 1) * t.
at(1, 1);
1971 answer.
at(1, 2) = t.
at(2, 1) * t.
at(2, 1);
1972 answer.
at(1, 3) = 2.0 * t.
at(1, 1) * t.
at(2, 1);
1974 answer.
at(2, 1) = t.
at(1, 2) * t.
at(1, 2);
1975 answer.
at(2, 2) = t.
at(2, 2) * t.
at(2, 2);
1976 answer.
at(2, 3) = 2.0 * t.
at(1, 2) * t.
at(2, 2);
1978 answer.
at(3, 1) = t.
at(1, 1) * t.
at(1, 2);
1979 answer.
at(3, 2) = t.
at(2, 1) * t.
at(2, 2);
1980 answer.
at(3, 3) = t.
at(1, 1) * t.
at(2, 2) + t.
at(2, 1) * t.
at(1, 2);
1986 const FloatArray &strainVector,
bool transpose)
2005 const FloatArray &stressVector,
bool transpose)
2037 double cosine, maxCosine, swap;
2060 for (
int i = 1; i <= size - 1; i++ ) {
2063 for (
int j = i; j <= size; j++ ) {
2065 for (
int k = 1; k <= size; k++ ) {
2066 cosine += toPDir->
at(k, i) * pDir->
at(k, j);
2069 cosine = fabs(cosine);
2070 if ( cosine > maxCosine ) {
2079 swap = pVal->
at(maxJ);
2080 pVal->
at(maxJ) = pVal->
at(i);
2082 for (
int k = 1; k <= size; k++ ) {
2083 swap = pDir->
at(k, maxJ);
2084 pDir->
at(k, maxJ) = pDir->
at(k, i);
2085 pDir->
at(k, i) = swap;
2096 if ( type == IST_StressTensor ) {
2099 }
else if ( type == IST_StrainTensor ) {
2102 }
else if ( type == IST_StressTensorTemp ) {
2105 }
else if ( type == IST_StrainTensorTemp ) {
2118 if ( type == IST_StressTensor ) {
2121 }
else if ( type == IST_StressTensor_Reduced ) {
2124 }
else if ( type == IST_vonMisesStress ) {
2129 }
else if ( type == IST_StrainTensor ) {
2143 }
else if ( type == IST_StrainTensor_Reduced ) {
2147 }
else if ( type == IST_StressTensorTemp ) {
2151 }
else if ( type == IST_StrainTensorTemp ) {
2155 }
else if ( type == IST_PrincipalStressTensor || type == IST_PrincipalStressTempTensor ) {
2158 if ( type == IST_PrincipalStressTensor ) {
2168 }
else if ( type == IST_PrincipalStrainTensor || type == IST_PrincipalStrainTempTensor ) {
2171 if ( type == IST_PrincipalStrainTensor ) {
2181 }
else if ( type == IST_PrincStressVector1 || type == IST_PrincStressVector2 || type == IST_PrincStressVector3 ) {
2185 if ( type == IST_PrincStressVector1 ){
2187 }
else if ( type == IST_PrincStressVector2 ){
2193 }
else if ( type == IST_Temperature ) {
2198 if ( ( tf = fm->
giveField(FT_Temperature) ) ) {
2202 if ( ( err = tf->evaluateAt(answer, gcoords, VM_Total, tStep) ) ) {
2211 }
else if ( type == IST_CylindricalStressTensor || type == IST_CylindricalStrainTensor ) {
2215 double l = sqrt( gc.
at(1) * gc.
at(1) + gc.
at(2) * gc.
at(2) );
2217 base.
at(1, 1) = gc.
at(1) / l;
2218 base.
at(2, 1) = gc.
at(2) / l;
2219 base.
at(3, 1) = 0.0;
2221 base.
at(1, 2) = -1.0 * base.
at(2, 1);
2222 base.
at(2, 2) = base.
at(1, 1);
2223 base.
at(3, 2) = 0.0;
2225 base.
at(1, 3) = 0.0;
2226 base.
at(2, 3) = 0.0;
2227 base.
at(3, 3) = 1.0;
2229 if ( type == IST_CylindricalStressTensor ) {
2239 }
else if (type == IST_PlasticStrainTensor ) {
2243 }
else if (type == IST_MaxEquivalentStrainLevel ) {
2247 }
else if ( type == IST_DeformationGradientTensor ) {
2250 }
else if ( type == IST_FirstPKStressTensor ) {
2253 }
else if ( type == IST_EigenStrainTensor ) {
2259 }
else if ( type == IST_ShellForceTensor ) {
2307 if ( ( tf = fm->giveField(FT_Temperature) ) ) {
2312 if ( ( err = tf->evaluateAt(et2, gcoords, mode, tStep) ) ) {
2320 et.
at(1) += et2.
at(1);
2333 if ( mode == VM_Total ) {
2348 OOFEM_ERROR(
"Vector of temperature strains has the size %d which is different with the size of eigenstrain vector %d, element %d", answer.
giveSize(), eigenstrain.
giveSize(), elem->
giveNumber() );
2351 answer.
add(eigenstrain);
2355 answer = eigenstrain;
2400 if ( ( err = tf->evaluateAt(et2, gcoords, mode, tStep) ) ) {
2408 et.
at(1) += et2.
at(1);
2421 if ( mode == VM_Total ) {
2427 answer = fullAnswer;
2435 OOFEM_ERROR(
"Vector of temperature strains has the size %d which is different with the size of eigenstrain vector %d, element %d", answer.
giveSize(), eigenstrain.
giveSize(), elem->
giveNumber() );
2438 answer.
add(eigenstrain);
2442 answer = eigenstrain;
2478 answer.
at(1) = answer.
at(2) = answer.
at(3) = 1.0;
2481 for (
int i = 1; i <= indx.
giveSize(); i++ ) {
2482 answer.
at( indx.
at(i) ) = vec.
at(i);
2515 answer.
resize(size, size);
2545 answer.
at(1) = alpha;
2546 answer.
at(2) = alpha;
2547 answer.
at(3) = alpha;
static int giveSizeOfVoigtSymVector(MaterialMode mmode)
Returns the size of symmetric part of a reduced stress/strain vector according to given mode...
bool contains(int value) const
virtual void giveFirstPKStressVector_1d(FloatArray &answer, GaussPoint *gp, const FloatArray &reducedF, TimeStep *tStep)
Default implementation relies on giveFirstPKStressVector_3d.
InternalStateType
Type representing the physical meaning of element or constitutive model internal variable.
For computing principal stresses from deviatoric stress.
virtual void giveEshelbyStressVector_PlaneStrain(FloatArray &answer, GaussPoint *gp, const FloatArray &reducedF, TimeStep *tStep)
Prototype for computation of Eshelby stress.
static void computePrincipalValues(FloatArray &answer, const FloatArray &s, stressStrainPrincMode mode)
Common functions for convenience.
MaterialMode giveMaterialMode()
Returns corresponding material mode of receiver.
int giveNumberOfColumns() const
Returns number of columns of receiver.
void enumerate(int maxVal)
Resizes receiver and enumerates from 1 to the maximum value given.
void subtract(const FloatArray &src)
Subtracts array src to receiver.
static int giveVoigtSymVectorMask(IntArray &answer, MaterialMode mmode)
The same as giveVoigtVectorMask but returns a mask corresponding to a symmetric second order tensor...
virtual void computeResultingIPTemperatureAt(FloatArray &answer, TimeStep *tStep, GaussPoint *gp, ValueModeType mode)
Computes at given time (tStep) the the resulting temperature component array.
void letTempStrainVectorBe(const FloatArray &v)
Assigns tempStrainVector to given vector v.
static void givePlaneStressVectorTranformationMtrx(FloatMatrix &answer, const FloatMatrix &base, bool transpose=false)
Computes 2d stress vector transformation matrix from standard vector transformation matrix...
virtual void give1dStressStiffMtrx(FloatMatrix &answer, MatResponseMode mmode, GaussPoint *gp, TimeStep *tStep)
Method for computing 1d stiffness matrix of receiver.
virtual MaterialStatus * giveStatus(GaussPoint *gp) const
Returns material status of receiver in given integration point.
std::shared_ptr< Field > FieldPtr
static void applyDeviatoricElasticCompliance(FloatArray &strain, const FloatArray &stress, double EModulus, double nu)
void letTempFVectorBe(const FloatArray &v)
Assigns tempFVector to given vector v.
For computing principal stresses.
virtual void giveFirstPKStressVector_3d(FloatArray &answer, GaussPoint *gp, const FloatArray &reducedF, TimeStep *tStep)
Default implementation relies on giveRealStressVector for second Piola-Kirchoff stress.
virtual void giveRealStressVector_PlaneStrain(FloatArray &answer, GaussPoint *gp, const FloatArray &reducedE, TimeStep *tStep)
Default implementation relies on giveRealStressVector_3d.
For computing principal strains from engineering strains.
void letStrainVectorBe(const FloatArray &v)
Assigns strain vector to given vector v.
virtual void give1dStressStiffMtrx_dPdF(FloatMatrix &answer, MatResponseMode mmode, GaussPoint *gp, TimeStep *tStep)
Domain * domain
Link to domain object, useful for communicating with other FEM components.
virtual void giveFirstPKStressVector_PlaneStrain(FloatArray &answer, GaussPoint *gp, const FloatArray &reducedF, TimeStep *tStep)
Default implementation relies on giveFirstPKStressVector_3d.
bool solveForRhs(const FloatArray &b, FloatArray &answer, bool transpose=false)
Solves the system of linear equations .
static int giveVI(int ind1, int ind2)
virtual void giveFiberStiffMtrx(FloatMatrix &answer, MatResponseMode mmode, GaussPoint *gp, TimeStep *tStep)
Method for computing 1d fiber stiffness matrix of receiver.
static double computeSecondCoordinate(const FloatArray &s)
static void computeDeviatoricVolumetricSum(FloatArray &s, const FloatArray &dev, double mean)
const FloatArray & givePVector() const
Returns the const pointer to receiver's first Piola-Kirchhoff stress vector.
#define OOFEM_SERROR(...)
virtual int giveIPValue(FloatArray &answer, GaussPoint *gp, InternalStateType type, TimeStep *tStep)
Returns the integration point corresponding value in Reduced form.
void zero()
Sets all component to zero.
double & at(int i)
Coefficient access function.
virtual void givePlaneStrainStiffMtrx(FloatMatrix &answer, MatResponseMode mmode, GaussPoint *gp, TimeStep *tStep)
Method for computing plane strain stiffness matrix of receiver.
void beSubMatrixOf(const FloatMatrix &src, int topRow, int bottomRow, int topCol, int bottomCol)
Assigns to the receiver the sub-matrix of another matrix.
ValueModeType
Type representing the mode of UnknownType or CharType, or similar types.
virtual void computeStressIndependentStrainVector_3d(FloatArray &answer, GaussPoint *gp, TimeStep *tStep, ValueModeType mode)
This class implements a structural material status information.
static double computeFirstInvariant(const FloatArray &s)
virtual void giveRealStressVector_Lattice2d(FloatArray &answer, GaussPoint *gp, const FloatArray &reducedE, TimeStep *tStep)
static double computeVonMisesStress(const FloatArray *currentStress)
Computes equivalent of von Mises stress.
void clear()
Clears receiver (zero size).
bool includes(int aKey)
Checks if dictionary includes given key.
static void giveFullSymMatrixForm(FloatMatrix &answer, const FloatMatrix &red, MaterialMode matMode)
Converts the full unsymmetric Voigt matrix (4th order tensor) to reduced form.
oofem::oofegGraphicContext gc[OOFEG_LAST_LAYER]
virtual void give3dMaterialStiffnessMatrix_dCde(FloatMatrix &answer, MatResponseMode mode, GaussPoint *gp, TimeStep *tStep)
static int giveSizeOfVoigtVector(MaterialMode mmode)
Returns the size of reduced stress/strain vector according to given mode.
EngngModel * giveEngngModel()
Returns engineering model to which receiver is associated.
static void applyElasticCompliance(FloatArray &strain, const FloatArray &stress, double EModulus, double nu)
virtual void givePlateLayerStiffMtrx(FloatMatrix &answer, MatResponseMode mmode, GaussPoint *gp, TimeStep *tStep)
Method for computing 2d plate layer stiffness matrix of receiver.
void beVectorForm(const FloatMatrix &aMatrix)
Reciever will be a vector with 9 components formed from a 3x3 matrix.
static void sortPrincDirAndValCloseTo(FloatArray *pVal, FloatMatrix *pDir, FloatMatrix *toPDir)
Method for sorting newly computed principal values (pVal) and corresponding principal directions (pDi...
Dictionary propertyDictionary
Property dictionary.
Abstract base class for all finite elements.
bool isSquare() const
Returns nonzero if receiver is square matrix.
Element * giveElement()
Returns corresponding element to receiver.
static std::vector< std::vector< int > > svIndex
Symmetric Voigt index map.
static void giveStrainVectorTranformationMtrx(FloatMatrix &answer, const FloatMatrix &base, bool transpose=false)
Computes 3d strain vector transformation matrix from standard vector transformation matrix...
virtual void giveInputRecord(DynamicInputRecord &input)
Setups the input record string of receiver.
void give_dPdF_from(const FloatMatrix &dSdE, FloatMatrix &answer, GaussPoint *gp)
void giveStressDependentPartOfStrainVector(FloatArray &answer, GaussPoint *gp, const FloatArray &reducedStrainVector, TimeStep *tStep, ValueModeType mode)
Method for subtracting from reduced space strain vector its stress-independent parts (caused by tempe...
MaterialMode
Type representing material mode of integration point.
FieldManager * giveFieldManager()
virtual void giveRealStressVector_3dBeamSubSoil(FloatArray &answer, GaussPoint *gp, const FloatArray &reducedE, TimeStep *tStep)
static void computePrincipalValDir(FloatArray &answer, FloatMatrix &dir, const FloatArray &s, stressStrainPrincMode mode)
Computes principal values and directions of stress or strain vector.
Class implementing an array of integers.
int & at(int i)
Coefficient access function.
MatResponseMode
Describes the character of characteristic material matrix.
virtual void giveRealStressVector(FloatArray &answer, GaussPoint *gp, const FloatArray &reducedStrain, TimeStep *tStep)
Computes the real stress vector for given total strain and integration point.
static void giveFullSymVectorForm(FloatArray &answer, const FloatArray &vec, MaterialMode matMode)
Converts the reduced unsymmetric Voigt vector (2nd order tensor) to full form.
void beColumnOf(const FloatMatrix &mat, int col)
Reciever will be set to a given column in a matrix.
virtual void givePlaneStressStiffMtrx_dPdF(FloatMatrix &answer, MatResponseMode mmode, GaussPoint *gp, TimeStep *tStep)
void beMatrixForm(const FloatArray &aArray)
virtual void give3dLatticeStiffMtrx(FloatMatrix &answer, MatResponseMode mmode, GaussPoint *gp, TimeStep *tStep)
Method for computing 3d lattice stiffness matrix of receiver.
bool jaco_(FloatArray &eval, FloatMatrix &v, int nf)
Computes eigenvalues and eigenvectors of receiver (must be symmetric) The receiver is preserved...
virtual void givePlaneStrainStiffMtrx_dCde(FloatMatrix &answer, MatResponseMode mmode, GaussPoint *gp, TimeStep *tStep)
const char * __MaterialModeToString(MaterialMode _value)
virtual void giveRealStressVector_2dPlateSubSoil(FloatArray &answer, GaussPoint *gp, const FloatArray &reducedE, TimeStep *tStep)
Default implementation is not provided.
virtual double give(int aProperty, GaussPoint *gp)
Returns the value of material property 'aProperty'.
Abstract base class for all "structural" finite elements.
virtual void giveRealStressVector_2dBeamLayer(FloatArray &answer, GaussPoint *gp, const FloatArray &reducedE, TimeStep *tStep)
Default implementation relies on giveRealStressVector_StressControl.
virtual IRResultType initializeFrom(InputRecord *ir)
Initializes receiver according to object description stored in input record.
virtual void giveStiffnessMatrix(FloatMatrix &answer, MatResponseMode mode, GaussPoint *gp, TimeStep *tStep)
Computes the stiffness matrix for giveRealStressVector of receiver in given integration point...
static void giveFullVectorForm(FloatArray &answer, const FloatArray &strainVector, MaterialMode matMode)
Converts the reduced symmetric Voigt vector (2nd order tensor) to full form.
static void giveReducedSymVectorForm(FloatArray &answer, const FloatArray &vec, MaterialMode matMode)
Converts the full unsymmetric Voigt vector (2nd order tensor) to reduced form.
void cubic3r(double a, double b, double c, double d, double *r1, double *r2, double *r3, int *num)
Solves cubic equation for real roots, assuming that if cubic polynomial given then the only possibili...
static void giveReducedVectorForm(FloatArray &answer, const FloatArray &vec, MaterialMode matMode)
Converts the full symmetric Voigt vector (2nd order tensor) to reduced form.
virtual void giveRealStressVector_Lattice3d(FloatArray &answer, GaussPoint *gp, const FloatArray &reducedE, TimeStep *tStep)
static std::vector< std::vector< int > > vIindex
Voigt index map.
const FloatArray & giveTempPVector() const
Returns the const pointer to receiver's temporary first Piola-Kirchhoff stress vector.
virtual void givePlaneStressStiffMtrx_dCde(FloatMatrix &answer, MatResponseMode mmode, GaussPoint *gp, TimeStep *tStep)
static void applyElasticStiffness(FloatArray &stress, const FloatArray &strain, double EModulus, double nu)
EngngModelContext * giveContext()
Context requesting service.
void clear()
Clears the array (zero size).
virtual void give3dMaterialStiffnessMatrix(FloatMatrix &answer, MatResponseMode mode, GaussPoint *gp, TimeStep *tStep)
Computes full 3d material stiffness matrix at given integration point, time, respecting load history ...
void times(double f)
Multiplies receiver by factor f.
virtual int setIPValue(const FloatArray &value, GaussPoint *gp, InternalStateType type)
Sets the value of a certain variable at a given integration point to the given value.
static double computeFirstCoordinate(const FloatArray &s)
void giveStressDependentPartOfStrainVector_3d(FloatArray &answer, GaussPoint *gp, const FloatArray &reducedStrainVector, TimeStep *tStep, ValueModeType mode)
void beProductOf(const FloatMatrix &aMatrix, const FloatArray &anArray)
Receiver becomes the result of the product of aMatrix and anArray.
static double computeStressNorm(const FloatArray &stress)
const FloatArray & giveTempStrainVector() const
Returns the const pointer to receiver's temporary strain vector.
static int giveVoigtVectorMask(IntArray &answer, MaterialMode mmode)
Returns a mask of the vector indicies corresponding to components in a general (non-symmetric) second...
bool isEmpty() const
Returns true if receiver is empty.
Abstract base class for all material models.
double at(int i, int j) const
Coefficient access function.
void resize(int n)
Checks size of receiver towards requested bounds.
virtual void giveRealStressVector_ShellStressControl(FloatArray &answer, GaussPoint *gp, const FloatArray &reducedE, const IntArray &strainControl, TimeStep *tStep)
double giveIntrinsicTime()
Returns intrinsic time, e.g. time in which constitutive model is evaluated.
virtual void givePlaneStrainStiffMtrx_dPdF(FloatMatrix &answer, MatResponseMode mmode, GaussPoint *gp, TimeStep *tStep)
virtual void giveRealStressVector_StressControl(FloatArray &answer, GaussPoint *gp, const FloatArray &reducedE, const IntArray &strainControl, TimeStep *tStep)
Iteratively calls giveRealStressVector_3d to find the stress controlled equal to zero· ...
FieldPtr giveField(FieldType key)
Returns the previously registered field under given key; NULL otherwise.
IntegrationRule * giveIntegrationRule()
Returns corresponding integration rule to receiver.
virtual void giveRealStressVector_3d(FloatArray &answer, GaussPoint *gp, const FloatArray &reducedE, TimeStep *tStep)
Default implementation relies on giveRealStressVector for second Piola-Kirchoff stress.
Pair * add(int aKey, double value)
Adds a new Pair with given keyword and value into receiver.
static double computeThirdCoordinate(const FloatArray &s)
virtual void giveFirstPKStressVector_PlaneStress(FloatArray &answer, GaussPoint *gp, const FloatArray &reducedF, TimeStep *tStep)
Default implementation relies on giveFirstPKStressVector_3d.
Initializes the variable VERBOSE, in order to get a few intermediate messages on screen: beginning an...
Class representing vector of real numbers.
virtual void giveRealStressVector_Warping(FloatArray &answer, GaussPoint *gp, const FloatArray &reducedE, TimeStep *tStep)
Default implementation relies on giveRealStressVector_StressControl.
void convert_dSdE_2_dPdF(FloatMatrix &answer, const FloatMatrix &dSdE, const FloatArray &S, const FloatArray &F, MaterialMode matMode)
Implementation of matrix containing floating point numbers.
IRResultType
Type defining the return values of InputRecord reading operations.
stressStrainPrincMode
We have only one algorithm for computing eigenvalues and vectors in order to be able to distinguish b...
static void giveStressVectorTranformationMtrx(FloatMatrix &answer, const FloatMatrix &base, bool transpose=false)
Computes 3d stress vector transformation matrix from standard vector transformation matrix...
virtual void give2dLatticeStiffMtrx(FloatMatrix &answer, MatResponseMode mmode, GaussPoint *gp, TimeStep *tStep)
Method for computing 2d lattice 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 letTempStressVectorBe(const FloatArray &v)
Assigns tempStressVector to given vector v.
const FloatArray & giveStressVector() const
Returns the const pointer to receiver's stress vector.
void beSubArrayOf(const FloatArray &src, const IntArray &indx)
Extract sub vector form src array and stores the result into receiver.
double referenceTemperature
Reference temperature (temperature, when material has been built into structure). ...
virtual void giveRealStressVector_Fiber(FloatArray &answer, GaussPoint *gp, const FloatArray &reducedE, TimeStep *tStep)
Default implementation relies on giveRealStressVector_StressControl.
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.
const FloatArray & giveFVector() const
Returns the const pointer to receiver's deformation gradient vector.
virtual int hasMaterialModeCapability(MaterialMode mode)
Tests if material supports material mode.
static void applyDeviatoricElasticStiffness(FloatArray &stress, const FloatArray &strain, double EModulus, double nu)
virtual void pY() const
Print receiver on stdout with high accuracy.
double computeNorm() const
Computes the norm (or length) of the vector.
void resize(int rows, int cols)
Checks size of receiver towards requested bounds.
static double computeSecondStressInvariant(const FloatArray &s)
virtual void giveThermalDilatationVector(FloatArray &answer, GaussPoint *gp, TimeStep *tStep)
Returns a vector of coefficients of thermal dilatation in direction of each material principal (local...
static void giveReducedMatrixForm(FloatMatrix &answer, const FloatMatrix &full, MaterialMode matMode)
Converts the full symmetric Voigt matrix (4th order tensor) to reduced form.
void zero()
Zeroes all coefficients of receiver.
virtual void give3dBeamSubSoilStiffMtrx(FloatMatrix &answer, MatResponseMode mmode, GaussPoint *gp, TimeStep *tStep)
Method for computing stiffness matrix of beam3d subsoil model.
void beTProductOf(const FloatMatrix &a, const FloatMatrix &b)
Assigns to the receiver product of .
const FloatArray & giveTempFVector() const
Returns the const pointer to receiver's temporary deformation gradient vector.
void letStressVectorBe(const FloatArray &v)
Assigns stressVector to given vector v.
void times(double s)
Multiplies receiver with scalar.
void beTranspositionOf(const FloatMatrix &src)
Assigns to the receiver the transposition of parameter.
#define _IFT_StructuralMaterial_talpha
static double computeDeviatoricVolumetricSplit(FloatArray &dev, const FloatArray &s)
Computes split of receiver into deviatoric and volumetric part.
virtual void give2dPlateSubSoilStiffMtrx(FloatMatrix &answer, MatResponseMode mmode, GaussPoint *gp, TimeStep *tStep)
Method for computing stiffness matrix of plate subsoil model.
virtual void giveRealStressVector_1d(FloatArray &answer, GaussPoint *gp, const FloatArray &reducedE, TimeStep *tStep)
Default implementation relies on giveRealStressVector_StressControl.
static void giveInvertedVoigtVectorMask(IntArray &answer, MaterialMode mmode)
Gives the inverted version of giveVoigtVectorMask.
#define _IFT_StructuralMaterial_referencetemperature
void zero()
Zeroes all coefficient of receiver.
virtual void giveRealStressVector_PlaneStress(FloatArray &answer, GaussPoint *gp, const FloatArray &reducedE, TimeStep *tStep)
Default implementation relies on giveRealStressVector_StressControl.
virtual void give2dBeamLayerStiffMtrx(FloatMatrix &answer, MatResponseMode mmode, GaussPoint *gp, TimeStep *tStep)
Method for computing 2d beam layer stiffness matrix of receiver.
static void give2DStrainVectorTranformationMtrx(FloatMatrix &answer, const FloatMatrix &base, bool transpose=false)
Computes 2d strain vector transformation matrix from standard vector transformation matrix...
void beUnitMatrix()
Sets receiver to unity matrix.
virtual void giveInputRecord(DynamicInputRecord &input)
Setups the input record string of receiver.
static int giveSymVI(int ind1, int ind2)
double castingTime
Casting time.
void beSymVectorFormOfStrain(const FloatMatrix &aMatrix)
void beProductOf(const FloatMatrix &a, const FloatMatrix &b)
Assigns to the receiver product of .
virtual void give3dMaterialStiffnessMatrix_dPdF(FloatMatrix &answer, MatResponseMode mode, GaussPoint *gp, TimeStep *tStep)
const FloatArray & giveTempStressVector() const
Returns the const pointer to receiver's temporary stress vector.
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.
bool isNotEmpty() const
Returns true if receiver is not empty.
void assemble(const FloatMatrix &src, const IntArray &loc)
Assembles the contribution using localization array into receiver.
virtual void giveRealStressVector_PlateLayer(FloatArray &answer, GaussPoint *gp, const FloatArray &reducedE, TimeStep *tStep)
Default implementation relies on giveRealStressVector_StressControl.
static void giveFullVectorFormF(FloatArray &answer, const FloatArray &strainVector, MaterialMode matMode)
Converts the reduced deformation gradient Voigt vector (2nd order tensor).
void beInverseOf(const FloatMatrix &src)
Modifies receiver to become inverse of given parameter.
virtual void givePlaneStressStiffMtrx(FloatMatrix &answer, MatResponseMode mmode, GaussPoint *gp, TimeStep *tStep)
Method for computing plane stress stiffness matrix of receiver.
void negated()
Switches the sign of every coefficient of receiver.
const FloatArray & giveStrainVector() const
Returns the const pointer to receiver's strain vector.
virtual void computeResultingIPEigenstrainAt(FloatArray &answer, TimeStep *tStep, GaussPoint *gp, ValueModeType mode)
Computes at given time the resulting eigenstrain component array.
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.
virtual IRResultType initializeFrom(InputRecord *ir)
Initializes receiver according to object description stored in input record.
Class representing integration point in finite element program.
#define OOFEM_WARNING(...)
Class representing solution step.
static double computeThirdStressInvariant(const FloatArray &s)
virtual int giveIPValue(FloatArray &answer, GaussPoint *gp, InternalStateType type, TimeStep *tStep)
Returns the integration point corresponding value in Reduced form.
virtual int computeGlobalCoordinates(FloatArray &answer, const FloatArray &lcoords)
Computes the global coordinates from given element's local coordinates.
void add(const FloatArray &src)
Adds array src to receiver.
const FloatArray & giveNaturalCoordinates()
Returns coordinate array of receiver.
virtual void computeStressIndependentStrainVector(FloatArray &answer, GaussPoint *gp, TimeStep *tStep, ValueModeType mode)
Computes reduced strain vector in given integration point, generated by internal processes in materia...
void letTempPVectorBe(const FloatArray &v)
Assigns tempPVector to given vector v.
virtual void give1dStressStiffMtrx_dCde(FloatMatrix &answer, MatResponseMode mmode, GaussPoint *gp, TimeStep *tStep)
static void giveReducedSymMatrixForm(FloatMatrix &answer, const FloatMatrix &full, MaterialMode matMode)
Converts the full unsymmetric Voigt matrix (4th order tensor) to reduced form.
void resize(int s)
Resizes receiver towards requested size.
StructuralMaterial(int n, Domain *d)
Constructor.