module spraysum {                    # Spray or sum over 1, 2, and/or 3-axis.
integer ::   n1,n2,n3,     m1,m2,m3
#%  _init(   n1,n2,n3,     m1,m2,m3)
#%  _lop( xx(n1,n2,n3), yy(m1,m2,m3)) 
integer i1,i2,i3,  x1,x2,x3, y1,y2,y3
        if( n1 != 1  &&  m1 != 1  &&  n1 != m1)   call erexit('spraysum: n1,m1')
        if( n2 != 1  &&  m2 != 1  &&  n2 != m2)   call erexit('spraysum: n2,m2')
        if( n3 != 1  &&  m3 != 1  &&  n3 != m3)   call erexit('spraysum: n3,m3')
do i3= 1, max0(n3,m3) {   x3= min0(i3,n3);   y3= min0(i3,m3)
do i2= 1, max0(n2,m2) {   x2= min0(i2,n2);   y2= min0(i2,m2) 
do i1= 1, max0(n1,m1) {   x1= min0(i1,n1);   y1= min0(i1,m1) 

        if( adj)  xx(x1,x2,x3)  +=  yy(y1,y2,y3)
	else      yy(y1,y2,y3)  +=  xx(x1,x2,x3)
        }}}
}
