36 1 JLT ,CAND_B ,CAND_E ,CB_LOC ,CE_LOC ,
37 2 X1 ,X2 ,X3 ,X4 ,Y1 ,
38 3 Y2 ,Y3 ,Y4 ,Z1 ,Z2 ,
39 4 Z3 ,Z4 ,XI ,YI ,ZI ,
40 5 NX1 ,NX2 ,NX3 ,NX4 ,NY1 ,
41 6 NY2 ,NY3 ,NY4 ,NZ1 ,NZ2 ,
42 7 NZ3 ,NZ4 ,LB1 ,LB2 ,LB3 ,
43 8 LB4 ,LC1 ,LC2 ,LC3 ,LC4 ,
44 9 P1 ,P2 ,P3 ,P4 ,IX1 ,
45 A IX2 ,IX3 ,IX4 ,NSVG ,STIF ,
46 B JLT_NEW,GAPV ,INACTI ,CAND_P ,N_SCUT ,
48 D VZI ,MSI ,KINI ,SURF ,IBAG ,
49 E ITAB ,IRECT ,I_STOK ,IXS ,NFT ,
50 F CoG ,Seff ,Delta ,X)
65#include "implicit_f.inc"
76 INTEGER JLT, JLT_NEW,INACTI, CAND_B(*),CB_LOC(MVSIZ),NFT,
77 . CAND_E(*),CE_LOC(MVSIZ), NSVG(MVSIZ), KINI(*), IXS(NIXS,*)
78 INTEGER IX1(MVSIZ), IX2(MVSIZ), IX3(MVSIZ), IX4(MVSIZ),
79 . INDEX(MVSIZ),IBAG, ITAB(*),IRECT(4,*),I_STOK
81 . NX1(MVSIZ), NX2(MVSIZ), NX3(MVSIZ), NX4(MVSIZ),
82 . NY1(MVSIZ), NY2(MVSIZ), NY3(MVSIZ), NY4(MVSIZ),
83 . NZ1(MVSIZ), NZ2(MVSIZ), NZ3(MVSIZ), NZ4(MVSIZ),
84 . LB1(MVSIZ), LB2(MVSIZ), LB3(MVSIZ), LB4(MVSIZ),
85 . LC1(MVSIZ), LC2(MVSIZ), LC3(MVSIZ), LC4(MVSIZ),
86 . X1(MVSIZ), X2(MVSIZ), X3(MVSIZ), X4(MVSIZ),
87 . Y1(MVSIZ), Y2(MVSIZ), Y3(MVSIZ), Y4(MVSIZ),
88 . Z1(MVSIZ), Z2(MVSIZ), Z3(MVSIZ), Z4(MVSIZ),
89 . XI(MVSIZ), YI(MVSIZ), ZI(MVSIZ), STIF(MVSIZ),
90 . P1(MVSIZ), P2(MVSIZ), P3(MVSIZ), P4(MVSIZ),
91 . gapv(mvsiz), cand_p(*),
92 . vxi(mvsiz), vyi(mvsiz), vzi(mvsiz), msi(mvsiz),
101 my_real :: node(16,2)
105 INTEGER :: I, J, NIN, IB, IFT,ILT, K, Q, L
106 INTEGER :: NBCUT , IE, IEDG_LAG, IEDG_SCUT
107 INTEGER :: ICUT, IDX_LAG(7), IDX_SCUT(7)
108 INTEGER :: TAG_SCUT(4,NBCUT_MAX), TAG_NOD(4,NBCUT_MAX)
109 INTEGER :: IS_ON_SCUT(NBCUT_MAX), NP, Snod_On_Lag(6)
111 INTEGER :: IADD(4,6), NCUT(NBCUT_MAX), NP_RECT(MVSIZ),ITMP, NN
112 INTEGER :: HULL_PT, HULL_IDX(24)
113 INTEGER :: NP_INTER, NP_LAG, NP_SURF, NODE_NUM,brickID, ListP(4), NBCUT_ADD
114 my_real :: NODE_XY(2,24), NODE_XYZ(3,24), PS, MARGE
115 my_real :: dist_pcut(nbcut_max, 4,i_stok)
117 my_real :: normal(3), basis(3), ph(3,nbcut_max,4),p(3,4), a,b,c,d , a2,b2,c2 ,a2b2, l2, dist(4), pph(3,4)
118 my_real :: distance(4), edge(4),
119 my_real :: sh(3,nbcut_max,8), s(3,8)
120 my_real :: scut_pts(3,6)
121 my_real :: k1(2),k2(2),k3(2),k4(2)
122 my_real :: point(3),ratio,cog3
124 . x0(mvsiz), y0(mvsiz), z0(mvsiz),
125 . x01(mvsiz), x02(mvsiz), x03(mvsiz), x04(mvsiz),
126 . y01(mvsiz), y02(mvsiz), y03(mvsiz), y04(mvsiz),
127 . z01(mvsiz), z02(mvsiz), z03(mvsiz), z04(mvsiz)
134 . nny1(mvsiz), nny2(mvsiz), nny3(mvsiz), nny4(mvsiz),
135 . nnz1(mvsiz), nnz2(mvsiz), nnz3(mvsiz), nnz4(mvsiz)
137 . val1,val2,val3, v1(3), v2(3), v3(3), m(3,3,nbcut_max),vec(3),
139 .
interp(2), wet_ratio(0:4), z(3), stria(4), dsum, numgrav, pgrav(3),
140 . cumul_val1, cumul_val2
142 my_real,
DIMENSION(3) :: pt1,pt2,pt3,pt4
144 INTEGER :: N_INTP_LAG(1:4,NBCUT_MAX)
148 LOGICAL BOOL, ATYP1, ATYP2, ATYP3
152 my_real :: xp1(3), xp2(3), xp3(3), xp4(3)
156 INTEGER,
EXTERNAL :: ISONPOLYG
159 INTEGER IAD1,ILAG0,ISCUT0,ILAGk,ISCUTk,IIB,NTRIA,
162 TYPE(POLYGON) :: PolySCUT, PolyTria(4), POLYresult
167 my_real :: p(3,npts),
i22aera(3), c(3)
171 integer,
external :: GetProjectedFaceType
261 ce_loc(1:jlt) = cand_e(1:jlt)
262 cb_loc(1:jlt) = cand_b(1:jlt)
269 IF(ix3(i)/=ix4(i))
THEN
271 x0(i) = fourth*(x1(i)+x2(i)+x3(i)+x4(i))
272 y0(i) = fourth*(y1(i)+y2(i)+y3(i)+y4(i))
273 z0(i) = fourth*(z1(i)+z2(i)+z3(i)+z4(i))
287 IF(np_rect(i)==4)
THEN
291 x01(i) = x1(i) - x0(i)
292 y01(i) = y1(i) - y0(i)
295 x02(i) = x2(i) - x0(i)
296 y02(i) = y2(i) - y0(i)
297 z02(i) = z2(i) - z0(i)
299 x03(i) = x3(i) - x0(i)
300 y03(i) = y3(i) - y0(i)
301 z03(i) = z3(i) - z0(i)
303 x04(i) = x4(i) - x0(i)
304 y04(i) = y4(i) - y0(i)
305 z04(i) = z4(i) - z0(i)
307 sx0 = y01(i)*z02(i) - z01(i)*y02(i)
308 sy0 = z01(i)*x02(i) - x01(i)*z02(i)
309 sz0 = x01(i)*y02(i) - y01(i)*x02(i)
310 ss2(1) = sqrt(
max(em30,sx0*sx0 + sy0*sy0 + sz0*sz0))
311 sel(i) = sel(i) + ss2(1)
314 nnx1(i) = sx0 * ss2(1)
315 nny1(i) = sy0 * ss2(1)
316 nnz1(i) = sz0 * ss2(1)
318 sx0 = y02(i)*z03(i) - z02(i)*y03(i)
319 sy0 = z02(i)*x03(i) - x02(i)*z03(i)
320 sz0 = x02(i)*y03(i) - y02(i)*x03(i)
321 ss2(2) = sqrt(
max(em30,sx0*sx0 + sy0*sy0 + sz0*sz0))
322 sel(i) = sel(i) + ss2(2)
325 nnx2(i) = sx0 * ss2(2)
326 nny2(i) = sy0 * ss2(2)
327 nnz2(i) = sz0 * ss2(2)
329 sx0 = y03(i)*z04(i) - z03(i)*y04(i)
330 sy0 = z03(i)*x04(i) - x03(i)*z04(i)
331 sz0 = x03(i)*y04(i) - y03(i)*x04(i)
332 ss2(3) = sqrt(
max(em30,sx0*sx0 + sy0*sy0 + sz0*sz0))
333 sel(i) = sel(i) + ss2(3)
336 nnx3(i) = sx0 * ss2(3)
337 nny3(i) = sy0 * ss2(3)
338 nnz3(i) = sz0 * ss2(3)
340 sx0 = y04(i)*z01(i) - z04(i)*y01(i)
341 sy0 = z04(i)*x01(i) - x04(i)*z01(i)
342 sz0 = x04(i)*y01(i) - y04(i)*x01(i)
343 ss2(4) = sqrt(
max(em30,sx0*sx0 + sy0*sy0 + sz0*sz0))
344 sel(i) = sel(i) + ss2(4)
347 nnx4(i) = sx0 * ss2(4)
348 nny4(i) = sy0 * ss2(4)
349 nnz4(i) = sz0 * ss2(4)
351 sel(i) = half * sel(i)
355 x01(i) = x1(i) - x0(i)
356 y01(i) = y1(i) - y0(i)
357 z01(i) = z1(i) - z0(i)
359 x02(i) = x2(i) - x0(i)
360 y02(i) = y2(i) - y0(i)
361 z02(i) = z2(i) - z0(i)
363 sx0 = y01(i)*z02(i) - z01(i)*y02(i)
364 sy0 = z01(i)*x02(i) - x01
365 sz0 = x01(i)*y02(i) - y01(i)*x02(i)
366 ss2(1) = sqrt(
max(em30,sx0*sx0 + sy0*sy0 + sz0*sz0))
370 nnx1(i) = sx0 * ss2(1)
371 nny1(i) = sy0 * ss2(1)
372 nnz1(i) = sz0 * ss2(1)
389 IF(np_rect(i)==4)
THEN
390 surf(1,iabs(cand_e(i))) = fourth*(nnx1(i) + nnx2(i) + nnx3(i) + nnx4
391 surf(2,iabs(cand_e(i))) = fourth*(nny1(i) + nny2(i) + nny3(i) + nny4(i))
392 surf(3,iabs(cand_e(i))) = fourth*(nnz1(i) + nnz2(i) + nnz3(i) + nnz4
394 surf(1,iabs(cand_e(i))) = nnx1(i)
395 surf(2,iabs(cand_e(i))) = nny1(i)
396 surf(3,iabs(cand_e(i))) = nnz1(i)
399#include "lockoff.inc"
424!
write (*,fmt=
'(A,I10)')
" NB =",
nb
439!
write (*,fmt=
'(A,100I10)')
" N2=",itab(irect(2,ce_loc(i)))
441!
write (*,fmt=
'(A,100I10)')
" N4=",itab(irect
446 dist_pcut(1:nbcut_max , 1:4 , 1:
ncande) = ep30
484 p(1:3,1) = (/ x1(ie), y1(ie), z1(ie) /)
485 p(1:3,2) = (/ x2(ie), y2(ie), z2(ie) /)
486 p(1:3,3) = (/ x3(ie), y3(ie), z3(ie) /)
487 p(1:3,4) = (/ x4(ie), y4(ie), z4(ie) /)
490 delta(1:4,icut,i) = zero
491 normal(1:3) =
brick_list(nin,ib)%PCUT(icut)%N(1:3)
492 basis(1:3) =
brick_list(nin,ib)%PCUT(icut)%B(1:3)
493 n_scut(1:3,icut,i) = normal(1:3)
498 d = -a*basis(1) -b*basis(2) -c*basis(3)
502 l2 = one /
max(em30,a2+b2+c2)
505 ph( 1,icut,j) = (b2+c2)*p(1,j) - a*b*p(2,j) - a*c*p(3,j) - d*a
506 ph( 2,icut,j) = -a*b*p(1,j) + (a2+c2)*p(2,j) - b*c*p(3,j) - d*b
507 ph( 3,icut,j) = -a*c*p(1,j) - b*c*p(2,j) + (a2+b2)*p(3,j) - d*c
508 ph(1:3,icut,j) = l2 * ph(1:3,icut,j)
509 pph(1:3,j) = p(1:3,j) - ph(1:3,icut,j)
510 dist(j) = sum( pph(1:3,j) * pph(1:3,j) )
511 dist_pcut(icut,j,i) = dist(j)
516 s(1:3,j) =
brick_list(nin,ib)%PCUT(icut)%P(1:3,j)
519 sh( 1,icut,j) = (b2+c2)*s(1,j) - a*b*s(2,j) - a*c*s(3,j) - d*a
520 sh( 2,icut,j) = -a*b*s(1,j) + (a2+c2)*s(2,j) - b*c*s(3,j) - d*b
521 sh( 3,icut,j) = -a*c*s(1,j) - b*c*s(2,j) + (a2+b2)*s(3,j) - d*c
522 sh(1:3,icut,j) = l2 * sh(1:3,icut,j)
532 nbcut_add = nbcut_add + 1
533 delta(1:4,icut,i) = zero
534 normal(1:3) =
brick_list(nin,ib)%PCUT(icut)%N(1:3)
535 basis(1:3) =
brick_list(nin,ib)%PCUT(icut)%B(1:3)
536 n_scut(1:3,icut,i) = normal(1:3)
541 d = -a*basis(1) -b*basis(2) -c*basis(3)
548 ph( 1,icut,j) = (b2+c2)*p(1,j) - a*b*p(2,j) - a*c*p(3,j) - d*a
549 ph( 2,icut,j) = -a*b*p(1,j) + (a2+c2)*p(2,j) - b*c*p(3,j) - d*b
550 ph( 3,icut,j) = -a*c*p(1,j) - b*c*p(2,j) + (a2+b2)*p(3,j) - d*c
551 ph(1:3,icut,j) = l2 * ph(1:3,icut,j)
552 pph(1:3,j) = p(1:3,j) - ph(1:3,icut,j)
553 dist(j) = sum( pph(1:3,j) * pph(1:3,j) )
554 dist_pcut(icut,j,i) = dist(j)
559 s(1:3,j) =
brick_list(nin,ib)%PCUT(icut)%P(1:3,j)
562 sh( 1,icut,j) = (b2+c2)*s(1,j) - a*b*s(2,j) - a*c*s(3,j) - d*a
563 sh( 2,icut,j) = -a*b*s(1,j) + (a2+c2)*s(2,j) - b*c*s(3,j) - d*b
564 sh( 3,icut,j) = -a*c*s(1,j) - b*c*s(2,j) + (a2+b2)*s(3,j) - d*c
565 sh(1:3,icut,j) = l2 * sh(1:3,icut,j)
629 normal(1:3) =
brick_list(nin,ib)%PCUT(icut)%N(1:3)
633 IF (a==zero . and. b==zero)
THEN
634 v1 = (/ one,zero,zero /)
635 v2 = (/ zero,one,zero /)
636 ELSEIF(a==zero . and. c==zero)
THEN
637 v1 = (/ one,zero,zero /)
638 v2 = (/ zero,zero,one /)
639 ELSEIF(b==zero . and. c==zero)
THEN
640 v1 = (/ zero,one,zero /)
641 v2 = (/ zero,zero,one /)
644 v1 = (/ -b, a , zero /)
645 v2 = (/ -c, zero, a /)
647 v1 = (/ one, zero, zero /)
648 v2 = (/ zero, -c, b /)
654 v1 = v1 / sqrt(sum(v1*v1))
655 ps = v1(1)*v2(1) + v1(2)*v2(2) +v1(3)*v2(3)
657 v2 = v2 / sqrt(sum(v2*v2))
659 v3 = normal / sqrt(sum(normal*normal))
667 print *,
" ORTHONORMAL BASIS :"
668 write (*,fmt=
'(A,F20.10,A1,F20.10,A1,F20.10)')
" V1=", v1(1),
",",v1(2),
",",v1(3)
669 write (*,fmt=
'(A,F20.10,A1,F20.10,A1,F20.10)')
" V2=", v2(1),
",",v2(2),
",",v2(3)
670 write (*,fmt=
'(A,F20.10,A1,F20.10,A1,F20.10)')" v3=
", V3(1),",
",V3(2),",
",V3(3)
672 !nouvelles coordonnees dans le plan de projection (dim=2)
673 !Inutile dinverser la matrice car elle est orthogonale
675 VAL1 = M(1,1,ICUT)*Ph(1,ICUT,J) + M(2,1,ICUT)*Ph(2,ICUT,J) + M(3,1,ICUT)*Ph(3,ICUT,J)
676 VAL2 = M(1,2,ICUT)*Ph(1,ICUT,J) + M(2,2,ICUT)*Ph(2,ICUT,J) + M(3,2,ICUT)*Ph(3,ICUT,J)
682 NP = BRICK_LIST(NIN,IB)%PCUT(ICUT)%NP
684 VAL1 = M(1,1,ICUT)*Sh(1,ICUT,J) + M(2,1,ICUT)*Sh(2,ICUT,J) + M(3,1,ICUT)*Sh(3,ICUT,J)
685 VAL2 = M(1,2,ICUT)*Sh(1,ICUT,J) + M(2,2,ICUT)*Sh(2,ICUT,J) + M(3,2,ICUT)*Sh(3,ICUT,J)
694 IF(NBCUT_ADD > 0)THEN
697 NP = BRICK_LIST(NIN,IB)%PCUT(ICUT)%NP
701 NORMAL(1:3) = BRICK_LIST(NIN,IB)%PCUT(ICUT)%N(1:3)
705 IF (a==ZERO . AND. b==ZERO)THEN
706 V1 = (/ ONE,ZERO,ZERO /)
707 V2 = (/ ZERO,ONE,ZERO /)
708 ELSEIF(a==ZERO . AND. c==ZERO)THEN
709 V1 = (/ ONE,ZERO,ZERO /)
710 V2 = (/ ZERO,ZERO,ONE /)
711 ELSEIF(b==ZERO . AND. c==ZERO)THEN
712 V1 = (/ ZERO,ONE,ZERO /)
713 V2 = (/ ZERO,ZERO,ONE /)
716 V1 = (/ -b, a , ZERO /)
717 V2 = (/ -c, ZERO, a /)
719 V1 = (/ ONE, ZERO, ZERO /)
720 V2 = (/ ZERO, -c, b /)
723 !hyopothesis : V1, V2 are non colinear, ||V1||=1
724 !V2~ = labmda1 * V1 + lambda2 * V2 (V2~ is generated by (V1,V2) )
725 !let set lambda1 = <V1,V2>, then lambda2=-1
726 V1 = V1 / SQRT(SUM(V1*V1))
727 PS = V1(1)*V2(1) + V1(2)*V2(2) +V1(3)*V2(3)
729 V2 = V2 / SQRT(SUM(V2*V2))
731 V3 = NORMAL / SQRT(SUM(NORMAL*NORMAL))
733 !third direction is Pcut normal
734 !matrice de changement de base
738.AND.
if(IBUG22_Swet==-1 INT22>0 )then
739 print *," orthonormal basis _additional scut(closed surf hypothesis) :
"
740 write (*,FMT='(A,F20.10,A1,F20.10,A1,F20.10)')" v1
", V1(1),"",V1(2),"",V1(3)
741 write (*,FMT='(A,F20.10,A1,F20.10,A1,F20.10)')" v2=
", V2(1),",
",V2(2),",
",V2(3)
742 write (*,FMT='(A,F20.10,A1,F20.10,A1,F20.10)')" v3=", v3(1),
",",v3(2),
",",v3(3)
747 val1 = m(1,1,icut)*ph(1,icut,j) + m(2,1,icut)*ph(2,icut,j) + m(3,1,icut)*ph(3,icut,j)
748 val2 = m(1,2,icut)*ph(1,icut,j) + m(2,2,icut)*ph(2,icut,j) + m(3,2,icut)*ph(3,icut,j)
750 ph(1:3,icut,j) = (/val1,val2,val3/)
754 val1 = m(1,1,icut)*sh(1,icut,j) + m(2,1,icut)*sh(2,icut,j) + m(3,1,icut)*sh(3,icut,j)
755 val2 = m(1,2,icut)*sh(1,icut,j) + m(2,2,icut)*sh(2,icut,j) + m(3,2,icut)*sh(3,icut,j)
757 sh(1:3,icut,j) = (/val1,val2,val3/)
772 p_grav(1:3,icut,i) = zero
776 polyscut%NumNodes = np+1
778 polyscut%node(j,1:2) = sh(1:2,icut,j)
780 polyscut%node(np+1,:) = polyscut%node(1,:)
784 . ph(1:2,icut,1), ph(1:2,icut,2), ph(1:2,icut,3), ph(1:2,icut,4),
interp, listp )
787 IF(np_rect(i)==3)
THEN
795 polytria(1)%NumNodes = 3+1
796 polytria(1)%node(1,1:2) = ph(1:2,icut,listp(1))
797 polytria(1)%node(2,1:2) = ph(1:2,icut,listp(2))
798 polytria(1)%node(3,1:2) =
interp(1:2)
799 polytria(1)%node(4,:) = polytria(1)%node(1,:)
803 polytria(2)%NumNodes = 3+1
804 polytria(2)%node(1,1:2) = ph(1:2,icut,listp(3))
805 polytria(2)%node(2,1:2) = ph(1:2,icut,listp(4))
806 polytria(2)%node(3,1:2) =
interp(1:2)
807 polytria(2)%node(4,:) = polytria(2)%node(1,:)
812 polytria(3)%NumNodes = 3+1
813 polytria(3)%node(1,1:2) = ph(1:2,icut,listp(2))
814 polytria(3)%node(2,1:2) = ph(1:2,icut,listp(3))
815 polytria(3)%node(3,1:2) =
interp(1:2)
816 polytria(3)%node(4,:) = polytria(3)%node(1,:)
820 polytria(4)%NumNodes = 3+1
821 polytria(4)%node(1,1:2) = ph(1:2,icut,listp(1))
822 polytria(4)%node(2,1:2) = ph(1:2,icut,listp(4))
823 polytria(4)%node(3,1:2) =
interp(1:2)
824 polytria(4)%node(4,:) = polytria(4)%node(1,:)
828 cumul_val2 = sum(stria(1:4))
832 print *,
" |-----------i22wetsurf.F--------|"
833 print *,
" | LAGRANGIAN PROJECTIONS |"
834 print *,
" |-------------------------------|"
837 write (*,fmt=
'(A,1I10,A,I2)')
" --------brickID=",ixs(11,brickid),
" ICUT=", icut
839 write (*,fmt=
'(A,1I10)')
" N1=",itab(irect(1,k))
840 write (*,fmt=
'(A,1I10)')
" N2=",itab(irect(2,k))
841 write (*,fmt=
'(A,1I10)')
" N3="
842 write (*,fmt=
'(A,1I10)')
" N4=",itab
843 write (*,fmt=
'(A)' )
" Projected Tria"
844 write (*,fmt=
'(A,3F30.16)')
" *createnode ",ph(1:2,icut,1),zero
845 write (*,fmt=
'(A,3F30.16)')
" *createnode ",ph(1:2,icut,2),zero
846 write (*,fmt=
'(A,3F30.16)')
" *createnode ",ph(1:2,icut,3),zero
847 write (*,fmt=
'(A,3F30.16)')
" *createnode ",ph(1:2,icut,4),zero
848 write (*,fmt=
'(A,1I1)' )
" ityp=",ityp
849 write (*,fmt=
'(A)' )
" PolySCUT"
850 write (*,fmt=
'(A,3F30.16)')
" *createnode ",polyscut%node(1,1:2),zero
851 write (*,fmt='(a,3f30.16)
') " *createnode ",PolySCUT%node(2,1:2),ZERO
852 write (*,FMT='(a,3f30.16)
') " *createnode ",PolySCUT%node(3,1:2),ZERO
853 write (*,FMT='(a,3f30.16)
') " *createnode ",PolySCUT%node(4,1:2),ZERO
854 write (*,FMT='(a,1i10)
') " NTRIA=",NTRIA
861 POLYresult%NumNodes = 0
869 CALL PolygonalClipping( PolyTria(J),PolySCUT, POLYresult)
870 IF(POLYresult%NumNodes==0)CYCLE
872 pt1(1:2) = PolyTria(J)%node(1,1:2) ; pt1(3)=ZERO
873 pt2(1:2) = PolyTria(J)%node(2,1:2) ; pt2(3)=ZERO
874 pt3(1:2) = PolyTria(J)%node(3,1:2) ; pt3(3)=ZERO
876.AND.
if(IBUG22_Swet==-1 INT22>0 )then
877 write (*,FMT='(a,1i10)
') " --TRIA #", J
878 write (*,FMT='(a,3f30.16)
') " *createnode ",PolyTria(J)%node(1,1:2),ZERO
879 write (*,FMT='(a,3f30.16)
') " *createnode ",PolyTria(J)%node(2,1:2),ZERO
880 write (*,FMT='(a,3f30.16)
') " *createnode ",PolyTria(J)%node(3,1:2),ZERO
881 write (*,FMT='(a,1i10)
') " ->clip nodes", POLYresult%NumNodes
882 do k=1,POLYresult%NumNodes-1
883 write (*,FMT='(a,3f45.35)')
" *createnode ",polyresult%node(k,1:2),zero
889 IF(polyresult%NumNodes-1>0)
THEN
890 DO k=1,polyresult%NumNodes-1
893 pgrav(1) = pgrav(1) + polyresult%node(k,1)
894 pgrav(2) = pgrav(2) + polyresult%node(k,2)
896 pgrav(1) = pgrav(1) / (polyresult%NumNodes-1)
897 pgrav(2) = pgrav(2) / (polyresult%NumNodes-1)
900 p_grav(1,icut,i) = p_grav(1,icut,i) + pgrav(1)
901 p_grav(2,icut,i) = p_grav(2,icut,i) + pgrav(2)
902 numgrav = numgrav + one
904 IF(polyresult%NumNodes > 0 .AND. stria(j)/=zero)
THEN
905 pt1(1:2) = polytria(j)%node(1,1:2) ; pt1(3)=zero
906 pt2(1:2) = polytria(j)%node(2,1:2) ; pt2(3)=zero
907 pt3(1:2) = polytria(j)%node(3,1:2) ; pt3(3)=zero
909 val =
max(zero,
min(val,stria(j)))
910 cumul_val1 = cumul_val1 + val
911 if(
ibug22_swet==-1 .AND. int22>0 )
write (*,fmt=
'(A,1F30.16)')
" -> Tria Wet Surf=", val
912 if(
ibug22_swet==-1 .AND. int22>0 )
write (*,fmt=
'(A,1F30.16)')
" -> Tria Surf =", stria(j)
913 if(
ibug22_swet==-1 .AND. int22>0 )
write (*,fmt=
'(A,1F30.16)')
" -> cumulated Wet Surf=", cumul_val1
914 if(
ibug22_swet==-1 .AND. int22>0 )
write (*,fmt=
'(A,1F30.16)')
" -> Sum of tria Surf=", cumul_val2
917 wet_ratio(j) = val/stria(j)
918 IF(wet_ratio(j)<-em06 .OR. wet_ratio(j)-one>em06)
THEN
919 print *,
"***error: inter22 topology issue while computing wet surface",wet_ratio(j),val1,val2
924 wet_ratio(0) = cumul_val1
926 IF(wet_ratio(0) == zero .OR. cumul_val2==zero)
THEN
930 wet_ratio(0) = wet_ratio(0) / cumul_val2
933 wet_ratio(0) =
max(zero,
min(wet_ratio(0),one))
934 seff(icut,i) = cumul_val1
936 seff(icut,i) = wet_ratio(0) * sel(i)
940 write (*,fmt=
'(A,1F30.16)')
" Sum Wet Surf =",cumul_val1
941 write (*,fmt=
'(A,1F30.16)')
" Total Surf =",cumul_val2
942 write (*,fmt=
'(A,1F30.16)')
" RATIO =",wet_ratio(0)
948 p_grav(1,icut,i) = p_grav(1,icut,i) / numgrav
949 p_grav(2,icut,i) = p_grav(2,icut,i) / numgrav
956 pt1(1:2) = ph(1:2,icut,listp(1))
957 pt2(1:2) = ph(1:2,icut,listp(2))
958 pt3(1:2) = ph(1:2,icut,listp(3))
959 pt4(1:2) = ph(1:2,icut,listp(4))
974 distance(1) = sqrt( (p_grav(1,icut,i)-pt1(1))**2 + (p_grav(2,icut,i)-pt1(2))**2 )
975 distance(2) = sqrt( (p_grav(1,icut,i)-pt2(1))**2 + (p_grav(2,icut,i)-pt2(2))**2 )
976 distance(3) = sqrt( (p_grav(1,icut,i)-pt3(1))**2 + (p_grav(2,icut,i)-pt3(2))**2 )
977 distance(4) = sqrt( (p_grav(1,icut,i)-pt4(1))**2 + (p_grav(2,icut,i)-pt4(2))**2 )
984 edge(1) = sqrt( (pt1(1)-pt2(1))**2 + (pt1(2)-pt2(2))**2 )
985 edge(2) = sqrt( (pt2(1)-pt3(1))**2 + (pt2(2)-pt3(2))**2 )
986 edge(3) = sqrt( (pt3(1)-pt4(1))**2 + (pt3(2)-pt4(2))**2 )
987 edge(4) = sqrt( (pt4(1)-pt1(1))**2 + (pt4(2)-pt1(2))**2 )
988 IF(np_rect(i)==3)
THEN
989 edge(3) = sqrt( (pt3(1)-pt1(1))**2 + (pt3(2)-pt1(2))**2 )
997 area_tria(1) = sqrt( abs(s2*(s2-a)*(s2-b)*(s2-c)) )
1003 area_tria(2) = sqrt( abs(s2*(s2-a)*(s2-b)*(s2-c)) )
1005 IF(np_rect(i)==4)
THEN
1010 area_tria(3) = sqrt( abs(s2*(s2-a)*(s2-b)*(s2-c)) )
1016 area_tria(4) = sqrt( abs(s2*(s2-a)*(s2-b)*(s2-c)) )
1022 area_tria(3) = sqrt( abs(s2*(s2-a)*(s2-b)*(s2-c)) )
1033 IF(np_rect(i)==4)
THEN
1039 delta(1:4,icut,i) = fourth
1046 delta(1:4,icut,i) = third
1047 delta(4 ,icut,i) = zero
1070 p_grav(1:3,icut,i) = zero
1074 polyscut%NumNodes = np+1
1076 polyscut%node(j,1:2) = sh(1:2,icut,j)
1078 polyscut%node(np+1,:) = polyscut%node(1,:)
1083 ityp =
getprojectedfacetype(ph(1:2,icut,1), ph(1:2,icut,2), ph(1:2,icut,3), ph(1:2,icut,4),
interp, listp)
1086 IF(ityp/=0)ntria = 2
1087 IF(np_rect(i)==3)
THEN
1095 polytria(1)%NumNodes = 3+1
1096 polytria(1)%node(1,1:2) = ph(1:2,icut,listp(1))
1097 polytria(1)%node(2,1:2)
1098 polytria(1)%node(3,1:2) =
interp(1:2)
1099 polytria(1)%node(4,:) = polytria(1)%node(1,:)
1103 polytria(2)%NumNodes = 3+1
1104 polytria(2)%node(1,1:2) = ph(1:2,icut,listp(3))
1105 polytria(2)%node(2,1:2) = ph(1:2,icut,listp(4))
1106 polytria(2)%node(3,1:2) =
interp(1:2)
1107 polytria(2)%node(4,:) = polytria(2)%node(1,:)
1112 polytria(3)%NumNodes = 3+1
1113 polytria(3)%node(1,1:2) = ph(1:2,icut,listp(2))
1114 polytria(3)%node(2,1:2) = ph(1:2,icut,listp(3))
1115 polytria(3)%node(3,1:2) =
interp(1:2)
1116 polytria(3)%node(4,:) = polytria(3)%node(1,:)
1120 polytria(4)%NumNodes = 3+1
1121 polytria(4)%node(1,1:2) = ph(1:2,icut,listp(1))
1122 polytria(4)%node(2,1:2) = ph(1:2,icut,listp(4))
1123 polytria(4)%node(3,1:2) =
interp(1:2)
1124 polytria(4)%node(4,:) = polytria(4)%node(1,:)
1128 cumul_val2 = sum(stria(1:4))
1132 print *,
" |-----------i22wetsurf.F--------|"
1133 print *,
" | LAGRANGIAN PROJECTIONS |"
1134 print *,
" |-------------------------------|"
1137 write (*,fmt=
'(A,1I10,A,I2)')
" --------brickID=",ixs(11,brickid),
" ICUT=", icut
1138 write (*,fmt=
'(A )')
" additional Scut (closed surf. hypothesis."
1139 write (*,fmt=
'(A,1I10)')
" N1=",itab(irect(1,ce_loc(i)))
1140 write (*,fmt=
'(A,1I10)')
" N2=",itab(irect(2,ce_loc(i)))
1141 write (*,fmt=
'(A,1I10)')
" N3=",itab(irect(3,ce_loc(i)))
1142 write (*,fmt=
'(A,1I10)')
" N4=",itab(irect(4,ce_loc(i)))
1143 write (*,fmt=
'(A)' )
" Projected Tria"
1144 write (*,fmt=
'(A,3F30.16)')
" *createnode ",ph(1:2,icut,1),zero
1145 write (*,fmt=
'(A,3F30.16)')
" *createnode ",ph(1:2,icut,2),zero
1146 write (*,fmt=
'(A,3F30.16)')
" *createnode ",ph(1:2,icut,3),zero
1147 write (*,fmt=
'(A,3F30.16)')
" *createnode ",ph(1:2,icut,4),zero
1148 write (*,fmt=
'(A,1I1)' )
" ityp=",ityp
1149 write (*,fmt=
'(A)' )
" PolySCUT"
1150 write (*,fmt=
'(A,3F30.16)')
" *createnode ",polyscut%node(1,1:2),zero
1151 write (*,fmt=
'(A,3F30.16)')
" *createnode ",polyscut%node(2,1:2),zero
1152 write (*,fmt=
'(A,3F30.16)')
" *createnode ",polyscut%node(3,1:2),zero
1153 write (*,fmt=
'(A,3F30.16)')
" *createnode ",polyscut%node(4,1:2),zero
1154 write (*,fmt=
'(A,1I10)')
" NTRIA=",ntria
1161 polyresult%NumNodes = 0
1170 IF(polyresult%NumNodes==0)cycle
1172 pt1(1:2) = polytria(j)%node(1,1:2) ; pt1(3)=zero
1173 pt2(1:2) = polytria(j)%node(2,1:2) ; pt2(3)=zero
1174 pt3(1:2) = polytria(j)%node(3,1:2) ; pt3(3)=zero
1177 write (*,fmt=
'(A,1I10)')
" --TRIA #", j
1178 write (*,fmt=
'(A,3F30.16)')
" *createnode ",polytria(j)%node(1,1:2),zero
1179 write (*,fmt=
'(A,3F30.16)')
" *createnode ",polytria(j)%node(2,1:2),zero
1180 write (*,fmt=
'(A,3F30.16)')
" *createnode ",polytria(j)%node(3,1:2),zero
1181 write (*,fmt=
'(A,1I10)')
" ->clip nodes", polyresult%NumNodes
1182 do k=1,polyresult%NumNodes-1
1183 write (*,fmt=
'(A,3F45.35)')
" *createnode ",polyresult%node(k,1:2),zero
1189 IF(polyresult%NumNodes-1>0)
THEN
1190 DO k=1,polyresult%NumNodes-1
1191 p_grav(1,icut,i) = p_grav(1,icut,i) + polyresult%node(k,1)
1192 p_grav(2,icut,i) = p_grav(2,icut,i) + polyresult%node(k,2)
1193 pgrav(1) = pgrav(1) + polyresult%node(k,1)
1194 pgrav(2) = pgrav(2) + polyresult%node(k,2)
1196 pgrav(1) = pgrav(1) / (polyresult%NumNodes-1)
1197 pgrav(2) = pgrav(2) / (polyresult%NumNodes-1)
1200 p_grav(1,icut,i) = p_grav(1,icut,i) + pgrav(1)
1201 p_grav(2,icut,i) = p_grav(2,icut,i) + pgrav(2)
1202 numgrav = numgrav + one
1204 IF(polyresult%NumNodes > 0 .AND. stria(j)/=zero)
THEN
1205 pt1(1:2) = polytria(j)%node(1,1:2) ; pt1(3)=zero
1206 pt2(1:2) = polytria(j)%node(2,1:2) ; pt2(3)=zero
1207 pt3(1:2) = polytria(j)%node(3,1:2) ; pt3(3)=zero
1209 val =
max(zero,
min(val,stria(j)))
1210 cumul_val1 = cumul_val1 + val
1211 if(
ibug22_swet==-1 .AND. int22>0 )
write (*,fmt=
'(A,1F30.16)')
" -> Tria Wet Surf=", val
1212 if(
ibug22_swet==-1 .AND. int22>0 )
write (*,fmt=
'(A,1F30.16)')
" -> Tria Surf =", stria
1213 if(
ibug22_swet==-1 .AND. int22>0 )
write (*,fmt=
'(A,1F30.16)')
" -> cumulated Wet Surf=", cumul_val1
1214 if(
ibug22_swet==-1 .AND. int22>0 )
write (*,fmt=
'(A,1F30.16)')
" -> Sum of tria Surf="
1217 wet_ratio(j) = val/stria(j)
1218 IF(wet_ratio(j)<-em06 .OR. wet_ratio(j)-one>em06)
THEN
1219 print *,
"***error: inter22 topology issue while computing wet surface",wet_ratio(j),val1,val2
1224 wet_ratio(0) = cumul_val1
1226 IF(wet_ratio(0) == zero .OR. cumul_val2==zero)
THEN
1230 wet_ratio(0) = wet_ratio(0) / cumul_val2
1233 wet_ratio(0) =
max(zero,
min(wet_ratio(0),one))
1234 seff(icut,i) = cumul_val1
1236 seff(icut,i) = wet_ratio(0) * sel(i)
1240 write (*,fmt=
'(A,1F30.16)')
" Sum Wet Surf =",cumul_val1
1241 write (*,fmt=
'(A,1F30.16)')
" Total Surf =",cumul_val2
1242 write (*,fmt=
'(A,1F30.16)')
" RATIO =",wet_ratio(0)
1248 p_grav(1,icut,i) = p_grav(1,icut,i) /numgrav
1249 p_grav(2,icut,i) = p_grav(2,icut,i) /numgrav
1256 pt1(1:2) = ph(1:2,icut,listp(1))
1257 pt2(1:2) = ph(1:2,icut,listp(2))
1258 pt3(1:2) = ph(1:2,icut,listp(3))
1259 pt4(1:2) = ph(1:2,icut,listp(4))
1274 distance(1) = sqrt( (p_grav(1,icut,i)-pt1
1275 distance(2) = sqrt( (p_grav(1,icut,i)-pt2(1))**2 + (p_grav(2,icut,i)-pt2(2))**2 )
1276 distance(3) = sqrt( (p_grav(1,icut,i)-pt3(1))**2 + (p_grav(2,icut,i)-pt3(2))**2 )
1277 distance(4) = sqrt( (p_grav(1,icut,i)-pt4(1))**2 + (p_grav(2,icut,i)-pt4(2))**2 )
1284 edge(1) = sqrt( (pt1(1)-pt2(1))**2 + (pt1(2)-pt2(2))**2 )
1285 edge(2) = sqrt( (pt2(1)-pt3(1))**2 + (pt2(2)-pt3(2))**2 )
1286 edge(3) = sqrt( (pt3(1)-pt4(1))**2 + (pt3(2)-pt4
1287 edge(4) = sqrt( (pt4(1)-pt1(1))**2 + (pt4(2)-pt1(2))**2 )
1288 IF(np_rect(i)==3)
THEN
1289 edge(3) = sqrt( (pt3(1)-pt1(1))**2 + (pt3(2)-pt1(2))**2 )
1297 area_tria(1) = sqrt( abs(s2*(s2-a)*(s2-b)*(s2-c)) )
1303 area_tria(2) = sqrt( abs(s2*(s2-a)*(s2-b)*(s2-c)) )
1305 IF(np_rect(i)==4)
THEN
1310 area_tria(3) = sqrt( abs(s2*(s2-a)*(s2-b)*(s2-c)) )
1316 area_tria(4) = sqrt( abs(s2*(s2-a)*(s2-b)*(s2-c)) )
1322 area_tria(3) = sqrt( abs(s2*(s2-a)*(s2-b)*(s2-c)) )
1330 print *,
"Warning: inter22 - nodal forces computation"
1333 IF(np_rect(i)==4)
THEN
1339 delta(1:4,icut,i) = fourth
1344 delta(4,icut,i) = zero
1346 delta(1:4,icut,i) = third
1347 delta(4,icut,i) = zero