module levint { # LEVeler INverse INTerpolation in 1-D while finding PEF. use tcai1 use peftc use lint1 use cgstep_mod use solver_mod contains subroutine levint1 (niter, coord, dd, o1, d1, aa, mm, mmov, rr, eps) { integer, intent (in) :: niter real, intent (in) :: o1, d1, eps real, dimension (:), intent (in) :: dd real, dimension (:) :: rr real, dimension (:,:), intent (out) :: mmov real, dimension (:), pointer :: aa, mm, coord integer :: nr, nm logical, dimension (size (rr)) :: ma nm = size (mm) nr = size (rr) call lint1_init (o1, d1, coord) call peftc_init (aa, mm) aa (1 : 3) = (/ 1., -2., 1. /) # starting guess ma (:nm) = .false. ; ma (nm+1:) = .true. call solver_reg (lint1_lop, cgstep, reg= peftc_lop, nreg= nr, nlreg= tcai1_lop, eps= eps, niter= niter, x0= rr, x= rr, dat= dd, xmov= mmov, known= ma) ma (nm+2:) = .false. # free filter coefficients call cgstep_close () call solver_reg (lint1_lop, cgstep, reg= peftc_lop, nreg= nr, nlreg= tcai1_lop, eps= eps, niter= niter, x0= rr, x= rr, dat= dd, xmov= mmov, known= ma) call cgstep_close () } }