module bin2 { # Data-push binning in 2-D. integer :: m1, m2 real :: o1,d1,o2,d2 real, dimension (:,:), pointer :: xy #% _init( m1,m2, o1,d1,o2,d2,xy) #% _lop ( mm (m1,m2), dd (:)) integer i1,i2, id do id=1,size(dd) { i1 = 1.5 + (xy(id,1)-o1)/d1 i2 = 1.5 + (xy(id,2)-o2)/d2 if( 1<=i1 && i1<=m1 && 1<=i2 && i2<=m2 ) if( adj) mm(i1,i2) = mm(i1,i2) + dd( id) else dd( id) = dd( id) + mm(i1,i2) } }