38 SUBROUTINE incpflow(NNO , NEL , NINOUT , NNI , IFLOW ,
39 . IBUF , ELEM , IINOUT , IBUFI , IBUFR ,
40 . IBUFC , IBUFL , RFLOW , PHI , PRES ,
41 . U , RINOUT, X , V , A ,
42 . NPC , TF , NSENSOR,SENSOR_TAB,
43 . CNP , ITAGEL, IBUFELR, IBUFELC, IPIV ,
44 . HBEM , GBEM , IBUFIL , CNPI , IPINT ,
54#include "implicit_f.inc"
67 INTEGER ,
INTENT(IN) :: NSENSOR
68 INTEGER NNO, NEL, NINOUT, NNI, IFLOW(*), IBUF(*), ELEM(3,*),
69 . IINOUT(NIIOFLOW,*), IBUFI(*), IBUFR(*), IBUFC(*),
70 . IBUFL(*), NPC(*),(*),
71 . ITAGEL(*), IBUFELR(*), IBUFELC(*), IPIV(*), IBUFIL(*),
72 . CNPI(*), IPINT, ISMOOTH
74 . rflow(*), phi(*), pres(*), u(3,*), rinout(nrioflow,*),
75 . x(3,*), v(3,*), a(3,*), tf(*), hbem(*),
77 TYPE (SENSOR_STR_) ,
DIMENSION(NSENSOR) :: SENSOR_TAB
78 TYPE(PYTHON_) ,
INTENT(INOUT) :: PYTHON
79 DOUBLE PRECISION,
INTENT(INOUT) :: WFEXT
83 INTEGER ILVOUT, I, II, NNO_L, III, LENBUF, PP, NNO_L2, J,
84 . ibufl2(nno), jj, n1, n2, n3, nn1, nn2, nn3, nnrp, nncp,
85 . cr_loc_glob(nno), cr_glob_loc(nno), cc_loc_glob(nno),
86 . cc_glob_loc(nno), nreip, nceip, nep, nr1, nr2, nr3, nc1,
87 . nc2, nc3, crei_loc_glob(nel), ccei_loc_glob(nel),
88 . ce_loc_glob(nel), ce_glob_loc(nel), nprow, npcol, nbloc
89 . iform, ifree, isens, ifunc, iio, nerp, ic, nni_l2,
90 . ibufil2(nni), itest, itagni(nni), nni_l, ift, ilt, ir,
nl,
91 . ifpa, ifpres, nelf, lelf(nel), k, iad, iad2, ifvini
92 my_real dtsub, tl, xl(3,nno+nni), vl(3,nno+nni), x1, y1, z1, x2,
93 . y2, z2, x3, y3, z3, x12, y12, z12, x13, y13, z13, x23,
94 . y23, z23, nrx, nry, nrz,
norm(3,nel),q(nel), ql(nel),
95 .
area, vx, vy, vz, qi(ninout), vel, tsg, tstart, dydx,
96 . sfree, isq, vfree, elarea(nel), scalt, nodarea(nno),
97 . phi1, phi2, phi3, ux, uy, uz, arean1, arean2, arean3,
98 . xmin, xmax, ymin,
ymax, zmin, zmax, xx, yy, zz, st,
99 . vx1, vy1, vz1, vx2, vy2
100 . nz1, nx2, ny2, nz2, nx3, ny3, nz3, rr1, rr2, rr3, ss1,
101 . ss2, ss3, sarea, nx, ny, nz, xc, yc ,zc, ss, phim, qm,
102 . r, fac, fac2, dpsdx, dpsdy, dpsdz, dqsdx, dqsdy, dqsdz,
103 . grx, gry, grz, tole, xm, ym, zm, phis, qs,
104 . sfpa, sfpres, rho, pa, pio, phi_old(nno+nni), uu,
105 . coef, area2, w, ksi, eta, val1, val2, val3, x0, y0, z0,
106 . r2, d2, vgx_old, vgy_old, vgz_old, vgx, vgy, vgz, agx,
107 . agy, agz, sfvini, vv
109 my_real PG(50), WPG(25)
110 DATA PG /.33333333,.33333333,
111 . .33333333,.33333333,
112 . .60000000,.20000000,
113 . .20000000,.60000000,
114 . .20000000,.20000000,
115 . .33333333,.33333333,
116 . .79742699,.10128651,
117 . .10128651,.79742699,
118 . .10128651,.10128651,
119 . .05971587,.47014206,
120 . .47014206,.05971587,
121 . .47014206,.47014206,
122 . .06513010,.06513010,
123 . .86973979,.06513010,
124 . .06513010,.86973979,
125 . .31286550,.04869031,
126 . .63844419,.31286550,
127 . .04869031,.63844419,
128 . .63844419,.04869031,
129 . .31286550,.63844419,
130 . .04869031,.31286550,
131 . .26034597,.26034597,
132 . .47930807,.26034597,
133 . .26034597,.47930807,
134 . .33333333,.33333333/
135 DATA wpg /1.00000000,
136 . -.56250000,.52083333,
137 . .52083333,.52083333,
138 . .22500000,.12593918,
139 . .12593918,.12593918,
140 . .13239415,.13239415,
142 . .05334724,.05334724,
143 . .05334724,.07711376,
144 . .07711376,.07711376,
145 . .07711376,.07711376,
146 . .07711376,.17561526,
147 . .17561526,.17561526,
150 my_real,
ALLOCATABLE :: sbuf(:), rbuf(:)
155 EXTERNAL FINTER,FINTER_SMOOTH
198 ALLOCATE(sbuf(6*(nno+nni)), rbuf(6*(nno+nni)))
210 sbuf(6*(ii-1)+1)=x(1,iii)/cnp(ii)
211 sbuf(6*(ii-1)+2)=x(2,iii)/cnp(ii)
212 sbuf(6*(ii-1)+3)=x(3,iii)/cnp(ii)
213 sbuf(6*(ii-1)+4)=v(1,iii)/cnp(ii)
214 sbuf(6*(ii-1)+5)=v(2,iii)/cnp(ii)
215 sbuf(6*(ii-1)+6)=v(3,iii)/cnp(ii)
221 sbuf(6*nno+6*(ii-1)+1)=x(1,iii)/cnpi(ii)
222 sbuf(6*nno+6*(ii-1)+2)=x(2,iii)/cnpi(ii)
223 sbuf(6*nno+6*(ii-1)+3)=x(3,iii)/cnpi(ii)
224 sbuf(6*nno+6*(ii-1)+4)=v(1,iii)/cnpi(ii)
225 sbuf(6*nno+6*(ii-1)+5)=v(2,iii)/cnpi(ii)
226 sbuf(6*nno+6*(ii-1)+6)=v(3,iii)/cnpi(ii)
230 xl(1,i)=rbuf(6*(i-1)+1)
231 xl(2,i)=rbuf(6*(i-1)+2)
232 xl(3,i)=rbuf(6*(i-1)+3)
233 vl(1,i)=rbuf(6*(i-1)+4)
234 vl(2,i)=rbuf(6*(i-1)+5)
235 vl(3,i)=rbuf(6*(i-1)+6)
238 DEALLOCATE(sbuf, rbuf)
273 area=sqrt(nrx**2+nry**2+nrz**2)
275 nodarea(n1)=nodarea(n1)+one_over_6*
area
276 nodarea(n2)=nodarea(n2)+one_over_6*
area
277 nodarea(n3)=nodarea(n3)+one_over_6*
area
285 vgx_old=rflow(12)*rflow(9)
286 vgy_old=rflow(12)*rflow(10)
287 vgz_old=rflow(12)*rflow(11)
299 IF (ifvini > 0) ismooth = npc(2*nfunct+ifvini+1)
300 IF (tt>tstart.AND.dt1>zero)
THEN
301 tsg=(tt-tstart)*scalt
302 IF (ismooth == 0)
THEN
303 vv=sfvini*finter(ifvini, tsg, npc, tf, dydx)
304 ELSE IF(ismooth > 0)
THEN
305 vv=sfvini*finter_smooth(ifvini, tsg, npc, tf, dydx)
308 CALL python_call_funct1d(python, fid,tsg,vv)
317 agx=(vgx-vgx_old)/dt1
318 agy=(vgy-vgy_old)/dt1
319 agz=(vgz-vgz_old)/dt1
326 phi_inf(i)=vgx*(xx-xl(1,nno)) + vgy*(yy-xl(2,nno)) + vgz*(zz-xl(3,nno))
349 vx=third*(vl(1,n1)+vl(1,n2)+vl(1,n3))
350 vy=third*(vl(2,n1)+vl(2,n2)+vl(2,n3))
351 vz=third*(vl(3,n1)+vl(3,n2)+vl(3,n3))
352 q(i)=vx*nrx+vy*nry+vz*nrz
361 IF (iinout(3,i)==0)
THEN
369 IF (ifunc > 0) ismooth = npc(2*nfunct+ifunc+1)
373 tstart=sensor_tab(isens)%TSTART
375 IF (tt>=tstart.AND.dt1>zero)
THEN
376 tsg=(tt-tstart)*scalt
377 IF (ismooth == 0)
THEN
378 qi(i)=vel*finter(ifunc, tsg, npc, tf, dydx)
379 ELSE IF(ismooth > 0 )
THEN
380 qi(i)=vel*finter_smooth(ifunc, tsg, npc, tf, dydx)
383 CALL python_call_funct1d(python, fid,tsg,qi(i))
390 IF (ninout>zero)
THEN
397 sfree=sfree+elarea(i)
402 isq=isq+q(i)*elarea(i)
413 IF (iio==ifree) q(i)=q(i)+vfree
425 IF (ibufelr(i)>0)
THEN
437 .
CALL bemsolv(l_assemb, ilvout, iform, nno, nel,
438 . hbem, gbem, ibuf, elem,
norm,
439 . x, q, phi, ipiv, phi_inf)
482 IF (nr1/=0.OR.nr2/=0.OR.nr3/=0)
THEN
484 crei_loc_glob(nreip)=i
486 IF (nc1/=0.OR.nc2/=0.OR.nc3/=0)
THEN
488 ccei_loc_glob(nceip)=i
490 IF (ibufelc(i)>0)
THEN
502 . elem,
norm, xl, nnrp, cr_loc_glob,
503 . cr_glob_loc, nncp, cc_loc_glob, cc_glob_loc, nceip,
504 . ccei_loc_glob, nep, ce_loc_glob, ce_glob_loc
505 . crei_loc_glob, nno, nel, hbem, gbem,
506 . ql, phi, iform, l_assemb, nprow,
507 . npcol, nbloc, ipiv, nerp, ilvout,
538 CALL trgrad(x1, x2, x3, y1, y2,
539 . y3, z1, z2, z3, phi1,
540 . phi2, phi3, grx, gry, grz )
546 ux=grx+q(i)*nrx/area2
547 uy=gry+q(i)*nry/area2
548 uz=grz+q(i)*nrz/area2
552 u(1,n1)=u(1,n1)+ux*third*
area/arean1
553 u(2,n1)=u(2,n1)+uy*third*
area/arean1
554 u(3,n1)=u(3,n1)+uz*third*
area/arean1
555 u(1,n2)=u(1,n2)+ux*third*
area/arean2
556 u(2,n2)=u(2,n2)+uy*third*
area/arean2
557 u(3,n2)=u(3,n2)+uz*third*
area/arean2
558 u(1,n3)=u(1,n3)+ux*third*
area/arean3
559 u(2,n3)=u(2,n3)+uy*third*
area/arean3
560 u(3,n3)=u(3,n3)+uz*third*
area/arean3
563 IF (nni>0.AND.ipint==1)
THEN
590 IF (xx>xmax.OR.xx<xmin.OR.
591 . yy>
ymax.OR.yy<ymin.OR.
592 . zz>zmax.OR.zz<zmin) cycle
626 rr1=sqrt(nx1**2+ny1**2+nz1**2)
627 rr2=sqrt(nx2**2+ny2**2+nz2**2)
628 rr3=sqrt(nx3**2+ny3**2+nz3**2)
629 ss1=-(nx1*nx2+ny1*ny2+nz1*nz2)/rr1/rr2
630 ss2=-(nx2*nx3+ny2*ny3+nz2*nz3)/rr2/rr3
631 ss3=-(nx3*nx1+ny3*ny1+nz3*nz1)/rr3/rr1
633 IF (ss1<-one) ss1=-one
635 IF (ss2<-one) ss2=-one
637 IF (ss3<-one) ss3=-one
638 sarea=acos(ss1)+acos(ss2)+acos(ss3)-pi
652 ss=nx*(xc-xx)+ny*(yc-yy)+nz*(zc-zz)
653 IF (ss<zero) sarea=-sarea
656 IF (itest==1.AND.abs(st)>tole) itagni(i)=1
657 IF (itest==2.AND.abs(st)<=tole) itagni
670 IF (itagni(i)==0) cycle
690 r2=(x0-xx)**2+(y0-yy)**2+(z0-zz)**2
691 d2=
min((x0-x1)**2+(y0-y1)**2+(z0-z1)**2,
692 . (x0-x2)**2+(y0-y2)**2+(z0-z2)**2,
693 . (x0-x3)**2+(y0-y3)**2+(z0-z3)**2)
695 IF (r2>hundred*d2)
THEN
698 ELSEIF (r2>twenty5*d2)
THEN
701 ELSEIF (r2>four*d2)
THEN
725 xm=x1*val1+x2*val2+x3*val3
726 ym=y1*val1+y2*val2+y3*val3
727 zm=z1*val1+z2*val2+z3*val3
728 phim=phi(n1)*val1+phi(n2)*val2+phi(n3)*val3
729 r=sqrt((xx-xm)**2+(yy-ym)**2+(zz-zm)**2)
731 fac2=three/r**2* ((xx-xm)*nrx+(yy-ym)*nry+(zz-zm)*nrz)
734 qs=fac*((xx-xm)*nrx+(yy-ym)*nry+(zz-zm)*nrz)
738 dqsdx=fac*(nrx-(xx-xm)*fac2)
739 dqsdy=fac*(nry-(yy-ym)*fac2)
740 dqsdz=fac*(nrz-(zz-zm)*fac2)
742 phi(nno+i)=phi(nno+i)+
area*w*(qm*phis-phim*qs)
743 u(1,nno+i)=u(1,nno+i)+
area*w*(qm*dpsdx-phim*dqsdx)
744 u(2,nno+i)=u(2,nno+i)+
area*w*(qm*dpsdy-phim*dqsdy)
745 u(3,nno+i)=u(3,nno+i)+
area*w*(qm*dpsdz-phim*dqsdz)
748 phi(nno+i)=phi(nno+i)+phi_inf(nno+i)
749 u(1,nno+i)=u(1,nno+i)+vgx
750 u(2,nno+i)=u(2,nno+i)+vgy
751 u(3,nno+i)=u(3,nno+i)+vgz
756 ALLOCATE(sbuf(nno), rbuf(nno))
777 DEALLOCATE(sbuf, rbuf)
802 CALL trgrad(x1, x2, x3, y1, y2,
803 . y3, z1, z2, z3, phi1,
804 . phi2, phi3, grx, gry, grz )
811 ux=grx+q(i)*nrx/area2
812 uy=gry+q(i)*nry/area2
813 uz=grz+q(i)*nrz/area2
817 u(1,n1)=u(1,n1)+ux*third*
area/arean1
818 u(2,n1)=u(2,n1)+uy*third*
area/arean1
819 u(3,n1)=u(3,n1)+uz*third*
area/arean1
820 u(1,n2)=u(1,n2)+ux*third*
area/arean2
821 u(2,n2)=u(2,n2)+uy*third*
area/arean2
822 u(3,n2)=u(3,n2)+uz*third*
area/arean2
823 u(1,n3)=u(1,n3)+ux*third*
area/arean3
824 u(2,n3)=u(2,n3)+uy*third*
area/arean3
825 u(3,n3)=u(3,n3)+uz*third*
area/arean3
830 IF (nni>0.AND.ipint==1)
THEN
833 ilt=
min(ift+
nl-1,nni)
860 IF (xx>xmax.OR.xx<xmin.OR.
861 . yy>
ymax.OR.yy<ymin.OR.
862 . zz>zmax.OR.zz<zmin) cycle
896 rr1=sqrt(nx1**2+ny1**2+nz1**2)
897 rr2=sqrt(nx2**2+ny2**2+nz2**2)
898 rr3=sqrt(nx3**2+ny3**2+nz3**2)
899 ss1=-(nx1*nx2+ny1*ny2+nz1*nz2)/rr1/rr2
900 ss2=-(nx2*nx3+ny2*ny3+nz2*nz3)/rr2/rr3
901 ss3=-(nx3*nx1+ny3*ny1+nz3*nz1)/rr3/rr1
903 IF (ss1<-one) ss1=-one
905 IF (ss2<-one) ss2=-one
907 IF (ss3<-one) ss3=-one
908 sarea=acos(ss1)+acos(ss2)+acos(ss3)-pi
922 ss=nx*(xc-xx)+ny*(yc-yy)+nz*(zc-zz)
923 IF (ss<zero) sarea=-sarea
926 IF (itest==1.AND.abs(st)>tole) itagni(i)=1
927 IF (itest==2.AND.abs(st)<=tole) itagni(i)=1
940 IF (itagni(i)==0) cycle
960 r2=(x0-xx)**2+(y0-yy)**2+(z0-zz)**2
961 d2=
min((x0-x1)**2+(y0-y1)**2+(z0-z1)**2,
962 . (x0-x2)**2+(y0-y2)**2+(z0-z2)**2,
963 . (x0-x3)**2+(y0-y3)**2+(z0-z3)**2)
965 IF (r2>hundred*d2)
THEN
968 ELSEIF (r2>twenty5*d2)
THEN
971 ELSEIF (r2>four*d2)
THEN
1001 xm=x1*val1+x2*val2+x3*val3
1002 ym=y1*val1+y2*val2+y3*val3
1003 zm=z1*val1+z2*val2+z3*val3
1004 phim=phi(n1)*val1+phi(n2
1005 r=sqrt((xx-xm)**2+(yy-ym)**2+(zz-zm)**2)
1008 fac2=three/r**2* ((xx-xm)*nrx+(yy-ym)*nry+(zz-zm)*nrz)
1015 qs=fac*((xx-xm)*nrx+(yy-ym)*nry+(zz-zm)*nrz)
1019 dqsdx=fac*(nrx-(xx-xm)*fac2)
1020 dqsdy=fac*(nry-(yy-ym)*fac2)
1021 dqsdz=fac*(nrz-(zz-zm)*fac2)
1023 phi(nno+i)=phi(nno+i)+
area*w*(qm*phis-phim*qs)
1024 u(1,nno+i)=u(1,nno+i)+
area*w*(qm*dpsdx-phim*dqsdx)
1025 u(2,nno+i)=u(2,nno+i)+
area*w*(qm*dpsdy-phim*dqsdy)
1026 u(3,nno+i)=u(3,nno+i)+
area*w*(qm*dpsdz-phim*dqsdz)
1029 phi(nno+i)=phi(nno+i)+phi_inf(nno+i)
1030 u(1,nno+i)=u(1,nno+i)+vgx
1031 u(2,nno+i)=u(2,nno+i)+vgy
1032 u(3,nno+i)=u(3,nno+i)+vgz
1035 ALLOCATE(sbuf(4*nni), rbuf(4*nni))
1042 sbuf(4*(i-1)+1)=phi(nno+i)
1043 sbuf(4*(i-1)+2)=u(1,nno+i)
1044 sbuf(4*(i-1)+3)=u(2,nno+i)
1045 sbuf(4*(i-1)+4)=u(3,nno+i)
1049 phi(nno+i)=rbuf(4*(i-1)+1)
1050 u(1,nno+i)=rbuf(4*(i-1)+2)
1051 u(2,nno+i)=rbuf(4*(i-1)+3)
1052 u(3,nno+i)=rbuf(4*(i-1)+4)
1067 IF (ifpa > 0) ismooth = npc(2*nfunct+ifpa+1)
1068 IF (tt>=tstart.AND.dt1>zero)
THEN
1069 tsg=(tt-tstart)*scalt
1070 IF (ismooth == 0)
THEN
1071 pa=sfpa*finter(ifpa, tsg, npc, tf, dydx)
1072 ELSE IF(ismooth > 0)
THEN
1073 pa=sfpa*finter_smooth(ifpa, tsg, npc, tf, dydx)
1076 CALL python_call_funct1d(python, fid,tsg,pa)
1083 IF (iinout(4,i)/=0)
THEN
1091 IF (tt>tstart.AND.dt1>zero)
THEN
1092 tsg=(tt-tstart)*scalt
1093 IF (ismooth == 0)
THEN
1094 pio=sfpres*finter(ifpres, tsg, npc, tf, dydx)
1095 ELSEIF(ismooth > 0)
THEN
1096 pio=sfpres*finter_smooth(ifpres
1099 CALL python_call_funct1d(python, fid,tsg,pio)
1103 pa=pio+half*rho*qi(i)**2
1114 phip(i)=(phi(i)-phi_old(i))/dt1
1115 . +agx*(xx-xl(1,nno))+agy*(yy-xl(2,nno))
1116 . +agz*(zz-xl(3,nno))
1125 uu=u(1,i)**2+u(2,i)**2+u(3,i)**2
1136 IF (nspmd == 1)
THEN
1141 coef=one_over_6*third*(pres(n1)+pres(n2)+pres(n3))
1148 a(1,nn1)=a(1,nn1)+coef*nrx
1149 a(2,nn1)=a(2,nn1)+coef*nry
1150 a(3,nn1)=a(3,nn1)+coef*nrz
1151 a(1,nn2)=a(1,nn2)+coef*nrx
1152 a(2,nn2)=a(2,nn2)+coef*nry
1153 a(3,nn2)=a(3,nn2)+coef*nrz
1154 a(1,nn3)=a(1,nn3)+coef*nrx
1155 a(2,nn3)=a(2,nn3)+coef*nry
1156 a(3,nn3)=a(3,nn3)+coef*nrz
1157 wfext=wfext+coef*nrx*v(1,nn1)*dt1
1158 . +coef*nry*v(2,nn1)*dt1
1159 . +coef*nrz*v(3,nn1)*dt1
1160 wfext=wfext+coef*nrx*v(1,nn2)*dt1
1161 . +coef*nry*v(2,nn2)*dt1
1162 . +coef*nrz*v(3,nn2)*dt1
1163 wfext=wfext+coef*nrx*v(1,nn3)*dt1
1164 . +coef*nry*v(2,nn3)*dt1
1165 . +coef*nrz*v(3,nn3)*dt1
1173 IF (ibuf(n1)/=0.OR.ibuf(n2)/=0.OR.ibuf(n3)/=0)
THEN
1183 coef=one_over_6*third*(pres(n1)+pres(n2)+pres(n3))
1187 IF (ibuf(n1)/=0)
THEN
1189 a(1,nn1)=a(1,nn1)+coef*nrx
1190 a(2,nn1)=a(2,nn1)+coef*nry
1191 a(3,nn1)=a(3,nn1)+coef*nrz
1192 wfext=wfext+coef*nrx*v(1,nn1)*dt1
1193 . +coef*nry*v(2,nn1)*dt1
1194 . +coef*nrz*v(3,nn1)*dt1
1196 IF (ibuf(n2)/=0)
THEN
1198 a(1,nn2)=a(1,nn2)+coef*nrx
1199 a(2,nn2)=a(2,nn2)+coef*nry
1200 a(3,nn2)=a(3,nn2)+coef*nrz
1201 wfext=wfext+coef*nrx*v(1,nn2)*dt1
1202 . +coef*nry*v(2,nn2)*dt1
1203 . +coef*nrz*v(3,nn2)*dt1
1205 IF (ibuf(n3)/=0)
THEN
1207 a(1,nn3)=a(1,nn3)+coef*nrx
1208 a(2,nn3)=a(2,nn3)+coef*nry
1210 wfext=wfext+coef*nrx*v(1,nn3)*dt1
1211 . +coef*nry*v(2,nn3)*dt1