| 查看: 1001 | 回复: 2 | |||
[交流]
【求助】fortran一程序解读
|
|
本人对Fortran不大熟,而且要研究的一程序又太大(5000多行),所以请各位帮忙,解读一下其中的一些问题。 主程序要从一个文件中读取数据,文件中的数据如下。 TEST DATA SET 1 (MOLECULAR WEIGHT DISTRIBUTION) 5826 LAST -1. 5827 GMNMX 1 5.E+2 5828 GMNMX 2 5.E+6 5829 IWT 5. 5830 NERFIT 0. 5831 NINTT 3. 5832 NLINF 1. 5833 IFORMY 5834 (6F8.6) 5835 DOUSNQ 1. 5836 IUSER 10 1. 5837 RUSER 15 1.43 5838 RUSER 16 488. 5839 RUSER 17 60. 5840 RUSER 18 1.37E-4 5841 RUSER 22 -.5 5842 RUSER 10 -1. 5843 END 5844 NSTEND 17 5.E-6 85.E-6 5845 NSTEND 16 95.E-6 245.E-6 5846 NSTEND 4 265.E-6 325.E-6 5847 .450999 .410113 .372522 .340069 .310318 .283569 5848 .258853 .236028 .216811 .199376 .181524 .165491 5849 .153746 .139687 .128724 .117704 .109878 .094114 5850 .080559 .068725 .058679 .053363 .045275 .039581 5851 .033519 .031586 .027971 .023976 .021711 .021533 5852 .020312 .016487 .017212 .016077 .011657 .013386 5853 .010805 5854 主程序要读取其中的变量的值,比如LAST 变量,读取其变量值为-1,GMNMX 1 5.E+2 是指数组 GMNMX第一个元素为 5.E+2,最后一个变量是Y数组,即从5848到5853行的内容。 所以,我想知道主程序中是怎么样读取它们的,当然了解程序应该根据主程序内容,但主程序太长了,我挑一些有用的贴上。 SUBROUTINE READYT (MY,NIOERR,SQRTW,T,Y) 4271 DOUBLE PRECISION PRECIS, RANGE 4272 LOGICAL DOCHOS, DOMOM, DOUSIN, DOUSNQ, LAST, NEWPG1, 4273 1 NONNEG, ONLY1, PRWT, PRY, SIMULA, LUSER 4274 DIMENSION SQRTW(MY), T(MY), Y(MY) 4275 DIMENSION LIN(6), LA(6,2), IHOLER(6) 4276 COMMON /DBLOCK/ PRECIS, RANGE 4277 COMMON /SBLOCK/ DFMIN, SRMIN, 4278 1 ALPST(2), EXMAX, GMNMX(2), PLEVEL(2,2), RSVMNX(2,2), RUSER(551), 4279 2 SRANGE 4280 COMMON /IBLOCK/ IGRID, IQUAD, IUNIT, IWT, LINEPG, 4281 1 MIOERR, MPKMOM, MQPITR, NEQ, NERFIT, NG, NINTT, NLINF, NORDER, 4282 2 IAPACK(6), ICRIT(2), IFORMT(70), IFORMW(70), IFORMY(70), 4283 3 IPLFIT(2), IPLRES(2), IPRINT(2), ITITLE(80), IUSER(50), 4284 4 IUSROU(2), LSIGN(4,4), MOMNMX(2), NENDZ(2), NFLAT(4,2), NGL, 4285 5 NGLP1, NIN, NINEQ, NNSGN(2), NOUT, NQPROG(2), NSGN(4), NY 4286 COMMON /LBLOCK/ DOCHOS, DOMOM, DOUSIN, DOUSNQ, LAST, 4287 1 NEWPG1, NONNEG, ONLY1, PRWT, PRY, SIMULA, 4288 2 LUSER(30) 4289 DATA IHOLER/1HR, 1HE, 1HA, 1HD, 1HY, 1HT/, LA/ 4290 1 1HN, 1HS, 1HT, 1HE, 1HN, 1HD, 1HN, 1HY, 4*1H / 4291 IF (NINTT .LE. 0) GO TO 200 4292 C----------------------------------------------------------------------- 4293 C COMPUTE T IN EQUAL INTERVALS. 4294 C----------------------------------------------------------------------- 4295 NY=0 4296 DO 110 J=1,NINTT 4297 5110 FORMAT (1X,6A1,I5,2E15.6) 4298 READ (NIN,5110) LIN,NT,TSTART,TEND 4299 5120 FORMAT (1X,6A1,I5,1P2E15.5) 4300 WRITE (NOUT,5120) LIN,NT,TSTART,TEND 4301 DO 120 K=1,6 4302 IF (LIN(K) .NE. LA(K,1)) GO TO 130 4303 120 CONTINUE 4304 GO TO 140 4305 130 CALL ERRMES (1,.FALSE.,IHOLER,NOUT) 4306 GO TO 190 4307 140 IF (NT.GE.2 .AND. NT+NY.LE.MY) GO TO 150 4308 CALL ERRMES (2,.FALSE.,IHOLER,NOUT) 4309 GO TO 190 4310 150 DUM=(TEND-TSTART)/FLOAT(NT-1) 4311 NY=NY+1 4312 T(NY)=TSTART 4313 DO 160 K=2,NT 4314 NY=NY+1 4315 160 T(NY)=T(NY-1)+DUM 4316 GO TO 110 4317 190 NIOERR=NIOERR+1 4318 IF (NIOERR .GE. MIOERR) STOP 4319 110 CONTINUE 4320 GO TO 300 4321 C----------------------------------------------------------------------- 4322 C READ IN NY AND THEN T ARRAY. 4323 C----------------------------------------------------------------------- 4324 200 READ (NIN,5110) LIN,NY 4325 WRITE (NOUT,5110) LIN,NY 4326 DO 210 K=1,6 4327 IF (LIN(K) .NE. LA(K,2)) GO TO 220 4328 210 CONTINUE 4329 GO TO 230 4330 220 CALL ERRMES (3,.FALSE.,IHOLER,NOUT) 4331 GO TO 235 4332 230 IF (NY .LE. MY) GO TO 240 4333 CALL ERRMES (4,.FALSE.,IHOLER,NOUT) 4334 235 NIOERR=NIOERR+1 4335 RETURN 4336 240 READ (NIN,IFORMT) (T(J),J=1,NY) 4337 C----------------------------------------------------------------------- 4338 C READ IN Y ARRAY. 4339 C----------------------------------------------------------------------- 4340 300 IF (.NOT.SIMULA) READ (NIN,IFORMY) (Y(J),J=1,NY) 4341 IF (IWT .EQ. 4) GO TO 420 4342 C----------------------------------------------------------------------- 4343 C INITIALIZE SQRTW (SQUARE ROOTS OF LEAST SQUARES WEIGHTS) TO UNITY. 4344 C----------------------------------------------------------------------- 4345 DO 410 J=1,NY 4346 SQRTW(J)=1. 4347 410 CONTINUE 4348 其中,我对4341行代码有疑问,即 300 IF (.NOT.SIMULA) READ (NIN,IFORMY) (Y(J),J=1,NY) 4341,不知道这行命令怎么把文件中数据读入到数组Y的,因为,它好像没指明从第几行读入数据。事实上,这个数组Y的数据,正式数据文件中的最后几行,即.450999 .410113 .372522 .340069 .310318 .283569 5848 .258853 .236028 .216811 .199376 .181524 .165491 5849 .153746 .139687 .128724 .117704 .109878 .094114 5850 .080559 .068725 .058679 .053363 .045275 .039581 5851 .033519 .031586 .027971 .023976 .021711 .021533 5852 .020312 .016487 .017212 .016077 .011657 .013386 5853 .010805 。而且,它怎么就可以避过后面的行标 5848 5849等而不读入它们。单凭 300 IF (.NOT.SIMULA) READ (NIN,IFORMY) (Y(J),J=1,NY) 这一行应该不能实现吧,因为它既没有指明从哪行开始读,也没有指明道哪行结束。 最后,我的那个数据文件是.in格式的,难道和这个有关? 不知道我说明白了没有,请高手帮忙解释!谢谢! [ Last edited by opticspcs on 2011-1-21 at 15:01 ] |
» 猜你喜欢
拟解决的关键科学问题还要不要写
已经有9人回复
为什么一个当量的苯甲醛反应不完呢
已经有5人回复
招博士
已经有3人回复
存款400万可以在学校里躺平吗
已经有35人回复
为什么nbs上溴 没有产物点出现呢
已经有8人回复
最失望的一年
已经有18人回复
求推荐博导
已经有4人回复
求助一下有机合成大神
已经有4人回复
求推荐英文EI期刊
已经有5人回复
基金委咋了?2026年的指南还没有出来?
已经有10人回复
» 抢金币啦!回帖就可以得到:
浙江师范大学招收大气遥感、光学或人工智能方向的2026年物理学博士生1名
+2/276
东北大学-招收2026年硕士研究生2-3名(金属材料3D打印方向)
+5/240
上海87年GG诚求女友
+1/170
上海87年GG诚求女友
+1/169
招聘启事 江南大学乳品加工与营养健康团队博士后招聘
+2/130
海南大学专任教师招聘:海洋工程与海洋智能装备相关方向【长期有效】
+2/120
保障电池制造超纯环境:威格科技电池生产全线解决方案
+1/86
深圳大学张雷教授课题组诚聘博士后
+1/79
上海交通大学变革分子学中心申涛课题组2026秋季入学推荐-考核制博士招生(有机)
+1/77
北京大学季者课题组招聘博士后和科研助理/化学/化生/生命科学/物理/工程等
+1/76
南昌大学化学化工学院付拯江教授拟招收“申请-考核”制博士研究生
+1/73
中国地质大学(武汉)地质学、地质资源与地质工程、资源与环境方向招生,请尽快联系!
+1/68
【教授本人】南佛罗里达大学化学系刘文奇课题组 2026 Fall 招收有机/超分子方向博士生
+1/27
国重点实验室双一流A类长江学者团队招2026年全日制博士1-2名
+2/20
2026申博自荐 本硕双一流学科 纳米药物递送方向 一篇一区TOP 两个国家奖学金
+1/17
复旦大学2026年博士研究生,“药学 + 合成生物学”
+1/5
多伦多城市大学深度学习方向博士后
+1/4
南方科技大学田雷蕾课题组招收2026年博士生
+1/3
标准求助 SN/T 5263-2020悬赏10个金币
+1/3
河北工业大学层状材料与器件团队诚聘二维材料与原位电子显微学方向青年教师与博士后
+1/2
2楼2011-01-21 17:52:55
★ ★ ★
opticspcs(金币+10): 非常感谢 2011-01-22 08:56:40
余泽成(金币+3): 辛苦了! 2011-02-09 16:11:00
opticspcs(金币+10): 非常感谢 2011-01-22 08:56:40
余泽成(金币+3): 辛苦了! 2011-02-09 16:11:00
|
READ (NIN,IFORMY) (Y(J),J=1,NY) 这一句中,NIN 是指的设备号,也就是你的那个 .in 文件;IFORMY 是格式,这个格式是事先读入的,可以看 5834,5835 两行,其中 IFORMY 的值是 5835 行,即 (6F8.6) 每一行就读6个数,所以,后面的标号自然不必考虑。另外,我还有一个猜测,你的程序是固定格式的,而这些标号是在72列之后,所以它根本就没有意义,呵呵,当然,这只是一个猜测…… 现在一切清楚了吧,呵呵…… |
3楼2011-01-21 19:35:55













回复此楼