64 procedure, pass(this) :: compute_weights => &
89 type(
space_t),
intent(in),
target :: Xh
91 if ((xh%t .eq.
gl) .or. (xh%t .eq.
gll))
then
104 if (
associated(this%Xh)) this%Xh => null()
120 real(kind=
rp),
intent(in) :: r(:), s(:), t(:)
121 real(kind=
rp),
intent(inout) :: wr(:,:), ws(:,:), wt(:,:)
142 type(
point_t),
intent(in) :: rst(:)
143 real(kind=
rp),
intent(inout) :: x(this%Xh%lx, this%Xh%ly, this%Xh%lz)
144 real(kind=
rp),
allocatable :: res(:)
146 real(kind=
rp) :: hr(this%Xh%lx), hs(this%Xh%ly), ht(this%Xh%lz)
147 integer :: lx, ly, lz, i
174 if ( .not.
abscmp(rst(i)%x(1), rst(i-1)%x(1)) )
then
176 this%Xh%zg(:,1), lx-1, 0, hr)
178 if ( .not.
abscmp(rst(i)%x(2), rst(i-1)%x(2)) )
then
180 this%Xh%zg(:,2), ly-1, 0, hs)
182 if ( .not.
abscmp(rst(i)%x(3), rst(i-1)%x(3)) )
then
184 this%Xh%zg(:,3), lz-1, 0, ht)
204 type(
point_t),
intent(in) :: rst(:)
205 real(kind=
rp),
intent(inout) :: x(this%Xh%lx, this%Xh%ly, this%Xh%lz)
206 real(kind=
rp),
intent(inout) :: y(this%Xh%lx, this%Xh%ly, this%Xh%lz)
207 real(kind=
rp),
intent(inout) :: z(this%Xh%lx, this%Xh%ly, this%Xh%lz)
209 type(
point_t),
allocatable :: res(:)
210 real(kind=
rp),
allocatable :: tmp(:,:)
211 real(kind=
rp) :: hr(this%Xh%lx), hs(this%Xh%ly), ht(this%Xh%lz)
212 integer :: lx,ly,lz, i
244 if ( .not.
abscmp(rst(i)%x(1), rst(i-1)%x(1)) )
then
246 this%Xh%zg(:,1), lx-1, 0, hr)
248 if ( .not.
abscmp(rst(i)%x(2), rst(i-1)%x(2)) )
then
250 this%Xh%zg(:,2), ly-1, 0, hs)
252 if ( .not.
abscmp(rst(i)%x(3), rst(i-1)%x(3)) )
then
254 this%Xh%zg(:,3), lz-1, 0, ht)
278 rst, X, Y, Z)
result(res)
280 real(kind=
rp),
intent(inout) :: jac(3,3)
281 type(
point_t),
intent(in) :: rst
282 real(kind=
rp),
intent(inout) :: x(this%Xh%lx, this%Xh%ly, this%Xh%lz)
283 real(kind=
rp),
intent(inout) :: y(this%Xh%lx, this%Xh%ly, this%Xh%lz)
284 real(kind=
rp),
intent(inout) :: z(this%Xh%lx, this%Xh%ly, this%Xh%lz)
286 real(kind=
rp) :: hr(this%Xh%lx, 2), hs(this%Xh%ly, 2), ht(this%Xh%lz, 2)
288 real(kind=
rp) :: tmp(3)
290 integer :: lx,ly,lz, i
305 call triple_tensor_product(tmp, x, y, z, lx, hr(:,1), hs(:,1), ht(:,1))
313 call triple_tensor_product(tmp, x,y,z, lx, hr(:,2), hs(:,1), ht(:,1))
317 call triple_tensor_product(tmp, x,y,z, lx, hr(:,1), hs(:,2), ht(:,1))
321 call triple_tensor_product(tmp, x,y,z, lx, hr(:,1), hs(:,1), ht(:,2))
334 type(
point_t),
intent(in) :: rst
335 real(kind=
rp),
intent(inout) :: x(this%Xh%lx, this%Xh%ly, this%Xh%lz)
336 real(kind=
rp),
intent(inout) :: y(this%Xh%lx, this%Xh%ly, this%Xh%lz)
337 real(kind=
rp),
intent(inout) :: z(this%Xh%lx, this%Xh%ly, this%Xh%lz)
339 real(kind=
rp) :: jac(3,3)
340 real(kind=
rp) :: tmp(3)
342 real(kind=
rp) :: hr(this%Xh%lx, 2), hs(this%Xh%ly, 2), ht(this%Xh%lz, 2)
343 integer :: lx, ly, lz
354 call triple_tensor_product(tmp, x, y, z, lx, hr(:,2), hs(:,1), ht(:,1))
358 call triple_tensor_product(tmp, x, y, z, lx, hr(:,1), hs(:,2), ht(:,1))
362 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.
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.