46 type(tdf_t),
allocatable :: f(:)
47 character(len=1024),
allocatable :: expression(:)
48 integer,
allocatable :: domain(:)
51 integer,
parameter,
public :: &
59 subroutine filter_init(steps, namespace, dt, filter)
60 integer,
intent(in) :: steps
61 type(namespace_t),
intent(in) :: namespace
62 real(real64),
intent(in) :: dt
63 type(filter_t),
intent(inout) :: filter
108 if (
parse_block(namespace,
'OCTFilter', blk) == 0)
then
116 filter%no_filters = no_f
117 safe_allocate(filter%f(1:no_f))
118 safe_allocate(filter%expression(1:no_f))
119 safe_allocate(filter%domain(1:no_f))
139 type(tdf_t),
intent(inout) :: f
142 integer :: no_f, i, j, nfreqs
146 no_f = filter%no_filters
153 write(
message(1),
'(a,i2)')
"Info: Applying filter "
158 select case (filter%domain(i))
165 do j = nfreqs + 1, 2*nfreqs - 1
171 message(1) =
"...I don't know this filter type..."
184 type(
filter_t),
intent(inout) :: filter
186 integer :: i, ip, j, nfreqs
187 real(real64) :: f_re, f_im
188 complex(real64),
allocatable :: ff(:)
189 real(real64),
allocatable :: grid(:)
193 do i = 1, filter%no_filters
198 safe_allocate(grid(1:
tdf_nfreqs(filter%f(i))))
202 select case (filter%domain(i))
207 call parse_expression(f_re, f_im,
"w", real(grid(ip), real64), filter%expression(i))
208 ff(ip) = cmplx(f_re, f_im, real64)
212 write(
message(1),
'(a)')
"Unknown choice of domain for filter."
213 write(
message(2),
'(a)')
"Choose: time or freq ."
222 do j = nfreqs + 1, 2*nfreqs - 1
226 safe_deallocate_a(ff)
227 safe_deallocate_a(grid)
238 type(
filter_t),
intent(in) :: filter
241 integer :: kk, iunit, i, max_iter
242 character(len=80) :: filename
243 real(real64),
allocatable :: wgrid(:)
247 if (filter%no_filters <= 0)
then
252 do kk = 1, filter%no_filters
253 write(filename,
'(a,i2.2)')
oct_dir//
'filter', kk
255 iunit =
io_open(filename, namespace, action=
'write')
256 safe_allocate(wgrid(1:max_iter/2+1))
258 do i = 1, max_iter/2+1
259 write(iunit,
'(3es30.16e4)') wgrid(i),
tdf(filter%f(kk), i)
261 safe_deallocate_a(wgrid)
272 type(
filter_t),
intent(inout) :: filter
277 if (filter%no_filters <= 0)
then
282 do i = 1, filter%no_filters
285 safe_deallocate_a(filter%f)
286 filter%no_filters = 0
287 safe_deallocate_a(filter%expression)
288 safe_deallocate_a(filter%domain)
297 type(
filter_t),
intent(in) :: filter
double sqrt(double __x) __attribute__((__nothrow__
integer, parameter, public filter_time
integer function, public filter_number(filter)
subroutine, public filter_init(steps, namespace, dt, filter)
subroutine, public filter_apply(f, filter)
subroutine, public filter_write(filter, namespace)
subroutine, public filter_end(filter)
subroutine build_filter(filter)
real(real64), parameter, public m_two
real(real64), parameter, public m_zero
complex(real64), parameter, public m_z0
complex(real64), parameter, public m_z1
real(real64), parameter, public m_one
character(len= *), parameter, public oct_dir
subroutine, public io_close(iunit, grp)
integer function, public io_open(file, namespace, action, status, form, position, die, recl, grp)
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, public messages_info(no_lines, iunit, debug_only, stress, all_nodes, namespace)
subroutine, public parse_block_string(blk, l, c, res, convert_to_c)
integer function, public parse_block(namespace, name, blk, check_varinfo_)
subroutine, public tdf_numerical_to_fourier(f)
integer pure function, public tdf_nfreqs(f)
integer pure function, public tdf_niter(f)
subroutine, public tdf_end(f)
subroutine, public tdf_fourier_grid(f, wgrid)
subroutine, public tdf_init_numerical(f, niter, dt, omegamax, initval, rep)
subroutine, public tdf_fourier_to_numerical(f)