# 1 "<stdin>"
# 1 "<built-in>"
# 1 "<command-line>"
# 1 "<stdin>"
module mspef
! Find multi-scale prediction-error filter (helix magic)
  use mshconest
  use cgstep_mod
  use solver_smp_mod
  implicit none
  contains
  subroutine find_pef( yy, aa, niter)
    integer, intent( in) :: niter
    real, dimension( :), pointer :: yy
    type( msfilter) :: aa
    integer :: is
    real, allocatable :: dd(:,:),ee(:)
    allocate(dd( size( yy), size( aa%lag, 2)))
    allocate(ee(size(dd)))
    do is = 1, size( dd, 2)
      dd( :,is) = -yy
    end do
    ee=reshape( dd,(/size(dd)/))
    call mshconest_init( yy, aa)
    call solver_smp(m=aa%flt, d=ee, Fop=mshconest_lop, stepper=cgstep,&
      & niter=niter, m0=aa%flt)
    call cgstep_close()
    deallocate(dd,ee)
  end subroutine
end module
