使用英特尔Fortran编译器避免使用列表导向输出中的换行符

时间:2013-07-01 14:44:16

标签: io formatting fortran

我注意到Fortran中列表导向的输出write(*,*)的结果依赖于编译器。

确实,使用代码:

program one
real(8), dimension(5):: r1
do i=1,5
    r1(i)=sqrt(i*10.0)
end do
write(*,*) (r1(i), i =1,5)
end program one

intel编译器ifort给出了换行符打破的标准输出:

   3.16227769851685        4.47213602066040        5.47722530364990     
   6.32455539703369        7.07106781005859     

而gfortran给出了等效的一行结果:

    3.1622776601683795        4.4721359549995796        5.4772255750516612        6.3245553203367590        7.0710678118654755     

我认为ifort每行最多写3个项目(当浮动实数时)。 有没有办法让ifort输出像gfrotran,即避免换行? 理想情况下,我想保留列表导向的输出(*,*)指令,所以我正在寻找类似编译器选项的东西,如果有的话。

4 个答案:

答案 0 :(得分:7)

没有。列表定向(自由格式)输出提供了便利,但您放弃了控制。输出的各个方面未指定,并允许选择给编译器。如果您想要完全控制,则必须使用格式化输出。

答案 1 :(得分:5)

从第14节开始,intel fortran编译器具有wrap-margin函数。默认情况下,记录包含80个字符。要禁用此限制,您应指定:

Linux上的

: - no-wrap-margin

在WIndows上的

:/ wrap-margin -

详情请见Intel Fortran's reference guide

答案 2 :(得分:2)

查看您最喜爱的Fortran书籍或在线文档中的编辑描述符。您可以在fmt语句中使用write说明符来指定编辑描述符。例如:

write(*,fmt='(5(F6.4,3X))') (r1(i), i =1,5)

应输出类似于:

的内容
3.1623   4.4721   5.4772   6.3246   7.0711   

答案 3 :(得分:-2)

请参阅https://software.intel.com/en-us/forums/topic/401555

指定FORT_FMT_RECL或使用 写(," (G0,1X))"