目的
WHERE ステートメントは、配列式および配列割り当ての計算をマスクします。これは論理配列式の値に応じて実行されます。 WHERE ステートメントは WHERE 構造体の最初のステートメントにすることができます。
構文
(1) >>-+-------------------------+-------WHERE--(--mask_expr--)--+----------------------------+->< '-where_construct_name--:-' '-where_assignment_statement-'
注:
|
+---------------------------------Fortran 95---------------------------------+
+------------------------------Fortran 95 の終り------------------------------+
規則
where_assignment_statement がある場合は、WHERE ステートメントは、WHERE 構造体の最初のステートメントではありません。 where_assignment_statement がない場合は、WHERE ステートメントは WHERE 構造体の最初のステートメントであり、WHERE 構造体ステートメントと呼ばれます。 END WHERE ステートメントをそれに続けなければなりません。詳細については、WHERE 構造体を参照してください。
WHERE ステートメントが WHERE 構造体の最初のステートメントではない場合、そのステートメントを DO または DO WHILE 構造体の終端ステートメントとして使用することができます。
+---------------------------------Fortran 95---------------------------------+
WHERE ステートメントは、WHERE 構造体内でネストさせることができます。定義済み割り当てである where_assignment_statement は、エレメント型の定義済み割り当てでなければなりません。
+------------------------------Fortran 95 の終り------------------------------+
where_assignment_statement では、 mask_expr および定義されている変数 variable は、同じ形状の配列でなければなりません。WHERE 構造体内のそれぞれの mask_expr は同じ形状でなければなりません。
+---------------------------------Fortran 95---------------------------------+
where_body_construct の一部である WHERE ステートメントは、分岐のターゲット・ステートメントにすることはできません。
+------------------------------Fortran 95 の終り------------------------------+
WHERE ステートメントの mask_expr で参照される関数の実行は、where_assignment_statement 内のエンティティーに影響を与える場合があります。
マスク式の解釈については、マスクされた配列割り当ての解釈 を参照してください。
+---------------------------------Fortran 95---------------------------------+
where_construct_name を WHERE 構造体ステートメントに指定する場合、対応する END WHERE ステートメントにも指定しなければなりません。構造体名は、WHERE 構造体のマスクされた ELSEWHERE および ELSEWHERE ステートメントでは任意指定です。
where_construct_name は、WHERE 構造体ステートメント上だけに指定可能です。
+------------------------------Fortran 95 の終り------------------------------+
例
REAL, DIMENSION(10) :: A,B,C ! In the following WHERE statement, the LOG of an element of A ! is assigned to the corresponding element of B only if that ! element of A is a positive value. WHERE (A>0.0) B = LOG(A)
·
·
·
END
+---------------------------------Fortran 95---------------------------------+
以下の例は、WHERE ステートメントでのエレメント型の定義済み割り当てを示しています。
INTERFACE ASSIGNMENT(=) ELEMENTAL SUBROUTINE MY_ASSIGNMENT(X, Y) LOGICAL, INTENT(OUT) :: X REAL, INTENT(IN) :: Y END SUBROUTINE MY_ASSIGNMENT END INTERFACE INTEGER A(10) REAL C(10) LOGICAL L_ARR(10) C = (/ -10., 15.2, 25.5, -37.8, 274.8, 1.1, -37.8, -36.2, 140.1, 127.4 /) A = (/ 1, 2, 7, 8, 3, 4, 9, 10, 5, 6 /) L_ARR = .FALSE. WHERE (A < 5) L_ARR = C ! DATA IN ARRAY L_ARR AT THIS POINT: ! ! L_ARR = F, T, F, F, T, T, F, F, F, F END ELEMENTAL SUBROUTINE MY_ASSIGNMENT(X, Y) LOGICAL, INTENT(OUT) :: X REAL, INTENT(IN) :: Y IF (Y < 0.0) THEN X = .FALSE. ELSE X = .TRUE. ENDIF END SUBROUTINE MY_ASSIGNMENT
+------------------------------Fortran 95 の終り------------------------------+
関連情報