module light {  # directional light
use igrad1
integer :: nx, ny
real    :: ax, ay
real, dimension (nx), allocatable :: x
real, dimension (ny), allocatable :: y
#% _init(      nx,ny, ax,ay)
#% _lop ( mod (nx,ny), ruf (nx,ny))
integer ix, iy, stat
	do ix=1,nx {
		if( adj)  y = ay*ruf (ix,:)
		stat = igrad1_lop (adj, adj, mod(ix,:), y)
		if (.not. adj)  ruf (ix,:) = ruf (ix,:) + ay*y
	}
	do iy=1,ny {
		if( adj)  x = ax*ruf (:,iy)
		stat = igrad1_lop (adj, adj, mod(:,iy), x)
		if (.not. adj)  ruf (:,iy) = ruf (:,iy) + ax*x
	}
}
