34 logical identity,flowunknown
38 integer nelem,nactdog(0:3,*),node1,node2,nodem,iaxial,
39 & ielprop(*),nodef(*),idirf(*),index,iflag,mi(*),
40 & inv,ncoel,ndi,nbe,id,nen,ngv,numf,nodea,nodeb,
41 & ipkon(*),isothermal,kon(*),nelemswirl
43 real*8 prop(*),v(0:mi(2),*),xflow,f,
df(*),a,d,pi,radius,
44 & p1,p2,rho,dvi,friction,reynolds,vold(0:mi(2),*),
45 & g(3),a1,a2,xn,xk,xk1,xk2,zeta,dl,dg,rh,a0,alpha,
46 & coarseness,rd,xks,
z1,z2,co(3,*),xcoel(11),yel(11),
47 & yco(11),xdi(10),ydi(10),xbe(7),ybe(7),zbe(7),ratio,
48 & xen(10),yen(10),xgv(8),ygv(8),xkn,xkp,ttime,time,
49 & dh,kappa,r,dkda,form_fact,dzetadalpha,t_chang,
50 & xflow_vol,r1d,r2d,
r1,r2,eta, k1, kr, u1,ui, ciu, c1u,
51 & c2u, omega,cinput,un,t
54 data xcoel /0,0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1.0/
55 data yco /0.5,0.46,0.41,0.36,0.30,0.24,0.18,0.12,0.06,0.02,0./
56 data yel /1.,0.81,0.64,0.49,0.36,0.25,0.16,0.09,0.04,0.01,0./
59 data xdi /0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1./
60 data ydi /226.,47.5,17.5,7.8,3.75,1.80,0.8,0.29,0.06,0./
63 data xbe /1.,1.5,2.,3.,4.,6.,10./
64 data ybe /0.21,0.12,0.10,0.09,0.09,0.08,0.2/
65 data zbe /0.51,0.32,0.29,0.26,0.26,0.17,0.31/
68 data xen /0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1./
69 data yen /232.,51.,18.8,9.6,5.26,3.08,1.88,1.17,0.734,0.46/
72 data xgv /0.125,0.25,0.375,0.5,0.625,0.75,0.875,1./
73 data ygv /98.,17.,5.52,2.,0.81,0.26,0.15,0.12/
83 if(nactdog(2,node1).ne.0)
then 85 elseif(nactdog(2,node2).ne.0)
then 87 elseif(nactdog(1,nodem).ne.0)
then 89 elseif(nactdog(3,nodem).ne.0)
then 93 elseif((iflag.eq.1).or.(iflag.eq.2).or.(iflag.eq.3))
then 100 z1=-g(1)*co(1,node1)-g(2)*co(2,node1)-g(3)*co(3,node1)
101 z2=-g(1)*co(1,node2)-g(2)*co(2,node2)-g(3)*co(3,node2)
107 if(nactdog(1,nodem).ne.0)
then 111 xflow=v(1,nodem)*iaxial
114 xflow=v(1,nodem)*iaxial
115 if(xflow.ge.0.d0)
then 130 if((lakon(nelem)(4:5).ne.
'BE').and.
131 & (lakon(nelem)(6:7).eq.
'MA'))
then 135 if(lakon(nelem)(8:8).eq.
'F')
then 136 nodea=nint(prop(index+1))
137 nodeb=nint(prop(index+2))
139 radius=dsqrt((co(1,nodeb)+vold(1,nodeb)-
140 & co(1,nodea)-vold(1,nodea))**2+
141 & (co(2,nodeb)+vold(2,nodeb)-
142 & co(2,nodea)-vold(2,nodea))**2+
143 & (co(3,nodeb)+vold(3,nodeb)-
144 & co(3,nodea)-vold(3,nodea))**2)
154 dl=dsqrt((co(1,node2)-co(1,node1))**2+
155 & (co(2,node2)-co(2,node1))**2+
156 & (co(3,node2)-co(3,node1))**2)
157 dg=dsqrt(g(1)*g(1)+g(2)*g(2)+g(3)*g(3))
159 xk=2.d0*xn*xn*dl*dg/(a*a*rh**(4.d0/3.d0))
161 xkn=2.d0*xn*xn*dl*dg/(a*a*rh**(4.d0/3.d0))
164 elseif(lakon(nelem)(6:7).eq.
'WC')
then 168 if(lakon(nelem)(8:8).eq.
'F')
then 169 nodea=nint(prop(index+1))
170 nodeb=nint(prop(index+2))
172 radius=dsqrt((co(1,nodeb)+vold(1,nodeb)-
173 & co(1,nodea)-vold(1,nodea))**2+
174 & (co(2,nodeb)+vold(2,nodeb)-
175 & co(2,nodea)-vold(2,nodea))**2+
176 & (co(3,nodeb)+vold(3,nodeb)-
177 & co(3,nodea)-vold(3,nodea))**2)
186 dl=dsqrt((co(1,node2)-co(1,node1))**2+
187 & (co(2,node2)-co(2,node1))**2+
188 & (co(3,node2)-co(3,node1))**2)
191 form_fact=prop(index+5)
198 friction=1.d0/(2.03*dlog10(xks/(d*3.7)))**2
203 reynolds=xflow*d/(a*dvi)
208 xk=friction*dl/(d*a*a)
211 xkn=friction*dl/(d*a*a)
214 elseif(lakon(nelem)(6:7).eq.
'EL')
then 222 call ident(xcoel,ratio,ncoel,id)
226 elseif(id.eq.ncoel)
then 229 zeta=yel(id)+(yel(id+1)-yel(id))*(ratio-xcoel(id))/
230 & (xcoel(id+1)-xcoel(id))
241 elseif(id.eq.ncoel)
then 244 zeta=yco(id)+(yco(id+1)-yco(id))*(ratio-xcoel(id))/
245 & (xcoel(id+1)-xcoel(id))
253 elseif(lakon(nelem)(4:5).eq.
'EL')
then 267 reynolds=xflow*dh/(dvi*a1)
270 call zeta_calc(nelem,prop,ielprop,lakon,reynolds,zeta,
271 & isothermal,kon,ipkon,r,kappa,v,mi,iaxial)
285 lakon(nelem)(4:5)=
'CO' 286 call zeta_calc(nelem,prop,ielprop,lakon,reynolds,zeta,
287 & isothermal,kon,ipkon,r,kappa,v,mi,iaxial)
288 lakon(nelem)(4:5)=
'EL' 295 elseif(lakon(nelem)(6:7).eq.
'CO')
then 303 call ident(xcoel,ratio,ncoel,id)
307 elseif(id.eq.ncoel)
then 310 zeta=yco(id)+(yco(id+1)-yco(id))*(ratio-xcoel(id))/
311 & (xcoel(id+1)-xcoel(id))
322 elseif(id.eq.ncoel)
then 325 zeta=yel(id)+(yel(id+1)-yel(id))*(ratio-xcoel(id))/
326 & (xcoel(id+1)-xcoel(id))
334 elseif(lakon(nelem)(4:5).eq.
'CO')
then 348 reynolds=xflow*dh/(dvi*a2)
351 call zeta_calc(nelem,prop,ielprop,lakon,reynolds,zeta,
352 & isothermal,kon,ipkon,r,kappa,v,mi,iaxial)
361 lakon(nelem)(4:5)=
'EL' 362 call zeta_calc(nelem,prop,ielprop,lakon,reynolds,zeta,
363 & isothermal,kon,ipkon,r,kappa,v,mi,iaxial)
364 lakon(nelem)(4:5)=
'CO' 371 elseif(lakon(nelem)(6:7).eq.
'DI')
then 380 call ident(xdi,ratio,ndi,id)
383 elseif(id.eq.ndi)
then 386 zeta=ydi(id)+(ydi(id+1)-ydi(id))*(ratio-xdi(id))/
387 & (xdi(id+1)-xdi(id))
395 elseif(lakon(nelem)(6:7).eq.
'EN')
then 404 call ident(xen,ratio,nen,id)
407 elseif(id.eq.nen)
then 410 zeta=yen(id)+(yen(id+1)-yen(id))*(ratio-xen(id))/
411 & (xen(id+1)-xen(id))
425 elseif(lakon(nelem)(4:5).eq.
'EN')
then 431 call zeta_calc(nelem,prop,ielprop,lakon,reynolds,zeta,
432 & isothermal,kon,ipkon,r,kappa,v,mi,iaxial)
438 write(*,*)
'*ERROR in liquidpipe: loss coefficients' 439 write(*,*)
' for entrance (Idelchik) do not apply' 440 write(*,*)
' to reversed flow' 451 reynolds=dabs(xflow)*dh/(dvi*a2)
460 elseif(lakon(nelem)(4:5).eq.
'EX')
then 466 call zeta_calc(nelem,prop,ielprop,lakon,reynolds,zeta,
467 & isothermal,kon,ipkon,r,kappa,v,mi,iaxial)
469 write(*,*)
'*ERROR in liquidpipe: loss coefficients' 470 write(*,*)
' for exit (Idelchik) do not apply to' 471 write(*,*)
' reversed flow' 482 reynolds=dabs(xflow)*dh/(dvi*a1)
491 elseif(lakon(nelem)(4:5).eq.
'US')
then 497 call zeta_calc(nelem,prop,ielprop,lakon,reynolds,zeta,
498 & isothermal,kon,ipkon,r,kappa,v,mi,iaxial)
500 write(*,*)
'*ERROR in liquidpipe: loss coefficients' 501 write(*,*)
' for a user element do not apply to' 502 write(*,*)
' reversed flow' 520 reynolds=dabs(xflow)*dh/(dvi*a)
529 elseif(lakon(nelem)(6:7).eq.
'GV')
then 534 if(nactdog(3,nodem).eq.0)
then 544 call ident(xgv,alpha,ngv,id)
547 elseif(id.eq.ngv)
then 550 dzetadalpha=(ygv(id+1)-ygv(id))/(xgv(id+1)-xgv(id))
551 zeta=ygv(id)+dzetadalpha*(alpha-xgv(id))
555 dkda=dzetadalpha/(a*a)
562 elseif(lakon(nelem)(6:7).eq.
'BE')
then 569 coarseness=prop(index+4)
572 call ident(xbe,rd,nbe,id)
574 zeta=ybe(1)+(zbe(1)-ybe(1))*coarseness
575 elseif(id.eq.nbe)
then 576 zeta=ybe(nbe)+(zbe(nbe)-ybe(nbe))*coarseness
578 zeta=(1.d0-coarseness)*
579 & (ybe(id)+(ybe(id+1)-ybe(id))*(rd-xbe(id))/
580 & (xbe(id+1)-xbe(id)))
582 & (zbe(id)+(zbe(id+1)-zbe(id))*(rd-xbe(id))/
583 & (xbe(id+1)-xbe(id)))
585 zeta=zeta*alpha/90.d0
592 elseif(lakon(nelem)(4:5).eq.
'BE')
then 604 reynolds=dabs(xflow)*dh/(dvi*a)
606 call zeta_calc(nelem,prop,ielprop,lakon,reynolds,zeta,
607 & isothermal,kon,ipkon,r,kappa,v,mi,iaxial)
616 elseif(lakon(nelem)(4:5).eq.
'LO')
then 625 reynolds=dabs(xflow)*dh/(dvi*a1)
627 call zeta_calc(nelem,prop,ielprop,lakon,reynolds,zeta,
628 & isothermal,kon,ipkon,r,kappa,v,mi,iaxial)
636 elseif(lakon(nelem)(4:5).eq.
'WA')
then 642 a1=1.d10*prop(index+1)
651 reynolds=dabs(xflow)*dh/(dvi*a2)
653 call zeta_calc(nelem,prop,ielprop,lakon,reynolds,zeta,
654 & isothermal,kon,ipkon,r,kappa,v,mi,iaxial)
660 write(*,*)
'*ERROR in liquidpipe: loss coefficients' 661 write(*,*)
' for wall orifice do not apply to' 662 write(*,*)
' reversed flow' 671 elseif(lakon(nelem)(4:5).eq.
'BR')
then 675 if(nelem.eq.nint(prop(index+2)))
then 687 write(*,*)
'*ERROR in liquidpipe: loss coefficients' 688 write(*,*)
' for branches do not apply to' 689 write(*,*)
' reversed flow' 693 call zeta_calc(nelem,prop,ielprop,lakon,reynolds,zeta,
694 & isothermal,kon,ipkon,r,kappa,v,mi,iaxial)
709 elseif((lakon(nelem)(4:5).eq.
'C1'))
then 716 reynolds=dabs(xflow)*dh/(dvi*a1)
731 elseif((lakon(nelem)(4:4).eq.
'V'))
then 742 if(((xflow.gt.0.d0).and.(r2d.gt.r1d))
743 & .or.((r2.lt.
r1).and.(xflow.lt.0d0)))
then 750 elseif(((xflow.gt.0.d0).and.(r2d.lt.r1d))
751 & .or.((r2.gt.
r1).and.(xflow.lt.0d0)))
then 757 xflow=-v(1,nodem)*iaxial
771 if((lakon(nelem)(4:5).eq.
'VF'))
then 779 nelemswirl=nint(prop(index+6))
785 t_chang=prop(index+8)
801 elseif(inv.lt.0)
then 807 elseif(nelemswirl.gt.0)
then 808 if(lakon(nelemswirl)(2:5).eq.
'LPPN')
then 809 cinput=prop(ielprop(nelemswirl)+5)
810 elseif(lakon(nelemswirl)(2:5).eq.
'LPVF')
then 811 cinput=prop(ielprop(nelemswirl)+9)
812 elseif(lakon(nelemswirl)(2:5).eq.
'LPFS')
then 813 cinput=prop(ielprop(nelemswirl)+7)
816 cinput=u1+k1*(cinput-u1)
821 elseif(inv.lt.0)
then 829 elseif(inv.lt.0)
then 837 elseif(
r1.ge.r2)
then 845 xkn=rho/2*ciu**2*(1-(
r1/r2)**2)
848 xkn=rho/2*ciu**2*(1-(
r1/r2)**2)
855 if((lakon(nelem)(4:5).eq.
'VS'))
then 865 t_chang=prop(index+6)
874 elseif(inv.lt.0)
then 885 xkn=rho/2*ui**2*((r2/
r1)**2-1)
888 xkn=rho/2*ui**2*((r2/
r1)**2-1)
899 xflow=(
z1-z2+(p1-p2)/rho)/(xk2-xk1+xkp)
900 if(xflow.lt.0.d0)
then 901 xflow=(
z1-z2+(p1-p2)/rho)/(xk2-xk1-xkn)
902 if(xflow.lt.0.d0)
then 903 write(*,*)
'*WARNING in liquidpipe:' 904 write(*,*)
' initial mass flow could' 905 write(*,*)
' not be determined' 906 write(*,*)
' 1.d-10 is taken' 909 xflow=-rho*dsqrt(2.d0*xflow)
912 xflow=rho*dsqrt(2.d0*xflow)
918 if(lakon(nelem)(6:7).eq.
'GV')
then 922 elseif(iflag.eq.2)
then 926 if(lakon(nelem)(4:4).ne.
'V')
then 931 df(2)=(xk2-xk1+inv*xk)*xflow/(rho*rho)
932 df(4)=(xflow*xflow*inv*dkda)/(2.d0*rho*rho)
933 f=
df(3)*p2+
df(1)*p1+
df(2)*xflow/2.d0+z2-
z1 935 else if (lakon(nelem)(4:5).eq.
'VF')
then 942 elseif(r2.lt.
r1)
then 948 else if (lakon(nelem)(4:5).eq.
'VS')
then 949 if(((r2.ge.
r1).and.(xflow.gt.0d0))
950 & .or.((r2.lt.
r1).and.(xflow.lt.0d0)))
then 960 elseif(((r2.lt.
r1).and.(xflow.gt.0d0))
961 & .or.((r2.gt.
r1).and.(xflow.lt.0d0)))
then 973 else if (iflag.eq.3)
then 983 write(1,55)
' from node',node1,
984 &
' to node', node2,
': oil massflow rate = ',xflow,
985 &
' i.e. in volume per time ',xflow_vol
986 55
FORMAT(1x,a,i6,a,i6,a,
e11.4,a,
e11.4,a)
988 &Rho= ',rho,
', Nu= ',un,
', dyn.visc.= ',dvi
991 write(1,56)
' Inlet node ',node1,
': Tt1=',t,
993 if(lakon(nelem)(4:5).eq.
'EL'.or.
994 & lakon(nelem)(4:5).eq.
'CO'.or.
995 & lakon(nelem)(4:5).eq.
'EN'.or.
996 & lakon(nelem)(4:5).eq.
'EX'.or.
997 & lakon(nelem)(4:5).eq.
'US'.or.
998 & lakon(nelem)(4:5).eq.
'BE'.or.
999 & lakon(nelem)(4:5).eq.
'LO'.or.
1000 & lakon(nelem)(4:5).eq.
'WA'.or.
1001 & lakon(nelem)(4:5).eq.
'BR')
then 1003 write(1,*)
' Element ',nelem,lakon(nelem)
1004 write(1,58)
' Re= ',reynolds,
' zeta= ',
1007 elseif((lakon(nelem)(4:5).eq.
'C1'))
then 1008 write(1,*)
' Element ',nelem,lakon(nelem)
1009 write(1,58)
' Re= ',reynolds,
' cd= ',
1012 else if(lakon(nelem)(4:5).eq.
'FR')
then 1013 write(1,*)
' Element ',nelem,lakon(nelem)
1014 write(1,59)
' Re= ',reynolds,
' lambda= 1015 &',friction,
' lambda*L/D= ',friction*dl/d
1017 else if (lakon(nelem)(4:4).eq.
'V')
then 1018 write(1,*)
' Element ',nelem,lakon(nelem)
1019 write(1,*)
' C1u= ',c1u,
'm/s ,C2u= ' 1020 &,c2u,
'm/s',
' ,DeltaP= ',xkn
1023 write(1,56)
' Outlet node ',node2,
': Tt2=',t,
1026 else if(inv.eq.-1)
then 1030 56
FORMAT(1x,a,i6,a,
e11.4,a,
e11.4,a)
1032 58
FORMAT(1x,a,
e11.4,a,
e11.4)
subroutine ident(x, px, n, id)
Definition: ident.f:26
static double * z1
Definition: filtermain.c:48
subroutine zeta_calc(nelem, prop, ielprop, lakon, reynolds, zeta, isothermal, kon, ipkon, R, kappa, v, mi, iaxial)
Definition: zeta_calc.f:35
subroutine df(x, u, uprime, rpar, nev)
Definition: subspace.f:133
static double * r1
Definition: filtermain.c:48
subroutine friction_coefficient(l, d, ks, reynolds, form_fact, lambda)
Definition: friction_coefficient.f:26
static double * e11
Definition: radflowload.c:42