
module helix {                                  # DEFINE helix filter type
  type filter {             
    real,    dimension( :), pointer :: flt      # (nh) filter coefficients
    integer, dimension( :), pointer :: lag      # (nh) filter lags
    logical, dimension( :), pointer :: mis      # (nd) boundary conditions
  }
contains
  subroutine allocatehelix( aa, nh ) {		# allocate a filter
    type( filter) :: aa
    integer       :: nh				# count of filter coefs (excl 1)
    allocate( aa%flt( nh), aa%lag( nh))		# allocate filter and lags.
    nullify( aa%mis)				# set null pointer for "mis".
    aa%flt = 0.					# zero filter coef values
  }
  subroutine deallocatehelix( aa) {		# destroy a filter
    type( filter) :: aa
    deallocate( aa%flt, aa%lag)			# free memory
    if( associated( aa%mis))			# if logicals were allocated
        deallocate( aa%mis)			# free them
  }
}
