program test_signfunc
use signfunc_mod
implicit none
integer, parameter :: DP=KIND(1.0d0)
real(DP) :: Lmax,Lmin
real(DP) :: eps,rr,rr2,x,dx,dr
type(zolotarev_signfunc) :: sf
character(256) ::arg
integer :: NS
integer :: i,j
if (command_argument_count() == 3) then
call get_command_argument(1,arg)
read(arg,*)eps
call get_command_argument(2,arg)
read(arg,*)Lmax
call get_command_argument(3,arg)
read(arg,*)Lmin
write(*,'("# EPS=",ES24.15)')eps
write(*,'("# Lambda_max=",ES24.15)') Lmax
write(*,'("# Lambda_min=",ES24.15)') Lmin
else
write(*,'("Usage: signfunc eps Lmax Lmin")')
stop
endif
call new(sf,Lmax,Lmin,eps)
write(*,'("# NS=",I3)')sf%NS
write(*,'("# rr(x) : rational approx in original form.")')
write(*,'("# rr2(x) : rational approx in polar decompd form.")')
write(*,'("# x rr2(x) |sign(x)-rr2(x)| rr(x)-rr2(x)")')
x = -10.0_DP
do
dx = max(abs(x)*0.001_DP,(Lmin/Lmax)/1000)
rr = signfunc(sf,x)
rr2 = signfunc2(sf,x)
dr = rr - rr2
write(*,'(4ES41.31)')x,rr2,abs(sign(1.0_DP,x)-rr2),dr
x = x+dx
if (x > 10.0_DP) exit
enddo
write(*,*)
write(*,*)
write(*,'("# ERROR BOUND:")')
write(*,'(4ES24.15)') sf%kappa,eps,sf%delta,sf%delta_ex
write(*,'(3ES24.15)') 1.0_DP,eps,sf%delta
write(*,*)
write(*,*)
write(*,'("# ZERO:")')
do i=1,sf%NS
x = sf%omg(i)
rr = abs(1.0_DP-signfunc2(sf,x))
write(*,'(3ES24.15)') sf%omg(i),rr
enddo
call delete(sf)
stop
end program