You are on page 1of 7

E:\MAIN.

F Wednesday, January 05, 2011 2:26 PM

C This code solves a single phase, single heated channel problem


C Complete explanation and source code are available on http://wp.me/p61TQ-w8
C Last modified: August 2010

PROGRAM MAIN
IMPLICIT REAL*8 (A-H,O-Z)

PARAMETER(LMAXX=1000)
DIMENSION T(LMAXX),P(LMAXX),QLIN(LMAXX),Z(LMAXX),XMU(LMAXX)
& ,RE(LMAXX),FRICF(LMAXX),ITERT(LMAXX),ITERP(LMAXX)

PHI = 3.14159265D0
ITERMAX=20
IRED=11
IPRN=12

C INPUT ************************************************************
C ZPIPE=1.0D0 !PIPE LENGTH [M]
C DH=0.05D0 !PIPE DIAM [M]
C XMFLUX=100.0D0 !MASS FLUX [KG/M2.S]
C T(1)=628.0D0 !INLET TEMPEARTURE [K]
C P(1)=1.0D+5 !INLET PRESSURE [P]
C LMAX=100
C QLINAV=2.5D+5 ! AVERAGE LINEAR HEAT RATE [W/M]
C IQSHAPE=2 !POWER PROFILE, 1=LINEAR, 2=COSINE

READ(IRED,*) ZPIPE
READ(IRED,*) DH
READ(IRED,*) XMFLUX
READ(IRED,*) T(1)
READ(IRED,*) P(1)
READ(IRED,*) LMAX
READ(IRED,*) QLINAV
READ(IRED,*) IQSHAPE

AFLOW=0.25D0*PHI*DH*DH !FLOW AREA [M2]


XMU(1)=VISCOS(T(1))
RE(1)=XMFLUX*DH/XMU(1)
XMDOT=XMFLUX*AFLOW

IF (RE(1)<2100.0D0) THEN
FRICF(1)=64.0D0/RE(1)
ELSE
FRICF(1)=0.316D0*RE(1)**(-0.25D0)
END IF

DZ=ZPIPE/LMAX !MESH SIZE


Z(1)=DZ/2.0D0
DO J=2,LMAX
Z(J)=Z(J-1)+DZ
END DO

IF (IQSHAPE.EQ.1) THEN
C LINEAR POWER PROFILE
DO J=1,LMAX
QLIN(J)=QLINAV
END DO

-1-
E:\MAIN.F Wednesday, January 05, 2011 2:26 PM

ELSE
C COSINE POWER PROFILE
DO J=1,LMAX
QLIN(J)=0.5D0*PHI*QLINAV*DSIN(Z(J)*PHI/ZPIPE)
END DO
END IF

C CALCULATE TOTAL POWER


QTOT=0.0D0
DO J=1,LMAX
QTOT=QTOT+QLIN(J)*DZ
END DO

EPS1=1.0D-5 !CONVERGENCE CRITERION FOR ENERGY


EPS2=1.0D-5 !CONVERGENCE CRITERION FOR MOMENTUM

BOILS=0
JBOIL=LMAX
ITERT(1)=0
ITERP(1)=0
C MARCHING FROM BOTTOM TO TOP
DO J=1,LMAX-1

C NEWTON-RAPHSON ITERATION FOR TEMPERATURE


TOLD=T(J)
TNEW=TOLD
EPS=1.0D0
ITER=0
DO WHILE ((EPS.GT.EPS1).AND.(ITER.LE.ITERMAX))
TNEW=TOLD-FE(T(J),T(J+1),QLIN(J),QLIN(J+1),Z(J),Z(J+1),XMDOT)
& /DFEDT(T(J),T(J+1),QLIN(J),QLIN(J+1),Z(J),Z(J+1),XMDOT)
EPS=DABS((TNEW-TOLD)/TNEW)
TOLD=TNEW !UPDATE
T(J+1)=TNEW
ITER=ITER+1
END DO
T(J+1)=TNEW
ITERT(J+1)=ITER
C WRITE(*,*) 'ENERGY :',ITER

C VISCOSITY
XMU(J+1)=VISCOS(T(J+1))
C REYNOLDS NUMBER
RE(J+1)=XMFLUX*DH/XMU(J+1)
C FRICTION FACTOR
IF (RE(J+1)<2100.0D0) THEN
FRICF(J+1)=64.0D0/RE(J+1)
ELSE
FRICF(J+1)=0.316D0*RE(J+1)**(-0.25D0)
END IF

C NEWTON-RAPHSON ITERATION FOR PRESSURE


POLD=P(J)
PNEW=POLD
EPS=1.0D0
ITER=0
DO WHILE ((EPS.GT.EPS2).AND.(ITER.LE.ITERMAX))

-2-
E:\MAIN.F Wednesday, January 05, 2011 2:26 PM

PNEW=POLD-FK(T(J),T(J+1),P(J),P(J+1),FRICF(J),FRICF(J+1),Z(J)
& ,Z(J+1),XMFLUX,DH)/DFKDP(T(J),T(J+1),P(J),P(J+1),FRICF(J)
& ,FRICF(J+1),Z(J),Z(J+1),XMFLUX,DH)
EPS=DABS((PNEW-POLD)/PNEW)
POLD=PNEW !UPDATE
P(J+1)=PNEW
ITER=ITER+1
END DO
P(J+1)=PNEW
ITERP(J+1)=ITER
C WRITE(*,*) 'MOMENTUM :',ITER

C CHECK FOR BOILING


IF (T(J+1).GE.TSAT(P(J+1))) THEN
BOILS=1
JBOIL=J
GOTO 50
END IF

END DO !MARCHING UPWARD

50 CONTINUE

C AVERAGE NUMBER OF ITERATION


XITERT=0.0D0
XITERP=0.0D0
DO J=2,JBOIL
XITERT=XITERT+ITERT(J)
XITERP=XITERP+ITERP(J)
END DO
XITERT=XITERT/(JBOIL-1)
XITERP=XITERP/(JBOIL-1)

WRITE(IPRN,100)
WRITE(IPRN,200) T(1)
WRITE(IPRN,300) P(1)
WRITE(IPRN,400) XMFLUX
WRITE(IPRN,500) DH
WRITE(IPRN,600) ZPIPE
WRITE(IPRN,700) LMAX
WRITE(IPRN,800) QLINAV
IF (IQSHAPE.EQ.1) THEN
WRITE(IPRN,900)
ELSE
WRITE(IPRN,1000)
END IF
WRITE(IPRN,1100) AFLOW
WRITE(IPRN,1200) QTOT
WRITE(IPRN,1300) XMDOT
WRITE(IPRN,1400)
WRITE(IPRN,1410) (T(JBOIL)-T(1))
WRITE(IPRN,1420) (P(JBOIL)-P(1))
WRITE(IPRN,1430) 100.0D0*(RHO(T(JBOIL),P(JBOIL))-RHO(T(1),P(1)))
& /RHO(T(1),P(1))
IF (BOILS.EQ.0) THEN
WRITE(IPRN,1440)
ELSE

-3-
E:\MAIN.F Wednesday, January 05, 2011 2:26 PM

WRITE(IPRN,1450) Z(JBOIL+1)
END IF
WRITE(IPRN,1460) XITERT
WRITE(IPRN,1470) XITERP
WRITE(IPRN,1475)
WRITE(IPRN,1500)
DO J=1,JBOIL
WRITE(IPRN,1600) J,Z(J),QLIN(J),P(J),T(J),TSAT(P(J)),RE(J),XMU(J)
& ,HEATCAP(T(J)),FRICF(J),ITERT(J),ITERP(J)
END DO
WRITE(IPRN,1550)
IF (BOILS.EQ.1) WRITE(IPRN,1700)
WRITE(IPRN,2000)

100 FORMAT('0',10X,'INPUT DATA')


200 FORMAT(/'Inlet temperature [K] = ',F12.3)
300 FORMAT( 'Inlet pressure [Pa] = ',F12.3)
400 FORMAT( 'Mass flux [kg/m2.s] = ',F12.3)
500 FORMAT( 'Pipe diameter [m] = ',F12.3)
600 FORMAT( 'Pipe length [m] = ',F12.3)
700 FORMAT( 'Axial mesh = ',I12)
800 FORMAT( 'Average linear heat rate [W/m] = ',E12.4)
900 FORMAT( 'Power profile = LINEAR')
1000 FORMAT( 'Power profile = COSINE')
1100 FORMAT(/'Flow area [m2] = ',E12.4)
1200 FORMAT( 'Total power [W] = ',E12.4)
1300 FORMAT( 'Mass flow rate [kg/s] = ',F12.3)
1400 FORMAT(//'0',10X,'RESULTS')
1410 FORMAT(/'TEMPERATURE CHANGE [K] = ',F12.3)
1420 FORMAT( 'PRESSURE CHANGE [Pa] = ',F12.3)
1430 FORMAT( 'DENSITY CHANGE [%] = ',F12.3)
1440 FORMAT(/'SATURATED : NO')
1450 FORMAT(/'SATURATED : YES, STARTS FROM Z[m] = ',F12.3)
1460 FORMAT( 'AVERAGE ITERATION FOR ENERGY EQ. = ',F12.3)
1470 FORMAT( 'AVERAGE ITERATION FOR MOMENTUM EQ. = ',F12.3)
1475 FORMAT(//'0',10X,'OUTPUT DATA')
1500 FORMAT(/' J Z[m] QLIN[W/m] P[Pa] T[K]
& TSAT[K] RE MU[kg/m.s] CP[J/kg.K] FRICF ITER_T
&ITER_P')
1550 FORMAT( ' J Z[m] QLIN[W/m] P[Pa] T[K]
& TSAT[K] RE MU[kg/m.s] CP[J/kg.K] FRICF ITER_T
&ITER_P')
1600 FORMAT(I5,9E12.4,2I8)
1700 FORMAT(/'0',10X,'*** SATURATION TEMPERATURE IS REACHED ***')
2000 FORMAT(/'0',10X,'*** END ***')

STOP
END

C ******************************************************************
REAL*8 FUNCTION FE(TI,TIP1,QI,QIP1,ZI,ZIP1,XMDOT)
C THE ENERGY FUNCTION
C ******************************************************************
IMPLICIT REAL*8 (A-H,O-Z)

DATA A0, A1, A2/ 1630.22D0,-0.83354D0,4.62838D-04/

-4-
E:\MAIN.F Wednesday, January 05, 2011 2:26 PM

B0=-2.0D0*A0*TI-A1*TI*TI-A2*TI*TI*TI-(QI+QIP1)*(ZIP1-ZI)/XMDOT
B1=2.0D0*A0+A2*TI*TI
B2=A1-A2*TI
B3=A2

FE=B0+B1*TIP1+B2*TIP1*TIP1+B3*TIP1*TIP1*TIP1

RETURN
END

C ******************************************************************
REAL*8 FUNCTION DFEDT(TI,TIP1,QI,QIP1,ZI,ZIP1,XMDOT)
C DERIVATIVE OF THE ENERGY FUNCTION
C ******************************************************************
IMPLICIT REAL*8 (A-H,O-Z)

DATA A0, A1, A2/ 1630.22D0,-0.83354D0,4.62838D-04/

B0=-2.0D0*A0*TI-A1*TI*TI-A2*TI*TI*TI-(QI+QIP1)*(ZIP1-ZI)/XMDOT
B1=2.0D0*A0+A2*TI*TI
B2=A1-A2*TI
B3=A2

DFEDT=B1+2.0D0*B2*TIP1+3.0D0*B3*TIP1*TIP1

RETURN
END

C ******************************************************************
REAL*8 FUNCTION FK(TI,TIP1,PI,PIP1,FRICI,FRICIP1,ZI,ZIP1,XMFLUX
& ,DH)
C THE MOMENTUM FUNCTION
C ******************************************************************
IMPLICIT REAL*8 (A-H,O-Z)
DATA A0,A1,A2,A3,A4/ 1011.597D0,-0.22051D0,-1.92243D-5,5.63769D-9,
& 2.26D-7/
GRAV=9.8D0 !GRAVITATIONAL ACCELERATION
DZ=ZIP1-ZI

ALPHA1=A0+A1*TIP1+A2*TIP1*TIP1+A3*TIP1*TIP1*TIP1
ALPHA2=A4

B0=XMFLUX*DABS(XMFLUX)*DZ*FRICI/(4.0D0*DH*RHO(TI,PI))+0.5D0*GRAV
& *DZ*(RHO(TI,PI)+ALPHA1)-XMFLUX*XMFLUX/RHO(TI,PI)-PI
B1=0.5D0*GRAV*DZ*ALPHA2+1.0D0
B2=0.25D0*XMFLUX*DABS(XMFLUX)*DZ*FRICIP1/DH+XMFLUX*XMFLUX

FK=B0+B1*PIP1+B2*(ALPHA1+ALPHA2*PIP1)**(-1.0D0)

RETURN
END

C ******************************************************************
REAL*8 FUNCTION DFKDP(TI,TIP1,PI,PIP1,FRICI,FRICIP1,ZI,ZIP1,XMFLUX
& ,DH)
C DERIVATIVE OF THE MOMENTUM FUNCTION
C ******************************************************************

-5-
E:\MAIN.F Wednesday, January 05, 2011 2:26 PM

IMPLICIT REAL*8 (A-H,O-Z)


DATA A0,A1,A2,A3,A4/ 1011.597D0,-0.22051D0,-1.92243D-5,5.63769D-9,
& 2.26D-7/
GRAV=9.8D0 !GRAVITATIONAL ACCELERATION
DZ=ZIP1-ZI

ALPHA1=A0+A1*TIP1+A2*TIP1*TIP1+A3*TIP1*TIP1*TIP1
ALPHA2=A4

B0=XMFLUX*DABS(XMFLUX)*DZ*FRICI/(4.0D0*DH*RHO(TI,PI))+0.5D0*GRAV
& *DZ*(RHO(TI,PI)+ALPHA1)-XMFLUX*XMFLUX/RHO(TI,PI)-PI
B1=0.5D0*GRAV*DZ*ALPHA2+1.0D0
B2=0.25D0*XMFLUX*DABS(XMFLUX)*DZ*FRICIP1/DH+XMFLUX*XMFLUX

DFKDP=B1+B2*ALPHA2*(ALPHA1+ALPHA2*PIP1)**(-2.0D0)

RETURN
END

C ******************************************************************
REAL*8 FUNCTION RHO(T,P)
C EQ OF STATE: DENSITY
C ******************************************************************
IMPLICIT REAL*8 (A-H,O-Z)
DATA A0,A1,A2,A3,A4/ 1011.597D0,-0.22051D0,-1.92243D-5,5.63769D-9,
& 2.26D-7/
RHO=A0+A1*T+A2*T*T+A3*T*T*T+A4*P
RETURN
END

C ******************************************************************
REAL*8 FUNCTION HEATCAP(T)
C EQ OF STATE: SPECIFIC HEAT CAPACITY
C ******************************************************************
IMPLICIT REAL*8 (A-H,O-Z)
DATA A0,A1,A2/ 1630.22D0,-0.83354D0,4.62838D-4/
HEATCAP=A0+A1*T+A2*T*T
RETURN
END

C ******************************************************************
REAL*8 FUNCTION VISCOS(T)
C EQ OF STATE: DYNAMIC VISCOSITY
C ******************************************************************
IMPLICIT REAL*8 (A-H,O-Z)
ALPHA=-2.4892D0+220.65D0/T-0.4925D0*DLOG10(T)
VISCOS=10.0D0**ALPHA
RETURN
END

C ******************************************************************
REAL*8 FUNCTION TSAT(P)
C EQ OF STATE: SATURATION TEMPERATURE
C ******************************************************************
IMPLICIT REAL*8 (A-H,O-Z)
ALPHA=DLOG(P*9.869D-6)-10.51D0

-6-
E:\MAIN.F Wednesday, January 05, 2011 2:26 PM

TSAT=-12130.0D0/ALPHA
RETURN
END

-7-

You might also like