369Lattice3d_mt :: computeCrossSectionProperties() {
377 if ( this->
normal.at(1) == 0 ) {
379 s.at(2) = this->
normal.at(3);
380 s.at(3) = -this->
normal.at(2);
381 }
else if ( this->
normal.at(2) == 0 ) {
382 s.at(1) = this->
normal.at(3);
384 s.at(3) = -this->
normal.at(1);
386 s.at(1) = this->
normal.at(2);
387 s.at(2) = -this->
normal.at(1);
399 for (
int i = 1; i <= 3; i++ ) {
401 lcs.
at(2, i) = s.at(i);
402 lcs.
at(3, i) = t.
at(i);
410 for (
int n = 0; n < 3; n++ ) {
415 for (
int n = 0; n < 3; n++ ) {
416 lpc(3 * k + n) = test(n);
424 this->
area += lpc(3 * k + 1) * lpc(3 * ( k + 1 ) + 2) - lpc(3 * ( k + 1 ) + 1) * lpc(3 * k + 2);
426 this->
area += lpc(3 * k + 1) * lpc(2) - lpc(1) * lpc(3 * k + 2);
433 if ( this->
area < 0 ) {
437 for (
int m = 0; m < 3; m++ ) {
446 for (
int n = 0; n < 3; n++ ) {
451 for (
int n = 0; n < 3; n++ ) {
452 lpc(3 * k + n) = test(n);
459 printf(
"Small area fixed.\n");
466 centroid.at(2) += ( lpc(3 * k + 1) + lpc(3 * ( k + 1 ) + 1) ) * ( lpc(3 * k + 1) * lpc(3 * ( k + 1 ) + 2) - lpc(3 * ( k + 1 ) + 1) * lpc(3 * k + 2) );
467 centroid.at(3) += ( lpc(3 * k + 2) + lpc(3 * ( k + 1 ) + 2) ) * ( lpc(3 * k + 1) * lpc(3 * ( k + 1 ) + 2) - lpc(3 * ( k + 1 ) + 1) * lpc(3 * k + 2) );
469 centroid.at(2) += ( lpc(3 * k + 1) + lpc(1) ) * ( lpc(3 * k + 1) * lpc(2) - lpc(1) * lpc(3 * k + 2) );
470 centroid.at(3) += ( lpc(3 * k + 2) + lpc(2) ) * ( lpc(3 * k + 1) * lpc(2) - lpc(1) * lpc(3 * k + 2) );
480 for (
int l = 0; l < 3; l++ ) {
495 a = lpc(3 * k + 1) * lpc(3 * ( k + 1 ) + 2) - lpc(3 * ( k + 1 ) + 1) * lpc(3 * k + 2);
497 Ixx += ( ( pow(lpc(3 * k + 2), 2.) + lpc(3 * k + 2) * lpc(3 * ( k + 1 ) + 2) + pow(lpc(3 * ( k + 1 ) + 2), 2.) ) * a ) / 12.;
499 Iyy += ( ( pow(lpc(3 * k + 1), 2.) + lpc(3 * k + 1) * lpc(3 * ( k + 1 ) + 1) + pow(lpc(3 * ( k + 1 ) + 1), 2.) ) * a ) / 12.;
501 Ixy += ( ( lpc(3 * k + 1) * lpc(3 * ( k + 1 ) + 2) + 2. * lpc(3 * k + 1) * lpc(3 * k + 2) +
502 2 * lpc(3 * ( k + 1 ) + 1) * lpc(3 * ( k + 1 ) + 2) + lpc(3 * ( k + 1 ) + 1) * lpc(3 * k + 2) ) * a ) / 24.;
504 a = lpc(3 * k + 1) * lpc(2) - lpc(1) * lpc(3 * k + 2);
506 Ixx += ( ( pow(lpc(3 * k + 2), 2.) + lpc(3 * k + 2) * lpc(2) + pow(lpc(2), 2.) ) * a ) / 12.;
508 Iyy += ( ( pow(lpc(3 * k + 1), 2.) + lpc(3 * k + 1) * lpc(1) + pow(lpc(1), 2.) ) * a ) / 12.;
510 Ixy += ( ( lpc(3 * k + 1) * lpc(2) + 2. * lpc(3 * k + 1) * lpc(3 * k + 2) +
511 2 * lpc(1) * lpc(2) + lpc(1) * lpc(3 * k + 2) ) * a ) / 24.;
516 double angleChange = 0.;
517 double sum = fabs(Ixx + Iyy);
518 double pi = 3.14159265;
519 if ( ( fabs(Ixx - Iyy) /
sum > 1.e-6 ) && fabs(Ixy) /
sum > 1.e-6 ) {
520 angleChange = 0.5 * atan(-2 * Ixy / ( Ixx - Iyy ) );
521 }
else if ( ( fabs(Ixx - Iyy) /
sum < 1.e-6 ) && fabs(Ixy) /
sum > 1.e-6 ) {
522 angleChange = pi / 4.;
526 angleChange = angleChange + pi / 2.;
531 this->
I1 = ( Ixx + Iyy ) / 2. + sqrt(pow( ( Ixx - Iyy ) / 2., 2. ) + pow(Ixy, 2.) );
532 this->
I2 = ( Ixx + Iyy ) / 2. - sqrt(pow( ( Ixx - Iyy ) / 2., 2. ) + pow(Ixy, 2.) );
539 rotationChange.
zero();
541 rotationChange.
at(1, 1) = 1.;
542 rotationChange.
at(2, 2) = cos(angleChange);
543 rotationChange.
at(2, 3) = -sin(angleChange);
545 rotationChange.
at(3, 2) = sin(angleChange);
546 rotationChange.
at(3, 3) = cos(angleChange);
552 for (
int n = 0; n < 3; n++ ) {
557 for (
int n = 0; n < 3; n++ ) {
558 lpc(3 * k + n) = test(n);
566 centroid.at(2) += ( lpc(3 * k + 1) + lpc(3 * ( k + 1 ) + 1) ) * ( lpc(3 * k + 1) * lpc(3 * ( k + 1 ) + 2) - lpc(3 * ( k + 1 ) + 1) * lpc(3 * k + 2) );
567 centroid.at(3) += ( lpc(3 * k + 2) + lpc(3 * ( k + 1 ) + 2) ) * ( lpc(3 * k + 1) * lpc(3 * ( k + 1 ) + 2) - lpc(3 * ( k + 1 ) + 1) * lpc(3 * k + 2) );
569 centroid.at(2) += ( lpc(3 * k + 1) + lpc(1) ) * ( lpc(3 * k + 1) * lpc(2) - lpc(1) * lpc(3 * k + 2) );
570 centroid.at(3) += ( lpc(3 * k + 2) + lpc(2) ) * ( lpc(3 * k + 1) * lpc(2) - lpc(1) * lpc(3 * k + 2) );
594 double crackPointOne, crackPointTwo;
597 crackPointOne = ( lpc(3 * ( m + 1 ) + 1) + lpc(3 * ( m ) + 1) ) / 2.;
598 crackPointTwo = ( lpc(3 * ( m + 1 ) + 2) + lpc(3 * ( m ) + 2) ) / 2.;
600 crackPointOne = ( lpc(1) + lpc(3 * ( m ) + 1) ) / 2.;
601 crackPointTwo = ( lpc(2) + lpc(3 * ( m ) + 2) ) / 2.;
604 crackLengths.at(m + 1) = sqrt(pow(crackPointOne - midPointLocal.
at(2), 2.) + pow(crackPointTwo - midPointLocal.
at(3), 2.) );
650Lattice3d_mt :: computeInternalSourceRhsVectorAt(
FloatArray &answer,
TimeStep *atTime, ValueModeType mode)
659 FloatArray val, helpLoadVector, globalIPcoords;
666 for ( i = 1; i <= nLoads; i++ ) {
682 gravityHelp.
at(1) = 1.;
683 gravityHelp.
at(2) = -1.;
690 double helpFactor = val.
at(1) * k * dV;
693 gravityHelp.
times(helpFactor);
695 if ( helpLoadVector.
isEmpty() ) {
699 for ( j = 1; j <= gravityHelp.
giveSize(); j++ ) {
700 helpLoadVector.
at(j) += gravityHelp.
at(j);
706 answer.
add(helpLoadVector);
756 if ( !
gc.testElementGraphicActivity(
this) ) {
761 EASValsSetColor(
gc.getElementColor() );
764 p [ 0 ].x = ( FPNum ) this->
giveNode(1)->giveCoordinate(1);
765 p [ 0 ].y = ( FPNum ) this->
giveNode(1)->giveCoordinate(2);
766 p [ 0 ].z = ( FPNum ) this->
giveNode(1)->giveCoordinate(3);
767 p [ 1 ].x = ( FPNum ) this->
giveNode(2)->giveCoordinate(1);
768 p [ 1 ].y = ( FPNum ) this->
giveNode(2)->giveCoordinate(2);
769 p [ 1 ].z = ( FPNum ) this->
giveNode(2)->giveCoordinate(3);
771 go = CreateLine3D(p);
772 EGWithMaskChangeAttributes(WIDTH_MASK | COLOR_MASK | LAYER_MASK, go);
773 EGAttachObject(go, ( EObjectP )
this);
774 EMAddGraphicsToModel(ESIModel(), go);
#define OOFEG_RAW_CROSSSECTION_LAYER
oofem::oofegGraphicContext gc[OOFEG_LAST_LAYER]
#define OOFEG_RAW_GEOMETRY_WIDTH
#define OOFEG_RAW_GEOMETRY_LAYER