Fortran中WRITE语句和行继续的问题

时间:2017-06-23 18:02:03

标签: fortran intel-fortran abaqus

我目前正在尝试通过Fortran中的行继续来解决问题,而且我是该语言的新手。我写这篇文章是为了与ABAQUS软件包一起使用,其中所有的编译都是使用RegisterClientScript完成的。我相信编译设置为与Fortran 90兼容。我已经在ifort语句的中间尝试了以下所有配置的续行:

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)

我不断得到的编译错误是:

TRIPTrans.f(55):错误#5082:语法错误,找到'&'期待以下之一:(...

        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)

----------------------------------------------- -------------------------------------------------- --- ^

我是否允许将写入语句拆分为多行?

2 个答案:

答案 0 :(得分:1)

如果有人遇到过这个问题,我的问题就是上面发布的答案以及源代码中空白区域的性质。延续字符需要在第6列,有关我的设置(编译设置?)导致它无法识别'标签'作为多列。我必须明确地空间(使用空格键)5次然后放置延续字符。制表符和空格的组合无法正确编译。

鉴于我对FORTRAN缺乏经验,我不确定这是否是一个常见问题。

答案 1 :(得分:0)

您的代码与<{1}}英特尔Fortran编译器选项 不兼容。

该选项的作用是它将行的长度从72个字符扩展到132个字符,用于固定表单源。这可能很方便,然而,许多代码使用第72列之后的空格来存储注释。

确实,你的-extend_source

&

应该是注释,对编译器不可见。通常用于创建与固定和自由格式同时兼容的文件。但由于WRITE(1001,FS) KMC_ELEMENTS(K1)%IDNUM,KMC_ELEMENTS(K1)%MATID, & ,它并不是不可见的。

如果您需要-extend source选项,则只能在新行的第6列中使用-extend source。你不能在前一行使用额外的一个。

另一方面,如果代码应该是自由格式,(你还没有告诉我们!),那么你必须使用{{1}指示编译器选项。