c
c cc************************************************************************ c A message to prospective users of the GENXIX program c c From: Brian Spalding (dbs@cham.co.uk) c Date: 28.07.99 c Text: This program is being made available for down-loading from the c CHAM web-site in response to requests from prospective users. c c If there is sufficient interest, I can make relevant parts of c the text of the original book available also. Please let me c know if you would like this. c c************************************************************************ c gnmx.for 06.10.97 c C This Fortran file was recreated during 1997 from printed records c of the 1977 coding. It appears to work correctly. c c How to use it is explained in the book entitled: c c 'GENMIX, a general computer program for two-dimensional c parabolic phenomena', by D. B. Spalding c c published by Pergamon Press, London, 1977 c c************************************************************************ c BLOCK DATA C/FEB.1977 ---------- G E N M I X ---------- COPYRIGHT, D.B.SPALDING --- C 'GENMIX, A GENERAL COMPUTER PROGRAM FOR TWO-DIMENSIONAL C PARABOLIC PHENOMENA', BY D. B. SPALDING C REPORT NO. HTS/77/9, FEBRUARY 1977, C IMPERIAL COLLEGE, MECHANICAL ENGINEERING DEPARTMENT, LONDON,SW72BX C C APPENDIX A (BASIC PROGRAM) - COMBUSTION OF METHANE AND AIR IN C A DIVERGENT DUCT EXHAUSTING INTO THE ATMOSPHERE. C----------------------------------------------------------------------- CHAPTER 1 1 1 1 1 1 1 1 PRELIMINARIES 1 1 1 1 1 1 1 1 COMMON/COMA/ 1 ADPEI(20),BIG,BOM(20),CSALFA,DIF(20),DIFU(20),DP,DX,DXLAST, 2 EMU(20),F(20,6),IBEX(3),IBIN(3),IDIMF,IFIN,ISTEP,ITEST,J, 3 JUSTEX,JUSTIN,KEX,KIN,KRAD,KSOURC,MOMSOU,N,NEWPR,NF,NM1,NM2, 4 NM3,NOVEL,OM(20),OMINT(20),PEI,PSIE,PSII,R(20),RECRU(20), 5 RECYDF(20),RHO(20),RJTOTE(3),RJTOTI(3),RME,RMI,SI(20),SIP(20), 6 TAUE,TAUI,TINY,U(20),XD,XU,Y(20),YE,YI COMMON/COMB/ 1 AK,AGRAV,AHEX,AHIN,ALMG,ALMGD(4),ARRCON,AUEX,BHEX,BHIN,BUEX, 2 CEBU,CFU,CHEX,CHIN,CMIX,COX,CPR,CUEX,DA1,DA2,DPDX,DXINC, 3 DXMAX,DXPSI,DXRAT,DXRE,DXY,ENTHA,ENTHB,ENTHC,ENTHD,EWALL, 4 FACE,FACEXP,FACI,FLOB,FLOC,FR,FRA,FUA,FUB,FUC,FUD,GAMMA, 5 GASCON,H,HDIV,HEX0,HFU,HIN0,ILPLOT,INERT,IRUN,ITPLOT,JF,JH, 6 JOX,JP,JPR,JTE,KASE,KIND,KUDIF,LASTEP,MODEL,NPLOT,NPROF, 7 NSTAT,OMPOW,OXA,OXB,OXC,OXD,PEILIM,PHIA,PHIB,PHIC,PHID, 8 PREEXP,PRESS,PRL(3),PRLAM,PRTURB,RATE,RATI,RECPRL(3), 9 RECPRT(3),REY,STOICH,TA,TB,TC,TD,TWALL,UA,UB,UBAR,UC,UD, 1 UDIF,UEX0,UFAC,UFLUX,ULIM,VISFU,VISMIX,VISOX,VISPR,WFU,WMIX, 2 WOX,WPR,XEND,XHEX0,XHIN0,XOUT,XUEX0,XULAST common/dbg/debug logical debug C C ------------------------------------------------------------------ save DATA KUDIF/-1/ DATA KASE,IRUN/0,0/ DATA ITEST/1/ DATA BIG,TINY/1.E20,1.E-10/ ccc data big,tiny/1.e5,1.e-5/ C C----------------------------------------------------------------------- CHAPTER 2 2 2 2 2 2 2 GRID AND GEOMETRY 2 2 2 2 2 2 2 2 C ------------------------------ GRID DATA N,OMPOW/20,1./ c ----- set idimf= dimension for i, ensure that idimf.ge.n DATA IDIMF/20/ c ----- set krad=1 for plane, 2 for axial, 3 for point symmetry DATA KRAD,CSALFA/2,1./ C ------------------------------ GEOMETRY DATA HEX0,XHEX0,AHEX,BHEX,CHEX/.05,0.,.01,0.,0./ DATA HIN0,XHIN0,AHIN,BHIN,CHIN/.02,0.,0.,0.,0./ DATA HDIV/.025/ DATA XU,XEND,XOUT/0.,.5,1./ DATA LASTEP,XULAST/100,2./ C ----- FOR KIND=3, XU, XHEX0 AND XHIN0=.25 (MAIN CH.2) C C----------------------------------------------------------------------- chapter 3 3 3 3 3 3 3 dependent variables 3 3 3 3 3 3 3 c ----- set nf= number of dependent variables, excluding velocity DATA NF/3/,JH,JP,JF,JOX,JTE,JPR/1,2,3,4,5,6/ c -----set novel=1 for no velocity, novel=2 otherwise DATA NOVEL/2/ C C----------------------------------------------------------------------- CHAPTER 4 4 4 4 4 4 4 4 PROPERTY DATA 4 4 4 4 4 4 4 4 C -------------------- S.I. UNITS DATA AGRAV,GASCON/9.81,8314./ c ----- set model=1 for laminar flow, c ----- set model=2 for 'mixing-length' model of turbulence DATA MODEL/2/ ccc data model/1/ DATA AK,FR,CEBU,EWALL/.435,.033,.4,9./ c ----- initial almg, and adjusted value for ch.7 DATA ALMG/.09/, ALMGD/.075,.1,.14,.075/ c --- set inert=1 for inert fluid, inert=2 for chemically reactive DATA INERT/2/ c ------------------------------ materials c ---------- thermodynamics DATA CFU,COX,CPR,CMIX/4*1100./ ccc data cfu,cox,cpr,cmix/4*1./ DATA WFU,WOX,WPR,WMIX/16.,32.,28.,29./ DATA HFU/4.E7/ ccc data hfu/0.0/ C ---------- CHEMICAL DATA STOICH,ARRCON,PREEXP/4.,18.E3,1./ C ---------- TRANSPORT DATA VISFU,VISOX,VISPR,VISMIX/4*1.E-6/ DATA PRLAM,PRTURB/.7,.86/ DATA H,UFAC/.9,.01/ C C----------------------------------------------------------------------- CHAPTER 5 5 5 5 5 5 5 STARTING VALUES 5 5 5 5 5 5 5 5 DATA PRESS/1.E5/ C ----- STREAM B IS PURE FUEL DATA UB,TB,FUB,OXB/100.,1000.,1.,0./ ccc data ub,tb,fub,oxb/100.,100.,1.,0./ C ----- STREAM C IS AIR DATA UC,TC,FUC,OXC/50.,1000.,0.,.232/ ccc data uc,tc,fuc,oxc/100.,100.,0.,.232/ c ----- set kex and kin for initial boundary type, c ----- 1 for wall, 2 for free boundary, 3 for symmetry axis DATA KEX,KIN/1,1/ C C----------------------------------------------------------------------- CHAPTER 6 6 6 6 6 6 6 6 STEP CONTROL 6 6 6 6 6 6 6 6 6 DATA FRA,DXMAX,DXRAT/1.,1.,5./DXPSI,DXRE,DXY/3*0.0/ C -----ENTRAINMENT CONTROL DATA ULIM,PEILIM,FACEXP/.02,.05,.5/ C -----STARTING VALUES DATA FACE,FACI,RATE,RATI/4*1./ C C----------------------------------------------------------------------- CHAPTER 7 7 7 7 7 7 7 7 BOUNDARY CONDITIONS 7 7 7 7 7 7 C ---------- STREAM A, THROUGH CENTRAL PIPE DATA UA,TA,FUA,OXA/100.,2000.,0.,0./ ccc data ua,ta,fua,oxa/100.,100.,0.,0./ C ---------- STREAM D, SURROUNDING ATMOSPHERE DATA TD,FUD,OXD/300.,0.,.232/ ccc data td,fud,oxd/100.,0.,.232/ C ----- UD IS SUPPLIED BY WAY OF THE UEX FUNCTION C ---------- VELOCITY ALONG OUTER BOUNDARY DATA UEX0,XUEX0,AUEX,BUEX,CUEX/5*0./ C ---------- WALL TEMPERATURE OF OUTER TUBE DATA TWALL/299./ ccc data twall/100./ C C----------------------------------------------------------------------- CHAPTER 11 11 11 11 11 11 11 11 11 11 PRINT 11 11 11 11 11 11 c --- set ilplot=2 for down-stream plot, =1 for no plot c --- set itplot=2 for cross-stream plot, =1 for no plot DATA ILPLOT,ITPLOT/2,2/ c --- set nstat, nprof, nplot to number of steps between output of c --- station values, profiles and cross-stream plots respectively DATA NSTAT,NPROF,NPLOT/12,12,10000/ ccc data nstat,nprof,nplot/1,1,10000/ c ----- after xu=xout, nstat and nprof are set =24 at main, ch.11 C END c----------------------------------------------------------------------- PROGRAM MAIN common/dbg/debug logical debug C/FEB.1977 ---------- G E N M I X ---------- COPYRIGHT, D.B.SPALDING --- C----------------------------------------------------------------------- CHAPTER 1 1 1 1 1 1 1 1 PRELIMINARIES 1 1 1 1 1 1 1 1 C----------------------------------------------------------------------- COMMON/COMA/ 1 ADPEI(20),BIG,BOM(20),CSALFA,DIF(20),DIFU(20),DP,DX,DXLAST, 2 EMU(20),F(20,6),IBEX(3),IBIN(3),IDIMF,IFIN,ISTEP,ITEST,J, 3 JUSTEX,JUSTIN,KEX,KIN,KRAD,KSOURC,MOMSOU,N,NEWPR,NF,NM1,NM2, 4 NM3,NOVEL,OM(20),OMINT(20),PEI,PSIE,PSII,R(20),RECRU(20), 5 RECYDF(20),RHO(20),RJTOTE(3),RJTOTI(3),RME,RMI,SI(20),SIP(20), 6 TAUE,TAUI,TINY,U(20),XD,XU,Y(20),YE,YI COMMON/COMB/ 1 AK,AGRAV,AHEX,AHIN,ALMG,ALMGD(4),ARRCON,AUEX,BHEX,BHIN,BUEX, 2 CEBU,CFU,CHEX,CHIN,CMIX,COX,CPR,CUEX,DA1,DA2,DPDX,DXINC, 3 DXMAX,DXPSI,DXRAT,DXRE,DXY,ENTHA,ENTHB,ENTHC,ENTHD,EWALL, 4 FACE,FACEXP,FACI,FLOB,FLOC,FR,FRA,FUA,FUB,FUC,FUD,GAMMA, 5 GASCON,H,HDIV,HEX0,HFU,HIN0,ILPLOT,INERT,IRUN,ITPLOT,JF,JH, 6 JOX,JP,JPR,JTE,KASE,KIND,KUDIF,LASTEP,MODEL,NPLOT,NPROF, 7 NSTAT,OMPOW,OXA,OXB,OXC,OXD,PEILIM,PHIA,PHIB,PHIC,PHID, 8 PREEXP,PRESS,PRL(3),PRLAM,PRTURB,RATE,RATI,RECPRL(3), 9 RECPRT(3),REY,STOICH,TA,TB,TC,TD,TWALL,UA,UB,UBAR,UC,UD, 1 UDIF,UEX0,UFAC,UFLUX,ULIM,VISFU,VISMIX,VISOX,VISPR,WFU,WMIX, 2 WOX,WPR,XEND,XHEX0,XHIN0,XOUT,XUEX0,XULAST save C C ------------------------------------------------------------------ C ----- FUNCTIONS FOR BOUNDARY CONDITIONS HEX(X)=HEX0+X*(AHEX+X*(BHEX+X*CHEX)) HIN(X)=HIN0+X*(AHIN+X*(BHIN+X*CHIN)) UEX(X)=UEX0+X*(AUEX+X*(BUEX+X*CUEX)) debug=.false. C C----------------------------------------------------------------------- CHAPTER 2 2 2 2 2 2 2 GRID AND GEOMETRY 2 2 2 2 2 2 2 2 C SEE DATA c ----- kind is an index which denotes a particular geometry type if(debug) write(6,*)'>>> main' KIND=4 IF(KRAD.EQ.1) KIND=2 IF(KRAD.EQ.2 .AND. nint(CSALFA).EQ.1) KIND=1 IF(KRAD.EQ.2 .AND. nint(CSALFA).EQ.0) KIND=3 C ----- MODIFICATIONS TO DATA IF(KIND.NE.3) GO TO 21 XU=.25 XHEX0=.25 XHIN0=.25 21 CONTINUE C SNALFA=SQRT(1.-CSALFA**2) C ----- STARTING VALUES c!!!! change needed to avoid values too large for conversion cccc IEND=IFIX(XEND*1.E6) cccc IOUT=IFIX(XOUT*1.E6) IEND=IFIX(XEND*1.E4) IOUT=IFIX(XOUT*1.E4) C -------------------- SUBROUTINE COMP UTE, ENTRY INIT CALL INIT C ------------------------------ GRID DO 20 I=1,N 20 OM(I)=(FLOAT(I-1)/FLOAT(NM1))**OMPOW C C -------------------- SUBROUTINE COMP UTE, ENTRY GRID CALL GRID C C----------------------------------------------------------------------- CHAPTER 3 3 3 3 3 3 3 DEPENDENT VARIABLES 3 3 3 3 3 3 3 C SEE DATA C U(I)= VELOCITY C F(I,JH)= STAGNATION ENTHALPY C F(I,JP)= PHI= OXIDANT CONCENTRATION - F(I,JF)*STOICH C F(I,JF)= FUEL CONCENTRATION C F(I,JOX)= OXIDANT CONCENTRATION C F(I,JTE)= TEMPERATURE C F(I,JPR)= PRODUCT CONCENTRATION C C----------------------------------------------------------------------- CHAPTER 4 4 4 4 4 4 4 4 PROPERTY DATA 4 4 4 4 4 4 4 4 C SEE DATA RECWFU=1./WFU RECWOX=1./WOX RECWPR=1./WPR RECWMX=1./WMIX GAMMA=CMIX/(CMIX-GASCON*RECWMX) gamma=1.4 DO 40 J=1,NF PRL(J)=PRLAM RECPRL(J)=1./PRLAM 40 RECPRT(J)=1./PRTURB C C----------------------------------------------------------------------- CHAPTER 5 5 5 5 5 5 5 STARTING VALUES 5 5 5 5 5 5 5 5 C SEE DATA WB=1./(FUB*RECWFU+OXB*RECWOX+(1.-FUB-OXB)*RECWPR) RHOB=PRESS*WB/(TB*GASCON) WC=1./(FUC*RECWFU+OXC*RECWOX+(1.-FUC-OXC)*RECWPR) RHOC=PRESS*WC/(TC*GASCON) FLOB=RHOB*UB*(HDIV-HIN0) FLOC=RHOC*UC*(HEX0-HDIV) IF(KRAD.EQ.1) GO TO 55 XSIN=XU*SNALFA HCOS=.5*CSALFA FLOB=FLOB*(XSIN+HCOS*(HDIV+HIN0)) FLOC=FLOC*(XSIN+HCOS*(HEX0+HDIV)) 55 CONTINUE OMDIV=FLOB/(FLOB+FLOC+TINY) TMIN=.5*AMIN1(TA,TB,TC,TD,TWALL) tmin=90. C -------------------- SEQUENCE TO PUT CELL BOUNDARY AT OMDIV. IF(OMDIV.LE.1.E-10.OR.OMDIV.GE.(1.-1.E-10)) GO TO 53 DO 52 I=3,NM1 IF(OMINT(I)-OMDIV) 52,53,57 57 IDIV=I+1 GO TO 58 52 CONTINUE 58 FAC=OMDIV/OMINT(IDIV-1) DO 59 I=2,IDIV 59 OM(I)=OM(I)*FAC C -------------------- SURBROUTINE COMP UTE, ENTRY GRID CALL GRID 53 CONTINUE C ---------- INSERTION INTO ARRAYS ENTHB=TB*(CFU*FUB+COX*OXB+CPR*(1.-FUB-OXB))+.5*UB**2+HFU*FUB ENTHC=TC*(CFU*FUC+COX*OXC+CPR*(1.-FUC-OXC))+.5*UC**2+HFU*FUC enthb=tb*(cfu*fub+cox*oxb+cpr*(1.-fub-oxb))+hfu*fub enthc=tc*(cfu*fuc+cox*oxc+cpr*(1.-fuc-oxc))+hfu*fuc PHIB=OXB-FUB*STOICH PHIC=OXC-FUC*STOICH DO 501 I=1,N IF(OM(I).GT.OMDIV) GO TO 503 U(I)=UB F(I,JH)=ENTHB F(I,JP)=PHIB F(I,JF)=FUB GO TO 501 503 U(I)=UC F(I,JH)=ENTHC F(I,JP)=PHIC F(I,JF)=FUC 501 CONTINUE C c --------------------------------- enter main loop at chapter 7 GO TO 700 C C----------------------------------------------------------------------- CHAPTER 6 6 6 6 6 6 6 6 STEP CONTROL 6 6 6 6 6 6 6 6 C SEE DATA 600 DXY=FRA*Y(NM2) DXRE=DXY*PEI/(.5*(R(1)+R(N))*EMU(1)+TINY) DXINC=DXLAST*DXRAT C C -------------------- DETERMINATION OF BOUNDARY TYPE C -------------------- I BOUNDARY IF(ISTEP.GE.IEND) GO TO 610 KIN=1 GO TO 611 610 IF(PSII.LE.TINY) GO TO 612 KIN=2 GO TO 611 612 KIN=3 C -------------------- E BOUNDARY 611 IF(ISTEP.GE.IOUT) GO TO 613 KEX=1 GO TO 614 613 KEX=2 614 CONTINUE C C -------------------- ENTRAINMENT RATES IF(KIN.NE.2.AND.KEX.NE.2) GO TO 602 KUDIF=ISTEP UMAX=U(1) UMIN=U(1) DO 615 I=2,N UMAX=AMAX1(UMAX,U(I)) 615 UMIN=AMIN1(UMIN,U(I)) UDIF=UMAX-UMIN C --------------------------- I BOUNDARY IF(KIN.NE.2) GO TO 601 RATI=ABS((U(2)-U(1))/(UDIF*ULIM+TINY)) RMI=(R(2)+R(3))*(EMU(2)+EMU(3))*RECYDF(2)*RATI/(1.+RATI) FACI=FACI*RATI**FACEXP FACI=AMAX1(0.1,AMIN1(FACI,10.)) RMI=RMI*FACI IF(MODEL.EQ.2) RMI=AMAX1(RMI,0.4*UDIF*RHO(1)*R(1)) C --------------------------- E BOUNDARY 601 IF(KEX.NE.2) GO TO 602 RATE=ABS((U(NM1)-U(N))/(UDIF*ULIM+TINY)) RME=-(R(NM2)+R(NM1))*(EMU(NM2)+EMU(NM1))*RECYDF(NM2)*RATE/ 1 (1.+RATE) FACE=FACE*RATE**FACEXP FACE=AMAX1(.01,AMIN1(FACE,10.)) RME=RME*FACE IF(MODEL.EQ.2) RME=AMAX1(RME,-0.4*UDIF*RHO(N)*R(N)) C 602 DXPSI=PEI*PEILIM/(RMI-RME+TINY) C C --------------- SET VALUE OF DX DX=AMIN1(DXY,DXRE,DXINC,DXPSI,DXMAX) C IF(ISTEP.GE.IEND) GO TO 605 IF(DX.LT.(XEND-XU)) GO TO 605 c ----- reset dx so that xu will exactly equal xend at next step DX=XEND-XU IEND=ISTEP+1 JUSTIN=ISTEP+1 C 605 IF(ISTEP.GE.IOUT) GO TO 606 IF(DX.LT.(XOUT-XU)) GO TO 606 c ----- reset dx so that xu will exactly equal xout at next step DX=XOUT-XU IOUT=ISTEP+1 JUSTEX=ISTEP+1 C 606 IF(PSII.GT.RMI*DX) GO TO 607 IF(PSII.LE.TINY) GO TO 607 c ----- reset dx so that axis is reached at next step DX=PSII/RMI JUSTIN=ISTEP+1 C C ----- RESET DX SO THAT XU WILL NOT EXCEED XULAST 607 DX=AMIN1(DX,XULAST-XU) C C ---------- TRAP ZERO OR NEGATIVE DX IF(DX.GT.0.) GO TO 608 IFIN=2 GO TO 1100 C C -----DETERMINE XD 608 XD=XU+DX DXLAST=DX C C ----- IF CSALFA VARIES C RECALCULATE IT, AND SNALFA AND HCOS, HERE, FOR X=XD GO TO 70 C C----------------------------------------------------------------------- CHAPTER 7 7 7 7 7 7 7 7 BOUNDARY CONDITIONS 7 7 7 7 7 7 700 ASSIGN 751 TO ISTART C ---------- GENERAL BOUNDARY CONDITION INFORMATION C ---------- STREAM A,THROUGH CENTRAL PIPE C SEE DATA ENTHA=TA*(CFU*FUA+COX*OXA+CPR*(1.-FUA-OXA))+.5*UA**2+HFU*FUA PHIA=OXA-FUA*STOICH RHOA=PRESS*WPR/(TA*GASCON+TINY) FLOA=RHOA*UA*HIN(XEND) IF(KRAD.EQ.2) FLOA=FLOA*(XEND*SNALFA+HCOS*HIN(XEND)) PSII=FLOA PEI=FLOB+FLOC PSIE=PSII+PEI C ---------- STREAM D, SURROUNDING ATMOSPHERE C SEE DATA XUEX0=XOUT UD=UEX0 XD=XU ENTHD=TD*(CFU*FUD+COX*OXD+CPR*(1.-FUD-OXD))+.5*UD**2+HFU*FUD PHID=OXD-FUD*STOICH C ---------- OTHER RELATED INFORMATION HDUCID=HIN0 ADUCTD=HEX0-HDUCID IF(KRAD.EQ.2) ADUCTD=ADUCTD*(XSIN+HCOS*(HEX0+HDUCID)) AFLOWD=ADUCTD 70 CONTINUE C --------------- BOUNDARY CONDITION FOR FORWARD STEP C ------------------------------------------- I BOUNDARY IF(KIN-2) 731,732,733 C ------------------------------ WALL 731 IF(ISTEP.GT.JUSTIN) GO TO 734 U(1)=0. TAUI=0. RMI=0. DO 735 J=1,NF IBIN(J)=2 735 RJTOTI(J)=0. C -------------------- ADJUST INNER HEIGHT 734 HIND=HIN(XD-XHIN0) GO TO 740 C ------------------------------ FREE BOUNDARY 732 IF(ISTEP.GT.JUSTIN) GO TO 736 TAUI=0. U(1)=UA RHO(1)=RHOA RECRU(1)=1./(RHO(1)*U(1)+TINY) F(1,JH)=ENTHA F(1,JP)=PHIA F(1,JF)=FUA AREA=HDUCID IF(KRAD.EQ.2) AREA=AREA*(XU*SNALFA+HCOS*HDUCID) AFLOWD=AFLOWD+AREA c!!!! mistyping cccc IF(ISTEP.GT.0) GO TO 740 IF(ISTEP.eq.0) GO TO 740 736 U(1)=U(1)+DX*AGRAV*(RHO(N)-RHO(1))*RECRU(1) GO TO 740 C ------------------------------ SYMMETRY AXIS 733 IF(ISTEP.GT.JUSTIN) GO TO 740 TAUI=0. RMI=0. PSII=0. HIND=0. U(1)=U(2) DO 737 J=1,NF 737 F(1,J)=F(2,J) C ---------- NO SUBSEQUENT CHANGE NEEDED 740 CONTINUE C C ------------------------------------------- E BOUNDARY IF(KEX-2) 741,742,743 C ------------------------------ WALL 741 IF(ISTEP.GT.JUSTEX) GO TO 744 C ---------- FIRST STEP ONLY U(N)=0. RME=0. TAUE=0. IBEX(JH)=1 F(N,JOX)=OXC F(N,JPR)=1.-OXC-FUC DO 745 J=2,NF IBEX(J)=2 745 RJTOTE(J)=0. C ----- ADJUST ENTHANPY FIT COMPOSITION 744 CMIX=CFU*F(N,JF)+COX*F(N,JOX)+CPR*F(N,JPR) F(N,JTE)=TWALL F(N,JH)=CMIX*F(N,JTE)+F(N,JF)*HFU C -------------------- ADJUST EXTERNAL HEIGHT HEXD=HEX(XD-XHEX0) GO TO 750 C -------------------------------------------- FREE BOUNDARY 742 IF(ISTEP.GT.JUSTEX) GO TO 746 F(N,JH)=ENTHD F(N,JP)=PHID F(N,JF)=FUD F(N,JOX)=OXD F(N,JPR)=1.-F(N,JF)-F(N,JOX) VMIX=F(N,JF)*RECWFU+F(N,JOX)*RECWOX+F(N,JPR)*RECWPR F(N,JTE)=TD RHO(N)=PRESS/(VMIX*F(N,JTE)*GASCON) U(N)=UD RECRU(N)=1./(RHO(N)*U(N)+TINY) C ---------- ADJUSTMENT OF MIXING LENGTH CONSTANT ALMG=ALMGD(KIND) C ---------- ADJUSTMENT OF DOWNSTREAM VELOCITY 746 UD=UEX(XD-XUEX0) GO TO 750 C ---------- NO SYMMETRY AXIS 743 CONTINUE 750 GO TO ISTART, (751,800) 751 ASSIGN 800 TO ISTART GO TO 900 C C----------------------------------------------------------------------- CHAPTER 8 8 8 8 8 8 8 8 ADVANCE 8 8 8 8 8 8 8 8 8 8 C ------------------------ MOMENTUM SOURCES C -------------------------------------- PRESSURE GRADIENT 800 continue IF(KEX.NE.2) GO TO 821 DP=(U(N)-UD)/RECRU(N) GO TO 823 821 AFLOWU=AFLOWD HDUCID=0. IF(KIN.EQ.1) HDUCID=HIND ADUCTD=HEXD-HDUCID IF(KRAD.EQ.2) ADUCTD=ADUCTD*(XD*SNALFA+HCOS*(HEXD+HDUCID)) DA=ADUCTD-AFLOWU DP=DA/DADP C -------------------- WALL SHEAR AND MASS ADDITION UBAR=0. DO 824 I=2,NM1 824 UBAR=UBAR+(BOM(I)*U(I)) IF(KIN.EQ.2) UBAR=(UBAR-U(1))*PEI/PSIE+U(1) UBAR=(UBAR-U(1))*PEI/PSIE+U(1) DP=DP+DX*(-TAUI*R(1)-TAUE*R(N)+2.*RME*UBAR)/ADUCTD DP=AMIN1(DP,.5*DPMAX) C C ------------------------------ COMP 823 CALL SOLVE C C----------------------------------------------------------------------- CHAPTER 9 9 9 9 9 9 9 9 COMPLETE 9 9 9 9 9 9 9 9 9 9 900 CONTINUE C ---------------------- IGNITION SEQUENCE IF(ISTEP.GT.5) GO TO 931 IF(INERT.EQ.1) GO TO 931 T2=.5/STOICH DO 932 I=2,NM1 F(I,JF)=T2*(ABS(F(I,JP))-F(I,JP)) 932 F(I,JOX)=F(I,JP)+STOICH*F(I,JF) 931 CONTINUE C C ------------------------------ THERMODYNAMIC PROPERTIES PRESS=PRESS+DP PDGSCN=PRESS/GASCON DO 907 I=1,N F(I,JOX)=AMAX1(0.,F(I,JP)+STOICH*F(I,JF)) F(I,JPR)=1.-F(I,JF)-F(I,JOX) ENTH=F(I,JH)-.5*U(I)**2-HFU*F(I,JF) ENTH=F(I,JH)-HFU*F(I,JF) F(I,JTE)=ENTH/(CFU*F(I,JF)+COX*F(I,JOX)+CPR*F(I,JPR)) IF(F(I,JTE).GT.TMIN) GO TO 941 IF(I.EQ.1.OR.I.EQ.N) GO TO 941 WRITE(6,942) F(I,JTE),I,ISTEP,TMIN 942 FORMAT(27H *** TEMPERATURE, F(I,JTE)=,1PE10.3,6H AT I=,I4,7H ISTEP 1=,I5/17H *** RESET =TMIN=,E10.3,23H *** MAIN CH.9 COMPLETE) F(I,JTE)=TMIN c write(6,*)'CFU,F(I,JF)', c 1 CFU,F(I,JF) c write(6,*)'COX,F(I,JOX)', c 1 COX,F(I,JOX) c write(6,*)'CPR,F(I,JPR)', c 1 CPR,F(I,JPR) c write(6,*)'hfu,enth', c 1 hfu,enth c write(6,*)'F(I,JH),U(I)',F(I,JH),U(I) stop 941 VMIX=F(I,JF)*RECWFU+F(I,JOX)*RECWOX+F(I,JPR)*RECWPR 907 RHO(I)=PDGSCN/(F(I,JTE)*VMIX) IF(KEX.EQ.1) F(N,JTE)=TWALL DPDX=DP/DX C C ---------------------------- RADII AND Y@S IF(KRAD-2) 901,902,903 C ----- KRAD=1, PLANE 901 IF(KIN.EQ.2) HIND=ABS(PSII*RECRU(1)) GO TO 909 C ----- KRAD=2, AXIAL 902 IF(KIN.NE.2) GO TO 908 HIND=ABS(PSII*RECRU(1)) HIND=2.*HIND/ 1 (XD*SNALFA+SQRT((XD*SNALFA)**2+2.*HIND*CSALFA)+TINY) GO TO 908 C ----- KRAD=3, POINT SYMMETRY 903 R(I)=0. C ----- CHANGE ABOVE STATEMENT IF NECESSARY FOR KRAD=3 GO TO 909 908 R(1)=XU*SNALFA+HIND*CSALFA C ------------------------------- COMP 909 CALL DISTAN C C----------------------------------------------------------------------- CHAPTER 10 10 10 10 10 10 10 ADJUST 10 10 10 10 10 10 10 C IF(KEX.EQ.2) GO TO 1022 AFLOWD=Y(N)+HIND-HDUCID IF(KRAD.EQ.2) AFLOWD=AFLOWD*(XU*SNALFA+HCOS*(Y(N)+HIND+HDUCID)) DA1=ADUCTD/AFLOWD-1. C -------------------- DEPENDENCE OF AREA ON PRESSURE RECGMP=1./(GAMMA*PRESS) DADP=0. IF(KIN.EQ.2) DADP=PSII*RECRU(1)*(RECRU(1)*RECRU(1)*RHO(1)-RECGMP) SUM=0. DPMAX=BIG DO 1025 I=2,NM1 DPMAX=AMIN1(DPMAX,RHO(I)*U(I)**2) 1025 SUM=SUM+BOM(I)*RECRU(I)*(RECRU(I)*RECRU(I)*RHO(I)-RECGMP) DADP=DADP+PEI*SUM c -------------------- adjustment of ps,us, etc. IF(ABS(DA1).LT.1.E-3) GO TO 1022 DP=DA1*AFLOWD/DADP DP=AMIN1(DP,.0*DPMAX) PRESS=PRESS+DP DPDX=DPDX+DP/DX RHOFAC=1.+DP*RECGMP DO 1027 I=2,NM1 U(I)=U(I)-DP*RECRU(I) 1027 RHO(I)=RHO(I)*RHOFAC IF(KIN.NE.2) GO TO 1029 U(1)=U(1)-DP*RECRU(1) 1029 RHO(1)=RHO(1)*RHOFAC RHO(N)=RHO(N)*RHOFAC RECRU(1)=1./(RHO(1)*U(1)+TINY) IF(KIN.NE.2) GO TO 1026 HIND=ABS(PSII*RECRU(1)) IF(KRAD.EQ.1) GO TO 1026 HIND=2.*HIND/ 1 (XD*SNALFA+SQRT((XD*CSALFA)**2+2.*HIND*CSALFA)+TINY) R(I)=XU*SNALFA+HIND*CSALFA 1026 CALL DISTAN AFLOWD=Y(N)+HIND-HDUCID IF(KRAD.EQ.2) AFLOWD=AFLOWD*(XU*SNALFA+HCOS*(Y(N)+HIND+HDUCID)) DA2=ADUCTD/AFLOWD-1. 1022 CONTINUE C----------------------------------------------------------------------- CHAPTER 11 11 11 11 11 11 11 11 11 11 PRINT 11 11 11 11 11 11 C SEE DATA 1100 CONTINUE IF(XU.LE.XOUT) GO TO 1101 NSTAT=24 NPROF=24 1101 CONTINUE CALL OUTPUT C C----------------------------------------------------------------------- CHAPTER 12 12 12 12 12 12 12 DECIDE 12 12 12 12 12 12 12 IF(ISTEP.EQ.LASTEP) GO TO 1203 IF(XU.LT.XULAST) GO TO 1202 1203 IFIN=2 CALL OUTPUT 1202 IF(IFIN.EQ.1) GO TO 600 STOP END SUBROUTINE WALL(I1,OUT1,OUT2) C/FEB. 1977 --------- G E N M I X ---------- COPYRIGHT, D.B.SPALDING --- common/dbg/debug logical debug DIMENSION S1(2),S2(2),S3(2),S4(2),S5(2),S6(2) COMMON/COMA/ 1 ADPEI(20),BIG,BOM(20),CSALFA,DIF(20),DIFU(20),DP,DX,DXLAST, 2 EMU(20),F(20,6),IBEX(3),IBIN(3),IDIMF,IFIN,ISTEP,ITEST,J, 3 JUSTEX,JUSTIN,KEX,KIN,KRAD,KSOURC,MOMSOU,N,NEWPR,NF,NM1,NM2, 4 NM3,NOVEL,OM(20),OMINT(20),PEI,PSIE,PSII,R(20),RECRU(20), 5 RECYDF(20),RHO(20),RJTOTE(3),RJTOTI(3),RME,RMI,SI(20),SIP(20), 6 TAUE,TAUI,TINY,U(20),XD,XU,Y(20),YE,YI COMMON/COMB/ 1 AK,AGRAV,AHEX,AHIN,ALMG,ALMGD(4),ARRCON,AUEX,BHEX,BHIN,BUEX, 2 CEBU,CFU,CHEX,CHIN,CMIX,COX,CPR,CUEX,DA1,DA2,DPDX,DXINC, 3 DXMAX,DXPSI,DXRAT,DXRE,DXY,ENTHA,ENTHB,ENTHC,ENTHD,EWALL, 4 FACE,FACEXP,FACI,FLOB,FLOC,FR,FRA,FUA,FUB,FUC,FUD,GAMMA, 5 GASCON,H,HDIV,HEX0,HFU,HIN0,ILPLOT,INERT,IRUN,ITPLOT,JF,JH, 6 JOX,JP,JPR,JTE,KASE,KIND,KUDIF,LASTEP,MODEL,NPLOT,NPROF, 7 NSTAT,OMPOW,OXA,OXB,OXC,OXD,PEILIM,PHIA,PHIB,PHIC,PHID, 8 PREEXP,PRESS,PRL(3),PRLAM,PRTURB,RATE,RATI,RECPRL(3), 9 RECPRT(3),REY,STOICH,TA,TB,TC,TD,TWALL,UA,UB,UBAR,UC,UD, 1 UDIF,UEX0,UFAC,UFLUX,ULIM,VISFU,VISMIX,VISOX,VISPR,WFU,WMIX, 2 WOX,WPR,XEND,XHEX0,XHIN0,XOUT,XUEX0,XULAST C C EFFECTS OF PRESSURE GRADIENT AND MASS TRANSFER ARE INCLUDED C EFFECTS OF RADIUS VARIATION ARE NEGLECTED C FOR VELOCITY, OUT1=BP, OUT2=T C FOR F 'S, OUT1=FIDIF, OUT2=T C CHAPTER A ------------------------------- PRELIMINARIES ---------------- save DATA SHALF/.04/, BPLAST/1./ if(debug) write(6,*)'>>> wall' KWALL=2-1/I1 I2=I1+3-2*KWALL I3=I1+6-4*KWALL IF(J.GT.0) GO TO 200 CHAPTER B ------------------------------- VELOCITY --------------------- UREF=U(I2) RHOREF=RHO(I2) RUREF=RHOREF*UREF RREF=R(I2) VREF=EMU(I1) YREF=YI+(YE-YI)*OM(I1) RE=RUREF*YREF/VREF RRUREF=RREF*RUREF AM=(RMI-(RME+RMI)*OM(I1))/RRUREF EF=YREF*DP/(DX*RUREF*UREF) IF(MODEL.EQ.1) GO TO 110 IF(RE.LT.132.25) GO TO 110 C ------------------------------ TURBULENT FLOW C ---------- EXTENDED LOG LAW ER=RE*EWALL ARGMIN=11.5*EWALL NIT=0 101 SHALF1=SHALF S=SHALF**2 SLOC=S+AM+EF IF(SLOC.GT.0.) GO TO 104 SLOC=TINY SHALF=SQRT(ABS(AM+EF)) 104 BEE=SQRT(SLOC)/AK ARG=ER*(SHALF+(AM/(1.+BEE)+.5*EF)/SHALF) IF(ARG.LT.ARGMIN) GO TO 110 SHALF=AK/ALOG(ARG) IF(ABS(SHALF-SHALF1).LT..0001) GO TO 102 NIT=NIT+1 IF(NIT.LT.11) GO TO 101 102 S=SHALF**2 SAV=.5*(S+SLOC) BP=1./(1.+BEE) GO TO 103 C ------------------------------ LAMINAR FLOW 110 AMRE=AM*RE FRE=EF*RE IF(ABS(AMRE).LT..01) GO TO 111 AMRE=AMAX1(-60.,AMIN1(60.,AMRE)) EXPMRE=EXP(AMRE) STORE=EXPMRE-1.-AMRE AMRESQ=AMRE*AMRE SRE=AMRE*(1.-STORE*FRE/AMRESQ)/(EXPMRE-1.) BP=SRE*STORE/AMRESQ+FRE*(STORE-.5*AMRESQ)/(AMRESQ*AMRE) GO TO 112 111 SRE=(2.-FRE*(1.+AMRE*.33333))/(2.+AMRE) BP=SRE*(.5+AMRE*.16667)+FRE*(.16667+AMRE*.041667) 112 IF(SRE.GT.TINY) GO TO 113 SRE=TINY BP=.33333 113 S=SRE/RE SAV=S 103 T=S*RRUREF C -------------------- UNDER-RELAX BP BP=BPLAST+.5*(BP-BPLAST) BPLAST=BP OUT1=BP OUT2=T S1(KWALL)=SAV S2(KWALL)=RRUREF S3(KWALL)=UREF S4(KWALL)=AM S5(KWALL)=AMRE S6(KWALL)=RE GO TO 900 C----------------------------------------------------------------------- CHAPTER C ------------------------ OTHER DEPENDENT VARIABLES 200 SAV=S1(KWALL) RRUREF=S2(KWALL) UREF=S3(KWALL) AM=S4(KWALL) AMRE=S5(KWALL) RE=S6(KWALL) IF(MODEL.EQ.1) GO TO 210 C -------------------------------- TURBULENT FLOW PRRAT=PRL(J)*RECPRT(J) C ----- THE FOLLOWING P-FUNCTION IS NOT TO BE USED FOR PRRAT.LT.0.5 PJAY=9.*(PRRAT-1.)/PRRAT**.25 S=SAV*RECPRT(J)/(1.+AMAX1(-.99999,PJAY*SQRT(ABS(SAV)))) OUT2=S*RRUREF IF(J.NE.JH) GO TO 221 OUT1=(H-1.)*.5*UREF**2 GO TO 900 221 OUT1=0. GO TO 900 C ------------------------------ LAMINAR FLOW 210 IF(ABS(AMRE).LT..01) GO TO 211 S=AM/(EXP(PRL(J)*AMRE)-1.) GO TO 212 211 S=RECPRL(J)/(RE+.5*RE*PRL(J)*AMRE) 212 OUT2=S*RRUREF IF(J.NE.JH) GO TO 214 OUT1=(PRL(JH)-1.)*.5*UREF**2 GO TO 900 214 OUT1=0. C ------------------------------------------------------------------ 900 IF(ITEST.EQ.1) GO TO 901 WRITE(6,9000) J,I1,OUT1,OUT2 9000 FORMAT(12H WALL TESTS,,3H J=,I3,4H I1=,I3,6H OUT1=,1PE10.3, 1 6H OUT2=,E10.3) 901 RETURN END SUBROUTINE PLOTS(X,IDIME,IMAX,XAXIS,Y,JDIME,JMAX,YAXIS) common/dbg/debug logical debug C/FEB.1977 ---------- G E N M I X ---------- COPYRIGHT, D.B.SPALDING --- C * c subroutine for plotting j curves of y(i,j) against x(i). * c * c x and y are scaled to the range 0. to 1., for plotting as * c (y-ymin)/(ymax-ymin), the maximun and minimum values are printed * c n.b. the x and y arrays must be redefined before each call plots. * c idime is the variable dimension for x. * c imax is the number of x values. * c xaxis stores the name of the x-axis. * c jdime is the variable dimension for y. * c jmax is the number of curves to be plotted, (up to 30). * c the array yaxis(j) stores the names of the curves, * c the fist character of each curve-name is used for plotting. * c xsize alters the x-plot size by a factor of .2 to 1., in steps of .1* c ysize is the y-plot size factor fo .2 upwards in steps of .2 * c xsize=1., ysize=1. gives normal size plot. * c * c*********************************************************************** DIMENSION X(IDIME),Y(IDIME,JDIME),YAXIS(JDIME), 1 A(101),YMAX(30),YMIN(30),DIGIT(11) c!!!! equivalence deactivated. It causes YMIN to be over-written cc EQUIVALENCE (YMAX(1),A(1)),(YMIN(1),A(31)) CHARACTER*1 DOT,CROSS,BLANK,DIGIT,A character*8 YAXIS save DATA DOT,CROSS,BLANK/1H.,1H+,1H / 1,DIGIT/1h ,1H1,1H2,1H3,1H4,1H5,1H6,1H7,1H8,1H9,1H1/ if(debug) write(6,*)'>>> plots' C***** SET PLOT SIZE FACTOR XSIZE=0.6 YSIZE=1.4 ysize=0.2 C***** SCALING X-ARRAY TO RANGE 0 TO 100*XSIZE XR=100.*XSIZE XMAX=-1.E30 XMIN=+1.E30 IM=IMAX DO 1 I=1,IM XMAX=AMAX1(XMAX,X(I)) 1 XMIN=AMIN1(XMIN,X(I)) S=XR/(XMAX-XMIN+1.E-30) DO 2 I=1,IM 2 X(I)=(X(I)-XMIN)*S c***** scaling y-array to range 0 to 50*ysize YR=50.*YSIZE JM=JMAX DO 4 J=1,JM YMAX(J)=-1.E30 YMIN(J)=+1.E30 DO 4 I=1,IM cccc write(6,*)'i,j,ymax(j),ymin(j)',i,j,ymax(j),ymin(j) YMIN(J)=AMIN1(YMIN(J),Y(I,J)) 4 YMAX(J)=AMAX1(YMAX(J),Y(I,J)) DO 3 J=1,JM cccc write(6,*)'j,ymin(j)',j,ymin(j) S=YR/(YMAX(J)-YMIN(J)+1.E-30) DO 3 I=1,IM 3 Y(I,J)=(Y(I,J)-YMIN(J))*S c***** write curve names, with actual min and max values J=1 L=IFIX(XR/10.) K=L GO TO 6 5 J=J+L K=K+L 6 K=MIN0(JM,K) WRITE(6,101) (YAXIS(I),I=J,K) WRITE(6,103) (YMIN(I),I=J,K) WRITE(6,104) (YMAX(I),I=J,K) IF(K-JM) 5,7,7 7 WRITE(6,106) c***** main loop - each pass produces a y-constant line IX=IFIX(XSIZE*10.) KX=IFIX(XR)+1 IY=IFIX(YR*.1) KY=IFIX(YR)+1 N=KY+1 DO 40 M=1,KY L=N-M IF(L.EQ.1.OR.L.EQ.KY) GO TO 32 GO TO 33 c***** put. or + along the x-axis 32 DO 30 K=1,KX 30 A(K)=DOT DO 31 K=1,KX,IX 31 A(K)=CROSS GO TO 45 C***** PUT. OR + AND Y-VALUES ALONG Y-AXIS 33 A(1)=DOT A(KX)=DOT K=L-1 46 K=K-IY IF(K) 48,47,46 47 A(1)=CROSS A(KX)=CROSS 45 YL=FLOAT(L-1)/YR GO TO 35 48 YL=-1. C***** SEARCH FOR POINTS ALONG Y-CONSTANT LINE 35 DO 42 J=1,JM DO 42 I=1,IM IF(IFIX(Y(I,J)+1.5).NE.L) GO TO 42 C***** POINT FOUND- ASSIGN SYMBOL- SEARCH FOR MORE NX=X(I)+1.5 A(NX)=YAXIS(J) 42 CONTINUE C***** POINT Y-CONSTANT LINE IF(nint(yl).NE.-1) GO TO 37 WRITE(6,106) (A(K),K=1,KX) GO TO 38 37 WRITE(6,107) YL,(A(K),K=1,KX) C***** FILL ARRAY A WITH BLANKS 38 DO 49 K=1,KX 49 A(K)=BLANK 40 CONTINUE C***** PRINT BLANK OR X-VALUE FOR X-AIXS L=1 K=KX-1 A(1)=DIGIT(1) DO 51 I=IX,K,IX L=L+1 A(I)=DOT 51 A(I+1)=DIGIT(L) A(K)=BLANK WRITE(6,106) (A(K),K=I,KX) WRITE(6,100) XAXIS,XMIN,XMAX RETURN 100 FORMAT(1h ,12HABSCISSA IS ,A8,5H MIN=,1PE9.2,5H MAX=,E9.3) 101 FORMAT(1h ,9HORDINATE ,12(A8,2X)) 103 FORMAT(1H ,7H MIN ,1P11E10.2) 104 FORMAT(1H ,7H MAX ,1P11E10.2) 106 FORMAT(6X,101A1) 107 FORMAT(2H ,F3.1,1X,101A1) END SUBROUTINE COMP common/dbg/debug logical debug C/FEB.1977 ---------- G E N M I X ---------- COPYRIGHT, D.B.SPALDING --- DIMENSION A(20),B(20),C(20),CON(20),D(20),HCON(20),OMDIF(20) COMMON/COMA/ 1 ADPEI(20),BIG,BOM(20),CSALFA,DIF(20),DIFU(20),DP,DX,DXLAST, 2 EMU(20),F( 120),IBEX(3),IBIN(3),IDIMF,IFIN,ISTEP,ITEST,J, 3 JUSTEX,JUSTIN,KEX,KIN,KRAD,KSOURC,MOMSOU,N,NEWPR,NF,NM1,NM2, 4 NM3,NOVEL,OM(20),OMINT(20),PEI,PSIE,PSII,R(20),RECRU(20), 5 RECYDF(20),RHO(20),RJTOTE(3),RJTOTI(3),RME,RMI,SI(20),SIP(20), 6 TAUE,TAUI,TINY,U(20),XD,XU,Y(20),YE,YI C EQUIVALENCE (A(1),DIF(1)),(C(1),SI(1)),(D(1),SIP(1)) save C CHAPTER A -------------------------------------------------------------- C INIT ------------- INIT ------------- INIT ------------- INIT if(debug) write(6,*)'>>> main' ENTRY INIT if(debug) write(6,*)'>>> init' C ------------------------- INITIAL VALUES AND DEFAULT VALUES NM1=N-1 NM2=N-2 NM3=N-3 ISTEP=0 IF(KRAD.EQ.3) NOVEL=1 JUSTIN=ISTEP JUSTEX=ISTEP IFIN=1 DXLAST=BIG DX=BIG PSII=0. BPE=1. BPI=1. Y(1)=0. DP=0. DO 13 I=1,N EMU(I)=0. CON(I)=0. 13 R(I)=1. IF(NOVEL.NE.1) RETURN DO 16 I=1,N 16 U(I)=1. RETURN CCHPTER B -------------------------------------------------------------- C GRID ------------- GRID ------------- GRID ------------- GRID ENTRY GRID if(debug) write(6,*)'>>> grid' OMI=OM(2) OME=1.-OM(NM1) BOM(2)=.5*(OM(2)+OM(3)) OMINT(1)=0. OMINT(2)=BOM(2) DO 202 I=3,NM2 OMINT(I)=.5*(OM(I)+OM(I+1)) BOM(I)=OMINT(I)-OMINT(I-1) OMDIF(I)=OM(I)-OM(I-1) 202 HOMDFI=.5*OMDIF(3) BOM(NM1)=1.-OMINT(NM2) OMINT(NM1)=1. OMDIF(NM1)=OM(NM1)-OM(NM2) HOMDFE=.5*OMDIF(NM1) RETURN CHAPTER C -------------------------------------------------------------- C DISTAN ---------- DISTAN ---------- DISTAN ---------- DISTAN ENTRY DISTAN if(debug) write(6,*)'>>> distan' IF(NOVEL.NE.1) GO TO 220 DO 224 I=1,N 224 RECRU(I)=1./(RHO(I)+TINY) GO TO 222 220 DO 221 I=1,N RECRU(I)=1./(RHO(I)*U(I)+TINY) IF(RECRU(I).GT.0.) GO TO 221 IFIN=2 WRITE(6,223) RECRU(I),I,ISTEP 223 FORMAT(14H *** RECRU(I)=,1PE10.3,6H AT I=,I4,11H AND ISTEP=,I5, 1 16H *** COMP DISTAN) stop 221 CONTINUE c -------------------- calculation of y's and r's 222 IF(KIN.EQ.1) GO TO 308 RAT=RECRU(2)*RHO(1)*U(1) IF(KRAD.EQ.2) GO TO 307 BPI=.33333+.66667*RAT GO TO 308 307 BPI=(R(1)*(.83333*RAT+.16667)+.5*R(2)*(RAT+1.))/(R(1)+R(2)) 308 IF(KEX.EQ.1) GO TO 230 RAT=RECRU(NM1)*RHO(N)*U(N) IF(KRAD.EQ.2) GO TO 327 BPE=.33333+.66667*RAT GO TO 230 327 BPE=(R(N)*(.83333*RAT+.16667)+.5*R(NM1)*(RAT+1.))/(R(N)+R(NM1)) c ------------------- y's for plane flow 230 STORE=OM(2)/BPI ADPEI(2)=(HOMDFI+STORE)*RECRU(2) Y(2)=PEI*RECRU(2)*STORE HPEI=.5*PEI DO 231 I=3,NM1 ADPEI(I)=BOM(I)*RECRU(I) 231 Y(I)=Y(I-1)+HPEI*OMDIF(I)*(RECRU(I)+RECRU(I-1)) STORE=OME/BPE ADPEI(NM1)=(HOMDFE+STORE)*RECRU(NM1) Y(N)=Y(NM1)+PEI*RECRU(NM1)*STORE C ------------------------------------------------ IF(KRAD-2) 270,240,280 C ---------------- Y'S AND R'S FOR AXIAL SYMMETRY 240 IF(CSALFA.LT.TINY) GO TO 260 C ------------------------------ CSALFA NE 0. COSD2=.5*CSALFA TWDCOS=2./CSALFA IF(R(1).GT.TINY) GO TO 250 C ------------------------------ R(1)=0. DO 242 I=2,N Y(I)=SQRT(ABS(Y(I)*TWDCOS)) 242 R(I)=Y(I)*CSALFA GO TO 270 C ------------------------------ R(1) NE 0. 250 R1D2=.5*R(1) R1D2SQ=R1D2*R1D2 DO 251 I=2,N Y(I)=Y(I)/(R1D2+SQRT(ABS(R1D2SQ+COSD2*Y(I)))) 251 R(I)=R(1)+Y(I)*CSALFA GO TO 270 C ------------------------------ CSALFA=0. 260 RECR1=1./R(1) DO 261 I=2,N R(I)=R(1) 261 Y(I)=Y(I)*RECR1 GO TO 270 C -------------------------------- POINT SYMMETRY, KRAD=3 280 R1CUB=R(1)**3 DO 281 I=2,N R(I)=(R1CUB+Y(I))**.3333333 281 Y(I)=R(I)-R(1) C ------------------------------ GENERAL 270 YI=Y(2) YE=Y(N)-Y(NM1) DO 273 I=1,NM1 273 RECYDF(I)=1./(Y(I+1)-Y(I)) IF(ITEST.EQ.1) RETURN WRITE(6,274) (RHO(I),I=1,N) WRITE(6,275) (RECRU(I),I=1,N) WRITE(6,276) (ADPEI(I),I=1,N) WRITE(6,277) (Y(I),I=1,N) WRITE(6,278) (R(I),I=1,N) WRITE(6,279) (RECYDF(I),I=1,N) RETURN 274 FORMAT(18H0COMP DISTAN TESTS/8H RHO(I)=/(3X,1P6E11.3)) 275 FORMAT(10H RECRU(I)=/(3X,1P6E11.3)) 276 FORMAT(10H ADPEI(I)=/(3X,1P6E11.3)) 277 FORMAT(6H Y(I)=/(3X,1P6E11.3)) 278 FORMAT(6H R(I)=/(3X,1P6E11.3)) 279 FORMAT(11H RECYDF(I)=/(3X,1P6E11.3)) CHAPTER D -------------------------------------------------------------- C SOLVE ---------- SOLVE ----------- SOLVE ---------- SOLVE ENTRY SOLVE if(debug) write(6,*)'>>> solve' C ---------------------------------------- PRELIMINARIES DXDPEI=DX/PEI CONST1=.5*DXDPEI ENT=ABS(RMI)+ABS(RME) IF(ENT.LE.TINY) GO TO 310 HCONI=RMI*CONST1 HCONDF=(RME-RMI)*CONST1 DO 412 I=2,NM1 HCON(I)=HCONI+HCONDF*OMINT(I) 412 CON(I)=HCON(I)+HCON(I) C ---------------------------------------- COEFFICIENTS FOR U 310 IF(NOVEL.EQ.1) GO TO 442 J=0 C ----- CALL SUBROUTINE PHYS AT ENTRY PHYSU CALL PHYSU IF(KRAD-2) 410,415,411 410 DO 413 I=2,NM2 413 DIFU(I)=CONST1*(EMU(I)+EMU(I+1))*RECYDF(I) GO TO 414 415 CONST2=.5*CONST1 DO 416 I=2,NM2 416 DIFU(I)=CONST2*(R(I+1)+R(I))*(EMU(I)+EMU(I+1))*RECYDF(I) GO TO 414 411 CONST3=.25*CONST1 DO 419 I=2,NM2 419 DIFU(I)=CONST3*(R(I+1)+R(I))**2*(EMU(I)+EMU(I+1))*RECYDF(I) C ----------------------------------------- A'S AND B'S 414 IF(ENT.LE.TINY) GO TO 312 DO 417 I=2,NM2 A(I)=AMAX1(0.,DIFU(I)-HCON(I),-CON(I)) 417 B(I+1)=A(I)+CON(I) GO TO 314 312 DO 315 I=2,NM2 A(I)=DIFU(I) 315 B(I+1)=A(I) 314 TI=0. TE=0. IF(KIN.EQ.1) CALL WALL(1,BPI,TI) IF(KEX.EQ.1) CALL WALL(N,BPE,TE) B(2)=AMAX1((TI+RMI)*DXDPEI,0.) A(NM1)=AMAX1((TE-RME)*DXDPEI,0.) cc write(6,*)'TE,RME,DXDPEI',TE,RME,DXDPEI C ------------------------------------------ C'S AND D'S IF(MOMSOU.EQ.0) GO TO 431 DO 418 I=2,NM1 C(I)=U(I)*BOM(I)+SI(I) 418 D(I)=A(I)+B(I)+BOM(I) GO TO 432 431 DO 433 I=2,NM1 C(I)=U(I)*BOM(I) 433 D(I)=A(I)+B(I)+BOM(I) 432 CONTINUE IF(ITEST.EQ.1) GO TO 404 WRITE(6,341) (DIFU(I),I=2,NM1) WRITE(6,342) (CON(I),I=2,NM1) WRITE(6,405) (A(I),I=2,NM1) WRITE(6,406) (B(I),I=2,NM1) WRITE(6,407) (C(I),I=2,NM1) WRITE(6,408) (D(I),I=2,NM1) 341 FORMAT(23HOCOMP SOLVE TESTS FOR U/9H DIFU(I)=/(3X,1P6E11.3)) 342 FORMAT(8H CON(I)=/(3X,1P6E11.3)) 405 FORMAT(6H A(I)=/(3X,1P6E11.3)) 406 FORMAT(6H B(I)=/(3X,1P6E11.3)) 407 FORMAT(6H C(I)=/(3X,1P6E11.3)) 408 FORMAT(6H D(I)=/(3X,1P6E11.3)) 404 CONTINUE C ------------------------------- ADJUST FREE-BOUNDARY VALUES IF(KIN.EQ.2) U(1)=U(1)-DP*RECRU(1) IF(KEX.EQ.2) U(N)=U(N)-DP*RECRU(N) C---------------------------- SOLVE FOR DOWNSREAM U'S C(2)=(B(2)*U(1)+C(2))/D(2) D(2)=A(2)/D(2) DO 421 I=3,NM1 T=1./(D(I)-B(I)*D(I-1)) D(I)=A(I)*T 421 C(I)=(B(I)*C(I-1)+C(I))*T DO 422 IDASH=1,NM2 I=N-IDASH 422 U(I)=D(I)*U(I+1)+C(I) IF(KIN-2) 444,445,446 444 TAUI=TI*U(2)/R(1) GO TO 445 446 U(1)=U(2) 445 IF(KEX-2) 447,440,448 447 TAUE=TE*U(NM1)/R(N) GO TO 440 448 U(N)=U(NM1) 440 IF(ITEST.NE.1) WRITE(6,443) (U(I),I=1,N) 443 FORMAT(6H U(I)=/(3X,1P6E11.3)) C ------------------------------------------- C ---------------------------------------------- F-SECTION 442 IF(NF.LT.1) GO TO 481 DO 480 J=1,NF IDJ=IDIMF*(J-1) I1J=1+IDJ I2J=2+IDJ INM1J=NM1+IDJ INJ=N+IDJ C ----- CALL SUBROUTINE PHYS AT ENTRY PHYSF CALL PHYSF TIF=0. FDIFI=0. TEF=0. FDIFE=0. IF(KIN.EQ.1) CALL WALL(1,FDIFI,TIF) IF(KEX.EQ.1) CALL WALL(N,FDIFE,TEF) IF(ITEST.EQ.1) GO TO 450 WRITE(6,451) J,(DIF(I),I=2,NM1) 451 FORMAT(24H COMP SOLVE TESTS FOR J=,I3/8H DIF(I)=/(3X,1P6E11.3)) C ---------------------------------- COEFFICIENTS FOR F S C -------------------------------------------- A'S AND B'S 450 IF(NEWPR.EQ.1) GO TO 337 IF(ENT.LE.TINY) GO TO 335 DO 484 I=2,NM2 A(I)=AMAX1(0.,DIF(I)-HCON(I),-CON(I)) 484 B(I+1)=A(I)+CON(I) GO TO 337 335 DO 338 I=2,NM2 A(I)=DIF(I) 338 B(I+1)=A(I) 337 CONTINUE B(2)=AMAX1((TIF+RMI)*DXDPEI,0.) A(NM1)=AMAX1((TEF-RME)*DXDPEI,0.) C -------------------------------------------- C'S AND D'S GO TO (501,502,503), KSOURC C ------------------------------ KSOURC=1, GENERAL 501 SI2=SI(2) SINM1=SI(NM1) DO 485 I=2,NM1 IJ=I+IDJ D(I)=A(I)+B(I)+BOM(I)-SIP(I) cc write(6,*)'i,ij,f(ij)',i,ij,f(ij) 485 C(I)=F(IJ)*BOM(I)+SI(I) GO TO 504 C ------------------------------ KSOURC=2, NO SIP 502 SI2=SI(2) SINM1=SI(NM1) DO 505 I=2,NM1 IJ=I+IDJ D(I)=A(I)+B(I)+BOM(I) cc write(6,*)'i,ij,f(ij)',i,ij,f(ij) 505 C(I)=F(IJ)*BOM(I)+SI(I) GO TO 504 C ------------------------------ KSOURC=3, NO SIP OR SI 503 SI2=0. SINM1=0. DO 506 I=2,NM1 IJ=I+IDJ D(I)=A(I)+B(I)+BOM(I) cc write(6,*)'i,ij,f(ij)',i,ij,f(ij) 506 C(I)=F(IJ)*BOM(I) C ------------------------------ 504 C(2)=C(2)-TIF*FDIFI*DXDPEI C(NM1)=C(NM1)-TEF*FDIFE*DXDPEI IF(KIN.GT.1) GO TO 486 IF(IBIN(J).EQ.1) GO TO 486 B(2)=0. ccc C(2)=F(120)*BOM(2)+SI2+RJTOTI(J)*DXDPEI C(2)=F(I2J)*BOM(2)+SI2+RJTOTI(J)*DXDPEI D(2)=D(2)-TIF*DXDPEI 486 IF(KEX.GT.1) GO TO 491 IF(IBEX(J).EQ.1) GO TO 491 A(NM1)=0. C(NM1)=F(INM1J)*BOM(NM1)+SINM1-RJTOTE(J)*DXDPEI D(NM1)=D(NM1)-TEF*DXDPEI 491 CONTINUE IF(ITEST.EQ.1) GO TO 464 WRITE(6,405) (A(I),I=2,NM1) WRITE(6,406) (B(I),I=2,NM1) WRITE(6,407) (C(I),I=2,NM1) WRITE(6,408) (C(I),I=2,NM1) C ------------------------------ SOLVE FOR DOWNSTREAM F'S 464 C(2)=(B(2)*F(I1J)+C(2))/D(2) D(2)=A(2)/D(2) DO 465 I=3,NM1 T=1./(D(I)-B(I)*D(I-1)) D(I)=A(I)*T 465 C(I)=(B(I)*C(I-1)+C(I))*T DO 466 IDASH=1,NM2 I=N-IDASH IJ=I+IDJ 466 F(IJ)=D(I)*F(IJ+1)+C(I) C --------------------------- ADJUST F(1,J) AND F(N,J) IF(KIN-2) 467,460,469 467 IF(IBIN(J).EQ.1) GO TO 468 F(I1J)=FDIFI+F(I2J)+(RJTOTI(J)-F(I1J)*RMI)/TIF GO TO 460 469 F(I1J)=F(I2J) GO TO 460 468 RJTOTI(J)=TIF*(F(I1J)-F(I2J)-FDIFI)+RMI*F(I1J) 460 IF(KEX-2) 471,470,473 471 IF(IBEX(J).EQ.1) GO TO 472 F(INJ)=FDIFE+F(INM1J)-(RJTOTE(J)-F(INJ)*RME)/TEF GO TO 470 473 F(INJ)=F(INM1J) GO TO 470 472 RJTOTE(J)=TEF*(F(INM1J)+FDIFE-F(INJ))+RME*F(INJ) 470 IF(ITEST.EQ.1) GO TO 480 WRITE(6,476) J,(F(I+IDJ),I=1,N) 476 FORMAT(6H F(I,,I2,1H)/(3X,1P6E11.3)) 480 CONTINUE C ------------------------------------------ 481 XU=XD PSII=PSII-RMI*DX PSIE=PSIE-RME*DX PEI=PSIE-PSII ISTEP=ISTEP+1 END SUBROUTINE PHYS common/dbg/debug logical debug C/FEB.1977 ---------- G E N M I X ---------- COPYRIGHT, D.B.SPALDING --- COMMON/COMA/ 1 ADPEI(20),BIG,BOM(20),CSALFA,DIF(20),DIFU(20),DP,DX,DXLAST, 2 EMU(20),F(20,6),IBEX(3),IBIN(3),IDIMF,IFIN,ISTEP,ITEST,J, 3 JUSTEX,JUSTIN,KEX,KIN,KRAD,KSOURC,MOMSOU,N,NEWPR,NF,NM1,NM2, 4 NM3,NOVEL,OM(20),OMINT(20),PEI,PSIE,PSII,R(20),RECRU(20), 5 RECYDF(20),RHO(20),RJTOTE(3),RJTOTI(3),RME,RMI,SI(20),SIP(20), 6 TAUE,TAUI,TINY,U(20),XD,XU,Y(20),YE,YI COMMON/COMB/ 1 AK,AGRAV,AHEX,AHIN,ALMG,ALMGD(4),ARRCON,AUEX,BHEX,BHIN,BUEX, 2 CEBU,CFU,CHEX,CHIN,CMIX,COX,CPR,CUEX,DA1,DA2,DPDX,DXINC, 3 DXMAX,DXPSI,DXRAT,DXRE,DXY,ENTHA,ENTHB,ENTHC,ENTHD,EWALL, 4 FACE,FACEXP,FACI,FLOB,FLOC,FR,FRA,FUA,FUB,FUC,FUD,GAMMA, 5 GASCON,H,HDIV,HEX0,HFU,HIN0,ILPLOT,INERT,IRUN,ITPLOT,JF,JH, 6 JOX,JP,JPR,JTE,KASE,KIND,KUDIF,LASTEP,MODEL,NPLOT,NPROF, 7 NSTAT,OMPOW,OXA,OXB,OXC,OXD,PEILIM,PHIA,PHIB,PHIC,PHID, 8 PREEXP,PRESS,PRL(3),PRLAM,PRTURB,RATE,RATI,RECPRL(3), 9 RECPRT(3),REY,STOICH,TA,TB,TC,TD,TWALL,UA,UB,UBAR,UC,UD, 1 UDIF,UEX0,UFAC,UFLUX,ULIM,VISFU,VISMIX,VISOX,VISPR,WFU,WMIX, 2 WOX,WPR,XEND,XHEX0,XHIN0,XOUT,XUEX0,XULAST C DIMENSION DUDY(20),EL(20),YEDGE(6) save C c#### should be in blockdata ccccc DATA KUDIF/-1/ C ------------------------------------------------------------------ CHAPTER A ---------- PHYSU ---------- PHYSU ---------- PHYSU ----------- if(debug) write(6,*)'>>> phys' ENTRY PHYSU if(debug) write(6,*)'>>> physu' C ---------------------------------------- LAMINAR VISCOSITY C SQUARE-ROOT FORMULA, WITH WEIGHTING ACCORDING TO MASS FRACTION DO 110 I=1,N 110 EMU(I)=(VISFU*F(I,JF)+VISOX*F(I,JOX)+VISPR*F(I,JPR))* 1 SQRT(F(I,JTE)) IF(MODEL.EQ.1) GO TO 209 C ------------------------------------------------------------------ C ----------------------------- MIXING LENGTH MODEL OF TURBULENCE IF(KUDIF.EQ.ISTEP) GO TO 102 UMAX=U(1) UMIN=U(1) DO 101 I=2,N UMAX=AMAX1(UMAX,U(I)) 101 UMIN=AMIN1(UMIN,U(I)) UDIF=UMAX-UMIN 102 HUDIF=.5*UDIF DUDYMN=FR*UDIF/Y(N) C DO 105 I=2,NM1 105 DUDY(I)=ABS(U(I+1)-U(I-1))/(Y(I+1)-Y(I-1)) K=1 EX=DUDY(2)-DUDYMN IF(EX.LT.0.) GO TO 103 YEDGE(K)=0. K=2 103 DO 104 I=3,NM1 EXL=EX EX=DUDY(I)-DUDYMN IF(EX*EXL.GE.0.) GO TO 104 YEDGE(K)=.5*(Y(I)+Y(I-1)) IF(K.EQ.6) GO TO 107 K=K+1 104 CONTINUE IF(EX.LT.0.) GO TO 108 YEDGE(K)=Y(N) IF(K.EQ.6) GO TO 107 K=K+1 108 CONTINUE DO 106 KAY=K,6 106 YEDGE(KAY)=Y(N) 107 CONTINUE EL12=(YEDGE(2)-YEDGE(1))*ALMG EL34=(YEDGE(4)-YEDGE(3))*ALMG EL56=(YEDGE(6)-YEDGE(5))*ALMG EL23=.5*(EL12+EL34) EL45=.5*(EL34+EL56) ASSIGN 119 TO K DO 130 I=2,NM1 YVALUE=Y(I) GO TO K, (119,121,123,125,127,129) 119 IF(YVALUE.LT.YEDGE(1)) GO TO 120 ASSIGN 121 TO K 121 IF(YVALUE.LT.YEDGE(2)) GO TO 122 ASSIGN 123 TO K 123 IF(YVALUE.LT.YEDGE(3)) GO TO 124 ASSIGN 125 TO K 125 IF(YVALUE.LT.YEDGE(4)) GO TO 126 ASSIGN 127 TO K 127 IF(YVALUE.LT.YEDGE(5)) GO TO 128 ASSIGN 129 TO K GO TO 129 120 EL(I)=0. GO TO 130 122 EL(I)=EL12 GO TO 130 124 EL(I)=EL23 GO TO 130 126 EL(I)=EL34 GO TO 130 128 EL(I)=EL45 GO TO 130 129 EL(I)=EL56 C ------------------------------ UPPER LIMITS TO MIXING LENGTH 130 EL(I)=AMIN1(EL(I),HUDIF/(DUDY(I)+TINY)) IF(KIN.NE.1) GO TO 141 DO 142 I=2,NM1 142 EL(I)=AMIN1(EL(I),AK*Y(I)) 141 IF(KEX.NE.1) GO TO 143 DO 144 I=2,NM1 144 EL(I)=AMIN1(EL(I),AK*(Y(N)-Y(I))) 143 CONTINUE C C ------------------------------------------- VISCOSTITES C -------------------------------------------TURBULENT CONTRIBUTION cccc 200 DO 201 I=2,NM1 DO 201 I=2,NM1 DUDYL=DUDY(I)*EL(I) UDMIN=UFAC*U(I) DUDYL=AMAX1(DUDYL,UDMIN) EMUT=RHO(I)*EL(I)*DUDYL C ----- SIMPLE ADDITION OF THE TURBULENT AND LAMINAR CONTRIBUTIONS EMU(I)=EMU(I)+EMUT 201 CONTINUE C C ------------------------------------------------MOMENTUM SOURCE 209 AGRVDX=AGRAV*DX RPRLST=1. MOMSOU=1 IF(ABS(DP).GT.TINY) GO TO 204 IF(ABS(AGRAV).GT.TINY) GO TO 204 MOMSOU=0 RETURN 204 continue DO 210 I=2,NM1 210 SI(I)=ADPEI(I)*(AGRVDX*(RHO(N)-RHO(I))-DP) GO TO 9000 C C ------------------------------------------------------------------ chapter b ---------- physf ---------- physf ---------- physf ----------- ENTRY PHYSF if(debug) write(6,*)'>>> physf' IF(MODEL.EQ.2) GO TO 312 RECPR=RECPRL(J) GO TO 310 312 RECPR=RECPRT(J) 310 NEWPR=1 IF(ABS(RECPR-RPRLST).LT.1.E-10) GO TO 314 NEWPR=2 DO 313 I=2,NM2 313 DIF(I)=DIFU(I)*RECPR RPRLST=RECPR c ------------------------------------------ kinetic heating source 314 IF(J.NE.JH) GO TO 3000 IF(ABS(RECPR-1.).LT.1.E-10) GO TO 320 IF(NOVEL.NE.1) GO TO 321 320 KSOURC=3 RETURN 321 DUSQP=0. USQP=U(2)**2 DO 322 I=2,NM2 USQ=U(I+1)**2 DUSQ=(DIFU(I)-DIF(I))*(USQ-USQP) SI(I)=.5*(DUSQ-DUSQP) si(i)=0.0 DUSQP=DUSQ 322 USQP=USQ KSOURC=2 SI(NM1)=-.5*DUSQP si(nm1)=0.0 GO TO 9000 C C ------------------------------------------------ FUEL SOURCE 3000 IF(J.NE.JF) GO TO 4000 IF(INERT.EQ.2) GO TO 342 KSOURC=3 RETURN 342 KSOURC=1 IF(MODEL.NE.1) GO TO 352 T1=DX*PREEXP*PRESS**2 T2=.5/STOICH DO 344 I=2,NM1 FUBRNT=T2*(ABS(F(I,JP))-F(I,JP)) IF(F(I,JF).GT.FUBRNT) GO TO 346 SIP(I)=-BIG GO TO 344 346 EXPO=EXP(-ARRCON/F(I,JTE)) F(I,JOX)=AMAX1(0.,F(I,JP)+F(I,JF)*STOICH) TERM=-T1*EXPO*ADPEI(I)*F(I,JOX) SIP(I)=TERM/(1.-FUBRNT/F(I,JF)) 344 SI(I)=-SIP(I)*FUBRNT GO TO 9000 352 T2=.5/STOICH T3=1./(PHIB-PHIC) T4=-PHIC*T3 C ----- RATE CONTROLLED BY EDDY BREAK-UP CEBUDX=CEBU*DX DO 353 I=2,NM1 FUBRNT=T2*(ABS(F(I,JP))-F(I,JP)) FUUNBT=T3*F(I,JP)+T4 IF(F(I,JF).LT.FUUNBT) then SIP(I)=-ADPEI(I)*CEBUDX*DUDY(I)*RHO(I)*(FUUNBT-F(I,JF))/ 1 (FUUNBT-FUBRNT+TINY) else SIP(I)=-BIG endif SI(I)=-SIP(I)*FUBRNT cc write(6,*)'i,fubrnt,fuunbt',i,fubrnt,fuunbt cc write(6,*)'i,si(i),sip(i)',i,si(i),sip(i) 353 continue GO TO 9000 C C ---------------------------------------------- JP (PHI) 4000 IF(J.NE.JP) GO TO 9000 KSOURC=3 RETURN C 9000 IF(ITEST.EQ.1) RETURN WRITE(6,9001) J,(SI(I),I=2,NM1) WRITE(6,9002) (SIP(I),I=2,NM1) 9001 FORMAT(18H PHYS TESTS FOR J=,I3/7H SI(I)=/(3X,1P6E11.3)) 9002 FORMAT(8H SIP(I)=/(3X,1P6E11.3)) END c----------------------------------------------------------------------- SUBROUTINE OUTPUT common/dbg/debug logical debug C/FEB.1977 ---------- G E N M I X ---------- COPYRIGHT, D.B.SPALDING --- COMMON/COMA/ 1 ADPEI(20),BIG,BOM(20),CSALFA,DIF(20),DIFU(20),DP,DX,DXLAST, 2 EMU(20),F(20,6),IBEX(3),IBIN(3),IDIMF,IFIN,ISTEP,ITEST,J, 3 JUSTEX,JUSTIN,KEX,KIN,KRAD,KSOURC,MOMSOU,N,NEWPR,NF,NM1,NM2, 4 NM3,NOVEL,OM(20),OMINT(20),PEI,PSIE,PSII,R(20),RECRU(20), 5 RECYDF(20),RHO(20),RJTOTE(3),RJTOTI(3),RME,RMI,SI(20),SIP(20), 6 TAUE,TAUI,TINY,U(20),XD,XU,Y(20),YE,YI COMMON/COMB/ 1 AK,AGRAV,AHEX,AHIN,ALMG,ALMGD(4),ARRCON,AUEX,BHEX,BHIN,BUEX, 2 CEBU,CFU,CHEX,CHIN,CMIX,COX,CPR,CUEX,DA1,DA2,DPDX,DXINC, 3 DXMAX,DXPSI,DXRAT,DXRE,DXY,ENTHA,ENTHB,ENTHC,ENTHD,EWALL, 4 FACE,FACEXP,FACI,FLOB,FLOC,FR,FRA,FUA,FUB,FUC,FUD,GAMMA, 5 GASCON,H,HDIV,HEX0,HFU,HIN0,ILPLOT,INERT,IRUN,ITPLOT,JF,JH, 6 JOX,JP,JPR,JTE,KASE,KIND,KUDIF,LASTEP,MODEL,NPLOT,NPROF, 7 NSTAT,OMPOW,OXA,OXB,OXC,OXD,PEILIM,PHIA,PHIB,PHIC,PHID, 8 PREEXP,PRESS,PRL(3),PRLAM,PRTURB,RATE,RATI,RECPRL(3), 9 RECPRT(3),REY,STOICH,TA,TB,TC,TD,TWALL,UA,UB,UBAR,UC,UD, 1 UDIF,UEX0,UFAC,UFLUX,ULIM,VISFU,VISMIX,VISOX,VISPR,WFU,WMIX, 2 WOX,WPR,XEND,XHEX0,XHIN0,XOUT,XUEX0,XULAST C DIMENSION LAB(6),OUT(6),TITLE(3,4), 1 XLPLOT(100),YLAXIS(12),YLPLOT(100,12), 2 XTPLOT(20),YTAXIS(4),YTPLOT(20,4), 3 DFE(3),DFI(3),FLUX(3),STANE(3),STANI(3) character*10 lab character*8 ylaxis,ytaxis,title character*4 xtaxis,xlaxis save C chapter a ----------------------- initial data for printout ------------ c -------------------- cross-stream output (profile) data ---------- c ----- assign kout= no. of variables, and output labels lab(k) DATA KOUT/6/ DATA (LAB(K),K=1,6)/'Y','U VEL','TEMP','FUEL','OXYG','OX-FU.STOI'/ C c -------------------- transverse (cross-stream) plot data c ----- assign nyt= no. of variables to be plotted c --- insert dimensions, ensure that itdim.ge.n.and.jtdim.ge.nyt DATA NYT/4/, ITDIM,JTDIM/20,4/ c ----- assign labels for plot axes DATA XTAXIS/'Y(I)'/ DATA (YTAXIS(K),K=1,4)/'U VEL ','TEMP ','FUEL ', 1 'OXYG '/ C c -------------------- longitudinal (down-stream) plot data c ----- assign nyl= no. of variables to be plotted c -- insert dimensions, ensure that ildim.ge.lastep.and.jldim.ge.nyl DATA NYL/12/ILDIM,JLDIM/100,12/ c!!!! two lines were missing c ----- assign labels for plot axes DATA XLAXIS/'XU'/ DATA (YLAXIS(K),K=1,12)/'U(1) ','T(1) ','FU(1) ', 1 'OX(1) ','N,R OR Y','1,R(1) ', 1 '2,PEI ','3,RME ','4,FLUXFU', 1 '5,DPDX ','6,RATE ','7,FACE '/ C C -------------------- TITLE DATA DATA TITLE/'AXI-SYMM','ETRICAL ','FLOW ', 1 'PLANE FL','UW ',' ', 2 'RADIALLT','-OUTWARD',' FLOW ', 3 'VARIABLE',' CSALFA ',' '/ C if(debug) write(6,*)'>>> output' CHAPTER B ----------------------------- HEADINGS ----------------------- IF(ISTEP.GT.0) GO TO 1102 WRITE(6,1103) (TITLE(I,KIND),I=1,3) 1103 FORMAT(1h ,23HGENMIX, FEBRUARY 1977, ,3A8/1H , 1 'COMBUSTION OF METHANE AND AIR IN A DUCT.') C PRESS1=PRESS TEM=.5*(R(1)+R(N)) EMU1=(VISFU*F(1,JF)+VISOX*F(1,JOX)+VISPR*F(1,JPR))* 1 SQRT(F(1,JTE)) C REY=PEI/(EMU1*TEM) EQRAT=0.0 IF(INERT.NE.1) EQRAT=FLOB*STOICH/(FLOC+TINY)/OXC AMACH=SQRT(PEI*UB/(GAMMA*PRESS*TEM)) C WRITE(6,1013) KASE,IRUN,KIND,KRAD,CSALFA,MODEL,INERT,NOVEL 1013 FORMAT(1h ,5H KASE,5H IRUN,5H KIND,5H KRAD,7H CSALFA,6H MODEL, 1 6H INERT,6H NOVEL/1X,I4,3I5,F7.3,3I6/) C WRITE(6,1014) OMPOW, (OM(I),I=1,N) 1014 FORMAT(1h ,18H OM(I), FOR OMPOW=,F6.3/(1X,1P6E11.3)) C WRITE(6,1010) 1 HEX0,XHEX0,AHEX,BHEX,CHEX, 2 HIN0,XHIN0,AHIN,BHIN,CHIN, 3 UEX0,XUEX0,AUEX,BUEX,CUEX, 4 XEND,XOUT,XULAST,HDIV,AGRAV 1010 FORMAT(/1h , 1 4X,4HHEX0,6X,5HXHEX0,7X,4HAHEX,7X,4HBHEX,7X,4HCHEX/1X,1P5E11.3/ 2 5X,4HHIN0,6X,5HXHIN0,7X,4HAHIN,7X,4HBHIN,7X,4HCHIN/1X,1P5E11.3/ 3 5X,4HUEX0,6X,5HXUEX0,7X,4HAUEX,7X,4HBUEX,7X,4HCUEX/1X,1P5E11.3/ 4 5X,4HXEND,7X,4HXOUT,5X,6HXULAST,7X,4HHDIV,6X,5HAGRAV/1X,1P5E11.3) C WRITE(6,1011) UA,UB,UC,UD,TA,TB,TC,TD, 2 PRESS,PREEXP,REY,EQRAT,AMACH,ULIM,PEILIM 1011 FORMAT(1h ,4X,2HUA,7X,2HUB,7X,2HUC,7X,2HUD, 1 7X,2HTA,7X,2HTB,7X,2HTC,7X,2HTD/1X,8F9.3/ 2 4X,5HPRESS,3X,6HPREEXP,6X,3HREY,4X,5HEQRAT,4X,5HAMACH,5X,4HULIM, 3 3X,6HPEILIM/1X,1P7E9.2) C chapter c ---------------- compute output required at each step -------- 1102 CONTINUE UBAR=0. DO 110 I=2,NM1 110 UBAR=UBAR+BOM(I)*U(I) UFLUX=PEI*UBAR DO 115 J=1,NF FLUX(J)=0. DO 116 I=2,NM1 116 FLUX(J)=FLUX(J)+BOM(I)*F(I,J) 115 FLUX(J)=PEI*FLUX(J) C DO 117 J=1,NF DFI(J)=FLUX(J)/PEI-F(I,J) 117 DFE(J)=DFI(J)+F(1,J)-F(N,J) UFLUX=UFLUX-PSIE*U(N)+U(1)*PSII FLUX(JH)=FLUX(JH)-PSIE*ENTHD+PSII*ENTHA FLUX(JP)=FLUX(JP)-PSIE*PHID+PSII*PHIA FLUX(JF)=FLUX(JF)-PSIE*FUD+PSII*FUA PRESSD=PRESS/PRESS1-1. C IF(ISTEP.EQ.0.OR.ILPLOT.EQ.1) GO TO 1105 c ----- assign values for downstream plot XLPLOT(ISTEP)=XU YLPLOT(ISTEP,1)=U(1) YLPLOT(ISTEP,2)=F(1,JTE) YLPLOT(ISTEP,3)=F(1,JF) YLPLOT(ISTEP,4)=F(1,JOX) IF(KIND-1) 111,111,114 111 YLPLOT(ISTEP,5)=R(N) GO TO 113 114 YLPLOT(ISTEP,5)=Y(N) 113 CONTINUE YLPLOT(ISTEP,6)=R(1) YLPLOT(ISTEP,7)=PEI YLPLOT(ISTEP,8)=RME YLPLOT(ISTEP,9)=FLUX(JF) YLPLOT(ISTEP,10)=DPDX YLPLOT(ISTEP,11)=RATE YLPLOT(ISTEP,12)=FACE 1105 CONTINUE C c ----- tests for printout c ----- iprint=1 gives single (station) variables, c iprint=2 adds the array (profile) variables, c iprint-3 adds the cross-stream plots. IPRINT=0 IF(MOD(ISTEP,NSTAT).EQ.0) IPRINT=1 IF(MOD(ISTEP,NPROF).EQ.0) IPRINT=2 IF(ISTEP.EQ.0) GO TO 1020 IF(MOD(ISTEP,NPLOT).EQ.0 1 .OR.ISTEP.EQ.JUSTEX.OR.ISTEP.EQ.JUSTIN 2 .OR.ITEST.NE.1.OR.IFIN.NE.1) IPRINT=3 1020 IF(IPRINT.EQ.0) RETURN C chapter d ------------------------------ station variables ------------- call writbl WRITE(6,1030) XU,ISTEP, 1 JUSTIN,JUSTEX,DX,PRESSD, 2 KIN,KEX,DXY,DPDX, 3 PSII,PSIE,DXRE,PEI, 4 RMI,RME,DXINC, 5 R(1),R(N),DXPSI, 5 (J,J=1,4),UFLUX,(FLUX(J),J=1,NF) 1030 FORMAT(1h ,5H*** ,3HXU=,1PE10.3,2X,6HISTEP=,I5/ 1 2X,7HJUSTIN=,I10,1X,7HJUSTEX=,I10,5X,3HDX=,1PE10.3, 1 8H PRESSD=,E10.3/ 2 5X,4HKIN=,I10,4X,4HKEX=,I10,4X,4HDXY=,E10.3,3X,5HDPDX=,E10.3/ 3 4X,5HPSII=,E10.3,3X,5HPSIE=,E10.3,3X,5HDXRE=,E10.3, 3 4X,4HPEI=,E10.3/ 4 5X,4HRMI=,E10.3,4X,4HRME=,E10.3,2X,6HDXINC=,E10.3/ 5 4X,5HR(1)=,E10.3,3X,5HR(N)=,E10.3,2X,6HDXPSI=,E10.3/ 5 23X,3HJ =,4(I6,5X)/7H UFLUX=,E10.3,9H FLUX(J)=,(4E11.3)) C IF(ISTEP.EQ.0) GO TO 1042 UREF=UBAR RUREF=PEI/((R(I)+R(N))*.5*Y(N)) URUREF=1./(UREF*RUREF) C IF(KIN-2) 1061,1062,1063 1061 TAUID=TAUI*URUREF DO 1025 J=1,NF 1025 STANI(J)=(RJTOTI(J)-F(1,J)*RMI)/(R(1)*DFI(J)*RUREF+TINY) WRITE(6,1029) TAUID,(STANI(J),J=1,NF) 1029 FORMAT(1H ,6HTAUID=,1PE10.3,10H STANI(J)=,(4E11.3)) GOTO 1063 1062 WRITE(6,1069) FACI,RATI 1069 FORMAT(1H ,6H FACI=,1PE10.3,6H RATI=,E10.3) 1063 IF(KEX-2) 1081,1082,1044 cccc 1081 TAUED=TAUED*URUREF 1081 TAUED=TAUE*URUREF DO 1027 J=1,NF 1027 STANE(J)=(RJTOTE(J)-F(N,J)*RME)/(R(N)*DFE(J)*RUREF+TINY) WRITE(6,1028) TAUED,(STANE(J),J=1,NF) 1028 FORMAT(1H ,6HTAUED=,1PE10.3,10H STANE(J)=,(4E11.3)) GO TO 1044 1082 WRITE(6,1089) FACE,RATE 1089 FORMAT(1H ,6H FACE=,1PE10.3,5H DA2=,E10.3) GO TO 1042 1044 WRITE(6,1047) DA1,DA2 1047 FORMAT(5H DA1=,1PE10.3,5H DA2=,E10.3) C CCHAPTER E ---------------------------- CROSS-STREAM PROFILES ---------- 1042 IF(IPRINT.EQ.1) GO TO 1050 C WRITE(6,1099) (LAB(K),K=1,KOUT) DO 1091 I=1,N OUT(1)=Y(I) OUT(2)=U(I) OUT(3)=F(I,JTE) OUT(4)=F(I,JF) OUT(5)=F(I,JOX) OUT(6)=F(I,JP) c ------------------------------ print profiles 1091 WRITE(6,1098) I,(OUT(K),K=1,KOUT) C IF(IPRINT.LT.3.OR.ITPLOT.EQ.1) GO TO 1050 c ----- assign cross-stream plots DO 1073 I=1,N XTPLOT(I)=Y(I) YTPLOT(I,1)=U(I) YTPLOT(I,2)=F(I,JTE) YTPLOT(I,3)=F(I,JF) YTPLOT(I,4)=F(I,JOX) 1073 CONTINUE c --------------------- cross-stream plot output call writbl WRITE(6,1096) XU,ISTEP 1096 FORMAT(19H CROSS-STREAM PLOT,,4H XU=,1PE10.3,7H ISTEP=,I4) CALL PLOTS(XTPLOT,ITDIM,N,XTAXIS,YTPLOT,JTDIM,NYT,YTAXIS) C chapter f -------------------------- return or terminate --------------- 1050 IF(IFIN.EQ.1) RETURN C call writbl WRITE(6,112) ISTEP,LASTEP,XU,XULAST,IFIN 112 FORMAT(14H0TERMINATED AT/7H ISTEP=,I5,8H LASTEP=,I5, 1 4H XU=,1PE11.3,8H XULAST=,E11.3,6H IFIN=,I3) IF (ILPLOT.EQ.1) RETURN call writbl c --------------------- downstream plot output WRITE(6,1054) XU,ISTEP 1054 FORMAT(18H DOWN-STREAM PLOT,,4H XU=,1PE10.3,7H ISTEP=,I4) CALL PLOTS(XLPLOT,ILDIM,ISTEP,XLAXIS,YLPLOT,JLDIM,NYL,YLAXIS) 1098 FORMAT(1H ,I3,1P10E11.3) 1099 FORMAT(1h ,2X,2HI ,10A11) END subroutine writbl write(6,*)' ' end c