英特尔Fortran:将多项名称列表写入内部文件?

时间:2013-06-11 17:40:30

标签: fortran

我想写一个包含多个项目(因此多行)的名单到一个字符变量。使用gfortran编译时,以下代码运行良好,但在使用ifort编译时返回写入错误:

program test
  implicit none
  type testtype
     real*8 :: x
     character(len=32) :: str
     logical :: tf
  end type testtype
  type(testtype) :: thetype
  integer :: iostat
  character(len=1000) :: mystr(10)
  namelist /THENAMELIST/ thetype
  integer :: i

  thetype%x = 1.0d0
  thetype%str="This is a string."
  thetype%tf = .true.

  mystr=""
  write(*,nml=THENAMELIST,delim="QUOTE")
  write(mystr,THENAMELIST,iostat=iostat,delim="QUOTE")
  write(*,*)"Iostat:",iostat

  do i = 1, size(mystr)
     write(*,*)i,trim(mystr(i))
  end do

end program test

输出如下:

> ifort -o test test.f90 ; ./test
 &THENAMELIST
 THETYPE%X       =   1.00000000000000     ,
 THETYPE%STR     = "This is a string.               ",
 THETYPE%TF      = T
 /
 Iostat:          66
           1 &THENAMELIST THETYPE%X=   1.00000000000000     ,
           2 
           3 
           4 
           5 
           6 
           7 
           8 
           9 
          10 

英特尔的运行时错误消息列表告诉我:“严重(66):输出语句溢出记录”。

为了过度完整,使用gfortran我当然得到了

> gfortran -o test test.f90 ; ./test
&THENAMELIST
 THETYPE%X=  1.0000000000000000     ,
 THETYPE%STR="This is a string.               ",
 THETYPE%TF=T,
 /
 Iostat:           0
           1 &THENAMELIST
           2  THETYPE%X=  1.0000000000000000     ,
           3  THETYPE%STR="This is a string.               ",
           4  THETYPE%TF=T,
           5  /
           6 
           7 
           8 
           9 
          10 

我在互联网上搜索过,并了解到内部文件不能是标量字符变量,但这和我发现的一样多。 GFortran接受一个标量变量,只是在该变量中写入换行符,但我认为这是非标准的fortran。

我使用的编译器是:

  • gfortran GNU Fortran(MacPorts gcc48 4.8-20130411_0)4.8.1 20130411(预发布)
  • ifort(IFORT)12.0.5 20110719(在Mac上)
  • ifort(IFORT)13.1.1 20130313(在GNU / Linux上)

我的问题是:我的语法错误是什么,或者我怎样才能将名单列表写入内部文件,而不必通过写入实际的外部临时文件来修补问题并将其读入我的变量(我现在正在做什么,但对于大名单来说这个很慢?)

0 个答案:

没有答案