【发布时间】:2017-07-20 15:40:30
【问题描述】:
我可以使用可分配数组作为其数据类型来定义用户定义的数据类型。
当我们仍在同一个子例程中时,分配工作完美。 但我不知道如何将这种用户定义的数据类型作为子程序参数传递。
英特尔编译器显示错误# 6530:
"Error 1 error #6530: The array spec for this component must be of explicit shape and each bound must be an initialization expression."
代码已在下面共享以显示错误。它是用 FORTRAN 77 编写的。我正在使用 FORTRAN 77,因为我必须将此代码附加到仅接受 FORTRAN 77 文件的 Abaqus 用户子例程中。
PROGRAM DERIVED_DATA_TYPE_CHECK
IMPLICIT NONE
INTEGER :: I,J,A,B
TYPE SS
SEQUENCE
DOUBLE PRECISION, DIMENSION(:,:), ALLOCATABLE :: S1
END TYPE SS
TYPE (SS),DIMENSION(:,:),ALLOCATABLE :: SS_
A=10
B=10
ALLOCATE (SS_(A,B))
! ALLOCATING THE VARIABLE S1 DIMENSIONS
! EVERY ALLOCATABLE VARIABLE HAS THE SAME SIZE AS
! THE TOTAL NUMBER OF STRUCTURE (TYPE)
DO I = 1,A
DO J = 1,B
ALLOCATE(SS_(I,J)%S1(A,B))
ENDDO
ENDDO
CALL PASS_ARG(SS_,A,B)
END
SUBROUTINE PASS_ARG(SS_,A,B)
IMPLICIT NONE
INTEGER :: A,B
TYPE SS
SEQUENCE
DOUBLE PRECISION, DIMENSION(A,B) :: S1
END TYPE SS
TYPE (SS), DIMENSION (A,B) :: SS_
END
编译时程序报错如下图:
----------
Error 2 error #6530: The array spec for this component must be of explicit shape and each bound must be an initialization expression. [S1]
----------
一定有办法解决这个问题。我想远离常见的块或模块。无论如何我不能在 Fortran 中使用模块。
为了避免这个错误,我在主程序和调用子程序中都使用了可分配变量。然后编译程序,但在执行时,它显示错误“分配已完成多次”。
最后我想我将不得不使用一些全局常量.....我猜。
【问题讨论】:
-
您的代码不是 FORTRAN 77。甚至没有接近。它与 FORTRAN 77 绝对不兼容。在 FORTRAN 77 中没有像
allocatable或::或type这样的东西。 -
好的........
-
ok........所以你能用你的更正编译程序吗......并发表你的建议...... .......我不在乎......直到这个特殊的小程序在f90或f77中运行............
-
我想远离常见的块或模块但是在这种情况下,模块正是你应该想要的。顺便说一句,子程序中声明的类型
ss不是程序中声明的类型ss。
标签: fortran subroutine allocatable-array