Skip to content

Releases: process-intensification-lab/pyDAC

pyDAC 3.1.0

Choose a tag to compare

@MattiaGalantii MattiaGalantii released this 20 Oct 12:09

pyDAC can now simulate beds other than a packed bed: register your own bed architecture at
run time, as you already can for an isotherm or a kinetic law. This release also fixes a set
of input, plotting and terminal issues. The packed bed is unchanged: its computed results
(trajectories, KPIs, NSGA-II fronts) are bit-identical to 3.0.1.

New

  • pydac.register_bed_architecture(name, entry) registers a bed architecture (a monolith, a
    structured packing, ...). Its BedArchitectureEntry gives the design, the structure, and
    the pressure-drop, dispersion and thermal closures of the bed. pyDAC checks every value the
    closures return before the column uses it. The user guide shows a complete registration and
    what each closure has to give for a monolith:
    Extending pyDAC: a bed architecture.
  • The saved simulation context (schema 3) keeps the two wall coefficients apart: the
    bed-side coefficient h_w and the lumped 1D coefficient. Contexts saved by 3.0.x read in
    the new rows.

Fixed

  • external_htc_W_m2K = 0 is accepted: an adiabatic outer wall.
  • The outlet species figures of a step run show the stream that leaves the outlet, the
    value the KPIs use, instead of the last cell center.
  • Terminal settings: an object value (--set 'sorbent={"density_kg_m3": 800}') changes only
    the fields it gives; species keys match whatever their case; an empty block such as
    grid={} is refused instead of passing silently (a block replaced as one may still be
    empty).
  • NSGA-II refuses a cycle without a desorption step, and warns when a campaign starts
    without any product constraint.
  • An older frozen case written before one of its fields existed is refused with how to
    bring it up to date.
  • Terminal messages print a path inside the working folder relative to it; a path
    elsewhere stays absolute.
  • One qualification lock for Linux and Windows; CI runs on Node 24 actions.

The full list is in the
changelog.

Upgrade

python -m pip install --upgrade pydac3
pydac get-started NEW_FOLDER

The tutorials changed (wording in 01 and 05, printed paths in all seven): get a fresh copy
with pydac get-started into a new folder. Runs written by 3.0.x can be read and reported with 3.1.0; as for any version
change, a run written by 3.0.x is not continued by 3.1.0.

pyDAC 3.0.1

Choose a tag to compare

@MattiaGalantii MattiaGalantii released this 13 Oct 13:54

pyDAC 3.0.1

The pyDAC paper is now available as a preprint on ChemRxiv:
doi:10.26434/chemrxiv.15010382/v1.

This release links it. The code and the results are the same as in 3.0.0.

  • Every mention of the pyDAC paper in the README, the tutorials, the examples and the manual
    links to the preprint.
  • README "How to cite" gives the preprint and the Zenodo concept DOI of the software,
    10.5281/zenodo.23319859 (always the latest version).
  • CITATION.cff lists the preprint in references; the Zenodo record names the third author
    "van Sint Annaland, Martin".
  • The user guide no longer says to install from a clone until pyDAC is on PyPI: it is.

Upgrade with pip install --upgrade pydac3. Runs written by 3.0.0 can be read and reported with
3.0.1; as for any version change, a run written by 3.0.0 is not continued by 3.0.1.

pyDAC 3.0.0

Choose a tag to compare

@MattiaGalantii MattiaGalantii released this 12 Oct 14:39

pyDAC 3.0.0

First public release of pyDAC, a simulator of adsorption-based direct air capture (DAC).
Version 3 is the first one published; earlier versions were internal.

What pyDAC does

  • Solves the coupled mass, energy and momentum balances of a packed sorbent column in 1D or
    2D (axisymmetric), with CVODE (SUNDIALS) and a finite-volume discretization (pymrm).
  • Runs adsorption cycles composed from configurable steps (adsorption, blowdown, heating,
    purge, steam- or wall-heated desorption, cooling, pressurization), by default a
    steam-assisted temperature-vacuum swing adsorption (TVSA) cycle: step by step, or repeated
    until cyclic steady state (CSS).
  • Reports process key performance indicators: CO2 purity and recovery, productivity,
    equivalent work and its breakdown, and the O2 and hot-bed check.
  • Optimizes operating conditions with NSGA-II (pymoo), with checkpoints and exact
    continuation of an interrupted campaign.

How you use it

  • One command, pydac, with steps, css, nsga2, validate and get-started, and the same
    functions from Python (pydac.load_case, run_steps, run_css, run_nsga2, resume,
    report).
  • A case is a JSON document. Start from the built-in defaults and change settings with
    --set, or save a complete case (--export-case) and run it exactly as saved with
    --case. A JSON Schema is included for editor validation and completion.
  • Every run folder is named by the fingerprint of the complete case and saves the case it
    ran (resolved_config.json) and a provenance record: package version, Python and the
    numerically relevant dependency versions. Runs are reproducible without Git.
  • pydac get-started FOLDER copies a starter kit into a new folder: README, licence, citation, the
    user guide and seven tutorials (cases, notebooks with their saved outputs, and the
    validation data).
  • Saved runs can be continued (--resume) or reported again (--report). A continuation
    needs the pyDAC version that wrote the run; reading, replaying and reporting it work with
    any later 3.x release.

Requirements and installation

  • Python 3.11 to 3.14 on Linux (x86_64). Windows is being tested: the full test suite passes
    on Windows with Python 3.14 in CI, but it is not supported yet. macOS is neither tested nor
    supported.
  • CI runs the full test suite on Linux with Python 3.11 (lowest allowed dependency
    versions), 3.12 (the exact lock file, and the base dependencies only), 3.13 and 3.14
    (newest dependency versions), and on Windows with Python 3.14.
  • Install pyDAC in a dedicated environment with python -m pip install pydac3. It pins some
    dependencies exactly (pymrm==2.1.10, scikit-sundae 1.1.x, pandas<3); a shared
    environment can break. The distribution is pydac3; the import and the command are
    pydac. pip install pydac installs an unrelated project.
  • To change pyDAC itself, install it editable from a clone: see CONTRIBUTING.md.

Known limitations

  • pymrm 2.1.10 declares documentation and test tools (Sphinx, pytest, numba, ...) as
    runtime dependencies, so the installation is larger than pyDAC needs.
  • A few tests need the repository files next to tests/; run the test suite from a clone,
    not from the installed package.
  • The H2O GAB isotherm is fitted up to 90 % relative humidity. Above it pyDAC extrapolates
    and prints a warning; the default cycle reaches it briefly during pressurization.
  • The 2D model is the costly one: start with the 1D examples of the guide.

Documentation

  • Start with the tutorials: examples/notebooks/, from 01_first_steps.ipynb in order
    (pydac get-started copies them).
  • README.md: installation and a first run.
  • docs/guide/: the user guide (installation, quick start, cases, running, optimization,
    results, reproducibility, extending).
  • docs/manual/: the reference manual (framework map, inputs, core, discretization,
    equations, cycle steps, post-processing, NSGA-II).
  • CONTRIBUTING.md: working in a clone, tests, extending the model.

Citation and license

MIT license. Please cite pyDAC with the metadata in CITATION.cff. Zenodo archives this
release with its own DOI; the DOI enters CITATION.cff and the README in 3.0.1.