Kspace filter¶
- class torchpme.lib.KSpaceKernel[source]¶
- Base class defining the interface for a reciprocal-space kernel helper. - Provides an interface to compute the reciprocal-space convolution kernel that is used e.g. to compute potentials using Fourier transforms. Parameters of the kernel in derived classes should be defined and stored in the - __init__method.- NB: we need this slightly convoluted way of implementing what often amounts to a simple, pure function of \(|\mathbf{k}|^2\) in order to be able to provide a customizable filter class that can be jitted. 
- class torchpme.lib.KSpaceFilter(cell: Tensor, ns_mesh: Tensor, kernel: KSpaceKernel, fft_norm: str = 'ortho', ifft_norm: str = 'ortho')[source]¶
- Apply a reciprocal-space filter to a real-space mesh. - The class combines the costruction of a reciprocal-space grid \(\{\mathbf{k}_n\}\) (that should be commensurate to the grid in real space, so the class takes the same options as - MeshInterpolator), the calculation of a scalar filter function \(\phi(|\mathbf{k}|^2)\), defined as a function of the squared norm of the reciprocal space grid points, and the application of the filter to a real-space function \(f(\mathbf{x})\), defined on a mesh \(\{\mathbf{x}_n\}\).- In practice, the application of the filter amounts to \(f\rightarrow \hat{f} \rightarrow \hat{\tilde{f}}= \hat{f} \phi \rightarrow \tilde{f}\) - See also the Examples of the KSpaceFilter class for a demonstration of the functionalities of this class. - Parameters:
- cell (Tensor) – torch.tensor of shape - (3, 3), where- cell[i]is the i-th basis vector of the unit cell
- ns_mesh (Tensor) – toch.tensor of shape - (3,)Number of mesh points to use along each of the three axes
- kernel (KSpaceKernel) – KSpaceKernel A KSpaceKernel-derived class providing a - from_k_sqmethod that evaluates \(\psi\) given the square modulus of the k-space mesh points
- fft_norm (str) – str The normalization applied to the forward FT. Can be “forward”, “backward”, “ortho”. See - torch:fft:rfftn()
- ifft_norm (str) – str The normalization applied to the inverse FT. Can be “forward”, “backward”, “ortho”. See - torch:fft:irfftn()
 
 - update(cell: Tensor | None = None, ns_mesh: Tensor | None = None) None[source]¶
- Update buffers and derived attributes of the instance. - If neither - cellnor- ns_meshare passed, only the filter is updated, typically following a change in the underlying potential. If- celland/or- ns_meshare given, the instance’s attributes required by these will also be updated accordingly.
 - forward(mesh_values: Tensor) Tensor[source]¶
- Applies the k-space filter by Fourier transforming the given - mesh_valuestensor, multiplying the result by the filter array (that should have been previously computed with a call to- update()) and Fourier-transforming back to real space.- If you update the - cell, the- ns_meshor anything inside the- kernelobject after you initlized the object, you have call- update()to update the object calling this method.- kernel_filter.update(cell) kernel_filter.forward(mesh) - Parameters:
- mesh_values (Tensor) – torch.tensor of shape - (n_channels, nx, ny, nz)The values of the input function on a real-space mesh. Shape should match the shape of the filter.
- Returns:
- torch.tensor of shape - (n_channels, nx, ny, nz)The real-space mesh containing the transformed function values.
- Return type:
 
 
- class torchpme.lib.P3MKSpaceFilter(cell: Tensor, ns_mesh: Tensor, interpolation_nodes: int, kernel: KSpaceKernel, fft_norm: str = 'ortho', ifft_norm: str = 'ortho', mode: int = 0, differential_order: int = 2)[source]¶
- A specialized implementation of the k-space filter for the P3M method, with a cell-dependent Green’s function kernel. This class does almost the same thing as - KSpaceFilter, but with a different, P3M-specialized filter. See this paper for your reference.- Parameters:
- cell (Tensor) – torch.tensor of shape - (3, 3), where- cell[i]is the i-th basis vector of the unit cell
- ns_mesh (Tensor) – toch.tensor of shape - (3,)Number of mesh points to use along each of the three axes
- interpolation_nodes (int) – int The number - nof nodes used in the interpolation per coordinate axis. The total number of interpolation nodes in 3D will be- n^3. In general, for- nnodes, the interpolation will be performed by piecewise polynomials of degree- n - 1(e.g.- n = 4for cubic interpolation). Only the values- 1, 2, 3, 4, 5are supported.
- kernel (KSpaceKernel) – KSpaceKernel A KSpaceKernel-derived class providing a - from_k_sqmethod that evaluates \(\psi\) given the square modulus of the k-space mesh points
- fft_norm (str) – str The normalization applied to the forward FT. Can be “forward”, “backward”, “ortho”. See - torch:fft:rfftn()
- ifft_norm (str) – str The normalization applied to the inverse FT. Can be “forward”, “backward”, “ortho”. See - torch:fft:irfftn()
- mode (int) – int, 0 for the electrostatic potential, 1 for the electrostatic energy, 2 for the dipolar torques, and 3 for the dipolar forces. For more details, see eq.30 of that paper. 
- diff_order – - int, the order of the approximation of the difference operator. Higher order is more accurate, but also more expensive. For more details, see Appendix C of this paper. The values - 1, 2, 3, 4, 5, 6are supported.
- differential_order (int) 
 
 - update(cell: Tensor | None = None, ns_mesh: Tensor | None = None) None[source]¶
- Update buffers and derived attributes of the instance. - If neither - cellnor- ns_meshare passed, only the filter is updated, typically following a change in the underlying potential. If- celland/or- ns_meshare given, the instance’s attributes required by these will also be updated accordingly.