データ型として割り当て可能な配列を使用して、ユーザー定義のデータ型を定義できます。
同じサブルーチン内にいる間、割り当ては完全に機能します。しかし、このタイプのユーザー定義データ型をサブルーチン引数として渡す方法がわかりません。
Intel コンパイラは次のエラーを表示します# 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 でモジュールを使用することはできません。
このエラーを回避するために、サブルーチンを呼び出すだけでなく、メイン プログラムでも割り付け可能な変数を使用していました。その後、プログラムはコンパイルされますが、実行時に「その割り当てが複数回行われました」というエラーが表示されます。
最後に、いくつかのグローバル定数を使用する必要があると思います.....私は推測します。