23 use,
intrinsic :: iso_fortran_env
37 real(real64) :: ch(-10:10)
38 real(real64) :: cg(-10:10)
39 real(real64) :: cht(-10:10)
40 real(real64) :: cgt(-10:10)
47 pure function lazy_8()
result(filters)
48 type(lazy_8_filter_t) :: filters
51 filters%ch = 0._real64
52 filters%cht = 0._real64
53 filters%cg = 0._real64
54 filters%cgt = 0._real64
58 filters%ch(-7) = -5._real64/2048._real64
59 filters%ch(-5) = 49._real64/2048._real64
60 filters%ch(-3) = -245._real64/2048._real64
61 filters%ch(-1) = 1225._real64/2048._real64
62 filters%ch( 0) = 1._real64
63 filters%ch( 1) = 1225._real64/2048._real64
64 filters%ch( 3) = -245._real64/2048._real64
65 filters%ch( 5) = 49._real64/2048._real64
66 filters%ch( 7) = -5._real64/2048._real64
67 filters%cht(0) = 1._real64
70 do i = -filters%m, filters%m - 1
71 filters%cg(i + 1) = filters%cht(-i) * real((2*modulo(i,2)-1), real64)
72 filters%cgt(i + 1) = filters%ch(-i) * real((2*modulo(i,2)-1), real64)
86 integer,
intent(in) :: itype
87 integer,
intent(in) :: nd
88 integer,
intent(out) :: nrange
89 real(real64),
dimension(0:nd),
intent(out) :: a,x
91 real(real64),
dimension(:),
allocatable :: y
99 message(1) =
"Only interpolating functions 8, 14, 16, 20, 24, 30, 40, 50, 60, 100."
132 a(i) = 1._real64 * i * ni / nd - (.5_real64 * ni - 1._real64)
151 subroutine scf_recursion(itype,n_iter,n_range,kernel_scf,kern_1_scf)
152 integer,
intent(in) :: itype,n_iter,n_range
153 real(kind=8), intent(inout) :: kernel_scf(-n_range:n_range)
154 real(kind=8), intent(out) :: kern_1_scf(-n_range:n_range)
161 message(1) =
"Only interpolating functions 8, 14, 16, 20, 24, 30, 40, 50, 60, 100."
187 integer,
intent(in) :: nd,nt
188 real(kind=8), intent(in) :: x(0:nd-1)
189 real(kind=8), intent(out) :: y(0:nd-1)
200 do j=-filters%m/2,filters%m/2-1
209 if (ind >= nt/2)
then
216 y(2*i+0)=y(2*i+0) + filters%ch(2*j-0)*x(ind)+filters%cg(2*j-0)*x(ind+nt/2)
217 y(2*i+1)=y(2*i+1) + filters%ch(2*j+1)*x(ind)+filters%cg(2*j+1)*x(ind+nt/2)
236 integer,
intent(in) :: n_iter,n_range
237 real(kind=8), intent(inout) :: kernel_scf(-n_range:n_range)
238 real(kind=8), intent(out) :: kern_1_scf(-n_range:n_range)
241 real(kind=8) :: kern,kern_tot
242 integer :: i_iter,i,j,ind
247 loop_iter_scf:
do i_iter=1,n_iter
248 kern_1_scf(:) = kernel_scf(:)
249 kernel_scf(:) = 0._real64
250 loop_iter_i:
do i=0,n_range
252 do j=-filters%m,filters%m
254 if (abs(ind) > n_range)
then
257 kern = kern_1_scf(ind)
259 kern_tot = kern_tot + filters%ch(j)*kern
261 if (abs(kern_tot) <= 1d-150)
then
265 kernel_scf( i) = 0.5_real64*kern_tot
266 kernel_scf(-i) = kernel_scf(i)
--------------— copy ---------------— Copies a vector, x, to a vector, y.
This module contains interfaces for BLAS routines You should not use these routines directly....
character(len=256), dimension(max_lines), public message
to be output by fatal, warning
subroutine, public messages_fatal(no_lines, only_root_writes, namespace)
subroutine scf_recursion_8(n_iter, n_range, kernel_scf, kern_1_scf)
pure type(lazy_8_filter_t) function lazy_8()
Filters for interpolating scaling functions (order 8)
subroutine back_trans_8(nd, nt, x, y)
subroutine, public scaling_function(itype, nd, nrange, a, x)
subroutine, public scf_recursion(itype, n_iter, n_range, kernel_scf, kern_1_scf)