SUBROUTINE TYPE72 (TIME,XIN,OUT,T,DTDT,PAR,INFO,ICNTRL,*) C************************************************************************ C* Copyright ASHRAE A Toolkit for Primary HVAC System Energy C* Calculation C*********************************************************************** C* SUBROUTINE: TYPE72 (ABSPLSIM) C* C* LANGUAGE: FORTRAN 77 C* C* PURPOSE: Deals with the part-load operation of a C* absorption chiller.The purpose is to C* determine the chiller operating mode in C* order to reach the set point temperature C*********************************************************************** C* INPUT VARIABLES C* Mfrwev Water mass flow rate in the evaporator (kg/s) C* xin(1) (kg/hr) C* Choice If Choice (-) C* =1: the absorber and the condenser are set in series C* =2: the absorber and the condenser are not set in C* series C* xin(2) (-) C* Mfrwabs Water mass flow rate in the absorber (kg/s) C* xin(3) (kg/hr) C* Mfrwcd Water mass flow rate in the condenser (kg/s) C* ( = 0 if Choice = 1 ) C* xin(4) (kg/hr) C* Twsuev Evaporator supply water temperature (K) C* xin(5) (øC) C* Twsuabs Absorber supply water temperature (K) C* xin(6) (øC) C* Twsucd Condenser supply water temperature (K) C* ( = 0 if Choice = 1 ) C* xin(7) (øC) C* Tset Set point temperature at evaporator exhaust (K) C* xin(8) (øC) C* psteamMax Maximum steam pressure (Pa) C* xin(9) (atm) C* psteamMin Minimum steam pressure (Pa) C* xin(10) (atm) C* PeVG Guess of the cooling capacity in full load (W) C* xin(11) (kJ/hr) C* PcdG Guess of the heat rejected in the condenser (W) C* in full load C* xin(12) (kJ/hr) C* PabsG Guess of the heat rejected out of the absorber (W) C* in full load C* xin(13) (kJ/hr) C* C* OUTPUT VARIABLES C* Pos The value of Pos indicates the chiller operating (-) C* mode in order to reach the set point temperature C* Pos=1: Full-load C* =2: Modulating regime C* =3: ON/OFF cycling C* =4: OFF C* out(1) (-) C* Teta Time fraction during which the chiller is (-) C* working in ON regime C* out(2) (-) C* psteam Steam pressure (Pa) C* out(3) (atm) C* TwexabMean Mean absorber exhaust water temperature (K) C* out(4) (øC) C* TwexevMean Mean evaporator exhaust water temperature (K) C* out(5) (øC) C* TwexcdMean Mean condenser exhaust water temperature (K) C* out(6) (øC) C* PgenMean Mean value of the heat consumed by the generator (W) C* out(7) (kJ/hr) C* PabsMean Mean value of the heat rejected out of (W) C* the absorber C* out(8) (kJ/hr) C* PevMean Mean value of the cooling capacity (W) C* out(9) (kJ/hr) C* PcdMean Mean value of the heat rejected in the condenser (W) C* out(10) (kJ/hr) C* COPmean Mean value of the coefficient of performance (-) C* out(11) (-) C* MfrStMean Mean value of the steam mass flow rate (kg/s) C* out(12) (kg/hr) C* ErrDetec This variable is equal to 1 if the routine does (-) C* not converge, is equal to 2 if cristallization C* of the high-concentrated solution occurs at C* the heat-exchanger exhaust and is equal to 3 if C* the determinant of the matrix to be inversed is C* equal to 0. C* out(13) (-) C* C* PARAMETERS C* AUev Evaporator heat transfer coefficient (W/K) C* par(1) (kJ/hr/øC) C* AUcd Condenser heat transfer coefficient (W/K) C* par(2) (kJ/hr/øC) C* AUabs Absorber heat transfer coefficient (W/K) C* par(3) (kJ/hr/øC) C* AUgen Generator heat transfer coefficient (W/K) C* par(4) (kJ/hr/øC) C* AUexch Heat-exchanger heat transfer coefficient (W/K) C* par(5) (kJ/hr/øC) C* VLow Volume flow rate of weak solution (m**3/s) C* par(6) (m**3/hr) C* C*********************************************************************** C MAJOR RESTRICTONS: The surrounding heat exchanges are C neglected. The refrigerant leaves the C evaporator and the condenser as saturated C vapor and saturated liquid respectively. C The steam is assumed to be C saturated. Perfect fluid properties C are used.The absorbent properties are C valid in the following range of mass C concentration of LiBr: 45 % to 70 % . C The compression of the solution is assumed C to be isenthalpic. C C DEVELOPERS: Jean Lebrun C Bruno Boulanger C Jean-Pascal Bourdouxhe C Marc Grodent C University of LiŠge,Belgium C C DATE: March 1, 1995 C C SUBROUTINES CALLED: ABSFLSIM C LINKCK C C Modified for TRNSYS: January 29, 1995 C Jean-Pascal Bourdouxhe C*********************************************************************** C INTERNAL VARIABLES: C TwexevLT Evaporator exhaust water temperature when the (K) C chiller is operating in full load C TwexevHT Evaporator exhaust water temperature when the (K) C chiller is operating with the minimum steam C pressure C TolRel Error tolerance (K) C IterMax Maximum number of iterations allowed (-) C C Xi,Xim1,Xim2,Fcti,Fctim1 and Fctim2 are variables used in C the chord method. C*********************************************************************** IMPLICIT REAL*8 (A-H,O-Z) INTEGER*4 INFO,INFO73 DOUBLE PRECISION XIN,OUT,XIN73,OUT73 REAL*8 Mfrwev,Mfrwcd,Mfrwabs,Mfrsteam,MfrStMean REAL*4 TIME,PAR,PAR73 DIMENSION PAR(6),XIN(13),OUT(13),INFO(15),PAR73(6),XIN73(11), & OUT73(13),INFO73(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)=13 INFO73(6)=13 DATA TolRel,IterMax/1D-04,100/ C*** INPUTS 13 (converted in SI units) C************* Mfrwev=xin(1)/3600. Choice=xin(2) Mfrwabs=xin(3)/3600. Mfrwcd=xin(4)/3600. Twsuev=xin(5)+273.15 Twsuabs=xin(6)+273.15 Twsucd=xin(7)+273.15 Tset=xin(8)+273.15 psteamMax=xin(9)*101325. psteamMin=xin(10)*101325. PevG=xin(11)/3.6 PcdG=xin(12)/3.6 PabsG=xin(13)/3.6 C*** PARAMETERS 6 (converted in SI units) C**************** AUev=DBLE(par(1)/3.6) AUcd=DBLE(par(2)/3.6) AUabs=DBLE(par(3)/3.6) AUgen=DBLE(par(4)/3.6) AUexch=DBLE(par(5)/3.6) VLow=DBLE(par(6)/3600.) C1*** Compare the given set point temperature with the evaporator C1*** supply water temperature IF (Tset.GE.Twsuev) THEN C1*** Regime OFF all the time Pos=4 Teta=0 psteam=0 TwexabMean=Twsuabs TwexevMean=Twsuev IF (Choice.EQ.1) THEN TwexcdMean=Twsuabs ELSE TwexcdMean=Twsucd ENDIF PevMean=0 PgenMean=0 PabsMean=0 PcdMean=0 COPmean=0 MfrStMean=0 ELSE C1*** Compare the evaporator exhaust water temperature C1*** with its set point when the chiller is working at the C1*** maximum steam pressure xin73(1)=Mfrwev*3600. xin73(2)=Choice xin73(3)=Mfrwabs*3600. xin73(4)=Mfrwcd*3600. xin73(5)=Twsuev-273.15 xin73(6)=Twsuabs-273.15 xin73(7)=Twsucd-273.15 xin73(8)=psteamMax/101325. xin73(9)=PevG*3.6 xin73(10)=PabsG*3.6 xin73(11)=PcdG*3.6 par73(1)=SNGL(AUev*3.6) par73(2)=SNGL(AUcd*3.6) par73(3)=SNGL(AUabs*3.6) par73(4)=SNGL(AUgen*3.6) par73(5)=SNGL(AUexch*3.6) par73(6)=SNGL(VLow*3600.) CALL TYPE73 (TIME,XIN73,OUT73,T,DTDT,PAR73,INFO73,ICNTRL,*2) CALL LINKCK('TYPE72','TYPE73 ',1,99) 2 CONTINUE Pev=out73(1)/3.6 Pabs=out73(2)/3.6 Pcd=out73(3)/3.6 Pgen=out73(4)/3.6 COP=out73(5) TwexevLT=out73(6)+273.15 Twexabs=out73(7)+273.15 Twexcd=out73(8)+273.15 MfrSteam=out73(9)/3600. XUp=out73(10) h4=out73(11) XLow=out73(12) ErrDetec=out73(13) IF (ErrDetec.GT.0) GOTO 20 IF (TwexevLT.GE.Tset) THEN C1*** Regime ON all the time at maximum steam pressure Pos=1 Teta=1 psteam=psteamMax TwexabMean=Twexabs TwexevMean=TwexevLT TwexcdMean=Twexcd PevMean=Pev PgenMean=Pgen PabsMean=Pabs PcdMean=Pcd COPmean=COP MfrStMean=MfrSteam ELSE C1*** Compare the evaporator exhaust water temperature C1*** with its set point when the chiller is working at the C1*** minimum steam pressure xin73(1)=Mfrwev*3600. xin73(2)=Choice xin73(3)=Mfrwabs*3600. xin73(4)=Mfrwcd*3600. xin73(5)=Twsuev-273.15 xin73(6)=Twsuabs-273.15 xin73(7)=Twsucd-273.15 xin73(8)=psteamMin/101325. xin73(9)=PevG*3.6 xin73(10)=PabsG*3.6 xin73(11)=PcdG*3.6 par73(1)=SNGL(AUev*3.6) par73(2)=SNGL(AUcd*3.6) par73(3)=SNGL(AUabs*3.6) par73(4)=SNGL(AUgen*3.6) par73(5)=SNGL(AUexch*3.6) par73(6)=SNGL(VLow*3600.) CALL TYPE73 (TIME,XIN73,OUT73,T,DTDT,PAR73,INFO73,ICNTRL,*5) CALL LINKCK('TYPE72','TYPE73 ',1,99) 5 CONTINUE Pev=out73(1)/3.6 Pabs=out73(2)/3.6 Pcd=out73(3)/3.6 Pgen=out73(4)/3.6 COP=out73(5) TwexevHT=out73(6)+273.15 Twexabs=out73(7)+273.15 Twexcd=out73(8)+273.15 MfrSteam=out73(9)/3600. XUp=out73(10) h4=out73(11) XLow=out73(12) ErrDetec=out73(13) IF (ErrDetec.GT.0) GOTO 20 IF (TwexevHT.LT.Tset) THEN C1*** Regime ON-OFF Pos=3 Teta=(Tset-Twsuev)/(TwexevHT-Twsuev) psteam=psteamMin TwexabMean=Twsuabs+Teta*(Twexabs-Twsuabs) TwexevMean=Tset IF (Choice.EQ.1) THEN TwexcdMean=Twsuabs+Teta*(Twexcd-Twsuabs) ELSE TwexcdMean=Twsucd+Teta*(Twexcd-Twsucd) ENDIF PevMean=Teta*Pev PgenMean=Teta*Pgen PabsMean=Teta*Pabs PcdMean=Teta*Pcd COPmean=COP MfrStMean=Teta*MfrSteam ELSE C1*** Modulating regime ( Chord method ) Iter=0 Xim1=psteamMin Xim2=psteamMax Fctim1=TwexevHT-Tset Fctim2=TwexevLT-Tset 10 Xi=Xim1+(Xim1-Xim2)/(Fctim2-Fctim1)*Fctim1 xin73(1)=Mfrwev*3600. xin73(2)=Choice xin73(3)=Mfrwabs*3600. xin73(4)=Mfrwcd*3600. xin73(5)=Twsuev-273.15 xin73(6)=Twsuabs-273.15 xin73(7)=Twsucd-273.15 xin73(8)=Xi/101325. xin73(9)=PevG*3.6 xin73(10)=PabsG*3.6 xin73(11)=PcdG*3.6 par73(1)=SNGL(AUev*3.6) par73(2)=SNGL(AUcd*3.6) par73(3)=SNGL(AUabs*3.6) par73(4)=SNGL(AUgen*3.6) par73(5)=SNGL(AUexch*3.6) par73(6)=SNGL(VLow*3600.) CALL TYPE73 (TIME,XIN73,OUT73,T,DTDT,PAR73,INFO73,ICNTRL, & *15) CALL LINKCK('TYPE72','TYPE73 ',1,99) 15 CONTINUE Pev=out73(1)/3.6 Pabs=out73(2)/3.6 Pcd=out73(3)/3.6 Pgen=out73(4)/3.6 COP=out73(5) Twexev=out73(6)+273.15 Twexabs=out73(7)+273.15 Twexcd=out73(8)+273.15 MfrSteam=out73(9)/3600. XUp=out73(10) h4=out73(11) XLow=out73(12) ErrDetec=out73(13) IF (ErrDetec.GT.0) GOTO 20 Fcti=Twexev-Tset ErrRel=ABS(Fcti/Tset) C1*** If converged, leave the loop IF ((ErrRel.GT.TolRel).AND.(Iter.LE.IterMax)) THEN Xim2=Xim1 Xim1=Xi Fctim2=Fctim1 Fctim1=Fcti Iter=Iter+1 GOTO 10 ELSE IF (Iter.GT.IterMax) THEN ErrDetec=4 GOTO 20 ENDIF ENDIF Pos=2 Teta=1 psteam=Xi TwexabMean=Twexabs TwexevMean=Twexev TwexcdMean=Twexcd PevMean=Pev PgenMean=Pgen PabsMean=Pabs PcdMean=Pcd COPmean=COP MfrStMean=MfrSteam ENDIF ENDIF ENDIF C*** OUTPUTS 13 (converted in TRNSYS units) C************** out(1)=Pos out(2)=Teta out(3)=psteam/101325.0 out(4)=TwexabMean-273.15 out(5)=TwexevMean-273.15 out(6)=TwexcdMean-273.15 out(7)=PgenMean*3.6 out(8)=PabsMean*3.6 out(9)=PevMean*3.6 out(10)=PcdMean*3.6 out(11)=COPmean out(12)=MfrStMean*3600. 20 out(13)=ErrDetec 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