Repulsive forces

Repulsive forces#

Repulsive forces between cells and walls can be enabled through the following functions:

hemocell::setRepulsion(T repulsionConstant, T repulsionCutoff);
hemocell::enableBoundaryParticles(T boundaryRepulsionConstant, T boundaryRepulsionCutoff);

Details on their implementations can be found in hemocell/core/hemocell.cpp and hemocell/core/hemoCellParticleField.cpp under HemoCellParticleField::applyRepulsionForce.

Note

The repulsive forces should be enable before starting the main HemoCell iterations.

The first function setRepulsion enables the repulsion between cells with a given repulsion constant and cut-off distance for the repulsion to be active. Similarly, enableBoundaryParticles applies a repulsion force between the cells and the boundary walls of the domain. The effect of these forces will strongly depend on the chosen repulsion constants and cut-off distance thresholds.

For two vertices of different cells (or a vertex and a wall node) at a distance d below the cutoff r_c, the force has magnitude k * r_c / d and acts along the line between them (equal and opposite on two vertices; at a wall only the vertex is pushed). k is thus the force at the cutoff distance. The repulsion force of a vertex (particle and wall repulsion together) is capped at FORCE_LIMIT (50 pN by default), separately from the membrane force; at k = 5 pN the cap is reached at a tenth of the cutoff.

Note

The repulsionConstant and boundaryRepulsionConstant (k) are given in pN and the cutoffs in micrometres; both are converted to lattice units (call these functions after param::lbm_*_parameters()). The example configurations use kRep = 5 pN. (Before this version k was used as a lattice force; the former value 2e-22 had no effect.)

Note

Neighbours are searched in adjacent lattice nodes only, so a cutoff larger than one lattice spacing is only partially effective (HemoCell prints a warning). Particle and wall repulsion must use the same update interval when both are enabled.

Alternatively, HemoCell used to provide more advanced repulsion methods considering custom repulsion potential forces, see legacy/thrombosit/adhesionForces3D.h. Although this feature is currently not actively supported in HemoCell, one might pursue such an implementation for more advanced force potential implementations.