# weighted interpolation-error filter # subroutine iner( nf,f, nr,yy,rr, ww, niter, lag, gap1, gapn) integer i, iter, nf, nr, niter, lag, gap1, gapn real f(nf), yy(nr), rr(nr), ww(nr) temporary real df(nf), sf(nf), dr(nr), wr(nr), sr(nr) if( lag < gap1 || lag > gapn ) call erexit('input fails gap1<=lag<=gapn') do i= 1, nf f(i) = 0. f(lag) = 1. # set output lag call contrunc( 0,0, lag, nr,yy, nf,f, nr,rr) # make residual do i= 1,nr wr(i) = rr(i) * ww(i) # weight residual call scale( -1., nr,wr) # negative do iter= 0, niter { do i= 1, nr dr(i) = wr(i) * ww(i) call contrunc( 1,0, lag, nr,yy, nf,df, nr,dr) # df=yy*dr do i= gap1, gapn df(i) = 0. # constrained lags call contrunc( 0,0, lag, nr,yy, nf,df, nr,dr) # dr=yy*df do i= 1, nr dr(i) = dr(i) * ww(i) call cgstep( iter, nf,f,df,sf, nr,wr,dr,sr) # f=f+df } call contrunc( 0,0, lag, nr,yy, nf,f, nr,rr) # get unweighted resid return; end