SUBROUTINE TYPE68 (TIME,XIN,OUT,T,DTDT,PAR,INFO,ICNTRL,*) C************************************************************************ C* Copyright ASHRAE A Toolkit for Primary HVAC System Energy C* Calculation C*********************************************************************** C* SUBROUTINE: TYPE68 (TOWERTL) C* C* LANGUAGE: FORTRAN 77 C* C* PURPOSE: Subroutine TYPE68 deals with the part load C* operation of a cooling tower with two fan C* speeds. The purpose of routine TOWERTL is C* to determine the tower operating mode C* in order to reach a given set point C* temperature. C*********************************************************************** C* INPUT VARIABLES: C* Tset Set point temperature (K) C* xin(1) (øC) C* MfrW Water mass flow rate (kg/s) C* xin(2) (kg/hr) C* MfrAir1 Air mass flow rate when the tower is (kg/s) C* continuously running at the maximum rate C* xin(3) (kg/hr) C* MfrAir2 Air mass flow rate when the tower is (kg/s) C* continuously running at the minimum rate C* xin(4) (kg/hr) C* ModeOFF OFF regime description (-) C* IF ModeOFF=1: fan OFF, water pump ON C* =2: fan OFF, water pump OFF C* xin(5) (-) C* MfrAirOFF Air mass flow rate when the tower is (kg/s) C* continuously running in OFF regime C* (MfrAirOFF=0 if ModeOFF=2) C* xin(6) (kg/hr) C* Twsu Supply water temperature (K) C* xin(7) (øC) C* Twbsu Supply air wet-bulb temperature (K) C* xin(8) (øC) C* patm Atmospheric pressure (Pa) C* xin(9) (atm) C* C* OUTPUT VARIABLES C* Pos The value of Pos indicates the tower operating (-) C* mode in order to reach the set point temperature C* Pos=1: Full-load all the time C* =2: Cycling Max-Min C* =3: Cycling ON-OFF C* =4: OFF regime all the time C* out(1) (-) C* Teta The time period during which the tower is (-) C* working at the upper rate C* out(2) (-) C* Twex1 Exhaust water temperature when the tower (K) C* is continuously running at the maximum rate C* out(3) (øC) C* Twex2 Exhaust water temperature when the tower (K) C* is continuously running at the minimum rate C* out(4) (øC) C* TwexOFF Exhaust water temperature when the tower (K) C* is continuously running in OFF regime C* out(5) (øC) C* TwexMean Mean exhaust water temperature (K) C* out(6) (øC) C* C* PARAMETERS C* AU1 Heat transfer coefficient identified (W/K) C* for the maximum rate C* par(1) (kJ/hr/øC) C* AU2 Heat transfer coefficient identified (W/K) C* for the minimum rate C* par(2) (kJ/hr/øC) C* AUOFF Heat transfer coefficient associated (W/K) C* with OFF regime C* (AUOFF=0 if ModeOFF=2) C* par(3) (kJ/hr/øC) C*********************************************************************** C MAJOR RESTRICTIONS: The moist air specific heat is assumed C to remain constant. C C DEVELOPER: Jean Lebrun C Marc Grodent C University of LiŠge, Belgium C C DATE: March 1, 1995 C C SUBROUTINE CALLED: TYPE70 (TOWERSS) C LINKCK C MODIFIED FOR TRNSYS: January 21,1996 C Jean-Pascal Bourdouxhe C*********************************************************************** INTEGER*4 INFO,INFO70 DOUBLE PRECISION XIN,OUT,XIN70,OUT70 REAL ModeOFF,MfrW,MfrAir1,MfrAir2,MfrAirOFF DIMENSION PAR(3),XIN(9),OUT(6),INFO(15), & PAR70(1),XIN70(5),OUT70(3),INFO70(15) COMMON /LUNITS/ LUR,LUW,IFORM,LUK COMMON /SIM/ TIME0,TFINAL,DELT,IWARN COMMON /STORE/ NSTORE,IAV,S(5000) COMMON /CONFIG/ TRNEDT,PERCOM,HEADER,PRTLAB,LNKCHK,PRUNIT,IOCHEK, & PRWARN INFO(6)=6 INFO70(6)=3 C****INPUTS 9 (converted in SI units) C************ Tset=SNGL(xin(1)+273.15) MfrW=SNGL(xin(2)/3600.) MfrAir1=SNGL(xin(3)/3600.) MfrAir2=SNGL(xin(4)/3600.) ModeOFF=SNGL(xin(5)) MfrAirOFF=SNGL(xin(6)/3600.) Twsu=SNGL(xin(7)+273.15) Twbsu=SNGL(xin(8)+273.15) patm=SNGL(xin(9)*101325) C****PARAMETERS 3 (converted into SI units) C**************** AU1=par(1)/3.6 AU2=par(2)/3.6 AUOFF=par(3)/3.6 C1*** Calculate the exhaust water temperature when the tower is continuously C1*** running at the maximum rate par70(1)=AU1*3.6 xin70(1)=DBLE(MfrW*3600.) xin70(2)=DBLE(MfrAir1*3600.) xin70(3)=DBLE(Twsu-273.15) xin70(4)=DBLE(Twbsu-273.15) xin70(5)=DBLE(patm/101325) CALL TYPE70 (TIME,XIN70,OUT70,T,DTDT,PAR70,INFO70,ICNTRL,*2) CALL LINKCK('TYPE68','TYPE70 ',1,99) 2 CONTINUE Twex1=SNGL(out70(1)+273.15) Twbex1=SNGL(out70(2)+273.15) C1*** Calculate the exhaust water temperature when the tower is continuously C1*** running at the minimum rate par70(1)=AU2*3.6 xin70(1)=DBLE(MfrW*3600.) xin70(2)=DBLE(MfrAir2*3600.) xin70(3)=DBLE(Twsu-273.15) xin70(4)=DBLE(Twbsu-273.15) xin70(5)=DBLE(patm/101325) CALL TYPE70 (TIME,XIN70,OUT70,T,DTDT,PAR70,INFO70,ICNTRL,*5) CALL LINKCK('TYPE68','TYPE70 ',1,99) 5 CONTINUE Twex2=SNGL(out70(1)+273.15) Twbex2=SNGL(out70(2)+273.15) C1*** Calculate the exhaust water temperature when the tower is continuously C1*** running in OFF regime IF (ModeOFF.EQ.1) THEN par70(1)=AUOFF*3.6 xin70(1)=DBLE(MfrW*3600.) xin70(2)=DBLE(MfrAirOFF*3600.) xin70(3)=DBLE(Twsu-273.15) xin70(4)=DBLE(Twbsu-273.15) xin70(5)=DBLE(patm/101325) CALL TYPE70 (TIME,XIN70,OUT70,T,DTDT,PAR70,INFO70,ICNTRL,*10) CALL LINKCK('TYPE68','TYPE70 ',1,99) 10 CONTINUE TwexOFF=SNGL(out70(1)+273.15) TwbexOFF=SNGL(out70(2)+273.15) ELSE TwexOFF=Twsu ENDIF IF (Tset.GE.TwexOFF) THEN C1*** The cooling tower must stay on OFF position all the time Pos=4 Teta=0 TwexMean=TwexOFF ENDIF IF ((Tset.LT.TwexOFF).AND.(Tset.GT.Twex2)) THEN C1*** The cooling tower is cycling between ON and OFF regimes Pos=3 C1*** Calculate the time period during which the tower is working C1*** in ON regime Teta=(Tset-TwexOFF)/(Twex2-TwexOFF) TwexMean=Tset ENDIF IF ((Tset.LE.Twex2).AND.(Tset.GT.Twex1)) THEN C1*** The cooling tower is cycling between the two fan speeds Pos=2 C1*** Calculate the time period during which the tower is working at the C1*** maximum rate Teta=(Tset-Twex2)/(Twex1-Twex2) TwexMean=Tset ENDIF IF (Tset.LE.Twex1) THEN C1*** The cooling tower has to work at the maximum rate all the time Pos=1 Teta=1 TwexMean=Twex1 ENDIF C*****OUTPUTS 6 (converted in TRNSYS units) C************** out(1)=DBLE(Pos) out(2)=DBLE(Teta) out(3)=DBLE(Twex1-273.15) out(4)=DBLE(Twex2-273.15) out(5)=DBLE(TwexOFF-273.15) out(6)=DBLE(TwexMean-273.15) RETURN 1 END SUBROUTINE LINKCK(ENAME1,ENAME2,ILINK,LNKTYP) C*************************************************************************** C THIS SUBROUTINE WAS WRITTEN FOR TRNSYS 14.0 LINK CHECKING - THIS ROUTINE C IS CALLED BY OTHER SUBROUTINES WHEN AN UNLINKED SUBROUTINE HAS BEEN C FOUND. LINKCK IS NEEDED IN ORDER TO AVOID PUTTING COMMON BLOCKS LUNITS C AND CONFIG IN THE TRNSYS TYPES - JWT -- 3/93 C*************************************************************************** COMMON /LUNITS/ LUR,LUW,IFORM,LUK COMMON /CONFIG/ TRNEDT,PERCOM,HEADER,PRTLAB,LNKCHK,PRUNIT,IOCHEK, 1 PRWARN COMMON /SIM/TIME0,TFINAL,DELT,IWARN CHARACTER*1 TRNEDT,PERCOM,HEADER,PRTLAB,LNKCHK,PRUNIT,IOCHEK, 1 PRWARN CHARACTER*6 ENAME1,ENAME2 INTEGER ILINK,LNKTYP C ILINK = 1 --> GENERATE AN ERROR MESSAGE AND STOP TRNSYS C ILINK = 2 --> GENERATE A WARNING BUT DON'T STOP TRNSYS C ILINK = 3 --> TRNSYS HAS FOUND AN UNLINKED TYPE - GENERATE AN ERROR AND C STOP THE PROGRAM C ILINK = 4 --> WARN THE USER THAT A ROUTINE REQUIRES AN EXTERNAL FUNCTION C ENAME1 --> CALLING PROGRAM THAT NEEDED THE UNLINKED FILE C ENAME2 --> FILE THAT WAS NOT FOUND BY ENAME1 SUBROUTINE C LNKTYP --> TYPE NUMBER THAT IS UNLINKED IF((LNKCHK.EQ.'Y').OR.(LNKCHK.EQ.'y')) THEN IF(ILINK.EQ.1) THEN WRITE(LUW,20) 104,ENAME1,ENAME2 WRITE(LUW,15) CALL MYSTOP(104) ELSE IF(ILINK.EQ.2) THEN WRITE(LUW,20) 104,ENAME1,ENAME2 IWARN=IWARN+1 ELSE IF(ILINK.EQ.3) THEN WRITE(LUW,25) 105,LNKTYP,LNKTYP WRITE(LUW,15) CALL MYSTOP(105) ELSE IF(ILINK.EQ.4) THEN WRITE(LUW,35) LNKTYP,ENAME1,ENAME2 IWARN=IWARN+1 ELSE IF(ILINK.EQ.5) THEN WRITE(LUW,40) 105,LNKTYP,LNKTYP WRITE(LUW,15) CALL MYSTOP(105) ELSE WRITE(LUW,30) ENAME1 IWARN=IWARN+1 ENDIF ENDIF 15 FORMAT(//2X,47H*** SIMULATION TERMINATED WITH ERROR STATUS ***/) 20 FORMAT(//,1X,'***** ERROR *****',8X,'TRNSYS ERROR # ',I3,/1X,A6, 1' REQUIRES THE FILE "',A6,'" WHICH WAS CALLED BUT NOT LINKED.',/1X 1,'PLEASE LINK IN THE REQUIRED FILE AND RERUN THE SIMULATION.') 25 FORMAT(//,1X,'***** ERROR *****',8X,'TRNSYS ERROR # ',I3,/1X, 1'TYPE ',I3,' WAS CALLED IN THE TRNSYS INPUT FILE BUT NOT LINKED.', 1/1X,'LINK TYPE ',I3,' BEFORE RUNNING THIS SIMULATION.') 30 FORMAT(/1X,'*****WARNING*****',/1X,'THE LINKCK SUBROUTINE WAS CALL 1ED WITH AN INVALID OPERAND.',/1X,'THE PROGRAM WHICH CALLED LINKCK 1WITH THE IMPROPER OPERAND WAS ',A6,'.',/1X,'PLEASE MAKE SURE THAT 1THE CALLING PROGRAM IS FIXED OR UNLINKED SUBROUTINES MAY ',/1X,'GO 1 UNNOTICED.') 35 FORMAT(/1X,'*****WARNING*****',/1X,'UNIT ',I2,' ',A6,' REQUIRES TH 1E SUBROUTINE ',A6,/1X,'MAKE SURE THAT THIS SUBROUTINE IS LINKED IN 1 TO AVOID PROBLEMS. IT MAY ALREADY BE LINKED IN.',/) 40 FORMAT(//,1X,'***** ERROR *****',8X,'TRNSYS ERROR # ',I3,/1X, 1'TYPE',I3,' WAS CALLED IN THE TRNSYS INPUT FILE BUT NOT LINKED.', 1/1X,'A DUMMY TYPE SUBROUTINE WAS CALLED IN ITS PLACE. PLEASE LINK' 1,/1X,'TYPE',I3,' BEFORE RUNNING THIS SIMULATION OR TURN OFF THE CH 1ECK'/1X,'FOR UNLINKED SUBROUTINES OPTION IN THE CONFIGURATION FILE 1.') RETURN END SUBROUTINE TYPE70 (TIME,XIN,OUT,T,DTDT,PAR,INFO,ICNTRL,*) C************************************************************************ C* Copyright ASHRAE A Toolkit for Primary HVAC System Energy C* Calculation C*********************************************************************** C* SUBROUTINE: TYPE70 (TOWERSS) C* C* LANGUAGE: FORTRAN 77 C* C* PURPOSE: The purpose is to C* determine the exhaust water temperature C* and the exhaust air wet bulb temperature C* when the cooling tower is in steady state C* regime C*********************************************************************** C* INPUT VARIABLES: C* MfrW Water mass flow rate (kg/s) C* xin(1) (kg/hr) C* MfrAir Air mass flow rate (kg/s) C* xin(2) (kg/hr) C* Twsu Supply water temperature (K) C* xin(3) (øC) C* Twbsu Supply air wet-bulb temperature (K) C* xin(4) (øC) C* patm Atmospheric pressure (Pa) C* xin(5) (Atm) C* C* OUTPUT VARIABLES C* Twex Exhaust water temperature (K) C* out(1) (øC) C* Twbex Exhaust air wet-bulb temperature (K) C* out(2) (øC) C* Qwair Total heat flow rate from water stream (W) C* out(3) (kJ/hr) C* C* PARAMETERS C* AU Actual heat transfer coefficient (W/K) C* par(1) (kJ/hr/øC) C* C* FLUID PROPERTY C* cpWat Specific heat of liquid water (J/kg/K) C* cpMoistAir Specific heat of moist air (J/kg/K) C*********************************************************************** C MAJOR RESTRICTIONS: The moist air specific heat is supposed C to remain constant. C C DEVELOPER: Jean Lebrun C Marc Grodent C University of LiŠge, Belgium C C DATE: March 1, 1995 C C SUBROUTINE CALLED: PSYCH C LINKCK C C Modified for TRNSYS: October 27, 1995 C Jean-Pascal Bourdouxhe C*********************************************************************** C INTERNAL VARIABLES C hsu Supply moist air enthalpy (J/kg) C hex Exhaust moist air enthalpy (J/kg) C cpf Fictitious specific heat (J/kg/K) C CrW Water capacity flow rate (W/K) C Crf Fictitious fluid capacity flow rate (W/K) C Crratio Ratio of the minimum capacity (-) C flow rate to the maximum one C AUf Fictitious heat transfer coefficient (W/K) C CrMin Minimum capacity flow rate (W/K) C CrMax Maximum capacity flow rate (W/K) C NTU Number of transfer unit (-) C Eff Effectiveness of the heat exchanger (-) C Toler Relative error tolerance (-) C Twbexp Storage variable (K) C ErrRel Relative error (-) C*********************************************************************** DOUBLE PRECISION XIN,OUT INTEGER*4 INFO DIMENSION PAR(1),xin(5),out(3),INFO(15),PSYDAT(9) COMMON /LUNITS/ LUR,LUW,IFORM,LUK COMMON /SIM/ TIME0,TFINAL,DELT,IWARN COMMON /STORE/ NSTORE,IAV,S(5000) COMMON /CONFIG/ TRNEDT,PERCOM,HEADER,PRTLAB,LNKCHK,PRUNIT,IOCHEK, . PRWARN REAL MfrW,MfrAir,NTU DATA cpMoistAir,cpWat/1025,4187/ DATA Toler/1E-03/ INFO(6)=3 C****INPUTS 5 (converted in SI units) C************ MfrW=SNGL(xin(1)/3600) MfrAir=SNGL(xin(2)/3600) Twsu=SNGL(xin(3)+273.15) Twbsu=SNGL(xin(4)+273.15) patm=SNGL(xin(5)*101325) C****PARAMETER 1 (converted into SI units) C*************** AU=par(1)/3.6 IF (AU.EQ.0) GOTO 20 C1*** Calculate the supply moist air enthalpy PSYDAT(1)=patm/101325 PSYDAT(2)=Twbsu-273.15 PSYDAT(4)=1.0 CALL PSYCH(TIME,INFO,1,2,0,PSYDAT,1,0,*5) CALL LINKCK('TYPE70','PSYCH',1,99) 5 CONTINUE hsu=PSYDAT(7)*1000 C1*** Calculate the water capacity flow rate CrW=cpWat*MfrW C1*** First guess of the exhaust air wet-bulb temperature Twbex=Twbsu+5 C1*** Calculate the exhaust moist air enthalpy 10 PSYDAT(2)=Twbex-273.15 CALL PSYCH(TIME,INFO,1,2,0,PSYDAT,1,0,*15) CALL LINKCK('TYPE70','PSYCH',1,99) 15 CONTINUE hex=PSYDAT(7)*1000 C1*** Calculate the fictitious specific heat and the fictitious fluid C1*** capacity flow rate cpf=(hex-hsu)/(Twbex-Twbsu) Crf=MfrAir*cpf C2*** Calculate the ratio of the minimum capacity flow rate to the C2*** maximum one CrMin=MIN(CrW,Crf) CrMax=MAX(CrW,Crf) Crratio=CrMin/CrMax C2*** Calculate the fictitious heat transfer coefficient and the number C2*** of transfer unit AUf=AU*cpf/cpMoistAir NTU=AUf/CrMin C1*** Calculate the effectiveness of the heat exchanger IF (Crratio.LE.0.995) THEN Eff=(1-EXP(-NTU*(1-Crratio)))/(1-Crratio*EXP(-NTU*(1-Crratio))) ELSE Eff=NTU/(1+NTU) ENDIF C1*** Calculate the air-water heat transfer Qwair=Eff*CrMin*(Twsu-Twbsu) Twbexp=Twbex C1*** Recalculate the exhaust air wet-bulb temperature Twbex=Twbsu+Qwair/Crf C1*** If converged then leave loop ErrRel=ABS((Twbex-Twbexp)/Twbexp) IF (ErrRel.GT.Toler) GOTO 10 C1*** Calculate the exhaust water temperature Twex=Twsu-Qwair/CrW 20 CONTINUE C*****OUTPUTS 3 (converted in TRNSYS units) C************** IF (AU.EQ.0.) THEN out(1)=xin(3) out(2)=xin(4) out(3)=0 ELSE out(1)=DBLE(Twex-273.15) out(2)=DBLE(Twbex-273.15) out(3)=DBLE(Qwair*3.6) ENDIF RETURN 1 END SUBROUTINE PSYCH(TIME,INFO,IUNITS,MODE,WBMD,PSYDAT,EMODE,STATUS,*) C**************************************************************************** C PSYCHROMETRIC CHART SUBROUTINE C C THIS ROUTINE IS CALLED BY TYPES 33,51 AND 52 C C MODES 1-5: C THESE MODES TAKE AS INPUT PATM (IN ATMOSPHERES), A DRY BULB C TEMP., AND ONE OTHER PROPERTY: WET BULB TEMP., REL.HUMIDITY(FRACTION), C DEW PT.TEMP.,HUMIDITY RATIO, OR ENTHALPY, DEPENDING ON MODE. C OUTPUTS ARE HUMIDITY RATIO (OR REL.HUMIDITY IN MODE 4), WET BULB TEMP., C ENTHALPY (OR REL.HUMIDITY IN MODE 5), MIXTURE DENSITY, AND DRY C AIR DENSITY. C C MODE 6: C MODE 6 TAKES AS AN INPUT PATM, HUMIDITY RATIO AND ENTHALPY, AND C RETURNS ALL OF THE OTHER PROPERTIES. C C THE WET BULB TEMPERATURE IS ONLY CALCULATED IF WBMODE EQUALS ONE. C C TEMPERATURES ARE IN CELSIUS (IUNITS=1) OR FAHRENHEIT (IUNITS=2). C ENTHALPY IS IN KJ/KG (IUNITS=1) OR BTU/LBM (IUNITS=2), AND C DENSITY IS IN KG/M**3 (IUNITS=1) OR LBM/FT**3 (IUNITS=2). C THE REFERENCE STATES FOR ENTHALPIES ARE: C HAIR=0.0 AT 0. DEG C AND 0. DEG F C HW(LIQUID)=0.0 AT 0. DEG C AND 32. DEG F C C THE INFO ARRAY CONTAINS THE TRNSYS UNIT AND TYPE NUMBER FROM THE C COMPONENT WHICH CALLS THE PSYCH ROUTINE. C THE PSYDAT ARRAY CONTAINS THE MOIST AIR PROPERTIES. C C LAST MODIFIED - 3/93 -- JWT C*************************************************************************** COMMON /LUNITS/LUR,LUW,IFORM,LUK INTEGER WBMD,WBMODE,EMODE,STATUS DIMENSION INFO(15),PSYDAT(9) DATA RA/287.055/, PAOLD/0./ C ASSIGN LOCAL VARIABLES: WBMODE = WBMD PATM = PSYDAT(1) TDB = PSYDAT(2) TWB = PSYDAT(3) TWBOLD=-9.999E20 RH = PSYDAT(4) TDP = PSYDAT(5) W = PSYDAT(6) H = PSYDAT(7) STATUS = 0 C UNIT CONVERSIONS IF(IUNITS .EQ. 2) THEN TDB = (TDB - 32.)/1.8 TWB = (TWB - 32.)/1.8 TDP = (TDP - 32.)/1.8 H = (H - 7.687)/0.43002 ENDIF C CHECK THAT THE TOTAL PRESSURE IS WITHIN THE IDEAL GAS RANGE. IF (PATM .GT. 5.0) THEN CALL PSYERR(TIME,INFO,EMODE,1,STATUS) END IF IF (PATM .LE. 0.0) THEN WRITE(LUW,250) 113,INFO(1),INFO(2) CALL MYSTOP(113) RETURN 1 END IF C FOR MODE 6, CHECK THAT THE ENTHALPY IS GREATER THAN THE C SATURATION ENTHALPY (MINIMUM) FOR THE GIVEN HUMIDITY RATIO C AND THAT THE HUMIDITY RATIO IS GREATER THAN 0. IF (MODE .EQ. 6) THEN IF (W .LT. 0.) THEN CALL PSYERR(TIME,INFO,EMODE,3,STATUS) W = 0. GO TO 99 ELSE IF (W .EQ. 0.) THEN GO TO 99 END IF CALL DEWPT(INFO,PATM,W,TDP,STATUS,EMODE) HDP = TDP + W*(2501. + 1.805*TDP) HMIN = HDP IF (H .LT. HMIN) THEN CALL PSYERR(TIME,INFO,EMODE,2,STATUS) H = HMIN END IF 99 TDB = (H - 2501.*W)/(1. + 1.805*W) END IF C FIND SATURATION PRESSURE OF WATER AT WET BULB, DRY BULB, OR C DEW POINT TEMPERATURE. CALL SAT(INFO,TDB,PSATDB,STATUS,EMODE) GOTO (1,2,3,2,2,2) ,MODE C-- CHECK FOR IMPOSSIBLE WET BULB TEMPERATURES AND CORRECT THEM C IF POSSIBLE. 1 IF (TWB .GT. TDB .AND. PSATDB .GE. PATM) THEN WRITE(LUW,1750) 114,INFO(1),INFO(2) CALL MYSTOP(114) RETURN 1 ELSE IF (TWB .GT. TDB) THEN CALL PSYERR(TIME,INFO,EMODE,4,STATUS) TWB = TDB PSAT = PSATDB GOTO 5 END IF CALL SAT (INFO,TWB,PSAT,STATUS,EMODE) C ERROR: IF PSATWB IS GREATER THAN PATM. IF (PSAT .GE. PATM) THEN WRITE(LUW,1750) 114,INFO(1),INFO(2) CALL MYSTOP(114) RETURN 1 END IF GOTO 5 2 PSAT = PSATDB GOTO 5 C CHECK FOR IMPOSSIBLE DEW POINT TEMPERATURES AND C CORRECT THEM IF POSSIBLE. 3 IF (TDP .GT. TDB .AND. PSATDB .GE. PATM) THEN WRITE(LUW,2250) 115,INFO(1),INFO(2) CALL MYSTOP(115) RETURN 1 ELSE IF (TDP .GT. TDB) THEN CALL PSYERR(TIME,INFO,EMODE,5,STATUS) TDP=TDB END IF CALL SAT(INFO,TDP,PSAT,STATUS,EMODE) C ERROR: IF PSATDP IS GREATER THAN PATM. IF (PSAT .GE. PATM) THEN WRITE(LUW,2250) 115,INFO(1),INFO(2) CALL MYSTOP(115) RETURN 1 END IF 5 CONTINUE C CALCULATE HUMIDITY RATIO AND WET BULB TEMPERATURE GO TO (10,20,30,40,50,60), MODE C MODE 1 -- DRY BULB AND WET BULB SUPPLIED 10 IF (TWB .LE. 0.) THEN P = PSAT - 5.704E-4*(TDB-TWB)*PATM W = .62198 * P/(PATM-P) ELSE WSAT = .62198 * PSAT/(PATM-PSAT) W = WSAT - (TDB-TWB)*(0.24 + .441*WSAT)/(597.31 . + 0.441*TDB - TWB) ENDIF IF (W .LT. 0.0) THEN CALL PSYERR(TIME,INFO,EMODE,6,STATUS) W = 0.0 H = TDB TWBOLD = TWB WBMODE = 1 PSAT = PSATDB GO TO 60 END IF H = TDB + W*(2501. + 1.805*TDB) GO TO 100 C MODE 2 -- DRY BULB AND RELATIVE HUMIDITY SUPPLIED 20 IF (RH .LT. 0.) THEN CALL PSYERR(TIME,INFO,EMODE,7,STATUS) RH=0.0 ELSE IF (PSAT .GE. PATM) THEN RHMAX = PATM/PSAT IF (RH .GE. (.99*RHMAX)) THEN WRITE(LUW,3750) 116,INFO(1),INFO(2) CALL MYSTOP(116) RETURN 1 END IF ELSE IF (RH .GT. 1.) THEN CALL PSYERR(TIME,INFO,EMODE,8,STATUS) RH=1.0 END IF W = .62198 * PSAT*RH/(PATM-PSAT*RH) GO TO 40 C MODE 3 -- DRY BULB AND DEW POINT SUPPLIED 30 W = .62198 * PSAT/(PATM-PSAT) C FIND ENTHALPY FOR MODES 2 - 4 40 IF (PSATDB .LT. PATM) THEN WMAX = .62198 * PSATDB/(PATM-PSATDB) IF (W .GT. WMAX) THEN CALL PSYERR(TIME,INFO,EMODE,9,STATUS) W = WMAX END IF END IF IF (W .LT. 0.0) THEN CALL PSYERR(TIME,INFO,EMODE,3,STATUS) W = 0. END IF H = TDB + W*(2501. + 1.805*TDB) GO TO 60 C MODE 5 -- DRY BULB AND ENTHALPY SUPPLIED 50 IF (PSATDB .LT. PATM) THEN WMAX = .62198 * PSAT/(PATM-PSAT) HMAX = TDB + WMAX*(2501. + 1.805*TDB) IF (H .GT. HMAX) THEN CALL PSYERR(TIME,INFO,EMODE,10,STATUS) H = HMAX END IF END IF HMIN = TDB IF (H .LT. HMIN) THEN CALL PSYERR(TIME,INFO,EMODE,11,STATUS) H = HMIN END IF W = (H-TDB)/(2501.+1.805*TDB) C FIND WET BULB TEMPERATURE FOR MODES 2 - 6 IF WBMODE EQUALS 1. 60 IF (WBMODE .NE. 1) THEN TWB=TDB GO TO 100 END IF DPRESS = ABS(1.-PATM) C THE FOLLOWING CORRELATION IS FOR 1 ATMOSPHERES TOTAL PRESSURE. C IF OUTSIDE THE CORRELATION RANGE, THE CORRELATION IS USED FOR C THE INITIAL GUESS IN THE ITERATIVE METHOD. IF (H .GT. 0. .AND. H .LT. 2000.) THEN Y = ALOG(H*.43002+7.687) IF (H .LE. 9.473) THEN TWB=-17.4422+1.9356*Y+.7556*Y**2+.5406*Y**3 ELSE IF (H .GT. 9.473) THEN TWB=-.6008-22.04556*Y+11.4356*Y**2-.97667*Y**3 END IF ELSE TWB = 9.99999E25 END IF C USE A NEWTON'S ITERATIVE METHOD TO FIND THE WET BULB C TEMPERATURE. IF (DPRESS.GT..001 .OR. H.LE.0. .OR. H.GT.275.) THEN ITEST=0 IF (ABS(PATM-PAOLD) .GT. 1.0E-10) THEN CALL BOIL(PATM,TBOIL) PAOLD = PATM END IF C INITIAL GUESS TWBNEW=AMIN1(TWB,(TBOIL-0.1),TDB) 70 IF (TWBNEW .GE. (TBOIL-0.09)) TWBNEW=TBOIL-0.1 CALL SAT(INFO,TWBNEW,PSAT,STATUS,EMODE) WSSTAR=.62198*PSAT/(PATM-PSAT) IF(MODE .EQ. 5) THEN W = (H-TDB)/(2501.+1.805*TDB) END IF WNEW=((2501.-2.381*TWBNEW)*WSSTAR-(TDB-TWBNEW))/ . (2501.+1.805*TDB-4.186*TWBNEW) ERR = W - WNEW IF (ABS(ERR) .LE. (.01*W)) GO TO 75 IF (W .EQ. 0.) THEN IF (ABS(ERR) .LE. .0001) GO TO 75 END IF ITEST = ITEST + 1 IF (ITEST .GE. 25) GO TO 75 C FIND THE SLOPE OF THE ERROR FUNCTION TSLOPE = 0.999*TWBNEW IF (TWBNEW .EQ. 0.) TSLOPE = -.005 CALL SAT(INFO,TSLOPE,PSLOPE,STATUS,EMODE) WSSLP=.62198*PSLOPE/(PATM-PSLOPE) WSLOPE=((2501.-2.381*TSLOPE)*WSSLP-(TDB-TSLOPE))/ . (2501.+1.805*TDB-4.186*TSLOPE) ERRSLP = W - WSLOPE DERRDT = (ERRSLP - ERR)/(TSLOPE - TWBNEW) TWBNEW = TWBNEW - ERR/DERRDT GO TO 70 75 TWB = TWBNEW END IF IF (TWB .LT. TWBOLD) TWB = TWBOLD 100 CONTINUE C FIND RELATIVE HUMIDITY, DEW POINT, MIXTURE DENSITY, C AND DRY AIR DENSITY PV = PATM*W/(.62198+W) IF(MODE .NE. 2) RH = PV/PSATDB IF(MODE .NE. 3 .AND. PV .GT. 0.) THEN CALL DEWPT(INFO,PATM,W,TDP,STATUS,EMODE) ELSE IF (MODE .NE. 3 .AND. PV .LE. 0) THEN C FOR DRY AIR, THERE IS NO DEW POINT TEMPERATURE TDP=-9.99999E25 ENDIF SPCVOL = RA*(TDB+273.15)/(PATM*101325)*(1+1.6078*W) RHOWA = 1/SPCVOL RHOWM = RHOWA*(1+W) C CONVERT OUTPUTS TO APPROPRIATE UNITS IF(IUNITS .EQ. 2) THEN H = H*0.43002+7.68 TDB = 1.8*TDB + 32. TWB = 1.8*TWB + 32. IF (TDP .GT. -9.99999E24) THEN TDP = 1.8*TDP + 32. END IF RHOWM = RHOWM/16.02 RHOWA = RHOWA/16.02 ENDIF C SET OUTPUTS IF(MODE .EQ. 6) PSYDAT(2) = TDB PSYDAT(3) = TWB PSYDAT(4) = RH PSYDAT(5) = TDP PSYDAT(6) = W PSYDAT(7) = H PSYDAT(8) = RHOWM PSYDAT(9) = RHOWA RETURN 1 250 FORMAT(//,1X,'***** ERROR *****',8X,'TRNSYS ERROR # ',I3,/1X, 1'UNIT ',I3,' TYPE ',I3,/1X,'THE PSYCHROMETRICS SUBROUTINE WAS CALL 1ED WITH AN ATMOSPHERIC PRESSURE',/1X,'LESS THAN OR EQUAL TO 0.') 1750 FORMAT(//,1X,'***** ERROR *****',8X,'TRNSYS ERROR # ',I3,/1X, 1'UNIT ',I3,' TYPE ',I3,/1X,'THE PSYCHROMETRICS SUBROUTINE WAS CALL 1ED WITH A WET BULB TEMPERATURE',/1X,'ABOVE THE MAXIMUM FOR THE GIV 1EN ATMOSPHERIC PRESSURE.') 2250 FORMAT(//,1X,'***** ERROR *****',8X,'TRNSYS ERROR # ',I3,/1X, 1'UNIT ',I3,' TYPE ',I3,/1X,'THE PSYCHROMETRICS SUBROUTINE WAS CALL 1ED WITH A DEW POINT TEMPERATURE',/1X,'ABOVE THE MAXIMUM FOR THE GI 1VEN ATMOSPHERIC PRESSURE.') 3750 FORMAT(//,1X,'***** ERROR *****',8X,'TRNSYS ERROR # ',I3,/1X, 1'UNIT ',I3,' TYPE ',I3,/1X,'THE PSYCHROMETRICS SUBROUTINE WAS CALL 1ED WITH A RELATIVE HUMIDITY',/1X,'GREATER THAN POSSIBLE AT THE GIV 1EN DRY BULB TEMPERATURE.') C6000 FORMAT(//,1X,'***** ERROR *****',8X,'TRNSYS ERROR # ',I3,/1X, C 1'THE SIMULATION WAS HALTED BECAUSE THERE WERE ',I3,' WARNINGS FROM C 1 THE',/1X,'PSYCHROMETRICS SUBROUTINE. CHECK FOR PROPER USE OF THI C 1S SUBROUTINE.') END SUBROUTINE SAT(INFO,TIN,PSAT,STATUS,EMODE) C*************************************************************************** C C SUBROUTINE FOR FINDING SATURATION PRESSURE OF WATER AT A GIVEN C TEMPERATURE C*************************************************************************** DIMENSION INFO(15) INTEGER EMODE,STATUS COMMON/LUNITS/LUR,LUW,IFORM,LUK C THE FOLLOWING CORRELATION FOR THE SATURATION PRESSURE OF C WATER VAPOR (IN PASCALS) AS A FUNCTION OF TEMPERATURE IS C TAKEN FROM THE 1985 ASHRAE FUNDAMENTALS HANDBOOK (SI). C DATA C1/-5674.5359/,C2/6.3925247/,C3/-0.9677843E-2/ DATA C4/0.62215701E-6/,C5/0.20747825E-8/,C6/-0.9484024E-12/ DATA C7/4.1635019/,C8/-5800.2206/,C9/1.3914993/ DATA C10/-0.048640239/,C11/0.41764768E-4/,C12/-0.14452093E-7/ DATA C13/6.5459673/ T = TIN + 273.15 IF (T .LE. 0.) THEN WRITE(LUW,200) 118,INFO(1),INFO(2) CALL MYSTOP(118) RETURN END IF C SATURATION PRESSURE OVER ICE (-100 C TO 0 C) IF (T .LT. 273.15) THEN PSAT=EXP(C1/T+C2+C3*T+C4*T**2+C5*T**3+C6*T**4+C7*ALOG(T)) C SATURATION PRESSURE OVER LIQUID WATER (0 C TO 200 C) ELSE IF (T .GE. 273.15) THEN PSAT=EXP(C8/T+C9+C10*T+C11*T**2+C12*T**3+C13*ALOG(T)) END IF C TEMPERATURE OUT OF THE RANGE USED FOR THE CORRELATION IF (T .LT. 173.15 .OR. T .GT. 473.15) THEN CALL PSYERR(TIME,INFO,EMODE,12,STATUS) END IF C CONVERT PRESSURE FROM PASCALS TO ATMOSPHERES PSAT = PSAT/101325 RETURN 200 FORMAT(//,1X,'***** ERROR *****',8X,'TRNSYS ERROR # ',I3,/1X, 1'UNIT ',I3,' TYPE ',I3,'THE "SAT" SUBROUTINE OF THE PSYCHROMETRICS 1 SUBROUTINE WAS CALLED',/1X,'WITH A TEMPERATURE BELOW -273 C.') END SUBROUTINE DEWPT(INFO,PATM,W,TDP,STATUS,EMODE) C*************************************************************************** C C SUBROUTINE FOR FINDING THE DEW POINT TEMPERATURE GIVEN C THE HUMIDITY RATIO. THE CORRELATION IS FROM THE 1981 C ASHRAE FUNDAMETALS HANDBOOK. THE DEW POINT TEMPERATURE C IS IN DEGREES C AND ATMOSPHERIC PRESSURE IN PASCALS. C*************************************************************************** DIMENSION INFO(15) INTEGER EMODE,STATUS COMMON /LUNITS/ LUR,LUW,IFORM,LUK PV = PATM*W/(.62198+W) Y = ALOG(1.013E05*PV) TDP = -35.957 - 1.8726*Y + 1.1689*Y*Y IF(TDP .LT. 0.) TDP = -60.45 + 7.0322*Y + 0.3700*Y*Y IF (TDP.GT.70. .OR. TDP.LT.-60.) THEN CALL PSYERR(TIME,INFO,EMODE,13,STATUS) END IF RETURN END SUBROUTINE BOIL(PATM,TBOIL) C**************************************************************************** C C SUBROUTINE FOR FINDING THE BOILING TEMPERATURE OF WATER GIVEN C THE TOTAL PRESSURE. A NEWTON'S METHOD IS USED WITH THE C SATURATED WATER VAPOR PRESSURE CORRELATION FROM THE 1985 ASHRAE C FUNDAMENTALS HANDBOOK. C**************************************************************************** COMMON /LUNITS/LUR,LUW,IFORM,LUK DATA C1/-5674.5359/,C2/6.3925247/,C3/-0.9677843E-2/ DATA C4/0.62215701E-6/,C5/0.20747825E-8/,C6/-0.9484024E-12/ DATA C7/4.1635019/,C8/-5800.2206/,C9/1.3914993/ DATA C10/-0.048640239/,C11/0.41764768E-4/,C12/-0.14452093E-7/ DATA C13/6.5459673/ PBOIL = PATM*101325 ITEST = 0 IF (PBOIL .LT. 611.21) GO TO 100 C USING ASHRAE CORRELATION FOR 0 C TO 200 C. C FIRST GUESS TBOIL EQUALS 100 C. T1 = 100 + 273.15 10 ZZ=C8/T1+C9+C10*T1+C11*T1**2+C12*T1**3+C13*ALOG(T1) P1=EXP(ZZ) ERR = PBOIL - P1 IF (ABS(ERR) .LE. (.01*PBOIL)) THEN TBOIL = T1 - 273.15 RETURN END IF ITEST = ITEST +1 IF (ITEST .GT. 100) THEN WRITE(LUW,232) 211,100 232 FORMAT(//,1X,'***** ERROR *****',8X,'TRNSYS ERROR # ',I3,/1X, . 'NUMBER OF ITERATIONS IN THE PSYCHROMETRICS SUBROUTINE'/ . ' EXCEEDS ',I3) CALL MYSTOP(211) RETURN ENDIF DERRDT=-(P1)*(-C8/T1**2+C10+2*C11*T1+3*C12*T1**2+C13/T1) TOLD = T1 T1 = T1 - ERR/DERRDT GO TO 10 100 CONTINUE C USING ASHRAE CORRELATION FOR -100 C TO 0 C. C FIRST GUESS TBOIL EQUALS 0 C. T1 = 273.15 110 ZZ=C1/T1+C2+C3*T1+C4*T1**2+C5*T1**3+C6*T1**4+C7*ALOG(T1) P1=EXP(ZZ) ERR = PBOIL - P1 IF (ABS(ERR) .LE. (.01*PBOIL)) THEN TBOIL = T1 - 273.15 RETURN END IF ITEST = ITEST +1 DERRDT=-P1*(-C1/T1**2+C3+2*C4*T1+3*C5*T1**2+4*C6*T1**3+C7/T1) TOLD = T1 T1 = T1 - ERR/DERRDT GO TO 110 END SUBROUTINE PSYERR(TIME,INFO,EMODE,ENUM,STATUS) C*************************************************************************** C SUBROUTINE FOR HANDLING OUTPUT OF WARNING MESSAGES C C EMODE IS EITHER 0, 1, OR 2. IF EQUAL TO: C 0 - DONOT PRINT WARNING MESSAGES, RETURN WARNING NUMBER (STATUS) C 1 - PRINT ONLY ONE WARNING FOR THE ENTIRE SIMULATION C 2 - PRINT ONE WARNING EACH TIMESTEP C WARNINGS ARE PRINTED FOR EACH WARNING CONDITION AND EACH UNIT (UP TO C IUMAX) CALLING PSYCH C*************************************************************************** INTEGER ENUM,STATUS,EMODE,UNIT LOGICAL MAXU C IUMAX IS THE MAXIMUM NUMBER OF UNIT NUMBERS THAT WILL BE STORED. C IF MORE THAN IUMAX UNITS CALL PSYCH WITH THE SAME WARNING CONDITION C THEN THE UNIT NUMBERS ARE NO LONGER USED IN DETERMINING IF WARNINGS C HAVE ALREADY BEEN PRINTED C IWMAX IS THE NUMBER OF POSSIBLE WARNING CONDITIONS C (ENUM MUST BE BETWEEN 1 AND IWMAX) PARAMETER (IUMAX=7,IWMAX=13,INIT=(IUMAX+1)*IWMAX) DIMENSION INFO(15),WTIME(IWMAX,IUMAX+1),UNIT(IWMAX,IUMAX), . MAXU(IWMAX),IUNITS(IWMAX) COMMON /SIM/ TIME0,TFINAL,DELT,IWARN COMMON /LUNITS/LUR,LUW,IFORM,LUK DATA WTIME/INIT*1.0E6/, MAXU/IWMAX*.FALSE./, IUNITS/IWMAX*0/ C CHECK FOR ALLOWABLE EMODE (0,1,2) IF (EMODE .LT. 0 .OR. EMODE .GT. 2) THEN WRITE(LUW,100) 119,INFO(1),INFO(2) 100 FORMAT(//,1X,'***** ERROR *****',8X,'TRNSYS ERROR # ',I3,/1X, . 'UNIT ',I3,' TYPE ',I3,/1X,'THE PSYCHROMETRICS SUBROUTINE WAS C .ALLED WITH AN UNALLOWABLE "EMODE."') CALL MYSTOP(119) RETURN END IF C SET STATUS STATUS = ENUM C TRANSFER ACCORDING TO EMODE LINE = EMODE + 1 GOTO (50,60,60) LINE C EMODE EQUALS 0 *** 50 RETURN C EMODE EQUALS 1 OR 2 *** C CHECK TO SEE IF UNIT NUMBER HAS BEEN WARNED BEFORE 60 IF (IUNITS(ENUM) .EQ. 0) THEN C FIRST UNIT TO HAVE A WARNING IUNITS(ENUM)=1 UNIT(ENUM,1)=INFO(1) ISTORE = 1 GO TO 75 END IF C ** CHECK IF STORAGE MAXIMUM PREVIOUSLY REACHED C IF SO, GO TO TIMER SECTION IF (MAXU(ENUM)) THEN ISTORE = IUMAX + 1 GO TO 75 END IF C ** CHECK STORED UNIT NUMBERS. IF FOUND, GO TO TIMER SECTION DO 70 I=1,IUNITS(ENUM) IF (INFO(1) .EQ. UNIT(ENUM,I)) THEN ISTORE = I GO TO 75 END IF 70 CONTINUE C STORE NEW UNIT NUMBER IF STORAGE AVAILABLE C RAN OUT OF UNIT STORAGE IF (IUNITS(ENUM) .EQ. IUMAX) THEN MAXU(ENUM) = .TRUE. ISTORE = IUNITS(ENUM) + 1 ELSE C STORE NEW UNIT NUMBER IUNITS(ENUM) = IUNITS(ENUM) + 1 ISTORE = IUNITS(ENUM) UNIT(ENUM,ISTORE) = INFO(1) END IF C CHECK WARNING TIMES C CHECK TO SEE IF SPECIFIED WARNING HAS EVER BEEN PRINTED FOR THIS UNIT C AND SET WTIME TO CURRENT TIME IF WARNING WILL BE PRINTED 75 IF (TIME .LT. (WTIME(ENUM,ISTORE)-DELT/2.)) THEN C NEVER PRINTED WTIME(ENUM,ISTORE) = TIME C CHECK TO SEE IF WARNING HAS BEEN PRINTED FOR THIS UNIT DURING C THE PRESENT TIMESTEP ELSE IF (ABS(TIME-WTIME(ENUM,ISTORE)) .LT. DELT/2.) THEN C ALREADY PRINTED THIS TIMESTEP SO RETURN WITHOUT PRINTING RETURN C WARNING PRINTED DURING PREVIOUS TIMESTEP. IF EMODE=1 DONOT PRINT ELSE IF (EMODE .EQ. 1) RETURN WTIME(ENUM,ISTORE) = TIME END IF C PRINT SECTION *** C EMODE EQUALS 1 IF (EMODE .EQ. 1) THEN IF (MAXU(ENUM)) THEN WRITE(LUW,200) IUMAX IWARN=IWARN+1 200 FORMAT(/20X,'*** WARNING ***',/6X,'MORE THAN ',I2,' UNITS', . ' HAVE CALLED THE PSYCHROMETRICS',/6X,'ROUTINE ONE', . ' OR MORE TIMES DURING THE SIMULATION WITH') ELSE WRITE(LUW,300) INFO(1),INFO(2),INFO(1) IWARN=IWARN+1 300 FORMAT(/10X,'*** WARNING IN UNIT ',I2,' TYPE ',I2,' ***', . /6X,'UNIT NUMBER ',I2,' HAS CALLED THE PSYCHROMETRICS', . /6X,'ROUTINE ONE OR MORE TIMES DURING THE SIMULATION', . ' WITH') END IF ELSE C EMODE EQUALS 2 IF (MAXU(ENUM)) THEN WRITE(LUW,400) TIME IWARN=IWARN+1 400 FORMAT(/10X,'*** WARNING AT TIME ',F10.4,' ***',/6X, . 'ONE OR MORE UNITS HAVE CALLED THE PSYCH ROUTINE', . ' WITH') ELSE WRITE(LUW,500) INFO(1),INFO(2),TIME,INFO(1) IWARN=IWARN+1 500 FORMAT(/4X,'*** WARNING IN UNIT ',I2,' TYPE ',I2, . ' AT TIME ', F10.4,' ***',/6X,'UNIT NUMBER ', . I2,' HAS CALLED THE ', . 'PSYCH ROUTINE WITH') END IF END IF C WARNING CONDITIONS GO TO (1,2,3,4,5,6,7,8,9,10,11,12,13), ENUM 1 WRITE(LUW,1001) 1001 FORMAT(6X,'A TOTAL PRESSURE GREATER THAN 5 ATMOSPHERES. BEWARE', . /6X,'THAT THE IDEAL GAS RELATIONS USED IN THE PSYCHRO-', . /6X,'METRICS ARE NOT ACCURATE AT HIGHER PRESSURES.') RETURN 2 WRITE(LUW,1002) 1002 FORMAT(6X,'AN ENTHALPY LESS THAN POSSIBLE FOR THE GIVEN HUMIDITY', . /6X,'RATIO. THE AIR WAS ASSUMED TO BE SATURATED AT THE', . /6X,'GIVEN HUMIDITY RATIO AND THE ENTHALPY SET FOR THIS', . /6X,'CONDITION.') RETURN 3 WRITE(LUW,1003) 1003 FORMAT(6X,'A HUMIDITY RATIO LESS THAN 0.0. DRY AIR WAS ASSUMED', . /6X,'AND THE HUMIDITY RATIO SET TO 0.0.') RETURN 4 WRITE(LUW,1004) 1004 FORMAT(6X,'A WET BULB TEMPERATURE GREATER THAN THE DRY BULB', . /6X,'TEMPERATURE. SATURATED AIR WAS ASSUMED AND THE WET', . /6X,'BULB TEMPERATURE SET TO THE DRY BULB TEMPERATURE.') RETURN 5 WRITE(LUW,1005) 1005 FORMAT(6X,'A DEW POINT TEMPERATURE GREATER THEN THE DRY BULB', . /6X,'TEMPERATURE. THE DEW POINT WAS SET EQUAL TO THE DRY', . /6X,'BULB TEMPERATURE.') RETURN 6 WRITE(LUW,1006) 1006 FORMAT(6X,'A WET BULB TEMPERATURE BELOW THAT FOR DRY AIR AT THE', . /6X,'GIVEN DRY BULB TEMPERATURE. DRY AIR WAS ASSUMED AND', . /6X,'A NEW WET BULB TEMPERATURE FOUND.') RETURN 7 WRITE(LUW,1007) 1007 FORMAT(6X,'A RELATIVE HUMIDITY LESS THAN 0. THE RELATIVE', . /6X,'HUMIDITY WAS SET TO 0.0.') RETURN 8 WRITE(LUW,1008) 1008 FORMAT(6X,'A RELATIVE HUMIDITY GREATER THEN 1.0. THE RELATIVE', . /6X,'HUMIDITY WAS SET TO 1.0.') RETURN 9 WRITE(LUW,1009) 1009 FORMAT(6X,'A HUMIDITY RATIO ABOVE THE SATURATION HUMIDITY RATIO', . /6X,'FOR THE GIVEN DRY BULB TEMPERATURE. THE AIR WAS', . /6X,'ASSUMED SATURATED AT THE GIVEN DRY BULB TEMPERATURE', . /6X,'AND THE HUMIDITY RATIO SET FOR THIS CONDITION.') RETURN 10 WRITE(LUW,1010) 1010 FORMAT(6X,'AN ENTHALPY GREATER THEN THAT FOR SATURATED AIR AT', . /6X,'THE GIVEN DRY BULB TEMPERATURE. THE AIR WAS ASSUMED', . /6X,'SATURATED AND THE ENTHALPY SET FOR THIS CONDITION.') RETURN 11 WRITE(LUW,1011) 1011 FORMAT(6X,'AN ENTHALPY LESS THEN THAT FOR DRY AIR AT THE', . /6X,'GIVEN DRY BULB TEMPERATURE. DRY AIR WAS ASSUMED', . /6X,'AND THE ENTHALPY SET FOR THIS CONDITION.') RETURN 12 WRITE(LUW,1012) 1012 FORMAT(6X,'CONDITIONS OUTSIDE THE INTENDED RANGE OF THE WATER', . /6X,'VAPOR SATURATION PRESSURE CORRELATION. THE', . /6X,'CORRELATION, FROM THE 1985 ASHRAE FUNDAMENTALS', . /6X,'HANDBOOK, IS FOR TEMPERATURE RANGE OF -100 C', . /6X,'TO 200 C.') RETURN 13 WRITE(LUW,1013) 1013 FORMAT(6X,'CONDITIONS OUTSIDE THE INTENDED RANGE OF THE DEW', . /6X,'POINT TEMPERATURE CORRELATION. THEN CORRELATION', . /6X,'FROM THE 1981 ASHRAE FUNDAMENTALS HANDBOOK IS FOR THE', . /6X,'TEMPERATURE RANGE OF -60 C TO 70 C.') RETURN END