#$=head1 NAME #$ #$binpull2 - nearest neighbor interpolation, 2D #$ #$=head1 SYNOPSIS #$ #$Initializer : C #$ #$Operator : C #$ #$=head1 PARAMETERS #$ #$=over 4 #$ #$=item m1 - integer #$ #$ number of model points, axis 1 #$ #$=item m2 - integer #$ #$ number of model points, axis 2 #$ #$=item o1 - real #$ #$ first sample of model space, axis 1 #$ #$=item d1 - real #$ #$ sampling of model space, axis 1 #$ #$=item o2 - real #$ #$ first sample of model space, axis 2 #$ #$=item d2 - real #$ #$ sampling of model space, axis 2 #$ #$=item xy - C,L,L #$ #$=head1 LIBRARY #$ #$B #$ #$=cut #$ module binpull2 { # From each bin on model mesh, pull nearest data value. integer :: m1, m2 integer, dimension (m1,m2), allocatable :: jd #% _init( m1,m2, o1,d1, o2,d2, xy) real, dimension (:,:) :: xy real o1,d1, o2,d2, x,y, near,dist integer i1,i2, id do i1= 1, m1 { x = o1 + (i1-1)*d1 do i2= 1, m2 { y = o2 + (i2-1)*d2 near = 1.e30 do id= 1, size(xy,1) { dist = (x-xy(id,1))**2 + (y-xy(id,2))**2 if( dist < near) { near = dist jd(i1,i2) = id } } }} #% _lop ( mm (m1,m2), dd (:)) integer i1,i2, id do i1= 1, m1 { do i2= 1, m2 { id = jd(i1,i2) if( adj) mm(i1,i2) = mm(i1,i2) + dd(id) else dd(id) = dd(id) + mm(i1,i2) }} }