我可以使用可分配数组作为其数据类型来定义用户定义的数据类型。
当我们仍在同一个子程序中时,分配工作完美。但我不知道如何将这种类型的用户定义数据类型作为子例程参数传递。
英特尔编译器显示错误# 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 中使用模块。
为了避免这个错误,我在主程序中使用了可分配变量以及调用子程序。然后编译程序,但在执行时,它显示错误“分配已多次完成”。
最后我想我将不得不使用一些全局常量......我猜。