我可以使用可分配數組作爲數據類型來定義用戶定義的數據類型。傳遞用戶定義的數據類型可分配數組
當我們仍處於同一子程序中時,分配完美地工作。 但我不知道如何將這種類型的用戶定義數據類型作爲子例程參數傳遞。
英特爾編譯器顯示了錯誤# 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 ........... –