C
PROGRAM INTERAREA
C ****************************************************************
C This is a code for calculating the effective interfacial area(ae)
C with multi zones in a reactor. Other detail information
C was given by the paper.
C luoyong980@gmail.com
C ****************************************************************
C ----------------------------------------------------------------
C Chapter 1. Variables declaration
C ----------------------------------------------------------------
IMPLICIT NONE
C *** Set number of packings ***
INTEGER N_PACK
PARAMETER (N_PACK = 8)
C *** Set number of experiments of each packing ***
INTEGER N_EXPR
PARAMETER (N_EXPR = 10)
C *** Set number of total experiments of all the packings ***
INTEGER N_TEXP
PARAMETER (N_TEXP = N_PACK * N_EXPR)
C *** Set number of packing zones in the rotor ***
INTEGER N_ZONE
PARAMETER (N_ZONE = 4)
C *** Set variables ***
INTEGER I,II
INTEGER N,NN
COMMON /DAT/ II, NN
COMMON /CONSTANTS/ DIAFIB, DENLIQ, EFAREA, FLOLIQ, RSPEED,
* SPAREA, TENLIQ, VISLIQ, RADIUS
C Original Input constant variables
DOUBLE PRECISION DENLIQ(N_TEXP) !Density of liquid, [Kg/m3]
DOUBLE PRECISION EFAREA(N_TEXP) !Effective interfacial area of..,ae [1/m]
DOUBLE PRECISION FLOLIQ(N_TEXP) !Liquid flow rate,L [L/h]
DOUBLE PRECISION RSPEED(N_TEXP) !Rotational speed, N [1/s]
DOUBLE PRECISION SPAREA(N_ZONE, N_TEXP) !Specfic surface area ..,ap [1/m]
DOUBLE PRECISION TENLIQ(N_TEXP) !Surface tension of the liquid, [Kg/s2]
DOUBLE PRECISION VISLIQ(N_TEXP) !Kinematic viscosity of liquid,v [m2/s]
DOUBLE PRECISION RADIUS(N_ZONE) !Radius of the rotor,r [1/m]
DOUBLE PRECISION DIAFIB(N_ZONE, N_TEXP) !Diameter of fiber,d [mm]
C Calculating variables (1 th)
DOUBLE PRECISION ACCELE(N_TEXP) !centrifugal acceleration,ac [m/s2]
DOUBLE PRECISION FLULIQ(N_TEXP) !Liquid flux, Lf [m3/(m2 s)]
C Calculating variables (2 th)
DOUBLE PRECISION HOLLIQ(N_TEXP) !Liquid holdup [m3/m3]
DOUBLE PRECISION THFILM(N_TEXP) !Thickness of liquid film [m]
DOUBLE PRECISION DIADRO(N_ZONE, N_TEXP) !Diameter of liquid droplet[m]
DOUBLE PRECISION PERCEN(N_TEXP) !Percentage of the surface area [-]
C Other variables
DOUBLE PRECISION HEIGHT !Height of the rotor,H [m]
DOUBLE PRECISION R !Integral variables
DOUBLE PRECISION B1(N_ZONE)
DOUBLE PRECISION B2(N_ZONE)
DOUBLE PRECISION INTEGR1(N_ZONE, N_TEXP) !Integral part 1
DOUBLE PRECISION INTEGR2(N_ZONE, N_TEXP) !Integral part 2
DOUBLE PRECISION INTEGR3(N_ZONE, N_TEXP) !Integral part 3
DOUBLE PRECISION SINTEGR1(N_TEXP) !Integral part 1
DOUBLE PRECISION SINTEGR2(N_TEXP) !Integral part 2
DOUBLE PRECISION SINTEGR3(N_TEXP) !Integral part 3
C Output results
OPEN (UNIT = 777, FILE = 'RESULT.out', STATUS = 'UNKNOWN')
C ----------------------------------------------------------------
C Chapter 2. Read input data
C ----------------------------------------------------------------
WRITE(6, *) 'READ INPUT DATA ........................'
OPEN (UNIT = 50, FILE = 'DIAFIB.INP', STATUS = 'OLD')
READ (50, *) ((DIAFIB(I, N), I = 1, N_ZONE), N = 1, N_TEXP)
CLOSE (UNIT = 50)
OPEN (UNIT = 55, FILE = 'DENLIQ.INP', STATUS = 'OLD')
READ (55, *) (DENLIQ(N), N = 1, N_TEXP)
CLOSE (UNIT = 55)
OPEN (UNIT = 60, FILE = 'EFAREA.INP', STATUS = 'OLD')
READ (60, *) (EFAREA(N), N = 1, N_TEXP)
CLOSE (UNIT = 60)
OPEN (UNIT = 65, FILE = 'FLOLIQ.INP', STATUS = 'OLD')
READ (65, *) (FLOLIQ(N), N = 1, N_TEXP)
CLOSE (UNIT = 65)
OPEN (UNIT = 70, FILE = 'RSPEED.INP', STATUS = 'OLD')
READ (70, *) (RSPEED(N), N = 1, N_TEXP)
CLOSE (UNIT = 70)
OPEN (UNIT = 75, FILE = 'SPAREA.INP', STATUS = 'OLD')
READ (75, *) ((SPAREA(I, N), I = 1, N_ZONE), N = 1, N_TEXP)
CLOSE (UNIT = 75)
OPEN (UNIT = 80, FILE = 'TENLIQ.INP', STATUS = 'OLD')
READ (80, *) (TENLIQ(N), N = 1, N_TEXP)
CLOSE (UNIT = 80)
OPEN (UNIT = 85, FILE = 'VISLIQ.INP', STATUS = 'OLD')
READ (85, *) (VISLIQ(N), N = 1, N_TEXP)
CLOSE (UNIT = 85)
OPEN (UNIT = 90, FILE = 'RADIUS.INP', STATUS = 'OLD')
READ (90, *) (RADIUS(N), N = 1, N_ZONE)
CLOSE (UNIT = 90)
WRITE(6, *) '................................... done'
WRITE(6, *) ''
C ----------------------------------------------------------------
C Chapter 3. Call subroutines to calculate the intermediate various
C ----------------------------------------------------------------
C ----------------------------------------------------------------
C Calculate integral 1, 2, 3
C ----------------------------------------------------------------
B1(N_ZONE)=0
B2(N_ZONE)=0
II=1
NN=1
DO 55 I=1, N_ZONE
B1(I) = 0.078D0 + 0.02D0 * (I-1)
B2(I) = 0.078D0 + 0.02D0 * (I)
55 ENDDO
DO 60 N = 1, N_TEXP
DO 70 I =1, N_ZONE
CALL MASSTR(N_ZONE, N_TEXP, B1(I), B2(I), INTEGR1(I, N),
* INTEGR2(I, N), INTEGR3(I, N))
II=II+1
70 ENDDO
NN=NN+1
60 ENDDO
DO 61 N = 1, N_TEXP
SINTEGR1(N)=0.0D0
SINTEGR2(N)=0.0D0
SINTEGR3(N)=0.0D0
DO 71 I =1, N_ZONE
SINTEGR1(N) = SINTEGR1(N)+ INTEGR1(I, N)
SINTEGR2(N) = SINTEGR2(N)+ INTEGR2(I, N)
SINTEGR3(N) = SINTEGR3(N)+ INTEGR3(I, N)
C WRITE(*,*) INTEGR1(I,N), INTEGR2(I,N), INTEGR3(I,N)
71 ENDDO
C WRITE(*,*) SINTEGR1(N), SINTEGR2(N), SINTEGR3(N)
61 ENDDO
C ----------------------------------------------------------------
C 6. Calculate the percentage
C ----------------------------------------------------------------
DO 5 N = 1, N_TEXP
PERCEN(N)= (EFAREA(N) * SINTEGR3(N) - SINTEGR2(N))/ SINTEGR1(N)
* *100.D0
5 END DO
C ----------------------------------------------------------------
C 7. Output the data
C ----------------------------------------------------------------
WRITE(777,100)
100 FORMAT(' No.',3X,'d1(mm)',3X,'d2(mm)',3X, 'd3(mm)',3X, 'd4(mm)',3X,
* 'N (1/s) ',3X,'Percentage (%)',3X)
WRITE(777,*)''
DO 10 N = 1, N_TEXP
WRITE(777,200) N, DIAFIB(1, N_TEXP), DIAFIB(2, N_TEXP),
* DIAFIB(3, N_TEXP), DIAFIB(4, N_TEXP), RSPEED(N), PERCEN(N)
200 FORMAT(I2, 3X, E10.2, 3X, E10.2, 3X, E10.2, 3X, E10.2, 3X,
* E10.2, 3X, E10.2, 3X)
10 END DO
WRITE(*,*)"Success!"
STOP
END
C ----------------------------------------------------------------
C MAIN PROGRAM STOPS HERE!!
C ----------------------------------------------------------------
C ----------------------------------------------------------------
C THE FOLLOWING ARE THE SUBROUTINES.
C ----------------------------------------------------------------
C ****************************************************************
SUBROUTINE ACCRPB(N_TEXP, ACCELE, RSPEED, R)
C ****************************************************************
C Routine name: ACCRPB
C Routine number: 1
C Modified by: Yong Luo at 05/30/2012
C
C Function: Calculate the centrifugal acceleration in a RPB
C
C ****************************************************************
INTEGER N, N_TEXP
DOUBLE PRECISION ACCELE(N_TEXP)!centrifugal acceleration,ac [m/s2]
DOUBLE PRECISION RSPEED(N_TEXP)!Rotational speed, N [1/s]
DOUBLE PRECISION R !integration variable
DO 20 N = 1, N_TEXP
ACCELE(N) = ((3.1415926D0* RSPEED(N) / 30.D0)**2.D0) * R
20 ENDDO
RETURN
END
C ****************************************************************
C ****************************************************************
SUBROUTINE HOLDUP(N_TEXP, HOLLIQ, ACCELE, FLULIQ, VISLIQ)
C ****************************************************************
C Routine name: HOLDUP
C Routine number: 2
C Modified by: Yong Luo at 05/30/2012
C
C Function: Calculates the liquid holdup
C
C ****************************************************************
INTEGER N, N_TEXP
DOUBLE PRECISION FLULIQ(N_TEXP) !Liquid flux, Lf [m3/(m2 s)]
DOUBLE PRECISION HOLLIQ(N_TEXP) !Liquid holdup [m3/m3]
DOUBLE PRECISION ACCELE(N_TEXP) !Centrifugal acceleration,ac [m/s2]
DOUBLE PRECISION VISLIQ(N_TEXP) !Kinematic viscosity of liquid,v [m2/s]
DO 30 N = 1, N_TEXP
HOLLIQ(N) =(0.039D0*(ACCELE(N)/100.0D0)**(-0.5D0)
* *(FLULIQ(N) /0.01D0)**0.6D0*(VISLIQ(N)/0.000001D0)
* **(0.22D0))**(1.0D0/1.6D0)
30 ENDDO
RETURN
END
C ****************************************************************
C ****************************************************************
SUBROUTINE THICKN(N_TEXP, THFILM, VISLIQ, FLULIQ, ACCELE)
C ****************************************************************
C Routine name: THICKN
C Routine number: 3
C Modified by: Yong Luo at 05/30/2012
C
C Function: Calculates the thickness of liquid films
C
C ****************************************************************
INTEGER N, N_TEXP
DOUBLE PRECISION FLULIQ(N_TEXP) !Liquid flux, Lf [m3/(m2 s)]
DOUBLE PRECISION VISLIQ(N_TEXP) !Kinematic viscosity of liquid,v [m2/s]
DOUBLE PRECISION ACCELE(N_TEXP) !centrifugal acceleration,ac [m/s2]
DOUBLE PRECISION THFILM(N_TEXP) !Thickness of liquid film [m]
c DOUBLE PRECISION SPAREA(N_TEXP) !Specfic surface area ..,ap [1/m]
DO 40 N = 1, N_TEXP
C !!!Note: THFILM= Liquid film thickness * specific surface area
THFILM(N) =4.2D0*(10.**8.0)*VISLIQ(N)*FLULIQ(N)
* / ACCELE(N)
40 ENDDO
RETURN
END
C ****************************************************************
C ****************************************************************
SUBROUTINE DIAMET(N_TEXP, N_ZONE, DIADRO, TENLIQ, DENLIQ,
* ACCELE, FLOLIQ, DIAFIB)
C ****************************************************************
C Routine name: DIAMET
C Routine number: 4
C Modified by: Yong Luo at 05/30/2012
C
C Function: Calculates the diameter of the liquid droplet
C
C ****************************************************************
INTEGER I, N, N_TEXP, N_ZONE
DOUBLE PRECISION ACCELE(N_TEXP) !Centrifugal acceleration; [m/s2]
DOUBLE PRECISION DIADRO(N_ZONE, N_TEXP) !Diameter of droplets,d [mm]
DOUBLE PRECISION DIAFIB(N_ZONE, N_TEXP) !Diameter of fiber,d [mm]
DOUBLE PRECISION DENLIQ(N_TEXP) !Density of liquid, [Kg/m3]
DOUBLE PRECISION FLOLIQ(N_TEXP) !Liquid flow rate,L [L/h]
DOUBLE PRECISION TENLIQ(N_TEXP) !Surface tension of the liquid, [Kg/s2]
DO 51 N = 1, N_TEXP
DO 52 I = 1, N_ZONE
DIADRO(I, N) =1.5158D0 * (TENLIQ(N) / (DENLIQ(N) * ACCELE(N)))
* **0.0495 * (FLOLIQ(N)/ 100.D0)**0.0735
* * (DIAFIB(I, N)/ 1.D0)**0.2489
52 ENDDO
51 ENDDO
RETURN
END
C ****************************************************************
C ****************************************************************
SUBROUTINE MASSTR(N_ZONE, N_TEXP, A1, A2, INTEGRAL1,
* INTEGRAL2, INTEGRAL3)
C ****************************************************************
C Routine name: MASSTR
C Routine number: 5
C Modified by: Yong Luo at 05/30/2012
C
C Function: Calculate the effective interfacial area
C
C ****************************************************************
USE IMSL
IMPLICIT NONE
INTEGER I, N, N_TEXP, N_ZONE,II,NN
DOUBLE PRECISION, EXTERNAL::F1, F2, F3
DOUBLE PRECISION INTEGRAL1
DOUBLE PRECISION INTEGRAL2
DOUBLE PRECISION INTEGRAL3
DOUBLE PRECISION A1
DOUBLE PRECISION A2
DOUBLE PRECISION, PARAMETER :: ERRABS = 1.E-5
DOUBLE PRECISION, PARAMETER :: ERRREL = 1.E-5
DOUBLE PRECISION ANS1
DOUBLE PRECISION ANS2
DOUBLE PRECISION ANS3
DOUBLE PRECISION ERR1
DOUBLE PRECISION ERR2
DOUBLE PRECISION ERR3
CALL DQDAGS (F1, A1, A2, ERRABS,ERRREL,ANS1,ERR1)
CALL DQDAGS (F2, A1, A2, ERRABS,ERRREL,ANS2,ERR2)
CALL DQDAGS (F3, A1, A2, ERRABS,ERRREL,ANS3,ERR3)
INTEGRAL1= ANS1
INTEGRAL2= ANS2
INTEGRAL3= ANS3
RETURN
END
C ****************************************************************
C ****************************************************************
REAL FUNCTION F1(R)
C ****************************************************************
C Routine name: F1
C Routine number: 6
C
C Function: integrand 1
C
C ****************************************************************
C *** Set number of packings ***
INTEGER N_PACK
PARAMETER (N_PACK = 8)
C *** Set number of experiments of each packing ***
INTEGER N_EXPR
PARAMETER (N_EXPR = 10)
C *** Set number of total experiments of all the packings ***
INTEGER N_TEXP
PARAMETER (N_TEXP = N_PACK * N_EXPR)
C *** Set number of packing zones in the rotor ***
INTEGER N_ZONE
PARAMETER (N_ZONE = 4)
COMMON /DAT/ II, NN
INTEGER I, N, II, NN
C INTEGER N_TEXP, N_ZONE
DOUBLE PRECISION R !integration variable
DOUBLE PRECISION SPAREA(N_ZONE, N_TEXP)!Specfic surface area ..,ap [1/m]
C DO 80 N = 1, N_TEXP
C DO 81 I = 1, N_ZONE
F1 = SPAREA(II, NN) * R
C F1 = R
C81 ENDDO
C80 ENDDO
RETURN
END FUNCTION
C ****************************************************************
C ****************************************************************
REAL FUNCTION F2(R)
C ****************************************************************
C Routine name: F2
C Routine number: 7
C
C Function: integrand 2
C
C ****************************************************************
C *** Set number of packings ***
INTEGER N_PACK
PARAMETER (N_PACK = 8)
C *** Set number of experiments of each packing ***
INTEGER N_EXPR
PARAMETER (N_EXPR = 10)
C *** Set number of total experiments of all the packings ***
INTEGER N_TEXP
PARAMETER (N_TEXP = N_PACK * N_EXPR)
C *** Set number of packing zones in the rotor ***
INTEGER N_ZONE
PARAMETER (N_ZONE = 4)
COMMON /DAT/ II, NN
INTEGER I, N, II, NN
C INTEGER N_TEXP, N_ZONE
DOUBLE PRECISION R !integration variable
DOUBLE PRECISION HEIGHT
DOUBLE PRECISION FLULIQ(N_TEXP) !Liquid flux, Lf [m3/(m2 s)]
DOUBLE PRECISION HOLLIQ(N_TEXP) !Liquid holdup [m3/m3]
DOUBLE PRECISION ACCELE(N_TEXP) !Centrifugal acceleration,ac [m/s2]
DOUBLE PRECISION VISLIQ(N_TEXP) !Kinematic viscosity of liquid,v [m2/s]
DOUBLE PRECISION TENLIQ(N_TEXP) !Kinematic viscosity of liquid,v [m2/s]
DOUBLE PRECISION RSPEED(N_TEXP)!Rotational speed, N [1/s]
DOUBLE PRECISION FLOLIQ(N_TEXP)
DOUBLE PRECISION THFILM(N_TEXP) !Thickness of liquid film [m]
DOUBLE PRECISION DIADRO(N_ZONE, N_TEXP)!Diameter of droplets,d [mm]
DOUBLE PRECISION DIAFIB(N_ZONE, N_TEXP) !Diameter of fiber,d [mm]
DOUBLE PRECISION DENLIQ(N_TEXP) !Density of liquid, [Kg/m3]
C ----------------------------------------------------------------
C 1.Subroutine ACCRPB
C Function: Calculates the centrifugal acceleration in a RPB
C ----------------------------------------------------------------
CALL ACCRPB(N_TEXP, ACCELE, RSPEED, R)
C ----------------------------------------------------------------
C 2.Subroutine HOLDUP
C Function: Calculates the liquid holdup
C ----------------------------------------------------------------
HEIGHT = 0.05D0
DO 11 N=1, N_TEXP
FLULIQ(N) = (FLOLIQ(N)*0.001D0/3600.D0)
* /(2.D0*3.1415926D0* R * HEIGHT)
11 ENDDO
CALL HOLDUP(N_TEXP, HOLLIQ, ACCELE, FLULIQ, VISLIQ)
C ----------------------------------------------------------------
C 3.Subroutine THICKN
C Function: Calculates the thickness of liquid films
C ----------------------------------------------------------------
CALL THICKN(N_TEXP, THFILM, VISLIQ, FLULIQ, ACCELE)
C ----------------------------------------------------------------
C 4.Subroutine DIAMET
C Function: Calculates the diameter of the liquid droplet
C ----------------------------------------------------------------
CALL DIAMET(N_TEXP, N_ZONE, DIADRO, TENLIQ, DENLIQ,
* ACCELE, FLOLIQ, DIAFIB)
C ----------------------------------------------------------------
C DO 90 N = 1, N_TEXP
C DO 100 I =1, N_ZONE
F2 = 6.D0 * (HOLLIQ(NN)- THFILM(NN)) * R / DIADRO(II, NN)
C100 ENDDO
C90 ENDDO
RETURN
END FUNCTION
C ****************************************************************
C ****************************************************************
REAL FUNCTION F3(R)
C ****************************************************************
C Routine name: F3
C Routine number: 8
C
C Function: integrand 3
C
C ****************************************************************
DOUBLE PRECISION R !integration variable
F3= R
RETURN
END FUNCTION
C ****************************************************************