Potential functions
There are four possible interactions to consider, namely, cell–cell interactions, cell–fibre interactions, fibre–cell interactions and fibre–fibre interactions, thus four different potential functions are considered. Cell-cell interactions are handled by PhysiCell as per the function
add_potentials. We do not go into detail here; more details can be found in
[11].
Cell-fibre interactions are cell interactions with neighbouring fibres which affect the velocity of the cell, i.e. describe how a fibre affects a cell. These interactions are contained within the method
add_potentials_from_fibre of the
PhysiMeSS_Cell class. Firstly, we include simple repulsion and adhesion between cells and fibres as per between cells, copying the behaviour in
add_potentials. This prevents cells from being able to go through fibres. Secondly, we introduce fibre-directed movement of cells as per
[17] since cells are known to track along matrix fibres
[18, 19]. We describe this briefly here, for more details please see
[17]. We assume that cells move in response to a close neighbour fibre in two directions; an additional adhesive force, parallel to fibre orientation and an additional repulsive force orthogonal to the fibre (see, e.g.,
[20]) allowing the cell to track along the fibre.
The additional adhesive force takes the form
It is directed along the normalised direction of the fibre,
$\vec{\hat{f}}$, and depends on the normalised scalar product between
$\vec{\hat{f}}$ and
$\vec{v}$, the velocity of the cell, i.e., proportional to the vector projection of
$\vec{v}$ onto
$\vec{\hat{f}}$ (Figure
4). Moreover, the force depends on an adhesion coefficient, 𝛼
fibre, and on a threshold velocity,
vmax, which limits the pulling effect of fibres. We note that this equation implies the need for
$|\vec{v}|\leq v_{\max }$. In the PhysiMeSS code, these parameters are called
vel_adhesion and
cell_velocity_max, respectively. The additional parameter
s > 0 can be used to model additional effects that might increase (
s < 1) or decrease (
s > 1) the pulling effect. Following
[17], we use
s = 1.
Figure 4.
Schematic showing the adhesive and repulsive forces for a cell with velocity $\vec{v}$ interacting with a fibre, f, where $\vec{\hat{f}}$ is the unit vector in the direction of f.
![]()
The additional repulsion force is modelled as friction exerted by the fibre and takes the form
It is directed parallel to the cell’s current velocity,
v, and is affected by the component of cell velocity orthogonal to the fibre, i.e., proportional to the vector rejection of
$\vec{v}$ onto
$\vec{\hat{f}}$ (Figure
4). The strength of this force is dictated by 𝛽
fibre, a cell–fibre friction coefficient, and the exponent
r > 0 can be used to model nonlinear effects that increase (
r < 1) or decrease (
r > 1) the repulsion forces. Following,
[17] we use
r = 2. In the PhysiMeSS code, this parameter is called
vel_contact. The additional cell–fibre interaction force is computed as the difference of these adhesion and repulsion terms,
F =
F∥ −
F⊥.
Fibre-cell interactions are fibre interactions with neighbouring cells that affect the fibre. These interactions are contained within PhysiMeSS_Fibre’s method add_potentials_from_cell. Any fibre–cell interaction can only take place if a fibre has no more than one cross-link with another fibre; otherwise, we assume the fibre is fixed in place, tethered by its cross-links.
A single fibre with no cross-links can be pushed and/or rotated by a motile cell. Whether pushing or rotation are turned on can be controlled by the user using the Boolean flags fibre_pushing and fibre_rotation. Cell-fibre pushing provides repulsion to the fibre, giving it speed and moving its centre from its initial position. Cell-fibre rotation maintains the position of the fibre centre and modifies the coordinates of its extremities by changing the fibre orientation. The new fibre orientation is based on moment arm magnitude, impulse, and fibre length. The moment arm magnitude is determined using the Euclidean distance between the origin and the point of impact. The impulse is obtained by considering the friction of the fibre (modified by the user with parameter fibre_sticky) and the speed of the interacting cell. The calculated impulse and fibre length are then used to determine the angular velocity, representing the rate of change of the fibre’s orientation. Finally, the new orientation is obtained by rotating the old orientation vector using trigonometric functions. As a result, a cell impacting on a fibre end far from the centre will change the fibre’s orientation faster than impacting closer to the centre.
The mathematical equations that correspond to code implemented to reproduce the fibre rotation upon contact with a cell, are the following:
M: Moment arm magnitude. px, py: x and y components of the point of impact. This equation calculates the perpendicular distance from the fiber’s axis to the force application point.
J: Impulse. k: ‘fibre_sticky’, a constant modifying the impulse. v: Cell’s migration speed. M: Moment arm magnitude. This equation determines the impulse applied to the fibre, factoring in the cell’s speed and the distance from the point of impact to the fibre’s axis.
𝜔: Angular velocity. J: Impulse. L: Fibre length. This calculates the angular velocity induced by the impulse, inversely proportional to the fibre’s moment of inertia (approximated here).
$o_{x}^{\prime }$, $o_{y}^{\prime }$: New orientation components. ox, oy: Old orientation components. 𝜔: Angular velocity. This set of equations updates the fibre’s orientation based on the calculated angular velocity.
An example of fibre rotation is available in
Cell_Fibre_Mechanics/fibre_rotating.xml, and can be visualised in Figure
5. The parameters controlling the cell–fibre mechanics are defined as custom data and expressed in the cell definitions of fibre-interacting cells, in the .xml file and detailed in Table
2.
Figure 5.
2D Tissue domain with fibres forming a vertical barrier (blues lines), one chemotactic cell (grey) and one cell secreting an attractant (yellow) at time t = 0 min (left), t = 27 min (centre), t = 43 min (right). At t = 27 min, the chemotactic cell starts contact with the ECM fibre, then at t = 43 min the cell was able to rotate the fibre to make a path to the attractant. Note: the time stated at the top of the figure is the simulated time and the time stated in the bottom right is the time taken to run the simulation.
![]()
Table 2
User parameter values for fibre mechanics read from .xml file.
| Equation Symbol | Parameter | Description |
|---|
| 𝛼fibre | vel_adhesion | Adhesion coefficient for the additional adhesion between cells and fibres, parallel to fibre. |
| 𝛽fibre | vel_contact | Cell-fibre friction coefficient for the additional repulsion between cells and fibres, orthogonal to fibre. |
| vmax | cell_velocity_max | Threshold velocity that limits the pulling effect fibres have on cells. |
| fibre_pushing | Flag for fibre pushing by a cell (1 for active, 0 for inactive). |
| fibre_rotation | Flag for fibre rotation by a cell (1 for active, 0 for inactive). |
| fibre_sticky | Fibre friction - measure of how easily a cell can push or rotate a fibre. |
Fibre-fibre interactions are fibre interactions with neighbouring fibres. For this release, we do not consider that there are fibre–fibre interactions. However, the method add_potentials_from_fibre is incorporated into the PhysiMeSS_Fibre class for future development.
Fibre degradation
As discussed in the introduction to this paper, cellular remodelling of the ECM is a key process and an important interaction to consider between cells and matrix fibres. For this release of PhysiMeSS, we focused on matrix degradation. As well as degrading fibres, cells are responsible for creating new fibres and remodelling the ECM. The process of fibre generation by cells is not currently part of this release of PhysiMeSS but will be incorporated into a future release.
The degradation of the ECM plays a major role in tumour growth and invasion, for example. The key enzymes involved in this process are MMPs. MMPs can be found both within the ECM, at the cell membrane level (membrane-type MMPs), or being secreted by the cell itself. Different MMPs have different ECM-component targets, but their main function is to cleave and degrade structural ECM proteins such as elastin and collagen
[21].
Fibre degradation is modelled in PhysiMeSS as a simple process of removing fibres from the domain under certain conditions. Fibre degradation can be turned on or off by the user using the Boolean flag fibre_degradation, a user parameter in the .xml file. During cell–fibre interactions as controlled by add_potentials_from_fibre, a fibre may be degraded if fibre degradation is turned on and further conditions are met, as detailed below. The fibre is then flagged for removal, which, for simplicity, happens instantly.
The first condition that must be met in order for a fibre to be degraded relates to whether a cell is hindered by the presence of a fibre. This may either be because as a cell tries to migrate through the domain, fibres act as obstacles in the cell’s path, or it may be because as cells proliferate, they require additional space for the growing mass of cells. To target the first of these problems, the user can define a parameter
fibre_stuck_time that determines how long a cell is stuck in a certain place before it will try to degrade/remove a fibre in its path. To determine whether a cell is stuck, we check as part of the function
physimess_update_cell_velocity whether the magnitude of a cell’s velocity is below a given threshold defined by the parameter
fibre_stuck_threshold. In order that cells only remove fibres in their path, we consider the dot product of the cell’s motility vector with the vector connecting the cell centre to the nearest point on the fiber; if this dot product is greater than zero, a fibre is said to be in a cell’s path. A simple example of a cell migrating through the ECM and degrading cells along the way is available in
Fibre_Degradation/mymodel_fibre_degradation.xml, and represented in Figure
6.
Figure 6.
2D Tissue domain with fibres (blues lines), one chemotactic cell (grey) and one cell secreting an attractant (yellow) at time t = 1 min (left), t = 5 h (centre), t = 16 h (right). We can observe the chemotactic cell making its way to the attractant, degrading fibres on the way. Note: the time stated at the top of the figure is the simulated time and the time stated in the bottom right is the time taken to run the simulation.
![]()
To target the second issue, whereby cells degrade fibres to make space for proliferation, we defined a new class in
custom.h, called
PhysiMeSS_Fibre_Custom_Degrade, which is derived from the
PhysiMeSS_Fibre class. This new class implements in
custom.cpp a custom degradation function, as described in Appendix
D.. In this custom implementation, we check whether the pressure experienced by a cell is above the threshold
fibre_pressure_threshold. In order to indicate the pressure experienced by a cell, we have introduced an additional user Boolean flag that, when set to true, colours the cells by the pressure they experience using
color_cells_by_pressure. If either of the constraints outlined are satisfied and fibre degradation is turned on, the cell will degrade neighbouring fibres at the rate
fibre_degradation_rate. The custom implementation is controlled by a Boolean parameter,
fibre_custom_degradation. This example is available in
Fibre_Degradation/mymodel_matrix_degradation.xml and represented in Figure
7, where we compare degradations with and without this custom, pressure-dependent degradation.
Figure 7.
2D Tissue domain with fibres (blues lines), one initial cell coloured by the pressure sensed (blue: low, red: high) at time t = 1 h (left), t = 16 h (center), t = 25 h (right). We show degradation independent on pressure (top), and dependent on pressure (bottom). We can observe the cell population growing, with high pressure when cells are trapped between fibres. Cells whose degradation rate responds to pressure are more able to reduce the pressure at the interface with fibres. At a later time in the pressure-dependent degradation condition, we obtain a gradient of high pressure in the middle of the population, lower at the border, as well as a rounder shape for the population, which is not observed in the case of the pressure-independant degradation. Note: the time stated at the top of the figure is the simulated time and the time stated in the bottom right is the time taken to run the simulation.
![]()
All the parameters describing the fibre degradation by cells are controlled by custom data expressed in the cell definitions of fibre-interacting cells, in .xml file and detailed in Table
3.
Table 3
User parameter values for fibre degradation read from .xml file.
| Parameter | Description |
|---|
| fibre_degradation | Flag for fibre degradation (1 for active, 0 for inactive). |
| fibre_stuck_time | Number of mechanics timesteps a cell must be stuck before it can degrade a fibre at a rate fibre_degradation_rate. |
| fibre_stuck_threshold | Maximum movement size to declare a cell stuck. |
| fibre_custom_degradation | Flag for activating the degradation, which depends on pressure (1 for active, 0 for inactive). |
| fibre_pressure_threshold | Pressure threshold for cells above which they can degrade a fibre at a rate fibre_degradation_rate. |
| color_cells_by_pressure | Flag allowing the user to colour cells by the pressure they experience (1 for active, 0 for inactive). |
| fibre_degradation_rate | Rate of fibre degradation if fibre degradation is turned on via fibre_degradation and the cell is deemed to be stuck. |