module bound {          # mark helix filter outputs where input is off data.
use helix
contains 

  subroutine setHeliconBounds( aa ){
    type( filter)				:: aa
    logical,pointer,dimension(:,:,:,:,:)        :: temp
    integer					:: iDim
    integer,dimension(5)			:: tempDD=1
    integer,dimension(5)			:: tempDF

    if( aa%nDim > 5 ) call erexit ('sHB: too many dimensions')
    write(0,*)'boundsetting sub assumes a logical placement of fixed coef'
    tempDD(:aa%nDim) = aa%dataDims
    allocate( temp(tempDD(1),tempDD(2),tempDD(3),tempDD(4),tempDD(5)) )
    temp = .true.
    tempDF = 0
    tempDF(:aa%nDim) = aa%filterDims - aa%leadingI
    temp(:tempDF(1),:,:,:,:) = .false.
    temp(:,:tempDF(2),:,:,:) = .false.
    temp(:,:,:tempDF(3),:,:) = .false.
    temp(:,:,:,:tempDF(4),:) = .false.
    temp(:,:,:,:,:tempDF(5)) = .false.

    tempDF(:aa%nDim) = aa%dataDims - aa%leadingI 
    temp(tempDF(1)+2:,:,:,:,:) = .false.
    temp(:,tempDF(2)+2:,:,:,:) = .false.
    temp(:,:,tempDF(3)+2:,:,:) = .false.
    temp(:,:,:,tempDF(4)+2:,:) = .false.
    temp(:,:,:,:,tempDF(5)+2:) = .false.

#    deallocate( aa%edges ); 
		allocate( aa%edges(size(temp)) )
    aa%edges = reshape( temp, shape(aa%edges) )
    deallocate( temp )
  }
}

