module bin2 ! Data-push binning in 2-D. use adj_mod implicit none integer, private :: m1 integer, private :: m2 real, private :: o1 real, private :: d1 real, private :: o2 real, private :: d2 real ,private, dimension (:,:), pointer :: xy contains subroutine bin2_init ( m1_in,m2_in,o1_in,d1_in,o2_in,d2_in,xy_in ) integer :: m1_in integer :: m2_in real :: o1_in real :: d1_in real :: o2_in real :: d2_in real , dimension (:,:), pointer :: xy_in m1 = m1_in m2 = m2_in o1 = o1_in d1 = d1_in o2 = o2_in d2 = d2_in xy => xy_in end subroutine function bin2_lop ( adj, add, mm, dd) result(stat) integer :: stat logical,intent(in) :: adj,add real,dimension(:) :: mm,dd call adjnull (adj,add,mm,dd ) call bin2_lop2(adj,add,mm,dd ) stat=0 end function subroutine bin2_lop2(adj,add,mm,dd) logical,intent(in) :: adj,add real, dimension (m1,m2) :: mm real, dimension (:) :: 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 .and. i1<=m1 .and. 1<=i2 .and. i2<=m2 ) then if ( adj) then mm(i1,i2) = mm(i1,i2) + dd( id) else dd( id) = dd( id) + mm(i1,i2) end if end if end do end subroutine subroutine bin2_close() end subroutine end module