Существует оператор и конструкция присваивания массивам под управлением логической маски WHERE. Оператор имеет вид
WHERE(логическое выражение) оператор присваивания
Например [14],
WHERE (TEMP >= 100.0) TEMP = TEMP - REDUCE_TEMP
Здесь TEMP и REDUCE_TEMP -- массивы одинаковой конфигурации. Еще пример:
WHERE(A >= 0) SQA = SQRT(A)
Конструкция имеет вид
[имя:]WHERE(логическая маска)
тело конструкции: оператор(ы) присваивания массивам
[ELSEWHERE[(необязательная маска)]]
тело конструкции: оператор(ы) присваивания массивам
END WHERE [имя конструкции]
Маска -- это логическое выражение, его результат должен быть логическим массивом той же конфигурации, что и массив в левой части присваивания.
Например, [14]
WHERE (PRESSURE <= 1.0)
PRESSURE = PRESSURE + INC_PRESSURE
TEMP = TEMP - 5.0
ELSEWHERE
RAINING = .TRUE.
END WHERE
После ELSEWHERE с маской могут быть еще ELSEWHERE. Пример:
WHERE (A > 0.0)
A = LOG(A)
ELSEWHERE (A < 0)
A = -LOG(-A)
ELSEWHERE
A = 7.40
END WHERE
После выполнения этой конструкции на месте положительных элементов окажутся их логарифмы, на месте отрицательных -- логарифмы абсолютных величин с обратным знаком, а на месте нулей -- константа.