+---------------------------------Fortran 95---------------------------------+
目的
FORALL (構文) ステートメントは、 FORALL 構文の最初のステートメントです。
構文
>>-+----------------------------+--FORALL--+---------------+--->< '-FORALL_construct_name-- : -' '-forall_header-' |
>>-(--forall_triplet_spec_list--+---------------------+--)----->< '-,--scalar_mask_expr-'
>>-index_name-- = --subscript-- : --subscript-------------------> >--+-------------+--------------------------------------------->< '- : --stride-'
規則
forall_header のマスク式で参照されるプロシージャーは すべて、(定義済みの操作または割り当てによって参照されるものを含む) 純粋で なければなりません。
index_name は、スカラー整数の変数でなければなりません。 index_name の有効範囲は、FORALL 構文の全体です。
forall_triplet_spec_list の中の subscript およ び stride には、forall_triplet_spec_list の中 の index_name への参照を含めることはできません。 forall_header の中の式の評価は、forall_header の中の 他の式の評価に影響を与えてはなりません。
forall_triplet_spec が次のとおりであるとします。
index1 = s1:s2:s3
指標値の最大数は、次のようにして判別されます。
max = INT((s2-s1+s3)/s3)
ストライド (上記の s3) が指定されない場合、 値 1 が想定されます。 いずれかの指標が max <= 0 の場合、forall_assignment は実行されません。 たとえば、次のようになります。
index1 = 2:10:3 ! The index values are 2,5,8. ! max = floor(((10-2)/3)+1) = 3. index2 = 6:2:-1 ! The index values are 6,5,4,3,2. index2 = 6:2 ! No index values.
マスク式が省略されると、.TRUE. の値が想定されます。
例
POSITIVE: FORALL (X=1:100,A(X)>0) I(X)=I(X)+J(X) J(X)=J(X)-I(X+1) END FORALL POSITIVE
関連情報
+-----------------------------End of Fortran 95------------------------------+