目的
WHERE ステートメントは、配列式および配列割り当ての計算をマスクします。これは論理配列式の値に応じて実行されます。 WHERE ステートメントは WHERE 構文の 最初のステートメントにすることができます。
構文
(1) >>-+-------------------------+-------WHERE--(--mask_expr--)--+----------------------------+->< '-where_construct_name--:-' '-where_assignment_statement-'
注:
|
+---------------------------------Fortran 95---------------------------------+
+-----------------------------End of 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 は、 エレメント型の定義済み割り当てでなければなりません。
+-----------------------------End of Fortran 95------------------------------+
where_assignment_statement では、 mask_expr および定義されている変数 variable は、 同じ形状の配列でなければなりません。WHERE 構文内の それぞれの mask_expr は同じ形状でなければなりません。
+---------------------------------Fortran 95---------------------------------+
where_body_construct の一部である WHERE ステートメントは、 分岐のターゲット・ステートメントにすることはできません。
+-----------------------------End of Fortran 95------------------------------+
WHERE ステートメントの mask_expr で参照される 関数の実行は、where_assignment_statement 内のエンティティーに 影響を与える場合があります。
マスク式の解釈については、マスクされた配列割り当ての解釈 を参照してください。
+---------------------------------Fortran 95---------------------------------+
where_construct_name を WHERE 構文ステートメントに 指定する場合、対応する END WHERE ステートメント にも指定しなければなりません。 構文名は、WHERE 構文 のマスクされた ELSEWHERE およ び ELSEWHERE ステートメントでは任意指定です。
where_construct_name は、WHERE 構文ステートメント上だけに 指定可能です。
+-----------------------------End of 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
+-----------------------------End of Fortran 95------------------------------+
関連情報