Processing math: 100%
ESPResSo
Extensible Simulation Package for Research on Soft Matter Systems
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages Concepts
common.hpp File Reference

Common functions for dipolar and charge P3M. More...

#include "config/config.hpp"
#include <utils/Vector.hpp>
#include <algorithm>
#include <array>
#include <vector>
#include "LocalBox.hpp"
#include <cstddef>
#include <span>
#include <stdexcept>
+ Include dependency graph for p3m/common.hpp:
+ This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

struct  P3MParameters
 Structure to hold P3M parameters and some dependent variables. More...
 
struct  P3MLocalMesh
 Properties of the local mesh. More...
 
struct  P3MFFTMesh< FloatType >
 Local mesh FFT buffers. More...
 

Enumerations

enum class  Arch { CPU , GPU }
 P3M kernel architecture. More...
 

Functions

std::array< std::vector< int >, 3 > calc_p3m_mesh_shift (Utils::Vector3i const &mesh_size, bool zero_out_midpoint=false)
 Calculate indices that shift P3MParameters::mesh by mesh/2.
 

Variables

auto constexpr P3M_EPSILON_METALLIC = 0.0
 This value indicates metallic boundary conditions.
 

Detailed Description

Common functions for dipolar and charge P3M.

We use here a P3M (Particle-Particle Particle-Mesh) method based on the Ewald summation. Details of the used method can be found in [23] and [11] [12]. The file p3m contains only the Particle-Mesh part.

Further reading: [19], [23], [11], [12], [13], [14], [10]

Definition in file p3m/common.hpp.

Enumeration Type Documentation

◆ Arch

enum class Arch
strong

P3M kernel architecture.

Enumerator
CPU 
GPU 

Definition at line 57 of file p3m/common.hpp.

Function Documentation

◆ calc_p3m_mesh_shift()

std::array< std::vector< int >, 3 > calc_p3m_mesh_shift ( Utils::Vector3i const &  mesh_size,
bool  zero_out_midpoint = false 
)
inline

Calculate indices that shift P3MParameters::mesh by mesh/2.

For each mesh size n in mesh_size, create a sequence of integer values \left( 0, \ldots, \lfloor n/2 \rfloor, -\lfloor n/2 \rfloor, \ldots, -1\right) if zero_out_midpoint is false, otherwise \left( 0, \ldots, \lfloor n/2 - 1 \rfloor, 0, -\lfloor n/2 \rfloor, \ldots, -1\right) .

Definition at line 256 of file p3m/common.hpp.

Referenced by P3MStateCommon< FloatType >::calc_differential_operator(), grid_influence_function(), and grid_influence_function_self_energy().

Variable Documentation

◆ P3M_EPSILON_METALLIC