65 procedure, pass(this) :: compute_weights => &
90 type(
space_t),
intent(in),
target :: Xh
92 if ((xh%t .eq.
gl) .or. (xh%t .eq.
gll))
then
105 if (
associated(this%Xh)) this%Xh => null()
121 real(kind=
rp),
intent(in) :: r(:), s(:), t(:)
122 real(kind=
rp),
intent(inout) :: wr(:,:), ws(:,:), wt(:,:)
143 type(
point_t),
intent(in) :: rst(:)
144 real(kind=
rp),
intent(inout) :: x(this%Xh%lx, this%Xh%ly, this%Xh%lz)
145 real(kind=
rp),
allocatable :: res(:)
147 real(kind=
rp) :: hr(this%Xh%lx), hs(this%Xh%ly), ht(this%Xh%lz)
148 integer :: lx,ly,lz, i
175 if ( .not.
abscmp(rst(i)%x(1), rst(i-1)%x(1)) )
then
177 this%Xh%zg(:,1), lx-1, 0, hr)
179 if ( .not.
abscmp(rst(i)%x(2), rst(i-1)%x(2)) )
then
181 this%Xh%zg(:,2), ly-1, 0, hs)
183 if ( .not.
abscmp(rst(i)%x(3), rst(i-1)%x(3)) )
then
185 this%Xh%zg(:,3), lz-1, 0, ht)
205 type(
point_t),
intent(in) :: rst(:)
206 real(kind=
rp),
intent(inout) :: x(this%Xh%lx, this%Xh%ly, this%Xh%lz)
207 real(kind=
rp),
intent(inout) :: y(this%Xh%lx, this%Xh%ly, this%Xh%lz)
208 real(kind=
rp),
intent(inout) :: z(this%Xh%lx, this%Xh%ly, this%Xh%lz)
210 type(
point_t),
allocatable :: res(:)
211 real(kind=
rp),
allocatable :: tmp(:,:)
212 real(kind=
rp) :: hr(this%Xh%lx), hs(this%Xh%ly), ht(this%Xh%lz)
213 integer :: lx,ly,lz, i
245 if ( .not.
abscmp(rst(i)%x(1), rst(i-1)%x(1)) )
then
247 this%Xh%zg(:,1), lx-1, 0, hr)
249 if ( .not.
abscmp(rst(i)%x(2), rst(i-1)%x(2)) )
then
251 this%Xh%zg(:,2), ly-1, 0, hs)
253 if ( .not.
abscmp(rst(i)%x(3), rst(i-1)%x(3)) )
then
255 this%Xh%zg(:,3), lz-1, 0, ht)
279 rst, X, Y, Z)
result(res)
281 real(kind=
rp),
intent(inout) :: jac(3,3)
282 type(
point_t),
intent(in) :: rst
283 real(kind=
rp),
intent(inout) :: x(this%Xh%lx, this%Xh%ly, this%Xh%lz)
284 real(kind=
rp),
intent(inout) :: y(this%Xh%lx, this%Xh%ly, this%Xh%lz)
285 real(kind=
rp),
intent(inout) :: z(this%Xh%lx, this%Xh%ly, this%Xh%lz)
287 real(kind=
rp) :: hr(this%Xh%lx, 2), hs(this%Xh%ly, 2), ht(this%Xh%lz, 2)
289 real(kind=
rp) :: tmp(3)
291 integer :: lx,ly,lz, i
306 call triple_tensor_product(tmp, x, y, z, lx, hr(:,1), hs(:,1), ht(:,1))
314 call triple_tensor_product(tmp, x,y,z, lx, hr(:,2), hs(:,1), ht(:,1))
318 call triple_tensor_product(tmp, x,y,z, lx, hr(:,1), hs(:,2), ht(:,1))
322 call triple_tensor_product(tmp, x,y,z, lx, hr(:,1), hs(:,1), ht(:,2))
335 type(
point_t),
intent(in) :: rst
336 real(kind=
rp),
intent(inout) :: x(this%Xh%lx, this%Xh%ly, this%Xh%lz)
337 real(kind=
rp),
intent(inout) :: y(this%Xh%lx, this%Xh%ly, this%Xh%lz)
338 real(kind=
rp),
intent(inout) :: z(this%Xh%lx, this%Xh%ly, this%Xh%lz)
340 real(kind=
rp) :: jac(3,3)
341 real(kind=
rp) :: tmp(3)
343 real(kind=
rp) :: hr(this%Xh%lx, 2), hs(this%Xh%ly, 2), ht(this%Xh%lz, 2)
344 integer :: lx, ly, lz
355 call triple_tensor_product(tmp, x, y, z, lx, hr(:,2), hs(:,1), ht(:,1))
359 call triple_tensor_product(tmp, x, y, z, lx, hr(:,1), hs(:,2), ht(:,1))
363 call triple_tensor_product(tmp, x, y, z, lx, hr(:,1), hs(:,1), ht(:,2))
subroutine, public device_rzero(a_d, n, strm)
Zero a real vector.
Device abstraction, common interface for various accelerators.
Fast diagonalization methods from NEKTON.
subroutine, public fd_weights_full(xi, x, n, m, c)
Compute finite-difference stencil weights for evaluating derivatives up to order at a point.
integer, parameter neko_bcknd_device
integer, parameter, public rp
Global precision used in computations.
Routines to interpolate fields on a given element on a point in that element with given r,...
real(kind=rp) function, dimension(:), allocatable point_interpolator_interpolate_scalar(this, rst, x)
Interpolates a scalar field on a set of points . Returns a vector of N coordinates .
subroutine point_interpolator_free(this)
Free pointers.
real(kind=rp) function, dimension(3, 3) point_interpolator_interpolate_jacobian(this, rst, x, y, z)
Constructs the Jacobian, returns a 3-by-3 array where .
type(point_t) function point_interpolator_interpolate_vector_jacobian(this, jac, rst, x, y, z)
Interpolates a vector field and constructs the Jacobian at a point . Returns a vector .
subroutine point_interpolator_init(this, xh)
Initialization of point interpolation.
type(point_t) function, dimension(:), allocatable point_interpolator_interpolate_vector(this, rst, x, y, z)
Interpolates a vector field on a set of points . Returns an array of N points .
subroutine point_interpolator_compute_weights(this, r, s, t, wr, ws, wt)
Computes interpolation weights for a list of points.
Defines a function space.
integer, parameter, public gll
integer, parameter, public gl
A point in with coordinates .
Field interpolator to arbitrary points within an element. Tailored for experimentation,...
The function space for the SEM solution fields.