+---------------------------------Fortran 95---------------------------------+
エレメント型サブプログラム定義には、ELEMENTAL プレフィックス指定子がなければなりません。 ELEMENTAL プレフィックス指定子を使用した場合、RECURSIVE 指定子は使用できません。
エレメント型プロシージャーを指定した場合、-qrecur オプションは使用できません。
エレメント型サブプログラムは、純粋なサブプログラムです。ただし、純粋なサブプログラムは必ずしもエレメント型サブプログラムではありません。エレメント型サブプログラムの場合、必ずしも ELEMENTAL プレフィックス指定子および PURE プレフィックス指定子の両方を指定する必要はありません。PURE プレフィックス指定子は、 ELEMENTAL プレフィックス指定子の指定によって暗黙に指定されます。 標準準拠のサブプログラム定義またはインターフェース本体には、PURE および ELEMENTAL プレフィックス指定子の両方を入れることができます。
エレメント型プロシージャー、サブプログラム、およびユーザー定義エレメント型プロシージャーは、以下の規則に従わなければなりません。
エレメント型プロシージャーへの参照は、以下の場合にのみエレメント型になります。
エレメント型サブプログラムへの参照は、そのすべての引き数がスカラーである場合はエレメント型ではありません。
参照内のエレメント型プロシージャーへの実引き数は、以下のいずれかにすることができます。
エレメント型参照の場合、エレメント型の結果の値は、サブルーチンまたは関数が、それぞれの配列の実引き数の対応するエレメントに対して、任意の順序で別々に適用された場合に得られる結果の値と同じになります
組み込みサブルーチン MVBITS が使用される場合、TO および FROM 仮引き数に対応する引き数は、同じ変数にすることができます。これとは別に、エレメント型サブルーチンまたはエレメント型関数への参照内の実引き数は、引き数関連付けで説明されている制限事項を満たさなければなりません。
特定のエレメント型プロシージャーがある総称プロシージャーには、特別な規則が適用されます。これについては 総称名に対するプロシージャー参照の解決を参照してください。
例 1:
! Example of an elemental function INTERFACE ELEMENTAL REAL FUNCTION LOGN(X,N) REAL, INTENT(IN) :: X INTEGER, INTENT(IN) :: N END FUNCTION LOGN END INTERFACE REAL RES(100), VAL(100,100) ... DO I=1,100 RES(I) = MAXVAL( LOGN(VAL(I,:),2) ) END DO ... END PROGRAM P
例 2:
! Elemental procedure declared with a generic interface INTERFACE RAND ELEMENTAL FUNCTION SCALAR_RAND(x) REAL, INTENT(IN) :: X END FUNCTION SCALAR_RAND FUNCTION VECTOR_RANDOM(x) REAL X(:) REAL VECTOR_RANDOM(SIZE(x)) END FUNCTION VECTOR_RANDOM END INTERFACE RAND REAL A(10,10), AA(10,10) ! Since the actual argument 'AA' is a two-dimensional array, and ! a specific procedure that takes a two-dimensional array as an ! argument is not declared in the interface block, then the ! elemental procedure 'SCALAR_RAND' is called. A = RAND(AA) ! Since the actual argument is a one-dimensional array section, and ! a specific procedure that takes a one-dimensional array as an ! argument is declared in the interface block, then the specific ! one-dimensional procedure 'VECTOR_RANDOM' is called. This is an ! non-elemental reference since 'VECTOR_RANDOM' is not declared to ! be elemental. A = RAND(AA(6:10,2)) END
+------------------------------Fortran 95 の終り------------------------------+