LOGICALをPURE宣言すればいい。
PUREでないならコンパイラは判断できないので自動並列化は無理だろう。
手動でコンパイラ支持行で明示してやれ。

しかし、iは関数内にいれて
forall(j=1:jmax,k=1:kmax) a(j,k)=ifun(j,k)

pure function ifun(j,k)
...
do i = 1, imax
if (...) ifun = ifun + 1
end

みたいにしたほういい。