HPF 2 Example: Irregular Mesh (2)
INTEGER ind_node(nnode), ind_edge(nedge)
!HPF$ DISTRIBUTE ind_node(BLOCK), ind_edge(BLOCK)
!HPF$ DISTRIBUTE iedge(BLOCK), x(BLOCK)
CALL compute_dists( iedge, ind_node, ind_edge )
!HPF$ REDISTRIBUTE iedge(INDIRECT(ind_edge))
!HPF$ REDISTRIBUTE x(INDIRECT(ind_node))
DO WHILE (err > tol)
!HPF$ INDEPENDENT, NEW(flux), REDUCTION(err,x)
DO i = 1, nedge
flux = (x(iedge(i,1))-x(iedge(i,2))) / 2
err = err + flux*flux
x(iedge(i,1)) = x(iedge(i,1)) - flux
x(iedge(i,2)) = x(iedge(i,2)) + flux
END DO
err = err / nedge