Fortran 中的 WRITE 语句和续行问题
Trouble with WRITE statement and line continuations in Fortran
我目前正在尝试找出 Fortran 中的行延续问题,我是该语言的新手。我写这篇文章是为了与软件包 ABAQUS 一起使用,其中所有编译都是使用 ifort
完成的。我相信编译设置为与 Fortran 90 兼容。我已经尝试了以下所有配置,以便在 WRITE
语句中间继续一行:
FILENAME = TRIM(KMC_DATADIR) // '/elementInfo.txt'
OPEN(1001, FILE=FILENAME, STATUS="REPLACE", ACTION="WRITE")
FS = '(I5,I5,I5,F12.10)'
DO K1=1,KMC_NUMELEM
WRITE(1001,FS) KMC_ELEMENTS(K1)%IDNUM, KMC_ELEMENTS(K1)%MATID,
& KMC_ELEMENTS(K1)%TRANSFORMED, KMC_ELEMENTS(K1)%ORIENT%RMAT(1,1)
END DO
CLOSE(1001)
FILENAME = TRIM(KMC_DATADIR) // '/elementInfo.txt'
OPEN(1001, FILE=FILENAME, STATUS="REPLACE", ACTION="WRITE")
FS = '(I5,I5,I5,F12.10)'
DO K1=1,KMC_NUMELEM
WRITE(1001,FS) KMC_ELEMENTS(K1)%IDNUM, KMC_ELEMENTS(K1)%MATID, &
KMC_ELEMENTS(K1)%TRANSFORMED, KMC_ELEMENTS(K1)%ORIENT%RMAT(1,1)
END DO
CLOSE(1001)
FILENAME = TRIM(KMC_DATADIR) // '/elementInfo.txt'
OPEN(1001, FILE=FILENAME, STATUS="REPLACE", ACTION="WRITE")
FS = '(I5,I5,I5,F12.10)'
DO K1=1,KMC_NUMELEM
WRITE(1001,FS) KMC_ELEMENTS(K1)%IDNUM, KMC_ELEMENTS(K1)%MATID, &
& KMC_ELEMENTS(K1)%TRANSFORMED, KMC_ELEMENTS(K1)%ORIENT%RMAT(1,1)
END DO
CLOSE(1001)
我不断收到的编译器错误是这样的:
TRIPTrans.f(55):错误 #5082:语法错误,在期望以下之一时发现“&”:( ...
WRITE(1001,FS) KMC_ELEMENTS(K1)%IDNUM,KMC_ELEMENTS(K1)%MATID, &
-------------------------------------------- ---------------------------------------------- -----^
我可以将写语句拆分成多行吗?
您的代码不与-extend_source
Intel Fortran 编译器选项兼容。
该选项的作用是将固定格式源的行长度从 72 个字符扩展到 132 个字符。这可能很方便,但是,许多代码在第 72 列之后使用 space 来存储注释。
的确,你的&
在
WRITE(1001,FS) KMC_ELEMENTS(K1)%IDNUM,KMC_ELEMENTS(K1)%MATID, &
应该是注释,编译器看不到。通常这样做是为了同时创建与固定格式和自由格式兼容的文件。但由于 -extend source
.
,它并不是不可见的
如果需要-extend source
选项,只能在新行的第6列使用&
。您不能在上一行使用附加的。
另一方面,如果代码应该是 自由形式 ,(你还没告诉我们!),那么你必须通过使用-free
选项。
如果有人遇到这个问题,我的问题是上面发布的答案以及我的源代码中白色 space 的性质的组合。连续字符需要在第 6 列,并且我的设置(编译设置?)导致它无法将 'tab' 识别为多列。我不得不明确地 space 超过(使用 space 栏)5 次然后放置连续字符。选项卡和 spaces 的组合将无法正确编译。
鉴于我缺乏使用 FORTRAN 的经验,我不确定这是否是一个常见问题。
我目前正在尝试找出 Fortran 中的行延续问题,我是该语言的新手。我写这篇文章是为了与软件包 ABAQUS 一起使用,其中所有编译都是使用 ifort
完成的。我相信编译设置为与 Fortran 90 兼容。我已经尝试了以下所有配置,以便在 WRITE
语句中间继续一行:
FILENAME = TRIM(KMC_DATADIR) // '/elementInfo.txt'
OPEN(1001, FILE=FILENAME, STATUS="REPLACE", ACTION="WRITE")
FS = '(I5,I5,I5,F12.10)'
DO K1=1,KMC_NUMELEM
WRITE(1001,FS) KMC_ELEMENTS(K1)%IDNUM, KMC_ELEMENTS(K1)%MATID,
& KMC_ELEMENTS(K1)%TRANSFORMED, KMC_ELEMENTS(K1)%ORIENT%RMAT(1,1)
END DO
CLOSE(1001)
FILENAME = TRIM(KMC_DATADIR) // '/elementInfo.txt'
OPEN(1001, FILE=FILENAME, STATUS="REPLACE", ACTION="WRITE")
FS = '(I5,I5,I5,F12.10)'
DO K1=1,KMC_NUMELEM
WRITE(1001,FS) KMC_ELEMENTS(K1)%IDNUM, KMC_ELEMENTS(K1)%MATID, &
KMC_ELEMENTS(K1)%TRANSFORMED, KMC_ELEMENTS(K1)%ORIENT%RMAT(1,1)
END DO
CLOSE(1001)
FILENAME = TRIM(KMC_DATADIR) // '/elementInfo.txt'
OPEN(1001, FILE=FILENAME, STATUS="REPLACE", ACTION="WRITE")
FS = '(I5,I5,I5,F12.10)'
DO K1=1,KMC_NUMELEM
WRITE(1001,FS) KMC_ELEMENTS(K1)%IDNUM, KMC_ELEMENTS(K1)%MATID, &
& KMC_ELEMENTS(K1)%TRANSFORMED, KMC_ELEMENTS(K1)%ORIENT%RMAT(1,1)
END DO
CLOSE(1001)
我不断收到的编译器错误是这样的:
TRIPTrans.f(55):错误 #5082:语法错误,在期望以下之一时发现“&”:( ...
WRITE(1001,FS) KMC_ELEMENTS(K1)%IDNUM,KMC_ELEMENTS(K1)%MATID, &
-------------------------------------------- ---------------------------------------------- -----^
我可以将写语句拆分成多行吗?
您的代码不与-extend_source
Intel Fortran 编译器选项兼容。
该选项的作用是将固定格式源的行长度从 72 个字符扩展到 132 个字符。这可能很方便,但是,许多代码在第 72 列之后使用 space 来存储注释。
的确,你的&
在
WRITE(1001,FS) KMC_ELEMENTS(K1)%IDNUM,KMC_ELEMENTS(K1)%MATID, &
应该是注释,编译器看不到。通常这样做是为了同时创建与固定格式和自由格式兼容的文件。但由于 -extend source
.
如果需要-extend source
选项,只能在新行的第6列使用&
。您不能在上一行使用附加的。
另一方面,如果代码应该是 自由形式 ,(你还没告诉我们!),那么你必须通过使用-free
选项。
如果有人遇到这个问题,我的问题是上面发布的答案以及我的源代码中白色 space 的性质的组合。连续字符需要在第 6 列,并且我的设置(编译设置?)导致它无法将 'tab' 识别为多列。我不得不明确地 space 超过(使用 space 栏)5 次然后放置连续字符。选项卡和 spaces 的组合将无法正确编译。
鉴于我缺乏使用 FORTRAN 的经验,我不确定这是否是一个常见问题。