module deburst1 {
  use copy
  use icai1
  use solver_mod 
  use cgstep_mod
contains
  subroutine deburst ( niter, weight, eps, dd, hh) {
    interface {
       integer function weight( res, w) {
         real, dimension (:) :: res, w
       }
    }
    integer, intent (in)  ::  niter
    real,    intent (in)  ::  eps
    real,    intent (in)  ::  dd(:)
    real,    intent (out) ::  hh(:)
    real,    pointer      ::  aa(:)
    allocate (aa (3))
    aa  = (/-1., 2., -1. /)        # Laplacian filter
    call icai1_init (aa, 1)        # initialize convolution
                                   # solver, regularized, weighting function
    call solver_reg(  copy_lop,
    		cgstep, x= hh, dat= dd, niter= niter, 
		wght= weight,   nfreq= 1,         nmem= 0,              
		reg=  icai1_lop, nreg= size (dd),  eps=eps) 
    call cgstep_close ()
    deallocate (aa)
    }
}
