【发布时间】:2019-08-13 06:10:29
【问题描述】:
我是 Fortran 新手。我得到了一个应该在 Fortran 90 中的文件,但它是用 Lahey Fujitsu 编译器编译的(稀疏的文档指出它应该用 lf95 filename.f -out compiled_name @imsllf95.cmd 编译)。但是,有些行用 c 注释,据我了解,这是在 Fortran 77 中注释的方式。此外,矩阵声明为 REAL*8, DIMENSION(23,8) :: xxx19,我认为它来自 Fortran 77。
在大多数情况下,我可以使用gfortran 或ifort 编译文件,但需要计算矩阵逆的部分除外。显然,在 LF95 编译器(使用专有模块 IMSLF90)中,使用 .i. 计算了矩阵逆。如果我删除这些反转,文件编译并运行没有问题(除了它给出错误结果的事实)。
我正在尝试查找编写此代码的 Fortran 版本,以便我可以搜索以相同版本编写的一些代码,以便我可以反转代码中的矩阵。
编辑:该文件具有扩展名 .f,尽管编译说明似乎暗示它是 Fortran 95。
这里有部分代码:
PROGRAM estimate_group
implicit none
INTEGER :: i,j,k,full,group1
REAL*8, DIMENSION(500) :: theta_start,theta_input
OPEN(68, STATUS="REPLACE",file='fit_measures.txt')
c OPEN(68, file='fit_measures.txt')
REWIND(68)
DO full=1,1
PRINT *, "=================================="
PRINT *, "FULL LOOP #: ", full
PRINT *, "=================================="
WRITE(68, *) "=================================="
WRITE(68, *) "FULL LOOP #: ", full
WRITE(68, *) "=================================="
DO group1=2,28
c Additional If statement to focus on top level and scale
c IF ( ((group1>=22) .AND. (group1<=28)) .OR. (group1==2)) THEN
IF ( group1==2) THEN
c READING IN THETA VECTOR FROM PREVIOUS ITERATIONS
c (starting values taken from prior runs theta output)
c ====================================================
IF ((group1==2) .AND. (full==1)) THEN
theta_input=0.0*theta_input
OPEN(67, file='theta_input1.txt')
REWIND(67)
DO i=1,500
READ(67,*) theta_input(i)
END DO
ELSE
theta_input=0.0*theta_input
OPEN(66,file='theta_input.txt')
REWIND(66)
DO i=1,500
READ(66,*) theta_input(i)
END DO
END IF
SUBROUTINE estimate(group1, theta_start)
INTEGER, INTENT(IN) :: group1
REAL*8, INTENT(IN), DIMENSION(500) :: theta_start
c Variable Declarations:\
INTEGER :: i,j,k,m,l,t0,i0,improve,max_m
REAL*8, DIMENSION(23,8) :: xxx19
xxx19(1:23,1) = (/554.0,541.1,583.3,593.2,615.8,582.0,582.5,546.5,
& 538.4,494.1,503.3,494.1,486.9,478.6,432.6,439.6,
& 380.4,355.4,305.9,271.8,254.6,208.8,202.8/)
【问题讨论】:
-
它不是 any 标准版本的 Fortran。当然不是 Fortran 77。但是,您不必担心这一点:即使此代码编写为带有扩展的 Fortran 90,您的同一个编译器也可以接受使用它支持的 Fortran 2018 功能编写的矩阵求逆代码。跨度>
-
你能扩展一下吗?
-
“该文件的扩展名为 .f,尽管编译说明似乎暗示它是 Fortran 95。” 扩展名仅指定(特定于编译器)它是固定源格式。任何 Fortran 版本都可以以固定源代码形式编写。 66 还是 2018,没关系。
-
如果您有特定的问题(如编译器错误消息)想要解决,您应该打开一个新问题,显示有问题的代码、确切的错误消息等等。
-
谢谢,我开了一个新问题:stackoverflow.com/questions/57487091/…
标签: fortran fortran90 fortran77