||
一在台式机运行成熟的FORTRAN程序包,准备用笔记本运行,却怎么也运行不成功。一段一段的用print老土办法检测,费昨日从清晨到浓夜之工,忍手边诸事待处之棘。在解决了一个个无关紧要的小问题之后,最后总出现的一个问题是弹出如文后所附的信息窗“*.exe已停止工作"。我关掉信息窗,DOS运行窗也就随即消失。真是欲罢不能,欲行无路。最爱的FORTRAN,难道你忘了you told me you loved me?
到今天终于发现,问题出在程序3千语句的最后输出部分。我安装的是旧版Fortran Power station 4.0,它不认如下面举例程序所示的scheme 1的语句,其用的尖括号唯Intel Fortran独享,Fortran Power station 4.0不认。令人痛苦的是,不认不认好了,可一个信儿也不递。compile,builder,竟然全都一路绿灯通过,execute也不显任何错误信息。
不忍心把这个语句随便改成如scheme 2那样的普通语句,仍然想跟Intel Fortran一样优雅(用于不同流域,只需改parameter语句,不用改模型内部)。于是开始查书查文献。可清华谭浩强老师、台湾彭国伦老师都笑而不答,遂一路网奔,到:http://stackoverflow.com/questions/9881186/fortran-output-format-dependent-on-a-variable 终于如醐灌顶:学到如scheme 3最简单的方法和如scheme 4最深奥的方法。至于该网提到如scheme 5的最简单的方法在程序要求将若干个数据在一行输出时不适用。
顺便提一句:写完这篇小文,又发现科学网丁晓彬博友也曾讨论过这个问题http://blog.sciencenet.cn/home.php?mod=space&uid=71139&do=blog&id=495889,可惜之前没有读到,握手。
Program try !try.f90 ! how to make the Fortran output format dependent on a variable
IMPLICIT NONE
integer ncol,i
parameter (ncol=10)
integer Izhengshu (ncol)
character(len=32):: string ! for scheme 4 below
string='(10i3)' ! 10 is following parameter (ncol=10) ! for scheme 4 below
do i=1,ncol
Izhengshu(i)=i
end do
OPEN(25,FILE='tryout.txt',STATUS='unknown')
! Scheme 1 ! only for Intel Fortran
! write(25,'(<ncol>i3)') (izhengshu(i),i=1,ncol)
! Scheme 2 ! correct but not elegant
! write(25,'(10i3)') (izhengshu(i),i=1,ncol)
!Scheme 3 ! simple, elegant but at the risk of error if '999' is defined too small
! write(25,'(999i3)') (izhengshu(i),i=1,ncol)
! scheme 4 ! the most complicate
write (string, '("(", I4, "(i3))")') ncol
write (25, string ) (izhengshu(i),i=1,ncol)
! Scheme 5 ! correct but not meet the requirements of all-in-one-row
! write(25,'(i3)') (izhengshu(i),i=1,ncol)
close(25)
stop
end
Archiver|手机版|科学网 ( 京ICP备07017567号-12 )
GMT+8, 2024-4-26 12:59
Powered by ScienceNet.cn
Copyright © 2007- 中国科学报社