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 的经验,我不确定这是否是一个常见问题。