31 logical identity,crit,wrongdir
35 integer nelem,nactdog(0:3,*),node1,node2,nodem,numf,
36 & ielprop(*),nodef(*),idirf(*),index,iflag,
37 & inv,ipkon(*),kon(*),icase,k_oil
38 & ,nshcon(*),nrhcon(*),ntmat_,mi(*),nodea,nodeb,
41 real*8 prop(*),v(0:mi(2),*),xflow,f,
df(*),kappa,r,a,d,l,
42 & t1,t2,tt1,tt2,pt1,pt2,cp,physcon(*),p2p1,km1,dvi,
43 & kp1,kdkm1,reynolds,pi,lambda,lld,kdkp1,
44 & c2,tdkp1,ttime,time,pt2zpt1,ks,form_fact,xflow_oil,
45 & pt2zpt1_c,qred1_crit,qred,phi,m1,m2,qred1,co(3,*),
46 & shcon(0:3,ntmat_,*),rhcon(0:1,ntmat_,*),vold(0:mi(2),*),
47 & radius,bb,cc,ee1,ee2,dfdm1,dfdm2,m1_c,qred2
49 intent(in) node1,node2,nodem,nelem,lakon,kon,
50 & ipkon,nactdog,ielprop,prop,iflag,
51 & cp,r,physcon,dvi,set,
52 & shcon,nshcon,rhcon,nrhcon,ntmat_,co,vold,mi,ttime,time,
55 intent(inout) xflow,nodef,idirf,numf,f,
df,v,identity
60 if(nactdog(2,node1).ne.0)
then 62 elseif(nactdog(2,node2).ne.0)
then 64 elseif(nactdog(1,nodem).ne.0)
then 68 elseif(iflag.eq.1)
then 78 if(lakon(nelem)(2:6).eq.
'GAPFA')
then 80 elseif(lakon(nelem)(2:6).eq.
'GAPFI')
then 83 form_fact=prop(index+5)
84 xflow_oil=prop(index+6)
85 k_oil=nint(prop(index+7))
87 if(lakon(nelem)(7:8).eq.
'FR')
then 91 nodea=nint(prop(index+1))
92 nodeb=nint(prop(index+2))
93 radius=dsqrt((co(1,nodeb)+vold(1,nodeb)-
94 & co(1,nodea)-vold(1,nodea))**2)
99 elseif(lakon(nelem)(7:8).eq.
'RL')
then 103 nodea=nint(prop(index+1))
104 nodeb=nint(prop(index+2))
105 nodec=nint(prop(index+3))
106 radius=dsqrt((co(1,nodeb)+vold(1,nodeb)-
107 & co(1,nodea)-vold(1,nodea))**2)
110 l=dsqrt((co(2,nodec)+vold(2,nodec)-
111 & co(2,nodeb)-vold(2,nodeb))**2)
120 tt1=v(0,node1)-physcon(1)
121 tt2=v(0,node2)-physcon(1)
126 tt1=v(0,node2)-physcon(1)
127 tt2=v(0,node1)-physcon(1)
142 xflow=inv*pt1*a*dsqrt(2.d0*kdkm1*p2p1**(2.d0/kappa)
143 & *(1.d0-p2p1**(1.d0/kdkm1))/r)/dsqrt(tt1)
145 xflow=inv*pt1*a*dsqrt(kappa/r)*tdkp1**(kp1/(2.d0*km1))/
151 if(dabs(dvi).lt.1e-30)
then 152 write(*,*)
'*ERROR in gaspipe_fanno: ' 153 write(*,*)
' no dynamic viscosity defined' 154 write(*,*)
' dvi= ',dvi
158 reynolds=dabs(xflow)*d/(dvi*a)
166 xflow=inv*a*dsqrt(d/(lambda*l)*2*pt1/(r*tt1)*(pt1-pt2))
169 & pt2zpt1_c,qred1_crit,crit,icase,m1_c)
171 qred=dabs(xflow)*dsqrt(tt1)/(a*pt1)
177 xflow=0.5*inv*qred1_crit*pt1*a/dsqrt(tt1)
178 elseif(qred.gt.qred1_crit)
then 182 xflow=0.5*inv*qred1_crit*pt1*a/dsqrt(tt1)
189 call ts_calc(xflow,tt1,pt1,kappa,r,a,t1,icase)
190 call ts_calc(xflow,tt2,pt2,kappa,r,a,t2,icase)
194 if(nactdog(0,node2).eq.1)
then 195 v(0,node2)=t1*(tt2/t2)
200 if(nactdog(0,node1).eq.1)
then 201 v(0,node1)=t1*(tt2/t2)
206 elseif(iflag.eq.2)
then 224 if(lakon(nelem)(2:6).eq.
'GAPFA')
then 226 elseif(lakon(nelem)(2:6).eq.
'GAPFI')
then 229 form_fact=prop(index+5)
230 xflow_oil=prop(index+6)
231 k_oil=nint(prop(index+7))
233 if(lakon(nelem)(7:8).eq.
'FR')
then 237 nodea=nint(prop(index+1))
238 nodeb=nint(prop(index+2))
239 radius=dsqrt((co(1,nodeb)+vold(1,nodeb)-
240 & co(1,nodea)-vold(1,nodea))**2)
244 elseif(lakon(nelem)(7:8).eq.
'RL')
then 248 nodea=nint(prop(index+1))
249 nodeb=nint(prop(index+2))
250 nodec=nint(prop(index+3))
251 radius=dsqrt((co(1,nodeb)+vold(1,nodeb)-
252 & co(1,nodea)-vold(1,nodea))**2)
255 l=dsqrt((co(2,nodec)+vold(2,nodec)-
256 & co(2,nodeb)-vold(2,nodeb))**2)
261 xflow=v(1,nodem)*iaxial
269 inv=xflow/dabs(xflow)
271 if((pt1-pt2)*inv.lt.0.d0)
then 285 tt1=v(0,node1)-physcon(1)
286 call ts_calc(xflow,tt1,pt1,kappa,r,a,t1,icase)
299 tt1=v(0,node2)-physcon(1)
300 call ts_calc(xflow,tt1,pt1,kappa,r,a,t1,icase)
320 if(dabs(dvi).lt.1e-30)
then 321 write(*,*)
'*ERROR in gaspipe_fanno: ' 322 write(*,*)
' no dynamic viscosity defined' 323 write(*,*)
' dvi= ',dvi
327 reynolds=xflow*d/(dvi*a)
344 if(xflow_oil.ne.0d0)
then 349 & xflow_oil,nelem,lakon,kon,ipkon,ielprop,prop,
350 & v,dvi,cp,r,k_oil,phi,lambda,nshcon,nrhcon,
351 & shcon,rhcon,ntmat_,mi)
365 & pt2zpt1_c,qred1_crit,crit,icase,m1_c)
367 if(wrongdir) lambda=-lambda
369 qred1=xflow*dsqrt(tt1)/(a*pt1)
375 xflow=qred1_crit*a*pt1/dsqrt(tt1)
377 m1=dsqrt(2/km1*((tt1/t1)-1.d0))
381 m1=
min(m1,0.999d0/dsqrt(kappa))
384 if(qred1.gt.qred1_crit)
then 386 xflow=qred1_crit*a*pt1/dsqrt(tt1)
390 m1=dsqrt(2/km1*((tt1/t1)-1.d0))
398 elseif(inv.eq.1)
then 399 tt2=v(0,node2)-physcon(1)
401 tt2=v(0,node1)-physcon(1)
403 call ts_calc(xflow,tt2,pt2,kappa,r,a,t2,icase)
404 m2=dsqrt(2/km1*((tt2/t2)-1.d0))
416 ee1=m1*(1.d0+bb*m1**2)/(1.d0+bb*m1**2*(1.d0+2.d0*cc))
426 dfdm1=2.d0*(m1**2-1.d0)/(kappa*m1**3*(1.d0+bb*m1**2))
432 ee2=m2*(1.d0+bb*m2**2)/(1.d0+bb*m2**2*(1.d0+2.d0*cc))
433 dfdm2=2.d0*(1.d0-m2**2)/(kappa*m2**3*(1.d0+bb*m2**2))
435 f=(1.d0/m1**2-1.d0/m2**2)/kappa+kp1/(2.d0*kappa)*
436 & dlog(((1.d0+bb*m2**2)*m1**2)/
437 & ((1.d0+bb*m1**2)*m2**2))-lld
445 df(2)=dfdm1*ee1/(2.d0*tt1)
449 df(3)=(dfdm1*ee1+dfdm2*ee2)/(inv*xflow)
458 df(5)=dfdm2*ee2/(2.d0*tt2)
468 f=(1.d0/m1**2-1.d0)/kappa+kp1/(2.d0*kappa)*
469 & dlog(((1.d0+bb)*m1**2)/
470 & ((1.d0+bb*m1**2)))-lld
478 df(2)=dfdm1*ee1/(2.d0*tt1)
482 df(3)=dfdm1*ee1/(inv*xflow)
494 elseif(icase.eq.1)
then 498 dfdm1=2.d0*(kappa*m1**2-1.d0)/(kappa*m1**3)
503 ee2=m2*(1.d0+bb*m2**2)/(1.d0+bb*m2**2*(1.d0+2.d0*cc))
504 dfdm2=2.d0*(1.d0-kappa*m2**2)/(kappa*m2**3)
508 f=(1.d0/m1**2-1.d0/m2**2)/kappa+dlog((m1/m2)**2)-lld
516 df(2)=dfdm1*ee1/(2.d0*tt1)
520 df(3)=(dfdm1*ee1+dfdm2*ee2)/(inv*xflow)
529 df(5)=dfdm2*ee2/(2.d0*tt2)
535 f=(1.d0/m1**2-kappa)/kappa+dlog(kappa*m1**2)-lld
543 df(2)=dfdm1*ee1/(2.d0*tt1)
547 df(3)=dfdm1*ee1/(inv*xflow)
564 elseif(iflag.eq.3)
then 582 if(lakon(nelem)(2:6).eq.
'GAPFA')
then 584 elseif(lakon(nelem)(2:6).eq.
'GAPFI')
then 587 form_fact=prop(index+5)
588 xflow_oil=prop(index+6)
589 k_oil=nint(prop(index+7))
597 xflow=v(1,nodem)*iaxial
598 tt1=v(0,node1)-physcon(1)
599 call ts_calc(xflow,tt1,pt1,kappa,r,a,t1,icase)
602 call ts_calc(xflow,tt2,pt2,kappa,r,a,t2,icase)
605 tt2=v(0,node2)-physcon(1)
606 call tt_calc(xflow,tt2,pt2,kappa,r,a,t2,icase)
613 xflow=v(1,nodem)*iaxial
614 tt1=v(0,node2)-physcon(1)
615 call ts_calc(xflow,tt1,pt1,kappa,r,a,t1,icase)
618 call ts_calc(xflow,tt2,pt2,kappa,r,a,t2,icase)
621 tt2=v(0,node1)-physcon(1)
622 call tt_calc(xflow,tt2,pt2,kappa,r,a,t2,icase)
634 if(dabs(dvi).lt.1e-30)
then 635 write(*,*)
'*ERROR in gaspipe_fanno: ' 636 write(*,*)
' no dynamic viscosity defined' 637 write(*,*)
' dvi= ',dvi
641 reynolds=dabs(xflow)*d/(dvi*a)
643 if(reynolds.lt.1.d0)
then 649 if(xflow_oil.ne.0d0)
then 651 & xflow_oil,nelem,lakon,kon,ipkon,ielprop,prop,
652 & v,dvi,cp,r,k_oil,phi,lambda,nshcon,nrhcon,
653 & shcon,rhcon,ntmat_,mi)
665 & pt2zpt1_c,qred1_crit,crit,icase,m1_c)
669 m1=dsqrt(2/km1*((tt1/t1)-1))
670 m2=dsqrt(2/km1*((tt2/t2)-1))
673 write(1,55)
' from node ',node1,
674 &
' to node ', node2,
': air massflow rate = ',xflow,
675 &
' , oil massflow rate = ',xflow_oil
678 write(1,53)
' Inlet node ',node1,
' : Tt1 = ',tt1,
679 &
' , Ts1 = ',t1,
' , Pt1 = ',pt1,
681 write(1,*)
' Element ',nelem,lakon(nelem)
682 write(1,57)
' dvi = ',dvi,
' , Re = ' 684 write(1,58)
' PHI = ',phi,
' , LAMBDA = ',
686 &
', LAMBDA*l/d = ',lambda*l/d,
' , ZETA_PHI = ',
688 write(1,53)
' Outlet node ',node2,
' : Tt2 = ',
690 &
' , Ts2 = ',t2,
' , Pt2 = ',pt2,
693 else if(inv.eq.-1)
then 694 write(1,53)
' Inlet node ',node2,
': Tt1= ',tt1,
695 &
' , Ts1= ',t1,
' , Pt1= ',pt1,
697 write(1,*)
' Element ',nelem,lakon(nelem)
698 write(1,57)
' dvi = ',dvi,
' , Re = ' 700 write(1,58)
' PHI = ',phi,
' , LAMBDA = ',
702 &
', LAMBDA*l/d = ',lambda*l/d,
' , ZETA_PHI = ',
704 write(1,53)
' Outlet node ',node1,
' : Tt2 = ',
706 &
' , Ts2 = ',t2,
' , Pt2 =',pt2,
711 55
format(1x,a,i6,a,i6,a,
e11.4,a,
e11.4)
712 53
format(1x,a,i6,a,
e11.4,a,
e11.4,a,
e11.4,a,
e11.4)
713 57
format(1x,a,
e11.4,a,
e11.4)
subroutine pt2zpt1_crit(pt2, pt1, Tt1, lambda, kappa, r, l, d, pt2zpt1_c, Qred1_crit, crit, icase, M1)
Definition: pt2zpt1_crit.f:35
subroutine df(x, u, uprime, rpar, nev)
Definition: subspace.f:133
#define min(a, b)
Definition: cascade.c:31
subroutine ts_calc(xflow, Tt, Pt, kappa, r, A, Ts, icase)
Definition: ts_calc.f:20
subroutine friction_coefficient(l, d, ks, reynolds, form_fact, lambda)
Definition: friction_coefficient.f:26
subroutine tt_calc(xflow, Tt, Pt, kappa, r, A, Ts, icase)
Definition: tt_calc.f:20
subroutine two_phase_flow(Tt1, pt1, T1, pt2, xflow_air, xflow_oil, nelem, lakon, kon, ipkon, ielprop, prop, v, dvi_air, cp, r, k_oil, phi, lambda, nshcon, nrhcon, shcon, rhcon, ntmat_, mi, iaxial)
Definition: two_phase_flow.f:23
static double * e11
Definition: radflowload.c:42