Skip to main content

Python package to compute the mobility of a soft body in Stokes flows.

Project description

Test status

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.

Try the notebooks online

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):

  • colab-t01 01_assembly_creation

  • colab-t02 02_rigid_mobility

  • colab-t03 03_soft_mobility_simulation

  • colab-t04 04_optimization

  • colab-t05 05_figure_styling

Examples (validation cases & case studies):

  • colab-e01 01_sinking_rigid_body

  • colab-e02 02_sinking_fiber

  • colab-e03 03_rotating_fiber

  • colab-e04 04_fiber_in_shear

  • colab-e05 05_jeffery_rigid

  • colab-e06 06_jeffery_soft

  • colab-e07 07_three_sphere_swimmer

  • colab-e08 08_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/.

Installation

SoftMobility requires Python 3.10 or newer. For a new user, the safest path is to work in an isolated environment. Two equivalent recipes follow — pick the one that matches the tooling you already use. The Sphinx installation page in the documentation contains the same recipes plus troubleshooting notes (Apple Silicon, GPU JAX builds, etc.).

With venv

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 .

With conda

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 softmobility

Verify the installation:

python -c "import softmobility as sm; print(sm.__version__)"

Quick Start

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 matrix

A complete simulation uses three pieces:

  1. sm.SoftBody for the deformable sphere assembly.

  2. sm.Flow and optional sm.Field or sm.Scalar inputs.

  3. sm.FlowBodyRollout to 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),
)

Tutorials and examples

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 assembly

  • 02_rigid_mobility.ipynb — mobility properties of a rigid sphere assembly

  • 03_soft_mobility_simulation.ipynb — soft mobility tensors and simulation of a trajectory

  • 04_optimization.ipynb — optimization principles

  • 05_figure_styling.ipynb — paper-figure aesthetics with figstyle

Examples (softmobility/examples/)

  • 01_sinking_rigid_body.ipynb — sinking trajectory of a rigid body

  • 02_sinking_fiber.ipynb — settling flexible fiber

  • 03_rotating_fiber.ipynb — rotating elastic fiber

  • 04_fiber_in_shear.ipynb — flexible fiber with intrinsic curvature in shear flow

  • 05_jeffery_rigid.ipynb — Jeffery orbits of a rigid dumbbell

  • 06_jeffery_soft.ipynb — Jeffery orbit of an elastic dumbbell

  • 07_three_sphere_swimmer.ipynb — three-sphere swimmer with a passive elastic arm

  • 08_soft_surfer.ipynb — soft surfer in Taylor-Green vortices

Build the documentation locally

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.txt

Then build from the repository root:

make -C docs html
open docs/build/html/index.html        # macOS
xdg-open docs/build/html/index.html    # Linux

The strict, warnings-as-errors build that mirrors CI is documented in the Developers page (docs/source/developers.rst).

Contributing

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.

License

SoftMobility is distributed under the 3-clause BSD license. See LICENSE for details.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

softmobility-1.1.0.tar.gz (119.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

softmobility-1.1.0-py3-none-any.whl (91.7 kB view details)

Uploaded Python 3

File details

Details for the file softmobility-1.1.0.tar.gz.

File metadata

  • Download URL: softmobility-1.1.0.tar.gz
  • Upload date:
  • Size: 119.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for softmobility-1.1.0.tar.gz
Algorithm Hash digest
SHA256 3e66debf27d2e69fbb73749432b5200acf44df82f93b2623b7e83f09b565886e
MD5 4316adc682c2463f1c7f18765a55d6e6
BLAKE2b-256 d15349c70970ab08b170113317a10bef759597d47cf776b52460aa53842b8bb6

See more details on using hashes here.

Provenance

The following attestation bundles were made for softmobility-1.1.0.tar.gz:

Publisher: publish-pypi.yml on C0PEP0D/SoftMobility

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file softmobility-1.1.0-py3-none-any.whl.

File metadata

  • Download URL: softmobility-1.1.0-py3-none-any.whl
  • Upload date:
  • Size: 91.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for softmobility-1.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 21c8c5a9ae741a16997a85d33b3f58e805af1dbc15c522034deb36aae920ecf9
MD5 7c075373d62c6e69b19dd038cf19e3d4
BLAKE2b-256 593319a88fb7bc2dff7dcedbd059b2e4c4b53d4beab4271fbcbb93bbf2c5024b

See more details on using hashes here.

Provenance

The following attestation bundles were made for softmobility-1.1.0-py3-none-any.whl:

Publisher: publish-pypi.yml on C0PEP0D/SoftMobility

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page