The Virtual Cell is a modeling and simulation framework for computational biology. For details see http://vcell.org and http://github.com/virtualcell.
Virtual Cell ODE virtualcell/vcell-ode is a collection of numerical simulation libraries and protocols used to process ODEs in the Virtual Cell framework virtualcell/vcell).
Windows builds require a native compiler. MinGW is not supported. Install Visual Studio Build Tools with the C++ workload and Windows SDK, plus Python 3.10 or newer. Conan 2, CMake 3.16 or newer, and Ninja 1.12 or newer are required; Conan installs CMake and Ninja as build requirements, so they do not need to be installed separately.
From a Visual Studio Developer PowerShell, install Conan and create a detected host profile:
py -m pip install --upgrade conan
$pythonScripts = py -c "import sysconfig; print(sysconfig.get_path('scripts'))"
$env:Path = "$pythonScripts;$env:Path"
conan profile detect --forceIf PowerShell still cannot find conan, run the following once, then open a new
PowerShell window:
$pythonScripts = py -c "import sysconfig; print(sysconfig.get_path('scripts'))"
$userPath = [Environment]::GetEnvironmentVariable('Path', 'User')
[Environment]::SetEnvironmentVariable('Path', "$userPath;$pythonScripts", 'User')Build the solver without messaging:
conan install . --build=missing -o "&:include_messaging=False" -s compiler.cppstd=20
conan build . -s compiler.cppstd=20The recipe invokes CMake and Ninja, and produces the executable and DLL under
build/bin. To use the checked-in LLVM/Clang-CL profile instead, replace the install
command with:
conan install . `
--profile:host conan-profiles/CI-CD/Windows-AMD64_profile.txt `
--profile:build default `
--build=missing -o "&:include_messaging=False" -s:h compiler.cppstd=20
conan build . -s compiler.cppstd=20The checked-in profile requires LLVM/Clang 21 (clang-cl) on PATH and Visual Studio
2022 Build Tools with the v143 toolset. The auto-detected MSVC profile is recommended
when using the compiler supplied by Visual Studio. The checked-in profile is configured
for Visual Studio 2022; it does not target Visual Studio 18.
Messaging is disabled automatically for Windows Conan builds. It remains enabled by
default on Linux and macOS, where the libcurl dependency is supported. The
include_messaging option can be used to disable it on those platforms when needed.
What VCell consumes from this repo, per VCell's solver-repo plan (docs/plan-solver-repos.md in
virtualcell/vcell, §1). Executable: SundialsSolverStandalone_x64
(.exe on Windows), run as SundialsSolverStandalone_x64 <input.cvodeInput|input.idaInput> <output.ida> [-tid <n>].
The solver (CVODE or IDA) is chosen by the input's SOLVER line.
Releases are cut from master: bump version in pyproject.toml, merge, then publish a GitHub
release with tag vX.Y.Z (it must equal the pyproject.toml version, or the build fails). cd.yml then
attaches
| asset | contents |
|---|---|
linux64.tgz |
x86_64, built on manylinux_2_28 (runs on glibc ≥ 2.28); glibc not bundled, other libraries (libc++, …) bundled with a $ORIGIN rpath |
linux64arm.tgz |
aarch64, same |
mac64.tgz |
universal (x86_64 + arm64) executable and dylibs, @loader_path references only, ad-hoc signed |
win64.zip |
x86_64 .exe and DLLs |
win64arm.zip |
arm64 .exe and DLLs |
SHA256SUMS |
sha256 of each asset above |
Each archive is flat: the executable, its bundled libraries, LICENSE and VERSION — no test binaries or
static libraries — and is checked on a clean runner (and on Rocky Linux 8 for linux64.tgz) against the
reference outputs before anything is attached. The release also publishes the Python wheels to PyPI.
The archive builds have messaging OFF (the desktop client reads progress from stdout); they still accept
-tid <n> so VCell's command line is the same everywhere.
Container (container.yml, Dockerfile): ghcr.io/virtualcell/vcell-ode:<X.Y.Z> (and :latest),
linux/amd64 + linux/arm64, a slim debian:trixie-slim runtime stage, built with messaging ON (the input's
JMS_PARAM block plus -tid report status to VCell's broker). The amd64 image is also published as a SIF,
oras://ghcr.io/virtualcell/vcell-ode_singularity:<X.Y.Z>. Pushes to master publish :master and :sha-<short>.
Entrypoint /usr/local/bin/vcell-solver-entrypoint (docker/entrypoint.sh):
no argument or --help prints the version and executables and exits 0; SundialsSolverStandalone_x64 … is
exec'd (exit code and signals pass through); anything else prints usage and exits 2. It writes nothing,
runs as any uid, and works from a read-only SIF, e.g. as VCell's SlurmProxy runs it:
singularity run --containall --bind /path/to/simdata:/simdata vcell-ode_singularity_<X.Y.Z>.sif \
SundialsSolverStandalone_x64 /simdata/SimID_1_0_.cvodeInput /simdata/SimID_1_0_.ida -tid 0Reference outputs (tests/reference/): two CVODE inputs (one with discontinuities and events) and one IDA
DAE input, with the output of the legacy vcell-solvers v0.0.44-dev4 Linux binary. compare_ida.py checks a
run against them (atol 1e-8 × column scale; rtol 1e-5 row by row where the time grids coincide, 1e-4 when the
adaptive steps differ and the run is interpolated onto the reference's time points). CI runs them against every archive, the Docker image (non-root, read-only root,
-tid) and the SIF (apptainer run --containall, bind-mounted /simdata, -tid).