Array Sections and Masks
Where Mask
Update Selected Elements
where applies an array assignment only where a logical mask is true.
Program
Play the program to change the threshold and watch only matching elements double.
where_mask.f90
Replay: real traced execution (multi-file project)
program where_mask_demo
implicit none
integer :: values(4)
integer :: limit
values = [3, 5, 7, 10]
limit = 6
where (values >= limit)
values = values * 2
end where
print '(I0, A, I0, A, I0, A, I0)', values(1), " ", values(2), " ", values(3), " ", values(4)
end program where_mask_demo
program where_mask_demo
implicit none
integer :: values(4)
integer :: limit
values = [3, 5, 7, 10]
limit = 4
where (values >= limit)
values = values * 2
end where
print '(I0, A, I0, A, I0, A, I0)', values(1), " ", values(2), " ", values(3), " ", values(4)
end program where_mask_demo
program where_mask_demo
implicit none
integer :: values(4)
integer :: limit
values = [3, 5, 7, 10]
limit = 9
where (values >= limit)
values = values * 2
end where
print '(I0, A, I0, A, I0, A, I0)', values(1), " ", values(2), " ", values(3), " ", values(4)
end program where_mask_demo
values ← [3, 5, 7, 10]
6values = [3, 5, 7, 10]7limit = 6values this step[3, 5, 7, 10]valueslimit ← 6
6values = [3, 5, 7, 10]7limit = 68where (values >= limit)values this step6limitvalues ← [3, 5, 14, 20]
8where (values >= limit)9 values = values * 210end wherevalues this step[3, 5, 7, 10] → [3, 5, 14, 20]values6limitprint '(I0, A, I0, A, I0, A, I0)', values(1), " ", values(2), " ", val…
10 end where11 print '(I0, A, I0, A, I0, A, I0)', values(1), " ", values(2), " ", values(3), " ", values(4)12end program where_mask_demooutput3 5 14 20values this step[3, 5, 14, 20]values
values ← [3, 5, 7, 10]
6values = [3, 5, 7, 10]7limit = 4values this step[3, 5, 7, 10]valueslimit ← 4
6values = [3, 5, 7, 10]7limit = 48where (values >= limit)values this step4limitvalues ← [3, 10, 14, 20]
8where (values >= limit)9 values = values * 210end wherevalues this step[3, 5, 7, 10] → [3, 10, 14, 20]values4limitprint '(I0, A, I0, A, I0, A, I0)', values(1), " ", values(2), " ", val…
10 end where11 print '(I0, A, I0, A, I0, A, I0)', values(1), " ", values(2), " ", values(3), " ", values(4)12end program where_mask_demooutput3 10 14 20values this step[3, 10, 14, 20]values
values ← [3, 5, 7, 10]
6values = [3, 5, 7, 10]7limit = 9values this step[3, 5, 7, 10]valueslimit ← 9
6values = [3, 5, 7, 10]7limit = 98where (values >= limit)values this step9limitvalues ← [3, 5, 7, 20]
8where (values >= limit)9 values = values * 210end wherevalues this step[3, 5, 7, 10] → [3, 5, 7, 20]values9limitprint '(I0, A, I0, A, I0, A, I0)', values(1), " ", values(2), " ", val…
10 end where11 print '(I0, A, I0, A, I0, A, I0)', values(1), " ", values(2), " ", values(3), " ", values(4)12end program where_mask_demooutput3 5 7 20values this step[3, 5, 7, 20]values
where
`where (mask)` guards an array assignment element by element.
mask
`values >= limit` builds a logical array from a comparison.
unchanged elements
Elements where the mask is false keep their previous value.