c
C... File name ... GXIFRIC.HTM .... 261121 FUNCTION FRICCO(I) INCLUDE 'farray' INCLUDE 'grdloc' INCLUDE 'satgrd' INCLUDE 'satear' INCLUDE 'grdear' INCLUDE 'prpcmn' COMMON /CELPAR/IPHASE,IPROP,IGRND,IFILEP,KPROP C C.... Note that: c (1) The dimensions of FRICCO are force in cell exerted by one phase on c the other divided by their differnce of velocity c (2) Interphase friction coefficient (R! means the larger of R, RLOLIM) c IF(IGRND==-1) THEN ! PRPRTY is the value of CFIPS IF(.NOT.STORE(10)) THEN ! specified in the Q1 file, with dimensions FRICCO=PRPRTY*CELVOL(I)! force per unit volume / velocity difference ELSE ! If R2 is stored (the usual case) fricco = cfips*m1*r1*r2 ! if cfips > 0.0, else s12= -cfips*m2*r1*r2 FRICCO=ABS(PRPRTY)*CELMAS(I,IPHASE)*AMAX1(RLOLIM,F(L0R+I)) ENDIF ELSEIF(IGRND==1) THEN ! Fip= Const * Rho1 * R1 * R2! * Vol: FRICCO= CFIPC*CELMAS(i,1)*AMAX1(RLOLIM,F(L0R+I)) ELSEIF(IGRND==2) THEN ! Fip= Const * Rho1 * R1 * R2!* Vol * RelVel: VSLP = AMAX1(CFIPA, VSLPCL(I,XCYCZ,SLUNX1)) CALL STORVAL(LBVREL,L0VSLP,VSLP,I) FRICCO= CFIPC*CELMAS(I,1)*AMAX1(RLOLIM,F(L0R+I))*VSLP IF(L0LEN/=0) THEN ! divide by length scale if solved for FRICCO=FRICCO / F(L0LEN+I) ENDIF ELSEIF(IGRND==3) THEN ! Fip= Const * Rho1 * R1 * R2! * Vol * ! RelVel ** Pwr CALL STORVAL(LBVREL,L0VSLP,VSLP,I) FRICCO= CFIPC*CELMAS(I,1)*AMAX1(RLOLIM,F(L0R+I))* 1 VSLP**CFIPB ELSEIF(IGRND==4) THEN ! Fip= Const * Rho1 * R1 * R2! * Vol * ! RelVel ** Pwr1 * Len ** Pwr2 VSLP = AMAX1(CFIPA, VSLPCL(I,XCYCZ,SLUNX1)) CALL STORVAL(LBVREL,L0VSLP,VSLP,I) FRICCO= CFIPC*CELMAS(I,1)*AMAX1(RLOLIM,F(L0R+I))* 1 VSLP**CFIPB*F(L0LEN+I)**CFIPD ELSEIF(IGRND==5) THEN ! Fip= Const * Rho2 * R2 * R1! * Vol * ! RelVel**Pwr1*Len**Pwr2 CALL STORVAL(LBVREL,L0VSLP,VSLP,I) FRICCO= CFIPC*CELMAS(I,2)*AMAX1(RLOLIM,F(L0R+I))* 1 VSLP**CFIPB*F(L0LEN+I)**CFIPD ELSEIF(IGRND==6) THEN C.... Fip= Const*Volume: FRICCO= CFIPC*CELVOL(i) ELSEIF(IGRND==7 .OR. IGRND==8) THEN C.... Fip= 0.75*Rhc*Rc*Rd*Cd*ABS(RelVel)*Vol/Dp. CFIPS=GRND7 assumes C Phase 1 is the 'carrier', and Phase 2 is dispersed, GRND8 assumes C reverse. (NOTE, 1.5 is taken into account in APROJ): VSLP= AMAX1(CFIPA, VSLPCL(I,XCYCZ,SLUNX1)) CALL STORVAL(LBVREL,L0VSLP,VSLP,I) C.... Compute particle size Dp= Dp0*(R2/RS)**0.3333, where Dp0=CFIPB C is the initial particle diameter for the SHADOW method, and C particle Reynolds number ReD= Dp*RelVel/Enul: DIAM= ABS(CFIPB) IF(SOLVRS) 1 DIAM= DIAM*AMAX1(0., AMIN1(1.,F(L0RD+I)/F(L0RS+I)))**0.3333 REYD= DIAM*VSLP/(F(L0VISL+I)+TINY) + TINY IF(IDRAGCO==7) THEN ! Particle-Fluidization Drag Model RCON= F(L0R +I) RDIS= F(L0RD+I) REYD= RCON*REYD IF(RCON<0.8) THEN C.... Ergun correlation for dense fluidized region: CDP= 0.0 FRICCO= RDIS*(150.*F(L0VISL+I)*RDIS/(RCON*DIAM)+1.75*VSLP) ELSE C.... Subcritical correlation for dilute fluidized region (also suitable C for use in pneumatic-conveying applications): CDP= AMAX1(0.44, 24.*(1.+0.15*REYD**0.687)/REYD) FRICCO= 0.75*CDP*AMAX1(RLOLIM,RDIS)*VSLP/RCON**1.65 ENDIF FRICCO= FRICCO*F(L0DEN+I)*CELVOL(I)/DIAM C ELSEIF(IDRAGCO==8) THEN ! Particle-Cluster 4-Zone Fluidization Drag Model C Li et al, "Drag models for simulating gas-solid flow in turbulent C fluidisation of FCC particles", Particuology,7, 269-277, (2009) RCON= F(L0R +I) ; RDIS= F(L0RD+I) RDISL= AMAX1(RLOLIM,RDIS) REYD= RCON*REYD DIAMC= ABS(CFIPC) ! Cluster diameter REYCL= RCON*DIAMC*VSLP/(F(L0VISL+I)+TINY) + TINY R1LIM= 0.8 ; R2LIM= 0.933 ; R3LIM= 0.99 C Dense regime - Ergun correlation - RCON <= 0.8 CDP= 0.0 BETA1= RDIS*(150.*F(L0VISL+I)*RDIS/(RCON*DIAMC)+1.75*VSLP)* 1 F(L0DEN+I)/DIAMC C Sub-dense regime RCON > 0.8 & RCON <= 0.933) CDP= AMAX1(0.44, 24.*(1.+0.15*REYCL**0.687)/REYCL) BETA2= (5./72.)*CDP*RDISL*RCON*VSLP/(RDISL**0.293)* 1 F(L0DEN+I)/DIAMC C Sub-dilute regime Wen & Yu - RCON => 0.933 & RCON <= 0.99) CDP= AMAX1(0.44, 24.*(1.+0.15*REYD**0.687)/REYD) BETA3= 0.75*CDP*RDISL*VSLP/(RCON**1.65)* 1 F(L0DEN+I)/DIAM C Dilute regime Schiller & Neumann RCON > 0.99 CDP= AMAX1(0.44, 24.*(1.+0.15*REYD**0.687)/REYD) BETA4= 0.75*CDP*RDISL*RCON*VSLP*F(L0DEN+I)/DIAM C Stitching function for smooth transition between regimes PI = 3.141592654 PHI1=ATAN(150.*1.75*(RCON-R1LIM))/PI+0.5 PHI2=ATAN(150.*1.75*(RCON-R2LIM))/PI+0.5 PHI3=ATAN(150.*1.75*(RCON-R3LIM))/PI+0.5 BETA=(1-PHI1)*BETA1 + PHI1*((1-PHI2)*BETA2 1 + PHI2*((1-PHI3)*BETA3 + PHI3*BETA4)) FRICCO= BETA*CELVOL(I) CALL STORVAL(LBREYC,L0REYC,REYCL,I) ELSE C C.... Compute projected area Apr= 1.5*Vol*/Dp: APRJ= 1.5*CELVOL(I)*AMAX1(F(L0RD+I),RLOLIM)/DIAM C.... Compute drag coefficient: IF(IDRAGCO==0) THEN C.... Dispersed-Solid Drag Model/Standard drag curve ( see 'Bubbles, C Drops & Particles', R.Clift, J.R.Grace, M.E.Weber, pg111-112, C Table 5.1 eqn (10) & Table 5.2 eqns (H),(I) & (J), Academic Press, C (1978). IF(REYD<=3.38E5) THEN CDP= 24.*(1.+ 0.15*REYD**0.687)/REYD + 1 0.42/(1.+ 4.25E4/(REYD**1.16)) ELSEIF(REYD<=4.E5) THEN CDP= 29.78 - 5.3*ALOG10(REYD) ELSEIF(REYD<=1.E6) THEN CDP= 0.1*ALOG10(REYD) - 0.49 ELSE CDP= 0.19-8.0E4/REYD ENDIF ELSEIF(IDRAGCO==1) THEN ! Dispersed-Solid Drag Model/Stokes ! Regime: [Re<1] CDP= 24./(REYD+TINY) ELSEIF(IDRAGCO==2) THEN ! Dispersed-Solid Drag Model/Turbulent ! Regime: [1.E3 8.) THEN CDP= 2.666 ELSE WEBX= 2065.1/WEBER**2.6 IF(REYD>WEBX) CDP= 0.3333*WEBER ENDIF CALL STORVAL(LBWEB,L0WEB,WEBER,I) ENDIF ELSEIF(IDRAGCO==5) THEN C.... Spherical-Bubble "Dirty-water" Drag correlation C [ Re> 100] (see Kuo & Wallis [1988]) CDP= 6.3/REYD**0.385 ELSEIF(IDRAGCO==6) THEN ! Ellipsoidal-Bubble "Clean-water" ! Drag correlation ! [ 0.1 < Eo < 40 ] ! (see Clift et al [1988]) DELRHO= ABS(F(L0DEN+I) - F(L0DEND+I)) EOTVOS= 9.81/CFIPC*DELRHO*DIAM**2 ! Eotvos number: CDP = 0.622/(1./EOTVOS + 0.235*F(L0DEN+I)/DELRHO) CALL STORVAL(LBEOT,L0EOT,EOTVOS,I) ENDIF FRICCO= 0.5*CDP*APRJ*F(L0DEN+I)*VSLP C.... Multiply by volume fraction of continuous phase if CFIPB > 0. IF(MULBYR) FRICCO= FRICCO*AMAX1(RLOLIM, F(L0R+I)) ENDIF CALL STORVAL(LBSIZE,L0DIAM,DIAM,I) CALL STORVAL(LBREYD,L0REYD,REYD,I) CALL STORVAL(LBCD ,L0CD, CDP ,I) CALL STORVAL(LBAPRJ,L0APRJ,APRJ,I) ENDIF C.... Account for droplet-size variation. c call writ2l('sizvar ',sizvar,'prtsiz ',prtsiz) c call writ3i('igrnd ',igrnd,'l0r2 ',l0r2,'l0rs ',l0rs) IF(PRTSIZ) THEN IF(L0R2*L0RS/=0) FRICCO= FRICCO* 1 AMAX1(TINY, AMIN1(1.,F(L0R2+I)/F(L0RS+I)))**(-0.6667) ENDIF END c----------------------------------------------------------------------- SUBROUTINE STORVAL(LBVALUE,L0VAL,VALUE,I) c.... This subroutine places in 3D or slab-wise stores values of various c physical quantities which are needed by more than one of the c property or inter-phase-transport modules. c INCLUDE 'farray' IF(LBVALUE/=0) THEN ! quantity is stored 3D L0VALUE = L0F(LBVALUE) F(L0VALUE+I) = VALUE ELSE F(L0VAL+I) = VALUE ! quantity is stored slabwise ENDIF END c----------------------------------------------------------------------- SUBROUTINE SLBFRC(IPILOPT,dbgloc) INCLUDE 'farray' INCLUDE 'grdloc' INCLUDE 'satgrd' INCLUDE 'satear' INCLUDE 'grdear' INCLUDE 'prpcmn' COMMON/CELPAR/IPHASE,IPROP,IGRND,IFILEP,KPROP COMMON/GENI/IGF1(2),NXNYST,IGF2(52),IPRPS,IGF3(4) COMMON /F0/KFIL1(109),KZXCY,KFIL2(194) COMMON/VELCMN/L0UVW(6),L0UVW2(6) COMMON/NAMFN/NAMFUN,NAMSUB LOGICAL dbgloc,SLD,NEZ CHARACTER*6 NAMFUN,NAMSUB C NAMSUB= 'slbfrc' if(flag.or.dbgloc) then call banner(1,namsub,050918) call writ1i('igrnd ',igrnd) endif IGR= 10; ISC= 1 C.... Call GROUND for the user-set property: IF(IPILOPT==0) THEN IF(USEGRD) THEN if(dbgloc) then call writ40('GROUND is called to set a property... ') call writ2i('Group= ',igr,'Section=',isc) endif CALL GROUND ENDIF GO TO 800 ENDIF C.... For a constant property go to the slab loop IF(XCYCLE) XCYCZ=NEZ(F(KZXCY+IZ)) IF(SOLVE(3)) L0UVW(3)=L0F(3); IF(SOLVE(4)) L0UVW2(3)=L0F(4) IF(SOLVE(5)) L0UVW(1)=L0F(5); IF(SOLVE(6)) L0UVW2(1)=L0F(6) IF(SOLVE(7)) L0UVW(5)=L0F(7); IF(SOLVE(8)) L0UVW2(5)=L0F(8) IF(STORE(9)) L0R1=L0F(9); IF(SOLVE(10)) L0R2=L0F(10) C.... Set constants and other auxiliary variables: C----------------------------------------------------------------------- L0VOL= L0F(LVOL) IF(IPILOPT==-1) THEN IF(CFIPS>=0.0) THEN IPHASE=1; L0MAS= L0F(LM1); L0R = L0R2 ELSE IPHASE=2; L0MAS= L0F(LM2); L0R = L0R1 ENDIF c!!!! note that the go to 700, below, might as well be placed here ELSEIF(IPILOPT<5) THEN IPHASE=1; L0MAS= L0F(LM1); L0R = L0F(R2) ELSEIF(IPILOPT==5) THEN IPHASE=2; L0MAS= L0F(LM2); L0R = L0F(R1) ENDIF IF(IPILOPT==-1) GO TO 700 IF(IPILOPT/=1 .AND. IPILOPT/=6) THEN C.... Set addresses to calculate slip velocity (NOTE!, CONST(1)=CFIPA C stores minimum slip velocity; if 'VREL' is stored, it will be C filled with calculated slip velocities): IF(IPILOPT>=3 .AND. IPILOPT<=5) THEN L0LEN= L0F(LEN1) ELSEIF(IPILOPT==7 .OR. IPILOPT==8) THEN C.... Determine indices for continuous & dispersed phases. GRND7 assumes C Phase 1 is the 'carrier', and Phase 2 is dispersed; GRND8 assumes C the reverse. IF(IPILOPT==7) THEN L0DEN = L0F(DEN1); L0DEND= L0F(DEN2) L0R = L0R1; L0RD = L0R2 ELSEIF(IPILOPT==8) THEN L0DEN = L0F(DEN2); L0DEND= L0F(DEN1) L0R = L0R2; L0RD = L0R1 ENDIF IF(LBSIZE/=0) L0DIAM= L0F(LBSIZE) IF(LBREYD/=0) L0REYD= L0F(LBREYD) IF(LBCD/=0) L0CD = L0F(LBCD) IF(LBAPRJ/=0) L0APRJ= L0F(LBAPRJ) L0VISL= L0F(VISL); L0VOL = L0F(LVOL) c.... Const(2) may be set in a variety of ways, as indicated by the equivalence c in prpcmn. Which setting is relevant here is not clear cccc equivalence (const(2),rhobg,enulbg,prlhbg, cccc 1 phnhbg,tmpbg,elbg,cinhbg,cvmbg,dvobg,drhbg,cpbg) c.... PROPS(6) would be name than CONST(6). c.... Note that CONST(..) can be filled with values from the PROPS file c in gxprutil c MULBYR= CONST(2)>0.0 IF(SOLVRS) L0RS= L0F(RS) C.... Select drag coeff. model: IDRAGCO= NINT(CFIPD) IF(IDRAGCO==4) THEN IF(LBWEB/=0) L0WEB= L0F(LBWEB) ELSEIF(IDRAGCO==6) THEN IF(LBEOT/=0) L0EOT= L0F(LBEOT) ENDIF ENDIF ENDIF C!!!! The implementation of the correction due to droplet- C!!!! size variation needs clarification. It always assumes that R2 C!!!! is the dispersed phase IF(SIZVAR) L0RS= L0F(RS) 700 IGRND=IPILOPT C.... Loop over slab to set cell properties: IF(IPRPS==0) THEN ! One material only DO 60 I= 1,NXNYST 60 F(KPROP+I)= FRICCO(I) ELSE C.... exclude solids DO 70 I= 1,NXNYST IF(SLD(I)) THEN F(KPROP+I)= TINY ELSE F(KPROP+I)= FRICCO(I) ENDIF 70 CONTINUE ENDIF C---------------------------------------------------------------------- C.... Corrections, debug print-out, and other property adjustments: IF(IPILOPT==7 .OR. IPILOPT==8) THEN IF(IDRAGCO/=7) THEN IF(LBAPRJ/=0) THEN C.... Store projected area per unit volume for print-out etc DO 130 I= 1,NXNYST 130 IF(.NOT.SLD(I)) F(L0APRJ+I)= F(L0APRJ+I)/CELVOL(I) ENDIF ENDIF ENDIF C.... Call GREX to correct a property set above 800 IF(USEGRX) THEN CALL GREX3 ENDIF C.... Call ALTPRP for an alternative property setting IF(USEALT) THEN CALL ALTPRP ENDIF C.... Call GROUND for the user to correct a property set above IF(USEGRD) THEN IF(IPILOPT>0) THEN CALL GROUND ENDIF ENDIF NAMSUB= 'slbfrc' if(flag.or.dbgloc) call banner(2,namsub,0) END c---------------------------------------------------------------- SUBROUTINE INIFRC INCLUDE 'farray' INCLUDE 'satear' INCLUDE 'satgrd' INCLUDE 'prpcmn' LOGICAL GRNDNO,SOLVE,FLUID1,QEQ,EQZ,GRN c DIMENSION NAMPRP(30) c EQUIVALENCE (NAMPRP(1),DENST1) if(flag) call banner(1,'INIFRC',220104) C C.... Initialize FNVSLP: CALL FNVSLP(0,0,0.0) C.... Density is a linear function of two or three scalars IF((GRNDNO(1,RHO2).OR.GRNDNO(2,RHO2)).AND.IBUOYB/=0) THEN IF(IBUOYA/=0) THEN CALL WRIT40('3-scalar density formula is available not ') CALL WRIT40('when ONEPHS = F ! ') IBUOYA= 0 ENDIF ENDIF SOLVRS= SOLVE(11) SIZVAR= PRTSIZ .AND. SOLVRS .AND. SOLVE(10) IGRCFIP= 0 IF(GRN(CFIPS)) IGRCFIP= NINT(ABS(CFIPS-GRND))/10 IGRCINT=0 DO 30 MPH= 1,NPHI IF(SOLVE(MPH)) THEN IF(GRN(CINT(MPH))) IGRCINT= NINT(ABS(CINT(MPH)-GRND))/10 IF(IGRCINT==7 .OR. IGRCINT==8) GO TO 31 ENDIF 30 CONTINUE C.... Initialization of the slip velocity calculations: 31 CONTINUE C.... Initialization of CFIPS calculations: IF(IGRCFIP==2.OR.IGRCFIP==4) THEN IF(LBVREL==0) CALL GXMAKE(L0VSLP,NX*NY,'VSLP') ELSEIF(IGRCFIP>=3 .AND. IGRCFIP<=5) THEN IF(LEN1<=0 .AND..NOT.GRN(EL1)) THEN CALL WRIT40('CFIPS=GRND3-GRND5 needs storage of LEN1!') CALL SET_ERR(303, * 'Error. CFIPS=GRND3-GRND5 needs storage of LEN1.',1) C CALL EAROUT(1) ENDIF ELSEIF(IGRCFIP==7 .OR. IGRCFIP==8) THEN IF(SOLVE(11) .AND. IGRCFIP==8 .AND..NOT.FLUID1(11)) THEN CALL WRIT40('CFIPS=GRND8 requires TERMS(RS,P,P,P,P,Y,P)') CALL SET_ERR(304, * 'Error. CFIPS=GRND8 requires TERMS(RS,P,P,P,P,Y,P).',1) C CALL EAROUT(1) ENDIF IF(QEQ(CFIPB,0.0)) THEN CALL WRIT40('CFIPS=GRND7/GRND8 require CFIPB = diameter') CALL WRIT40('of particle set in Q1 file! ') CALL SET_ERR(305, 'Error. See result file.',1) C CALL EAROUT(1) ENDIF IF(LBREYD==0) LBREYD= LBNAME('REYN') IF(LBREYC==0) LBREYC= LBNAME('REYC') IF(LBVREL==0) CALL GXMAKE(L0VSLP,NX*NY,'VSLP') ! create slabwise IF(LBSIZE==0) CALL GXMAKE(L0DIAM,NX*NY,'DIAM') ! storage if 3D not IF(LBREYD==0) CALL GXMAKE(L0REYD,NX*NY,'REYD') ! provided IF(LBREYC==0.AND.CFIPD==8.) CALL GXMAKE(L0REYC,NX*NY,'REYC') IF(LBCD==0) CALL GXMAKE(L0CD,NX*NY,'CD ') IF(LBAPRJ==0) CALL GXMAKE(L0APRJ,NX*NY,'APRJ') IF(LBWEB==0) CALL GXMAKE(L0WEB,NX*NY,'WEBN') IF(LBEOT==0) CALL GXMAKE(L0EOT,NX*NY,'EOTN') ENDIF C.... Initialization of CIN calculations: IF(IGRCINT==7 .OR. IGRCINT==8) THEN IF(.NOT.(IGRCFIP==7.OR.IGRCFIP==8)) THEN ! create slabwise IF(LBSIZE==0) CALL GXMAKE(L0DIAM,NX*NY,'DIAM') ! storage if 3D not IF(LBREYD==0) CALL GXMAKE(L0REYD,NX*NY,'REYD') ! provided ENDIF ENDIF C.... Preliminaries for the bubble-induced ENUT contribution: IF(ENUT<0.0 .AND. NINT(ENUTB)==1) THEN IF(EQZ(ENUTC)) ENUTC= 0.6 IF(GRNDNO(3,ENUT)) KELIN= 3 ENDIF C.... Preliminaries for mass-transfer rate: IF(NINT(ABS(CMDOT-GRND))/10==3) THEN IF(LBMIXF==0) THEN CALL WRIT40('CMDOT=GRND3 requires storage of MIXF in Q1') CALL SET_ERR(306, * 'Error. CMDOT=GRND3 requires storage of MIXF in Q1.',1) C CALL EAROUT(1) ENDIF ENDIF if(flag) call banner(2,'INIFRC',0) END c