Octopus
poisson_nfft_oct_m Module Reference

Poisson solver on the mesh points themselves, through non-equispaced FFTs. More...

Detailed Description

Poisson solver on the mesh points themselves, through non-equispaced FFTs.

The mesh points are the non-equispaced nodes of the transform, so no cube and no interpolation are involved and a curvilinear mesh is solved as it stands. The potential is the Fourier quadrature

V(x_i) = 1/Omega sum_G K(G) sum_j w_j rho(x_j) exp(-i G (x_j - x_i)),

with w_j = meshvol_pp(j), Omega the volume of the mode grid, and K the Coulomb kernel truncated at the diameter of the box, which imposes free boundary conditions. The inner sum is a type-1 transform and the outer one a type-2.

The mode grid is uniform, so the resolution of the potential follows the coarsest part of the mesh: a refined region is integrated over accurately but its short wavelengths are not represented. PoissonSolverThreshold is the accuracy asked of the transforms.

Data Types

type  poisson_nfft_t
 

Functions/Subroutines

subroutine, public poisson_nfft_init (this, namespace, space, mesh, threshold)
 
subroutine poisson_nfft_build_3d_0d (this, ll, r_c)
 The Coulomb kernel of a finite system on the mode grid. More...
 
subroutine, public dpoisson_nfft_solve (this, mesh, pot, rho)
 
subroutine, public zpoisson_nfft_solve (this, mesh, pot, rho)
 The transform is complex either way, so a complex density costs the same as a real one and needs no splitting into real and imaginary parts. More...
 
subroutine poisson_nfft_convolve (this, values)
 Convolve the weighted density on the nodes with the kernel, in place. More...
 
subroutine, public poisson_nfft_end (this)
 

Function/Subroutine Documentation

◆ poisson_nfft_init()

subroutine, public poisson_nfft_oct_m::poisson_nfft_init ( type(poisson_nfft_t), intent(out)  this,
type(namespace_t), intent(in)  namespace,
class(space_t), intent(in)  space,
class(mesh_t), intent(in)  mesh,
real(real64), intent(in)  threshold 
)
Parameters
[in]thresholdrequested accuracy of the transforms

Definition at line 166 of file poisson_nfft.F90.

◆ poisson_nfft_build_3d_0d()

subroutine poisson_nfft_oct_m::poisson_nfft_build_3d_0d ( type(poisson_nfft_t), intent(inout)  this,
real(real64), dimension(3), intent(in)  ll,
real(real64), intent(in)  r_c 
)
private

The Coulomb kernel of a finite system on the mode grid.

4 pi/G^2 truncated at r_c, which is what imposes the free boundary conditions, over the volume of the mode grid. The counterparts for a periodic system, 3D_1D to 3D_3D, belong next to this one.

Parameters
[in]llperiod of the mode grid
[in]r_ctruncation radius of the kernel

Definition at line 255 of file poisson_nfft.F90.

◆ dpoisson_nfft_solve()

subroutine, public poisson_nfft_oct_m::dpoisson_nfft_solve ( type(poisson_nfft_t), intent(in)  this,
class(mesh_t), intent(in)  mesh,
real(real64), dimension(:), intent(out), contiguous  pot,
real(real64), dimension(:), intent(in), contiguous  rho 
)

Definition at line 301 of file poisson_nfft.F90.

◆ zpoisson_nfft_solve()

subroutine, public poisson_nfft_oct_m::zpoisson_nfft_solve ( type(poisson_nfft_t), intent(in)  this,
class(mesh_t), intent(in)  mesh,
complex(real64), dimension(:), intent(out), contiguous  pot,
complex(real64), dimension(:), intent(in), contiguous  rho 
)

The transform is complex either way, so a complex density costs the same as a real one and needs no splitting into real and imaginary parts.

Definition at line 345 of file poisson_nfft.F90.

◆ poisson_nfft_convolve()

subroutine poisson_nfft_oct_m::poisson_nfft_convolve ( type(poisson_nfft_t), intent(in)  this,
complex(real64), dimension(:), intent(inout), contiguous  values 
)
private

Convolve the weighted density on the nodes with the kernel, in place.

Definition at line 380 of file poisson_nfft.F90.

◆ poisson_nfft_end()

subroutine, public poisson_nfft_oct_m::poisson_nfft_end ( type(poisson_nfft_t), intent(inout)  this)

Definition at line 415 of file poisson_nfft.F90.