![]() |
Octopus
|
Poisson solver on the mesh points themselves, through non-equispaced FFTs. More...
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) |
| 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 | ||
| ) |
| [in] | threshold | requested accuracy of the transforms |
Definition at line 166 of file poisson_nfft.F90.
|
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.
| [in] | ll | period of the mode grid |
| [in] | r_c | truncation radius of the kernel |
Definition at line 255 of file poisson_nfft.F90.
| 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.
| 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.
|
private |
Convolve the weighted density on the nodes with the kernel, in place.
Definition at line 380 of file poisson_nfft.F90.
| 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.