1! Program to test WHERE inside FORALL and the WHERE assignment need temporary 2program where_6 3 integer :: A(5,5) 4 5 A(1,:) = (/1,0,0,0,0/) 6 A(2,:) = (/2,1,1,1,0/) 7 A(3,:) = (/1,2,2,0,2/) 8 A(4,:) = (/2,1,0,2,3/) 9 A(5,:) = (/1,0,0,0,0/) 10 11 ! Where inside FORALL. 12 ! WHERE masks must be evaluated before executing the assignments 13 m=5 14 forall (I=1:4) 15 where (A(I,:) .EQ. 0) 16 A(1:m,I) = A(1:m,I+1) + I 17 elsewhere (A(I,:) >2) 18 A(I,1:m) = 6 19 endwhere 20 end forall 21 if (any (A .ne. reshape ((/1,2,6,2,1,0,1,2,1,2,0,1,2,5,0,0,1,6,2,0,0,0,2,& 22 6,0/), (/5, 5/)))) call abort 23end 24