11-1-2ProgramreadingCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCMODULE STARTMODULE USER LPARAMETER(NT-100.NJ-200.NIJ-NT.NFMAX-10.NFX4-NFMAX+4)*求***************求***水********水****求***Define newCHARACTER*8TITLE(NFX4)INTEGER*4IJLOGICAL LSOLVE(NFX4),LPRINT(NFX4),LBLK(NFX4),LSTOPvariablesC*****************************************REAL*8,DIMENSION(NI,NJ,NFX4)::REA*8,DIMENSION(NINJ,6):COF,COFU,COFVCOFENDMODULEREAL8DIMENSION(NIND)::PRHO,GAM,CP,CONAIP,AIMAJPAJMREAL*8,DIMENSION(NI,NJ)::U,V,PC,,DU,DN,UHAT,VHATCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCREAL*8,DIMENSION(NI)::X,XU,XDIF,XCVXCVS,XCVI,XCVIPREAL*B,DIMENSION(NJ)::Y,Y,YDIF,YCV,YCVS,YCVR,YCVRS,ARX,ARXJ,SUBROUTINE USERARXJP.R.RMNSXSXMN************************水*****************REAL*8,DIMENSION(NI)::FV,FVPFX,FXMREAL8,DIMENSION(NJ)::FY,FYMUSESTARTLREAL*8DIMENSION(NIJ)::PT,QTREAL8RELAX(NFX4),TIME,DTXL,YL,RHOCON,CPCONUSEUSER LINTEGER*4N.P.NRHONGAMNP1,23M1,M2,M3IMPLICITNONEIST,JST,ITR,ASMODE,NMES(NFX4),IPREPRREAL*8SMAX.SSUMC******************************************REAL*8FLOW,DIFF,ACOFCPROBLEMONECExampleofUSER structureC************************************************************ENTRYGRID!Numbers of iterationLAST-1014thvariablefor solvingtemperature equationModuleLSOLVE(4)=TRUELPRINT(4)=TRUE! Print out the temperature filedGRIDTITLE(4)=.TEMP.Titleto output temperature field6/91
6/91 11-1-2 Program reading !Title to output temperature field. Define new variables !Numbers of iteration !4 th variable for solving temperature equation !Print out the temperature filed CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC MODULE USER_L C*************************************************************** INTEGER*4 I,J C*************************************************************** END MODULE CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC SUBROUTINE USER C**************************************************************** USE START_L USE USER_L IMPLICIT NONE C***************************************************************** C-PROBLEM ONE- C Example of USER structure C***************************************************************** ENTRY GRID LAST=10 LSOLVE(4)=.TRUE. LPRINT(4)=.TRUE. TITLE(4)=' .TEMP. ' Module GRID
XL=1.!Computation domainYL=2.!MODE=l is adefault (Cartesian)L1=7!GridnumberM1=7CALLUGRID!GenerateinterfacepositionofCVRETURNENTRYSTARTDO 100 J=1,M1DO 101 I=1,L1ModuleT(I,J)=0.!Initial temperaturevaluesSTARTIF(I=-=1.OR.I== L1) T(I,J)=(X(I)+Y()+X(I)*Y(U) ! Unchanged B.CT=x+y+xyIF(J==1.OR.J== M1) T(I,J)-(X(I)+Y(J)+X(I)*Y() are given here101ENDDOPROGRAM MAIN100ENDDOUSE START LIMPLICIT NONERETURNOPEN(8,FILE=RESULT.TXT)CALL GRIDModuleENTRYDENSE ! Empty, but keep itCALL SETUP1DENSERETURNCALL STARTDO WHILE(.NOT.LSTOP)3CALL DENSEModuleCALL BOUNDENTRY BOUND ! Empty, B.C. has been set up in STARTCALL OUTPUTBOUNDRETURNCALL SETUP2ENDDO
7/91 !Empty, but keep it !Empty, B.C. has been set up in START ! Unchanged B.C. are given here ! Initial temperature values. XL=1. YL=2. L1=7 M1=7 CALL UGRID RETURN ! MODE=1 is a default (Cartesian) ! Computation domain ! Grid number ! Generate interface position of CV T=x + y + xy ENTRY START DO 100 J=1,M1 DO 101 I=1,L1 T(I,J)=0. IF(I==1.OR.I== L1) T(I,J)=(X(I)+Y(J)+X(I)*Y(J)) IF(J==1.OR.J== M1) T(I,J)=(X(I)+Y(J)+X(I)*Y(J)) 101 ENDDO 100 ENDDO RETURN * ENTRY DENSE RETURN * ENTRY BOUND RETURN Module START Module DENSE Module BOUND
PROGRAM MAINENTRYOUTPUTUSE START L! The title only needs output onceIF(ITER -0) THENIMPLICIT NONE! Outputto screenPRINT401OPEN(8,FILERESULT.TXT)WRITE(8,401) ! Output through file401FORMAT(1X:ITER13X,T(4.4),14X,T(5,3))!ITERT(4,4)T(5,3)ModuleELSEOUTPUTPRINT403,ITER,T(4.4), T(5,3)! Print out two temps. in eachWRITE(8.403)ITER T(4,4),T(5,3)iterationforobservation403FORMAT(1X,15,2F20.6)ENDIF!Output2DfieldafterIF(ITER - LAST) CALL PRINTgetting converged solutionRETURNENTRYGAMSORIF(ITER==O)THEN! constant thermo-properties, call once onlyDO500J=1.M1ModuleDO 501 I=-1L1V·(VT)=0GAM(I,J)-1.GAMSOR501ENDDO! The zero initial values of S., S, have been set in500ENDDOELSE“RESET"Only Tis set up here.ENDIFRETURNEND8/91
8/91 !Print out two temps. in each iteration for observation !Output 2D field after getting converged solution. !constant thermo-properties, call once only !The title only needs output once !The zero initial values of Sc , Sp have been set in “RESET”. Only is set up here. !Output to screen !Output through file ENTRY OUTPUT IF(ITER == 0) THEN PRINT 401 WRITE(8,401) 401 FORMAT(1X,' ITER',13X,'T(4,4)',14X,'T(5,3)') ELSE PRINT 403, ITER,T(4,4), T(5,3) WRITE(8,403) ITER, T(4,4), T(5,3) 403 FORMAT(1X,I5,2F20.6) ENDIF IF(ITER == LAST) CALL PRINT RETURN * ENTRY GAMSOR IF(ITER == 0) THEN DO 500 J=1,M1 DO 501 I=1,L1 GAM(I,J)=1. 501 ENDDO 500 ENDDO ELSE ENDIF RETURN END Module OUTPUT Module GAMSOR ! ITER T(4,4) T(5,3) = ( T ) 0
11-1-3AnalysisofresultsCOMPUTATIONINCARTESIANCOORDINATES****求****************求*********水求求*****ENTRY OUTPUTIF(ITER==0)THENT(4.4)T(5.3)PRINT401ITERWRITE(8,401)00.0000000.000000401FORMAT(1X,ITER,13X,T(4,4),14X,T(5,3))11.9999781.720364ELSE2PRINT403,ITER,T(4,4),T(5,3)2.0000001.720001WRITE(8,403)ITER,T(4,4),T(5,3)32.0000001.720000403FORMAT(1X,I5,2F20.6)42.0000001.720000ENDIF5IF(ITER==LAST)CALLPRINT2.0000001.720000RETURN62.0000001.72000072.0000001.7200002F-two floating82.0000001.720000point number92.0000001.720000102.0000001.72000020.6-Every data take 202F20.6401FORMAT(1X,ITER',13X,T(4,4),14X,'T(5,3))places;afterdecimal(小数点)403FORMAT(1X.I5,2F20.6)there are 6 digits9/91
9/91 ITER T(4,4) T(5,3) 0 0.000000 0.000000 1 1.999978 1.720364 2 2.000000 1.720001 3 2.000000 1.720000 4 2.000000 1.720000 5 2.000000 1.720000 6 2.000000 1.720000 7 2.000000 1.720000 8 2.000000 1.720000 9 2.000000 1.720000 10 2.000000 1.720000 11-1-3 Analysis of results 2F20.6 2F-two floatingpoint number 20.6-Every data take 20 places; after decimal (小数点) there are 6 digits 403 FORMAT(1X,I5,2F20.6) 401 FORMAT(1X,' ITER',13X,'T(4,4)',14X,'T(5,3)') COMPUTATION IN CARTESIAN COORDINATES ****************************************
LPRINT(4)=.TRUE.TITLE(4)=TEMPNode numbers: 7 * 7IF(ITER==LAST)CALLPRINTRETURN******************水*********************************.TEMP.324576I-1JA2.00E+002.30E+002.90E+003.50E+004.10E+004.70E+005.00E+0061.80E+002.08E+002.64E+003.20E+003.76E+004.32E+004.60E+005140E+001.64F+00.2.12E+002.60F+00.3.08E+003.56E+00.3.80E+0041.00E+001.20E+001.60E+002.00E+002.40E+002.80E+003.00E+0036.00E-017.60E-011.08E+001.40E+001.72E+002.04E+002.20E+0022.00E-013.20E-015.60E-01:8.00E-011.04E+00128E+001.40E+0010.00E+001.00E-013.00E-015.00E-017.00E-019.00E-011.00E+00From initial fieldT=x+y+xy10/91
10/91 ************************** .TEMP. ************************** I = 1 2 3 4 5 6 7 J 7 2.00E+00 2.30E+00 2.90E+00 3.50E+00 4.10E+00 4.70E+00 5.00E+00 6 1.80E+00 2.08E+00 2.64E+00 3.20E+00 3.76E+00 4.32E+00 4.60E+00 5 1.40E+00 1.64E+00 2.12E+00 2.60E+00 3.08E+00 3.56E+00 3.80E+00 4 1.00E+00 1.20E+00 1.60E+00 2.00E+00 2.40E+00 2.80E+00 3.00E+00 3 6.00E-01 7.60E-01 1.08E+00 1.40E+00 1.72E+00 2.04E+00 2.20E+00 2 2.00E-01 3.20E-01 5.60E-01 8.00E-01 1.04E+00 1.28E+00 1.40E+00 1 0.00E+00 1.00E-01 3.00E-01 5.00E-01 7.00E-01 9.00E-01 1.00E+00 From initial field T = x + y + xy Node numbers: 7 * 7