OpenMD 3.2
Molecular Dynamics in the Open
Loading...
Searching...
No Matches
RPYBlocks.hpp File Reference

Pairwise Rotne-Prager-Yamakawa mobility blocks for a bead model. More...

#include <cmath>
#include "math/SquareMatrix3.hpp"
#include "math/Vector3.hpp"
#include "utils/Constants.hpp"

Go to the source code of this file.

Namespaces

namespace  OpenMD
 This basic Periodic Table class was originally taken from the data.cpp file in OpenBabel.

Enumerations

enum  Regime { FarField , PartialOverlap , FullImmersion }

Functions

Regime OpenMD::RPY::classify (RealType R, RealType ai, RealType aj)
 Classify a pair by centre-to-centre distance R and radii a_i, a_j.
Mat3x3d OpenMD::RPY::skew (const Vector3d &v)
 cross-product (skew) matrix S(v) such that S(v) * w = v x w
RealType OpenMD::RPY::heavi (RealType x)
 Heaviside step used by the full-immersion rt/td branches: 1 if x>0 else 0.
Mat3x3d OpenMD::RPY::muTT_self (RealType a, RealType eta)
Mat3x3d OpenMD::RPY::muRR_self (RealType a, RealType eta)
Mat3x3d OpenMD::RPY::muTT (const Vector3d &rij, RealType ai, RealType aj, RealType eta)
 translation-translation, carries 1/eta
Mat3x3d OpenMD::RPY::muRR (const Vector3d &rij, RealType ai, RealType aj, RealType eta)
 rotation-rotation, carries 1/eta
RealType OpenMD::RPY::rtPrefactor (RealType R, RealType ai, RealType aj, RealType eta)
 rt prefactor pf such that mu_rt = -pf * skew(rhat) (Omega_i from F_j).
Mat3x3d OpenMD::RPY::muRT (const Vector3d &rij, RealType ai, RealType aj, RealType eta)
 rotation-translation: Omega_i from F_j. carries 1/eta.
Mat3x3d OpenMD::RPY::muTR (const Vector3d &rij, RealType ai, RealType aj, RealType eta)
 translation-rotation: U_i from T_j. Uses the i<->j swapped prefactor (equal to muRT only in the far field). carries 1/eta.
Vector3d OpenMD::RPY::muTD_dot_E (const Vector3d &rij, RealType ai, RealType aj, const Mat3x3d &E)
 mu_td_ij : E -> translational disturbance velocity at bead i = hat1 (E rhat) + hat3 (rhat . E . rhat) rhat
Vector3d OpenMD::RPY::muRD_dot_E (const Vector3d &rij, RealType ai, RealType aj, const Mat3x3d &E)
 mu_rd_ij : E -> angular-velocity disturbance at bead i = p [ (E rhat) x rhat ]

Detailed Description

Pairwise Rotne-Prager-Yamakawa mobility blocks for a bead model.

The six mobility blocks needed to embed a flexible atomic bead model in a linearized background flow:

tt, tr, rt, rr force/torque -> translation/rotation (carry 1/eta) td, rd ambient strain -> translation/rotation (eta- AND pi-INDEPENDENT)

The grand velocity mobility M (the 6N x 6N assembly of tt/tr/rt/rr) is inverted to the grand resistance R = M^{-1}; the drag on the beads is

f_hydro = R ( v_inf_eff - v ), v_inf_eff = v_inf + G : E_inf,

with v_inf the affine flow at the bead (VelocityField::getVelocity) and (G:E_inf)_i = sum_{j!=i}[mu_td_ij:E ; mu_rd_ij:E] the dipolar disturbance.

Three regimes per pair, with boundaries:

far field R > a_i + a_j partial overlap |a_i - a_j| < R <= a_i + a_j full immersion R <= |a_i - a_j|

VISCOSITY: tt/tr/rt/rr carry 1/eta; td/rd are eta- AND pi-independent, because the 1/(pi eta) of the stresslet propagator cancels the (pi eta) of a sphere's stresslet response to strain. The (5/6) a_j^3 / R^2 structure of the far-field td block is exactly that cancellation.

VERIFIED against ZWMS (Zuk, Wajnryb, Mizerski, Szymczak, J. Fluid Mech. 741, R5, 2014), Eqs. 3.1-3.9, in all three regimes, and continuity across both regime boundaries confirmed numerically. The full-immersion rt/tr prefactor (see rtPrefactor) follows Eq. 3.5, R/(8 pi eta a_i^3). The td/rd tensors are defined only up to their symmetric, traceless part, which is harmless here since they are always contracted with the symmetric traceless E.

Definition in file RPYBlocks.hpp.

Enumeration Type Documentation

◆ Regime

enum OpenMD::RPY::Regime

Definition at line 87 of file RPYBlocks.hpp.

Function Documentation

◆ classify()

Regime OpenMD::RPY::classify ( RealType R,
RealType ai,
RealType aj )
inline

Classify a pair by centre-to-centre distance R and radii a_i, a_j.

Definition at line 90 of file RPYBlocks.hpp.

◆ heavi()

RealType OpenMD::RPY::heavi ( RealType x)
inline

Heaviside step used by the full-immersion rt/td branches: 1 if x>0 else 0.

Definition at line 109 of file RPYBlocks.hpp.

◆ muRD_dot_E()

Vector3d OpenMD::RPY::muRD_dot_E ( const Vector3d & rij,
RealType ai,
RealType aj,
const Mat3x3d & E )
inline

mu_rd_ij : E -> angular-velocity disturbance at bead i = p [ (E rhat) x rhat ]

Definition at line 290 of file RPYBlocks.hpp.

References OpenMD::cross(), and OpenMD::Vector< Real, Dim >::length().

◆ muRR()

Mat3x3d OpenMD::RPY::muRR ( const Vector3d & rij,
RealType ai,
RealType aj,
RealType eta )
inline

rotation-rotation, carries 1/eta

Definition at line 163 of file RPYBlocks.hpp.

References OpenMD::SquareMatrix< Real, 3 >::identity(), and OpenMD::Vector< Real, Dim >::length().

◆ muRR_self()

Mat3x3d OpenMD::RPY::muRR_self ( RealType a,
RealType eta )
inline

Definition at line 117 of file RPYBlocks.hpp.

◆ muRT()

Mat3x3d OpenMD::RPY::muRT ( const Vector3d & rij,
RealType ai,
RealType aj,
RealType eta )
inline

rotation-translation: Omega_i from F_j. carries 1/eta.

Definition at line 227 of file RPYBlocks.hpp.

References OpenMD::Vector< Real, Dim >::length().

◆ muTD_dot_E()

Vector3d OpenMD::RPY::muTD_dot_E ( const Vector3d & rij,
RealType ai,
RealType aj,
const Mat3x3d & E )
inline

mu_td_ij : E -> translational disturbance velocity at bead i = hat1 (E rhat) + hat3 (rhat . E . rhat) rhat

Definition at line 248 of file RPYBlocks.hpp.

References OpenMD::dot(), and OpenMD::Vector< Real, Dim >::length().

◆ muTR()

Mat3x3d OpenMD::RPY::muTR ( const Vector3d & rij,
RealType ai,
RealType aj,
RealType eta )
inline

translation-rotation: U_i from T_j. Uses the i<->j swapped prefactor (equal to muRT only in the far field). carries 1/eta.

Definition at line 236 of file RPYBlocks.hpp.

References OpenMD::Vector< Real, Dim >::length().

◆ muTT()

Mat3x3d OpenMD::RPY::muTT ( const Vector3d & rij,
RealType ai,
RealType aj,
RealType eta )
inline

translation-translation, carries 1/eta

Definition at line 126 of file RPYBlocks.hpp.

References OpenMD::SquareMatrix< Real, 3 >::identity(), and OpenMD::Vector< Real, Dim >::length().

◆ muTT_self()

Mat3x3d OpenMD::RPY::muTT_self ( RealType a,
RealType eta )
inline

Definition at line 113 of file RPYBlocks.hpp.

◆ rtPrefactor()

RealType OpenMD::RPY::rtPrefactor ( RealType R,
RealType ai,
RealType aj,
RealType eta )
inline

rt prefactor pf such that mu_rt = -pf * skew(rhat) (Omega_i from F_j).

Definition at line 207 of file RPYBlocks.hpp.

◆ skew()

Mat3x3d OpenMD::RPY::skew ( const Vector3d & v)
inline

cross-product (skew) matrix S(v) such that S(v) * w = v x w

Definition at line 97 of file RPYBlocks.hpp.

References OpenMD::Vector3< Real >::x(), OpenMD::Vector3< Real >::y(), and OpenMD::Vector3< Real >::z().