ESPResSo
Extensible Simulation Package for Research on Soft Matter Systems
Loading...
Searching...
No Matches
elc.cpp File Reference
#include "config/config.hpp"
#include "electrostatics/elc.hpp"
#include "electrostatics/coulomb.hpp"
#include "electrostatics/mmm-common.hpp"
#include "electrostatics/p3m.hpp"
#include "electrostatics/p3m_gpu.hpp"
#include "BoxGeometry.hpp"
#include "Particle.hpp"
#include "ParticlePropertyIterator.hpp"
#include "ParticleRange.hpp"
#include "cell_system/CellStructure.hpp"
#include "communication.hpp"
#include "errorhandling.hpp"
#include "system/System.hpp"
#include <utils/Vector.hpp>
#include <utils/constants.hpp>
#include <utils/math/sqr.hpp>
#include <boost/mpi/collectives/all_reduce.hpp>
#include <boost/range/combine.hpp>
#include <algorithm>
#include <cassert>
#include <cmath>
#include <cstddef>
#include <functional>
#include <variant>
#include <vector>
+ Include dependency graph for elc.cpp:

Go to the source code of this file.

Classes

struct  SCCache
 structure for caching sin and cos values More...
 
struct  ImageSum
 

Macros

Product decomposition data organization

For the cell blocks it is assumed that the lower blocks part is in the lower half.

This has to have positive sign, so that has to be first.

#define POQESP   0
 
#define POQECP   1
 
#define POQESM   2
 
#define POQECM   3
 
#define PQESSP   0
 
#define PQESCP   1
 
#define PQECSP   2
 
#define PQECCP   3
 
#define PQESSM   4
 
#define PQESCM   5
 
#define PQECSM   6
 
#define PQECCM   7
 

Enumerations

enum class  PoQ : int { P , Q }
 ELC axes (x and y directions) More...
 
enum class  ChargeProtocol : int { REAL , IMAGE , BOTH }
 ELC charge sum/assign protocol: real charges, image charges, or both. More...
 

Functions

template<std::size_t dir>
static std::vector< SCCachecalc_sc_cache (ParticleRange const &particles, std::size_t n_freq, double u)
 Calculate cached sin/cos values for one direction.
 
static std::pair< std::size_t, std::size_t > prepare_sc_cache (ParticleRange const &particles, BoxGeometry const &box_geo, double far_cut)
 
static void clear_vec (double *pdc, std::size_t size)
 
static void copy_vec (double *pdc_d, double const *pdc_s, std::size_t size)
 
static void add_vec (double *pdc_d, double const *pdc_s1, double const *pdc_s2, std::size_t size)
 
static void addscale_vec (double *pdc_d, double scale, double const *pdc_s1, double const *pdc_s2, std::size_t size)
 
static void scale_vec (double scale, double *pdc, std::size_t size)
 
static double * block (double *p, std::size_t index, std::size_t size)
 
static void distribute (std::size_t size)
 
static auto calc_total_charge (CellStructure const &cell_structure)
 
static void p3m_assign_image_charge (elc_data const &elc, CoulombP3M &p3m, double q, Utils::Vector3d const &pos)
 
template<ChargeProtocol protocol, typename combined_ranges >
void charge_assign (elc_data const &elc, CoulombP3M &solver, combined_ranges const &p_q_pos_range)
 
template<ChargeProtocol protocol, typename combined_range >
void modify_p3m_sums (elc_data const &elc, CoulombP3M &solver, combined_range const &p_q_pos_range)
 
q=0 or p=0 per frequency code
template<PoQ axis>
void setup_PoQ (elc_data const &elc, double prefactor, std::size_t index, double omega, ParticleRange const &particles, BoxGeometry const &box_geo)
 
template<PoQ axis>
void add_PoQ_force (ParticleRange const &particles)
 
static double PoQ_energy (double omega, std::size_t n_part)
 
p,q <> 0 per frequency code
static void setup_PQ (elc_data const &elc, double prefactor, std::size_t index_p, std::size_t index_q, double omega, ParticleRange const &particles, BoxGeometry const &box_geo)
 
static void add_PQ_force (std::size_t index_p, std::size_t index_q, double omega, ParticleRange const &particles, BoxGeometry const &box_geo)
 
static double PQ_energy (double omega, std::size_t n_part)
 

Variables

static std::vector< double > partblk
 temporary buffers for product decomposition
 
static double gblcblk [8]
 collected data from the other cells
 
static std::vector< SCCachescxcache
 Cached sin/cos values along the x-axis and y-axis.
 
static std::vector< SCCachescycache
 

Macro Definition Documentation

◆ POQECM

#define POQECM   3

Definition at line 65 of file elc.cpp.

◆ POQECP

#define POQECP   1

Definition at line 63 of file elc.cpp.

◆ POQESM

#define POQESM   2

Definition at line 64 of file elc.cpp.

◆ POQESP

#define POQESP   0

Definition at line 62 of file elc.cpp.

◆ PQECCM

#define PQECCM   7

Definition at line 74 of file elc.cpp.

◆ PQECCP

#define PQECCP   3

Definition at line 70 of file elc.cpp.

◆ PQECSM

#define PQECSM   6

Definition at line 73 of file elc.cpp.

◆ PQECSP

#define PQECSP   2

Definition at line 69 of file elc.cpp.

◆ PQESCM

#define PQESCM   5

Definition at line 72 of file elc.cpp.

◆ PQESCP

#define PQESCP   1

Definition at line 68 of file elc.cpp.

◆ PQESSM

#define PQESSM   4

Definition at line 71 of file elc.cpp.

◆ PQESSP

#define PQESSP   0

Definition at line 67 of file elc.cpp.

Enumeration Type Documentation

◆ ChargeProtocol

enum class ChargeProtocol : int
strong

ELC charge sum/assign protocol: real charges, image charges, or both.

Enumerator
REAL 
IMAGE 
BOTH 

Definition at line 80 of file elc.cpp.

◆ PoQ

enum class PoQ : int
strong

ELC axes (x and y directions)

Enumerator

Definition at line 78 of file elc.cpp.

Function Documentation

◆ add_PoQ_force()

template<PoQ axis>
void add_PoQ_force ( ParticleRange const &  particles)

Definition at line 603 of file elc.cpp.

References force, Particle::force(), gblcblk, partblk, POQECM, POQECP, POQESM, and POQESP.

◆ add_PQ_force()

static void add_PQ_force ( std::size_t  index_p,
std::size_t  index_q,
double  omega,
ParticleRange const &  particles,
BoxGeometry const &  box_geo 
)
static

◆ add_vec()

static void add_vec ( double *  pdc_d,
double const *  pdc_s1,
double const *  pdc_s2,
std::size_t  size 
)
static

Definition at line 157 of file elc.cpp.

Referenced by setup_PoQ(), and setup_PQ().

◆ addscale_vec()

static void addscale_vec ( double *  pdc_d,
double  scale,
double const *  pdc_s1,
double const *  pdc_s2,
std::size_t  size 
)
static

Definition at line 163 of file elc.cpp.

Referenced by setup_PoQ(), and setup_PQ().

◆ block()

static double * block ( double *  p,
std::size_t  index,
std::size_t  size 
)
static

Definition at line 174 of file elc.cpp.

Referenced by walberla::FFT< FloatType >::add_charge_to_field(), walberla::LBWalberlaImpl< FloatType, Architecture >::add_forces_at_pos(), walberla::LBWalberlaImpl< FloatType, Architecture >::add_to_storage(), assign_charges(), assign_forces(), walberla::BoundaryHandling< T, BoundaryClass >::block_dims(), walberla::EKReactionImplIndexed::boundary_update(), Utils::Interpolation::bspline_3d(), Utils::Interpolation::bspline_3d_gradient(), buildBoxBH(), buildTreeBH(), anonymous_namespace{fft.cpp}::calc_send_block(), cuda_check_errors_exit(), DipolarDirectSum_kernel_wrapper_energy(), DipolarDirectSum_kernel_wrapper_force(), walberla::EKReactionImplIndexed::EKReactionImplIndexed(), energyBH(), walberla::pystencils::Dirichlet_double_precision::fillFromFlagField(), walberla::pystencils::Dirichlet_single_precision::fillFromFlagField(), walberla::pystencils::FixedFlux_double_precision::fillFromFlagField(), walberla::pystencils::FixedFlux_single_precision::fillFromFlagField(), walberla::lbm::Dynamic_UBB_double_precisionCUDA::fillFromFlagField(), walberla::lbm::Dynamic_UBB_single_precisionCUDA::fillFromFlagField(), walberla::lbm::Dynamic_UBB_double_precision::fillFromFlagField(), walberla::lbm::Dynamic_UBB_single_precision::fillFromFlagField(), walberla::pystencils::ReactionKernelIndexed_1_double_precision::fillFromFlagField(), walberla::pystencils::ReactionKernelIndexed_1_single_precision::fillFromFlagField(), walberla::pystencils::ReactionKernelIndexed_2_double_precision::fillFromFlagField(), walberla::pystencils::ReactionKernelIndexed_2_single_precision::fillFromFlagField(), walberla::pystencils::ReactionKernelIndexed_3_double_precision::fillFromFlagField(), walberla::pystencils::ReactionKernelIndexed_3_single_precision::fillFromFlagField(), walberla::pystencils::ReactionKernelIndexed_4_double_precision::fillFromFlagField(), walberla::pystencils::ReactionKernelIndexed_4_single_precision::fillFromFlagField(), walberla::pystencils::ReactionKernelIndexed_5_double_precision::fillFromFlagField(), walberla::pystencils::ReactionKernelIndexed_5_single_precision::fillFromFlagField(), forceBH(), walberla::get_block(), walberla::get_block_and_cell(), walberla::get_block_extended(), walberla::LBWalberlaImpl< FloatType, Architecture >::get_momentum(), walberla::LBWalberlaImpl< FloatType, Architecture >::get_pressure_tensor(), walberla::EKinWalberlaImpl< FluxCount, FloatType >::get_slice_density(), walberla::LBWalberlaImpl< FloatType, Architecture >::get_slice_density(), walberla::LBWalberlaImpl< FloatType, Architecture >::get_slice_last_applied_force(), walberla::LBWalberlaImpl< FloatType, Architecture >::get_slice_population(), walberla::LBWalberlaImpl< FloatType, Architecture >::get_slice_pressure_tensor(), walberla::LBWalberlaImpl< FloatType, Architecture >::get_slice_velocity(), walberla::LBWalberlaImpl< FloatType, Architecture >::get_velocities_at_pos(), initBHgpu(), walberla::pystencils::Dirichlet_double_precision::inner(), walberla::pystencils::Dirichlet_single_precision::inner(), walberla::pystencils::FixedFlux_double_precision::inner(), walberla::pystencils::FixedFlux_single_precision::inner(), walberla::pystencils::ReactionKernelIndexed_1_double_precision::inner(), walberla::pystencils::ReactionKernelIndexed_1_single_precision::inner(), walberla::pystencils::ReactionKernelIndexed_2_double_precision::inner(), walberla::pystencils::ReactionKernelIndexed_2_single_precision::inner(), walberla::pystencils::ReactionKernelIndexed_3_double_precision::inner(), walberla::pystencils::ReactionKernelIndexed_3_single_precision::inner(), walberla::pystencils::ReactionKernelIndexed_4_double_precision::inner(), walberla::pystencils::ReactionKernelIndexed_4_single_precision::inner(), walberla::pystencils::ReactionKernelIndexed_5_double_precision::inner(), walberla::pystencils::ReactionKernelIndexed_5_single_precision::inner(), walberla::lbm::Dynamic_UBB_double_precision::inner(), walberla::lbm::Dynamic_UBB_single_precision::inner(), walberla::lbm::Dynamic_UBB_double_precisionCUDA::inner(), walberla::lbm::Dynamic_UBB_single_precisionCUDA::inner(), LatticeWalberla::LatticeWalberla(), walberla::BoundaryHandling< T, BoundaryClass >::operator()(), walberla::pystencils::AdvectiveFluxKernel_double_precision::operator()(), walberla::pystencils::AdvectiveFluxKernel_single_precision::operator()(), walberla::pystencils::ContinuityKernel_double_precision::operator()(), walberla::pystencils::ContinuityKernel_single_precision::operator()(), walberla::pystencils::DiffusiveFluxKernel_double_precision::operator()(), walberla::pystencils::DiffusiveFluxKernel_single_precision::operator()(), walberla::pystencils::DiffusiveFluxKernelWithElectrostatic_double_precision::operator()(), walberla::pystencils::DiffusiveFluxKernelWithElectrostatic_single_precision::operator()(), walberla::pystencils::Dirichlet_double_precision::operator()(), walberla::pystencils::Dirichlet_single_precision::operator()(), walberla::pystencils::FixedFlux_double_precision::operator()(), walberla::pystencils::FixedFlux_single_precision::operator()(), walberla::pystencils::FrictionCouplingKernel_double_precision::operator()(), walberla::pystencils::FrictionCouplingKernel_single_precision::operator()(), walberla::pystencils::ReactionKernelBulk_1_double_precision::operator()(), walberla::pystencils::ReactionKernelBulk_1_single_precision::operator()(), walberla::pystencils::ReactionKernelBulk_2_double_precision::operator()(), walberla::pystencils::ReactionKernelBulk_2_single_precision::operator()(), walberla::pystencils::ReactionKernelBulk_3_double_precision::operator()(), walberla::pystencils::ReactionKernelBulk_3_single_precision::operator()(), walberla::pystencils::ReactionKernelBulk_4_double_precision::operator()(), walberla::pystencils::ReactionKernelBulk_4_single_precision::operator()(), walberla::pystencils::ReactionKernelBulk_5_double_precision::operator()(), walberla::pystencils::ReactionKernelBulk_5_single_precision::operator()(), walberla::pystencils::ReactionKernelIndexed_1_double_precision::operator()(), walberla::pystencils::ReactionKernelIndexed_1_single_precision::operator()(), walberla::pystencils::ReactionKernelIndexed_2_double_precision::operator()(), walberla::pystencils::ReactionKernelIndexed_2_single_precision::operator()(), walberla::pystencils::ReactionKernelIndexed_3_double_precision::operator()(), walberla::pystencils::ReactionKernelIndexed_3_single_precision::operator()(), walberla::pystencils::ReactionKernelIndexed_4_double_precision::operator()(), walberla::pystencils::ReactionKernelIndexed_4_single_precision::operator()(), walberla::pystencils::ReactionKernelIndexed_5_double_precision::operator()(), walberla::pystencils::ReactionKernelIndexed_5_single_precision::operator()(), walberla::pystencils::CollideSweepDoublePrecisionLeesEdwards::operator()(), walberla::pystencils::CollideSweepDoublePrecisionLeesEdwardsAVX::operator()(), walberla::pystencils::CollideSweepDoublePrecisionThermalized::operator()(), walberla::pystencils::CollideSweepDoublePrecisionThermalizedAVX::operator()(), walberla::pystencils::CollideSweepSinglePrecisionLeesEdwards::operator()(), walberla::pystencils::CollideSweepSinglePrecisionLeesEdwardsAVX::operator()(), walberla::pystencils::CollideSweepSinglePrecisionThermalized::operator()(), walberla::pystencils::CollideSweepSinglePrecisionThermalizedAVX::operator()(), walberla::lbm::Dynamic_UBB_double_precision::operator()(), walberla::lbm::Dynamic_UBB_single_precision::operator()(), walberla::pystencils::InitialPDFsSetterDoublePrecision::operator()(), walberla::pystencils::InitialPDFsSetterSinglePrecision::operator()(), walberla::pystencils::StreamSweepDoublePrecision::operator()(), walberla::pystencils::StreamSweepDoublePrecisionAVX::operator()(), walberla::pystencils::StreamSweepSinglePrecision::operator()(), walberla::pystencils::StreamSweepSinglePrecisionAVX::operator()(), walberla::InterpolateAndShiftAtBoundary< FieldType, FloatType >::operator()(), walberla::ResetForce< PdfField, ForceField >::operator()(), walberla::pystencils::CollideSweepDoublePrecisionLeesEdwardsCUDA::operator()(), walberla::pystencils::CollideSweepDoublePrecisionThermalizedCUDA::operator()(), walberla::pystencils::CollideSweepSinglePrecisionLeesEdwardsCUDA::operator()(), walberla::pystencils::CollideSweepSinglePrecisionThermalizedCUDA::operator()(), walberla::lbm::Dynamic_UBB_double_precisionCUDA::operator()(), walberla::lbm::Dynamic_UBB_single_precisionCUDA::operator()(), walberla::pystencils::InitialPDFsSetterDoublePrecisionCUDA::operator()(), walberla::pystencils::InitialPDFsSetterSinglePrecisionCUDA::operator()(), walberla::pystencils::StreamSweepDoublePrecisionCUDA::operator()(), walberla::pystencils::StreamSweepSinglePrecisionCUDA::operator()(), walberla::pystencils::Dirichlet_double_precision::outer(), walberla::pystencils::Dirichlet_single_precision::outer(), walberla::pystencils::FixedFlux_double_precision::outer(), walberla::pystencils::FixedFlux_single_precision::outer(), walberla::pystencils::ReactionKernelIndexed_1_double_precision::outer(), walberla::pystencils::ReactionKernelIndexed_1_single_precision::outer(), walberla::pystencils::ReactionKernelIndexed_2_double_precision::outer(), walberla::pystencils::ReactionKernelIndexed_2_single_precision::outer(), walberla::pystencils::ReactionKernelIndexed_3_double_precision::outer(), walberla::pystencils::ReactionKernelIndexed_3_single_precision::outer(), walberla::pystencils::ReactionKernelIndexed_4_double_precision::outer(), walberla::pystencils::ReactionKernelIndexed_4_single_precision::outer(), walberla::pystencils::ReactionKernelIndexed_5_double_precision::outer(), walberla::pystencils::ReactionKernelIndexed_5_single_precision::outer(), walberla::lbm::Dynamic_UBB_double_precision::outer(), walberla::lbm::Dynamic_UBB_single_precision::outer(), walberla::lbm::Dynamic_UBB_double_precisionCUDA::outer(), walberla::lbm::Dynamic_UBB_single_precisionCUDA::outer(), p3m_gpu_init(), p3m_k_space_error_gpu(), walberla::EKReactionImplBulk::perform_reaction(), walberla::EKReactionImplIndexed::perform_reaction(), walberla::FFT< FloatType >::reset_charge_field(), walberla::pystencils::AdvectiveFluxKernel_double_precision::run(), walberla::pystencils::AdvectiveFluxKernel_single_precision::run(), walberla::pystencils::ContinuityKernel_double_precision::run(), walberla::pystencils::ContinuityKernel_single_precision::run(), walberla::pystencils::DiffusiveFluxKernel_double_precision::run(), walberla::pystencils::DiffusiveFluxKernel_single_precision::run(), walberla::pystencils::DiffusiveFluxKernelWithElectrostatic_double_precision::run(), walberla::pystencils::DiffusiveFluxKernelWithElectrostatic_single_precision::run(), walberla::pystencils::Dirichlet_double_precision::run(), walberla::pystencils::Dirichlet_single_precision::run(), walberla::pystencils::FixedFlux_double_precision::run(), walberla::pystencils::FixedFlux_single_precision::run(), walberla::pystencils::FrictionCouplingKernel_double_precision::run(), walberla::pystencils::FrictionCouplingKernel_single_precision::run(), walberla::pystencils::ReactionKernelBulk_1_double_precision::run(), walberla::pystencils::ReactionKernelBulk_1_single_precision::run(), walberla::pystencils::ReactionKernelBulk_2_double_precision::run(), walberla::pystencils::ReactionKernelBulk_2_single_precision::run(), walberla::pystencils::ReactionKernelBulk_3_double_precision::run(), walberla::pystencils::ReactionKernelBulk_3_single_precision::run(), walberla::pystencils::ReactionKernelBulk_4_double_precision::run(), walberla::pystencils::ReactionKernelBulk_4_single_precision::run(), walberla::pystencils::ReactionKernelBulk_5_double_precision::run(), walberla::pystencils::ReactionKernelBulk_5_single_precision::run(), walberla::pystencils::ReactionKernelIndexed_1_double_precision::run(), walberla::pystencils::ReactionKernelIndexed_1_single_precision::run(), walberla::pystencils::ReactionKernelIndexed_2_double_precision::run(), walberla::pystencils::ReactionKernelIndexed_2_single_precision::run(), walberla::pystencils::ReactionKernelIndexed_3_double_precision::run(), walberla::pystencils::ReactionKernelIndexed_3_single_precision::run(), walberla::pystencils::ReactionKernelIndexed_4_double_precision::run(), walberla::pystencils::ReactionKernelIndexed_4_single_precision::run(), walberla::pystencils::ReactionKernelIndexed_5_double_precision::run(), walberla::pystencils::ReactionKernelIndexed_5_single_precision::run(), walberla::pystencils::CollideSweepDoublePrecisionLeesEdwards::run(), walberla::pystencils::CollideSweepDoublePrecisionLeesEdwardsAVX::run(), walberla::pystencils::CollideSweepDoublePrecisionThermalized::run(), walberla::pystencils::CollideSweepDoublePrecisionThermalizedAVX::run(), walberla::pystencils::CollideSweepSinglePrecisionLeesEdwards::run(), walberla::pystencils::CollideSweepSinglePrecisionLeesEdwardsAVX::run(), walberla::pystencils::CollideSweepSinglePrecisionThermalized::run(), walberla::pystencils::CollideSweepSinglePrecisionThermalizedAVX::run(), walberla::lbm::Dynamic_UBB_double_precision::run(), walberla::lbm::Dynamic_UBB_single_precision::run(), walberla::pystencils::InitialPDFsSetterDoublePrecision::run(), walberla::pystencils::InitialPDFsSetterSinglePrecision::run(), walberla::pystencils::StreamSweepDoublePrecision::run(), walberla::pystencils::StreamSweepDoublePrecisionAVX::run(), walberla::pystencils::StreamSweepSinglePrecision::run(), walberla::pystencils::StreamSweepSinglePrecisionAVX::run(), walberla::pystencils::CollideSweepDoublePrecisionLeesEdwardsCUDA::run(), walberla::pystencils::CollideSweepDoublePrecisionThermalizedCUDA::run(), walberla::pystencils::CollideSweepSinglePrecisionLeesEdwardsCUDA::run(), walberla::pystencils::CollideSweepSinglePrecisionThermalizedCUDA::run(), walberla::lbm::Dynamic_UBB_double_precisionCUDA::run(), walberla::lbm::Dynamic_UBB_single_precisionCUDA::run(), walberla::pystencils::InitialPDFsSetterDoublePrecisionCUDA::run(), walberla::pystencils::InitialPDFsSetterSinglePrecisionCUDA::run(), walberla::pystencils::StreamSweepDoublePrecisionCUDA::run(), walberla::pystencils::StreamSweepSinglePrecisionCUDA::run(), walberla::pystencils::AdvectiveFluxKernel_double_precision::runOnCellInterval(), walberla::pystencils::AdvectiveFluxKernel_single_precision::runOnCellInterval(), walberla::pystencils::ContinuityKernel_double_precision::runOnCellInterval(), walberla::pystencils::ContinuityKernel_single_precision::runOnCellInterval(), walberla::pystencils::DiffusiveFluxKernel_double_precision::runOnCellInterval(), walberla::pystencils::DiffusiveFluxKernel_single_precision::runOnCellInterval(), walberla::pystencils::DiffusiveFluxKernelWithElectrostatic_double_precision::runOnCellInterval(), walberla::pystencils::DiffusiveFluxKernelWithElectrostatic_single_precision::runOnCellInterval(), walberla::pystencils::FrictionCouplingKernel_double_precision::runOnCellInterval(), walberla::pystencils::FrictionCouplingKernel_single_precision::runOnCellInterval(), walberla::pystencils::ReactionKernelBulk_1_double_precision::runOnCellInterval(), walberla::pystencils::ReactionKernelBulk_1_single_precision::runOnCellInterval(), walberla::pystencils::ReactionKernelBulk_2_double_precision::runOnCellInterval(), walberla::pystencils::ReactionKernelBulk_2_single_precision::runOnCellInterval(), walberla::pystencils::ReactionKernelBulk_3_double_precision::runOnCellInterval(), walberla::pystencils::ReactionKernelBulk_3_single_precision::runOnCellInterval(), walberla::pystencils::ReactionKernelBulk_4_double_precision::runOnCellInterval(), walberla::pystencils::ReactionKernelBulk_4_single_precision::runOnCellInterval(), walberla::pystencils::ReactionKernelBulk_5_double_precision::runOnCellInterval(), walberla::pystencils::ReactionKernelBulk_5_single_precision::runOnCellInterval(), walberla::pystencils::CollideSweepDoublePrecisionLeesEdwards::runOnCellInterval(), walberla::pystencils::CollideSweepDoublePrecisionLeesEdwardsAVX::runOnCellInterval(), walberla::pystencils::CollideSweepDoublePrecisionThermalized::runOnCellInterval(), walberla::pystencils::CollideSweepDoublePrecisionThermalizedAVX::runOnCellInterval(), walberla::pystencils::CollideSweepSinglePrecisionLeesEdwards::runOnCellInterval(), walberla::pystencils::CollideSweepSinglePrecisionLeesEdwardsAVX::runOnCellInterval(), walberla::pystencils::CollideSweepSinglePrecisionThermalized::runOnCellInterval(), walberla::pystencils::CollideSweepSinglePrecisionThermalizedAVX::runOnCellInterval(), walberla::pystencils::InitialPDFsSetterDoublePrecision::runOnCellInterval(), walberla::pystencils::InitialPDFsSetterSinglePrecision::runOnCellInterval(), walberla::pystencils::StreamSweepDoublePrecision::runOnCellInterval(), walberla::pystencils::StreamSweepDoublePrecisionAVX::runOnCellInterval(), walberla::pystencils::StreamSweepSinglePrecision::runOnCellInterval(), walberla::pystencils::StreamSweepSinglePrecisionAVX::runOnCellInterval(), walberla::pystencils::CollideSweepDoublePrecisionLeesEdwardsCUDA::runOnCellInterval(), walberla::pystencils::CollideSweepDoublePrecisionThermalizedCUDA::runOnCellInterval(), walberla::pystencils::CollideSweepSinglePrecisionLeesEdwardsCUDA::runOnCellInterval(), walberla::pystencils::CollideSweepSinglePrecisionThermalizedCUDA::runOnCellInterval(), walberla::pystencils::InitialPDFsSetterDoublePrecisionCUDA::runOnCellInterval(), walberla::pystencils::InitialPDFsSetterSinglePrecisionCUDA::runOnCellInterval(), walberla::pystencils::StreamSweepDoublePrecisionCUDA::runOnCellInterval(), walberla::pystencils::StreamSweepSinglePrecisionCUDA::runOnCellInterval(), walberla::set_boundary_from_grid(), walberla::LBWalberlaImpl< FloatType, Architecture >::set_collision_model(), walberla::EKinWalberlaImpl< FluxCount, FloatType >::set_slice_density(), walberla::LBWalberlaImpl< FloatType, Architecture >::set_slice_density(), walberla::LBWalberlaImpl< FloatType, Architecture >::set_slice_last_applied_force(), walberla::LBWalberlaImpl< FloatType, Architecture >::set_slice_population(), walberla::LBWalberlaImpl< FloatType, Architecture >::set_slice_velocity(), setup_PoQ(), setup_PQ(), sortBH(), and summarizeBH().

◆ calc_sc_cache()

template<std::size_t dir>
static std::vector< SCCache > calc_sc_cache ( ParticleRange const &  particles,
std::size_t  n_freq,
double  u 
)
static

Calculate cached sin/cos values for one direction.

Template Parameters
dirIndex of the dimension to consider (e.g. 0 for x ...).
Parameters
particlesParticle to calculate values for
n_freqNumber of frequencies to calculate per particle
uInverse box length
Returns
Calculated values.

Definition at line 109 of file elc.cpp.

References Utils::pi(), ParticleRange::size(), and u.

◆ calc_total_charge()

static auto calc_total_charge ( CellStructure const &  cell_structure)
static

Definition at line 977 of file elc.cpp.

References comm_cart, CellStructure::local_particles(), and Particle::q().

◆ charge_assign()

template<ChargeProtocol protocol, typename combined_ranges >
void charge_assign ( elc_data const &  elc,
CoulombP3M solver,
combined_ranges const &  p_q_pos_range 
)

◆ clear_vec()

static void clear_vec ( double *  pdc,
std::size_t  size 
)
static

Definition at line 147 of file elc.cpp.

Referenced by setup_PoQ(), and setup_PQ().

◆ copy_vec()

static void copy_vec ( double *  pdc_d,
double const *  pdc_s,
std::size_t  size 
)
static

Definition at line 152 of file elc.cpp.

Referenced by distribute().

◆ distribute()

static void distribute ( std::size_t  size)
static

Definition at line 178 of file elc.cpp.

References comm_cart, copy_vec(), and gblcblk.

◆ modify_p3m_sums()

template<ChargeProtocol protocol, typename combined_range >
void modify_p3m_sums ( elc_data const &  elc,
CoulombP3M solver,
combined_range const &  p_q_pos_range 
)

◆ p3m_assign_image_charge()

static void p3m_assign_image_charge ( elc_data const &  elc,
CoulombP3M p3m,
double  q,
Utils::Vector3d const &  pos 
)
static

◆ PoQ_energy()

static double PoQ_energy ( double  omega,
std::size_t  n_part 
)
static

Definition at line 622 of file elc.cpp.

References gblcblk, partblk, POQECM, POQECP, POQESM, and POQESP.

◆ PQ_energy()

static double PQ_energy ( double  omega,
std::size_t  n_part 
)
static

Definition at line 814 of file elc.cpp.

References gblcblk, partblk, PQECCM, PQECCP, PQECSM, PQECSP, PQESCM, PQESCP, PQESSM, and PQESSP.

◆ prepare_sc_cache()

static std::pair< std::size_t, std::size_t > prepare_sc_cache ( ParticleRange const &  particles,
BoxGeometry const &  box_geo,
double  far_cut 
)
static

Definition at line 129 of file elc.cpp.

References BoxGeometry::length(), BoxGeometry::length_inv(), scxcache, and scycache.

◆ scale_vec()

static void scale_vec ( double  scale,
double *  pdc,
std::size_t  size 
)
static

Definition at line 169 of file elc.cpp.

Referenced by setup_PoQ(), and setup_PQ().

◆ setup_PoQ()

◆ setup_PQ()

static void setup_PQ ( elc_data const &  elc,
double  prefactor,
std::size_t  index_p,
std::size_t  index_q,
double  omega,
ParticleRange const &  particles,
BoxGeometry const &  box_geo 
)
static

Variable Documentation

◆ gblcblk

double gblcblk[8]
static

collected data from the other cells

Definition at line 85 of file elc.cpp.

Referenced by add_PoQ_force(), add_PQ_force(), distribute(), PoQ_energy(), PQ_energy(), setup_PoQ(), and setup_PQ().

◆ partblk

std::vector<double> partblk
static

temporary buffers for product decomposition

Definition at line 83 of file elc.cpp.

Referenced by add_PoQ_force(), add_PQ_force(), PoQ_energy(), PQ_energy(), setup_PoQ(), and setup_PQ().

◆ scxcache

std::vector<SCCache> scxcache
static

Cached sin/cos values along the x-axis and y-axis.

Definition at line 94 of file elc.cpp.

Referenced by prepare_sc_cache(), setup_PoQ(), and setup_PQ().

◆ scycache

std::vector<SCCache> scycache
static

Definition at line 95 of file elc.cpp.

Referenced by prepare_sc_cache(), setup_PoQ(), and setup_PQ().