# 1 "<stdin>"
# 1 "<built-in>"
# 1 "<command-line>"
# 1 "<stdin>"

module helix
! DEFINE helix filter type
    implicit none
  type filter
    real, dimension( :), pointer :: flt
    ! (nh) filter coefficients
    integer, dimension( :), pointer :: lag ! (nh) filter lags
    logical, dimension( :), pointer :: mis
    ! (nd) boundary conditions
  end type
  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
  end subroutine
  subroutine deallocatehelix( aa)
! destroy a filter
    type( filter) :: aa
    deallocate( aa%flt, aa%lag) ! free memory
    if ( associated( aa%mis)) then
! if logicals were allocated
      deallocate( aa%mis) ! free them
    end if
  end subroutine
end module
