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
program where_mask_demo
implicit none
integer :: values(4)
integer :: limit
values = [3, 5, 7, 10]
limit =
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 =
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 =
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
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.