Another convenient function is to assign to an array new values only in for some parts of the array, based on a logical mask or logical expression. The option /WHERE of command LET allows such operations. For example
DEFINE REAL A[10,10] LET A[I,J] = EXP(-((I-5)|2)**2-((J-6)|3)**2) /WHERE (I+J).LT.10will set only a part of the A array (note that I and J are ``implicit variables'').
The preceding expression is equivalent to the following commands
DEFINE REAL A[10,10] FOR J 1 TO 10 FOR I 1 TO 10 IF (I+J).LT.10 THEN LET A[I,J] = EXP(-((I-5)|2)**2-((J-6)|3)**2) ENDIF NEXT NEXTbut it executes thousands of times faster...
Conditional assignment can be mixed with implicit loops, as shown above, but there are some syntax restrictions: please refer to the internal help for more details.