Octopus
finufft_oct_m Module Reference

Non-equispaced FFTs through the C interface of the FINUFFT library. More...

Detailed Description

Non-equispaced FFTs through the C interface of the FINUFFT library.

Data Types

type  finufft_t
 

Functions/Subroutines

subroutine, public finufft_read_options (finufft, namespace)
 
subroutine, public finufft_set_tolerance (finufft, tol)
 Set the requested tolerance directly, for callers that take it from an input variable of their own rather than from FINUFFTTolerance. More...
 
subroutine, public finufft_init (finufft, finufft_options, N, dim, M, nthreads)
 
subroutine, public finufft_precompute (finufft, X1, X2, X3, period)
 Hand the spatial nodes to FINUFFT. More...
 
subroutine, public finufft_set_nodes (finufft, xj, yj, zj, period)
 Hand scattered nodes to FINUFFT, mapping one period of the mode grid onto the [-1/2, 1/2) of the transform. The nodes are counted by M(1), and the caller normalizes, so norm is left at one. More...
 
subroutine, public finufft_modes_to_nodes (finufft, modes, values)
 Evaluate the Fourier modes on the scattered nodes. More...
 
subroutine, public finufft_nodes_to_modes (finufft, values, modes)
 Project the scattered nodes onto the Fourier modes. More...
 
subroutine finufft_scale_nodes (X, v, inv_spacing, period)
 Map the nodes onto [-1/2, 1/2) and return the reciprocal of the smallest scaled spacing. A positive period means the nodes already tile one period of that length, so they are only rescaled; otherwise they are stretched to fill the interval. More...
 
subroutine, public finufft_write_info (finufft)
 
subroutine, public finufft_end (finufft)
 
subroutine, public dfinufft_forward (finufft, in, out)
 Evaluate the Fourier modes on the non-equispaced nodes. More...
 
subroutine, public dfinufft_backward (finufft, in, out)
 Project the non-equispaced nodes back onto the Fourier modes. More...
 
subroutine, public zfinufft_forward (finufft, in, out)
 Evaluate the Fourier modes on the non-equispaced nodes. More...
 
subroutine, public zfinufft_backward (finufft, in, out)
 Project the non-equispaced nodes back onto the Fourier modes. More...
 

Function/Subroutine Documentation

◆ finufft_read_options()

subroutine, public finufft_oct_m::finufft_read_options ( type(finufft_t), intent(inout)  finufft,
type(namespace_t), intent(in)  namespace 
)

Definition at line 169 of file finufft.F90.

◆ finufft_set_tolerance()

subroutine, public finufft_oct_m::finufft_set_tolerance ( type(finufft_t), intent(inout)  finufft,
real(real64), intent(in)  tol 
)

Set the requested tolerance directly, for callers that take it from an input variable of their own rather than from FINUFFTTolerance.

Definition at line 195 of file finufft.F90.

◆ finufft_init()

subroutine, public finufft_oct_m::finufft_init ( type(finufft_t), intent(inout)  finufft,
type(finufft_t), intent(in)  finufft_options,
integer, dimension(3), intent(in)  N,
integer, intent(in)  dim,
integer, dimension(3), intent(in)  M,
integer, intent(in), optional  nthreads 
)
Parameters
[in]nnumber of Fourier modes
[in]dimnumber of spatial dimensions
[in]mnumber of spatial nodes
[in]nthreadsnumber of threads

Definition at line 207 of file finufft.F90.

◆ finufft_precompute()

subroutine, public finufft_oct_m::finufft_precompute ( type(finufft_t), intent(inout)  finufft,
real(real64), dimension(:), intent(in), contiguous  X1,
real(real64), dimension(:), intent(in), optional, contiguous  X2,
real(real64), dimension(:), intent(in), optional, contiguous  X3,
real(real64), dimension(:), intent(in), optional  period 
)

Hand the spatial nodes to FINUFFT.

Takes the 1D coordinate vectors defining each axis, X1 for x, X2 for y and X3 for z, and expands them into the Cartesian grid of nodes that FINUFFT expects as a flat list, indexed in Fortran order.

Parameters
[in]periodPeriod of the node grid per direction, see finufft_scale_nodes

Definition at line 239 of file finufft.F90.

◆ finufft_set_nodes()

subroutine, public finufft_oct_m::finufft_set_nodes ( type(finufft_t), intent(inout)  finufft,
real(real64), dimension(:), intent(in), contiguous  xj,
real(real64), dimension(:), intent(in), contiguous  yj,
real(real64), dimension(:), intent(in), contiguous  zj,
real(real64), dimension(:), intent(in), contiguous  period 
)

Hand scattered nodes to FINUFFT, mapping one period of the mode grid onto the [-1/2, 1/2) of the transform. The nodes are counted by M(1), and the caller normalizes, so norm is left at one.

Definition at line 323 of file finufft.F90.

◆ finufft_modes_to_nodes()

subroutine, public finufft_oct_m::finufft_modes_to_nodes ( type(finufft_t), intent(in)  finufft,
complex(real64), dimension(:,:,:), intent(in), contiguous  modes,
complex(real64), dimension(:), intent(out), contiguous  values 
)

Evaluate the Fourier modes on the scattered nodes.

Definition at line 372 of file finufft.F90.

◆ finufft_nodes_to_modes()

subroutine, public finufft_oct_m::finufft_nodes_to_modes ( type(finufft_t), intent(in)  finufft,
complex(real64), dimension(:), intent(in), contiguous  values,
complex(real64), dimension(:,:,:), intent(out), contiguous  modes 
)

Project the scattered nodes onto the Fourier modes.

Definition at line 399 of file finufft.F90.

◆ finufft_scale_nodes()

subroutine finufft_oct_m::finufft_scale_nodes ( real(real64), dimension(:), intent(in), contiguous  X,
real(real64), dimension(:), intent(out), contiguous  v,
real(real64), intent(out)  inv_spacing,
real(real64), intent(in)  period 
)
private

Map the nodes onto [-1/2, 1/2) and return the reciprocal of the smallest scaled spacing. A positive period means the nodes already tile one period of that length, so they are only rescaled; otherwise they are stretched to fill the interval.

Definition at line 429 of file finufft.F90.

◆ finufft_write_info()

subroutine, public finufft_oct_m::finufft_write_info ( type(finufft_t), intent(in)  finufft)

Definition at line 461 of file finufft.F90.

◆ finufft_end()

subroutine, public finufft_oct_m::finufft_end ( type(finufft_t), intent(inout)  finufft)

Definition at line 495 of file finufft.F90.

◆ dfinufft_forward()

subroutine, public finufft_oct_m::dfinufft_forward ( type(finufft_t), intent(in)  finufft,
real(real64), dimension(:,:,:), intent(in), contiguous  in,
complex(real64), dimension(:,:,:), intent(out), contiguous  out 
)

Evaluate the Fourier modes on the non-equispaced nodes.

Definition at line 582 of file finufft.F90.

◆ dfinufft_backward()

subroutine, public finufft_oct_m::dfinufft_backward ( type(finufft_t), intent(in)  finufft,
complex(real64), dimension (:,:,:), intent(in), contiguous  in,
real(real64), dimension(:,:,:), intent(out), contiguous  out 
)

Project the non-equispaced nodes back onto the Fourier modes.

Definition at line 601 of file finufft.F90.

◆ zfinufft_forward()

subroutine, public finufft_oct_m::zfinufft_forward ( type(finufft_t), intent(in)  finufft,
complex(real64), dimension(:,:,:), intent(in), contiguous  in,
complex(real64), dimension(:,:,:), intent(out), contiguous  out 
)

Evaluate the Fourier modes on the non-equispaced nodes.

Definition at line 693 of file finufft.F90.

◆ zfinufft_backward()

subroutine, public finufft_oct_m::zfinufft_backward ( type(finufft_t), intent(in)  finufft,
complex(real64), dimension (:,:,:), intent(in), contiguous  in,
complex(real64), dimension(:,:,:), intent(out), contiguous  out 
)

Project the non-equispaced nodes back onto the Fourier modes.

Definition at line 712 of file finufft.F90.