rr(1) = 4.00004
rr(2) = -1.
rr(1+256) = -1.
The reason for the 4.00004 instead of 4.0 arises in the theory below where we are required to take the logarithm of the spectrum. The spectrum of the Laplacian operator is kx2+ky2, which vanishes at the point (kx,ky)=(0,0) where the logarithm is minus infinity. The .00004 prevents that.
Subroutine lapfac()
finds the helical derivative (factored negative Laplacian)
and then prepares the required filter
coefficient tables for the helix convolution
and deconvolution subroutines.
module lapfac_mod { # Factor 2-D Laplacian. Prepare input tables for helicon()
use autofac_mod
contains
subroutine lapfac(e, n1, aa, lag) {
real, intent (in) :: e
integer, intent (in) :: n1
integer, dimension (:), intent (out) :: lag
real, dimension (:), intent (out) :: aa
complex, dimension ( 1024*64) :: rr
real :: scale
integer :: i, na
rr = 0.
rr(1) = 4.00004 + e
rr(2) = -1.
rr(1+1024) = -1
call autofac( rr); scale= rr(1); rr = rr/scale
na = size (lag)
do i=1,na/2 {
lag(i) = i; lag(na/2+i) = n1 -(i-1)
aa(i) = rr(i+1); aa(na/2+i) = rr( 1024+1 -(i-1))
}
}
}
Subroutine lapfac() has its main job done by subroutine autofac() which will be shown after we examine the basic theory.