ESPResSo
Extensible Simulation Package for Research on Soft Matter Systems
|
P3M solver. More...
#include <p3m.hpp>
Public Member Functions | |
CoulombP3M (P3MParameters const &p3m_params) | |
virtual | ~CoulombP3M ()=default |
virtual bool | is_tuned () const noexcept=0 |
virtual bool | is_gpu () const noexcept=0 |
virtual bool | is_double_precision () const noexcept=0 |
virtual void | init ()=0 |
Recalculate all derived parameters. | |
virtual void | on_activation ()=0 |
void | on_boxl_change () |
Recalculate all box-length-dependent parameters. | |
void | on_node_grid_change () const |
void | on_periodicity_change () const |
void | on_cell_structure_change () |
void | sanity_checks () const |
virtual void | count_charged_particles ()=0 |
Count the number of charged particles and calculate the sum of the squared charges. | |
virtual void | count_charged_particles_elc (int, double, double)=0 |
virtual void | adapt_epsilon_elc ()=0 |
virtual void | tune ()=0 |
Tune P3M parameters to desired accuracy. | |
virtual void | charge_assign (ParticleRange const &particles)=0 |
Assign the physical charges using the tabulated charge assignment function. | |
virtual void | assign_charge (double q, Utils::Vector3d const &real_pos, bool skip_cache)=0 |
Assign a single charge into the current charge grid. | |
virtual void | prepare_fft_mesh (bool reset_weights)=0 |
Utils::Vector3d | pair_force (double q1q2, Utils::Vector3d const &d, double dist) const |
Calculate real-space contribution of p3m Coulomb pair forces. | |
double | pair_energy (double q1q2, double dist) const |
Calculate real-space contribution of Coulomb pair energy. | |
virtual Utils::Vector9d | long_range_pressure (ParticleRange const &)=0 |
Compute the k-space part of the pressure tensor. | |
virtual double | long_range_energy (ParticleRange const &)=0 |
Compute the k-space part of energies. | |
virtual void | add_long_range_forces (ParticleRange const &)=0 |
Compute the k-space part of forces. | |
Public Member Functions inherited from Coulomb::Actor< CoulombP3M > | |
void | set_prefactor (double new_prefactor) |
void | sanity_checks_charge_neutrality () const |
Public Member Functions inherited from System::Leaf< Class > | |
void | bind_system (std::shared_ptr< System > const &system) |
void | detach_system (std::shared_ptr< System > const &system) |
Public Attributes | |
P3MParameters const & | p3m_params |
Public Attributes inherited from Coulomb::Actor< CoulombP3M > | |
double | prefactor |
Electrostatics prefactor. | |
double | charge_neutrality_tolerance |
Relative tolerance for the charge excess during neutrality checks. | |
Protected Member Functions | |
virtual void | calc_influence_function_force ()=0 |
virtual void | calc_influence_function_energy ()=0 |
void | sanity_checks_boxl () const |
Checks for correctness of the k-space cutoff. | |
void | sanity_checks_node_grid () const |
void | sanity_checks_periodicity () const |
void | sanity_checks_cell_structure () const |
virtual void | scaleby_box_l ()=0 |
Protected Member Functions inherited from System::Leaf< Class > | |
auto & | get_system () |
auto & | get_system () const |
Additional Inherited Members | |
Static Public Attributes inherited from Coulomb::Actor< CoulombP3M > | |
static auto constexpr | charge_neutrality_tolerance_default |
Protected Attributes inherited from System::Leaf< Class > | |
std::weak_ptr< System > | m_system |
|
inline |
|
virtualdefault |
|
pure virtual |
Implemented in CoulombP3MImpl< FloatType, Architecture >.
|
pure virtual |
Compute the k-space part of forces.
Implemented in CoulombP3MImpl< FloatType, Architecture >.
|
pure virtual |
Assign a single charge into the current charge grid.
[in] | q | Particle charge |
[in] | real_pos | Particle position in real space |
[in] | skip_cache | Skip interpolation weights caching. |
Implemented in CoulombP3MImpl< FloatType, Architecture >.
Referenced by charge_assign().
|
protectedpure virtual |
Implemented in CoulombP3MImpl< FloatType, Architecture >.
|
protectedpure virtual |
Implemented in CoulombP3MImpl< FloatType, Architecture >.
|
pure virtual |
Assign the physical charges using the tabulated charge assignment function.
Implemented in CoulombP3MImpl< FloatType, Architecture >.
|
pure virtual |
Count the number of charged particles and calculate the sum of the squared charges.
Implemented in CoulombP3MImpl< FloatType, Architecture >.
|
pure virtual |
Implemented in CoulombP3MImpl< FloatType, Architecture >.
Referenced by modify_p3m_sums().
|
pure virtual |
Recalculate all derived parameters.
Implemented in CoulombP3MImpl< FloatType, Architecture >.
Referenced by on_cell_structure_change().
|
pure virtualnoexcept |
Implemented in CoulombP3MImpl< FloatType, Architecture >.
|
pure virtualnoexcept |
Implemented in CoulombP3MImpl< FloatType, Architecture >.
|
pure virtualnoexcept |
Implemented in CoulombP3MImpl< FloatType, Architecture >.
|
pure virtual |
Compute the k-space part of energies.
Implemented in CoulombP3MImpl< FloatType, Architecture >.
|
pure virtual |
Compute the k-space part of the pressure tensor.
Implemented in CoulombP3MImpl< FloatType, Architecture >.
|
pure virtual |
Implemented in CoulombP3MImpl< FloatType, Architecture >.
|
inline |
Recalculate all box-length-dependent parameters.
Definition at line 72 of file p3m.hpp.
References scaleby_box_l().
|
inline |
Definition at line 75 of file p3m.hpp.
References init(), and sanity_checks_cell_structure().
|
inline |
Definition at line 73 of file p3m.hpp.
References sanity_checks_node_grid().
|
inline |
Definition at line 74 of file p3m.hpp.
References sanity_checks_periodicity().
|
inline |
Calculate real-space contribution of Coulomb pair energy.
Definition at line 168 of file p3m.hpp.
References P3MParameters::alpha, Utils::AS_erfc_part(), p3m_params, Coulomb::Actor< CoulombP3M >::prefactor, and P3MParameters::r_cut.
|
inline |
Calculate real-space contribution of p3m Coulomb pair forces.
Definition at line 146 of file p3m.hpp.
References P3MParameters::alpha, Utils::AS_erfc_part(), p3m_params, Coulomb::Actor< CoulombP3M >::prefactor, and P3MParameters::r_cut.
|
pure virtual |
Implemented in CoulombP3MImpl< FloatType, Architecture >.
Referenced by charge_assign().
|
inline |
Definition at line 79 of file p3m.hpp.
References sanity_checks_boxl(), sanity_checks_cell_structure(), Coulomb::Actor< CoulombP3M >::sanity_checks_charge_neutrality(), sanity_checks_node_grid(), and sanity_checks_periodicity().
Referenced by CoulombP3MImpl< FloatType, Architecture >::on_activation().
|
protected |
Checks for correctness of the k-space cutoff.
Definition at line 793 of file p3m.cpp.
References P3MParameters::cao_cut, P3MParameters::epsilon, System::Leaf< Class >::get_system(), P3MParameters::mesh, P3M_EPSILON_METALLIC, and p3m_params.
Referenced by sanity_checks().
|
protected |
Definition at line 832 of file p3m.cpp.
References communicator, System::Leaf< Class >::get_system(), HYBRID, and REGULAR.
Referenced by on_cell_structure_change(), and sanity_checks().
|
protected |
Definition at line 847 of file p3m.cpp.
References communicator, and Communicator::node_grid.
Referenced by on_node_grid_change(), and sanity_checks().
|
protected |
Definition at line 824 of file p3m.cpp.
References System::Leaf< Class >::get_system().
Referenced by on_periodicity_change(), and sanity_checks().
|
protectedpure virtual |
Implemented in CoulombP3MImpl< FloatType, Architecture >.
Referenced by on_boxl_change().
|
pure virtual |
Tune P3M parameters to desired accuracy.
The parameters mesh, cao, r_cut_iL and alpha_L are tuned to obtain the target accuracy in optimal time. These parameters are stored in the p3m_params object.
The function utilizes the analytic expression of the error estimate for the P3M method in [22] (eq. (8.23)) in order to obtain the rms error in the force for a system of N randomly distributed particles in a cubic box. For the real space error the estimate of Kolafa/Perram is used.
Parameter ranges if not given explicitly in the constructor:
mesh
explores the range 0-512 (biased toward values less than 128)cao
explores all possible valuesalpha_L
is tuned for each tuple (r_cut_iL
, mesh
, cao
) and calculated assuming that the error contributions of real and reciprocal space should be equalAfter checking if the total error lies below the target accuracy, the time needed for one force calculation is measured. Parameters that minimize the runtime are kept.
The function is based on routines of the program HE_Q.cpp written by M. Deserno.
Implemented in CoulombP3MImpl< FloatType, Architecture >.
P3MParameters const& CoulombP3M::p3m_params |
Definition at line 56 of file p3m.hpp.
Referenced by pair_energy(), pair_force(), and sanity_checks_boxl().