256 for (
int i = 1; i <= 6; i++ ) {
257 answer.
at(1, 2 * i - 1) = D.at(1, 1) * d2n.
at(i, 1) + D.at(1, 3) * d2n.
at(i, 3) + D.at(3, 1) * d2n.
at(i, 3) + D.at(3, 3) * d2n.
at(i, 2);
258 answer.
at(1, 2 * i) = D.at(1, 2) * d2n.
at(i, 3) + D.at(1, 3) * d2n.
at(i, 1) + D.at(3, 2) * d2n.
at(i, 2) + D.at(3, 3) * d2n.
at(i, 3);
259 answer.
at(2, 2 * i - 1) = D.at(2, 1) * d2n.
at(i, 3) + D.at(2, 3) * d2n.
at(i, 2) + D.at(3, 1) * d2n.
at(i, 1) + D.at(3, 3) * d2n.
at(i, 3);
260 answer.
at(2, 2 * i) = D.at(2, 2) * d2n.
at(i, 2) + D.at(2, 3) * d2n.
at(i, 3) + D.at(3, 2) * d2n.
at(i, 3) + D.at(3, 3) * d2n.
at(i, 1);
503 int neg = 0, pos = 0,
zero = 0, si = 0, sqi = 0;
508 for (
double ifi: fi ) {
511 }
else if ( ifi < 0.0 ) {
519 int first_control = 0;
521 OOFEM_LOG_INFO(
"TR21_2D_SUPG :: LS_PCS_computeVOFFractions - First control, sign(fi) in vertices, element no. %d", first_control);
528 }
else if ( pos == 0 ) {
531 }
else if (
zero == 3 ) {
539 int inter_case, negq = 0, posq = 0, zeroq = 0;
541 for (
double ifi: fi ) {
544 }
else if ( ifi < 0.0 ) {
551 for (
int i = 1; i <= 3; i++ ) {
552 if ( ( pos > neg ) && ( fi.at(i) < 0.0 ) ) {
557 if ( ( pos < neg ) && ( fi.at(i) >= 0.0 ) ) {
565 for (
int i = 4; i <= 6; i++ ) {
566 if ( ( posq > negq ) && ( fi.at(i) < 0.0 ) ) {
571 if ( ( posq < negq ) && ( fi.at(i) >= 0.0 ) ) {
579 }
else if ( posq == 0 ) {
582 if ( fi.at(si) * fi.at(sqi) > 0 ) {
590 int edge1 = 0, edge2 = 0;
594 if ( inter_case > 3 ) {
600 OOFEM_LOG_INFO(
"TR21_2D_SUPG :: LS_PCS_computeVOFFractions - case 1 - first type of element deviation by LS, element no. %d", second_control1);
613 }
else if ( si == 2 ) {
621 }
else if ( si == 3 ) {
634 OOFEM_LOG_INFO(
"case 1 - after intersections of LS and edges, element no. %d", second_control1);
641 FloatArray _l(4), M(2), X_si(2), _Mid(2), line(6), _X1(2), Mid1(2), Mid2(2), Coeff(3), loc_Mid(3), loc_X1(3), N_Mid, N_X1;
642 double x1, xsi, y1, ysi, t, fi_X1, fi_Mid, r1, r11, r12;
644 _l.
at(1) = inter1.at(1);
645 _l.at(2) = inter1.at(2);
646 _l.at(3) = inter2.
at(1);
647 _l.at(4) = inter2.
at(2);
651 xsi = this->
giveNode(si)->giveCoordinate(1);
652 ysi = this->
giveNode(si)->giveCoordinate(2);
657 x1 = xsi + 2 * ( _Mid.at(1) - xsi );
658 y1 = ysi + 2 * ( _Mid.at(2) - ysi );
674 line.at(2) = fi.at(si);
675 line.at(3) = sqrt( ( _Mid.at(1) - xsi ) * ( _Mid.at(1) - xsi ) + ( _Mid.at(2) - ysi ) * ( _Mid.at(2) - ysi ) );
677 line.at(5) = sqrt( ( _Mid.at(1) - _X1.at(1) ) * ( _Mid.at(1) - _X1.at(1) ) + ( _Mid.at(2) - _X1.at(2) ) * ( _Mid.at(2) - _X1.at(2) ) );
684 if ( r11 > line.at(6) || r11 < line.at(1) ) {
690 t = r1 / sqrt( ( _Mid.at(1) - xsi ) * ( _Mid.at(1) - xsi ) + ( _Mid.at(2) - ysi ) * ( _Mid.at(2) - ysi ) );
692 M.at(1) = xsi + t * ( _Mid.at(1) - xsi );
693 M.at(2) = ysi + t * ( _Mid.at(2) - ysi );
696 OOFEM_LOG_INFO(
"case 1 - after computing third point on zero level set curve inside element, element no. %d", second_control1);
703 borderpoints.
at(1) = xsi;
704 borderpoints.
at(2) = ysi;
705 borderpoints.
at(3) = inter1.at(1);
706 borderpoints.
at(4) = inter1.at(2);
710 borderpoints.
at(1) = xsi;
711 borderpoints.
at(2) = ysi;
712 borderpoints.
at(3) = inter2.
at(1);
713 borderpoints.
at(4) = inter2.
at(2);
742 if ( inter_case == 11 ) {
743 answer.
at(2) = vol_1 / vol;
744 answer.
at(1) = 1.0 - answer.
at(2);
746 answer.
at(1) = vol_1 / vol;
747 answer.
at(2) = 1.0 - answer.
at(1);
750 else if ( inter_case == 2 ) {
752 int second_control2 = 0;
754 OOFEM_LOG_INFO(
"case 2 - second type of element deviation by LS, element no. %d", second_control2);
757 FloatArray inter1(2), inter2(2), crosssect(4);
767 }
else if ( si == 2 ) {
774 }
else if ( si == 3 ) {
785 FloatArray X_qsi(2), X_si(2), _Mid(2), line(6), _X1(2), Mid1(2), Coeff(3), loc_Mid, loc_X1, N_Mid, N_X1, M(2);
786 double x1, xsi, y1, ysi, t, fi_X1, fi_Mid, r1, r11, r12;
789 xsi = this->
giveNode(si)->giveCoordinate(1);
790 ysi = this->
giveNode(si)->giveCoordinate(2);
795 X_qsi.at(1) = this->
giveNode(sqi)->giveCoordinate(1);
796 X_qsi.at(2) = this->
giveNode(sqi)->giveCoordinate(2);
799 x1 = xsi + 1.3 * ( _Mid.at(1) - xsi );
800 y1 = ysi + 1.3 * ( _Mid.at(2) - ysi );
815 line.at(2) = fi.at(si);
816 line.at(3) = sqrt( ( _Mid.at(1) - xsi ) * ( _Mid.at(1) - xsi ) + ( _Mid.at(2) - ysi ) * ( _Mid.at(2) - ysi ) );
818 line.at(5) = sqrt( ( _Mid.at(1) - _X1.at(1) ) * ( _Mid.at(1) - _X1.at(1) ) + ( _Mid.at(2) - _X1.at(2) ) * ( _Mid.at(2) - _X1.at(2) ) );
825 if ( r11 > line.at(6) || r11 < line.at(1) ) {
831 t = r1 / sqrt( ( _Mid.at(1) - xsi ) * ( _Mid.at(1) - xsi ) + ( _Mid.at(2) - ysi ) * ( _Mid.at(2) - ysi ) );
833 M.
at(1) = xsi + t * ( _Mid.at(1) - xsi );
834 M.
at(2) = ysi + t * ( _Mid.at(2) - ysi );
839 if ( ( si == 1 ) && ( sqi == 4 ) ) {
840 borderpoints.
at(1) = xsi;
841 borderpoints.
at(2) = ysi;
842 borderpoints.
at(3) = inter2.at(1);
843 borderpoints.
at(4) = inter2.at(2);
849 if ( ( si == 1 ) && ( sqi == 6 ) ) {
850 borderpoints.
at(1) = xsi;
851 borderpoints.
at(2) = ysi;
852 borderpoints.
at(3) = inter1.at(1);
853 borderpoints.
at(4) = inter1.at(2);
858 if ( ( si == 2 ) && ( sqi == 4 ) ) {
859 borderpoints.
at(1) = xsi;
860 borderpoints.
at(2) = ysi;
861 borderpoints.
at(3) = inter1.at(1);
862 borderpoints.
at(4) = inter1.at(2);
867 if ( ( si == 2 ) && ( sqi == 5 ) ) {
868 borderpoints.
at(1) = xsi;
869 borderpoints.
at(2) = ysi;
870 borderpoints.
at(3) = inter2.at(1);
871 borderpoints.
at(4) = inter2.at(2);
876 if ( ( si == 3 ) && ( sqi == 6 ) ) {
877 borderpoints.
at(1) = xsi;
878 borderpoints.
at(2) = ysi;
879 borderpoints.
at(3) = inter2.at(1);
880 borderpoints.
at(4) = inter2.at(2);
885 if ( ( si == 3 ) && ( sqi == 5 ) ) {
886 borderpoints.
at(1) = xsi;
887 borderpoints.
at(2) = ysi;
888 borderpoints.
at(3) = inter1.at(1);
889 borderpoints.
at(4) = inter1.at(2);
902 if ( sub_case == 1 ) {
927 answer.
at(2) = vol_1 / vol;
928 answer.
at(1) = 1.0 - answer.
at(2);
930 answer.
at(1) = vol_1 / vol;
931 answer.
at(2) = 1.0 - answer.
at(1);
936 int second_control3 = 0;
938 OOFEM_LOG_INFO(
"case 3 - third type of element deviation by LS, element no. %d", second_control3);
941 FloatArray inter1(2), inter2(2), crosssect(4);
951 }
else if ( si == 2 ) {
959 }
else if ( si == 3 ) {
971 FloatArray X_si(2), M(2), _Mid(2), line(6), _X1(2), Mid1(2), Coeff(3), loc_Mid, loc_X1, N_Mid, N_X1;
972 double x1, xsi, y1, ysi, t, fi_X1, fi_Mid, r1, r11, r12;
975 xsi = this->
giveNode(si)->giveCoordinate(1);
976 ysi = this->
giveNode(si)->giveCoordinate(2);
981 x1 = xsi + 0.5 * ( _Mid.at(1) - xsi );
982 y1 = ysi + 0.5 * ( _Mid.at(2) - ysi );
997 line.at(2) = fi.at(si);
998 line.at(3) = sqrt( ( _Mid.at(1) - xsi ) * ( _Mid.at(1) - xsi ) + ( _Mid.at(2) - ysi ) * ( _Mid.at(2) - ysi ) );
1000 line.at(5) = sqrt( ( _Mid.at(1) - _X1.at(1) ) * ( _Mid.at(1) - _X1.at(1) ) + ( _Mid.at(2) - _X1.at(2) ) * ( _Mid.at(2) - _X1.at(2) ) );
1007 if ( r11 > line.at(6) || r11 < line.at(1) ) {
1013 t = r1 / sqrt( ( _Mid.at(1) - xsi ) * ( _Mid.at(1) - xsi ) + ( _Mid.at(2) - ysi ) * ( _Mid.at(2) - ysi ) );
1015 M.at(1) = xsi + t * ( _Mid.at(1) - xsi );
1016 M.at(2) = ysi + t * ( _Mid.at(2) - ysi );
1022 X_e1.at(1) = this->
giveNode(si + 3)->giveCoordinate(1);
1023 X_e1.at(2) = this->
giveNode(si + 3)->giveCoordinate(2);
1025 X_e2.
at(1) = this->
giveNode( ( ( si + 4 ) % 3 ) + 4 )->giveCoordinate(1);
1026 X_e2.
at(2) = this->
giveNode( ( ( si + 4 ) % 3 ) + 4 )->giveCoordinate(2);
1035 c1 [ 1 ] = & inter1;
1036 c1 [ 2 ] = & inter2;
1051 answer.
at(2) = vol_1 / vol;
1052 answer.
at(1) = 1.0 - answer.
at(2);
1054 answer.
at(1) = vol_1 / vol;
1055 answer.
at(2) = 1.0 - answer.
at(1);
1451 int i, indx, result = 0;
1457 if ( !
gc.testElementGraphicActivity(
this) ) {
1464 if ( (
gc.giveIntVarType() == IST_VOFFraction ) && (
gc.giveIntVarMode() ==
ISM_local ) ) {
1467 EASValsSetColor(
gc.getStandardSparseProfileColor() );
1485 if ( result != 3 ) {
1489 indx =
gc.giveIntVarIndx();
1491 s [ 0 ] = v1.
at(indx);
1492 s [ 1 ] = v2.
at(indx);
1493 s [ 2 ] = v3.
at(indx);
1498 for ( i = 0; i < 3; i++ ) {
1499 p [ i ].x = ( FPNum ) this->
giveNode(i + 1)->giveCoordinate(1);
1500 p [ i ].y = ( FPNum ) this->
giveNode(i + 1)->giveCoordinate(2);
1505 gc.updateFringeTableMinMax(s, 3);
1506 tr = CreateTriangleWD3D(p, s [ 0 ], s [ 1 ], s [ 2 ]);
1507 EGWithMaskChangeAttributes(LAYER_MASK, tr);
1508 EMAddGraphicsToModel(ESIModel(), tr);
1510 double landScale =
gc.getLandScale();
1512 for ( i = 0; i < 3; i++ ) {
1513 p [ i ].x = ( FPNum ) this->
giveNode(i + 1)->giveCoordinate(1);
1514 p [ i ].y = ( FPNum ) this->
giveNode(i + 1)->giveCoordinate(2);
1515 p [ i ].z = s [ i ] * landScale;
1519 EASValsSetColor(
gc.getDeformedElementColor() );
1521 EASValsSetFillStyle(FILL_SOLID);
1522 tr = CreateTriangle3D(p);
1523 EGWithMaskChangeAttributes(WIDTH_MASK | COLOR_MASK | FILL_MASK | LAYER_MASK, tr);
1525 gc.updateFringeTableMinMax(s, 3);
1526 EASValsSetFillStyle(FILL_SOLID);
1527 tr = CreateTriangleWD3D(p, s [ 0 ], s [ 1 ], s [ 2 ]);
1528 EGWithMaskChangeAttributes(FILL_MASK | LAYER_MASK, tr);
1531 EMAddGraphicsToModel(ESIModel(), tr);
oofem::oofegGraphicContext gc[OOFEG_LAST_LAYER]