| 查看: 993 | 回复: 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 ] |
» 猜你喜欢
上海工程技术大学【激光智能制造】课题组招收硕士
已经有6人回复
带资进组求博导收留
已经有11人回复
自荐读博
已经有5人回复
求个博导看看
已经有16人回复
上海工程技术大学张培磊教授团队招收博士生
已经有4人回复
求助院士们,这个如何合成呀
已经有4人回复
临港实验室与上科大联培博士招生1名
已经有9人回复
写了一篇“相变储能技术在冷库中应用”的论文,论文内容以实验为主,投什么期刊合适?
已经有6人回复
最近几年招的学生写论文不引自己组发的文章
已经有11人回复
中科院杭州医学所招收博士生一名(生物分析化学、药物递送)
已经有3人回复
» 抢金币啦!回帖就可以得到:
双一流南京医科大学招计算机、AI、统计、生物信息等方向26年9月入学博士
+1/176
【CSC招生】拉瓦尔大学流体力学博士项目
+3/141
华中科技大学龚江研究员课题组诚招博士研究生、科研助理和博士后
+2/122
87 年东北小哥定居苏州(沪杭亦可),诚寻携手余生的你
+1/84
上海大学管理学院阳发军教授课题组全职博士/博士后招聘启事
+1/83
江苏科技大学能源材料化学课题组张俊豪教授招收博士研究生1-2名
+1/83
坐标北京不异地
+1/63
衡水学院招收食品与营养方向联合培养研究生
+1/36
盐湖所镁基储氢材料课题组招聘
+1/26
南科大夏海平院士-深大张平玉课题组联合招聘博士后
+1/26
复旦大学聂志鸿团队招聘聚电解质方向博士后和科研助理
+1/14
深容SCI智能体四大模块:Method, Introduction, Discussion, Abstract
+1/11
青岛大学 丁欣 课题组 招收2026秋化学博士1名
+1/10
2026年中科院化学所优青 程靓团队招收有机化学、生物化学背景的博士研究生
+1/10
天津大学化学系吴立朋课题组申请考核制博士招生/博后招聘-有机化学,金属有机
+1/9
中国科学院大连化学物理研究所DNL0902研究组招聘博士后和职工
+1/5
长春工业大学机电工程学院韩玲教授招收审核制2026年秋季入学博士生
+1/5
北京师范大学与企业联合招聘博士后、全职、兼职人员
+1/1
所以当初说在欧美生活𣎴用讲人情世故的人怎么生活的
+1/1
某外资仪器厂家急招技术销售工程师-苏州
+1/1
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







回复此楼