50 character(len=64) :: filter_type
56 real(kind=
rp),
allocatable :: fh(:,:), fht(:,:)
58 real(kind=
rp),
allocatable :: trnsfr(:)
76 character(len=*) :: filter_type
81 this%filter_type = filter_type
83 allocate(this%fh(nx, nx))
84 allocate(this%fht(nx, nx))
85 allocate(this%trnsfr(nx))
87 call rzero(this%fh, nx*nx)
88 call rzero(this%fht, nx*nx)
89 call rone(this%trnsfr, nx)
97 if (
allocated(this%fh))
then
101 if (
allocated(this%fht))
then
105 if (
allocated(this%trnsfr))
then
106 deallocate(this%trnsfr)
109 this%filter_type =
""
120 call neko_error(
"build_1d not implemented on accelarators.")
123 this%nx, this%filter_type)
131 integer,
intent(inout) :: nelv
132 real(kind=
rp),
intent(inout),
dimension(this%nx, this%nx, this%nx, nelv) :: u,v
135 call tnsr3d(v, this%nx, u, this%nx, this%fh, this%fht, this%fht, nelv)
139 end module elementwise_filter
Implements the CPU kernel for the elementwise_filter_t type.
subroutine, public build_1d_cpu(fh, fht, trnsfr, nx, filter_type)
Build the 1d filter for an element on the CPU. Suppose field x is filtered into x_hat by x_hat = fh*x...
Implements explicit_filter_t.
subroutine elementwise_field_filter_3d(this, v, u, nelv)
Filter a 3D field.
subroutine elementwise_filter_free(this)
Destructor.
subroutine build_1d(this)
Build the 1d filter for an element.
subroutine elementwise_filter_init(this, nx, filter_type)
Constructor.
subroutine, public rone(a, n)
Set all elements to one.
subroutine, public rzero(a, n)
Zero a real vector.
integer, parameter neko_bcknd_device
integer, parameter, public rp
Global precision used in computations.
subroutine, public tnsr3d(v, nv, u, nu, A, Bt, Ct, nelv)
Tensor product performed on nelv elements.
Implements the explicit filter for SEM.