SoftMobility is a Python library for modelling deformable assemblies of spheres in Stokes flows. It is intended for scientific users who want to define soft bodies, compute mobility tensors, run differentiable simulations, and optimize design parameters with JAX.
The package is imported as in Python as softmobility.
The fastest way to get a feel for SoftMobility is to run a notebook
directly in your browser via Google Colab — no clone, fork, or local
install required. The first cell of every notebook installs
SoftMobility from this repository when it detects a Colab runtime
(locally the cell is a no-op).
Click a badge below to launch the corresponding notebook in Colab.
Tutorials (library introduction):
01_assembly_creation02_rigid_mobility03_soft_mobility_simulation04_optimization05_figure_styling
Examples (validation cases & case studies):
01_sinking_rigid_body02_sinking_fiber03_rotating_fiber04_fiber_in_shear05_jeffery_rigid06_jeffery_soft07_three_sphere_swimmer08_soft_surfer
For any notebook not listed above, you can build a Colab URL by hand by
replacing the GitHub URL prefix
https://github.com/C0PEP0D/SoftMobility/blob/ with
https://colab.research.google.com/github/C0PEP0D/SoftMobility/blob/.
SoftMobility requires Python 3.10 or newer. For a new user, the safest path
is to work in an isolated environment. The Sphinx installation page in
the documentation contains the same recipes plus troubleshooting notes
(Apple Silicon, GPU JAX builds, etc.).
Recommended for most users. Inside an isolated environment of your choice:
python -m pip install softmobilityIf you also want to run the bundled tutorials and examples or to modify the library, install from source instead — recipes below.
git clone https://github.com/C0PEP0D/SoftMobility.git
cd SoftMobility
python -m venv .venv
source .venv/bin/activate
python -m pip install --upgrade pip
python -m pip install -e .If you prefer conda (or the faster, drop-in mamba) for environment
management, the recommended pattern is to let conda manage the Python sandbox
and let pip install the package itself — JAX and a few other dependencies
install more reliably from PyPI than from conda-forge:
git clone https://github.com/C0PEP0D/SoftMobility.git
cd SoftMobility
conda create -n softmobility python=3.11
conda activate softmobility
python -m pip install --upgrade pip
python -m pip install -e .Or, equivalently, use the bundled environment.yml (which performs the same
steps in a single command and must be run from the repository root because of
the -e . editable install):
git clone https://github.com/C0PEP0D/SoftMobility.git
cd SoftMobility
conda env create -f environment.yml
conda activate softmobilityVerify the installation:
python -c "import softmobility as sm; print(sm.__version__)"Start with the built-in input and flow objects:
import jax.numpy as jnp
import softmobility as sm
gravity = sm.gravity_field(g=9.81)
flow = sm.shear_flow(shear_rate=1.0)
pos = jnp.array([0.0, 2.0, 0.0])
print(gravity.vector(pos)) # [0, 0, -9.81]
print(flow.velocity(pos)) # [2, 0, 0]
print(flow.gradient(pos)) # velocity-gradient matrixA complete simulation uses three pieces:
sm.SoftBodyfor the deformable sphere assembly.sm.Flowand optionalsm.Fieldorsm.Scalarinputs.sm.FlowBodyRolloutto integrate the body trajectory.
import jax.numpy as jnp
import softmobility as sm
yaml_text = """
dof_names: [x]
design_names: [radius, length, k]
defaults:
x0: 0.1
radius: 0.25
length: 1.0
k: 1.0
spheres:
- radius: radius
position: [-length / 2, 0, 0]
orientation: [0, x0, 0]
torque: [0, -k * x0, 0]
- radius: radius
position: [length / 2, 0, 0]
orientation: [0, -x0, 0]
torque: [0, k * x0, 0]
"""
body = sm.SoftBody(yaml_text, verbose=False)
rollout = sm.FlowBodyRollout(body, sm.no_flow())
positions, orientations, dofs = rollout.rollout(
dt=0.01,
n_steps=100,
init_position=jnp.zeros(3),
init_orientation=jnp.zeros(3),
)The notebooks ship in two folders. softmobility/tutorials contains
pedagogical walk-throughs of the API, while softmobility/examples
collects validation cases against published results and original case
studies. New users should start with tutorials/01_assembly_creation
and work through the tutorials before moving on to the examples.
Tutorials (softmobility/tutorials/)
01_assembly_creation.ipynb— methods to create a sphere assembly02_rigid_mobility.ipynb— mobility properties of a rigid sphere assembly03_soft_mobility_simulation.ipynb— soft mobility tensors and simulation of a trajectory04_optimization.ipynb— optimization principles05_figure_styling.ipynb— paper-figure aesthetics withfigstyle
Examples (softmobility/examples/)
01_sinking_rigid_body.ipynb— sinking trajectory of a rigid body02_sinking_fiber.ipynb— settling flexible fiber03_rotating_fiber.ipynb— rotating elastic fiber04_fiber_in_shear.ipynb— flexible fiber with intrinsic curvature in shear flow05_jeffery_rigid.ipynb— Jeffery orbits of a rigid dumbbell06_jeffery_soft.ipynb— Jeffery orbit of an elastic dumbbell07_three_sphere_swimmer.ipynb— three-sphere swimmer with a passive elastic arm08_soft_surfer.ipynb— soft surfer in Taylor-Green vortices
The Sphinx sources live in docs/source. To build the HTML pages, first
install the development tools (which include Sphinx and its extensions):
pip install -r requirements-dev.txtThen build from the repository root:
make -C docs html
open docs/build/html/index.html # macOS
xdg-open docs/build/html/index.html # LinuxThe strict, warnings-as-errors build that mirrors CI is documented in the
Developers page (docs/source/developers.rst).
Contributions are welcome. The Developers page in the documentation
(docs/source/developers.rst) covers the development install, running the
tests, building the docs strictly, the versioning and release process, and
the policy for opening issues and pull requests. Please read it before
sending a PR.
SoftMobility is distributed under the 3-clause BSD license. See LICENSE
for details.