XL Fortran for AIX V8.1.1

ランゲージ・リファレンス

WHERE

目的

WHERE ステートメントは、配列式および配列割り当ての計算をマスクします。これは論理配列式の値に応じて実行されます。 WHERE ステートメントは WHERE 構造体の最初のステートメントにすることができます。

構文



                               (1)
>>-+-------------------------+-------WHERE--(--mask_expr--)--+----------------------------+-><
   '-where_construct_name--:-'                               '-where_assignment_statement-'
 
 


注:


  1. Fortran 95 (where_construct_name)


mask_expr
論理配列式です。

+---------------------------------Fortran 95---------------------------------+

where_construct_name
WHERE 構造体を識別する名前です。

+------------------------------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_nameWHERE 構造体ステートメントに指定する場合、対応する 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 の終り------------------------------+

関連情報


[ ページのトップ | 前ページ | 次ページ | 目次 | 索引 ]