! Program to test WHERE inside FORALL program where_1 integer :: A(5,5) A(1,:) = (/1,0,0,0,0/) A(2,:) = (/2,1,1,1,0/) A(3,:) = (/1,2,2,0,2/) A(4,:) = (/2,1,0,2,3/) A(5,:) = (/1,0,0,0,0/) ! Where inside FORALL. ! WHERE masks must be evaluated before executing the assignments forall (I=1:5) where (A(I,:) .EQ. 0) A(:,I) = I elsewhere (A(I,:) >2) A(I,:) = 6 endwhere end forall if (any (A .ne. reshape ((/1, 1, 1, 1, 1, 0, 1, 2, 1, 2, 0, 1, 2, 3, 0, & 0, 1, 4, 2, 0, 0, 5, 6, 6, 5/), (/5, 5/)))) call abort ! Where inside DO A(1,:) = (/1,0,0,0,0/) A(2,:) = (/2,1,1,1,0/) A(3,:) = (/1,2,2,0,2/) A(4,:) = (/2,1,0,2,3/) A(5,:) = (/1,0,0,0,0/) do I=1,5 where (A(I,:) .EQ. 0) A(:,I) = I elsewhere (A(I,:) >2) A(I,:) = 6 endwhere enddo if (any (A .ne. reshape ((/1, 1, 1, 1, 1, 0, 1, 2, 1, 2, 0, 1, 2, 6, 0, & 0, 1, 0, 2, 0, 0, 0, 5, 5, 5/), (/5, 5/)))) call abort end