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 } }