|
小白是化学系研究生,现跟着老板做计算,老板让学fortran,然后就甩了这么个程序给我。小白折腾了很久这个程序也只看懂了皮毛,有好多问题希望各路大神能帮忙解答,小白在此先行谢过!!
这个程序是用fortran77编的,语法比较古老,还望海涵!
Q1:求出AntA,AntB,AntC的算法是什么?
Q2:那个求逆的算法是什么?小白感觉和一般的高斯消元不一样
Q3:下面那个计算最优参数的那个子程序,我就觉得跟天书一样,taila
[Fortran] 纯文本查看 复制代码 010 | CHARACTER DATFILE * 12 , RESFILE * 12 , SYSNAME * 30 , SYSFORM * 10 |
011 | DIMENSION A ( 7 , 7 ) , B ( 7 ) , X ( 7 ) , PC ( 60 ) , DP ( 60 ) |
012 | COMMON / TP / TE ( 60 ) , PE ( 60 ) |
013 | WRITE ( * , '(1X////1X)' ) |
014 | WRITE ( * , * ) 'Input the file name of data file' |
015 | READ ( * , '(A12)' ) DATFILE |
016 | OPEN ( 4 , FILE = DatFile , STATUS = 'OLD' ) |
017 | READ ( 4 , * ) SYSNAME , SYSFORM |
018 | READ ( 4 , * ) ND , IPUNIT , ITUNIT |
030 | READ ( 4 , * ) ( TE ( I ) , PE ( I ) , I = 1 , ND ) |
035 | IF ( ITUNIT .EQ. 0 ) TE ( I ) = TE ( I ) -273.15 |
036 | IF ( IPUNIT .EQ. 1 ) PE ( I ) = PE ( I ) / 760 . * 101.325 |
037 | IF ( IPUNIT .EQ. 2 ) PE ( I ) = PE ( I ) * 101.325 |
038 | IF ( IPUNIT .EQ. 3 ) PE ( I ) = PE ( I ) * 100.0 |
039 | IF ( IPUNIT .EQ. 4 ) PE ( I ) = PE ( I ) * 1000.0 |
048 | PLG = ALOG ( PE ( I ) ) / 2.302585 |
055 | A ( 2 , 2 ) = A ( 2 , 2 ) + PLG * PLG |
068 | X ( I ) = X ( I ) + A ( I , J ) * B ( J ) |
085 | PC ( I ) = EXP ( ( ANTA - ANTB / ( TE ( I ) + ANTC ) ) * 2.302585 ) |
087 | RDP = RDP + ABS ( DP ( I ) ) / PE ( I ) |
089 | RDP = RDP * 100.0 / FLOAT ( ND ) |
090 | WRITE ( * , '(1X////1X)' ) |
091 | WRITE ( * , * ) 'Input the file name of result file' |
092 | READ ( * , '(A12)' ) RESFILE |
093 | OPEN ( 4 , FILE = ResFile , STATUS = 'NEW' ) |
095 | 240 FORMAT ( 5 X , 'Correlation of vapor pressure for component' ) |
096 | WRITE ( 4 , 250 ) SYSNAME , SYSFORM |
097 | 250 FORMAT ( / 5 X , A 30 , 3 X , A 10 ) |
098 | WRITE ( 4 , 260 ) ANTA , ANTB , ANTC , TMIN , TMAX |
099 | 260 FORMAT ( / 5 X , 'ANTA=' , F 7.5 , 2 X , 'ANTB=' , F 9.3 , 2 X , 'ANTC=' , F 7.3 , |
100 | 1 2 X , 'TMIN=' , F 6.2 , 2 X , 'TMAX=' , F 6.2 ) |
102 | 270 FORMAT ( / 7 X , 'T/K' , 5 X , 'Pe/kPa' , 3 X , 'Pc/kPa' , 2 X , 'DP/kPa' ) |
103 | WRITE ( 4 , 280 ) ( I , TE ( I ) , PE ( I ) , PC ( I ) , DP ( I ) , I = 1 , ND ) |
104 | 280 FORMAT ( 2 X , I 2 , 2 X , F 6.2 , 2 X , F 7.3 , 2 X , F 7.3 , 2 X , F 6.3 ) |
106 | 290 FORMAT ( / 5 X , 'RDP=' , F 6.2 , '%' ) |
111 | SUBROUTINE VFRE ( X , N , M , Y ) |
113 | COMMON / TP / TE ( 60 ) , PE ( 60 ) |
118 | PC = EXP ( ( ANTA - ANTB / ( TE ( I ) + ANTC ) ) * 2.302585 ) |
144 | 11 AI = A ( 1 , 1 ) * A ( 2 , 2 ) - A ( 1 , 2 ) * A ( 2 , 1 ) |
156 | IF ( I .NE. K ) A ( I , K ) = - P * A ( I , K ) |
161 | IF ( J .NE. K ) A ( I , J ) = A ( I , J ) + A ( I , K ) * A ( K , J ) |
166 | IF ( J .NE. K ) A ( K , J ) = P * A ( K , J ) |
193 | INTEGER T , A 2 , B 2 , C 2 , N , M , K , TT |
194 | DIMENSION X ( 5 ) , R 1 ( 5 ) , R 2 ( 5 ) , R 3 ( 5 ) , Q ( 6 ) , P ( 6 , 5 ) |
204 | ELSE IF ( ABS ( X ( K ) ) .LT. 1 .E -6 ) THEN |
218 | IF ( A 1 .GT. Q ( T ) ) GO TO 60 |
221 | 60 IF ( C 1 .LT. Q ( T ) ) GO TO 50 |
226 | IF ( T .NE. A 2 .AND. B 1 .LT. Q ( T ) ) THEN |
237 | 85 SMN = SMN + Q ( K ) / ( AN +1 . ) |
241 | SD = SD + ( Q ( K ) / SMN -1 . ) * * 2 |
242 | 87 ANTA = ANTA + ( Q ( K ) - SMN ) * * 2 |
243 | ANTA = SQRT ( ANTA / ( AN +1 . ) ) |
246 | IF ( SD .LE. 1 .E -7 .OR. ANTA .LE. 1 .E -7 ) GO TO 170 |
247 | IF ( TT .GE. MAXP .OR. V .LT. 0.0001 ) GO TO 170 |
248 | 88 FORMAT ( 1 X , 5 HANTA = , E 10.2 , 2 X , 3 HSD = , E 10.2 , 2 X , 3 HTT = , I 3 ) |
249 | IF ( C 1 .LE. 1 .E -7 .OR. ABS ( 1 . - A 1 / C 1 ) .LE. 1 .E -7 ) GO TO 170 |
252 | IF ( T .NE. A 2 ) R 1 ( K ) = R 1 ( K ) + P ( T , K ) / AN |
256 | 110 R 2 ( K ) = 2 . * R 1 ( K ) - P ( A 2 , K ) |
258 | IF ( S .GE. A 1 ) GO TO 150 |
260 | R 3 ( K ) = 3 . * R 1 ( K ) -2 . * P ( A 2 , K ) |
270 | 160 R 3 ( K ) = R 1 ( K ) / 2 . + P ( A 2 , K ) / 2 . |
272 | IF ( U .LT. B 1 ) GO TO 130 |
279 | FUNCTION SIGAMY ( N , M , X ) |
287 | 5 FORMAT ( 2 X , 'S9=' , E 12.6 , 2 X , 'X(1)=' , E 12.6 , 2 X , 'X(2)=' , E 12.6 , 2 X , |
|
|