214 double dudx, dudy, dvdx, dvdy, usum, vsum, coeff;
218 dudx =
b [ 0 ] * u.
at(1) +
b [ 1 ] * u.
at(3) +
b [ 2 ] * u.
at(5);
219 dudy =
c [ 0 ] * u.
at(1) +
c [ 1 ] * u.
at(3) +
c [ 2 ] * u.
at(5);
220 dvdx =
b [ 0 ] * u.
at(2) +
b [ 1 ] * u.
at(4) +
b [ 2 ] * u.
at(6);
221 dvdy =
c [ 0 ] * u.
at(2) +
c [ 1 ] * u.
at(4) +
c [ 2 ] * u.
at(6);
223 usum = un.
at(1) + un.
at(3) + un.
at(5);
224 vsum = un.
at(2) + un.
at(4) + un.
at(6);
225 coeff = rho *
area / 12.0;
228 answer.
at(1) = coeff * ( dudx * ( usum + un.
at(1) ) + dudy * ( vsum + un.
at(2) ) );
229 answer.
at(3) = coeff * ( dudx * ( usum + un.
at(3) ) + dudy * ( vsum + un.
at(4) ) );
230 answer.
at(5) = coeff * ( dudx * ( usum + un.
at(5) ) + dudy * ( vsum + un.
at(6) ) );
231 answer.
at(2) = coeff * ( dvdx * ( usum + un.
at(1) ) + dvdy * ( vsum + un.
at(2) ) );
232 answer.
at(4) = coeff * ( dvdx * ( usum + un.
at(3) ) + dvdy * ( vsum + un.
at(4) ) );
233 answer.
at(6) = coeff * ( dvdx * ( usum + un.
at(5) ) + dvdy * ( vsum + un.
at(6) ) );
237 double u1u1 = usum * usum + un.
at(1) * un.
at(1) + un.
at(3) * un.
at(3) + un.
at(5) * un.
at(5);
238 double u1u2 = usum * vsum + un.
at(1) * un.
at(2) + un.
at(3) * un.
at(4) + un.
at(5) * un.
at(6);
239 double u2u2 = vsum * vsum + un.
at(2) * un.
at(2) + un.
at(4) * un.
at(4) + un.
at(6) * un.
at(6);
240 answer.
at(1) += coeff * (
b [ 0 ] * ( dudx * u1u1 + dudy * u1u2 ) +
c [ 0 ] * ( dudx * u1u2 + dudy * u2u2 ) );
241 answer.
at(3) += coeff * (
b [ 1 ] * ( dudx * u1u1 + dudy * u1u2 ) +
c [ 1 ] * ( dudx * u1u2 + dudy * u2u2 ) );
242 answer.
at(5) += coeff * (
b [ 2 ] * ( dudx * u1u1 + dudy * u1u2 ) +
c [ 2 ] * ( dudx * u1u2 + dudy * u2u2 ) );
244 answer.
at(2) += coeff * (
b [ 0 ] * ( dvdx * u1u1 + dvdy * u1u2 ) +
c [ 0 ] * ( dvdx * u1u2 + dvdy * u2u2 ) );
245 answer.
at(4) += coeff * (
b [ 1 ] * ( dvdx * u1u1 + dvdy * u1u2 ) +
c [ 1 ] * ( dvdx * u1u2 + dvdy * u2u2 ) );
246 answer.
at(6) += coeff * (
b [ 2 ] * ( dvdx * u1u1 + dvdy * u1u2 ) +
c [ 2 ] * ( dvdx * u1u2 + dvdy * u2u2 ) );
261 double dudx [ 2 ] [ 2 ], usum [ 2 ];
262 double coeff, ar12 =
area / 12.;
263 int w_dof_addr, u_dof_addr, d1j, d2j, dij;
265 dudx [ 0 ] [ 0 ] =
b [ 0 ] * u.
at(1) +
b [ 1 ] * u.
at(3) +
b [ 2 ] * u.
at(5);
266 dudx [ 0 ] [ 1 ] =
c [ 0 ] * u.
at(1) +
c [ 1 ] * u.
at(3) +
c [ 2 ] * u.
at(5);
267 dudx [ 1 ] [ 0 ] =
b [ 0 ] * u.
at(2) +
b [ 1 ] * u.
at(4) +
b [ 2 ] * u.
at(6);
268 dudx [ 1 ] [ 1 ] =
c [ 0 ] * u.
at(2) +
c [ 1 ] * u.
at(4) +
c [ 2 ] * u.
at(6);
269 usum [ 0 ] = un.
at(1) + un.
at(3) + un.
at(5);
270 usum [ 1 ] = un.
at(2) + un.
at(4) + un.
at(6);
273 for (
int i = 1; i <= 2; i++ ) {
274 for (
int k = 1; k <= 3; k++ ) {
275 for (
int j = 1; j <= 2; j++ ) {
276 for (
int m = 1; m <= 3; m++ ) {
277 w_dof_addr = ( k - 1 ) * 2 + i;
278 u_dof_addr = ( m - 1 ) * 2 + j;
282 coeff = ( m == k ) ?
area / 6. :
area / 12.;
283 answer.
at(w_dof_addr, u_dof_addr) = rho * ( 0.0 * d1j * dudx [ i - 1 ] [ 0 ] * coeff + dij *
b [ m - 1 ] * ar12 * ( usum [ 0 ] + un.
at( ( k - 1 ) * 2 + 1 ) ) +
284 0.0 * d2j * dudx [ i - 1 ] [ 1 ] * coeff + dij *
c [ m - 1 ] * ar12 * ( usum [ 1 ] + un.
at( ( k - 1 ) * 2 + 2 ) ) );
291 for (
int i = 1; i <= 2; i++ ) {
292 for (
int k = 1; k <= 3; k++ ) {
293 for (
int j = 1; j <= 2; j++ ) {
294 for (
int m = 1; m <= 3; m++ ) {
295 w_dof_addr = ( k - 1 ) * 2 + i;
296 u_dof_addr = ( m - 1 ) * 2 + j;
300 answer.
at(w_dof_addr, u_dof_addr) +=
t_supg * rho *
302 0.0 * d1j *
b [ k - 1 ] * dudx [ i - 1 ] [ 0 ] * ar12 * ( usum [ 0 ] + un.
at( ( m - 1 ) * 2 + 1 ) ) +
303 0.0 * d1j *
b [ k - 1 ] * dudx [ i - 1 ] [ 1 ] * ar12 * ( usum [ 1 ] + un.
at( ( m - 1 ) * 2 + 2 ) ) +
304 0.0 * d2j *
c [ k - 1 ] * dudx [ i - 1 ] [ 0 ] * ar12 * ( usum [ 0 ] + un.
at( ( m - 1 ) * 2 + 1 ) ) +
305 0.0 * d2j *
c [ k - 1 ] * dudx [ i - 1 ] [ 1 ] * ar12 * ( usum [ 1 ] + un.
at( ( m - 1 ) * 2 + 2 ) ) +
307 0.0 * d1j *
b [ k - 1 ] * dudx [ i - 1 ] [ 0 ] * ar12 * ( usum [ 0 ] + un.
at( ( m - 1 ) * 2 + 1 ) ) +
308 dij *
b [ k - 1 ] *
b [ m - 1 ] * ar12 * ( usum [ 0 ] * usum [ 0 ] + un.
at(1) * un.
at(1) + un.
at(3) * un.
at(3) + un.
at(5) * un.
at(5) ) +
309 0.0 * d2j *
b [ k - 1 ] * dudx [ i - 1 ] [ 1 ] * ar12 * ( usum [ 0 ] + un.
at( ( m - 1 ) * 2 + 1 ) ) +
310 dij *
b [ k - 1 ] *
c [ m - 1 ] * ar12 * ( usum [ 0 ] * usum [ 1 ] + un.
at(1) * un.
at(2) + un.
at(3) * un.
at(4) + un.
at(5) * un.
at(6) ) +
312 0.0 * d1j *
c [ k - 1 ] * dudx [ i - 1 ] [ 0 ] * ar12 * ( usum [ 1 ] + un.
at( ( m - 1 ) * 2 + 2 ) ) +
313 dij *
c [ k - 1 ] *
b [ m - 1 ] * ar12 * ( usum [ 0 ] * usum [ 1 ] + un.
at(1) * un.
at(2) + un.
at(3) * un.
at(4) + un.
at(5) * un.
at(6) ) +
314 0.0 * d2j *
c [ k - 1 ] * dudx [ i - 1 ] [ 1 ] * ar12 * ( usum [ 1 ] + un.
at( ( m - 1 ) * 2 + 2 ) ) +
315 dij *
c [ k - 1 ] *
c [ m - 1 ] * ar12 * ( usum [ 1 ] * usum [ 1 ] + un.
at(2) * un.
at(2) + un.
at(4) * un.
at(4) + un.
at(6) * un.
at(6) )
392 double ar3 =
area / 3.0, coeff;
397 answer.
at(1, 1) = answer.
at(1, 2) = answer.
at(1, 3) = -
b [ 0 ] * ar3;
398 answer.
at(3, 1) = answer.
at(3, 2) = answer.
at(3, 3) = -
b [ 1 ] * ar3;
399 answer.
at(5, 1) = answer.
at(5, 2) = answer.
at(5, 3) = -
b [ 2 ] * ar3;
401 answer.
at(2, 1) = answer.
at(2, 2) = answer.
at(2, 3) = -
c [ 0 ] * ar3;
402 answer.
at(4, 1) = answer.
at(4, 2) = answer.
at(4, 3) = -
c [ 1 ] * ar3;
403 answer.
at(6, 1) = answer.
at(6, 2) = answer.
at(6, 3) = -
c [ 2 ] * ar3;
407 usum = un.
at(1) + un.
at(3) + un.
at(5);
408 vsum = un.
at(2) + un.
at(4) + un.
at(6);
411 answer.
at(1, 1) += coeff * ( usum *
b [ 0 ] *
b [ 0 ] + vsum *
c [ 0 ] *
b [ 0 ] );
412 answer.
at(1, 2) += coeff * ( usum *
b [ 0 ] *
b [ 1 ] + vsum *
c [ 0 ] *
b [ 1 ] );
413 answer.
at(1, 3) += coeff * ( usum *
b [ 0 ] *
b [ 2 ] + vsum *
c [ 0 ] *
b [ 2 ] );
415 answer.
at(3, 1) += coeff * ( usum *
b [ 1 ] *
b [ 0 ] + vsum *
c [ 1 ] *
b [ 0 ] );
416 answer.
at(3, 2) += coeff * ( usum *
b [ 1 ] *
b [ 1 ] + vsum *
c [ 1 ] *
b [ 1 ] );
417 answer.
at(3, 3) += coeff * ( usum *
b [ 1 ] *
b [ 2 ] + vsum *
c [ 1 ] *
b [ 2 ] );
419 answer.
at(5, 1) += coeff * ( usum *
b [ 2 ] *
b [ 0 ] + vsum *
c [ 2 ] *
b [ 0 ] );
420 answer.
at(5, 2) += coeff * ( usum *
b [ 2 ] *
b [ 1 ] + vsum *
c [ 2 ] *
b [ 1 ] );
421 answer.
at(5, 3) += coeff * ( usum *
b [ 2 ] *
b [ 2 ] + vsum *
c [ 2 ] *
b [ 2 ] );
423 answer.
at(2, 1) += coeff * ( usum *
b [ 0 ] *
c [ 0 ] + vsum *
c [ 0 ] *
c [ 0 ] );
424 answer.
at(2, 2) += coeff * ( usum *
b [ 0 ] *
c [ 1 ] + vsum *
c [ 0 ] *
c [ 1 ] );
425 answer.
at(2, 3) += coeff * ( usum *
b [ 0 ] *
c [ 2 ] + vsum *
c [ 0 ] *
c [ 2 ] );
427 answer.
at(4, 1) += coeff * ( usum *
b [ 1 ] *
c [ 0 ] + vsum *
c [ 1 ] *
c [ 0 ] );
428 answer.
at(4, 2) += coeff * ( usum *
b [ 1 ] *
c [ 1 ] + vsum *
c [ 1 ] *
c [ 1 ] );
429 answer.
at(4, 3) += coeff * ( usum *
b [ 1 ] *
c [ 2 ] + vsum *
c [ 1 ] *
c [ 2 ] );
431 answer.
at(6, 1) += coeff * ( usum *
b [ 2 ] *
c [ 0 ] + vsum *
c [ 2 ] *
c [ 0 ] );
432 answer.
at(6, 2) += coeff * ( usum *
b [ 2 ] *
c [ 1 ] + vsum *
c [ 2 ] *
c [ 1 ] );
433 answer.
at(6, 3) += coeff * ( usum *
b [ 2 ] *
c [ 2 ] + vsum *
c [ 2 ] *
c [ 2 ] );
576 int node1, node2, node3;
580 double l, t1, t2, _t1, _t2;
590 node2 = ( node1 == 3 ? 1 : node1 + 1 );
592 node3 = ( node2 == 3 ? 1 : node2 + 1 );
603 _t1 =
giveNode(node2)->giveCoordinate(1) -
giveNode(node1)->giveCoordinate(1);
604 _t2 =
giveNode(node2)->giveCoordinate(2) -
giveNode(node1)->giveCoordinate(2);
605 l = sqrt(_t1 * _t1 + _t2 * _t2);
610 double t11 = t1 * t1;
611 double t12 = t1 * t2;
612 double t22 = t2 * t2;
614 double d12 = d1 * d2;
615 double d13 = d1 * d3;
616 double d23 = d2 * d3;
618 answer.
at(1, 1) = ( l / 3 ) * beta * d1 * t11;
619 answer.
at(1, 2) = ( l / 3 ) * beta * d1 * t12;
620 answer.
at(2, 1) = ( l / 3 ) * beta * d1 * t12;
621 answer.
at(2, 2) = ( l / 3 ) * beta * d1 * t22;
623 answer.
at(1, 3) = ( l / 6 ) * beta * d12 * t11;
624 answer.
at(1, 4) = ( l / 6 ) * beta * d12 * t12;
625 answer.
at(2, 3) = ( l / 6 ) * beta * d12 * t12;
626 answer.
at(2, 4) = ( l / 6 ) * beta * d12 * t22;
628 answer.
at(1, 5) = ( l / 6 ) * beta * d13 * t11;
629 answer.
at(1, 6) = ( l / 6 ) * beta * d13 * t12;
630 answer.
at(2, 5) = ( l / 6 ) * beta * d13 * t12;
631 answer.
at(2, 6) = ( l / 6 ) * beta * d13 * t22;
633 answer.
at(3, 1) = ( l / 6 ) * beta * d12 * t11;
634 answer.
at(3, 2) = ( l / 6 ) * beta * d12 * t12;
635 answer.
at(4, 1) = ( l / 6 ) * beta * d12 * t12;
636 answer.
at(4, 2) = ( l / 6 ) * beta * d12 * t22;
638 answer.
at(3, 3) = ( l / 3 ) * beta * d2 * t11;
639 answer.
at(3, 4) = ( l / 3 ) * beta * d2 * t12;
640 answer.
at(4, 3) = ( l / 3 ) * beta * d2 * t12;
641 answer.
at(4, 4) = ( l / 3 ) * beta * d2 * t22;
643 answer.
at(3, 5) = ( l / 6 ) * beta * d23 * t11;
644 answer.
at(3, 6) = ( l / 6 ) * beta * d23 * t12;
645 answer.
at(4, 5) = ( l / 6 ) * beta * d23 * t12;
646 answer.
at(4, 6) = ( l / 6 ) * beta * d23 * t22;
648 answer.
at(5, 1) = ( l / 6 ) * beta * d13 * t11;
649 answer.
at(5, 2) = ( l / 6 ) * beta * d13 * t12;
650 answer.
at(6, 1) = ( l / 6 ) * beta * d13 * t12;
651 answer.
at(6, 2) = ( l / 6 ) * beta * d13 * t22;
653 answer.
at(5, 3) = ( l / 6 ) * beta * d23 * t11;
654 answer.
at(5, 4) = ( l / 6 ) * beta * d23 * t12;
655 answer.
at(6, 3) = ( l / 6 ) * beta * d23 * t12;
656 answer.
at(6, 4) = ( l / 6 ) * beta * d23 * t22;
658 answer.
at(5, 5) = ( l / 3 ) * beta * d3 * t11;
659 answer.
at(5, 6) = ( l / 3 ) * beta * d3 * t12;
660 answer.
at(6, 5) = ( l / 3 ) * beta * d3 * t12;
661 answer.
at(6, 6) = ( l / 3 ) * beta * d3 * t22;
670 int node1, node2, node3;
674 double l, n1, n2, _t1, _t2;
683 node2 = ( node1 == 3 ? 1 : node1 + 1 );
685 node3 = ( node2 == 3 ? 1 : node2 + 1 );
696 _t1 =
giveNode(node2)->giveCoordinate(1) -
giveNode(node1)->giveCoordinate(1);
697 _t2 =
giveNode(node2)->giveCoordinate(2) -
giveNode(node1)->giveCoordinate(2);
698 l = sqrt(_t1 * _t1 + _t2 * _t2);
703 double n11 = n1 * n1;
704 double n12 = n1 * n2;
705 double n22 = n2 * n2;
707 double d12 = d1 * d2;
708 double d13 = d1 * d3;
709 double d23 = d2 * d3;
711 answer.
at(1, 1) = ( l / 3 ) * ( 1 / alpha ) * d1 * n11;
712 answer.
at(1, 2) = ( l / 3 ) * ( 1 / alpha ) * d1 * n12;
713 answer.
at(2, 1) = ( l / 3 ) * ( 1 / alpha ) * d1 * n12;
714 answer.
at(2, 2) = ( l / 3 ) * ( 1 / alpha ) * d1 * n22;
716 answer.
at(1, 3) = ( l / 6 ) * ( 1 / alpha ) * d12 * n11;
717 answer.
at(1, 4) = ( l / 6 ) * ( 1 / alpha ) * d12 * n12;
718 answer.
at(2, 3) = ( l / 6 ) * ( 1 / alpha ) * d12 * n12;
719 answer.
at(2, 4) = ( l / 6 ) * ( 1 / alpha ) * d12 * n22;
721 answer.
at(1, 5) = ( l / 6 ) * ( 1 / alpha ) * d13 * n11;
722 answer.
at(1, 6) = ( l / 6 ) * ( 1 / alpha ) * d13 * n12;
723 answer.
at(2, 5) = ( l / 6 ) * ( 1 / alpha ) * d13 * n12;
724 answer.
at(2, 6) = ( l / 6 ) * ( 1 / alpha ) * d13 * n22;
726 answer.
at(3, 1) = ( l / 6 ) * ( 1 / alpha ) * d12 * n11;
727 answer.
at(3, 2) = ( l / 6 ) * ( 1 / alpha ) * d12 * n12;
728 answer.
at(4, 1) = ( l / 6 ) * ( 1 / alpha ) * d12 * n12;
729 answer.
at(4, 2) = ( l / 6 ) * ( 1 / alpha ) * d12 * n22;
731 answer.
at(3, 3) = ( l / 3 ) * ( 1 / alpha ) * d2 * n11;
732 answer.
at(3, 4) = ( l / 3 ) * ( 1 / alpha ) * d2 * n12;
733 answer.
at(4, 3) = ( l / 3 ) * ( 1 / alpha ) * d2 * n12;
734 answer.
at(4, 4) = ( l / 3 ) * ( 1 / alpha ) * d2 * n22;
736 answer.
at(3, 5) = ( l / 6 ) * ( 1 / alpha ) * d23 * n11;
737 answer.
at(3, 6) = ( l / 6 ) * ( 1 / alpha ) * d23 * n12;
738 answer.
at(4, 5) = ( l / 6 ) * ( 1 / alpha ) * d23 * n12;
739 answer.
at(4, 6) = ( l / 6 ) * ( 1 / alpha ) * d23 * n22;
741 answer.
at(5, 1) = ( l / 6 ) * ( 1 / alpha ) * d13 * n11;
742 answer.
at(5, 2) = ( l / 6 ) * ( 1 / alpha ) * d13 * n12;
743 answer.
at(6, 1) = ( l / 6 ) * ( 1 / alpha ) * d13 * n12;
744 answer.
at(6, 2) = ( l / 6 ) * ( 1 / alpha ) * d13 * n22;
746 answer.
at(5, 3) = ( l / 6 ) * ( 1 / alpha ) * d23 * n11;
747 answer.
at(5, 4) = ( l / 6 ) * ( 1 / alpha ) * d23 * n12;
748 answer.
at(6, 3) = ( l / 6 ) * ( 1 / alpha ) * d23 * n12;
749 answer.
at(6, 4) = ( l / 6 ) * ( 1 / alpha ) * d23 * n22;
751 answer.
at(5, 5) = ( l / 3 ) * ( 1 / alpha ) * d3 * n11;
752 answer.
at(5, 6) = ( l / 3 ) * ( 1 / alpha ) * d3 * n12;
753 answer.
at(6, 5) = ( l / 3 ) * ( 1 / alpha ) * d3 * n12;
754 answer.
at(6, 6) = ( l / 3 ) * ( 1 / alpha ) * d3 * n22;
762 int node1, node2, node3;
766 double l, n1, n2, t1, t2;
773 node2 = ( node1 == 3 ? 1 : node1 + 1 );
775 node3 = ( node2 == 3 ? 1 : node2 + 1 );
787 t1 =
giveNode(node2)->giveCoordinate(1) -
giveNode(node1)->giveCoordinate(1);
788 t2 =
giveNode(node2)->giveCoordinate(2) -
giveNode(node1)->giveCoordinate(2);
789 l = sqrt(t1 * t1 + t2 * t2);
794 answer.
at(1, 1) = ( l / 3 ) * d1 * d1 * n1;
795 answer.
at(1, 2) = ( l / 6 ) * d1 * d2 * n1;
796 answer.
at(1, 3) = ( l / 6 ) * d1 * d3 * n1;
797 answer.
at(2, 1) = ( l / 3 ) * d1 * d1 * n2;
798 answer.
at(2, 2) = ( l / 6 ) * d1 * d2 * n2;
799 answer.
at(2, 3) = ( l / 6 ) * d1 * d3 * n2;
801 answer.
at(3, 1) = ( l / 6 ) * d2 * d1 * n1;
802 answer.
at(3, 2) = ( l / 3 ) * d2 * d2 * n1;
803 answer.
at(3, 3) = ( l / 6 ) * d2 * d3 * n1;
804 answer.
at(4, 1) = ( l / 6 ) * d2 * d1 * n2;
805 answer.
at(4, 2) = ( l / 3 ) * d2 * d2 * n2;
806 answer.
at(4, 3) = ( l / 6 ) * d2 * d3 * n2;
808 answer.
at(5, 1) = ( l / 6 ) * d3 * d1 * n1;
809 answer.
at(5, 2) = ( l / 6 ) * d3 * d2 * n1;
810 answer.
at(5, 3) = ( l / 3 ) * d3 * d3 * n1;
811 answer.
at(6, 1) = ( l / 6 ) * d3 * d1 * n2;
812 answer.
at(6, 2) = ( l / 6 ) * d3 * d2 * n2;
813 answer.
at(6, 3) = ( l / 3 ) * d3 * d3 * n2;
882 usum [ 0 ] = un.
at(1) + un.
at(3) + un.
at(5);
883 usum [ 1 ] = un.
at(2) + un.
at(4) + un.
at(6);
884 double coeff = rho *
area / 3.0;
886 for (
int i = 1; i <= nLoads; i++ ) {
892 answer.
at(1) += coeff * ( gVector.
at(1) * ( 1.0 +
t_supg * (
b [ 0 ] * usum [ 0 ] +
c [ 0 ] * usum [ 1 ] ) ) );
893 answer.
at(2) += coeff * ( gVector.
at(2) * ( 1.0 +
t_supg * (
b [ 0 ] * usum [ 0 ] +
c [ 0 ] * usum [ 1 ] ) ) );
894 answer.
at(3) += coeff * ( gVector.
at(1) * ( 1.0 +
t_supg * (
b [ 1 ] * usum [ 0 ] +
c [ 1 ] * usum [ 1 ] ) ) );
895 answer.
at(4) += coeff * ( gVector.
at(2) * ( 1.0 +
t_supg * (
b [ 1 ] * usum [ 0 ] +
c [ 1 ] * usum [ 1 ] ) ) );
896 answer.
at(5) += coeff * ( gVector.
at(1) * ( 1.0 +
t_supg * (
b [ 2 ] * usum [ 0 ] +
c [ 2 ] * usum [ 1 ] ) ) );
897 answer.
at(6) += coeff * ( gVector.
at(2) * ( 1.0 +
t_supg * (
b [ 2 ] * usum [ 0 ] +
c [ 2 ] * usum [ 1 ] ) ) );
910 gVector.
at(1) = tau_0 * sqrt(kx * phi) / ( kx * alpha );
911 gVector.
at(2) = tau_0 * sqrt(ky * phi) / ( ky * alpha );
913 answer.
at(1) -=
area * ( gVector.
at(1) * ( 1.0 +
t_supg * (
b [ 0 ] * usum [ 0 ] +
c [ 0 ] * usum [ 1 ] ) ) );
914 answer.
at(2) -=
area * ( gVector.
at(2) * ( 1.0 +
t_supg * (
b [ 0 ] * usum [ 0 ] +
c [ 0 ] * usum [ 1 ] ) ) );
915 answer.
at(3) -=
area * ( gVector.
at(1) * ( 1.0 +
t_supg * (
b [ 1 ] * usum [ 0 ] +
c [ 1 ] * usum [ 1 ] ) ) );
916 answer.
at(4) -=
area * ( gVector.
at(2) * ( 1.0 +
t_supg * (
b [ 1 ] * usum [ 0 ] +
c [ 1 ] * usum [ 1 ] ) ) );
917 answer.
at(5) -=
area * ( gVector.
at(1) * ( 1.0 +
t_supg * (
b [ 2 ] * usum [ 0 ] +
c [ 2 ] * usum [ 1 ] ) ) );
918 answer.
at(6) -=
area * ( gVector.
at(2) * ( 1.0 +
t_supg * (
b [ 2 ] * usum [ 0 ] +
c [ 2 ] * usum [ 1 ] ) ) );
935 for (
int i = 1; i <= numLoads; i++ ) {
940 n2 = ( n1 == 3 ? 1 : n1 + 1 );
944 l = sqrt(tx * tx + ty * ty);
949 load->computeValueAt(t, tStep, coords, VM_Total);
953 answer.
at( ( n1 - 1 ) * 2 + 1 ) += t.
at(1) * l / 2.;
954 answer.
at(n1 * 2) += t.
at(2) * l / 2.;
956 answer.
at( ( n2 - 1 ) * 2 + 1 ) += t.
at(1) * l / 2.;
957 answer.
at(n2 * 2) += t.
at(2) * l / 2.;
1090TR1_2D_SUPG :: updateStabilizationCoeffs(
TimeStep *tStep)
1094 int i, j, k, m, km1, mm1, d1j, d2j, dij, w_dof_addr, u_dof_addr;
1095 double __g_norm, __gamma_norm, __gammav_norm, __beta_norm, __betav_norm, __c_norm, __ctilda_norm, __e_norm, __k_norm, __Re;
1096 double __t_p1, __t_p2, __t_p3, __t_s1, __t_s2, __t_s3;
1098 double dudx [ 2 ] [ 2 ], usum [ 2 ];
1118 usum [ 0 ] = un.
at(1) + un.
at(3) + un.
at(5);
1119 usum [ 1 ] = un.
at(2) + un.
at(4) + un.
at(6);
1125 double ar3 =
area / 3.0;
1127 __tmp.
at(1, 1) = __tmp.
at(1, 2) = __tmp.
at(1, 3) =
b [ 0 ] * ar3;
1128 __tmp.
at(3, 1) = __tmp.
at(3, 2) = __tmp.
at(3, 3) =
b [ 1 ] * ar3;
1129 __tmp.
at(5, 1) = __tmp.
at(5, 2) = __tmp.
at(5, 3) =
b [ 2 ] * ar3;
1131 __tmp.
at(2, 1) = __tmp.
at(2, 2) = __tmp.
at(2, 3) =
c [ 0 ] * ar3;
1132 __tmp.
at(4, 1) = __tmp.
at(4, 2) = __tmp.
at(4, 3) =
c [ 1 ] * ar3;
1133 __tmp.
at(6, 1) = __tmp.
at(6, 2) = __tmp.
at(6, 3) =
c [ 2 ] * ar3;
1139 dudx [ 0 ] [ 0 ] =
b [ 0 ] * u.
at(1) +
b [ 1 ] * u.
at(3) +
b [ 2 ] * u.
at(5);
1140 dudx [ 0 ] [ 1 ] =
c [ 0 ] * u.
at(1) +
c [ 1 ] * u.
at(3) +
c [ 2 ] * u.
at(5);
1141 dudx [ 1 ] [ 0 ] =
b [ 0 ] * u.
at(2) +
b [ 1 ] * u.
at(4) +
b [ 2 ] * u.
at(6);
1142 dudx [ 1 ] [ 1 ] =
c [ 0 ] * u.
at(2) +
c [ 1 ] * u.
at(4) +
c [ 2 ] * u.
at(6);
1146 double coeff =
area / 3.;
1147 for ( k = 1; k <= 3; k++ ) {
1149 for ( j = 1; j <= 2; j++ ) {
1150 for ( m = 1; m <= 3; m++ ) {
1152 u_dof_addr = ( m - 1 ) * 2 + j;
1156 __tmp.
at(w_dof_addr, u_dof_addr) = coeff * ( 0.0 * d1j *
b [ km1 ] * dudx [ 0 ] [ 0 ] + d1j *
b [ km1 ] *
b [ mm1 ] * usum [ 0 ] +
1157 0.0 * d2j *
b [ km1 ] * dudx [ 0 ] [ 1 ] + d1j *
b [ km1 ] *
c [ mm1 ] * usum [ 1 ] +
1158 0.0 * d1j *
c [ km1 ] * dudx [ 1 ] [ 0 ] + d2j *
c [ km1 ] *
b [ mm1 ] * usum [ 0 ] +
1159 0.0 * d2j *
c [ km1 ] * dudx [ 1 ] [ 1 ] + d2j *
c [ km1 ] *
c [ mm1 ] * usum [ 1 ] );
1170 __tmp.
at(1, 1) = __tmp.
at(1, 3) = __tmp.
at(1, 5) = ar3 *
b [ 0 ];
1171 __tmp.
at(1, 2) = __tmp.
at(1, 4) = __tmp.
at(1, 6) = ar3 *
c [ 0 ];
1172 __tmp.
at(2, 1) = __tmp.
at(2, 3) = __tmp.
at(2, 5) = ar3 *
b [ 1 ];
1173 __tmp.
at(2, 2) = __tmp.
at(2, 4) = __tmp.
at(2, 6) = ar3 *
c [ 1 ];
1174 __tmp.
at(3, 1) = __tmp.
at(3, 3) = __tmp.
at(3, 5) = ar3 *
b [ 2 ];
1175 __tmp.
at(3, 2) = __tmp.
at(3, 4) = __tmp.
at(3, 6) = ar3 *
c [ 2 ];
1184 for ( i = 1; i <= 2; i++ ) {
1185 for ( k = 1; k <= 3; k++ ) {
1186 for ( j = 1; j <= 2; j++ ) {
1187 for ( m = 1; m <= 3; m++ ) {
1188 w_dof_addr = ( k - 1 ) * 2 + i;
1189 u_dof_addr = ( m - 1 ) * 2 + j;
1193 coeff = ( m == k ) ?
area / 6. :
area / 12.;
1194 __tmp.
at(w_dof_addr, u_dof_addr) = rho * ( 0.0 * d1j * dudx [ i - 1 ] [ 0 ] * coeff + dij *
b [ m - 1 ] * (
area / 12. ) * ( usum [ 0 ] + un.
at( ( k - 1 ) * 2 + 1 ) ) +
1195 0.0 * d2j * dudx [ i - 1 ] [ 1 ] * coeff + dij *
c [ m - 1 ] * (
area / 12. ) * ( usum [ 1 ] + un.
at( ( k - 1 ) * 2 + 2 ) ) );
1205 coeff = rho *
area / 12.;
1207 __tmp.
at(1, 1) = coeff * (
b [ 0 ] * ( usum [ 0 ] + un.
at(1) ) +
c [ 0 ] * ( usum [ 1 ] + un.
at(2) ) );
1208 __tmp.
at(1, 3) = coeff * (
b [ 0 ] * ( usum [ 0 ] + un.
at(3) ) +
c [ 0 ] * ( usum [ 1 ] + un.
at(4) ) );
1209 __tmp.
at(1, 5) = coeff * (
b [ 0 ] * ( usum [ 0 ] + un.
at(5) ) +
c [ 0 ] * ( usum [ 1 ] + un.
at(6) ) );
1211 __tmp.
at(2, 2) = coeff * (
b [ 0 ] * ( usum [ 0 ] + un.
at(1) ) +
c [ 0 ] * ( usum [ 1 ] + un.
at(2) ) );
1212 __tmp.
at(2, 4) = coeff * (
b [ 0 ] * ( usum [ 0 ] + un.
at(3) ) +
c [ 0 ] * ( usum [ 1 ] + un.
at(4) ) );
1213 __tmp.
at(2, 6) = coeff * (
b [ 0 ] * ( usum [ 0 ] + un.
at(5) ) +
c [ 0 ] * ( usum [ 1 ] + un.
at(6) ) );
1215 __tmp.
at(3, 1) = coeff * (
b [ 1 ] * ( usum [ 0 ] + un.
at(1) ) +
c [ 1 ] * ( usum [ 1 ] + un.
at(2) ) );
1216 __tmp.
at(3, 3) = coeff * (
b [ 1 ] * ( usum [ 0 ] + un.
at(3) ) +
c [ 1 ] * ( usum [ 1 ] + un.
at(4) ) );
1217 __tmp.
at(3, 5) = coeff * (
b [ 1 ] * ( usum [ 0 ] + un.
at(5) ) +
c [ 1 ] * ( usum [ 1 ] + un.
at(6) ) );
1219 __tmp.
at(4, 2) = coeff * (
b [ 1 ] * ( usum [ 0 ] + un.
at(1) ) +
c [ 1 ] * ( usum [ 1 ] + un.
at(2) ) );
1220 __tmp.
at(4, 4) = coeff * (
b [ 1 ] * ( usum [ 0 ] + un.
at(3) ) +
c [ 1 ] * ( usum [ 1 ] + un.
at(4) ) );
1221 __tmp.
at(4, 6) = coeff * (
b [ 1 ] * ( usum [ 0 ] + un.
at(5) ) +
c [ 1 ] * ( usum [ 1 ] + un.
at(6) ) );
1223 __tmp.
at(5, 1) = coeff * (
b [ 2 ] * ( usum [ 0 ] + un.
at(1) ) +
c [ 2 ] * ( usum [ 1 ] + un.
at(2) ) );
1224 __tmp.
at(5, 3) = coeff * (
b [ 2 ] * ( usum [ 0 ] + un.
at(3) ) +
c [ 2 ] * ( usum [ 1 ] + un.
at(4) ) );
1225 __tmp.
at(5, 5) = coeff * (
b [ 2 ] * ( usum [ 0 ] + un.
at(5) ) +
c [ 2 ] * ( usum [ 1 ] + un.
at(6) ) );
1227 __tmp.
at(6, 2) = coeff * (
b [ 2 ] * ( usum [ 0 ] + un.
at(1) ) +
c [ 2 ] * ( usum [ 1 ] + un.
at(2) ) );
1228 __tmp.
at(6, 4) = coeff * (
b [ 2 ] * ( usum [ 0 ] + un.
at(3) ) +
c [ 2 ] * ( usum [ 1 ] + un.
at(4) ) );
1229 __tmp.
at(6, 6) = coeff * (
b [ 2 ] * ( usum [ 0 ] + un.
at(5) ) +
c [ 2 ] * ( usum [ 1 ] + un.
at(6) ) );
1237 b [ 0 ],
c [ 0 ],
b [ 1 ],
c [ 1 ],
b [ 2 ],
c [ 2 ]
1240 for ( i = 1; i <= 6; i++ ) {
1241 for ( j = 1; j <= 6; j++ ) {
1242 __tmp.
at(i, j) = coeff * __n [ i - 1 ] * __n [ j - 1 ];
1252 double ar12 =
area / 12.;
1253 for ( i = 1; i <= 2; i++ ) {
1254 for ( k = 1; k <= 3; k++ ) {
1255 for ( j = 1; j <= 2; j++ ) {
1256 for ( m = 1; m <= 3; m++ ) {
1257 w_dof_addr = ( k - 1 ) * 2 + i;
1258 u_dof_addr = ( m - 1 ) * 2 + j;
1262 __tmp.
at(w_dof_addr, u_dof_addr) += rho *
1264 0.0 * d1j *
b [ k - 1 ] * dudx [ i - 1 ] [ 0 ] * ar12 * ( usum [ 0 ] + un.
at( ( m - 1 ) * 2 + 1 ) ) +
1265 0.0 * d1j *
b [ k - 1 ] * dudx [ i - 1 ] [ 1 ] * ar12 * ( usum [ 1 ] + un.
at( ( m - 1 ) * 2 + 2 ) ) +
1266 0.0 * d2j *
c [ k - 1 ] * dudx [ i - 1 ] [ 0 ] * ar12 * ( usum [ 0 ] + un.
at( ( m - 1 ) * 2 + 1 ) ) +
1267 0.0 * d2j *
c [ k - 1 ] * dudx [ i - 1 ] [ 1 ] * ar12 * ( usum [ 1 ] + un.
at( ( m - 1 ) * 2 + 2 ) ) +
1269 0.0 * d1j *
b [ k - 1 ] * dudx [ i - 1 ] [ 0 ] * ar12 * ( usum [ 0 ] + un.
at( ( m - 1 ) * 2 + 1 ) ) +
1270 dij *
b [ k - 1 ] *
b [ m - 1 ] * ar12 * ( usum [ 0 ] * usum [ 0 ] + un.
at(1) * un.
at(1) + un.
at(3) * un.
at(3) + un.
at(5) * un.
at(5) ) +
1271 0.0 * d2j *
b [ k - 1 ] * dudx [ i - 1 ] [ 1 ] * ar12 * ( usum [ 0 ] + un.
at( ( m - 1 ) * 2 + 1 ) ) +
1272 dij *
b [ k - 1 ] *
c [ m - 1 ] * ar12 * ( usum [ 0 ] * usum [ 1 ] + un.
at(1) * un.
at(2) + un.
at(3) * un.
at(4) + un.
at(5) * un.
at(6) ) +
1274 0.0 * d1j *
c [ k - 1 ] * dudx [ i - 1 ] [ 0 ] * ar12 * ( usum [ 1 ] + un.
at( ( m - 1 ) * 2 + 2 ) ) +
1275 dij *
c [ k - 1 ] *
b [ m - 1 ] * ar12 * ( usum [ 0 ] * usum [ 1 ] + un.
at(1) * un.
at(2) + un.
at(3) * un.
at(4) + un.
at(5) * un.
at(6) ) +
1276 0.0 * d2j *
c [ k - 1 ] * dudx [ i - 1 ] [ 1 ] * ar12 * ( usum [ 1 ] + un.
at( ( m - 1 ) * 2 + 2 ) ) +
1277 dij *
c [ k - 1 ] *
c [ m - 1 ] * ar12 * ( usum [ 1 ] * usum [ 1 ] + un.
at(2) * un.
at(2) + un.
at(4) * un.
at(4) + un.
at(6) * un.
at(6) )
1285 double u_1, u_2, vnorm = 0.;
1287 for ( i = 1; i <= 3; i++ ) {
1289 u_1 = u.
at( ( im1 ) * 2 + 1 );
1290 u_2 = u.
at( ( im1 ) * 2 + 2 );
1291 vnorm =
max( vnorm, sqrt(u_1 * u_1 + u_2 * u_2) );
1294 if ( vnorm == 0.0 ) {
1298 this->
t_supg = 1. / sqrt( 1. / ( t_sugn2 * t_sugn2 ) );
1303 __Re = vnorm * vnorm * __c_norm / __k_norm / nu;
1305 __t_p1 = __g_norm / __gamma_norm;
1307 __t_p3 = __t_p1 * __Re;
1308 this->
t_pspg = 1. / sqrt( 1. / ( __t_p1 * __t_p1 ) + 1. / ( __t_p2 * __t_p2 ) + 1. / ( __t_p3 * __t_p3 ) );
1311 __t_s1 = __c_norm / __k_norm;
1313 __t_s3 = __t_s1 * __Re;
1314 this->
t_supg = 1. / sqrt( 1. / ( __t_s1 * __t_s1 ) + 1. / ( __t_s2 * __t_s2 ) + 1. / ( __t_s3 * __t_s3 ) );
1317 this->
t_lsic = __c_norm / __e_norm;
1323 double h_ugn,
sum = 0.0, vnorm, t_sugn1, t_sugn2, t_sugn3, u_1, u_2, z, Re_ugn;
1324 double dscale, uscale, lscale, tscale, dt;
1351 for (
int i = 1; i <= 3; i++ ) {
1353 sum += fabs(u.
at( ( im1 ) * 2 + 1 ) *
b [ im1 ] / lscale + u.
at(im1 * 2 + 2) *
c [ im1 ] / lscale);
1362 for (
int i = 1; i <= 3; i++ ) {
1364 u_1 = u.
at( ( im1 ) * 2 + 1 );
1365 u_2 = u.
at( ( im1 ) * 2 + 2 );
1366 vnorm =
max( vnorm, sqrt(u_1 * u_1 + u_2 * u_2) );
1369 if ( ( vnorm == 0.0 ) || (
sum < vnorm * 1e-10 ) ) {
1373 this->
t_supg = 1. / sqrt( 1. / ( t_sugn2 * t_sugn2 ) );
1377 h_ugn = 2.0 * vnorm /
sum;
1380 t_sugn3 = h_ugn * h_ugn / 4.0 / nu;
1382 this->
t_supg = 1. / sqrt( 1. / ( t_sugn1 * t_sugn1 ) + 1. / ( t_sugn2 * t_sugn2 ) + 1. / ( t_sugn3 * t_sugn3 ) );
1385 Re_ugn = vnorm * h_ugn / ( 2. * nu );
1386 z = ( Re_ugn <= 3. ) ? Re_ugn / 3. : 1.0;
1387 this->
t_lsic = h_ugn * vnorm * z / 2.0;
1395 this->
t_supg *= uscale / lscale;
1396 this->
t_pspg *= 1. / ( lscale * dscale );
1397 this->
t_lsic *= ( dscale * uscale ) / ( lscale * lscale );
2304 int i, indx, result = 0;
2310 if ( !
gc.testElementGraphicActivity(
this) ) {
2317 if ( (
gc.giveIntVarType() == IST_VOFFraction ) && (
gc.giveIntVarMode() ==
ISM_local ) ) {
2320 EASValsSetColor(
gc.getStandardSparseProfileColor() );
2338 if ( result != 3 ) {
2342 indx =
gc.giveIntVarIndx();
2344 s [ 0 ] = v1.
at(indx);
2345 s [ 1 ] = v2.
at(indx);
2346 s [ 2 ] = v3.
at(indx);
2351 for ( i = 0; i < 3; i++ ) {
2352 p [ i ].x = ( FPNum ) this->
giveNode(i + 1)->giveCoordinate(1);
2353 p [ i ].y = ( FPNum ) this->
giveNode(i + 1)->giveCoordinate(2);
2358 gc.updateFringeTableMinMax(s, 3);
2359 tr = CreateTriangleWD3D(
p, s [ 0 ], s [ 1 ], s [ 2 ]);
2360 EGWithMaskChangeAttributes(LAYER_MASK, tr);
2361 EMAddGraphicsToModel(ESIModel(), tr);
2363 double landScale =
gc.getLandScale();
2365 for ( i = 0; i < 3; i++ ) {
2366 p [ i ].x = ( FPNum ) this->
giveNode(i + 1)->giveCoordinate(1);
2367 p [ i ].y = ( FPNum ) this->
giveNode(i + 1)->giveCoordinate(2);
2368 p [ i ].z = s [ i ] * landScale;
2372 EASValsSetColor(
gc.getDeformedElementColor() );
2374 EASValsSetFillStyle(FILL_SOLID);
2375 tr = CreateTriangle3D(
p);
2376 EGWithMaskChangeAttributes(WIDTH_MASK | COLOR_MASK | FILL_MASK | LAYER_MASK, tr);
2378 gc.updateFringeTableMinMax(s, 3);
2379 EASValsSetFillStyle(FILL_SOLID);
2380 tr = CreateTriangleWD3D(
p, s [ 0 ], s [ 1 ], s [ 2 ]);
2381 EGWithMaskChangeAttributes(FILL_MASK | LAYER_MASK, tr);
2384 EMAddGraphicsToModel(ESIModel(), tr);
oofem::oofegGraphicContext gc[OOFEG_LAST_LAYER]