ESPResSo
Extensible Simulation Package for Research on Soft Matter Systems
Loading...
Searching...
No Matches
dpd.cpp File Reference

Implementation of dpd.hpp. More...

#include <config/config.hpp>
#include "dpd.hpp"
#include "BoxGeometry.hpp"
#include "cell_system/CellStructure.hpp"
#include "nonbonded_interactions/nonbonded_interaction_data.hpp"
#include "random.hpp"
#include "system/System.hpp"
#include "thermostat.hpp"
#include <utils/Vector.hpp>
#include <utils/math/tensor_product.hpp>
#include <utils/matrix.hpp>
#include <boost/mpi/collectives/reduce.hpp>
#include <cmath>
#include <functional>
#include <type_traits>
+ Include dependency graph for dpd.cpp:

Go to the source code of this file.

Functions

Utils::Vector3d dpd_noise (DPDThermostat const &dpd, int pid1, int pid2)
 Return a random uniform 3D vector with the Philox thermostat.
 
Utils::Vector3d dpd_pair_force (Utils::Vector3d const &p1_position, Utils::Vector3d const &p1_velocity, int p1_id, Utils::Vector3d const &p2_position, Utils::Vector3d const &p2_velocity, int p2_id, DPDThermostat const &dpd, BoxGeometry const &box_geo, IA_parameters const &ia_params, Utils::Vector3d const &d, double dist, double dist2)
 
static auto dpd_pressure_local (System::System &system)
 
Utils::Vector9d dpd_pressure (System::System &system, boost::mpi::communicator const &comm)
 Pressure tensor contribution of the DPD interaction.
 

Detailed Description

Implementation of dpd.hpp.

Definition in file dpd.cpp.

Function Documentation

◆ dpd_noise()

Utils::Vector3d dpd_noise ( DPDThermostat const dpd,
int  pid1,
int  pid2 
)

Return a random uniform 3D vector with the Philox thermostat.

Random numbers depend on

  1. dpd_rng_counter (initialized by seed) which is increased on integration
  2. Salt (decorrelates different counters)
  3. Two particle IDs (order-independent, decorrelates particles, gets rid of seed-per-node)

Definition at line 54 of file dpd.cpp.

References BaseThermostat::rng_counter(), BaseThermostat::rng_seed(), and stream.

Referenced by dpd_pair_force(), dpd_pressure_local(), and PressureKernel::operator()().

◆ dpd_pair_force()

Utils::Vector3d dpd_pair_force ( Utils::Vector3d const p1_position,
Utils::Vector3d const p1_velocity,
int  p1_id,
Utils::Vector3d const p2_position,
Utils::Vector3d const p2_velocity,
int  p2_id,
DPDThermostat const dpd,
BoxGeometry const box_geo,
IA_parameters const ia_params,
Utils::Vector3d const d,
double  dist,
double  dist2 
)

◆ dpd_pressure()

Utils::Vector9d dpd_pressure ( System::System system,
boost::mpi::communicator const comm 
)

Pressure tensor contribution of the DPD interaction.

This calculates the total contribution of the DPD interaction to the pressure tensor, i.e. the dissipative and random (noise) forces. It's calculated as the sum over all pair virials as

\[ P^{\nu\mu} = V^{-1}\sum_i \sum_{j < i} r_{i,j}^{\nu} F_{i,j}^{\mu} \]

where \(F_{i,j}\) is the DPD force (dissipative plus noise) exerted by particle j on particle i, \(r_{i,j}\) is their distance vector and \(V\) is the box volume.

Returns
Pressure tensor contribution.

Definition at line 154 of file dpd.cpp.

References dpd_pressure_local(), Utils::flatten(), and stream.

Referenced by ScriptInterface::Analysis::Analysis::do_call_method(), and Observables::DPDPressure::operator()().

◆ dpd_pressure_local()

static auto dpd_pressure_local ( System::System system)
static

Definition at line 103 of file dpd.cpp.

References Distance::dist2, dpd_noise(), dpd_pair_force(), P, stream, and Distance::vec21.

Referenced by dpd_pressure().