我可以使用可分配数组作为数据类型来定义用户定义的数据类型。传递用户定义的数据类型可分配数组
当我们仍处于同一子程序中时,分配完美地工作。 但我不知道如何将这种类型的用户定义数据类型作为子例程参数传递。
英特尔编译器显示了错误# 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中工作,因为我将不得不在ABAQUS的用户子程序中附加这个代码,它只接受FORTRAN 77文件。
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中使用模块。
为了避免这个错误,我在主程序和子程序中使用了可分配的变量。程序然后被编译,但是在执行时,它显示错误“该分配已经完成了多次”。我想我将不得不使用一些全局常量.....我想。
您的代码是** NOT ** FORTRAN 77.甚至没有关闭。它与FORTRAN 77绝对不兼容。在FORTRAN 77中没有什么像'allocatable'或'::'或'type'。 –
ok .................. –
ok ..................所以你可以编译你的更正程序中的程序....并发布你的建议...........我不关心......直到这个特定的小程序运行在f90或f77 ........... –