c
c c C To activate the coding set S2SR=T in the Q1 file. C C Limitations: Note that the coding assumes that the radiative C exchange coefficients provided by the user take into account C the emissivities, the Stefan-Boltzmann constant, but not the C zone area. C C Click here c for full information C----------------------------------------------------------------------- SUBROUTINE GXS2SR INCLUDE 'patcmn' INCLUDE 'farray' INCLUDE 'satear' INCLUDE 'grdloc' INCLUDE 'satgrd' INCLUDE 'grdear' INCLUDE 'grdbfc' INCLUDE 'parear' PARAMETER (NLG=100, NIG=100, NRG=200, NCG=100) C.... Set dimension of patch-name array here. WARNING: the array C NAMPAT in the MAIN program of the satellite, and EARTH must have C the same dimension. PARAMETER (NPNAM=200) C C.... To be able to access patchwise coefficients and values for qdot bc. COMMON/ICOVL/M04,I0PHI C COMMON/NAMFN/NAMFUN,NAMSUB COMMON/LGRND/LG(NLG)/IGRND/IG(NIG)/RGRND/RG(NRG)/CGRND/CG(NCG) COMMON/LUNITS/LUNIT(60)/INFXY/INFO(20) COMMON/GENL/LGFL1(43),RESTRT,LGFL45(16) COMMON/GENI/NXNY,IGFL1(44),LOOPZ,IGFL47(14) LOGICAL LGFL1,RESTRT,LGFL45 C C.... Common LUSF for zero location of F-array COMMON/LUSF/L0RPNO,L0AVRF,L0AVTS,L0AVSH,L0RC,L0CC,L0CCF, 1 L0QFLX,L0RFAC,L0COND,L0WPNO,L0CP1,L0HTC,L0AE,L0AN,L0AS,L0AH, 1 L0EXRD,L0EXLN,L0QEXT,L0XCOF,L0KDM,L0NTS C LOGICAL LG,LFOUND,LTURB,LINIL,GTZ,LTZ,EQZ,QEQ,NEZ,LEXR LOGICAL LDUM, NOTEXISTZONE, EXISTSPATCH CHARACTER*4 CG CHARACTER*6 NAMFUN,NAMSUB C SAVE NTZ,JTEM1,JPRPS,IVISIT,LURFAC,LUPHI,IGRP97,IGP914, 1 LTURB,LINIL,LEXR C NAMSUB='GXS2SR' C----------------------------------------------------------------------- C.... Group 1 Section 1, for opening data files | C----------------------------------------------------------------------- IF(IGR.EQ.1.AND.ISC.EQ.1) THEN IF(.NOT.NULLPR) THEN IF(MIMD.AND.NPROC.GT.1)THEN IF(MYID.EQ.0)THEN CALL WRYT40('GROUND file is GXS2SR.FOR of: 150416 ') CALL WRIT40('GROUND file is GXS2SR.FOR of: 150416 ') ENDIF ELSE CALL WRYT40('GROUND file is GXS2SR.FOR of: 150416 ') CALL WRIT40('GROUND file is GXS2SR.FOR of: 150416 ') ENDIF ENDIF C.... Initialise IVISIT IVISIT=0 C.... LINIL determines whether the users part of the f-array needs C to be initialised LINIL=.TRUE. C.... Assign units for file openings LUPHI=LUNIT(23) IF(LUPHI.EQ.0) LUPHI=LUNIT(22) LURFAC=33 C.... Open data file containing internal radiative exchange coefs C INQUIRE if RADI.DAT exists in the local directory else CALL C GX2DVF IF(MIMD.AND.NPROC.GT.1)THEN IF(MYID.EQ.0)INQUIRE(FILE='RADI.DAT',EXIST=LEXR) CALL RTFALI(LEXR,1) IF(LEXR)THEN IF(MYID.EQ.0) OPEN(LURFAC,FILE='RADI.DAT',STATUS='OLD', 1 ACCESS='SEQUENTIAL',FORM='FORMATTED') ELSE CALL SET_ERR(560, * 'Error. File RADI.DAT is absent at parallel run.',1) RETURN ENDIF ELSE INQUIRE(FILE='RADI.DAT',EXIST=LEXR) IF(LEXR) OPEN(LURFAC,FILE='RADI.DAT',STATUS='OLD', 1 ACCESS='SEQUENTIAL',FORM='FORMATTED') ENDIF C C----------------------------------------------------------------------- C.... Group 1 Section 2, for PRELIMINARIES such as define zero | C location of user part of F-array, Reading in the exchange | C coefficients, storing the PHOENICS PATCH numbers of each | C THERMAL zone PATCH. | C----------------------------------------------------------------------- C.... Perform preliminaries only on the first visit IF(IVISIT.EQ.0) THEN IVISIT=1 C.... Determine if flow is turbulent LTURB=.FALSE. IF(NEZ(ENUT)) LTURB=.TRUE. C.... Read in header and number of thermal zones IF(LEXR) THEN IF(MIMD.AND.NPROC.GT.1)THEN IF(MYID.EQ.0)THEN READ(LURFAC,*) READ(LURFAC,*) NTZ ENDIF CALL RTFAII(NTZ,1) ELSE READ(LURFAC,*) READ(LURFAC,*) NTZ ENDIF ELSE C.... Loop through all patches to determine patch numbers for radiative C patches. At present assumes that one patch for each thermal zone C and that each patch commences with '@RI' NTZ=0 DO 10 IPN=1,NUMPAT IF(NAMPAT(IPN)(1:3).EQ.'@RI') NTZ=NTZ + 1 10 CONTINUE ENDIF C C.... Define zero locations for the relevant 1-d stores C L0RPNO for PHOENICS PATCH numbers of all radiative patches C L0AVRF for mean radiative flux W/m2 C L0AVTS for mean surface radiation temperatures K C L0AVSH for total source of heat flux, conductive and convective W/m2 C L0RC for radiative coefficients W/m2/K C L0CC for conductive coefficients W/m2/K C L0CCF for heat transfer coefficients for fluid side W/m2/K C L0QFLX for value of prescribed heat flux zone conditions W/m2 C L0RFAC for radiative exchange coefficient C L0COND for laminar thermal conductivity W/m2 C L0EXRD for external radiative exchange factor and temperature C L0EXLN for external linear heat transfer coefficient and temperature C L0QEXT for sum of external linear and radiative heat flux C L0KDM for conductivity divided by metal thickness for thin plates C L0NTS for node number of adjacent thermal node of thin plates C L0XCOF for sum of external linear and radiative coefficient C L0WPNO for PHOENICS WALL PATCH numbers corrsponding to the C radiative patches C L0CP1 for specific heat at constant pressure J/kg/K C L0HTC for heat transfer coefficient when turbulent flow C CALL GXMAKE(L0RPNO,NTZ,'RPNO') CALL GXMAKE(L0AVRF,NTZ,'AVRF') CALL GXMAKE(L0AVTS,NTZ,'AVTS') CALL GXMAKE(L0AVSH,NTZ,'AVSH') CALL GXMAKE(L0RC ,NTZ,'RC ') CALL GXMAKE(L0CC ,NTZ,'CC ') CALL GXMAKE(L0CCF ,NTZ,'CCF ') CALL GXMAKE(L0QFLX,NTZ,'QFLX') CALL GXMAKE(L0RFAC,NTZ*NTZ,'RFAC') CALL GXMAKE(L0COND,NXNY*NZ,'COND') CALL GXMAKE(L0EXRD,2*NTZ,'EXRD') CALL GXMAKE(L0EXLN,2*NTZ,'EXLN') CALL GXMAKE(L0QEXT,NTZ,'QEXT') CALL GXMAKE(L0XCOF,NTZ,'XCOF') CALL GXMAKE(L0KDM ,NTZ,'KDM ') CALL GXMAKE(L0NTS ,NTZ,'NTS ') IF(LTURB) THEN CALL GXMAKE(L0WPNO,2*NTZ,'WPNO') CALL GXMAKE(L0CP1 ,NXNY*NZ,'CP1 ') CALL GXMAKE(L0HTC ,NXNY*NZ,'HTC ') CALL ZERNUM(L0RPNO,L0HTC+NXNY*NZ - L0RPNO) ELSE CALL ZERNUM(L0RPNO,L0NTS+NTZ - L0RPNO) ENDIF C C.... Loop through all patches to obtain patch numbers for radiative C patches. At present it is assumed that there is one patch for C each thermal zone . C IR=0 DO 11 IPN=1,NUMPAT C.... It is assumed that internal radiative thermal zones have C PATCH name commencing with '@RI' for internal radiation. IF(NAMPAT(IPN)(1:3).EQ.'@RI') THEN IR = IR+1 F(L0RPNO+IR) = FLOAT(IPN) ENDIF 11 CONTINUE C C.... Check that number of patches found for thermal zones are equal C to the number of thermal zones read in from files. Note that C this is not a thorough check when LEXR is .FALSE.. C IF(IR.NE.NTZ) THEN IF(MIMD.AND.NPROC.GT.1)THEN IF(MYID.EQ.0)THEN CALL WRITST CALL WRITBL WRITE(LUPR1,*) ' user set number of radiative zone = ', 1 NTZ WRITE(LUPR1,*) 'Number of PATCHES found in Q1 for ' 1 //'radiative zone' WRITE(LUPR1,*) 'is insufficient. Number of PATCHES' 1 //' found = ',IR WRITE(LUPR1,*) 'Specify remaining PATCHES ' ENDIF ELSE CALL WRITST CALL WRITBL WRITE(LUPR1,*) ' user set number of radiative zone = ',NTZ WRITE(LUPR1,*) 'Number of PATCHES found in Q1 for' 1 //' radiative zone' WRITE(LUPR1,*) 'is insufficient. Number of PATCHES' 1 //' found = ',IR WRITE(LUPR1,*) 'Specify remaining PATCHES ' ENDIF CALL SET_ERR(298, 'Error. See result file.',1) ENDIF ENDIF ELSEIF(IGR.EQ.1.AND.ISC.EQ.2) THEN C C.... Read in, or calculate, Radiative exchange coefficient C IF(LEXR) THEN IF(.NOT.NULLPR) THEN IF(MIMD.AND.NPROC.GT.1)THEN IF(MYID.EQ.0)THEN CALL WRITBL CALL WRITST CALL WRITBL WRITE(LUPR1,*) 'Viewfactors read from RADI.DAT ' CALL WRYT40('Viewfactors read from RADI.DAT ') CALL WRITBL CALL WRITST ENDIF ELSE CALL WRITBL CALL WRITST CALL WRITBL WRITE(LUPR1,*) 'Viewfactors read from RADI.DAT ' CALL WRYT40('Viewfactors read from RADI.DAT ') CALL WRITBL CALL WRITST ENDIF ENDIF IF(MIMD.AND.NPROC.GT.1)THEN IF(MYID.EQ.0)THEN DO ITZ=1,NTZ READ(LURFAC,30) (F(L0RFAC+ITZ+NTZ*(JTZ-1)),JTZ=1,NTZ) ENDDO CLOSE(LURFAC) ENDIF CALL FArrayCast(L0RFAC+1,NTZ*NTZ,0) ELSE DO ITZ=1,NTZ READ(LURFAC,30) (F(L0RFAC+ITZ+NTZ*(JTZ-1)),JTZ=1,NTZ) ENDDO CLOSE(LURFAC) ENDIF 30 FORMAT (5(1PE13.6)) ELSEIF (RESTRT) THEN IF(.NOT.NULLPR) THEN IF(MIMD.AND.NPROC.GT.1)THEN IF(MYID.EQ.0)THEN CALL WRITBL CALL WRIT40('View-factors are taken from PHI(DA) file') CALL WRITBL ENDIF ELSE CALL WRITBL CALL WRIT40('View-factors are taken from PHI(DA) file') CALL WRITBL ENDIF ENDIF ELSE IF(.NOT.NULLPR) THEN CALL WRITBL CALL WRITST CALL WRITBL CALL WRYT40('viewfactor calculation begins ') CALL WRIT40('viewfactor calculation begins ') CALL WRITBL CALL WRITST ENDIF C.... Calculate viewfactor CALL GX2DVF IF(.NOT.NULLPR) THEN CALL WRITST CALL WRITBL CALL WRYT40('viewfactor calculation ends ') CALL WRIT40('viewfactor calculation ends ') CALL WRITBL CALL WRITST ENDIF ENDIF IF(F(L0RFAC+1).LT.0.0.AND..NOT.NULLPR) 1 CALL WRYT40('GEBHARD exchange matrix formulation used') C.... INDVAR JTEM1 = LBNAME('TEM1') JPRPS = LBNAME('PRPS') C.... Zero location for LXDX, LYDY, LZDZ L0AE = L0F(LXYAE) L0AN = L0F(LXYAN) L0AS = L0AN-1 ! ok for all except iy=1. See use below L0AH = L0F(LXYAH) ELSEIF(IGR.EQ.9.AND.ISC.EQ.7) THEN C----------------------------------------------------------------------- C.... Group 9 section 7: This part of the coding set the conductivity | C into 3-d user store. | C----------------------------------------------------------------------- C.... Check that it is the first visit IF(IGRP97.EQ.0) THEN IGRP97=1 L0KLAM=L0F(LAMPR) C.... Store conductivity into user f-array if first visit ICZ=(IZ-1)*NXNY DO 97 J=1,NY*NX ICC=J + ICZ F(L0COND+ICC)=-F(L0KLAM+J) C.... Commented out initialisation of HTC store because this store C needs to be initialised as a patch wise store. c IF(LTURB) F(L0HTC+ICC)=F(L0COND+ICC) 97 CONTINUE ENDIF C----------------------------------------------------------------------- C.... Group 9 section 14: This part of the coding set the specific | C heat into 3-d user store. | C----------------------------------------------------------------------- ELSEIF(IGR.EQ.9.AND.ISC.EQ.14) THEN IF(LTURB.AND.(IGP914.EQ.0.OR.IZ.EQ.2)) THEN IGP914=1 L0CP=L0F(-14) C.... Store conductivity in user F-array if first visit ICZ=(IZ-1)*NXNY DO 914 J=1,NY*NX ICC=J + ICZ F(L0CP1+ICC)=F(L0CP+J) 914 CONTINUE ENDIF ELSEIF(IGR.EQ.13) THEN C----------------------------------------------------------------------- C.... GROUP 13 | C----------------------------------------------------------------------- IF(INDVAR.EQ.JTEM1) THEN C.... Store computed stanton*urel if turbulent flow and wallty patch IF(MIMD.AND.NPROC.GT.1)THEN LDUM = EXISTSPATCH(NPATCH) ELSE LDUM = .TRUE. ENDIF IF(LTURB.AND.LDUM) THEN IPNO=IPNAME(NPATCH) L0PTCH=I0PAT+10*(IPNO-1) ITYPE=F(L0PTCH+2) IF(ITYPE.GT.16.AND.ITYPE.LT.23) THEN IF(ISC.GT.1.AND.ISC.LT.5) THEN C----------------------------------------------------------------------- C.... SECTION 2, or 3, or 4: Retrieve wall coefficient as computed by | C FNCOEFF ST*UREL | C----------------------------------------------------------------------- L0CO=L0F(CO) C.... Obtain zero location of patchwise store ITC=-1 L0HTCC=L0HTC DO 135 ITZ=1,NTZ IF(MIMD.AND.NPROC.GT.1)THEN IF(NOTEXISTZONE(ITZ))GOTO 135 ENDIF ITC=ITC+2 IF(INT(F(L0WPNO+ITC)).EQ.IPNO) THEN IPN=F(L0RPNO+ITZ)+0.1 L0PTCH=I0PAT+10*(IPN-1) ITYPE=F(L0PTCH+2)+0.1 JXF=F(L0PTCH+3)+0.1 JXL=F(L0PTCH+4)+0.1 JYF=F(L0PTCH+5)+0.1 JYL=F(L0PTCH+6)+0.1 JZF=F(L0PTCH+7)+0.1 JZL=F(L0PTCH+8)+0.1 C.... Check if patch is defined in solid L0PRPS=ABS(ANYZ(JPRPS,JZF)) ICELCK=JYF+(JXF-1)*NY IF(F(L0PRPS+ICELCK).GT.99.) THEN C.... If radiative zone defined in solid set required wall type C and limits IF(ITYPE.EQ.2) THEN JXF=JXF+1 JXL=JXL+1 ELSEIF(ITYPE.EQ.3) THEN JXF=JXF-1 JXL=JXL-1 ELSEIF(ITYPE.EQ.4) THEN JYF=JYF+1 JYL=JYL+1 ELSEIF(ITYPE.EQ.5) THEN JYF=JYF-1 JYL=JYL-1 ELSEIF(ITYPE.EQ.6) THEN JZF=JZF+1 JZL=JZL+1 ELSEIF(ITYPE.EQ.7) THEN JZF=JZF-1 JZL=JZL-1 ENDIF ENDIF IF(IZ.GE.JZF.AND.IZ.LE.JZL) THEN CALL GETCOV(NAMPAT(IPNO),JTEM1,GCOF,GVAL) L0HTCC=F(L0WPNO+ITC+1)+0.1 C.... If the patch number does not match any of those stored in the C user array, RETURN because the wall patch does not coincide with C a radiative thermal zone C C.... multiply arrays by first-phase density L0RHO=L0F(DEN1) ICZ=(IZ-1)*NXNY ICZPV=(IZ-JZF) DO 133 JX=JXF,JXL ICX=(JX-1)*NY DO 133 JY=JYF,JYL IC=ICX+JY ICC=IC+ICZ ICZPV=ICZPV+1 GRHO=F(L0RHO+IC) F(L0HTCC+ICZPV)=F(L0CP1+ICC)*GRHO*F(L0CO+IC) C.... Zero the wall coeff when wall b.c at edge of domain and is not C a fixed-temperature condition, because appropriate source will C then be set by the radiative patch. IF(EQZ(GVAL)) F(L0CO+IC)=0.0 133 CONTINUE ENDIF ENDIF 135 CONTINUE ENDIF ENDIF ENDIF IF(NPATCH(1:3).EQ.'@RI'.AND.LDUM) THEN C----------------------------------------------------------------------- C.... Group 13 section 2 and 12: This part of the coding sets the CO | C and VAL. | C----------------------------------------------------------------------- C.... NB C The method of retrieving the CC and TS is not a good one because C it assumes that the Nth zone is numbered N. This may not always C be the case, for example having defined the THERMAL ZONES the user C may decide to skip the first two in a subsequent run. Therefore a C means of obtaining the correct F-array index incremeant needs to be C formulated. Eg loop over all zones until the PATCH number stored C in store F(L0RPNO+......) matches the PATCH number IPNUM defined C above, but this would be costly speed wise. C C.... Zone number READ(NPATCH(1:6),'(3X,I3)',ERR=134) IZONE IF(ISC.EQ.2) THEN C----------------------------------------------------------------------- C.... SECTION 2: Set coefficient CC in CO | C----------------------------------------------------------------------- C.... Retrieve conductive coefficient GCC=F(L0CC +IZONE) GCF=F(L0CCF+IZONE) c write(14,*) 'l0cc,l0ccf,izone,gcc,gcf', c 1 l0cc,l0ccf,izone,gcc,gcf C.... Retrieve surface temperature TS GTSURF=F(L0AVTS+IZONE) C.... Zero location of SU, AP, TEM1, PRPS L0SU=L0F(LSU) L0AP=L0F(LAP) L0TEM1=L0F(JTEM1) L0TEMZ=L0TEM1 L0PRPS=L0F(JPRPS) IF(.NOT.CARTES) L0YV=L0F(YV2D) C.... Obtain Patch type IPN=F(L0RPNO+IZONE)+0.1 L0PTCH=I0PAT+10*(IPN-1) ITYPE=F(L0PTCH+2) c.... Check that Patch is within a solid ICELCK=IYF+(IXF-1)*NY IF(F(L0PRPS+ICELCK).GT.99.0) THEN C.... If patch in solid then solid/fluid interface, hence set heat C source for fluid as well. ICINC is the increment or decrement C needed to obtain the correct F-array index for the fluid cell. C IF(ITYPE.EQ.2.AND.IXF.NE.NX) THEN ICINC= NY ELSEIF(ITYPE.EQ.3.AND.IXF.NE.1) THEN ICINC=-NY ELSEIF(ITYPE.EQ.4.AND.IYF.NE.NY) THEN ICINC= 1 ELSEIF(ITYPE.EQ.5.AND.IYF.NE.1) THEN ICINC=-1 ELSEIF(ITYPE.EQ.6.AND.IZ.NE.NZ) THEN ICINC= NXNY L0TEMZ=L0F(ANYZ(JTEM1,IZ+1)) ELSEIF(ITYPE.EQ.7.AND.IZ.NE.1) THEN ICINC=-NXNY L0TEMZ=L0F(ANYZ(JTEM1,IZ-1)) ENDIF DO 130 JX=IXF,IXL ICX=(JX-1)*NY DO 130 JY=IYF,IYL IC=JY+ICX C.... Get the unblocked areas to match the Patch type IF(BFC) THEN GAREA=F(L0B(ITYPE+3)+IC+NY*NX*(IZ-1)) ELSEIF(ITYPE.EQ.4) THEN GAREA=F(L0AN+IC) ELSEIF(ITYPE.EQ.5) THEN IF(JY.NE.1) THEN ! for all except south domain boundary GAREA=F(L0AS+IC) ELSE GAREA=F(L0AS+IC+1) ! at south domain boundary, use AN ENDIF ELSEIF(ITYPE.EQ.2 .OR. ITYPE.EQ.3) THEN GAREA=F(L0AE+IC) ELSEIF(ITYPE.EQ.6 .OR. ITYPE.EQ.7) THEN GAREA=F(L0AH+IC) ENDIF C.... Obtain correct cell index for the fluid cell IC=IC+ICINC C.... ICZ is used for slab-wise stores ie for Temperature ICZ=IC C.... When PATCH is of type LOW or HIGH the zero location for temperature C is obtained for the low or high slab and so ICZ does not need to be C altered. IF(ITYPE.EQ.6.OR.ITYPE.EQ.7) ICZ=ICZ-ICINC F(L0SU+IC)=F(L0SU+IC)+GCF*GAREA*(GTSURF-F(L0TEMZ+ICZ)) F(L0AP+IC)=F(L0AP+IC)+GCF*GAREA 130 CONTINUE ENDIF DO 131 JX=IXF,IXL ICX=(JX-1)*NY DO 131 JY=IYF,IYL IC=JY+ICX C.... Get the unblocked areas to match the Patch type IF(BFC) THEN GAREA=F(L0B(ITYPE+3)+IC+NY*NX*(IZ-1)) ELSEIF(ITYPE.EQ.4) THEN GAREA=F(L0AN+IC) ELSEIF(ITYPE.EQ.5) THEN IF(IC.NE.1) THEN ! for all except south domain boundary GAREA=F(L0AS+IC) ELSE GAREA=F(L0AS+IC+1) ! at south domain boundary, use AN ENDIF ELSEIF(ITYPE.EQ.2 .OR. ITYPE.EQ.3) THEN GAREA=F(L0AE+IC) ELSEIF(ITYPE.EQ.6 .OR. ITYPE.EQ.7) THEN GAREA=F(L0AH+IC) ENDIF GCAREA=GCC*GAREA F(L0SU+IC)=F(L0SU+IC)+GCAREA*(GTSURF-F(L0TEM1+IC)) F(L0AP+IC)=F(L0AP+IC)+GCAREA 131 CONTINUE CALL FN1(CO,0.0) ELSEIF(ISC.EQ.13) THEN C----------------------------------------------------------------------- C.... Set value | C----------------------------------------------------------------------- CALL FN0(VAL,JTEM1) ENDIF ELSEIF(.NOT.LDUM)THEN IF(ISC.EQ.2)THEN CALL FN1(CO,0.0) ELSEIF(ISC.EQ.13)THEN CALL FN0(VAL,JTEM1) ENDIF ENDIF ENDIF C----------------------------------------------------------------------- C.... GROUP 19 | c----------------------------------------------------------------------- ELSEIF(IGR.EQ.19.AND.ISC.EQ.2) THEN ! Start of sweep C----------------------------------------------------------------------- C.... SECTION 2: Initialise user F-array for TS, RF, SH, RC, and CC on | C first sweep and update TS | C----------------------------------------------------------------------- C.... Find wall patches if any for the thermal patches IF(ISWEEP.EQ.FSWEEP) THEN C.... Check that the PATCH type of radiative zones is area DO 1921 ITZ=1,NTZ C.... Obtain Patch type and limits IPN=F(L0RPNO+ITZ)+0.1 L0PTCH=I0PAT+10*(IPN-1) ITYPE=F(L0PTCH+2) C.... Error message if wrong patch type IF(ITYPE.LT.2.OR.ITYPE.GT.7) GO TO 1924 1921 CONTINUE C.... For turbulent flows obtain patch number of wall type patches for C the radiative patches. IF(LTURB) THEN C.... Initialise patch limits of pervious wall patch used in allocating C patch wise index CALL SUB3(JPXF,0,JPXL,0,JPYF,0) CALL SUB3(JPYL,0,JPZF,0,JPZL,0) C.... Initialise index pointer L0HTCC=L0HTC ICTZ=-1 DO 40 ITZ=1,NTZ IF(MIMD.AND.NPROC.GT.1)THEN IF(NOTEXISTZONE(ITZ))GOTO 40 ENDIF C.... Obtain Patch type and limits ICTZ=ICTZ+1 IPN=F(L0RPNO+ITZ)+0.1 L0PTCH=I0PAT+10*(IPN-1) ITYPE=F(L0PTCH+2) JXF=F(L0PTCH+3)+0.1 JXL=F(L0PTCH+4)+0.1 JYF=F(L0PTCH+5)+0.1 JYL=F(L0PTCH+6)+0.1 JZF=F(L0PTCH+7)+0.1 JZL=F(L0PTCH+8)+0.1 C.... Check if patch is defined in solid L0PRPS=ABS(ANYZ(JPRPS,JZF)) ICELCK=JYF+(JXF-1)*NY IF(F(L0PRPS+ICELCK).GT.99.0) THEN C.... If radiative zone defined in solid set required wall type C and limits IF(ITYPE.EQ.2) THEN CALL SUB3(JWXF,JXF+1,JWXL,JXL+1,JWYF,JYF) CALL SUB3(JWYL,JYL,JWZF,JZF,JWZL,JZL) IWLTYP=18 ELSEIF(ITYPE.EQ.3) THEN CALL SUB3(JWXF,JXF-1,JWXL,JXL-1,JWYF,JYF) CALL SUB3(JWYL,JYL,JWZF,JZF,JWZL,JZL) IWLTYP=17 ELSEIF(ITYPE.EQ.4) THEN CALL SUB3(JWXF,JXF,JWXL,JXL,JWYF,JYF+1) CALL SUB3(JWYL,JYL+1,JWZF,JZF,JWZL,JZL) IWLTYP=20 ELSEIF(ITYPE.EQ.5) THEN CALL SUB3(JWXF,JXF,JWXL,JXL,JWYF,JYF-1) CALL SUB3(JWYL,JYL-1,JWZF,JZF,JWZL,JZL) IWLTYP=19 ELSEIF(ITYPE.EQ.6) THEN CALL SUB3(JWXF,JXF,JWXL,JXL,JWYF,JYF) CALL SUB3(JWYL,JYL,JWZF,JZF+1,JWZL,JZL+1) IWLTYP=22 ELSEIF(ITYPE.EQ.7) THEN CALL SUB3(JWXF,JXF,JWXL,JXL,JWYF,JYF) CALL SUB3(JWYL,JYL,JWZF,JZF-1,JWZL,JZL-1) IWLTYP=21 ENDIF ELSE C.... Otherwise limits for the wall type are the C same as for the radiative patch. CALL SUB3(JWXF,JXF,JWXL,JXL,JWYF,JYF) CALL SUB3(JWYL,JYL,JWZF,JZF,JWZL,JZL) IWLTYP=ITYPE+15 ENDIF F(L0WPNO+ITZ+ICTZ)=0.0 F(L0WPNO+ITZ+ICTZ+1)=L0HTC C.... loop over all patches to find required wall patch LFOUND=.FALSE. DO 50 IPN0=1,NUMPAT L0PTCH=I0PAT+10*(IPN0-1) ITYPE=F(L0PTCH+2) IF(ITYPE.EQ.IWLTYP) THEN JXF=F(L0PTCH+3)+0.1 JXL=F(L0PTCH+4)+0.1 JYF=F(L0PTCH+5)+0.1 JYL=F(L0PTCH+6)+0.1 JZF=F(L0PTCH+7)+0.1 JZL=F(L0PTCH+8)+0.1 C.... The following checks allows a wall patch to coincide with several C thermal zones, but it does not allow for a single thermal zone to C coinicide with several wall patches. IF(ITYPE.EQ.17.OR.ITYPE.EQ.18) THEN C.... EAST OR WEST type so jxf=jxl=jwxf=jwxl IF(JXF.EQ.JWXF.AND.JXL.EQ.JWXL.AND.JYF.LE.JWYF. 1 AND.JYL.GE.JWYL.AND.JZF.LE.JWZF.AND.JZL.GE.JWZL) 1 LFOUND=.TRUE. ELSEIF(ITYPE.EQ.19.OR.ITYPE.EQ.20) THEN C.... NORTH OR SOUTH type so jyf=jyl=jwyf=jwyl IF(JYF.EQ.JWYF.AND.JYL.EQ.JWYL.AND.JXF.LE.JWXF. 1 AND.JXL.GE.JWXL.AND.JZF.LE.JWZF.AND.JZL.GE.JWZL) 1 LFOUND=.TRUE. ELSEIF(ITYPE.EQ.21.OR.ITYPE.EQ.22) THEN C.... HIGH OR LOW type so jzf=jzl=jwzf=jwzl IF(JZF.EQ.JWZF.AND.JZL.EQ.JWZL.AND.JYF.LE.JWYF. 1 AND.JYL.GE.JWYL.AND.JXF.LE.JWXF.AND.JXL.GE.JWXL) 1 LFOUND=.TRUE. ENDIF ENDIF IF(LFOUND) THEN LFOUND=.FALSE. F(L0WPNO+ITZ+ICTZ)=FLOAT(IPN0) GO TO 60 ENDIF 50 CONTINUE GO TO 40 C.... Set index 60 L0HTCC=L0HTCC+(JPXL-JPXF+1)*(JPYL-JPYF+1)*(JPZL-JPZF+1) F(L0WPNO+ITZ+ICTZ+1)=FLOAT(L0HTCC) CALL SUB3(JPXF,JWXF,JPXL,JWXL,JPYF,JWYF) CALL SUB3(JPYL,JWYL,JPZF,JWZF,JPZL,JWZL) 40 CONTINUE ENDIF C.... Initialise user F-array IF(LINIL) THEN LINIL=.FALSE. IF(QEQ(FIINIT(JTEM1),READFI)) THEN C.... When restart then for fixed flux radiative zones need to reset C the VALue to GRND1 DO 1910 ITZ=1,NTZ IPN=F(L0RPNO+ITZ)+0.1 CALL GETCOV(NAMPAT(IPN),JTEM1,GCOF,GVAL) IF(.NOT.GRNDNO(1,GVAL).AND.GRNDNO(1,GCOF)) THEN F(L0QFLX+ITZ)=GVAL F(I0PHI+3)=GRND1 ELSE F(L0QFLX+ITZ)=0.0 ENDIF C.... Store k/d for thin plates and node number of adjacent node IF(GTZ(GVAL).AND.GTZ(GCOF)) THEN F(L0KDM+ITZ)=GCOF F(L0NTS+ITZ)=GVAL F(I0PHI+3)=GRND1 F(I0PHI+2)=GRND1 ELSE F(L0KDM+ITZ)=0.0 F(L0NTS+ITZ)=0.0 ENDIF 1910 CONTINUE ELSE ICNT=-1 DO 191 ITZ=1,NTZ ICNT=ICNT+2 IPN=F(L0RPNO+ITZ)+0.1 CALL GETCOV(NAMPAT(IPN),JTEM1,GCOF,GVAL) IF(GRNDNO(1,GVAL).OR.GRNDNO(1,GCOF)) THEN F(L0AVTS+ITZ)=FIINIT(JTEM1) ELSE C.... assign fixed wall temp 140792 F(L0AVTS+ITZ)=GVAL IF(LTZ(GVAL)) F(L0AVTS+ITZ)=FIINIT(JTEM1) ENDIF C.... Store heat flux value if applicable and reset VALue to GRND1 IF(.NOT.GRNDNO(1,GVAL).AND.GRNDNO(1,GCOF)) THEN F(L0QFLX+ITZ)=GVAL F(I0PHI+3)=GRND1 ELSE F(L0QFLX+ITZ)=0.0 ENDIF C.... Store k/d for thin plates and node number of adjacent node IF(GTZ(GVAL).AND.GTZ(GCOF)) THEN F(L0KDM+ITZ)=GCOF F(L0NTS+ITZ)=GVAL F(I0PHI+3)=GRND1 F(I0PHI+2)=GRND1 ELSE F(L0KDM+ITZ)=0.0 F(L0NTS+ITZ)=0.0 ENDIF CALL SUB3R(F(L0AVRF+ITZ),F(L0QFLX+ITZ),F(L0AVSH+ITZ), 1 0.0,F(L0RC+ITZ),0.0) CALL SUB3R(F(L0CC+ITZ),0.0,F(L0CCF+ITZ),0.0, 1 F(L0QEXT+ITZ),0.0) CALL SUB3R(F(L0XCOF+ITZ),0.0,F(L0EXRD+ICNT),0.0, 1 F(L0EXRD+ICNT+1),0.0) F(L0EXLN+ICNT)=0.0 F(L0EXLN+ICNT+1)=0.0 191 CONTINUE ENDIF C.... If there are external heat transfer PATCHES then obtain and store C the coefficient and external temperature. DO 1922 IEXPN=1,NUMPAT IF(NAMPAT(IEXPN)(1:3).EQ.'@ER' .OR. 1 NAMPAT(IEXPN)(1:3).EQ.'@EL') THEN IF(MIMD.AND.NPROC.GT.1) THEN IF(.NOT.EXISTSPATCH(NAMPAT(IEXPN))) GOTO 1922 ENDIF L0PTCH=I0PAT+10*(IEXPN-1) ITYPE=F(L0PTCH+2) C.... Error message if wrong patch type IF(ITYPE.LT.2.OR.ITYPE.GT.7) GO TO 1925 JXF=F(L0PTCH+3)+0.1 JXL=F(L0PTCH+4)+0.1 JYF=F(L0PTCH+5)+0.1 JYL=F(L0PTCH+6)+0.1 JZF=F(L0PTCH+7)+0.1 JZL=F(L0PTCH+8)+0.1 ICNT=-1 DO 1923 ITZ=1,NTZ IF(MIMD.AND.NPROC.GT.1)THEN IF(NOTEXISTZONE(ITZ))GOTO 1923 ENDIF ICNT=ICNT+2 C.... Obtain Patch type and limits IPN=F(L0RPNO+ITZ)+0.1 L0PTCH=I0PAT+10*(IPN-1) IRTYPE=F(L0PTCH+2) F(L0EXRD+ICNT )=0.0 F(L0EXRD+ICNT+1)=0.0 F(L0EXLN+ICNT )=0.0 F(L0EXLN+ICNT+1)=0.0 IF(IRTYPE.EQ.ITYPE) THEN JRXF=F(L0PTCH+3)+0.1 JRXL=F(L0PTCH+4)+0.1 JRYF=F(L0PTCH+5)+0.1 JRYL=F(L0PTCH+6)+0.1 JRZF=F(L0PTCH+7)+0.1 JRZL=F(L0PTCH+8)+0.1 IF(JXF.EQ.JRXF.AND.JXL.EQ.JRXL.AND.JYF.EQ.JRYF.AND. 1 JYL.EQ.JRYL.AND.JZF.EQ.JRZF.AND.JZL.EQ.JRZL) THEN C.... The internal radiative patch is found so store the coefficient C and the external temperature. CALL GETCOV(NAMPAT(IEXPN),JTEM1,GCOF,GVAL) IF(NAMPAT(IEXPN)(1:3).EQ.'@ER') THEN F(L0EXRD+ICNT )=GCOF F(L0EXRD+ICNT+1)=GVAL C.... Zero the COefficient to avoid duplication of source by EARTH F(I0PHI+2)=0.0 ELSEIF(NAMPAT(IEXPN)(1:3).EQ.'@EL') THEN F(L0EXLN+ICNT )=GCOF F(L0EXLN+ICNT+1)=GVAL C.... Zero the COefficient to avoid duplication of source by EARTH F(I0PHI+2)=0.0 ENDIF ENDIF ENDIF 1923 CONTINUE ENDIF 1922 CONTINUE ENDIF ENDIF C.... Update surface temperatures IF(ISWEEP.NE.FSWEEP.AND.LOOPZ.EQ.1) THEN DO 192 ITZ=1,NTZ GQMET=0.0 IF(GTZ(F(L0NTS+ITZ))) THEN INTZ=F(L0NTS+ITZ)+0.1 GQMET=F(L0KDM+ITZ)*(F(L0AVTS+ITZ)-F(L0AVTS+INTZ)) ENDIF F(L0AVTS+ITZ)=F(L0AVTS+ITZ)+ 1 (F(L0AVRF+ITZ)-F(L0AVSH+ITZ)+ 1 F(L0QFLX+ITZ)+F(L0QEXT+ITZ)-GQMET)/ 1 (TINY+F(L0CC +ITZ)+F(L0KDM +ITZ)- 1 F(L0RC +ITZ)+F(L0CCF +ITZ)-F(L0XCOF+ITZ)) 192 CONTINUE ENDIF C C.... Update aperture zone temperature C DO 198 ITZ=1,NTZ IPN=F(L0RPNO+ITZ)+0.1 CALL GETCOV(NAMPAT(IPN),JTEM1,GCOF,GVAL) IF(GRNDNO(1,GVAL) .AND. EQZ(GCOF)) THEN IF(MIMD.AND.NPROC.GT.1)THEN IF(NOTEXISTZONE(ITZ))GOTO 200 ENDIF C.... obtain patch type and limits L0PTCH=I0PAT+10*(IPN-1) ITYPE=F(L0PTCH+2) JXF=F(L0PTCH+3)+0.1 JXL=F(L0PTCH+4)+0.1 JYF=F(L0PTCH+5)+0.1 JYL=F(L0PTCH+6)+0.1 JZF=F(L0PTCH+7)+0.1 JZL=F(L0PTCH+8)+0.1 CALL SUB2R(GSUMBT,0.0,GSUMVL,0.0) DO 199 JZ=JZF,JZL L0TEMP=L0F(ANYZ(JTEM1,JZ)) L0VOL=L0F(ANYZ(VOL,JZ)) IF(BFC) L0VOL=L0B(VOLUME) ICZ = (JZ-1)*NXNY DO 199 JX=JXF,JXL ICX=(JX-1)*NY DO 199 JY=JYF,JYL IC=JY + ICX IF(BFC) THEN GSUMVL=GSUMVL+F(L0VOL+IC+ICZ) GSUMBT=GSUMBT+F(L0TEMP+IC)*F(L0VOL+IC+ICZ) ELSE GSUMVL=GSUMVL+F(L0VOL+IC) GSUMBT=GSUMBT+F(L0TEMP+IC)*F(L0VOL+IC) ENDIF 199 CONTINUE 200 IF(MIMD.AND.NPROC.GT.1)CALL GLSUM2(GSUMBT,GSUMVL) F(L0AVTS+ITZ)=GSUMBT/(GSUMVL+TINY) ENDIF 198 CONTINUE ELSEIF(IGR.EQ.19.AND.ISC.EQ.3) THEN C.... Group 9 section 7 visit counter IGRP97=0 C.... Group 9 section 14 visit counter IGP914=0 ELSEIF(IGR.EQ.19.AND.ISC.EQ.7) THEN C----------------------------------------------------------------------- C.... SECTION 7: Calculate RF, RC, SH and CC, the last can be a | C function of temperature if conductivity is a f(tem1) | C----------------------------------------------------------------------- ITC=-1 DO 193 ITZ=1,NTZ ITC=ITC+2 CALL SUB3R(GSUMSH,0.0,GSUMAR,0.0,GSUMCC,0.0) CALL SUB3R(GSUMRC,0.0,GSUMRF,0.0,GTSI,F(L0AVTS+ITZ)) c write(14,*)'gtsi=',gtsi c write(14,*)'l0avts, itz ',l0avts, itz CALL SUB3R(GSUMSS,0.0,GSUMSF,0.0,GSUMCF,0.0) c call fcheck(100,'gxs2sr') C C.... Compute RF and RC. Modified formalation for net radiative flux, C based on specification of GEBHARD exchange matrix, in which C diagonal elements will be -ve. C IF(F(L0RFAC+1).LT.0.0) THEN DO 197 JTZ=1,NTZ GTSJ=F(L0AVTS+JTZ) GRDFIJ=F(L0RFAC+ITZ+NTZ*(JTZ-1)) IF(JTZ.NE.ITZ) GSUMRC=GSUMRC+GRDFIJ GSUMRF=GSUMRF+GRDFIJ*(GTSJ+TMP1A)**4 197 CONTINUE call fcheck(101,'gxs2sr') ELSE DO 194 JTZ=1,NTZ GTSJ=F(L0AVTS+JTZ) GRDFIJ=F(L0RFAC+ITZ+NTZ*(JTZ-1)) GSUMRC=GSUMRC+GRDFIJ GSUMRF=GSUMRF+GRDFIJ*((GTSJ+TMP1A)**4-(GTSI+TMP1A)**4) 194 CONTINUE ENDIF call fcheck(102,'gxs2sr') F(L0RC+ITZ)=-4.*(GTSI+TMP1A)**3*GSUMRC F(L0AVRF+ITZ)=GSUMRF IPN=F(L0RPNO+ITZ)+0.1 CALL GETCOV(NAMPAT(IPN),JTEM1,GCOF,GVAL) IF(GRNDNO(1,GVAL)) THEN IF(MIMD.AND.NPROC.GT.1)THEN IF(NOTEXISTZONE(ITZ))GOTO 201 ENDIF C.... Obtain patch type and limits L0PTCH=I0PAT+10*(IPN-1) ITYPE=F(L0PTCH+2)+0.1 JXF = F(L0PTCH+3)+0.1 JXL = F(L0PTCH+4)+0.1 JYF = F(L0PTCH+5)+0.1 JYL = F(L0PTCH+6)+0.1 JZF = F(L0PTCH+7)+0.1 JZL = F(L0PTCH+8)+0.1 C C.... ICINC is either an increment or a decrement required C to locate the fluid cells ICINC=0 IF(ITYPE.EQ.2.OR.ITYPE.EQ.3) THEN IF(BFC) THEN L0DIS=L0B(DHXPE) ELSE L0DIS=L0F(DXU2D) ENDIF IF(ITYPE.EQ.2.AND.JXF.NE.NX) ICINC= NY IF(ITYPE.EQ.3.AND.JXF.NE. 1) ICINC=-NY ELSEIF(ITYPE.EQ.6.OR.ITYPE.EQ.7) THEN IF(BFC) THEN L0DIS=L0B(DHZPH) ELSE L0DIS=L0F(DZWNZ) ENDIF ELSEIF(ITYPE.EQ.4.OR.ITYPE.EQ.5) THEN IF(BFC) THEN L0DIS=L0B(DHYPN) ELSE L0DIS=L0F(DYV2D) c write(14,*)'dyv2d,l0dis',dyv2d,l0dis ENDIF IF(ITYPE.EQ.4.AND.JYF.NE.NY) ICINC= 1 IF(ITYPE.EQ.5.AND.JYF.NE. 1) ICINC=-1 ENDIF c call fcheck(102,'gxs2sr') IF(.NOT.CARTES) L0YV=L0F(YV2D) C.... Calculate SH and CC DO 195 JZ=JZF,JZL C.... Zero locations L0TEMP=L0F(ANYZ(JTEM1,JZ)) L0PRPS=L0F(ANYZ(JPRPS,JZ)) L0TEMZ=L0TEMP IF(ITYPE.EQ.6.AND.JZF.NE.NZ) THEN ICINC=NXNY JZZ=JZ+1 L0TEMZ=L0F(ANYZ(JTEM1,JZZ)) ELSEIF(ITYPE.EQ.7.AND.JZF.NE.1) THEN ICINC=-NXNY JZZ=JZ-1 L0TEMZ=L0F(ANYZ(JTEM1,JZZ)) ENDIF ICZ = (JZ-1)*NXNY C.... L0HTCC and IHC are index and increment for heat transfer coefficient C which is stored as a patch wise variable in the users f-array. IF(LTURB) THEN L0HTCC=F(L0WPNO+ITC+1)+0.1 IHC=(JZ-JZF) ENDIF DO 195 JX=JXF,JXL ICX = (JX-1)*NY DO 195 JY=JYF,JYL IC =JY + ICX IC1 =IC + ICINC IF(BFC) THEN GAREA=F(L0B(ITYPE+3)+IC+NY*NX*(IZ-1)) c GAREA=F(L0B(ITYPE+3)+IC+NY*NZ*(IZ-1)) ELSEIF(ITYPE.EQ.4) THEN GAREA=F(L0AN+IC) ELSEIF(ITYPE.EQ.5) THEN GAREA=F(L0AS+IC) IF(JY.NE.1) THEN ! for all except south domain boundary GAREA=F(L0AS+IC) ELSE GAREA=F(L0AS+IC+1) ! at south domain boundary, use AN ENDIF ELSEIF(ITYPE.EQ.2 .OR. ITYPE.EQ.3) THEN GAREA=F(L0AE+IC) ELSEIF(ITYPE.EQ.6 .OR. ITYPE.EQ.7) THEN GAREA=F(L0AH+IC) ENDIF IF(LTURB) IHC=IHC+1 GRCD=0.5*F(L0DIS+IC) c write(14,*)'l0dis, ic, grcd 1',l0dis, ic, grcd IF(ITYPE.EQ.6.OR.ITYPE.EQ.7) GRCD=0.5*F(L0DIS+JZ) c write(14,*)'grcd 2',grcd IF(BFC) GRCD=0.5*F(L0DIS+IC+ICZ) GRCD =1.0/(GRCD+TINY) c write(14,*)'grcd 3',grcd GCONZ=F(L0COND+IC+ICZ) IF(F(L0PRPS+IC).LE.99.0) THEN IF(LTURB.AND.GTZ(F(L0WPNO+ITC))) THEN GCONZ=F(L0HTCC+IHC) GRCD=1.0 ENDIF ENDIF GSUMSH=((GTSI-F(L0TEMP+IC))*GCONZ*GRCD*GAREA)+GSUMSH c write(14,*)' F(L0TEMP+IC)', F(L0TEMP+IC) c write(14,*)' GCONZ ', GCONZ c write(14,*)' GRCD ', GRCD c write(14,*)' GAREA ', GAREA c write(14,*) 'ic, gsumsh',ic,gsumsh GSUMCC=GSUMCC+GCONZ*GRCD*GAREA C.... When at solid/fluid interface compute fluid side heat source due C to radiation IF(F(L0PRPS+IC).GT.99.0) THEN GCONZ=F(L0COND+IC1+ICZ) IF(LTURB.AND.GTZ(F(L0WPNO+ITC))) THEN GRCD=1.0 ELSE IF(BFC) THEN GRCD=F(L0DIS+IC1+ICZ) ELSEIF(ITYPE.EQ.6) THEN GRCD=F(L0DIS+JZ+1) ELSEIF(ITYPE.EQ.7) THEN GRCD=F(L0DIS+JZ-1) ELSE GRCD =F(L0DIS+IC1) ENDIF GRCD=2.0/(GRCD + TINY) ENDIF IF(LTURB) GCONZ=F(L0HTCC+IHC) IF(ITYPE.EQ.6.OR.ITYPE.EQ.7) IC1=IC1-ICINC GCRARE=GCONZ*GRCD*GAREA GSUMSF=GSUMSF + (GTSI-F(L0TEMZ+IC1)) * GCRARE GSUMCF=GSUMCF + GCRARE ENDIF GSUMAR = GSUMAR + GAREA c write(14,*)'gsumar',gsumar 195 CONTINUE c call fcheck(104,'gxs2sr') 201 IF(MIMD.AND.NPROC.GT.1)THEN CALL GLSUM5(GSUMSH,GSUMAR,GSUMCC,GSUMSF,GSUMCF) ENDIF RECDEN=1.0/(GSUMAR+TINY) c call writ3r('recden ',recden,'gsumsh ',gsumsh, c 1 'gsumsf ',gsumsf) F(L0AVSH+ITZ) = GSUMSH*RECDEN + GSUMSF*RECDEN c call writ1r('avsh ',F(L0AVSH+ITZ)) F(L0CC +ITZ) = GSUMCC*RECDEN F(L0CCF +ITZ) = GSUMCF*RECDEN c call fcheck(105,'gxs2sr') C.... Compute external heat transfer C.... Radiative GQEXRD=F(L0EXRD+ITC)*((F(L0EXRD+ITC+1)+TMP1A)**4- 1 (GTSI+TMP1A)**4) C.... Linear GQEXLN=F(L0EXLN+ITC)*(F(L0EXLN+ITC+1)-GTSI) F(L0QEXT+ITZ)=GQEXRD+GQEXLN C.... Update external coefficient for the heat balance equation F(L0XCOF+ITZ)=-4.0*F(L0EXRD+ITC)*(GTSI+TMP1A)**3- 1 F(L0EXLN+ITC) ELSE C.... When fixed temp set SH to RF F(L0AVSH+ITZ)=F(L0AVRF+ITZ) ENDIF 193 CONTINUE C C.... Print out for each zone the number, temperature, radiative flux C and conductive flux C IF(ISWEEP.EQ.LSWEEP.AND..NOT.NULLPR) THEN IF(MIMD.AND.NPROC.GT.1)THEN IF(MYID.EQ.0)THEN WRITE(LUPR1,*) ' zone printout ' WRITE(LUPR1,*) ' zone tsur radf' 1 //' htrf' DO ITZ=1,NTZ WRITE(LUPR1,30) FLOAT(ITZ),F(L0AVTS+ITZ),F(L0AVRF+ITZ), 1 F(L0AVSH+ITZ) ENDDO ENDIF ELSE WRITE(LUPR1,*) ' zone printout ' WRITE(LUPR1,*) ' zone tsur radf htrf' DO ITZ=1,NTZ WRITE(LUPR1,30) FLOAT(ITZ),F(L0AVTS+ITZ),F(L0AVRF+ITZ), 1 F(L0AVSH+ITZ) ENDDO ENDIF ENDIF ENDIF NAMSUB='gxs2sr' RETURN C C.... Write out error message if PATCH name is not of C the format @RI###, where ### are digits. C 134 CONTINUE IF(MIMD.AND.NPROC.GT.1)THEN IF(MYID.EQ.0)THEN CALL WRITST CALL WRITBL WRITE(LUPR1,*) ' THERMAL ZONE PATCH NAME ',NPATCH WRITE(LUPR1,*) ' IS NOT OF THE REQUIRED FORM. ' WRITE(LUPR1,*) ' IT SHOULD START WITH @RI FOLLOWED BY 1 THREE DIGITS.' WRITE(LUPR1,*) ' EXAMPLES OF ACCEPTED FORMS ARE: ' WRITE(LUPR1,*) ' @RI001 or @RI100.' CALL WRITST CALL WRITBL ENDIF ELSE CALL WRITST CALL WRITBL WRITE(LUPR1,*) ' THERMAL ZONE PATCH NAME ',NPATCH WRITE(LUPR1,*) ' IS NOT OF THE REQUIRED FORM. ' WRITE(LUPR1,*) ' IT SHOULD START WITH @RI FOLLOWED BY 1 THREE DIGITS.' WRITE(LUPR1,*) ' EXAMPLES OF ACCEPTED FORMS ARE: ' WRITE(LUPR1,*) ' @RI001 or @RI100.' CALL WRITST CALL WRITBL ENDIF CALL SET_ERR(299, 'Error. See result file.',1) RETURN 1924 CONTINUE IF(MIMD.AND.NPROC.GT.1)THEN IF(MYID.EQ.0)THEN CALL WRITST CALL WRITBL WRITE(LUPR1,*) ' Group ',IGR,'Section ',ISC WRITE(LUPR1,*) ' Incorrect PATCH TYPE for the', 1 ' radiating surface' WRITE(LUPR1,*) 'PHOENICS PATCH NUMBER =',IPN WRITE(LUPR1,*) 'PATCH has to be of an area type ' ENDIF ELSE CALL WRITST CALL WRITBL WRITE(LUPR1,*) ' Group ',IGR,'Section ',ISC WRITE(LUPR1,*) ' Incorrect PATCH TYPE for the', 1 ' radiating surface' WRITE(LUPR1,*) 'PHOENICS PATCH NUMBER =',IPN WRITE(LUPR1,*) 'PATCH has to be of an area type ' ENDIF CALL SET_ERR(300, 'Error. See result file.',1) RETURN 1925 CONTINUE IF(MIMD.AND.NPROC.GT.1)THEN IF(MYID.EQ.0)THEN CALL WRITST CALL WRITBL WRITE(LUPR1,*) ' Group ',IGR,'Section ',ISC WRITE(LUPR1,*) ' Incorrect PATCH TYPE for the', 1 ' external heat transfer surface' WRITE(LUPR1,*) 'PHOENICS PATCH NUMBER =',IEXPN WRITE(LUPR1,*) 'PATCH has to be of an area type ' ENDIF ELSE CALL WRITST CALL WRITBL WRITE(LUPR1,*) ' Group ',IGR,'Section ',ISC WRITE(LUPR1,*) ' Incorrect PATCH TYPE for the', 1 ' external heat transfer surface' WRITE(LUPR1,*) 'PHOENICS PATCH NUMBER =',IEXPN WRITE(LUPR1,*) 'PATCH has to be of an area type ' ENDIF CALL SET_ERR(301, 'Error. See result file.',1) END c