C 8/02/2006: REFINEMENT OF SP TOLERANCE TO ALLOW P>PC T (PX-P) FOR SUPERHEATED LIQ PROPERTIES C 5/16/2006: VTAV1 FIXED FOR COLD SUPERCRITICAL, VTAV2 MADE SAME C 8/04/2004: MISSING PAIR OF PARENS IN VH C 6/23/2004: DIVIDE BY ZERO IN VS C 3/04/2003: VSV LOW PRES BUT T>TCRIT FIX C C OLD FILES MAY BE MISSING NC (usually 63-21), PGMAX C VSV CALL HUNT(TEMP,N,T,JL,JH) FRACJ = MIN(1.0,MAX(0.0,(T - TEMP(JL))/(TEMP(JH) - TEMP(JL)))) PX = PRES(JL) + DBLE(FRACJ)*(PRES(JH) - PRES(JL)) IF(P .LT. PRES(1))THEN VL = (1. - FRACJ)*VOLMV(JL,1) + . FRACJ*VOLMV(JH,1) RGAS = SNGL(PRES(1))*VL/MAX(T,TEMP(JL)) V = RGAS*T/SNGL(P) ELSEIF(JL .GE. NC .OR. P .GT. PRES(NC))THEN CALL HUNTP(PRES,M,P,KL,KH) FRACK = MIN(1.0,MAX(0.0,SNGL((P - PRES(KL))/ . (PRES(KH) - PRES(KL))))) DENS = (1. - FRACK) . /((1. - FRACJ)*VOLMV(JL,KL) + . FRACJ*VOLMV(JH,KL)) + . FRACK/(FRACJ*VOLMV(JH,KH) + . (1. - FRACJ)*VOLMV(JL,KH)) V = 1./DENS ELSEIF(P .LT. 1.000001D0*PX)THEN C C FOR LOW PARTIAL PRESSURES, USE PERFECT GAS TO EXTRAPOLATE C CALL HUNTP(PRES,M,P,KL,KH) IF(P .GE. PX)THEN KL = JL KH = JH ENDIF FRACK = SNGL((P - PRES(KL))/ . (PRES(KH) - PRES(KL))) IF(JL .EQ. KL)THEN VSAT = 1.0/(1.0/VOLMV(JL,JL) + FRACJ . *(1.0/VOLMV(JH,JH) - 1.0/VOLMV(JL,JL))) VMID = 1.0/(1.0/VOLMV(JL,JL) + FRACJ . *(1.0/VOLMV(JH,KL) - 1.0/VOLMV(JL,JL))) IF(PX .LE. PRES(KL))THEN FRACK = 1.0 ELSE FRACK = MIN(1.0,MAX(0.0,SNGL((P - PRES(KL))/ . (PX - PRES(KL))))) ENDIF DENS = 1.0/VMID + FRACK* . (1.0/VSAT - 1.0/VMID) V = 1.0/DENS ELSE DENS = (1. - FRACK) . /((1. - FRACJ)*VOLMV(JL,KL) + . FRACJ*VOLMV(JH,KL)) + . FRACK/(FRACJ*VOLMV(JH,KH) + . (1. - FRACJ)*VOLMV(JL,KH)) V = 1./DENS ENDIF C C INTO LIQUID REGIME: CAREFUL TO AVOID DISCONTINUITIES C ELSE C RGASL = PRES(JL)*VOLMV(JL,JL)/TEMP(JL) C RGASH = PRES(JH)*VOLMV(JH,JH)/TEMP(JH) C RGAS = RGASL + FRACJ*(RGASH - RGASL) C V = RGAS*T/SNGL(P) V = 1.0/(1.0/VOLMV(JL,JL) + FRACJ* . (1.0/VOLMV(JH,JH) - 1.0/VOLMV(JL,JL))) C NOTE "T" CANCELS IN NEXT TWO EQUATIONS, SO IT IS LEFT OUT RGAS = PX*V V = RGAS/SNGL(P) ENDIF C VDL T = MIN(TEMP(NC),T) CALL HUNT(TEMP,N,T,JL,JH) FRAC = MIN(1.0,MAX(0.0,(T - TEMP(JL))/(TEMP(JH) - TEMP(JL)))) VSAT = VOLMF(JL,JL) + FRAC*(VOLMF(JH,JH) - . VOLMF(JL,JL)) D = 1./VSAT C VCPV CALL HUNT(TEMP,N,T,JL,JH) FRACJ = MIN(1.0,MAX(0.0,(T - TEMP(JL))/(TEMP(JH) - TEMP(JL)))) PX = PRES(JL) + DBLE(FRACJ)*(PRES(JH) - PRES(JL)) IF(JL .GE. NC .OR. P .LE. 1.000001D0*PX .OR. P .GT. PRES(NC))THEN CALL HUNTP(PRES,M,P,KL,KH) IF(P .GE. PX .AND. JL .LT. NC .AND. P .LE. PRES(NC))THEN KL = JL KH = JH ENDIF IF(JL .EQ. KL .AND. JL .LT. NC)THEN HHI = ENTHV(JH,JL) HHL = ENTHV(JL,JL) ELSE FRACK = MIN(1.0,MAX(0.0,SNGL((P - PRES(KL))/(PRES(KH) - PRES(KL))))) HHI = ENTHV(JH,KL) + FRACK*(ENTHV(JH,KH) - . ENTHV(JH,KL)) HHL = ENTHV(JL,KL) + FRACK*(ENTHV(JL,KH) - . ENTHV(JL,KL)) ENDIF ELSE HHI = ENTHV(JH,JL) HHL = ENTHV(JL,JL) ENDIF CP = (HHI - HHL)/(TEMP(JH) - TEMP(JL)) C VTAV2 CALL HUNTPS(ENTHV,N,H,JL,JH,PRES,M,P,KL,KH,FRACJ,FRACK) T = TEMP(JL) + FRACJ*(TEMP(JH) - TEMP(JL)) C C CHECK FOR RETURN IN LIQUID REGION C IF(JL .LT. NC .AND. (JL .LT. KL .OR. . (JL.EQ.KL .AND. FRACJ .LT. FRACK)) .AND. KH .LE. NC) THEN CALL HUNTP(PRES,M,P,KL,KH) FRACK = MIN(1.0,MAX(0.0,SNGL((P - PRES(KL))/(PRES(KH) - PRES(KL))))) TSAT = TEMP(KL) + FRACK*(TEMP(KH) - TEMP(KL)) HHI = ENTHV(KH,KL) HHL = ENTHV(KL,KL) CP = (HHI - HHL)/(TEMP(KH) - TEMP(KL)) HS = ENTHV(KL,KL) . + FRACK*(ENTHV(KH,KH)-ENTHV(KL,KL)) T = TSAT + (H-HS)/CP C RGASL = PRES(KL)*VOLMV(KL,KL)/TEMP(KL) C RGASH = PRES(KH)*VOLMV(KH,KH)/TEMP(KH) C RGAS = RGASL + FRACK*(RGASH - RGASL) C V = RGAS*T/SNGL(P) DENS = 1.0/VOLMV(KL,KL)+ FRACK* . (1.0/VOLMV(KH,KH) - 1.0/VOLMV(KL,KL)) V = 1./DENS C NOTE "P" CANCELS IN NEXT TWO EQUATIONS, SO IT IS LEFT OUT RGAS = V/TSAT V = RGAS*T C C CHECK FOR RETURN AT TOO-LOW PRESSURE C ELSEIF(FRACK .GE. 0.0)THEN IF(JL .EQ. KL .AND. JL .LT. NC)THEN PX = PRES(JL) + DBLE(FRACJ)*(PRES(JH) - PRES(JL)) VSAT = 1.0/(1.0/VOLMV(JL,JL) + FRACJ . *(1.0/VOLMV(JH,JH) - 1.0/VOLMV(JL,JL))) VMID = 1.0/(1.0/VOLMV(JL,JL) + FRACJ . *(1.0/VOLMV(JH,KL) - 1.0/VOLMV(JL,JL))) IF(PX .LE. PRES(KL))THEN FRACK = 1.0 ELSE FRACK = MIN(1.0,MAX(0.0,SNGL((P - PRES(KL))/ . (PX - PRES(KL))))) ENDIF DENS = 1.0/VMID + FRACK* . (1.0/VSAT - 1.0/VMID) V = 1.0/DENS ELSE DENS = (1. - FRACK) . /((1. - FRACJ)*VOLMV(JL,KL) + . FRACJ*VOLMV(JH,KL)) + . FRACK/(FRACJ*VOLMV(JH,KH) + . (1. - FRACJ)*VOLMV(JL,KH)) V = 1./DENS ENDIF ELSE VL = (1. - FRACJ)*VOLMV(JL,KL) + . FRACJ*VOLMV(JH,KL) RGAS = PRES(KL)*VL/MAX(T,TEMP(JL)) V = RGAS*T/SNGL(P) ENDIF C VH CALL HUNT(TEMP,N,T,JL,JH) FRACJ = MAX(0.0,MIN(1.0,(T - TEMP(JL))/(TEMP(JH) - TEMP(JL)))) PX = PRES(JL) + DBLE(FRACJ)*(PRES(JH) - PRES(JL)) IF(JL .GE. NC .OR. P .LE. 1.000001D0*PX .OR. P .GT. PRES(NC))THEN CALL HUNTP(PRES,M,P,KL,KH) IF(P .GE. PX .AND. JL .LT. NC .AND. P .LE. PRES(NC))THEN KL = JL KH = JH ENDIF IF(JL .EQ. KL .AND. JL .LT. NC)THEN HSAT = ENTHV(JL,JL) + FRACJ . *(ENTHV(JH,JH) - ENTHV(JL,JL)) HMID = ENTHV(JL,JL) + FRACJ . *(ENTHV(JH,KL) - ENTHV(JL,JL)) IF(PX .LE. PRES(KL))THEN FRACK = 1.0 ELSE FRACK = MIN(1.0,MAX(0.0,SNGL((P - PRES(KL))/ . (PX - PRES(KL))))) ENDIF H = HMID + FRACK* . (HSAT - HMID) ELSE FRACK = MIN(1.0,MAX(0.0,SNGL((P - PRES(KL)) . /(PRES(KH) - PRES(KL))))) H = (1. - FRACJ)*(1. - FRACK)*ENTHV(JL,KL) . + (1. - FRACK)*FRACJ*ENTHV(JH,KL) . + FRACK*FRACJ*ENTHV(JH,KH) . + (1. - FRACJ)*FRACK*ENTHV(JL,KH) ENDIF ELSE C CALL HUNTP(PRES,M,P,KL,KH) C FRACK = MIN(1.0,MAX(0.0,SNGL((P - PRES(KL))/(PRES(KH) - PRES(KL))))) C TS = TEMP(KL) + FRACK*(TEMP(KH) - TEMP(KL)) C HHI = ENTHV(KH,KL) C HHL = ENTHV(KL,KL) C CP = (HHI - HHL)/(TEMP(KH) - TEMP(KL)) C HS = ENTHV(KL,KL) C . + FRACK*(ENTHV(KH,KH)-ENTHV(KL,KL)) C H = HS + (T-TS)*CP VALL = ENTHV(JL,JL) VALH = ENTHV(JH,JH) VAL = VALL + FRACJ*(VALH - VALL) DERIV = (VALH - ENTHV(JH,JL)) . /SNGL(PRES(JH)-PRES(JL)) H = VAL + SNGL(P-PX)*DERIV ENDIF C VTS P = DMIN1(P,PRES(NC)) CALL HUNTP(PRES,M,P,KL,KH) FRAC = MIN(1.0,MAX(0.0,SNGL((P - PRES(KL))/(PRES(KH) - PRES(KL))))) T = TEMP(KL) + FRAC*(TEMP(KH) - TEMP(KL)) C VDPDT P = DMIN1(P,PRES(NC)) CALL HUNTP(PRES,M,P,KL,KH) FRAC = MIN(1.0,MAX(0.0,SNGL((P - PRES(KL))/(PRES(KH) - PRES(KL))))) T = TEMP(KL) + FRAC*(TEMP(KH) - TEMP(KL)) VF = VOLMF(KL,KL) + FRAC*(VOLMF(KH,KH) - . VOLMF(KL,KL)) VG = VOLMV(KL,KL) + FRAC*(VOLMV(KH,KH) - . VOLMV(KL,KL)) HFG = ENTHV(KL,KL) - ENTHF(KL,KL) + . FRAC*(ENTHV(KH,KH) - . ENTHF(KH,KH) - ENTHV(KL,KL) + ENTHF(KL,KL)) IF(VG .LE. VF .OR. HFG .LE. 0.0) THEN DPDT = 1.E10-1. ELSE DPDT = HFG/T/(VG - VF) ENDIF VHFG CALL HUNTP(PRES,M,P,KL,KH) FRAC = MIN(1.0,MAX(0.0,SNGL((P - PRES(KL))/(PRES(KH) - PRES(KL))))) HFG = ENTHV(KL,KL) - ENTHF(KL,KL) + . FRAC*(ENTHV(KH,KH)- . ENTHF(KH,KH) - ENTHV(KL,KL) + ENTHF(KL,KL)) C VPS T = MIN(TEMP(NC),T) CALL HUNT(TEMP,N,T,JL,JH) FRAC = MIN(1.0,MAX(0.0,(T - TEMP(JL))/(TEMP(JH) - TEMP(JL)))) P = PRES(JL) + DBLE(FRAC)*(PRES(JH) - PRES(JL)) C VDPDTT T = MIN(TEMP(NC),T) CALL HUNT(TEMP,N,T,JL,JH) FRAC = MIN(1.0,MAX(0.0,(T - TEMP(JL))/(TEMP(JH) - TEMP(JL)))) VF = VOLMF(JL,JL) + FRAC*(VOLMF(JH,JH) - . VOLMF(JL,JL)) VG = VOLMV(JL,JL) + FRAC*(VOLMV(JH,JH) - . VOLMV(JL,JL)) HFG = ENTHV(JL,JL) - ENTHF(JL,JL) + . FRAC*(ENTHV(JH,JH) - . ENTHF(JH,JH) - ENTHV(JL,JL) + ENTHF(JL,JL)) IF(VG .LE. VF .OR. HFG .LE. 0.0) THEN DPDT = 1.E10-1. ELSE DPDT = HFG/T/(VG - VF) ENDIF C VS C C FOR VALUES BELOW TABLE, VS IS COMPUTED BASED ON AN IDEAL GAS C APPROXIMATION C CALL HUNTTV(VOLMV,M,V,JL,JH,TEMP,N,T,KL,KH,FRACJ,FRACK) C C FORCE EXTRAPOLATION IF IN LIQUID REGION C IF(JL .LT. NC .AND. JL .LT. KL .AND. KL .LT. NC) THEN C EXTRAP FROM SAT TEMP CALL HUNT(TEMP,N,T,JL,JH) FRACJ = MIN(1.0,MAX(0.0,(T - TEMP(JL))/(TEMP(JH) - TEMP(JL)))) PX = PRES(JL) + DBLE(FRACJ)*(PRES(JH) - PRES(JL)) VSAT = 1.0/(1.0/VOLMV(JL,JL) + FRACJ . *(1.0/VOLMV(JH,JH) - 1.0/VOLMV(JL,JL))) RGAS = SNGL(PX)*VSAT P = DBLE(RGAS/V) RTERM = RGAS/T S = ENTRV(JL,JL) + FRACJ*(ENTRV(JH,JH) - . ENTRV(JL,JL)) C CP = (ENTHV(JH,JL) - ENTHV(JL,JL))/ C . (TEMP(JH) - TEMP(JL)) S = S - RTERM*ALOG(SNGL(P/PX)) ELSE C FRAK = FRACK FRAJ = FRACJ FRACK = MIN(1.0,MAX(0.0,FRACK)) FRACJ = MIN(1.0,MAX(0.0,FRACJ)) IF(FRAK .LT. 0.0)THEN IF(FRAJ .LT. 0.0)THEN C C SPECIFIC VOLUME BELOW TABLE LOW TEMP, C COMPUTE RTERM,P (ASSUMES SI UNITS) C RGAS = PRES(KL)*VOLMV(JL,KL)/TEMP(JL) RTERM = RGAS P = RGAS*T/V ELSEIF(FRAJ .GE. 0.0)THEN C C SPECIFIC VOLUME BELOW TABLE HIGH TEMP, C COMPUTE RTERM,P (ASSUMES SI UNITS) C RGAS = PRES(KL)*VOLMV(JH,KL)/TEMP(JH) RTERM = RGAS P = RGAS*T/V ENDIF ENDIF IF(FRAJ .LT. 0.0 .OR. FRAJ .GT. 1.0)THEN C C TEMPERATURE IS BELOW TABLE COMPUTE CP C CPL = (ENTHV(JH,KL) - ENTHV(JL,KL))/ . (TEMP(JH) - TEMP(JL)) CPH = (ENTHV(JH,KH) - ENTHV(JL,KH))/ . (TEMP(JH) - TEMP(JL)) CP = (1. - FRACK)*CPL + . FRACK*CPH ENDIF IF(FRAK .LT. 0.0)THEN IF(FRAJ .LE. 1.0 .AND. FRAJ .GE. 0.0)THEN C C ONLY SPECIFIC VOLUME BELOW TABLE C S = (1. - FRACJ)*ENTRV(JL,KL) + . FRACJ*ENTRV(JH,KL) S = S - RTERM*ALOG(SNGL(P/PRES(KL))) ELSEIF(FRAJ .GE. 1.0)THEN C C SPECIFIC VOLUME BELOW TABLE - TEMP HIGH C S = ENTRV(JH,KL) S = S - RTERM*ALOG(SNGL(P/PRES(KL))) . + CP * ALOG(T/TEMP(JH)) ELSEIF(FRAJ .LT. 0.0)THEN C C SPECIFIC VOLUME AND TEMPERATURE ARE BELOW TABLE C S = ENTRV(JL,KL) S = S + CP * ALOG(T/TEMP(JL)) . - RTERM*ALOG(SNGL(P/PRES(KL))) ELSE VLO = VOLMV(JL,KL) . + FRACJ*(VOLMV(JH,KL) - VOLMV(JL,KL)) VHI = VOLMV(JL,KH) . + FRACJ*(VOLMV(JH,KH) - VOLMV(JL,KH)) FRACK = (1./V - 1./VLO)/(1./VHI - 1./VLO) S = (1. - FRACJ)*(1. - FRACK)*ENTRV(JL,KL)+ . (1. - FRACK)*FRACJ*ENTRV(JH,KL) + . FRACK*FRACJ*ENTRV(JH,KH) + . (1. - FRACJ)*FRACK*ENTRV(JL,KH) ENDIF ELSE C C ALL VALUES WITHIN TABLE C IF(JL .EQ. KL .AND. JL .LT. NC)THEN VSAT = 1.0/(1.0/VOLMV(JL,JL) + FRACJ . *(1.0/VOLMV(JH,JH) - 1.0/VOLMV(JL,JL))) SSAT = ENTRV(JL,JL) . + FRACJ*(ENTRV(JH,JH) - ENTRV(JL,JL)) IF(V .LT. VSAT)THEN PX = PRES(JL) + DBLE(FRACJ) . *(PRES(JH) - PRES(JL)) C T REMOVED FROM NEXT 2 EQUATIONS FOR EFFICIENCY RGAS = SNGL(PX)*VSAT P = DBLE(RGAS/V) RTERM = RGAS/T S = SSAT - RTERM*ALOG(SNGL(P/PX)) ELSEIF(FRACJ .LE. 2.0E-7)THEN S = SSAT ELSE VLO = VOLMV(JL,KL) . + FRACJ*(VOLMV(JH,KL) - VOLMV(JL,KL)) IF(VSAT .GE. VLO)THEN S = SSAT ELSE FRACK = (1./V - 1./VLO)/(1./VSAT - 1./VLO) SMID = ENTRV(JL,JL) + FRACJ*(ENTRV(JH,KL) - . ENTRV(JL,KL)) S = SMID + FRACK*(SSAT - SMID) ENDIF ENDIF ELSE VLO = VOLMV(JL,KL) . + FRACJ*(VOLMV(JH,KL) - VOLMV(JL,KL)) VHI = VOLMV(JL,KH) . + FRACJ*(VOLMV(JH,KH) - VOLMV(JL,KH)) FRACK = (1./V - 1./VLO)/(1./VHI - 1./VLO) S = (1. - FRACJ)*(1. - FRACK)*ENTRV(JL,KL) . + (1. - FRACK)*FRACJ*ENTRV(JH,KL) . + FRACK*FRACJ*ENTRV(JH,KH) . + (1. - FRACJ)*FRACK*ENTRV(JL,KH) ENDIF ENDIF C ENDIF VTAV1 CALL HUNTPS(ENTRV,N,S,JL,JH,PRES,M,P,KL,KH,FRACJ,FRACK) T = TEMP(JL) + FRACJ*(TEMP(JH) - TEMP(JL)) C C CHECK FOR RETURN IN LIQUID REGION C IF(JL .LT. NC .AND. (JL .LT. KL .OR. . (JL.EQ.KL .AND. FRACJ .LT. FRACK)) .AND. KH .LE. NC) THEN CALL HUNTP(PRES,M,P,KL,KH) FRACK = MIN(1.0,MAX(0.0,SNGL((P - PRES(KL))/(PRES(KH) - PRES(KL))))) TSAT = TEMP(KL) + FRACK*(TEMP(KH) - TEMP(KL)) HHI = ENTHV(KH,KL) HHL = ENTHV(KL,KL) CP = (HHI - HHL)/(TEMP(KH) - TEMP(KL)) SS = ENTRV(KL,KL) . + FRACK*(ENTRV(KH,KH)-ENTRV(KL,KL)) T = TSAT * EXP((S-SS)/CP) C RGASL = PRES(KL)*VOLMV(KL,KL)/TEMP(KL) C RGASH = PRES(KH)*VOLMV(KH,KH)/TEMP(KH) C RGAS = RGASL + FRACK*(RGASH - RGASL) C V = RGAS*T/SNGL(P) DENS = 1.0/VOLMV(KL,KL)+ FRACK* . (1.0/VOLMV(KH,KH) - 1.0/VOLMV(KL,KL)) V = 1./DENS C NOTE "P" CANCELS IN NEXT TWO EQUATIONS, SO IT IS LEFT OUT RGAS = V/TSAT V = RGAS*T C C CHECK FOR RETURN AT TOO-LOW PRESSURE C ELSEIF(FRACK .LT. 0.)THEN VL = (1. - FRACJ)*VOLMV(JL,KL) + . FRACJ*VOLMV(JH,KL) RGAS = PRES(KL)*VL/MAX(T,TEMP(JL)) V = RGAS*T/SNGL(P) ELSE IF(JL .EQ. KL .AND. JL .LT. NC)THEN PX = PRES(JL) + DBLE(FRACJ)*(PRES(JH) - PRES(JL)) VSAT = 1.0/(1.0/VOLMV(JL,JL) + FRACJ . *(1.0/VOLMV(JH,JH) - 1.0/VOLMV(JL,JL))) VMID = 1.0/(1.0/VOLMV(JL,JL) + FRACJ . *(1.0/VOLMV(JH,KL) - 1.0/VOLMV(JL,JL))) IF(PX .LE. PRES(KL))THEN FRACK = 1.0 ELSE FRACK = MIN(1.0,MAX(0.0,SNGL((P - PRES(KL))/ . (PX - PRES(KL))))) ENDIF DENS = 1.0/VMID + FRACK* . (1.0/VSAT - 1.0/VMID) V = 1.0/DENS ELSE DENS = (1. - FRACK) . /((1. - FRACJ)*VOLMV(JL,KL) + . FRACJ*VOLMV(JH,KL)) + . FRACK/(FRACJ*VOLMV(JH,KH) + . (1. - FRACJ)*VOLMV(JL,KH)) V = 1./DENS ENDIF ENDIF VQUALS IF(P .GT. PGMAX)THEN X = 0.0 ELSEIF(P .GT. PRES(NC)) THEN X = 1.0 ELSE CALL HUNTP(PRES,M,P,KL,KH) FRAC = MIN(1.0,MAX(0.0,SNGL((P - PRES(KL))/(PRES(KH) - PRES(KL))))) HFGLST = ENTHV(KL,KL) - ENTHF(KL,KL) + . FRAC*(ENTHV(KH,KH) - . ENTHF(KH,KH) - ENTHV(KL,KL) + ENTHF(KL,KL)) TSAT = TEMP(KL) + FRAC*(TEMP(KH) - TEMP(KL)) SFG = HFGLST/TSAT IF(SFG .LE. 0.0)THEN X = 1.0 ELSE SV = ENTRV(KL,KL) + FRAC*(ENTRV(KH,KH) - . ENTRV(KL,KL)) XX = (S - SV)/SFG + 1.0 X = AMIN1(AMAX1(XX,0.0),1.0) ENDIF ENDIF C VCPF CALL HUNT(TEMP,N,T,JL,JH) FRACJ = MIN(1.0,MAX(0.0,(T - TEMP(JL))/(TEMP(JH) - TEMP(JL)))) PX = PRES(JL) + DBLE(FRACJ)*(PRES(JH) - PRES(JL)) IF(JH .LE. NC .AND. 1.000001D0*P .GE. PX)THEN CALL HUNTP(PRES,M,P,KL,KH) IF(P .LE. PX .AND. JH .LE. NC)THEN KL = JL KH = JH ENDIF IF(JL .EQ. KL .AND. JH .LE. NC)THEN HHI = ENTHF(JH,JH) HHL = ENTHF(JL,JH) ELSE FRACK = MIN(1.0,MAX(0.0,SNGL((P - PRES(KL))/(PRES(KH) - PRES(KL))))) HHI = ENTHF(JH,KL) + FRACK*(ENTHF(JH,KH) - . ENTHF(JH,KL)) HHL = ENTHF(JL,KL) + FRACK*(ENTHF(JL,KH) - . ENTHF(JL,KL)) ENDIF ELSE HHI = ENTHF(JH,JH) HHL = ENTHF(JL,JH) ENDIF CP = (HHI - HHL)/(TEMP(JH) - TEMP(JL)) VHLIQ CALL HUNT(TEMP,N,T,JL,JH) FRACJ = (T - TEMP(JL))/(TEMP(JH) - TEMP(JL)) PX = PRES(JL) + DBLE(FRACJ)*(PRES(JH) - PRES(JL)) VX = VOLMF(JL,JL) + FRACJ*(VOLMF(JH,JH) - . VOLMF(JL,JL)) H = ENTHF(JL,JL) + FRACJ*(ENTHF(JH,JH) - . ENTHF(JL,JL)) + SNGL(P-PX)*VX CVTLIQ C CALL HUNTPS(ENTHF,N,H,JL,JH,PRES,N,P,KL,KH,FRACJ,FRACK) C T = TEMP(JL) + FRACJ*(TEMP(JH) - TEMP(JL)) C TX = TEMP(KL) + FRACK*(TEMP(KH) - TEMP(KL)) C IF(T .GT. TX) T = TX VULIQ CALL HUNT(TEMP,N,T,JL,JH) FRAC = (T - TEMP(JL))/(TEMP(JH) - TEMP(JL)) HX = ENTHF(JL,JL) + FRAC*(ENTHF(JH,JH) - . ENTHF(JL,JL)) VX = VOLMF(JL,JL) + FRAC*(VOLMF(JH,JH) - . VOLMF(JL,JL)) PX = PRES(JL) + DBLE(FRAC)*(PRES(JH) - PRES(JL)) U = HX - SNGL(PX)*VX VQUALH IF(P .GT. PGMAX)THEN X = 0.0 ELSEIF(P .GT. PRES(NC)) THEN X = 1.0 ELSE CALL HUNTP(PRES,M,P,KL,KH) FRAC = MIN(1.0,MAX(0.0,SNGL((P - PRES(KL))/(PRES(KH) - PRES(KL))))) VHSAT = ENTHV(KL,KL) + FRAC*(ENTHV(KH,KH) - . ENTHV(KL,KL)) HF = ENTHF(KL,KL) + FRAC*(ENTHF(KH,KH) - . ENTHF(KL,KL)) HFGLST = VHSAT - HF IF(HFGLST .LE. 0.0)THEN X = 1.0 ELSE XX = (H - HF)/HFGLST X = AMIN1(AMAX1(XX,0.0),1.0) ENDIF ENDIF VDLC CALL HUNT(TEMP,N,T,JL,JH) FRACJ = MIN(1.0,MAX(0.0,(T - TEMP(JL))/(TEMP(JH) - TEMP(JL)))) PX = PRES(JL) + DBLE(FRACJ)*(PRES(JH) - PRES(JL)) IF(JH .LE. NC .AND. 1.000001D0*P .GE. PX)THEN CALL HUNTP(PRES,M,P,KL,KH) IF(P .LE. PX .AND. JH .LE. NC)THEN KL = JL KH = JH ENDIF IF(JL .EQ. KL .AND. JH .LE. NC)THEN C LIKE VDL AND THE REST OF THIS BLOCK: VSAT = VOLMF(JL,JL) + FRACJ . *(VOLMF(JH,JH) - VOLMF(JL,JL)) VMID = VOLMF(JL,KH) + FRACJ . *(VOLMF(JH,KH) - VOLMF(JL,KH)) IF(PX .GE. PRES(KH))THEN FRACK = 1.0 ELSE FRACK = MIN(1.0,MAX(0.0,SNGL((PRES(KH) - P)/ . (PRES(KH) - PX)))) ENDIF VC = VMID + FRACK* . (VSAT - VMID) C LIKE VSV: C VSAT = 1.0/(1.0/VOLMF(JL,JL) + FRACJ C . *(1.0/VOLMF(JH,JH) - 1.0/VOLMF(JL,JL))) C VMID = 1.0/(1.0/VOLMF(JL,KH) + FRACJ C . *(1.0/VOLMF(JH,KH) - 1.0/VOLMF(JL,KH))) C IF(PX .GE. PRES(KH))THEN C FRACK = 1.0 C ELSE C FRACK = MIN(1.0,MAX(0.0,SNGL((PRES(KH) - P)/ C . (PRES(KH) - PX)))) C ENDIF C DENS = 1.0/VMID + FRACK* C . (1.0/VSAT - 1.0/VMID) C VC = 1.0/DENS ELSE FRACK = MIN(1.0,MAX(0.0,SNGL((P - PRES(KL))/(PRES(KH) - PRES(KL))))) VC = (1. - FRACJ)*(1. - FRACK)*VOLMF(JL,KL) + . (1. - FRACK)*FRACJ*VOLMF(JH,KL) + . FRACK*FRACJ*VOLMF(JH,KH) + . (1. - FRACJ)*FRACK*VOLMF(JL,KH) ENDIF ELSE VALL = VOLMF(JL,JL) C VALH = VOLMF(JH,JH) C VAL = VALL + FRACJ*(VALH - VALL) FRACK = FRACJ VAL = (1. - FRACJ)*(1. - FRACK)*VOLMF(JL,JL) + . (1. - FRACK)*FRACJ*VOLMF(JH,JL) + . FRACK*FRACJ*VOLMF(JH,JH) + . (1. - FRACJ)*FRACK*VOLMF(JL,JH) FRAC = MIN(1.0,MAX(0.0,SNGL((PX-P)/(PRES(JH)-PRES(JL))))) VC = VAL + (VOLMF(JL,JH) - VALL)*FRAC C DERIV = (VOLMF(JL,JH) - VALL) C . /SNGL(PRES(JH)-PRES(JL)) C VC = VAL + SNGL(P-PX)*DERIV ENDIF D = 1./VC VSOS CALL HUNT(TEMP,N,T,JL,JH) FRACJ = MIN(1.0,MAX(0.0,(T - TEMP(JL))/(TEMP(JH) - TEMP(JL)))) PX = PRES(JL) + DBLE(FRACJ)*(PRES(JH) - PRES(JL)) IF(JL .GE. NC .OR. P .LE. 1.000001D0*PX .OR. P .GT. PRES(NC))THEN CALL HUNTP(PRES,M,P,KL,KH) IF(P .GE. PX .AND. JL .LT. NC .AND. P .LE. PRES(NC))THEN KL = JL KH = JH ENDIF IF(JL .EQ. KL .AND. JL .LT. NC)THEN SSAT = SOSV(JL,JL) + FRACJ . *(SOSV(JH,JH) - SOSV(JL,JL)) SMID = SOSV(JL,JL) + FRACJ . *(SOSV(JH,KL) - SOSV(JL,JL)) IF(PX .LE. PRES(KL))THEN FRACK = 1.0 ELSE FRACK = MIN(1.0,MAX(0.0,SNGL((P - PRES(KL))/ . (PX - PRES(KL))))) ENDIF SOS = SMID + FRACK* . (SSAT - SMID) ELSE FRACK = MIN(1.0,MAX(0.0,SNGL((P - PRES(KL))/(PRES(KH) - PRES(KL))))) SOS = (1. - FRACJ)*(1. - FRACK)*SOSV(JL,KL) + . (1. - FRACK)*FRACJ*SOSV(JH,KL) + . FRACK*FRACJ*SOSV(JH,KH) + . (1. - FRACJ)*FRACK*SOSV(JL,KH) ENDIF ELSE C VALL = SOSV(JL,JL) VALH = SOSV(JH,JH) C VAL = VALL + FRACJ*(VALH - VALL) FRACK = FRACJ VAL = (1. - FRACJ)*(1. - FRACK)*SOSV(JL,JL) + . (1. - FRACK)*FRACJ*SOSV(JH,JL) + . FRACK*FRACJ*SOSV(JH,JH) + . (1. - FRACJ)*FRACK*SOSV(JL,JH) FRAC = MIN(1.0,MAX(0.0,SNGL((P-PX)/(PRES(JH)-PRES(JL))))) SOS = VAL + (VALH - SOSV(JH,JL))*FRAC C DERIV = (VALH - SOSV(JH,JL)) C . /SNGL(PRES(JH)-PRES(JL)) C SOS = VAL + SNGL(P-PX)*DERIV C C TRIED ... BUT NO BETTER C C CALL HUNTP(PRES,M,P,KL,KH) C FRACK = SNGL((P - PRES(KL))/(PRES(KH) - PRES(KL))) C TS = TEMP(KL) + FRACK*(TEMP(KH) - TEMP(KL)) C VALL = SOSV(KL,KL) C VALH = SOSV(KH,KH) C VAL = VALL + FRACK*(VALH - VALL) C DERIV = (SOSV(KH,KL) - VALL) C . /SNGL(TEMP(KH)-TEMP(KL)) C SOS = VAL + (T-TS)*DERIV ENDIF VSOSF CALL HUNT(TEMP,N,T,JL,JH) FRACJ = MIN(1.0,MAX(0.0,(T - TEMP(JL))/(TEMP(JH) - TEMP(JL)))) PX = PRES(JL) + DBLE(FRACJ)*(PRES(JH) - PRES(JL)) IF(JH .LE. NC .AND. 1.000001D0*P .GE. PX)THEN CALL HUNTP(PRES,M,P,KL,KH) IF(P .LE. PX .AND. JH .LE. NC)THEN KL = JL KH = JH ENDIF IF(JL .EQ. KL .AND. JH .LE. NC)THEN SSAT = SOSF(JL,JL) + FRACJ . *(SOSF(JH,JH) - SOSF(JL,JL)) SMID = SOSF(JL,KH) + FRACJ . *(SOSF(JH,KH) - SOSF(JL,KH)) IF(PX .GE. PRES(KH))THEN FRACK = 1.0 ELSE FRACK = MIN(1.0,MAX(0.0,SNGL((PRES(KH) - P)/ . (PRES(KH) - PX)))) ENDIF SOS = SMID + FRACK* . (SSAT - SMID) ELSE FRACK = MIN(1.0,MAX(0.0,SNGL((P - PRES(KL))/(PRES(KH) - PRES(KL))))) SOS = (1. - FRACJ)*(1. - FRACK)*SOSF(JL,KL) + . (1. - FRACK)*FRACJ*SOSF(JH,KL) + . FRACK*FRACJ*SOSF(JH,KH) + . (1. - FRACJ)*FRACK*SOSF(JL,KH) ENDIF ELSE VALL = SOSF(JL,JL) C VALH = SOSF(JH,JH) C VAL = VALL + FRACJ*(VALH - VALL) FRACK = FRACJ VAL = (1. - FRACJ)*(1. - FRACK)*SOSF(JL,JL) + . (1. - FRACK)*FRACJ*SOSF(JH,JL) + . FRACK*FRACJ*SOSF(JH,JH) + . (1. - FRACJ)*FRACK*SOSF(JL,JH) FRAC = MIN(1.0,MAX(0.0,SNGL((PX-P)/(PRES(JH)-PRES(JL))))) SOS = VAL + (SOSF(JL,JH) - VALL)*FRAC C DERIV = (SOSF(JL,JH) - VALL) C . /SNGL(PRES(JH)-PRES(JL)) C SOS = VAL + SNGL(P-PX)*DERIV ENDIF C VCONDF CALL HUNT(TEMP,N,T,JL,JH) FRAC = MIN(1.0,MAX(0.0,(T - TEMP(JL))/(TEMP(JH) - TEMP(JL)))) COND = CONDF(JL) + FRAC*(CONDF(JH) - CONDF(JL)) C VVISCF CALL HUNT(TEMP,N,T,JL,JH) FRAC = MIN(1.0,MAX(0.0,(T - TEMP(JL))/(TEMP(JH) - TEMP(JL)))) VISC = VISCF(JL) + (FRAC)*(VISCF(JH) - VISCF(JL)) C VCONDV CALL HUNT(TEMP,N,T,JL,JH) FRACJ = MIN(1.0,MAX(0.0,(T - TEMP(JL))/(TEMP(JH) - TEMP(JL)))) PX = PRES(JL) + DBLE(FRACJ)*(PRES(JH) - PRES(JL)) IF(JL .GE. NC .OR. P .LE. 1.000001D0*PX .OR. P .GT. PRES(NC))THEN CALL HUNTP(PRES,M,P,KL,KH) IF(P .GE. PX .AND. JL .LT. NC .AND. P .LE. PRES(NC))THEN KL = JL KH = JH ENDIF IF(JL .EQ. KL .AND. JL .LT. NC)THEN CSAT = CONDV(JL,JL) + FRACJ . *(CONDV(JH,JH) - CONDV(JL,JL)) CMID = CONDV(JL,JL) + FRACJ . *(CONDV(JH,KL) - CONDV(JL,JL)) IF(PX .LE. PRES(KL))THEN FRACK = 1.0 ELSE FRACK = MIN(1.0,MAX(0.0,SNGL((P - PRES(KL))/ . (PX - PRES(KL))))) ENDIF COND = CMID + FRACK* . (CSAT - CMID) ELSE FRACK = MIN(1.0,MAX(0.0,SNGL((P - PRES(KL))/(PRES(KH) - PRES(KL))))) COND = (1. - FRACJ)*(1. - FRACK)*CONDV(JL,KL) + . (1. - FRACK)*FRACJ*CONDV(JH,KL) + . FRACK*FRACJ*CONDV(JH,KH) + . (1. - FRACJ)*FRACK*CONDV(JL,KH) ENDIF ELSE C VALL = CONDV(JL,JL) VALH = CONDV(JH,JH) C VAL = VALL + FRACJ*(VALH - VALL) FRACK = FRACJ VAL = (1. - FRACJ)*(1. - FRACK)*CONDV(JL,JL) + . (1. - FRACK)*FRACJ*CONDV(JH,JL) + . FRACK*FRACJ*CONDV(JH,JH) + . (1. - FRACJ)*FRACK*CONDV(JL,JH) FRAC = MIN(1.0,MAX(0.0,SNGL((P-PX)/(PRES(JH)-PRES(JL))))) COND = VAL + (VALH - CONDV(JH,JL))*FRAC C DERIV = (VALH - CONDV(JH,JL)) C . /SNGL(PRES(JH)-PRES(JL)) C COND = VAL + SNGL(P-PX)*DERIV ENDIF C VVISCV CALL HUNT(TEMP,N,T,JL,JH) FRACJ = MIN(1.0,MAX(0.0,(T - TEMP(JL))/(TEMP(JH) - TEMP(JL)))) PX = PRES(JL) + DBLE(FRACJ)*(PRES(JH) - PRES(JL)) IF(JL .GE. NC .OR. P .LE. 1.000001D0*PX .OR. P .GT. PRES(NC))THEN CALL HUNTP(PRES,M,P,KL,KH) IF(P .GE. PX .AND. JL .LT. NC .AND. P .LE. PRES(NC))THEN KL = JL KH = JH ENDIF IF(JL .EQ. KL .AND. JL .LT. NC)THEN VSAT = VISCV(JL,JL) + FRACJ . *(VISCV(JH,JH) - VISCV(JL,JL)) VMID = VISCV(JL,JL) + FRACJ . *(VISCV(JH,KL) - VISCV(JL,JL)) IF(PX .LE. PRES(KL))THEN FRACK = 1.0 ELSE FRACK = MIN(1.0,MAX(0.0,SNGL((P - PRES(KL))/ . (PX - PRES(KL))))) ENDIF VISC = VMID + FRACK* . (VSAT - VMID) ELSE FRACK = MIN(1.0,MAX(0.0,SNGL((P - PRES(KL))/(PRES(KH) - PRES(KL))))) VISC = (1. - FRACJ)*(1. - FRACK)*VISCV(JL,KL) + . (1. - FRACK)*FRACJ*VISCV(JH,KL) + . FRACK*FRACJ*VISCV(JH,KH) + . (1. - FRACJ)*FRACK*VISCV(JL,KH) ENDIF ELSE C VALL = VISCV(JL,JL) VALH = VISCV(JH,JH) C VAL = VALL + FRACJ*(VALH - VALL) FRACK = FRACJ VAL = (1. - FRACJ)*(1. - FRACK)*VISCV(JL,JL) + . (1. - FRACK)*FRACJ*VISCV(JH,JL) + . FRACK*FRACJ*VISCV(JH,JH) + . (1. - FRACJ)*FRACK*VISCV(JL,JH) FRAC = MIN(1.0,MAX(0.0,SNGL((P-PX)/(PRES(JH)-PRES(JL))))) VISC = VAL + (VALH - VISCV(JH,JL))*FRAC C DERIV = (VALH - VISCV(JH,JL)) C . /SNGL(PRES(JH)-PRES(JL)) C VISC = VAL + SNGL(P-PX)*DERIV ENDIF C VST IF(T .GE. TEMP(NC)) THEN ST = 0.0 ELSE CALL HUNT(TEMP,N,T,JL,JH) FRAC = MIN(1.0,MAX(0.0,(T - TEMP(JL))/(TEMP(JH) - TEMP(JL)))) ST = SURFT(JL) + (FRAC)*(SURFT(JH) - SURFT(JL)) ENDIF