0% found this document useful (0 votes)
35 views31 pages

1494 LISTADO PROGRMA PCOL.F SOLVES THE 2D NAVIER STOKES EQUATIONS USING CARTESIAN GRIDS AND COLOCATED VARIABLE ARRANGEMENT Me469a - Codes - 2dc - Grid.f

This code solves the 2D Navier-Stokes equations using a Cartesian grid and colocated variable arrangement for lid- and buoyancy-driven flows in closed cavities. It includes different schemes for convective fluxes and time stepping. The code reads input files, initializes variables, performs iterations to solve the equations, outputs results, and saves the last time step solution for continuation.

Uploaded by

Mariela Tissera
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
35 views31 pages

1494 LISTADO PROGRMA PCOL.F SOLVES THE 2D NAVIER STOKES EQUATIONS USING CARTESIAN GRIDS AND COLOCATED VARIABLE ARRANGEMENT Me469a - Codes - 2dc - Grid.f

This code solves the 2D Navier-Stokes equations using a Cartesian grid and colocated variable arrangement for lid- and buoyancy-driven flows in closed cavities. It includes different schemes for convective fluxes and time stepping. The code reads input files, initializes variables, performs iterations to solve the equations, outputs results, and saves the last time step solution for continuation.

Uploaded by

Mariela Tissera
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 31

3/7/23, 17:50 web.stanford.edu/class/me469a/codes/2dc/pcol.

C#############################################################
PROGRAM PCOL
C#############################################################
C
C This code solves the 2D Navier-Stokes equations using
C Cartesian grid and colocated variable arrangement.
C It is set for lid- and buoyancy-driven flows in closed
C cavities (steady or unsteady; includes UDS and CDS
C schemes for convective fluxes, Euler implicit or
C three time levels time stepping).
C
C M. Peric, IfS, Hamburg, 1996
C-------------------------------------------------------------
PARAMETER (NX=42,NY=42,NXY=NX*NY,NPHI=4)
COMMON /ICONT/ NI,NJ,NIM,NJM,NIJ,NITP,LI(NX),IMON,
* JMON,IJMON,MAXIT,IU,IV,IP,IEN,IPR,JPR,NSW(NPHI),
* ITIM,ITST,NPRT
COMMON /LOGIC/ LWRITE,LREAD,LTEST,LAXIS,LOUTS,LOUTE,
* LCAL(NPHI),LTIME
COMMON /RCONT/ SOR(NPHI),RESOR(NPHI),URF(NPHI),GAMT,
* BETA,GRAVX,GRAVY,GDS(NPHI),SORMAX,SLARGE,ALFA,
* GREAT,SMALL,ULID,OM,TPER
COMMON /VAR/ DENSIT,VISC,PRM,PRR,FLOMAS,FLOMOM,TREF,
* U(NXY),V(NXY),P(NXY),PP(NXY),T(NXY),F1(NXY),
* F2(NXY),DPX(NXY),DPY(NXY)
COMMON /GEO/ X(NX),Y(NY),XC(NX),YC(NY),FX(NX),FY(NY),R(NY)
COMMON /VAROLD/ TIME,DT,DTR,UO(NXY),VO(NXY),TO(NXY),
* UOO(NXY),VOO(NXY),TOO(NXY)
LOGICAL LWRITE,LREAD,LTEST,LAXIS,LOUTS,LOUTE,LCAL,LTIME
CHARACTER*20 FILRES,FILIN,FILOUT,FILGR,FILTER
C--------------------------------------------------------------
C
C.....I/O FILE NAMES
C
PRINT *, 'ENTER INPUT FILE NAME: '
READ(*,'(A20)') FILIN
PRINT *,' ENTER OUTPUT FILE NAME: '
READ(*,'(A20)') FILOUT
PRINT *, 'ENTER GRID FILE NAME: '
READ(*,'(A20)') FILGR
PRINT *,' ENTER RESULTS FILE NAME: '
READ(*,'(A20)') FILRES
C
OPEN (UNIT=5,FILE=FILIN)
OPEN (UNIT=2,FILE=FILOUT)
OPEN (UNIT=1,FILE=FILGR)
OPEN (UNIT=3,FILE=FILRES,FORM='UNFORMATTED')
REWIND 3
https://web.stanford.edu/class/me469a/codes/2dc/pcol.f 1/31
3/7/23, 17:50 web.stanford.edu/class/me469a/codes/2dc/pcol.f
REWIND 5
REWIND 2
REWIND 1
C
C.....INPUT AND BOUNDARY DATA, INITIALIZATION, OUTPUT TITLE, ETC.
C
ITIM=0
TIME=0.
CALL MODINP
C
IF(LTIME) THEN
PRINT *,' ENTER NAME OF UNSTEADY RESULTS FILE: '
READ(5,'(A20)') FILTER
OPEN (UNIT=4,FILE=FILTER,FORM='UNFORMATTED')
REWIND 4
ENDIF
C
C.....READ RESULTS OF PREVIOUS TIME STEP (IF CONTINUATION)
C
IF(LREAD) THEN
READ(3) ITIM,TIME,NI,NJ,NIM,NJM,NIJ,
* ((X(I),J=1,NJ),I=1,NI),((Y(J),J=1,NJ),I=1,NI),
* ((XC(I),J=1,NJ),I=1,NI),((YC(J),J=1,NJ),I=1,NI),
* (F1(IJ),IJ=1,NIJ),(F2(IJ),IJ=1,NIJ),(U(IJ),IJ=1,NIJ),
* (V(IJ),IJ=1,NIJ),(P(IJ),IJ=1,NIJ),(T(IJ),IJ=1,NIJ),
* (UO(IJ),IJ=1,NIJ),(VO(IJ),IJ=1,NIJ),(TO(IJ),IJ=1,NIJ)
REWIND 3
ENDIF
C
C==============================================
C.....TIME LOOP
C==============================================
C
ITIMS=ITIM+1
ITIME=ITIM+ITST
C
DO ITIM=ITIMS,ITIME
TIME=TIME+DT
C
C.....SHIFT SOLUTIONS IN TIME
C
IF(LTIME) THEN
DO IJ=1,NIJ
TOO(IJ)=TO(IJ)
UOO(IJ)=UO(IJ)
VOO(IJ)=VO(IJ)
TO(IJ)=T(IJ)
UO(IJ)=U(IJ)
VO(IJ)=V(IJ)
https://web.stanford.edu/class/me469a/codes/2dc/pcol.f 2/31
3/7/23, 17:50 web.stanford.edu/class/me469a/codes/2dc/pcol.f

END DO
ENDIF
C
WRITE(2,*) ' TIME = ',TIME
WRITE(2,*) ' *****************************'
WRITE(2,*) '
'
C
C.....PRINT INITIAL FIELDS IF DESIRED
C
IF(LOUTS.AND.(ITIM.EQ.ITIMS)) THEN
IF(LCAL(IU)) CALL PRINT(U,'U VEL.')
IF(LCAL(IV)) CALL PRINT(V,'V VEL.')
IF(LCAL(IP)) CALL PRINT(P,'PRESS.')
IF(LCAL(IEN)) CALL PRINT(T,'TEMPER')
ENDIF
C
C.....DEFINE MONITORING LOCATION (NODE WITH I=IMON, J=JMON)
C
IJMON=LI(IMON)+JMON
WRITE(2,600) IMON,JMON
C
C.....SET BOUNDARY CONDITIONS FOR THE NEW TIME STEP
C
IF(LTIME) CALL BCTIME
C
C+++++++++++++++++++++++++++++++++++++++++++++++++++++++
C.....OUTER ITERATIONS (SIMPLE RELAXATIONS)
C+++++++++++++++++++++++++++++++++++++++++++++++++++++++
C
DO ITER=1,MAXIT
IF(LCAL(IU)) CALL CALCUV
IF(LCAL(IP)) CALL CALCP
IF(LCAL(IEN)) CALL CALCT
C
C.....CHECK CONVERGENCE OF OUTER ITERATIONS
C
WRITE(2,606) ITER,RESOR(IU),RESOR(IV),RESOR(IP),
* RESOR(IEN),U(IJMON),V(IJMON),P(IJMON),T(IJMON)
SOURCE=MAX(RESOR(IU),RESOR(IV),RESOR(IP),RESOR(IEN))
IF(SOURCE.GT.SLARGE) GO TO 510
IF(SOURCE.LT.SORMAX) GO TO 250
END DO
C
C+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
C
250 CONTINUE
C
C.....CONVERGED: IF UNSTEADY FLOW, PRINT AND SAVE NPRTth SOLUTION
C
https://web.stanford.edu/class/me469a/codes/2dc/pcol.f 3/31
3/7/23, 17:50 web.stanford.edu/class/me469a/codes/2dc/pcol.f

IF((.NOT.LTIME).OR.(LTIME.AND.MOD(ITIM,NPRT).EQ.0)) THEN
IF(LOUTE) THEN
IF(LCAL(IU)) CALL PRINT(U,'U VEL.')
IF(LCAL(IV)) CALL PRINT(V,'V VEL.')
IF(LCAL(IP)) CALL PRINT(P,'PRESS.')
IF(LCAL(IEN)) CALL PRINT(T,'TEMPER')
ENDIF
CALL OUT2
C
IF(LWRITE) THEN
WRITE(4) ITIM,TIME,NI,NJ,NIM,NJM,NIJ,
* ((X(I),J=1,NJ),I=1,NI),((Y(J),J=1,NJ),I=1,NI),
* ((XC(I),J=1,NJ),I=1,NI),((YC(J),J=1,NJ),I=1,NI),
* (F1(IJ),IJ=1,NIJ),(F2(IJ),IJ=1,NIJ),(U(IJ),IJ=1,NIJ),
* (V(IJ),IJ=1,NIJ),(P(IJ),IJ=1,NIJ),(T(IJ),IJ=1,NIJ)
ENDIF
ENDIF
C
END DO
C
C==============================================================
C.....ALL TIME STEPS DONE; SAVE LAST SOLUTION FOR CONTINUATION
C==============================================================
C
WRITE(3) ITIM,TIME,NI,NJ,NIM,NJM,NIJ,
* ((X(I),J=1,NJ),I=1,NI),((Y(J),J=1,NJ),I=1,NI),
* ((XC(I),J=1,NJ),I=1,NI),((YC(J),J=1,NJ),I=1,NI),
* (F1(IJ),IJ=1,NIJ),(F2(IJ),IJ=1,NIJ),(U(IJ),IJ=1,NIJ),
* (V(IJ),IJ=1,NIJ),(P(IJ),IJ=1,NIJ),(T(IJ),IJ=1,NIJ),
* (UO(IJ),IJ=1,NIJ),(VO(IJ),IJ=1,NIJ),(TO(IJ),IJ=1,NIJ)
STOP
C
C==============================================================
C......MESSAGE FOR DIVERGENCE
C==============================================================
C
510 PRINT *,' *** TERMINATED - OUTER ITERATIONS DIVERGING ***'
STOP
C
C==============================================================
C......FORMAT SPECIFICATIONS
C==============================================================
C
600 FORMAT(1X,'ITER.',3X,
*'I---------ABSOLUTE RESIDUAL SOURCE SUMS--------I',3X,
*'I----FIELD VALUES AT MONITORING LOCATION (',I3,',',I3,
*')----I',/,2X,'NO.',9X,'U',11X,'V',9X,'MASS',10X,'T',
*16X,'U',11X,'V',11X,'P',11X,'T',/)
606 FORMAT(1X,I4,2X,1P4E12.4,5X,1P4E12.4)
https://web.stanford.edu/class/me469a/codes/2dc/pcol.f 4/31
3/7/23, 17:50 web.stanford.edu/class/me469a/codes/2dc/pcol.f
C
END
C
C
C###########################################################
SUBROUTINE CALCUV
C###########################################################
C This routine sets the coefficient matrix for the U and
C V equations, and calls the linear equation solver to
C update the velocity components. Constant fluid
C properties are assumed (parts of diffusive fluxes
C cancel out, see Chap. 7, Sect. 2).
C--------------------------------------------------------------
PARAMETER (NX=42,NY=42,NXY=NX*NY,NPHI=4)
COMMON /ICONT/ NI,NJ,NIM,NJM,NIJ,NITP,LI(NX),IMON,
* JMON,IJMON,MAXIT,IU,IV,IP,IEN,IPR,JPR,NSW(NPHI),
* ITIM,ITST,NPRT
COMMON /LOGIC/ LWRITE,LREAD,LTEST,LAXIS,LOUTS,LOUTE,
* LCAL(NPHI),LTIME
COMMON /RCONT/ SOR(NPHI),RESOR(NPHI),URF(NPHI),GAMT,
* BETA,GRAVX,GRAVY,GDS(NPHI),SORMAX,SLARGE,ALFA,
* GREAT,SMALL,ULID,OM,TPER
COMMON /VAR/ DENSIT,VISC,PRM,PRR,FLOMAS,FLOMOM,TREF,
* U(NXY),V(NXY),P(NXY),PP(NXY),T(NXY),F1(NXY),
* F2(NXY),DPX(NXY),DPY(NXY)
COMMON /GEO/ X(NX),Y(NY),XC(NX),YC(NY),FX(NX),FY(NY),R(NY)
COMMON /VAROLD/ TIME,DT,DTR,UO(NXY),VO(NXY),TO(NXY),
* UOO(NXY),VOO(NXY),TOO(NXY)
COMMON /COEF/ AE(NXY),AW(NXY),AN(NXY),AS(NXY),AP(NXY),
* SU(NXY),SV(NXY),APU(NXY),APV(NXY)
LOGICAL LWRITE,LREAD,LTEST,LAXIS,LOUTS,LOUTE,LCAL,LTIME
C----------------------------------------------------------
C
C.....RECIPROCAL VALUES OF UNDER-RELAXATION FACTORS FOR U AND V
C
URFU=1./URF(IU)
URFV=1./URF(IV)
C
C.....SET BOUNDARY PRESSURE (LINEAR EXTRAPOLATION FROM INSIDE)
C
CALL PBOUND(P)
C
C.....INITIALIZE TEMPORARILY STORED VARIABLES
C
DO IJ=1,NIJ
SU(IJ)=0.
SV(IJ)=0.
APU(IJ)=0.
APV(IJ)=0.
https://web.stanford.edu/class/me469a/codes/2dc/pcol.f 5/31
3/7/23, 17:50 web.stanford.edu/class/me469a/codes/2dc/pcol.f
END DO
C
C==========================================================
C.....FLUXES THROUGH INTERNAL EAST CV FACES
C==========================================================
C F1(IJ) is the mass flux through the east face (outward
C normal directed to E); FX(I) is the ratio of distance
C from P to cell face, to distance from P to E; IJ
C denotes node P and IJE node E.
C Contribution of convective and diffusive fluxes from
C east face to AE(P), AW(E), and source terms at both
C P and E are calculated; contributions to AP(P) and
C AP(E) come through the sum of neighbor coefficients
C and are not explicitly calculated.
C----------------------------------------------------------
C
DO I=2,NIM-1
C
C.....INTERPOLATION FACTORS, DISTANCE FROM P TO E (SAME FOR ALL J)
C
FXE =FX(I)
FXP =1.-FXE
DXPE=XC(I+1)-XC(I)
C
DO J=2,NJM
IJ=LI(I)+J
IJE=IJ+NJ
C
C.....CELL FACE AREA S = DY*RE*1
C
S=(Y(J)-Y(J-1))*(R(J)+R(J-1))*0.5
C
C.....COEFFICIENT RESULTING FROM DIFFUSIVE FLUX (SAME FOR U AND V)
C
D=VISC*S/DXPE
C
C.....EXPLICIT CONVECTIVE FLUXES FOR UDS AND CDS
C
CE=MIN(F1(IJ),0.)
CP=MAX(F1(IJ),0.)
C
FUUDS=CP*U(IJ)+CE*U(IJE)
FVUDS=CP*V(IJ)+CE*V(IJE)
FUCDS=F1(IJ)*(U(IJE)*FXE+U(IJ)*FXP)
FVCDS=F1(IJ)*(V(IJE)*FXE+V(IJ)*FXP)
C
C.....COEFFICIENTS AE(P) AND AW(E) DUE TO UDS
C
AE(IJ) = CE-D
https://web.stanford.edu/class/me469a/codes/2dc/pcol.f 6/31
3/7/23, 17:50 web.stanford.edu/class/me469a/codes/2dc/pcol.f
AW(IJE)=-CP-D
C
C.....SOURCE TERM CONTRIBUTIONS AT P AND E DUE TO DEFERRED CORRECTION
C
SU(IJ) =SU(IJ) +GDS(IU)*(FUUDS-FUCDS)
SU(IJE)=SU(IJE)-GDS(IU)*(FUUDS-FUCDS)
SV(IJ) =SV(IJ) +GDS(IU)*(FVUDS-FVCDS)
SV(IJE)=SV(IJE)-GDS(IU)*(FVUDS-FVCDS)
END DO
END DO
C
C=========================================================
C.....FLUXES THROUGH INTERNAL NORTH CV FACES
C=========================================================
C F2(IJ) is the mass flux through the north face (outward
C normal directed to N); FY(J) is the ratio of distance
C from P to cell face, to distance from P to N; IJ
C denotes node P and IJN node N.
C Contribution of convective and diffusive fluxes from
C north face to AN(P), AS(N), and source terms at both
C P and N are calculated; contributions to AP(P) and
C AP(N) come through the sum of neighbor coefficients
C and are not explicitly calculated.
C----------------------------------------------------------
C
DO J=2,NJM-1
C
C.....INTERPOLATION FACTORS, DISTANCE FROM P TO N (SAME FOR ALL J)
C
FYN =FY(J)
FYP =1.-FYN
DYPN=YC(J+1)-YC(J)
C
DO I=2,NIM
IJ =LI(I)+J
IJN=IJ+1
C
C.....CELL FACE AREA S = DX*RN*1
C
S=(X(I)-X(I-1))*R(J)
C
C.....COEFFICIENT RESULTING FROM DIFFUSIVE FLUX (SAME FOR U AND V)
C
D=VISC*S/DYPN
C
C.....EXPLICIT CONVECTIVE FLUXES FOR UDS AND CDS
C
CN=MIN(F2(IJ),0.)
CP=MAX(F2(IJ),0.)
https://web.stanford.edu/class/me469a/codes/2dc/pcol.f 7/31
3/7/23, 17:50 web.stanford.edu/class/me469a/codes/2dc/pcol.f
C
FUUDS=CP*U(IJ)+CN*U(IJN)
FVUDS=CP*V(IJ)+CN*V(IJN)
FUCDS=F2(IJ)*(U(IJN)*FYN+U(IJ)*FYP)
FVCDS=F2(IJ)*(V(IJN)*FYN+V(IJ)*FYP)
C
C.....COEFFICIENTS AN(P) AND AS(N) DUE TO UDS
C
AN(IJ) = CN-D
AS(IJN)=-CP-D
C
C.....SOURCE TERM CONTRIBUTIONS AT P AND N DUE TO DEFERRED CORRECTION
C
SU(IJ) =SU(IJ) +GDS(IU)*(FUUDS-FUCDS)
SU(IJN)=SU(IJN)-GDS(IU)*(FUUDS-FUCDS)
SV(IJ) =SV(IJ) +GDS(IU)*(FVUDS-FVCDS)
SV(IJN)=SV(IJN)-GDS(IU)*(FVUDS-FVCDS)
END DO
END DO
C
C=============================================================
C.....VOLUME INTEGRALS (SOURCE TERMS)
C=============================================================
C Cell-face pressure calculated using linear interpolation;
C cell volume is VOL, RP is the radius at node P; DX and DY
C are the width and height of the cell. Contribution to AP
C coefficient from volume integrals is stored temporarily
C in arrays APU and APV for U and V, respectively; these
C arrays are later used to store 1/AP, which is needed in
C the pressure-correction equation.
C--------------------------------------------------------------
C
DO I=2,NIM
DX=X(I)-X(I-1)
C
DO J=2,NJM
DY=Y(J)-Y(J-1)
RP=0.5*(R(J)+R(J-1))
VOL=DX*DY*RP
IJ=LI(I)+J
C
C...... CELL-FACE PRESSURE, CELL-CENTER GRADIENT, SOURCE
C
PE=P(IJ+NJ)*FX(I)+P(IJ)*(1.-FX(I))
PW=P(IJ)*FX(I-1)+P(IJ-NJ)*(1.-FX(I-1))
PN=P(IJ+1)*FY(J)+P(IJ)*(1.-FY(J))
PS=P(IJ)*FY(J-1)+P(IJ-1)*(1.-FY(J-1))
DPX(IJ)=(PE-PW)/DX
DPY(IJ)=(PN-PS)/DY
https://web.stanford.edu/class/me469a/codes/2dc/pcol.f 8/31
3/7/23, 17:50 web.stanford.edu/class/me469a/codes/2dc/pcol.f

SU(IJ)=SU(IJ)-DPX(IJ)*VOL
SV(IJ)=SV(IJ)-DPY(IJ)*VOL
C
C..... BUOYANCY SOURCE CONTRIBUTION
C
IF(LCAL(IEN)) THEN
SB=-BETA*DENSIT*VOL*(T(IJ)-TREF)
SU(IJ)=SU(IJ)+GRAVX*SB
SV(IJ)=SV(IJ)+GRAVY*SB
ENDIF
C
C..... AXISYMMETRIC CONTRIBUTION
C
IF(LAXIS) THEN
APV(IJ)=APV(IJ)+VISC*VOL/RP**2
ENDIF
C
C..... UNSTEADY TERM CONTRIBUTION TO AP AND SU
C
IF(LTIME) THEN
APT=DENSIT*VOL*DTR
SU(IJ)=SU(IJ)+(1.+GAMT)*APT*UO(IJ)-0.5*GAMT*APT*UOO(IJ)
SV(IJ)=SV(IJ)+(1.+GAMT)*APT*VO(IJ)-0.5*GAMT*APT*VOO(IJ)
APV(IJ)=APV(IJ)+(1.+0.5*GAMT)*APT
APU(IJ)=APU(IJ)+(1.+0.5*GAMT)*APT
ENDIF
C
END DO
END DO
C
C=============================================================
C.....PROBLEM MODIFICATIONS - BOUNDARY CONDITIONS
C=============================================================
C
CALL BCUV
C
C=============================================================
C.....UNDER-RELAXATION, SOLVING EQUATION SYSTEM FOR U-VELOCITY
C=============================================================
C
DO I=2,NIM
DO IJ=LI(I)+2,LI(I)+NJM
AP(IJ)=(-AE(IJ)-AW(IJ)-AN(IJ)-AS(IJ)+APU(IJ))*URFU
SU(IJ)=SU(IJ)+(1.-URF(IU))*AP(IJ)*U(IJ)
APU(IJ)=1./AP(IJ)
END DO
END DO
C
CALL SIPSOL(U,IU)
https://web.stanford.edu/class/me469a/codes/2dc/pcol.f 9/31
3/7/23, 17:50 web.stanford.edu/class/me469a/codes/2dc/pcol.f

C
C=============================================================
C.....UNDER-RELAXATION, SOLVING EQUATION SYSTEM FOR V-VELOCITY
C=============================================================
C
DO I=2,NIM
DO IJ=LI(I)+2,LI(I)+NJM
AP(IJ)=(-AE(IJ)-AW(IJ)-AN(IJ)-AS(IJ)+APV(IJ))*URFV
SU(IJ)=SV(IJ)+(1.-URF(IV))*AP(IJ)*V(IJ)
APV(IJ)=1./AP(IJ)
END DO
END DO
C
CALL SIPSOL(V,IV)
C
RETURN
END
C
C
C##############################################################
SUBROUTINE CALCP
C##############################################################
C This routine assembles and solves the pressure-correction
C equation. Cell-face values of velocity components, used
C to calculate the mass fluxes, are obtained by linear
C interpolation and then corrected by adding a term
C proportional to the third derivative of pressure and
C squared grid spacing, as described in Chap. 7, Sect. 7.5.3.
C--------------------------------------------------------------
PARAMETER (NX=42,NY=42,NXY=NX*NY,NPHI=4)
COMMON /ICONT/ NI,NJ,NIM,NJM,NIJ,NITP,LI(NX),IMON,
* JMON,IJMON,MAXIT,IU,IV,IP,IEN,IPR,JPR,NSW(NPHI),
* ITIM,ITST,NPRT
COMMON /LOGIC/ LWRITE,LREAD,LTEST,LAXIS,LOUTS,LOUTE,
* LCAL(NPHI),LTIME
COMMON /RCONT/ SOR(NPHI),RESOR(NPHI),URF(NPHI),GAMT,
* BETA,GRAVX,GRAVY,GDS(NPHI),SORMAX,SLARGE,ALFA,
* GREAT,SMALL,ULID,OM,TPER
COMMON /VAR/ DENSIT,VISC,PRM,PRR,FLOMAS,FLOMOM,TREF,
* U(NXY),V(NXY),P(NXY),PP(NXY),T(NXY),F1(NXY),
* F2(NXY),DPX(NXY),DPY(NXY)
COMMON /GEO/ X(NX),Y(NY),XC(NX),YC(NY),FX(NX),FY(NY),R(NY)
COMMON /VAROLD/ TIME,DT,DTR,UO(NXY),VO(NXY),TO(NXY),
* UOO(NXY),VOO(NXY),TOO(NXY)
COMMON /COEF/ AE(NXY),AW(NXY),AN(NXY),AS(NXY),AP(NXY),
* SU(NXY),SV(NXY),APU(NXY),APV(NXY)
LOGICAL LWRITE,LREAD,LTEST,LAXIS,LOUTS,LOUTE,LCAL,LTIME
C--------------------------------------------------------------
C
https://web.stanford.edu/class/me469a/codes/2dc/pcol.f 10/31
3/7/23, 17:50 web.stanford.edu/class/me469a/codes/2dc/pcol.f

C============================================================
C.....EAST CV FACES (S - AREA, VOLE - VOLUME BETWEEN P AND E)
C============================================================
C
DO I=2,NIM-1
DXPE=XC(I+1)-XC(I)
FXE=FX(I)
FXP=1.-FXE
C
DO J=2,NJM
IJ=LI(I)+J
IJE=IJ+NJ
C
S=(Y(J)-Y(J-1))*(R(J)+R(J-1))*0.5
VOLE=DXPE*S
D=DENSIT*S
C
C.....INTERPOLATED CELL FACE QUANTITIES (PRESSURE GRAD., U AND 1/AP)
C Note: pressure gradient is interpolated midway between P and E,
C since the gradient calculated at cell face is second order
C accurate at that location; the velocity is interpolated linearly,
C to achieve second order accuracy at cell face center.
C
DPXEL=0.5*(DPX(IJE)+DPX(IJ))
UEL=U(IJE)*FXE+U(IJ)*FXP
APUE=APU(IJE)*FXE+APU(IJ)*FXP
C
C.....CELL FACE GRADIENT, VELOCITY AND MASS FLUX
C
DPXE=(P(IJE)-P(IJ))/DXPE
UE=UEL-APUE*VOLE*(DPXE-DPXEL)
F1(IJ)=D*UE
C
C.....COEFFICIENTS OF P' EQUATION, AE(P) AND AW(E)
C
AE(IJ)=-D*APUE*S
AW(IJE)=AE(IJ)
C
END DO
END DO
C
C=============================================================
C.....NORTH CV FACES (S - AREA, VOLN - VOLUME BETWEEN P AND N)
C=============================================================
C
DO J=2,NJM-1
DYPN=YC(J+1)-YC(J)
FYN=FY(J)
FYP=1.-FYN
https://web.stanford.edu/class/me469a/codes/2dc/pcol.f 11/31
3/7/23, 17:50 web.stanford.edu/class/me469a/codes/2dc/pcol.f

C
DO I=2,NIM
IJ=LI(I)+J
IJN=IJ+1
C
S=(X(I)-X(I-1))*R(J)
VOLN=S*DYPN
D=DENSIT*S
C
C.....INTERPOLATED CELL-FACE QUANTITIES (PRESSURE GRAD., U AND 1/AP)
C
DPYNL=0.5*(DPY(IJN)+DPY(IJ))
VNL=V(IJN)*FYN+V(IJ)*FYP
APVN=APV(IJN)*FYN+APV(IJ)*FYP
C
C.....CELL-FACE GRADIENT, VELOCITY AND MASS FLUX
C
DPYN=(P(IJN)-P(IJ))/DYPN
VN=VNL-APVN*VOLN*(DPYN-DPYNL)
F2(IJ)=D*VN
C
C.....COEFFICIENTS OF P' EQUATION, AN(P) AND AS(N)
C
AN(IJ)=-D*APVN*S
AS(IJN)=AN(IJ)
C
END DO
END DO
C
C===============================================================
C.....BOUNDARY CONDITIONS: PRESCRIBED MASS FLUXES, ZERO CORRECTION
C.....(EQUIVALENT TO ZERO NORMAL GRADIENT FOR P'; COEFFICIENT FOR
C.....THE BOUNDARY NODE IS ZERO, NO SPECIAL TREATMENT REQUIRED)
C===============================================================
C
C===============================================================
C..... SORCE TERM AND COEFFICIENT OF NODE P
C===============================================================
C
SUM=0.
DO I=2,NIM
DO IJ=LI(I)+2,LI(I)+NJM
SU(IJ)=F1(IJ-NJ)-F1(IJ)+F2(IJ-1)-F2(IJ)
AP(IJ)=-(AE(IJ)+AW(IJ)+AN(IJ)+AS(IJ))
SUM=SUM+SU(IJ)
END DO
END DO
C
C.....SUM MUST BE ZERO IF GLOBAL MASS CONSERVATION IS ASSURED!
https://web.stanford.edu/class/me469a/codes/2dc/pcol.f 12/31
3/7/23, 17:50 web.stanford.edu/class/me469a/codes/2dc/pcol.f

C
IF(LTEST) WRITE(2,*) ' SUM = ',SUM
C
C===============================================================
C.....SOLVE EQUATIONS SYSTEM FOR P' AND APPLY CORRECTIONS
C===============================================================
C
CALL SIPSOL(PP,IP)
C
C.....CALCULATE PRESSURE CORRECTION AT BOUNDARIES
C
CALL PBOUND(PP)
C
C.....VALUE OF P' AT REFERENCE LOCATION TO BE SUBTRACTED FROM ALL P'
C
IJPREF=LI(IPR)+JPR
PPO=PP(IJPREF)
C
C.....CORRECT EAST MASS FLUXES
C
DO I=2,NIM-1
DO IJ=LI(I)+2,LI(I)+NJM
F1(IJ)=F1(IJ)+AE(IJ)*(PP(IJ+NJ)-PP(IJ))
END DO
END DO
C
C.....CORRECT NORTH MASS FLUXES
C
DO I=2,NIM
DO IJ=LI(I)+2,LI(I)+NJM-1
F2(IJ)=F2(IJ)+AN(IJ)*(PP(IJ+1)-PP(IJ))
END DO
END DO
C
C.....CORRECT PRESSURE AND VELOCITIES AT CELL CENTER
C
DO I=2,NIM
DX=X(I)-X(I-1)
C
DO J=2,NJM
IJ=LI(I)+J
RP=0.5*(R(J)+R(J-1))
DY=Y(J)-Y(J-1)
C
PPE=PP(IJ+NJ)*FX(I)+PP(IJ)*(1.-FX(I))
PPW=PP(IJ)*FX(I-1)+PP(IJ-NJ)*(1.-FX(I-1))
PPN=PP(IJ+1)*FY(J)+PP(IJ)*(1.-FY(J))
PPS=PP(IJ)*FY(J-1)+PP(IJ-1)*(1.-FY(J-1))
C
https://web.stanford.edu/class/me469a/codes/2dc/pcol.f 13/31
3/7/23, 17:50 web.stanford.edu/class/me469a/codes/2dc/pcol.f

U(IJ)=U(IJ)-(PPE-PPW)*DY*RP*APU(IJ)
V(IJ)=V(IJ)-(PPN-PPS)*DX*RP*APV(IJ)
P(IJ)=P(IJ)+URF(IP)*(PP(IJ)-PPO)
END DO
END DO
C
RETURN
END
C
C
C############################################################
SUBROUTINE CALCT
C############################################################
C This routine solves the temperature equation. Constant
C viscosity, density and Prandtl number are assumed - only
C the density variation due to buoyancy is considered
C using Boussinesq approximation (valid for temperature
C differences less than 5 deg. in water and 20 deg. in air).
C PRR is the reciprocal value of the Prandtl number, 1/Pr.
C--------------------------------------------------------------
PARAMETER (NX=42,NY=42,NXY=NX*NY,NPHI=4)
COMMON /ICONT/ NI,NJ,NIM,NJM,NIJ,NITP,LI(NX),IMON,
* JMON,IJMON,MAXIT,IU,IV,IP,IEN,IPR,JPR,NSW(NPHI),
* ITIM,ITST,NPRT
COMMON /LOGIC/ LWRITE,LREAD,LTEST,LAXIS,LOUTS,LOUTE,
* LCAL(NPHI),LTIME
COMMON /RCONT/ SOR(NPHI),RESOR(NPHI),URF(NPHI),GAMT,
* BETA,GRAVX,GRAVY,GDS(NPHI),SORMAX,SLARGE,ALFA,
* GREAT,SMALL,ULID,OM,TPER
COMMON /VAR/ DENSIT,VISC,PRM,PRR,FLOMAS,FLOMOM,TREF,
* U(NXY),V(NXY),P(NXY),PP(NXY),T(NXY),F1(NXY),
* F2(NXY),DPX(NXY),DPY(NXY)
COMMON /GEO/ X(NX),Y(NY),XC(NX),YC(NY),FX(NX),FY(NY),R(NY)
COMMON /VAROLD/ TIME,DT,DTR,UO(NXY),VO(NXY),TO(NXY),
* UOO(NXY),VOO(NXY),TOO(NXY)
COMMON /COEF/ AE(NXY),AW(NXY),AN(NXY),AS(NXY),AP(NXY),
* SU(NXY),SV(NXY),APU(NXY),APV(NXY)
LOGICAL LWRITE,LREAD,LTEST,LAXIS,LOUTS,LOUTE,LCAL,LTIME
C-------------------------------------------------------------
C
C.....INITIALIZATION OF TEMPORARILY STORED VARIABLES
C
DO IJ=1,NIJ
SU(IJ)=0.
AP(IJ)=0.
END DO
C
URFI=1./URF(IEN)
C
https://web.stanford.edu/class/me469a/codes/2dc/pcol.f 14/31
3/7/23, 17:50 web.stanford.edu/class/me469a/codes/2dc/pcol.f

C==========================================================
C.....FLUXES THROUGH INTERNAL EAST CV-FACES
C==========================================================
C
DO I=2,NIM-1
C
C.....INTERPOLATION FACTORS, DISTANCE FROM P TO E (SAME FOR ALL J)
C
FXE =FX(I)
FXP =1.-FXE
DXPE=XC(I+1)-XC(I)
C
DO J=2,NJM
IJ=LI(I)+J
IJE=IJ+NJ
C
C.....CELL FACE AREA S = DY*RE*1
C
S=(Y(J)-Y(J-1))*(R(J)+R(J-1))*0.5
C
C.....COEFFICIENT RESULTING FROM DIFFUSIVE FLUX
C
D=VISC*PRR*S/DXPE
C
C.....EXPLICIT CONVECTIVE FLUX FOR UDS AND CDS
C
CE=MIN(F1(IJ),0.)
CP=MAX(F1(IJ),0.)
C
FUDS=CP*T(IJ)+CE*T(IJE)
FCDS=F1(IJ)*(T(IJE)*FXE+T(IJ)*FXP)
C
C.....COEFFICIENTS AE(P) AND AW(E) DUE TO UDS
C
AE(IJ) = CE-D
AW(IJE)=-CP-D
C
C.....SOURCE TERM CONTRIBUTIONS AT P AND E DUE TO DEFERRED CORRECTION
C
SU(IJ) =SU(IJ) +GDS(IEN)*(FUDS-FCDS)
SU(IJE)=SU(IJE)-GDS(IEN)*(FUDS-FCDS)
END DO
END DO
C
C=========================================================
C.....FLUXES THROUGH INTERNAL NORTH CV FACES
C=========================================================
C
DO J=2,NJM-1
https://web.stanford.edu/class/me469a/codes/2dc/pcol.f 15/31
3/7/23, 17:50 web.stanford.edu/class/me469a/codes/2dc/pcol.f
C
C.....INTERPOLATION FACTORS, DISTANCE FROM P TO N (SAME FOR ALL J)
C
FYN =FY(J)
FYP =1.-FYN
DYPN=YC(J+1)-YC(J)
C
DO I=2,NIM
IJ =LI(I)+J
IJN=IJ+1
C
C.....CELL FACE AREA S = DX*RN*1
C
S=(X(I)-X(I-1))*R(J)
C
C.....COEFFICIENT RESULTING FROM DIFFUSIVE FLUX (SAME FOR U AND V)
C
D=VISC*PRR*S/DYPN
C
C.....EXPLICIT CONVECTIVE FLUXES FOR UDS AND CDS
C
CN=MIN(F2(IJ),0.)
CP=MAX(F2(IJ),0.)
C
FUDS=CP*T(IJ)+CN*T(IJN)
FCDS=F2(IJ)*(T(IJN)*FYN+T(IJ)*FYP)
C
C.....COEFFICIENTS AE(P) AND AW(E) DUE TO UDS
C
AN(IJ) = CN-D
AS(IJN)=-CP-D
C
C.....SOURCE TERM CONTRIBUTIONS AT P AND E DUE TO DEFERRED CORRECTION
C
SU(IJ) =SU(IJ) +GDS(IEN)*(FUDS-FCDS)
SU(IJN)=SU(IJN)-GDS(IEN)*(FUDS-FCDS)
C
END DO
END DO
C
C=============================================================
C.....VOLUME INTEGRALS (SOURCE TERMS)
C=============================================================
C
DO I=2,NIM
DX=X(I)-X(I-1)
C
DO J=2,NJM
IJ=LI(I)+J
https://web.stanford.edu/class/me469a/codes/2dc/pcol.f 16/31
3/7/23, 17:50 web.stanford.edu/class/me469a/codes/2dc/pcol.f
DY=Y(J)-Y(J-1)
RP=0.5*(R(J)+R(J-1))
VOL=DX*DY*RP
C
C..... UNSTEADY TERM CONTRIBUTION TO AP AND SU
C
IF(LTIME) THEN
APT=DENSIT*VOL*DTR
SU(IJ)=SU(IJ)+(1.+GAMT)*APT*TO(IJ)-0.5*GAMT*APT*TOO(IJ)
AP(IJ)=AP(IJ)+(1.+0.5*GAMT)*APT
ENDIF
C
END DO
END DO
C
C=============================================================
C.....PROBLEM MODIFICATIONS - BOUNDARY CONDITIONS
C=============================================================
C
CALL BCT
C
C==============================================================
C.....UNDER-RELAXATION, SOLVING EQUATION SYSTEM FOR TEMPERATURE
C==============================================================
C
DO I=2,NIM
DO IJ=LI(I)+2,LI(I)+NJM
AP(IJ)=(AP(IJ)-AW(IJ)-AE(IJ)-AN(IJ)-AS(IJ))*URFI
SU(IJ)=SU(IJ)+(1.-URF(IEN))*AP(IJ)*T(IJ)
END DO
END DO
C
CALL SIPSOL(T,IEN)
C
RETURN
END
C
C
C#############################################################
SUBROUTINE PRINT(PHI,HEDPHI)
C#############################################################
C This routine prints 2D array in an easy to read format.
C--------------------------------------------------------------
PARAMETER (NX=42,NY=42,NXY=NX*NY,NPHI=4)
COMMON /ICONT/ NI,NJ,NIM,NJM,NIJ,NITP,LI(NX),IMON,
* JMON,IJMON,MAXIT,IU,IV,IP,IEN,IPR,JPR,NSW(NPHI),
* ITIM,ITST,NPRT
DIMENSION PHI(NXY)
CHARACTER*6 HEDPHI
https://web.stanford.edu/class/me469a/codes/2dc/pcol.f 17/31
3/7/23, 17:50 web.stanford.edu/class/me469a/codes/2dc/pcol.f
C--------------------------------------------------------
C
WRITE(2,20) HEDPHI
NL=(NI-1)/12+1
C
DO L=1,NL
IS=(L-1)*12+1
IE=MIN(NI,L*12)
WRITE(2,21) (I,I=IS,IE)
WRITE(2,22)
C
DO J=NJ,1,-1
WRITE(2,23) J,(PHI(LI(I)+J),I=IS,IE)
END DO
END DO
C
20 FORMAT(2X,26('*-'),5X,A6,5X,26('-*'))
21 FORMAT(3X,'I = ',I3,11I10)
22 FORMAT(2X,'J')
23 FORMAT(1X,I3,1P12E10.2)
C
RETURN
END
C
C
C#############################################################
SUBROUTINE SIPSOL(FI,IFI)
C#############################################################
C This routine incorporates the Stone's SIP-solver, see
C Chap. 5, Sect. 5.3.4.
C--------------------------------------------------------------
PARAMETER (NX=42,NY=42,NXY=NX*NY,NPHI=4)
COMMON /ICONT/ NI,NJ,NIM,NJM,NIJ,NITP,LI(NX),IMON,
* JMON,IJMON,MAXIT,IU,IV,IP,IEN,IPR,JPR,NSW(NPHI),
* ITIM,ITST,NPRT
COMMON /LOGIC/ LWRITE,LREAD,LTEST,LAXIS,LOUTS,LOUTE,
* LCAL(NPHI),LTIME
COMMON /RCONT/ SOR(NPHI),RESOR(NPHI),URF(NPHI),GAMT,
* BETA,GRAVX,GRAVY,GDS(NPHI),SORMAX,SLARGE,ALFA,
* GREAT,SMALL,ULID,OM,TPER
COMMON /COEF/ AE(NXY),AW(NXY),AN(NXY),AS(NXY),AP(NXY),
* SU(NXY),SV(NXY),APU(NXY),APV(NXY)
DIMENSION FI(NXY),UE(NXY),UN(NXY),RES(NXY)
REAL LW(NXY),LS(NXY),LPR(NXY)
LOGICAL LWRITE,LREAD,LTEST,LAXIS,LOUTS,LOUTE,LCAL,LTIME
C-------------------------------------------------------------
C
C.....COEFFICIENTS OF UPPER AND LOWER TRIANGULAR MATRICES
C
https://web.stanford.edu/class/me469a/codes/2dc/pcol.f 18/31
3/7/23, 17:50 web.stanford.edu/class/me469a/codes/2dc/pcol.f
DO I=2,NIM
DO IJ=LI(I)+2,LI(I)+NJM
LW(IJ)=AW(IJ)/(1.+ALFA*UN(IJ-NJ))
LS(IJ)=AS(IJ)/(1.+ALFA*UE(IJ-1))
P1=ALFA*LW(IJ)*UN(IJ-NJ)
P2=ALFA*LS(IJ)*UE(IJ-1)
LPR(IJ)=1./(AP(IJ)+P1+P2-LW(IJ)*UE(IJ-NJ)-LS(IJ)*UN(IJ-1))
UN(IJ)=(AN(IJ)-P1)*LPR(IJ)
UE(IJ)=(AE(IJ)-P2)*LPR(IJ)
END DO
END DO
C
C==============================================================
C.....INNER ITERATIONS LOOP
C==============================================================
C
DO L=1,NSW(IFI)
RESL=0.
C
C.....CALCULATE RESIDUAL AND OVERWRITE IT BY INTERMEDIATE VECTOR
C
DO I=2,NIM
DO IJ=LI(I)+2,LI(I)+NJM
RES(IJ)=SU(IJ)-AN(IJ)*FI(IJ+1)-AS(IJ)*FI(IJ-1)-
* AE(IJ)*FI(IJ+NJ)-AW(IJ)*FI(IJ-NJ)-AP(IJ)*FI(IJ)
RESL=RESL+ABS(RES(IJ))
RES(IJ)=(RES(IJ)-LS(IJ)*RES(IJ-1)-LW(IJ)*RES(IJ-NJ))*LPR(IJ)
END DO
END DO
C
C.....STORE INITIAL RESIDUAL SUM FOR CHECKING CONV. OF OUTER ITER.
C
IF(L.EQ.1) RESOR(IFI)=RESL
RSM=RESL/(RESOR(IFI)+1.E-20)
C
C.....BACK SUBSTITUTION AND CORRECTION
C
DO I=NIM,2,-1
DO IJ=LI(I)+NJM,LI(I)+2,-1
RES(IJ)=RES(IJ)-UN(IJ)*RES(IJ+1)-UE(IJ)*RES(IJ+NJ)
FI(IJ)=FI(IJ)+RES(IJ)
END DO
END DO
C
C.....CHECK CONVERGENCE OF INNER ITERATIONS
C
IF(LTEST) WRITE(2,*) ' ',L,'INNER ITER, RESL = ',RESL
IF(RSM.LT.SOR(IFI)) RETURN
C
https://web.stanford.edu/class/me469a/codes/2dc/pcol.f 19/31
3/7/23, 17:50 web.stanford.edu/class/me469a/codes/2dc/pcol.f
END DO
C
RETURN
END
C
C
C#############################################################
SUBROUTINE PBOUND(FI)
C#############################################################
C This routine calculates boundary values of pressure or
C pressure-correction by extrapolating (linearly) from
C inside.
C-------------------------------------------------------------
PARAMETER (NX=42,NY=42,NXY=NX*NY,NPHI=4)
COMMON /ICONT/ NI,NJ,NIM,NJM,NIJ,NITP,LI(NX),IMON,
* JMON,IJMON,MAXIT,IU,IV,IP,IEN,IPR,JPR,NSW(NPHI),
* ITIM,ITST,NPRT
COMMON /GEO/ X(NX),Y(NY),XC(NX),YC(NY),FX(NX),FY(NY),R(NY)
DIMENSION FI(NXY)
C--------------------------------------------------------------
C
C.....SOUTH AND NORTH BOUNDARIES
C
DO I=2,NIM
IJ=LI(I)+1
FI(IJ)=FI(IJ+1)+(FI(IJ+1)-FI(IJ+2))*FY(2)
IJ=LI(I)+NJ
FI(IJ)=FI(IJ-1)+(FI(IJ-1)-FI(IJ-2))*(1.-FY(NJM-1))
END DO
C
C..... WEST AND EAST BOUNDARIES
C
NJ2=2*NJ
DO J=2,NJM
IJ=LI(1)+J
FI(IJ)=FI(IJ+NJ)+(FI(IJ+NJ)-FI(IJ+NJ2))*FX(2)
IJ=LI(NI)+J
FI(IJ)=FI(IJ-NJ)+(FI(IJ-NJ)-FI(IJ-NJ2))*(1.-FX(NIM-1))
END DO
RETURN
END
C
C
C#############################################################
SUBROUTINE BCUV
C#############################################################
C In this routine, boundary conditions for U and V equations
C are implemented, i.e. fluxes through boundary cell faces
C are approximated. Here, the boundaries encountered in
https://web.stanford.edu/class/me469a/codes/2dc/pcol.f 20/31
3/7/23, 17:50 web.stanford.edu/class/me469a/codes/2dc/pcol.f
C cavity flows are considered; inlet and outlet boundaries
C require different treatment, see Sect. 7.7.
C-------------------------------------------------------------
PARAMETER (NX=42,NY=42,NXY=NX*NY,NPHI=4)
COMMON /ICONT/ NI,NJ,NIM,NJM,NIJ,NITP,LI(NX),IMON,
* JMON,IJMON,MAXIT,IU,IV,IP,IEN,IPR,JPR,NSW(NPHI),
* ITIM,ITST,NPRT
COMMON /VAR/ DENSIT,VISC,PRM,PRR,FLOMAS,FLOMOM,TREF,
* U(NXY),V(NXY),P(NXY),PP(NXY),T(NXY),F1(NXY),
* F2(NXY),DPX(NXY),DPY(NXY)
COMMON /GEO/ X(NX),Y(NY),XC(NX),YC(NY),FX(NX),FY(NY),R(NY)
COMMON /COEF/ AE(NXY),AW(NXY),AN(NXY),AS(NXY),AP(NXY),
* SU(NXY),SV(NXY),APU(NXY),APV(NXY)
C---------------------------------------------------------------
C
C.....SOUTH BOUNDARY (WALL; SHEAR FORCE IN X-DIR, DV/DY=0)
C
DO I=2,NIM
IJ=LI(I)+2
D=VISC*(X(I)-X(I-1))*R(1)/(YC(2)-YC(1))
APU(IJ)=APU(IJ)+D
SU(IJ) =SU(IJ) +D*U(IJ-1)
END DO
C
C.....NORTH BOUNDARY (WALL, SHEAR FORCE IN X-DIR, DV/DY=0)
C
DO I=2,NIM
IJ=LI(I)+NJM
D=VISC*(X(I)-X(I-1))*R(NJM)/(YC(NJ)-YC(NJM))
APU(IJ)=APU(IJ)+D
SU(IJ) =SU(IJ) +D*U(IJ+1)
END DO
C
C.....WEST BOUNDARY (WALL, SHEAR FORCE IN Y-DIR, DU/DX=0)
C
DO J=2,NJM
IJ=LI(2)+J
D=0.5*VISC*(Y(J)-Y(J-1))*(R(J)+R(J-1))/(XC(2)-XC(1))
APV(IJ)=APV(IJ)+D
SV(IJ) =SV(IJ) +D*V(IJ-NJ)
END DO
C
C.....EAST BOUNDARY (WALL, SHEAR FORCE IN Y-DIR, DU/DX=0)
C
DO J=2,NJM
IJ=LI(NIM)+J
D=0.5*VISC*(Y(J)-Y(J-1))*(R(J)+R(J-1))/(XC(NI)-XC(NIM))
APV(IJ)=APV(IJ)+D
SV(IJ) =SV(IJ) +D*V(IJ+NJ)
https://web.stanford.edu/class/me469a/codes/2dc/pcol.f 21/31
3/7/23, 17:50 web.stanford.edu/class/me469a/codes/2dc/pcol.f
END DO
C
RETURN
END
C
C#############################################################
SUBROUTINE BCT
C#############################################################
C In this routine, boundary conditions for the temperature
C equation are implemented, i.e. heat fluxes through the
C boundary cell faces are calculated. Here, specified wall
C temperature and adiabatic wall (zero heat flux) are considered;
C treatment at symmetry planes is the same as for an adiabatic
C wall, but inlet and outlet require different treatment,
C see Sect. 7.7.
C-------------------------------------------------------------
PARAMETER (NX=42,NY=42,NXY=NX*NY,NPHI=4)
COMMON /ICONT/ NI,NJ,NIM,NJM,NIJ,NITP,LI(NX),IMON,
* JMON,IJMON,MAXIT,IU,IV,IP,IEN,IPR,JPR,NSW(NPHI),
* ITIM,ITST,NPRT
COMMON /VAR/ DENSIT,VISC,PRM,PRR,FLOMAS,FLOMOM,TREF,
* U(NXY),V(NXY),P(NXY),PP(NXY),T(NXY),F1(NXY),
* F2(NXY),DPX(NXY),DPY(NXY)
COMMON /GEO/ X(NX),Y(NY),XC(NX),YC(NY),FX(NX),FY(NY),R(NY)
COMMON /COEF/ AE(NXY),AW(NXY),AN(NXY),AS(NXY),AP(NXY),
* SU(NXY),SV(NXY),APU(NXY),APV(NXY)
C--------------------------------------------------------------
C
C.....SOUTH BOUNDARY (ADIABATIC WALL, DT/DY=0, ZERO FLUX)
C
DO I=2,NIM
IJ=LI(I)+1
T(IJ)=T(IJ+1)
END DO
C
C.....NORTH BOUNDARY (ADIABATIC WALL, DT/DY=0, ZERO FLUX)
C
DO I=2,NIM
IJ=LI(I)+NJ
T(IJ)=T(IJ-1)
END DO
C
C.....WEST BOUNDARY (ISOTHERMAL WALL, NON-ZERO DIFFUSIVE FLUX)
C
DO J=2,NJM
IJ=LI(2)+J
D=0.5*VISC*PRR*(Y(J)-Y(J-1))*(R(J)+R(J-1))/(XC(2)-XC(1))
AP(IJ)=AP(IJ)+D
SU(IJ)=SU(IJ)+D*T(IJ-NJ)
https://web.stanford.edu/class/me469a/codes/2dc/pcol.f 22/31
3/7/23, 17:50 web.stanford.edu/class/me469a/codes/2dc/pcol.f
END DO
C
C..... EAST BOUNDARY (ISOTHERMAL WALL)
C
DO J=2,NJM
IJ=LI(NIM)+J
D=0.5*VISC*PRR*(Y(J)-Y(J-1))*(R(J)+R(J-1))/(XC(NI)-XC(NIM))
AP(IJ)=AP(IJ)+D
SU(IJ)=SU(IJ)+D*T(IJ+NJ)
END DO
C
RETURN
END
C
C############################################################
SUBROUTINE MODINP
C############################################################
C In this routine, input data is read, boundary conditions
C are defined, the grid is set up, and the variable values
C are initialized.
C-------------------------------------------------------------
PARAMETER (NX=42,NY=42,NXY=NX*NY,NPHI=4)
COMMON /ICONT/ NI,NJ,NIM,NJM,NIJ,NITP,LI(NX),IMON,
* JMON,IJMON,MAXIT,IU,IV,IP,IEN,IPR,JPR,NSW(NPHI),
* ITIM,ITST,NPRT
COMMON /LOGIC/ LWRITE,LREAD,LTEST,LAXIS,LOUTS,LOUTE,
* LCAL(NPHI),LTIME
COMMON /RCONT/ SOR(NPHI),RESOR(NPHI),URF(NPHI),GAMT,
* BETA,GRAVX,GRAVY,GDS(NPHI),SORMAX,SLARGE,ALFA,
* GREAT,SMALL,ULID,OM,TPER
COMMON /VAR/ DENSIT,VISC,PRM,PRR,FLOMAS,FLOMOM,TREF,
* U(NXY),V(NXY),P(NXY),PP(NXY),T(NXY),F1(NXY),
* F2(NXY),DPX(NXY),DPY(NXY)
COMMON /GEO/ X(NX),Y(NY),XC(NX),YC(NY),FX(NX),FY(NY),R(NY)
COMMON /VAROLD/ TIME,DT,DTR,UO(NXY),VO(NXY),TO(NXY),
* UOO(NXY),VOO(NXY),TOO(NXY)
LOGICAL LWRITE,LREAD,LTEST,LAXIS,LOUTS,LOUTE,LCAL,LTIME
CHARACTER TITLE*80
C-----------------------------------------------------------
C
C-----------------------------------------------------------
C.....READ INPUT DATA FROM UNIT 5
C-----------------------------------------------------------
C
READ(5,6) TITLE
6 FORMAT(A80)
C
C If LREAD is set true, results from previous run are read
C before starting computation; if LWRITE is set true, the
https://web.stanford.edu/class/me469a/codes/2dc/pcol.f 23/31
3/7/23, 17:50 web.stanford.edu/class/me469a/codes/2dc/pcol.f
C results of calculation are written onto a file for post-
C processing or continuation in a later run; if LTEST is set
C true, additional output is printed (global mass conservation
C check, convergence of inner iterations); if LOUTS is set
C true, the initial field values of ll variables are printed
C out; if LOUTE is set true, the final values of all variables
C are printed out; if LTIME is set true, unsteady calculation
C is performed.
C
READ(5,*) LREAD,LWRITE,LTEST,LOUTS,LOUTE,LTIME
C
C MAXIT is the maximum number of outer iterations to be performed
C (e.g. one can run 10 outer iterations with LTEST=TRUE to check
C if everything is OK, then resume calculation with LTEST=FALSE);
C IMON and JMON are the I and J index of the monitoring location
C (variable values at this location are printed after every outer
C iteration); IPR and JPR are the I and J index of the node at
C which the pressure is kept fixed (usually zero; reference
C location); SORMAX is the level of the residual norm at which
C outer iterations are stoped (converged solution); SLARGE is the
C level of the residual norm at which iterations are stoped because
C of divergence; ALFA is the parameter in the SIP solver (see
C example input file PCOL.INP for typical values).
C
READ(5,*) MAXIT,IMON,JMON,IPR,JPR,SORMAX,SLARGE,ALFA
C
C DENSIT is the fluid density (here assumed constant); VISC is
C the fluid dynamic viscosity (here assumed constant); PRM is
C the fluid Prandtl number; GRAVX and GRAVY are the X and Y
C component of the gravity vector; BETA is the volumetric
C expansion factor for the fluid; TH, TC, and TREF are the hot
C wall, cold wall, and reference temperature, respectively.
C
READ(5,*) DENSIT,VISC,PRM,GRAVX,GRAVY,BETA,TH,TC,TREF
C
C UIN, VIN, PIN, and TIN are the values of U, V, P, and T used
C to initialize fields (usually zero, or some mean values);
C ULID is the lid velocity for the lid-driven flow; TPER is the
C oscillation period in the case of unsteady flow with oscillating
C lid.
C
READ(5,*) UIN,VIN,PIN,TIN,ULID,TPER
C
C ITST is the number of time steps to be performed (1 if steady
C flow is considered); results are saved on file for every NPRTth
C time step; DT is the time step size; GAMT is the blending factor
C for time differencing schemes (GAMT=1 -> three time levels scheme,
C GAMT=0 -> Euler implicit scheme).
C
https://web.stanford.edu/class/me469a/codes/2dc/pcol.f 24/31
3/7/23, 17:50 web.stanford.edu/class/me469a/codes/2dc/pcol.f
READ(5,*) ITST,NPRT,DT,GAMT
C
C LCAL(I) defines which equations are to be solved (I defines
C variable as follows: 1 -> U, 2 -> V, 3 -> P', 4 -> T).
C
READ(5,*) (LCAL(I),I=1,NPHI)
C
C URF(I) is the under-relaxation factor for the Ith variable.
C
READ(5,*) (URF(I),I=1,NPHI)
C
C SOR(I) is the required ratio of reduction of the residual norm
C during inner iterations for Ith variable before they are stoped
C (e.g. value 0.2 means the residual norm should be reduced by a
C factor of 5; this is usually sufficient for inner iterations
C before updating the matrix).
C
READ(5,*) (SOR(I),I=1,NPHI)
C
C NSW(I) is the maximum allowed number of inner iterations for the
C Ith variable (for U, V, and T, one inner iteration by SIP is
C sufficiant; for P', 5 to 10 may be required to satisfy the
C convergencee criterion).
C
READ(5,*) (NSW(I),I=1,NPHI)
C
C GDS(I) is the blending factor for UDS and CDS in the equation for
C Ith variable (convective terms; value 1.0 means CDS (second order),
C 0.0 means UDS (first order), any value between 0.0 and 1.0 can
C be used). The value 1.0 is recomended, except for coarse grids,
C in case convergence problems are encountered.
C
READ(5,*) (GDS(I),I=1,NPHI)
C
C.....SET SOME CONTROL VARIABLES
C
IU=1
IV=2
IP=3
IEN=4
SMALL=1.E-15
GREAT=1.E15
DTR=1./DT
OM=8.*ATAN(1.)/TPER
PRR=1./PRM
C
C-----------------------------------------------------------
C.....READ GRID DATA (GENERATED USING GRID GENERATOR FOR MG.)
C-----------------------------------------------------------
https://web.stanford.edu/class/me469a/codes/2dc/pcol.f 25/31
3/7/23, 17:50 web.stanford.edu/class/me469a/codes/2dc/pcol.f
C
C Note: array dimensions NX and NY should be equal to or larger
C than NI and NJ (which are equal to the number of CVs in X and
C Y direction plus two boundary nodes, respectively). LI(I) is
C used for conversion of 2D into 1D indices, see Table 3.1).
C
READ(1,*) I
READ(1,*) J
READ(1,*) NI
READ(1,*) NJ
READ(1,*) IJ
READ(1,*) (X(I),I=1,NI)
READ(1,*) (Y(J),J=1,NJ)
DO I=1,NI
LI(I)=(I-1)*NJ
END DO
NIM=NI-1
NJM=NJ-1
NIJ=NI*NJ
C
C.....X- COORDINATES OF CV-CENTERS
C
DO I=2,NIM
XC(I)=0.5*(X(I)+X(I-1))
END DO
XC(1)=X(1)
XC(NI)=X(NIM)
C
C.....Y- COORDINATES OF CV-CENTERS
C
DO J=2,NJM
YC(J)=0.5*(Y(J)+Y(J-1))
END DO
YC(1)=Y(1)
YC(NJ)=Y(NJM)
C
C.....INTERPOLATION FACTORS (see Sect. 4.4.2, Eq. (4.14))
C
DO I=1,NIM
FX(I)=(X(I)-XC(I))/(XC(I+1)-XC(I))
END DO
C
DO J=1,NJM
FY(J)=(Y(J)-YC(J))/(YC(J+1)-YC(J))
END DO
C
C.....SET RADIUS (1. FOR PLANE, Y(J) FOR AXI-SYMMETRIC GEOMETRY)
C
IF(LAXIS) THEN
https://web.stanford.edu/class/me469a/codes/2dc/pcol.f 26/31
3/7/23, 17:50 web.stanford.edu/class/me469a/codes/2dc/pcol.f
DO J=1,NJ
R(J)=Y(J)
END DO
ELSE
DO J=1,NJ
R(J)=1.
END DO
ENDIF
C
C---------------------------------------------------
C.....BOUNDARY AND INITIAL CONDITIONS
C---------------------------------------------------
C
C.....WEST AND EAST ISOTHERMAL BOUNDARIES
C
DO J=1,NJ
T(J)=TH
END DO
C
DO J=1,NJ
T(LI(NI)+J)=TC
END DO
C
C.....NORTH WALL VELOCITY (FOR LID-DRIVEN CAVITY)
C
IF(LTIME) THEN
CALL BCTIME
ELSE
DO I=2,NIM
U(LI(I)+NJ)=ULID
END DO
ENDIF
C
C.....INITIAL VARIBLE VALUES (INITIAL CONDITIONS)
C
DO I=2,NIM
DO IJ=LI(I)+2,LI(I)+NJM
U(IJ)=UIN
V(IJ)=VIN
T(IJ)=TIN
P(IJ)=PIN
UO(IJ)=UIN
VO(IJ)=VIN
TO(IJ)=TIN
END DO
END DO
C
C------------------------------------------------------
C.....INITIAL OUTPUT - PRINTOUT OF FLOW PARAMETERS
https://web.stanford.edu/class/me469a/codes/2dc/pcol.f 27/31
3/7/23, 17:50 web.stanford.edu/class/me469a/codes/2dc/pcol.f
C------------------------------------------------------
C
WRITE(2,601) TITLE,DENSIT,VISC
601 FORMAT(1H1,//,10X,A80,/,10X,50('*'),/,10X,
* ' FLUID DENSITY : ',1P1E10.4,/,10X,
* ' DYNAMIC VISCOSITY: ',1P1E10.4)
IF(ULID.NE.0.) THEN
WRITE(2,*) ' MAX. LID VELOCITY: ',ULID
ENDIF
IF(LCAL(IEN)) THEN
WRITE(2,*) ' GRAVITY IN X-DIR.: ',GRAVX
WRITE(2,*) ' GRAVITY IN Y-DIR.: ',GRAVY
WRITE(2,*) ' HOT WALL TEMPER.: ',TH
WRITE(2,*) ' COLD WALL TEMPER.: ',TC
WRITE(2,*) ' PRANDTL NUMBER : ',PRM
ENDIF
WRITE(2,*) ' '
WRITE(2,*) ' ALFA PARAMETER : ',ALFA
WRITE(2,*) ' '
WRITE(2,*) ' UNDERRELAXATION FACTORS'
WRITE(2,*) ' ========================'
WRITE(2,*) ' U-VELOCITY : ',URF(IU)
WRITE(2,*) ' V-VELOCITY : ',URF(IV)
WRITE(2,*) ' PRESSURE : ',URF(IP)
WRITE(2,*) ' TEMPERATURE : ',URF(IEN)
WRITE(2,*) ' '
WRITE(2,*) ' SPATIAL BLENDING FACTORS (CDS-UDS)'
WRITE(2,*) ' =================================='
WRITE(2,*) ' U-VELOCITY : ',GDS(IU)
WRITE(2,*) ' V-VELOCITY : ',GDS(IV)
WRITE(2,*) ' TEMPERATURE : ',GDS(IEN)
WRITE(2,*) ' '
IF(LTIME) THEN
WRITE(2,*) ' UNSTEADY FLOW SIMULATION'
WRITE(2,*) ' ================================='
WRITE(2,*) ' TIME STEP SIZE : ',DT
WRITE(2,*) ' BLEND. FACTOR (3L-IE): ',GAMT
WRITE(2,*) ' OSCILLATION PERIOD : ',TPER
ENDIF
WRITE(2,*) ' '
WRITE(2,*) ' '
RETURN
END
C
C
C###########################################################
SUBROUTINE BCTIME
C###########################################################
C Setting boundary values for each time step
https://web.stanford.edu/class/me469a/codes/2dc/pcol.f 28/31
3/7/23, 17:50 web.stanford.edu/class/me469a/codes/2dc/pcol.f
C-----------------------------------------------------------
PARAMETER (NX=42,NY=42,NXY=NX*NY,NPHI=4)
COMMON /ICONT/ NI,NJ,NIM,NJM,NIJ,NITP,LI(NX),IMON,
* JMON,IJMON,MAXIT,IU,IV,IP,IEN,IPR,JPR,NSW(NPHI),
* ITIM,ITST,NPRT
COMMON /RCONT/ SOR(NPHI),RESOR(NPHI),URF(NPHI),GAMT,
* BETA,GRAVX,GRAVY,GDS(NPHI),SORMAX,SLARGE,ALFA,
* GREAT,SMALL,ULID,OM,TPER
COMMON /VAR/ DENSIT,VISC,PRM,PRR,FLOMAS,FLOMOM,TREF,
* U(NXY),V(NXY),P(NXY),PP(NXY),T(NXY),F1(NXY),
* F2(NXY),DPX(NXY),DPY(NXY)
COMMON /VAROLD/ TIME,DT,DTR,UO(NXY),VO(NXY),TO(NXY),
* UOO(NXY),VOO(NXY),TOO(NXY)
C-----------------------------------------------------------
C
C.....LID VELOCITY AS A FUNCTION OF TIME
C
DO I=2,NIM
IJ=LI(I)+NJ
U(IJ)=ULID*SIN(OM*TIME)
END DO
C
RETURN
END
C
C
C##########################################################
SUBROUTINE OUT2
C##########################################################
C Output of some integral quantities for checking
C convergence towards grid-independent solution and
C estimation of discretization errors
C----------------------------------------------------------
PARAMETER (NX=42,NY=42,NXY=NX*NY,NPHI=4)
COMMON /ICONT/ NI,NJ,NIM,NJM,NIJ,NITP,LI(NX),IMON,
* JMON,IJMON,MAXIT,IU,IV,IP,IEN,IPR,JPR,NSW(NPHI),
* ITIM,ITST,NPRT
COMMON /LOGIC/ LWRITE,LREAD,LTEST,LAXIS,LOUTS,LOUTE,
* LCAL(NPHI),LTIME
COMMON /VAR/ DENSIT,VISC,PRM,PRR,FLOMAS,FLOMOM,TREF,
* U(NXY),V(NXY),P(NXY),PP(NXY),T(NXY),F1(NXY),
* F2(NXY),DPX(NXY),DPY(NXY)
COMMON /GEO/ X(NX),Y(NY),XC(NX),YC(NY),FX(NX),FY(NY),R(NY)
LOGICAL LWRITE,LREAD,LTEST,LAXIS,LOUTS,LOUTE,LCAL,LTIME
C--------------------------------------------------------------
C
C.....HEAT FLUXES AT WEST AND EAST ISOTHERMAL WALLS
C
WRITE(2,*) ' '
https://web.stanford.edu/class/me469a/codes/2dc/pcol.f 29/31
3/7/23, 17:50 web.stanford.edu/class/me469a/codes/2dc/pcol.f

C
IF(LCAL(IEN)) THEN
QWALL=0.
DO J=2,NJM
IJ=LI(1)+J
S=0.5*(R(J)+R(J-1))*(Y(J)-Y(J-1))
D=VISC*PRR*S/(XC(2)-XC(1))
QWALL=QWALL+D*(T(IJ+NJ)-T(IJ))
END DO
WRITE(2,*) ' HEAT FLUX THROUGH WEST WALL: ',QWALL
C
QWALL=0.
DO J=2,NJM
IJ=LI(NI)+J
S=0.5*(R(J)+R(J-1))*(Y(J)-Y(J-1))
D=VISC*PRR*S/(XC(NI)-XC(NIM))
QWALL=QWALL+D*(T(IJ)-T(IJ-NJ))
END DO
WRITE(2,*) ' HEAT FLUX THROUGH EAST WALL: ',QWALL
ENDIF
C
C--------------------------------------------------------------------
C.....STREAMFUNCTION VALUES AT CV-VERTICES (ZERO AT SOUTH-WEST CORNER)
C--------------------------------------------------------------------
PP(LI(1)+1)=0.
C
C.....WEST BOUNDARY (APPLICABLE FOR INLET OR OUTLET)
C
DO J=2,NJM
IJ=LI(1)+J
PP(IJ)=PP(IJ-1)+F1(IJ)
END DO
C
C.....SOUTH BOUNDARY (APPLICABLE FOR INLET OR OUTLET)
C
DO I=2,NIM
IJ=LI(I)+1
PP(IJ)=PP(IJ)-F2(IJ)
C
C.....INNER REGION
C
DO J=2,NJM
IJ=LI(I)+J
PP(IJ)=PP(IJ-1)+F1(IJ)
END DO
END DO
C
C.....STRENGTH OF PRIMARY AND SECONDARY EDDY (MIN and MAX values)
C
https://web.stanford.edu/class/me469a/codes/2dc/pcol.f 30/31
3/7/23, 17:50 web.stanford.edu/class/me469a/codes/2dc/pcol.f

PSIMIN= 1.E20
PSIMAX=-1.E20
C
DO I=1,NIM
DO J=1,NJM
IJ=LI(I)+J
PSIMIN=MIN(PSIMIN,PP(IJ))
PSIMAX=MAX(PSIMAX,PP(IJ))
END DO
END DO
C
WRITE(2,*) ' '
WRITE(2,*) ' MAXIMUM STREAMFUNCTION VALUE: ',PSIMAX
WRITE(2,*) ' MINIMUM STREAMFUNCTION VALUE: ',PSIMIN
C
RETURN
END

https://web.stanford.edu/class/me469a/codes/2dc/pcol.f 31/31

You might also like