module box { # Convert helix filter to hypercube: cube(na(1),na(2),...) use helix use cartesian contains subroutine boxn( nd, center, na, aa, cube) { integer, dimension (:), intent( in) :: nd, center, na # (ndim) type( filter), intent( in) :: aa real, dimension( :), intent( out) :: cube integer, dimension( size( nd)) :: ii integer :: j, lag0a, lag0d, id, ia cube = 0.; # cube=0 call cart2line( na, center, lag0a) # locate the 1.0 in the na_cube. cube( lag0a) = 1. # place it. call cart2line( nd, center, lag0d) # locate the 1.0 in the nd_cube. do j = 1, size( aa%lag) { # inspect the entire helix id = aa%lag( j) + lag0d # index = helix_lag + center_d call line2cart( nd, id, ii) # ii(id) = cartesian indices call cart2line( na, ii, ia) # ia(ii) = linear index in aa cube( ia) = aa%flt( j) # copy the filter coefficient } } }