C ***** IPROPAIR C PROGRAM IPROPAIR CHARACTER*25 ANAME CHARACTER*5 PUNIT CHARACTER*3 TUNIT CHARACTER*12 RUNIT CHARACTER*8 HUNIT CHARACTER*10 VUNIT INTEGER IERR REAL P,T COMMON /UNIT/KPA,KMOL,MESS COMMON /CNST/GASCON ANAME='AIR' WRITE(6,9711) 9711 FORMAT(1H ,' Do you need ERROR MESSAGES ? NO->0 : YES->1 = ') READ(5,*) IM CALL IPINIT(0,0,IM,0,0.0) 20 WRITE(6,2000) 2000 FORMAT(1H ,' KPA PRESSURE TEMPERATURE'/ 1 1H ,' 0 Pa K'/ 2 1H ,' 1 bar C'/ 3 1H ,' 2 bar K'/ 4 1H ,' 3 Pa C'/ 5 1H ,' others Pa K'/ 6 1H ,' -----------------------------') WRITE(6,*) ' Select one set of units ', 1 'for pressure and temperature : KPA = ' READ(5,*) KPA IF (KPA .EQ. 1) THEN PUNIT='[bar]' TUNIT='[C]' ELSEIF (KPA .EQ. 2) THEN PUNIT='[bar]' TUNIT='[K]' ELSEIF (KPA .EQ. 3) THEN PUNIT='[Pa] ' TUNIT='[C]' ELSE PUNIT='[Pa] ' TUNIT='[K]' ENDIF WRITE(6,2010) 2010 FORMAT(1H ,' KMOL Amount of Substance'/ 7 1H ,' 0 kmol'/ 8 1H ,' 1 kg'/ 3 1H ,' others kmol'/ 9 1H ,' -----------------------------') WRITE(6,*) ' Select kmol or kg for amount of substance : KMOL = ' READ(5,*) KMOL IF (KMOL .EQ. 1) THEN RUNIT='[J/(kg*K)]' HUNIT='[J/kg]' VUNIT='[m^3/kg]' ELSE RUNIT='[J/(kmol*K)]' HUNIT='[J/kmol]' VUNIT='[m^3/kmol]' ENDIF 35 WRITE(6,3000) 3000 FORMAT(1H ,' You can select one from the following', 1 ' 8 patterns of calculation.'/ 1 1H ,' 1 : (P,T) >>> V, CP, H, S, etc | ', 1 1H ,' 2 : (P,V) >>> T, CP, H, S, etc'/ 2 1H ,' 3 : (T,V) >>> P, CP, H, S, etc | ', 3 1H ,' 4 : (P,S) >>> T, V, CP, H, etc'/ 3 1H ,' 5 : (T,S) >>> P, V, CP, H, etc | ', 3 1H ,' 6 : (V,S) >>> P, T, CP, H, etc'/ 3 1H ,' 7 : (P,H) >>> T, V, CP, S, etc | ', 3 1H ,' 8 : (P,U) >>> T, V, CP, S, etc ') WRITE(6,*) ' Input INDEX of pattern of calculation (1-8) = ' READ(5,*) ITYPE 30 WRITE(6,2002) ANAME 2002 FORMAT(1H , ' Substance : ',A25) IF (ITYPE .EQ. 1 .OR. ITYPE .EQ. 2 .OR. 1 ITYPE .EQ. 4 .OR. ITYPE .EQ. 7 .OR. ITYPE .EQ.8) THEN WRITE(6,*) ' INPUT P',PUNIT,' = ' READ(5,*) P ENDIF IF (ITYPE .EQ. 1 .OR. ITYPE .EQ. 3 .OR. ITYPE .EQ. 5) THEN WRITE(6,*) ' INPUT T',TUNIT,' = ' READ(5,*) T ENDIF IF (ITYPE .EQ. 2 .OR. ITYPE .EQ. 3 .OR. ITYPE .EQ. 6) THEN WRITE(6,*) ' INPUT V',VUNIT,' = ' READ(5,*) V IF (ITYPE .EQ. 2) THEN T=TPVAIR(P,V) ELSEIF (ITYPE .EQ. 3) THEN P=PTVAIR(T,V) ENDIF ENDIF IF (ITYPE .EQ. 4 .OR. ITYPE .EQ. 5 .OR. ITYPE .EQ. 6) THEN WRITE(6,*) ' INPUT S',RUNIT,' = ' READ(5,*) S IF (ITYPE .EQ. 4) THEN T=TPSAIR(P,S) ELSEIF (ITYPE .EQ. 5) THEN P=PTSAIR(T,S) ELSEIF (ITYPE .EQ. 6) THEN T=TVSAIR(V,S) P=PTVAIR(T,V) ENDIF ENDIF IF (ITYPE .EQ. 7) THEN WRITE(6,*) ' INPUT H',HUNIT,' = ' READ(5,*) H T=THAIR(H) ENDIF IF (ITYPE .EQ. 8) THEN WRITE(6,*) ' INPUT U',HUNIT,' = ' READ(5,*) U T=TUAIR(U) ENDIF CALL AIRTP(IERR,AMM,T,P,V,CP,CV,W,U,H,S) WRITE(6,1000) AMM,T,TUNIT,P,PUNIT, 1 V,VUNIT,CP,RUNIT,CV,RUNIT,W,S,RUNIT,H,HUNIT,U,HUNIT C 1000 FORMAT(1H ,'IERR=',I3/1H ,'ISUB=',I3,2X,A25/ 1000 FORMAT( 1 3X,'AMM=',F12.5,'[kg/kmol]',4X,'T =',F11.3,A4,/ 1 3X,'P =',E12.5,A5,8X,'V =',E12.5,A10/ 2 3X,'CP =',E12.5,A12,1X,'CV =',E12.5,A12/ 3 3X,'W =',E12.5,'[m/s]',8X,'S =',E12.5,A12/ 3 3X,'H =',E12.5,A8,5X,'U =',E12.5,A8,5X) WRITE(6,2003) 2003 FORMAT(1H / 1 ' 1 : CONTINUE ', 2 1H ,' 2 : SELECT PATTERN OF CALCULATION'/ 4 ' 3 : SELECT SYSTEM OF UNITS ', 4 1H ,' 4 : STOP'/) WRITE(6,*) ' What do you wish to do next ? Input (1-4) = ' READ(5,*) INUM IF (INUM .EQ. 1) THEN GOTO 30 ELSEIF (INUM .EQ. 2) THEN GOTO 35 ELSEIF (INUM .EQ. 3) THEN GOTO 20 ENDIF STOP END