68TR1_2D_SUPG_AXI :: computeGaussPoints()
85 double _val, u, v, dV, rho;
93 for (
int i = 1; i <= 3; i++ ) {
94 for (
int j = 1; j <= 3; j++ ) {
96 _val = n.
at(i) * n.
at(j) * rho * dV;
97 answer.
at(2 * i - 1, 2 * j - 1) += _val;
98 answer.
at(2 * i, 2 * j) += _val;
101 u = n.
at(1) * un.
at(1) + n.
at(2) * un.
at(3) + n.
at(3) * un.
at(5);
102 v = n.
at(1) * un.
at(2) + n.
at(2) * un.
at(4) + n.
at(3) * un.
at(6);
103 answer.
at(2 * i - 1, 2 * j - 1) += ( u *
b [ i - 1 ] + v *
c [ j - 1 ] ) * n.
at(j) * rho *
t_supg * dV;
104 answer.
at(2 * i, 2 * j) += ( u *
b [ i - 1 ] + v *
c [ j - 1 ] ) * n.
at(j) * rho *
t_supg * dV;
116 double dudx, dudy, dvdx, dvdy, _u, _v;
122 dudx =
b [ 0 ] * u.
at(1) +
b [ 1 ] * u.
at(3) +
b [ 2 ] * u.
at(5);
123 dudy =
c [ 0 ] * u.
at(1) +
c [ 1 ] * u.
at(3) +
c [ 2 ] * u.
at(5);
124 dvdx =
b [ 0 ] * u.
at(2) +
b [ 1 ] * u.
at(4) +
b [ 2 ] * u.
at(6);
125 dvdy =
c [ 0 ] * u.
at(2) +
c [ 1 ] * u.
at(4) +
c [ 2 ] * u.
at(6);
132 _u = n.
at(1) * un.
at(1) + n.
at(2) * un.
at(3) + n.
at(3) * un.
at(5);
133 _v = n.
at(1) * un.
at(2) + n.
at(2) * un.
at(4) + n.
at(3) * un.
at(6);
136 for (
int i = 1; i <= 3; i++ ) {
137 answer.
at(2 * i - 1) += rho * n.
at(i) * ( _u * dudx + _v * dudy ) * dV;
138 answer.
at(2 * i) += rho * n.
at(i) * ( _u * dvdx + _v * dvdy ) * dV;
142 for (
int i = 1; i <= 3; i++ ) {
143 answer.
at(2 * i - 1) += ( _u *
b [ i - 1 ] + _v *
c [ i - 1 ] ) * ( _u * dudx + _v * dudy ) * rho *
t_supg * dV;
144 answer.
at(2 * i) += ( _u *
b [ i - 1 ] + _v *
c [ i - 1 ] ) * ( _u * dvdx + _v * dvdy ) * rho *
t_supg * dV;
158 double dudx [ 2 ] [ 2 ];
159 int w_dof_addr, u_dof_addr, d1j, d2j, dij;
160 double _u, _v, dV, rho;
162 dudx [ 0 ] [ 0 ] =
b [ 0 ] * u.
at(1) +
b [ 1 ] * u.
at(3) +
b [ 2 ] * u.
at(5);
163 dudx [ 0 ] [ 1 ] =
c [ 0 ] * u.
at(1) +
c [ 1 ] * u.
at(3) +
c [ 2 ] * u.
at(5);
164 dudx [ 1 ] [ 0 ] =
b [ 0 ] * u.
at(2) +
b [ 1 ] * u.
at(4) +
b [ 2 ] * u.
at(6);
165 dudx [ 1 ] [ 1 ] =
c [ 0 ] * u.
at(2) +
c [ 1 ] * u.
at(4) +
c [ 2 ] * u.
at(6);
172 _u = n.
at(1) * un.
at(1) + n.
at(2) * un.
at(3) + n.
at(3) * un.
at(5);
173 _v = n.
at(1) * un.
at(2) + n.
at(2) * un.
at(4) + n.
at(3) * un.
at(6);
176 for (
int i = 1; i <= 2; i++ ) {
177 for (
int k = 1; k <= 3; k++ ) {
178 for (
int j = 1; j <= 2; j++ ) {
179 for (
int m = 1; m <= 3; m++ ) {
180 w_dof_addr = ( k - 1 ) * 2 + i;
181 u_dof_addr = ( m - 1 ) * 2 + j;
185 answer.
at(w_dof_addr, u_dof_addr) += dV * rho * n.
at(k) * ( 0.0 * d1j * n.
at(m) * dudx [ i - 1 ] [ 0 ] + dij * _u *
b [ m - 1 ] +
186 0.0 * d2j * n.
at(m) * dudx [ i - 1 ] [ 0 ] + dij * _v *
c [ m - 1 ] );
193 for (
int i = 1; i <= 2; i++ ) {
194 for (
int k = 1; k <= 3; k++ ) {
195 for (
int j = 1; j <= 2; j++ ) {
196 for (
int m = 1; m <= 3; m++ ) {
197 w_dof_addr = ( k - 1 ) * 2 + i;
198 u_dof_addr = ( m - 1 ) * 2 + j;
202 answer.
at(w_dof_addr, u_dof_addr) += dV *
t_supg * rho *
203 ( _u *
b [ k - 1 ] + _v *
c [ k - 1 ] ) * ( dij * _u *
b [ m - 1 ] + dij * _v *
c [ m - 1 ] );
240 _u = n.
at(1) * un.
at(1) + n.
at(2) * un.
at(3) + n.
at(3) * un.
at(5);
241 _v = n.
at(1) * un.
at(2) + n.
at(2) * un.
at(4) + n.
at(3) * un.
at(6);
243 for (
int i = 1; i <= 3; i++ ) {
244 answer.
at(2 * i - 1) -=
t_supg * ( _u *
b [ i - 1 ] + _v *
c [ i - 1 ] ) * ( stress.
at(1) / _r ) * dV / Re;
245 answer.
at(2 * i) -=
t_supg * ( _u *
b [ i - 1 ] + _v *
c [ i - 1 ] ) * ( stress.
at(4) / _r ) * dV / Re;
254TR1_2D_SUPG_AXI :: computeDiffusionDerivativeTerm_MB(
FloatMatrix &answer, MatResponseMode mode,
TimeStep *tStep)
285 _u = n.
at(1) * un.
at(1) + n.
at(2) * un.
at(3) + n.
at(3) * un.
at(5);
286 _v = n.
at(1) * un.
at(2) + n.
at(2) * un.
at(4) + n.
at(3) * un.
at(6);
288 for (
int i = 1; i <= 3; i++ ) {
289 for (
int j = 1; j <= 6; j++ ) {
293 answer.
at(2 * i - 1, j) -=
t_supg * ( _u *
b [ i - 1 ] + _v *
c [ i - 1 ] ) * ( _db.
at(1, j) / _r ) * dV;
294 answer.
at(2 * i, j) -=
t_supg * ( _u *
b [ i - 1 ] + _v *
c [ i - 1 ] ) * ( _db.
at(4, j) / _r ) * dV;
303 answer.
times(1. / Re);
322 for (
int i = 1; i <= 3; i++ ) {
323 for (
int j = 1; j <= 3; j++ ) {
324 answer.
at(2 * i - 1, j) -=
b [ i - 1 ] * n.
at(j) * dV;
325 answer.
at(2 * i, j) -=
c [ i - 1 ] * n.
at(j) * dV;
327 answer.
at(2 * i - 1, j) -= n.
at(i) * n.
at(j) * dV / _r;
332 _u = n.
at(1) * un.
at(1) + n.
at(2) * un.
at(3) + n.
at(3) * un.
at(5);
333 _v = n.
at(1) * un.
at(2) + n.
at(2) * un.
at(4) + n.
at(3) * un.
at(6);
334 for (
int i = 1; i <= 3; i++ ) {
335 for (
int j = 1; j <= 3; j++ ) {
336 answer.
at(2 * i - 1, j) += ( _u *
b [ i - 1 ] + _v *
c [ i - 1 ] ) *
b [ j - 1 ] * dV *
t_supg;
337 answer.
at(2 * i, j) += ( _u *
b [ i - 1 ] + _v *
c [ i - 1 ] ) *
c [ j - 1 ] * dV *
t_supg;
349 b [ 0 ],
c [ 0 ],
b [ 1 ],
c [ 1 ],
b [ 2 ],
c [ 2 ]
356 for (
int i = 1; i <= 6; i++ ) {
357 for (
int j = 1; j <= 6; j++ ) {
358 answer.
at(i, j) += dV *
t_lsic * rho * n [ i - 1 ] * n [ j - 1 ];
377 for (
int i = 1; i <= 3; i++ ) {
378 for (
int j = 1; j <= 3; j++ ) {
379 answer.
at(j, 2 * i - 1) +=
b [ i - 1 ] * n.
at(j) * dV;
380 answer.
at(j, 2 * i) +=
c [ i - 1 ] * n.
at(j) * dV;
382 answer.
at(i, 1 + ( j - 1 ) * 2) += n.
at(i) * n.
at(j) * dV / _r;
392 double dudx, dudy, dvdx, dvdy, _u, _v;
400 dudx =
b [ 0 ] * u.
at(1) +
b [ 1 ] * u.
at(3) +
b [ 2 ] * u.
at(5);
401 dudy =
c [ 0 ] * u.
at(1) +
c [ 1 ] * u.
at(3) +
c [ 2 ] * u.
at(5);
402 dvdx =
b [ 0 ] * u.
at(2) +
b [ 1 ] * u.
at(4) +
b [ 2 ] * u.
at(6);
403 dvdy =
c [ 0 ] * u.
at(2) +
c [ 1 ] * u.
at(4) +
c [ 2 ] * u.
at(6);
409 _u = n.
at(1) * un.
at(1) + n.
at(2) * un.
at(3) + n.
at(3) * un.
at(5);
410 _v = n.
at(1) * un.
at(2) + n.
at(2) * un.
at(4) + n.
at(3) * un.
at(6);
412 for (
int i = 1; i <= 3; i++ ) {
413 answer.
at(i) +=
t_pspg * dV * (
b [ i - 1 ] * ( _u * dudx + _v * dudy ) +
c [ i - 1 ] * ( _u * dvdx + _v * dvdy ) );
424 int w_dof_addr, u_dof_addr, d1j, d2j, km1, mm1;
435 _u = n.
at(1) * un.
at(1) + n.
at(2) * un.
at(3) + n.
at(3) * un.
at(5);
436 _v = n.
at(1) * un.
at(2) + n.
at(2) * un.
at(4) + n.
at(3) * un.
at(6);
438 for (
int k = 1; k <= 3; k++ ) {
440 for (
int j = 1; j <= 2; j++ ) {
441 for (
int m = 1; m <= 3; m++ ) {
443 u_dof_addr = ( m - 1 ) * 2 + j;
447 answer.
at(w_dof_addr, u_dof_addr) +=
t_pspg * dV * (
b [ km1 ] * ( _u * d1j *
b [ mm1 ] + _v * d1j *
c [ mm1 ] ) +
c [ km1 ] * ( _u * d2j *
b [ mm1 ] + _v * d2j *
c [ mm1 ] ) );
475 for (
int i = 1; i <= 3; i++ ) {
476 answer.
at(i) -=
t_pspg * (
b [ i - 1 ] * stress.at(1) +
c [ i - 1 ] * stress.at(4) ) * dV / rho / _r;
498 double rho = mat->
give(
'd', gp);
506 for (
int i = 1; i <= 3; i++ ) {
507 for (
int j = 1; j <= 6; j++ ) {
508 answer.
at(i, j) -=
t_pspg * (
b [ i - 1 ] * ( _db.
at(1, j) / _r ) +
c [ i - 1 ] * ( _db.
at(4, j) / _r ) ) * dV / rho;
513 answer.
times(1. / Re);
530 for (
int i = 1; i <= 3; i++ ) {
531 for (
int j = 1; j <= 3; j++ ) {
532 answer.
at(i, 2 * j - 1) +=
t_pspg * dV *
b [ i - 1 ] * n.
at(j);
533 answer.
at(i, 2 * j) +=
t_pspg * dV *
c [ i - 1 ] * n.
at(j);
549 double coeff =
t_pspg / rho;
551 for (
int i = 1; i <= 3; i++ ) {
552 for (
int j = 1; j <= 3; j++ ) {
553 answer.
at(i, j) += dV * coeff * (
b [ i - 1 ] *
b [ j - 1 ] +
c [ i - 1 ] *
c [ j - 1 ] );
599 for (
int i = 1; i <= nLoads; i++ ) {
608 double coeff = rho * dV;
610 double u = nV.
at(1) * un.
at(1) + nV.
at(2) * un.
at(3) + nV.
at(3) * un.
at(5);
611 double v = nV.
at(1) * un.
at(2) + nV.
at(2) * un.
at(4) + nV.
at(3) * un.
at(6);
613 answer.
at(1) += coeff * ( gVector.
at(1) * ( nV.
at(1) +
t_supg * (
b [ 0 ] * u +
c [ 0 ] * v ) ) );
614 answer.
at(2) += coeff * ( gVector.
at(2) * ( nV.
at(1) +
t_supg * (
b [ 0 ] * u +
c [ 0 ] * v ) ) );
615 answer.
at(3) += coeff * ( gVector.
at(1) * ( nV.
at(2) +
t_supg * (
b [ 1 ] * u +
c [ 1 ] * v ) ) );
616 answer.
at(4) += coeff * ( gVector.
at(2) * ( nV.
at(2) +
t_supg * (
b [ 1 ] * u +
c [ 1 ] * v ) ) );
617 answer.
at(5) += coeff * ( gVector.
at(1) * ( nV.
at(3) +
t_supg * (
b [ 2 ] * u +
c [ 2 ] * v ) ) );
618 answer.
at(6) += coeff * ( gVector.
at(2) * ( nV.
at(3) +
t_supg * (
b [ 2 ] * u +
c [ 2 ] * v ) ) );
627 int n1, n2, code, sid;
628 double tx, ty, l, side_r;
638 n2 = ( n1 == 3 ? 1 : n1 + 1 );
642 l = sqrt(tx * tx + ty * ty);
644 side_r = 0.5 * (
giveNode(n2)->giveCoordinate(1) +
giveNode(n1)->giveCoordinate(1) );
651 for (
int i = 1; i <= numLoads; i++ ) {
660 load->computeValueAt(t, tStep, coords, VM_Total);
664 answer.
at(n1 * 2 - 1) += t.
at(1) * side_r * l / 2.;
665 answer.
at(n1 * 2) += t.
at(2) * side_r * l / 2.;
667 answer.
at(n2 * 2 - 1) += t.
at(1) * side_r * l / 2.;
668 answer.
at(n2 * 2) += t.
at(2) * side_r * l / 2.;
688 for (
int i = 1; i <= nLoads; i++ ) {
696 double coeff =
t_pspg * dV;
698 answer.
at(1) += coeff * (
b [ 0 ] * gVector.
at(1) +
c [ 0 ] * gVector.
at(2) );
699 answer.
at(2) += coeff * (
b [ 1 ] * gVector.
at(1) +
c [ 1 ] * gVector.
at(2) );
700 answer.
at(3) += coeff * (
b [ 2 ] * gVector.
at(1) +
c [ 2 ] * gVector.
at(2) );
711 if ( type != ExternalForcesVector ) {
731 double u = nV.
at(1) * un.
at(1) + nV.
at(2) * un.
at(3) + nV.
at(3) * un.
at(5);
732 double v = nV.
at(1) * un.
at(2) + nV.
at(2) * un.
at(4) + nV.
at(3) * un.
at(6);
735 answer.
at(1) += coeff * gVector.
at(1) * ( nV.
at(1) +
t_supg * (
b [ 0 ] * u +
c [ 0 ] * v ) );
736 answer.
at(2) += coeff * gVector.
at(2) * ( nV.
at(1) +
t_supg * (
b [ 0 ] * u +
c [ 0 ] * v ) );
737 answer.
at(4) += coeff * gVector.
at(1) * ( nV.
at(2) +
t_supg * (
b [ 1 ] * u +
c [ 1 ] * v ) );
738 answer.
at(5) += coeff * gVector.
at(2) * ( nV.
at(2) +
t_supg * (
b [ 1 ] * u +
c [ 1 ] * v ) );
739 answer.
at(7) += coeff * gVector.
at(1) * ( nV.
at(3) +
t_supg * (
b [ 2 ] * u +
c [ 2 ] * v ) );
740 answer.
at(8) += coeff * gVector.
at(2) * ( nV.
at(3) +
t_supg * (
b [ 2 ] * u +
c [ 2 ] * v ) );
743 answer.
at(3) += coeff * (
b [ 0 ] * gVector.
at(1) +
c [ 0 ] * gVector.
at(2) );
744 answer.
at(6) += coeff * (
b [ 1 ] * gVector.
at(1) +
c [ 1 ] * gVector.
at(2) );
745 answer.
at(9) += coeff * (
b [ 2 ] * gVector.
at(1) +
c [ 2 ] * gVector.
at(2) );
761 for (
int i = 1; i <= nLoads; i++ ) {
775 answer.
add(helpMatrix);
784 double l, t1, t2, _t1, _t2;
792 node2 = ( node1 == 3 ? 1 : node1 + 1 );
794 _t1 =
giveNode(node2)->giveCoordinate(1) -
giveNode(node1)->giveCoordinate(1);
795 _t2 =
giveNode(node2)->giveCoordinate(2) -
giveNode(node1)->giveCoordinate(2);
796 l = sqrt(_t1 * _t1 + _t2 * _t2);
805 nt.at(1) = n.
at(1) * t1;
806 nt.at(2) = n.
at(1) * t2;
807 nt.at(3) = n.
at(2) * t1;
808 nt.at(4) = n.
at(2) * t2;
809 nt.at(5) = n.
at(3) * t1;
810 nt.at(6) = n.
at(3) * t2;
821 double l, n1, n2, _t1, _t2;
829 node2 = ( node1 == 3 ? 1 : node1 + 1 );
832 _t1 =
giveNode(node2)->giveCoordinate(1) -
giveNode(node1)->giveCoordinate(1);
833 _t2 =
giveNode(node2)->giveCoordinate(2) -
giveNode(node1)->giveCoordinate(2);
834 l = sqrt(_t1 * _t1 + _t2 * _t2);
844 nt.at(1) = n.
at(1) * n1;
845 nt.at(2) = n.
at(1) * n2;
846 nt.at(3) = n.
at(2) * n1;
847 nt.at(4) = n.
at(2) * n2;
848 nt.at(5) = n.
at(3) * n1;
849 nt.at(6) = n.
at(3) * n2;
860 double l, n1, n2, t1, t2, dV;
866 node2 = ( node1 == 3 ? 1 : node1 + 1 );
868 t1 =
giveNode(node2)->giveCoordinate(1) -
giveNode(node1)->giveCoordinate(1);
869 t2 =
giveNode(node2)->giveCoordinate(2) -
giveNode(node1)->giveCoordinate(2);
870 l = sqrt(t1 * t1 + t2 * t2);
880 nt.at(1) = n.
at(1) * n1;
881 nt.at(2) = n.
at(1) * n2;
882 nt.at(3) = n.
at(2) * n1;
883 nt.at(4) = n.
at(2) * n2;
884 nt.at(5) = n.
at(3) * n1;
885 nt.at(6) = n.
at(3) * n2;
906 for (
int i = 1; i <= nLoads; i++ ) {
918 answer.
add(helpMatrix);
929 return n.
at(1) * this->
giveNode(1)->giveCoordinate(1)
930 + n.
at(2) * this->
giveNode(2)->giveCoordinate(1)
931 + n.
at(3) * this->
giveNode(3)->giveCoordinate(1);
940 _b.
at(1, 1) =
b [ 0 ];
942 _b.
at(1, 3) =
b [ 1 ];
944 _b.
at(1, 5) =
b [ 2 ];
946 _b.
at(2, 1) = 1. / _r;
948 _b.
at(2, 3) = 1. / _r;
950 _b.
at(2, 5) = 1. / _r;
953 _b.
at(3, 2) =
c [ 0 ];
955 _b.
at(3, 4) =
c [ 1 ];
957 _b.
at(3, 6) =
c [ 2 ];
958 _b.
at(4, 1) =
c [ 0 ];
959 _b.
at(4, 2) =
b [ 0 ];
960 _b.
at(4, 3) =
c [ 1 ];
961 _b.
at(4, 4) =
b [ 1 ];
962 _b.
at(4, 5) =
c [ 2 ];
963 _b.
at(4, 6) =
b [ 2 ];
975 double _r, weight, detJ;
981 return detJ * weight * _r;
985TR1_2D_SUPG_AXI :: initGeometry()
987 TR1_2D_SUPG :: initGeometry();
989 this->
rc = ( this->
giveNode(1)->giveCoordinate(1) +
990 this->
giveNode(2)->giveCoordinate(1) +
991 this->
giveNode(3)->giveCoordinate(1) ) / 3.0;
998TR1_2D_SUPG_AXI :: updateStabilizationCoeffs(
TimeStep *tStep)
1001 double h_ugn,
sum = 0.0, vnorm, t_sugn1, t_sugn2, t_sugn3, u_1, u_2;
1002 double dscale, uscale, lscale, tscale, dt;
1029 for (
int i = 1; i <= 3; i++ ) {
1031 sum += fabs(u.
at( ( im1 ) * 2 + 1 ) *
b [ im1 ] / lscale + u.
at(im1 * 2 + 2) *
c [ im1 ] / lscale);
1040 for (
int i = 1; i <= 3; i++ ) {
1042 u_1 = u.
at( ( im1 ) * 2 + 1 );
1043 u_2 = u.
at( ( im1 ) * 2 + 2 );
1044 vnorm =
max( vnorm, sqrt(u_1 * u_1 + u_2 * u_2) );
1047 if ( ( vnorm == 0.0 ) || (
sum < vnorm * 1e-10 ) ) {
1051 this->
t_supg = 1. / sqrt( 1. / ( t_sugn2 * t_sugn2 ) );
1055 h_ugn = 2.0 * vnorm /
sum;
1058 t_sugn3 = h_ugn * h_ugn / 4.0 / nu;
1060 this->
t_supg = 1. / sqrt( 1. / ( t_sugn1 * t_sugn1 ) + 1. / ( t_sugn2 * t_sugn2 ) + 1. / ( t_sugn3 * t_sugn3 ) );
1067 this->
t_supg *= uscale / lscale;
1068 this->
t_pspg *= 1. / ( lscale * dscale );
1069 this->
t_lsic *= ( dscale * uscale ) / ( lscale * lscale );
1077 int neg = 0, pos = 0,
zero = 0, si = 0;
1078 double x1, x2, x3, y1, y2, y3;
1081 for (
double ifi: fi ) {
1084 }
else if ( ifi < 0.0 ) {
1094 }
else if ( pos == 0 ) {
1097 }
else if (
zero == 3 ) {
1104 for (
int i = 1; i <= 3; i++ ) {
1105 if ( ( pos > neg ) && ( fi.
at(i) < 0.0 ) ) {
1110 if ( ( pos < neg ) && ( fi.
at(i) >= 0.0 ) ) {
1116 if ( si && ( ( pos + neg ) == 3 ) ) {
1117 x1 = this->
giveNode(si)->giveCoordinate(1);
1118 y1 = this->
giveNode(si)->giveCoordinate(2);
1121 int prev_node = ( si > 1 ) ? si - 1 : 3;
1122 int next_node = ( si < 3 ) ? si + 1 : 1;
1124 double t = fi.
at(si) / ( fi.
at(si) - fi.
at(next_node) );
1125 x2 = x1 + t * ( this->
giveNode(next_node)->giveCoordinate(1) - this->
giveNode(si)->giveCoordinate(1) );
1126 y2 = y1 + t * ( this->
giveNode(next_node)->giveCoordinate(2) - this->
giveNode(si)->giveCoordinate(2) );
1128 t = fi.
at(si) / ( fi.
at(si) - fi.
at(prev_node) );
1129 x3 = x1 + t * ( this->
giveNode(prev_node)->giveCoordinate(1) - this->
giveNode(si)->giveCoordinate(1) );
1130 y3 = y1 + t * ( this->
giveNode(prev_node)->giveCoordinate(2) - this->
giveNode(si)->giveCoordinate(2) );
1134 double __volume = 0.5 * ( x2 * y3 + x1 * y2 + y1 * x3 - x2 * y1 - x3 * y2 - x1 * y3 ) * ( ( x1 + x2 + x3 ) / 3. );
1135 double volume = this->
area * ( ( this->
giveNode(1)->giveCoordinate(1) + this->
giveNode(2)->giveCoordinate(1) + this->
giveNode(3)->giveCoordinate(1) ) / 3. );
1136 if ( fabs(__volume) / volume > 1.00001 ) {
1141 if ( fabs(__volume) > volume ) {
1142 __volume =
sgn(__volume) * volume;
1147 answer.
at(2) = fabs(__volume) / volume;
1148 answer.
at(1) = 1.0 - answer.
at(2);
1151 answer.
at(1) = fabs(__volume) / volume;
1152 answer.
at(2) = 1.0 - answer.
at(1);
#define REGISTER_Element(class)
virtual double giveProperty(int aProperty, TimeStep *tStep, const std ::map< std ::string, FunctionArgument > &valDict) const
Node * giveNode(int i) const
IntArray boundaryLoadArray
IntArray * giveBodyLoadArray()
Returns array containing load numbers of loads acting on element.
IntArray * giveBoundaryLoadArray()
Returns array containing load numbers of boundary loads acting on element.
std::vector< std ::unique_ptr< IntegrationRule > > integrationRulesArray
CrossSection * giveCrossSection()
Domain * domain
Link to domain object, useful for communicating with other FEM components.
void computeVectorOfVelocities(ValueModeType mode, TimeStep *tStep, FloatArray &velocities)
void plusProduct(const FloatMatrix &b, const FloatArray &s, double dV)
Index giveSize() const
Returns the size of receiver.
void zero()
Zeroes all coefficients of receiver.
void beProductOf(const FloatMatrix &aMatrix, const FloatArray &anArray)
void add(const FloatMatrix &a)
void resize(Index rows, Index cols)
*Sets size of receiver to be an empty matrix It will have zero rows and zero columns size void clear()
void plusProductUnsym(const FloatMatrix &a, const FloatMatrix &b, double dV)
void beProductOf(const FloatMatrix &a, const FloatMatrix &b)
void plusDyadUnsym(const FloatArray &a, const FloatArray &b, double dV)
void zero()
Zeroes all coefficient of receiver.
void plusDyadSymmUpper(const FloatArray &a, double dV)
double at(std::size_t i, std::size_t j) const
virtual FloatMatrixF< 4, 4 > computeTangentAxi(MatResponseMode mode, GaussPoint *gp, TimeStep *tStep) const
virtual FloatArrayF< 4 > computeDeviatoricStressAxi(const FloatArrayF< 4 > &eps, GaussPoint *gp, TimeStep *tStep) const
virtual double giveReynoldsNumber()=0
const FloatArray & giveSubPatchCoordinates() const
Returns local sub-patch coordinates of the receiver.
double giveWeight()
Returns integration weight of receiver.
virtual bcGeomType giveBCGeoType() const
virtual bcValType giveBCValType() const
virtual bcType giveType() const
virtual void computeComponentArrayAt(FloatArray &answer, TimeStep *tStep, ValueModeType mode)
virtual double give(int aProperty, GaussPoint *gp) const
IntArray boundaryCodes
Boundary sides codes.
IntArray boundarySides
Array of boundary sides.
double computeVolumeAround(GaussPoint *gp) override
void computeSlipWithFrictionBCTerm_MB(FloatMatrix &answer, Load *load, int side, TimeStep *tStep) override
void computeNVector(FloatArray &answer, GaussPoint *gp)
virtual double computeRadiusAt(GaussPoint *gp)
virtual void computeBMtrx(FloatMatrix &answer, GaussPoint *gp)
double rc
Radius at element center.
void computeOutFlowBCTerm_MB(FloatMatrix &answer, int side, TimeStep *tStep) override
void computePenetrationWithResistanceBCTerm_MB(FloatMatrix &answer, Load *load, int side, TimeStep *tStep) override
TR1_2D_SUPG(int n, Domain *d)
double giveTimeIncrement()
Returns solution step associated time increment.
TimeStep * givePreviousStep()
Returns pointer to previous solution step.
#define FMElement_PrescribedTractionBC
bcGeomType
Type representing the geometric character of loading.
@ BodyLoadBGT
Distributed body load.
FloatArrayF< N > max(const FloatArrayF< N > &a, const FloatArrayF< N > &b)
double sum(const FloatArray &x)
FloatMatrixF< N, M > zero()
Constructs a zero matrix (this is the default behavior when constructing a matrix,...
double sgn(double i)
Returns the signum of given value (if value is < 0 returns -1, otherwise returns 1).
bcType
Type representing the type of bc.
@ PenetrationWithResistance