Changelog

All notable changes to this project will be documented in this file.

The format is based on Keep a Changelog, openCARP uses a vMAJOR.PATCH versioning scheme. We increase the

  • MAJOR version when we add functionality, and the
  • PATCH version when we make backwards compatible bug fixes

Unreleased

  • When providing a .trc file via the --clamp-file option, bench will now enforce external Vm update instead of updating Vm internally
  • bench now resamples the clamp .trc file with the correct number of points that match the number of dt points in the whole simulation
  • Clamped Vm values will now write correctly to trace and other output files

Added

  • compute repolarization reserve current with bench. See doi:10.1016/j.yjmcc.2020.04.019
  • hiPSC model from Kernik et al.
  • Support for performance monitoring metrics collection in the powercapping framework
  • Current tested versions of dependencies PETSc, Ginkgo and LLVM are documented in .gitlab-ci.yml and used consistently in CI
  • Anisotropic per-element conductivity scaling via gi_scale_vec / ge_scale_vec (issue #385): accepts n=3 files with sl st sn triplets per element applied in the fiber/sheet/normal frame. Scalar n=1 files (one value per element) remain fully supported and backward-compatible.
  • tagfile parameter: ASCII per-element tag override file applied after reading the mesh and before dynamic retagging, allowing tag regions to be changed without rewriting the mesh (#387)
  • gridout_emi parameter for controlling EMI-generated mesh output in simulator/openCARP.prm
  • Lead field ECG computation as a post-processing method (post_proc_opts=leadfield) with associated parameters: LF_I stimulus type for electrode definition, lf_dir for precomputed matrices, lf_vmfile, and ecg_timedt
  • EMI output mesh generation can now be controlled with gridout_emi; EMI mesh output follows the input mesh format and writes binary meshes when binary input meshes are used.
  • Verbose EMI initialization subtimings for mesh setup, mappings, solver setup, output setup, and related phases.
  • CI coverage for 64-bit PETSc-index builds and autotester runs.
  • Auto-detect OpenMP when using Clang on macOS
  • New schema-driven parameter parser infrastructure for openCARP and mesher, generated from the existing .prm schema and emitting generated C++ bindings, JSON schema output, and normalized XML.
  • Support for TOML and JSON parameter files in addition to legacy .par files; +F / --file now dispatch based on file suffix.
  • Long-form command-line aliases alongside legacy + controls, including --help, --doc, --file, --save, --default, and --run.
  • Parameter-scoped documentation via --doc <parameter> / +Doc <parameter>.
  • Citation and example metadata in the parameter schema, propagated into XML output and runtime parameter documentation.
  • Runtime citation suggestions for activated features, including default citations for the openCARP framework paper and software release DOI.
  • Parser-focused CTest/CI coverage for schema generation, runtime parsing, simulator startup, and mesher startup.
  • Basic testing of deb package runtime in CI
  • Allow to pass custom build folder name to make_dynamic_model.sh
  • CI job testing the build of openCARP with Ginkgo and 64-bit support.
  • EMI state checkpointing: EMI simulations can now write *.roe state checkpoints via tsav/chkpt_intv, and resume from them with -start_statef. Each checkpoint also writes a companion bulk-potential field file that is required to restart. (#468)
  • gridout_tags can restrict generated grid output and IGB output to selected region tags; an empty list keeps all tags, and requested tags that are absent from the mesh are warned about and ignored unless none remain.
  • The new parameter parser supports inclusive range syntax for integer array values, such as 100:200, 100:2:200, and comma-separated combinations; expansion happens before automatic num_* count inference.
  • The LIMPET stimulus-assignment regression suite now runs: it gains a run.py/__tests__ definition and, together with the plugin suite, is generated by test discovery in the unified atc_template_limpet.py (replacing the per-suite shims, the em_coupling duplicate of the plugin tests, and the duplicate-node atc_template_additional_limpet.py).

Changed

  • Restructured top-level Makefile for correct parallel builds (make -j), complete ./bin symlinks, proper distclean, and CVODE linking that adapts to PETSc-bundled vs. external installs.
  • Multi-rank restricted IGB output is now written in global-canonical order instead of rank-concatenation order.
  • gridout_i/gridout_e requesting the surface without the volumetric mesh now also write a .pts file for the surface, and the .surf file indexes into it, so that surface data output can be visualized on its own. When the volumetric mesh is requested as well, the .surf file keeps indexing into the points of the volumetric mesh.
  • Reject undersized explicit num_* controllers across input sources
  • Elements whose tag matches no configured region now emit a warning that names the unmatched tag values and the number of affected elements, and explicitly states that these elements are assigned to the default region 0 (previously silent)
  • Removed ineffective *_use_pt (parallel toolbox) parameters
  • Lindblad.model, rabbit atrial myocyte
  • Updated Maleckar.model, renamed previous Maleckar.model -> Fibroblast_Maleckar.model
  • TWorld.model, human ventricular myocyte
  • Added simplified Kirchhoff network example
  • Added safeguard for Ic calculation of first timestep, where no previous Vm value is available
  • PETSc version bumped to 3.25.1
  • The macOS packager now used the PETSc version documented in the CI pipeline
  • Refactored EMI MPI_Exchange()-based merge logic into shared helpers, adding node-aware merge-rank selection to improve scalability on large MPI runs without changing results
  • Reduced EMI PETSc memory use with exact preallocation of EMI matrices/operators and direct resting-potential initialization
  • EMI no longer emits the "elements assigned to default region 0" warning for the intra/extracellular volume mesh, where regions 0 and 1 are the implicit defaults
  • Added compile-time build options to select local index width, global index width, and floating-point precision (OPENCARP_LOCAL_INDEX_BITS, OPENCARP_GLOBAL_INDEX_BITS, OPENCARP_REAL_PRECISION), with consistent propagation through the PETSc and Ginkgo backends.
  • PETSc solver options are now applied with explicit precedence: problem defaults < solver options file < PETSc command-line options passed after +.
  • PETSc vector creation now applies PETSc options, enabling configured vector types such as CUDA vectors when supported by the PETSc build.
  • Relaxed tolerance for Bondarenko and tenTusscherPanfilov IMP tests and som leadfield-5lead comparisons to allow for CPU/GPU jitter
  • openCARP and mesher now use the new parser runtime as the default startup path.
  • The -- command-line syntax is now presented as the recommended interface, while legacy + syntax remains supported for backwards compatibility.
  • Help and documentation output is now schema-driven and provides richer per-parameter information.
  • Parameter count/controller fields such as num_stim, num_imp_regions, and related num_IDs fields can often be inferred automatically and no longer need to be provided explicitly when the input is unambiguous.
  • The parameter XML generation pipeline was streamlined around normalized parser output for manual and website generation.
  • Legacy-compatible startup input is checked against the legacy parser through a detached compatibility gate; mismatches abort by default and provide instructions for issue reporting and temporary legacy fallback.
  • Ordering of parameter groups in openCARP.prm which affects sequence of presentation in the CLI help, the manual and on the webpage.
  • Type $idset in parameter parser, which allows giving ID lists and ranges (e.g. gregion[2].ID = 102:2:108,205,300:305). Indexed legacy input (e.g. gregion[0].ID[1] = 42) still works for backwards compatibility.
  • Vendored muparser was moved from tools/igbutils to third_party/muparser because it is now shared infrastructure used by both igbutils and the schema-driven parser runtime.

Fixed

  • State checkpoints now restart correctly when the data-layout optimization (MLIR vectorized ionic models) is active and the number of MPI ranks differs between checkpoint and restart. Per-IMP ionic state is now stored de-interleaved, one record per node keyed by the node's canonical index (dump format bumped to 3), instead of whole vectorized blocks keyed by a partition-dependent block leader, which previously restored corrupt state (and crashed vectorized lookup-table models) on any cross-rank restart. Affects both nodal electrics and EMI (#468)
  • imp_region[].im_sv_init now initializes all state variables on multi-rank runs regardless of partitioning; previously, when rank 0 owned no nodes of a region the state vector (everything except Vm) was silently left at model defaults on the ranks that did own nodes (#482)
  • adjustment[].dump 1 in multi-rank runs now writes all ranks' data; previously only rank 0's contributions appeared in the dump files.
  • Binaries compiled without the EMI model (-DENABLE_EMI_MODEL=OFF) no longer abort unconditionally at startup; the "EMI not compiled" error now fires only when an EMI physics region is actually requested
  • Linear solver iteration counts and final residuals are now always recorded in par_stats.dat; previously they were only stored when configured with -DENABLE_SOLVER_STATS. The option now only gates extra stdout logging.
  • SVML math vector library detection fixed for MLIR: added an environment variable and CMake option (SVML_PATH). Included its installation and optimized run in MLIR autotester and in the MLIR CPU docker.
  • llvm-lit and FileCheck from the LLVM distribution no longer needed to compile openCARP with MLIR by default, the CMake option ENABLE_TESTING is enabled
  • Compatibility with PETSc 3.25
  • CMake now searches for Ginkgo 2.0.0 first, then falls back to 1.9.0
  • Explicitly locate METIS and ParMETIS headers and libraries in CMake to fix builds where they are installed outside PETSc's prefix, and propagate METIS_DIR / PARMETIS_DIR cache variables so that Ginkgo's bundled FindMETIS / FindParMETIS modules succeed during FetchContent builds
  • Stimulus location handling in experiment 02/07 (thanks @pascal.maierhofer)
  • Fix propagation of CUDA architecture in physics/limpet
  • Fix issue with potentially non supported __float128 references in PETSc
  • LAT detector: previous init_acts_<ID>.dat is now permuted from canonical to PETSc ordering after restart, fixing corrupted and MPI-rank-count-dependent activation times with start_statef
  • igbapd: activation time detection
  • Compatibility with PETSc 64-bit indices in parallel PETSc builds, including shared FEM/PETSc type handling and PETSc option parsing.
  • LIMPET mesh-sized node counts, node lists, and checkpoint canonical node ordering now use openCARP's configured index types instead of hard-coded int.
  • Compatibility of PETSc error handling with both PETSc 3.22 and PETSc 3.25.
  • Generation and propagation of the compile-time type policy header in legacy Makefile and MLIR/CUDA build paths.
  • PETSc parabolic solver setup now uses the requested parabolic convergence norm instead of always reading the elliptic norm parameter.
  • PETSc options-file cleanup preserves legacy openCARP comment markers #, !, and %.
  • PETSc -options_left no longer reports command-line Mat/Vec setup options that were already applied during object creation.
  • Dynamic ionic model builds on Cray now request C++17 consistently with the main build.
  • Out-of-bounds std::array access in the Eikonal LocalSolver::solve() for line and triangle elements (#494)
  • Quoting and save/output behavior for parser-generated parameter snapshots.
  • XML/manual generation regressions that previously produced incomplete or empty parameter documentation output.
  • Support paths with spaces when using make_dynamic_model.sh
  • Support spaces in CMAKE_INSTALL_PREFIX
  • Missing includes in make_dynamic_model.sh for opencarp_types.h (introduced in a5bffe6d) and petsc_utils.h
  • Install autogenerated source file opencarp_types.h (introduced in a5bffe6d)
  • Fix issues on the powercapping subsystem interactions with libhwloc and likwid, and with papi metrics collection.
  • Fix build issue of the powercapping subsystem with the new scheme-based parameter parser infrastructure.
  • Runtime schema validation now evaluates symbolic and expression-based min/max descriptors instead of silently dropping non-literal parameter bounds.
  • Legacy parser comparison now reports when legacy param() rejects normalized input accepted by the new parser, distinguishing validation mismatches from snapshot-helper infrastructure failures.
  • tsav_ext state filenames now use legacy %.1f formatting (500.0, and 500.2 for tsav=500.25), fixing false startup aborts in the legacy comparison gate and wrong checkpoint/restart filenames (#510)
  • Text-typed parameters are compared textually rather than numerically against the legacy snapshot, so quoting differences no longer surface as value mismatches (#510)
  • Schema-expression handling in the new parser no longer depends on exact string matches for TO_STRING(...) and a few hand-written arithmetic forms; expression evaluation now generalizes to arbitrary TO_STRING(...) payloads, generic string ternaries based on strcmp / strncmp, and non-hard-coded numeric arithmetic.
  • Ionic trace files no longer pick up trailing characters from the previously written trace node on platforms that use the BSD fmemopen fallback, which corrupted every Trace_*.dat but the first whenever num_trace exceeded one.
  • The mlir-nvidia Docker image no longer fails to build when carputils' C extensions are recompiled during installation. (#508)

Removed

  • Unsupported interactive parameter mode from the supported parser interface; +I / --interactive are now rejected explicitly.
  • Direct reliance on the legacy param() runtime path during normal startup; the legacy parser is retained only as a temporary comparison/fallback helper for a transition period.
  • Unsupported floating_ground parameter
  • cell_length and purk_cell_length parameters used only to define default stimulus sizes (replaced by prm macro STIM_LENGTH)
  • Unsupported +I/--interactive flag
  • Stale tools/paramschema folder

Known issues

  • Loading and saving checkpoints when using the DREAM model (#397, #398, #400, #401, #402)

[19.0] - 2026-04-01

Added

  • Stress_Niederer11.model, a simpler version of the 06 model
  • Tomek20Land17_DynSarc.model, which includes the improved version of the Tomek.model of 2019 strongly coupled to the Stress_Land17 model
  • Gattoni16Land17_DynSarc.model, which includes the Gattoni 2016 model to simulate the rat ventricular myocyte, strongly coupled to the Stress_Land2017.model
  • Build Jupyterlab Docker image (docker.opencarp.org/opencarp/opencarp/jupyter/lab) for architecture arm64
  • jupyterhub server publicly available for onboarding tutorials (https://opencarp.org/getting-started/onboarding-tutorials)
  • More extensive documentation on adding/adapting ionic models in LIMPET
  • Instructions for accessing and building the user manual
  • Support for the Caliper profiling library (CMake: -DENABLE_CALIPER=on)
  • Added Riz.model to reproduce published bundle (https://doi.org/10.5281/zenodo.17710101)
  • Compile on demand service for ionic models (https://opencarp.org/download/ionic-model-compilation)
  • Exposed parameter stim.pulse.dumpTrace (default to false now)
  • Description of binary file formats .bpts/.belem/.blon
  • EMI physics implementing the extracellular intracellular membrane model (@fatemeh, @aneic, @TobiasG, see manual section 3.4)
  • Exit on loading a dynamic library defining an ionic model with an already taken name
  • More extensive description on how to add new examples
  • igbfilament postprocessing tool to compute phase singularities
  • [CI/CD] autotester job for MLIR + Ginkgo on NVIDIA GPU
  • Powercapping API (see docs/POWERCAPPING.md), not intended for general use yet
  • Add Docker image with openCARP+MLIR+Ginkgo with CUDA support

Fixed

  • CI Spack workflow updated after Spack packages have been moved to a separate repository.
  • Metadata output for ionic models when field names are part of other content fields
  • Fixed inconsistent reference domain for line element shape functions.
  • Vanilla eikonal solver problems (#395 & #396) were fixed.
  • Aliev Panfilov model ionic current scaled properly
  • Surface and volume stimulation now works as expected in eikonal solver.
  • Include SUNDIALS libraries in macOS binary package
  • Avoid redefinition of SUNDIALS targets if they exist already
  • Missing comma in example 02/00
  • Typo in IKATP Ferrero plugin (ADPi)
  • Some notations in the manual
  • Fixed an EMI parallel initialization crash for some MPI decompositions caused by unsafe counter-face map updates during iteration
  • Uniqueness of timer_neq triggers
  • A couple of compiler warnings
  • Documentation in a few examples
  • µ wasn't showing in section 4.1.3 of the manual (coordinates are in µm indeed)
  • Fixed inconsistent reference domain for line element shape functions.

Changed

  • Adopted new FACILE-RS command line interface
  • Bumped ubuntu image from 18.04 to 22.04 in all CI jobs
  • Renamed Stress_Niederer.model to Stress_Niederer06.model
  • Default Ginkgo solver options are now defined in the code rather than in options files
  • Internal variables controlled by flags are not exposed as parameters to users
  • Moved MPI libraries to the end of the linker call in numerics
  • Eikonal and Reaction-Eikonal modes now run in parallel using openMP.
  • Removed unused and unavailable runtime parameters (!388)
  • LIMPET: moved from unordered_map to map for compatibility with most recent LLVM version
  • In the experiments repository, examples were moved from tutorials to examples
  • A fiber orientation .lon file is not required for EMI simulations, so we can have 0, 1 or 2 orientation vectors now
  • Build Jupyter Docker images only on master branch and release tags
  • Refactored direct EMI unique/both-face operator assembly by extracting construct_direct_unique_both_operators and related helpers without changing behavior
  • Removed multiply linked libraries in CMake workflow
  • slimfem/hashmap bumped to C++17
  • Refactor MLIR Docker images. In particular, base the CUDA images on official nvdia/cuda Docker image.
  • Run build_info.py with default rather than empty shell environment (#447)
  • Reordered a couple of examples
  • Made log_msg() safe to call irrespective of MPI and PETSc contexts
  • Improved locating compiler runtime libraries (gfortran, stdc++) in FindPETSc.cmake

Deleted

  • Remove the specific MLIR tests in openCARP, as MLIR is also tested with autotester.

Known issues

  • Loading and saving checkpoints when using the DREAM model (#397, #398, #400, #401, #402)

[18.1] - 2025-08-01

Added

  • Script to install carputils in a virtual environment when BUILD_EXTERNAL is activated in CMake
  • Warning if not all IDs are used for an imp_region
  • Example 02/03f showing how to compute ERP restitution (thanks @patymardi)
  • Examples for eikonal solver
  • Parameter options to change prepacing stimulus at runtime.
  • Support for more built-in stimulus waveforms (square wave, sine wave)
  • dump_data parameter to output additional terms of the monodomain/bidomain equation as igb files
  • Support for more simulation time steps in bench (#386)
  • Added monodomain regression tests for Ginkgo and MLIR CI
  • More extensive documentation for stimulus examples 02/02
  • More background information in the user manual
  • Interactive onboarding tutorials
  • Build and push jupyterhub and jupyterlab Docker images in CI (thanks @jochen)
  • Build and deploy a Docker image for LLVM with CUDA, add CI job for testing openCARP build with MLIR-CUDA
  • More details to the stimulation experiment 02/02 (thanks @moritz.linder)
  • Single cell units table to the user manual (thanks @moritz.linder)

Changed

  • Aborting if not enough IDs are given for an imp_region
  • Aborting if not enough IDs are given for a gregion
  • Restrict automatic execution of xbat CI job to master branch
  • carputils not installed anymore when installing openCARP precompiled packages
  • Slimfem vectors can now be shallow copied also with the Ginkgo backend if intialized without parameters
  • Consistency of variable names regarding voltage and potential

Fixed

  • Adapt Spack package generation to syntax changes in openCARP Spack package
  • Improper boundary conditions in eikonal/reaction-eikonal simulations for certain stimulations
  • Improved error message in Eikonal class when MPI is used at runtime
  • Aligned description of stim.pulse in manual with its implementation
  • Incompatibility of extracellular current stimuli when used in conjunction with stim.crct.balance = 1 and stim.crct.total_current = 1
  • Initializing vectors registered for export with SF::init_vector(&vec) with Ginkgo backend
  • Fixed link errors for MLIR Nvidia docker
  • Fix 'ION_IF_datatypes.h' file not found when compiling in parallel by adding explicit dependency for limpet and limpet_dyn (thanks @grech.kitio)

Known issues

  • Vanilla FIM eikonal solver can stall for volumetric meshes #396

[18.0] - 2025-04-17

Added

  • DREAM model, eikonal and reaction-eikonal solver (https://doi.org/10.1007/s00366-024-02094-9)
  • Bueno-Orovio ionic model
  • AC-cAMP-PKA signalling cascade based on Behar et al. (2016) to Severi and Fabbri sinus node models (thanks @moritz.linder)
  • Better support for MLIR builds on ARM architectures including the SLEEF vector math library (thanks @vincent.loechner)
  • Support for distributed memory Ginkgo numerical backend
  • Documentation of the .bin format
  • Documentation update new stimulus definition + current, conductance and ion concentrations in examples
  • Error when number of entries in the orthotropy .lon file doesn't match number of elements
  • Add device_ptr method to abstract vector to give direct access to GPU memory

Changed

  • Pass PETSC_VERSION as CI variable to Dockerfiles and packager scripts
  • Use Rocky Linux 8 as base package to build RPM package
  • Auto-detect current CUDA architecture (ptx) and GPU capability (sm_) when CUDA is enabled.
  • Set BUILD_SHARED_LIBS to OFF for building the MLIR Passes lib.
  • openCARP Docker image is now based on Ubuntu 22.04, and uses PETSc version 3.22.3.
  • The regular deb package is no longer compatible with Ubuntu 20.04 and Debian 11. A supplementary package tagged ubuntu20 is now generated for these OS.
  • Use compilation optimization -O3 in docker openCARP build
  • MLIR build instructions now based on LLVM 18, added MacOS specific MLIR build instructions (including a patch to LLVM 18)
  • MLIR vector size (and loop unroll factor, data layout inner array size) is no longer an environment variable (MLIR_NUM_ELEMENTS) but the CMake option -DVECTOR_WIDTH=[64|128|256|512], and is auto-detected on the configuration cpu architecture by default, if not specified
  • Ginkgo backend:
    • uses its develop branch
    • Ginkgo is built automatically in the openCARP build process if required but not avaialble
    • Ginkgo matrices are adjusted to support rectangular matrices
  • Upgraded the physics region interface
  • Some readability improvements in the Stimulus code
  • Vector's set method adjusted to enable setting of local indices and to avoid copying entire vectors from the GPU in order to apply stimuli.
  • gregion[].ID[] and imp_region[].ID[] are initialized with -1 instead of 0

Fixed

  • ISO-related concentration responses in sinus node cell models of Fabbri (2017) and Severi (2012) et al. (thanks @moritz.linder)
  • Initialization of old_vm and linear_solver in case of 2nd order time integration (@TobiasG)
  • A number of details in the interface to Ginkgo (@fritzgoebel)
  • Clean OpenMP invocation when cmake flag USE_OPENMP is on
  • Update test_integrators to correct syntax (@TobiasG)
  • Equation to convert stimulus current to concentration change with stim-assign and surface-to-volume (off by 100x)
  • Avoid slowdowns caused by host openMP executors in Ginkgo by using reference executors as host. (@fritzgoebel)
  • Fix type change in PetscTokenFind in PETSc version 3.23
  • Fix installation when using the "install" target in CMake

Removed

  • CMake "SPACK_BUILD" option has been removed

Known issues

  • Some monodomain regression tests are failing when using Ginkgo or MLIR (#382)

[17.0] - 2024-12-21

Added

  • Sinus node cell models of Fabbri (2017) and Severi (2012) et al. + AC-cAMP-PKA signalling cascade based on Behar et al. (2016) (thanks @moritz.linder)
  • Update to new stimulus definition (experiments, regression tests and carputils functions) (thanks @moritz.linder)
  • openCARP Docker image is now built for architectures arm64 and amd64
  • New operations for igbops (intX_t and t_maxX)
  • Bipole mode for igbapd
  • igbtools can be piped together (reading/writing stdin and stdout)
  • Documentation about running openCARP simulations on HPC systems in user manual (thanks @m.houillon)
  • Three onboarding tutorials for single cell using openCARP JupyterLab included
  • Visualisation Example using ParaView (follow up of openCARP User Meeting, thanks @moritz.linder, @christian.goetz, @csales, @hermenegild, @pascal.maierhofer)

Changed

  • Simplified the petsc interface (#352)
  • Reduced Docker image size by 50% (!242, thanks @m.houillon)
  • Remove declaration-only header files from CMakeLists
  • Use current meshtool version
  • Time integration for tension models (#357)
  • Moved MLIR test jobs to CI test stage
  • Use regression test references specified in git submodule also for Ginkgo and MLIR (!263)
  • No more automatic updates of IMP sources in master branch, only warnings

Fixed

  • The deps Docker image was never updated (!242)
  • Surface mesh creation for hexahedral to quad elements (!257)
  • Rare bug when reading multiple state variable files (!259)
  • Support for EasyML heav() and sign() with MLIR (!260)

[16.0] - 2024-08-19

Added

  • Pig model based on Gaur & Vigmond et al. (2021) (thanks @moritz.linder)
  • Support for max function in MLIR builds
  • Support for SUNDIALS v6 and v7
  • Update C++ standard to 17
  • Update LLVM to 18
  • MLIR noground_bidom benchmarks (thanks @huppe) to xbat (formerly Continuous Benchmarking)
  • Add FindSUNDIALS.cmake to support cases where SUNDIALS doesn't provide CMake configuration file
  • A link to make_dynamic_model.sh is created in the bin folder during CMake builds
  • More verbose error message when statefile does not match IMP
  • Flag to enable OHara model modifications as suggested by Michael Clerx (thanks @jorge.sanchez)

Fixed

  • sv_dump in MLIR+DLO build where extra "0" lines were output
  • Conversion of transmembrane charge into concentration (#356)
  • Reference to stimulus file format for bench
  • Fixed gvec output for plugins.

Changed

  • Docker image archives are not stored on the web server anymore, only in the Docker registry.
  • CI artifacts are kept for 12 hours instead of 2
  • Removed duplicate Steward model (Stewart still exists)
  • Changed the initial value of APD90 for restitution curve calculation to work with less depolarized ionic models (thanks @jorge.sanchez)
  • Change in OpenMP activation: the option USE_OPENMP can now take three different values:
    • UTILS (default): OpenMP is activated for igbutils and meshtool
    • OFF: OpenMP is deactivated
    • ON: OpenMP is activated globally
    • Note: this changes the default behavior (before, OpenMP was deactivated by default).
  • Compiler optimization level set to zero for param (issues with Ubuntu 24.04, gcc 13.2.0, glibc 2.39)

[15.0] - 2024-03-18

Added

  • More detailed information on how stimulus currents are treated in chapter 3 of the manual
  • Regression test for stress models
  • Option to calculate cell surface to cell volume ratio (convert stimulus current to concentration change) (thanks @ml0401)
  • Regression test for the feature above (thanks @ml0401)
  • Generic build target defines below for ionic models introduced. By default all targets for a given model are built, define model specific macros to only generate code for specific targets, e.g. ALIEVPANFILOV_MLIR_CPU_GENERATED. Cleaner build logs (#243, !184, thanks @huppe)
    • CPU_GENERATED
    • MLIR_CPU_GENERATED
    • MLIR_ROCM_GENERATED
    • MLIR_CUDA_GENERATED
  • CI job to keep generated IMP sources (physics/limpet/src/imps_src) in sync with .model files (on master)
  • CI job to warn if IMP sources (physics/limpet/src/imps_src) are out of sync with .model files (on non-master branches)
  • Support for non-activating nodes when using prepacing
  • Regression test for non-existing imp regions (#332, thanks @tomas.stary)
  • Documentation for MLIR tests (thanks @huppe)
  • Modifications to OHara model suggested by Michael Clerx (flag CLERX)

Fixed

  • Stress model variables Ca_i renamed to Cai (thanks @jorge.sanchez)
  • Calling of python and shell scripts for dynamic model building now supported with AppImage after extraction
  • Bugs related to IMP data layout optimisation (DLO) (thanks @huppe)
  • The deps Docker image is now built on branches when Dockerfile-deps is modified
  • Correctly convert math function pow to corresponding vector math library function call for MLIR code (thanks @huppe)
  • Fixed buildinfo output
  • Fixed Vm_clamp and GND_ex pulse forms
  • Fixed HodgkinHuxley.model
  • Bug when dumping state variables in DLO builds (thanks @huppe)
  • Enable build in source folders which are not a repository (#351)

Changed

  • State vector extension in bench when validation flag is set true (e.g. OHara.Cai -^ OHara.Cai.bin) (thanks @ml0401)

[14.0] - 2023-12-07

Added

  • latest tag pointing to the most current release (#334)

Changed

  • The documentation of bench commands in the PDF manual is now autogenerated from bench --help
  • Improved documentation for MLIR builds (thanks @vincent.loechner)
  • Major rewrite of LIMPET moving from C to C++ (thanks @Raphael)
  • Deprecated -buildinfo argument, now the build info is printed by default
  • igbapd: linear interpolation of AP start
  • State structure data layout optimization of ionic models (thanks @Raphael)
  • Do --stim-assign preprocessing in bench only once and not per timestep

Fixed

  • ISAC_Hu model was missing some parentheses
  • Missing initialization of pointers to parameter structures in ION_IF.h
  • Include units in PDF and online parameter help
  • make_dynamic_model.sh works with CMake based compilation for CVODE and DEBUG (#330)
  • Compatibility with SUNDIALS v6
  • Checkpointing when data layout optimization (DLO) was enabled (thanks @Raphael)
  • Dynamic models (#310)
  • Incorrect memory copies and memory initialization on GPU when using multiple regions
  • --stim-assign in bench didn't work (#338, thanks @sophiaohnms)
  • Stim species assignment for multiple species with non-equal ratios
  • Linear solver name changed from const char* to std::string to prevent name corruption.

[13.0] - 2023-05-25

Added

  • Elec matrix integration: Added output of element and region info in case of NaN matrix entries. This help with spotting errors in the tissue parametrization (e.g zero fibers or conductivities, deteriorated elements).
  • Ionic models: Added support for AMD code generation with MLIR. Ionic models can now be compiled and ran on AMD GPUs.
  • Compilation of multiple versions of a given ionic model in the same build (see docs/BUILD_WITH_MLIR.md)
  • --target option to select execution platform in bench (see docs/BUILD_WITH_MLIR.md)
  • User manual: Cite carphelp and give an example of usage
  • CI job building openCARP using the provided Makefile

Changed

  • Elec matrix integration: Optimized choice of integration order.
  • CMake process in physics/limpet refactored for readability
  • GPU models can now access data correctly with -DENABLE_MLIR_CODEGEN=DATA_LAYOUT_OPTIMIZATION
  • Use overlay2 as DOCKER_DRIVER in CI pipelines

Fixed

  • Fixed a number of compiler warnings. Now builds clean with clang15.
  • Build process based on plain Makefile.

Known issues

  • Some regression tests are failing when using Ginkgo as the numerical backend (#151)

[12.0] - 2022-12-19

Added

  • New macOS package, compatible with Apple Silicon Macs.
  • Tomek ionic model.
  • Pre-commit hook to generate CITATION.cff from codemeta.json
  • Added Ginkgo numerical backend (use CMake option ENABLE_GINKGO)
  • Added the printout of all parameters with --output-setup option
  • Optimized CPU and GPU code generation for ionic models using MLIR compiler infrastructure (use CMake option ENABLE_MLIR_CODEGEN, see docs/BUILD_WITH_MLIR).

Changed

  • macOS precompiled packages now contain MPICH, shipped with PETSc, like the Linux packages.
  • Continuous Benchmarking can now be run on any branch (commit hash passed to Continuous Benchmarking trigger)
  • Abstraction of interface to numerical backend (vectors etc.)
  • Release step consists of two steps (manual tag pre-vX.Y and automatic tag vX.Y) now to include specific DOI in metadata in repo
  • Steward model renamed to Stewart (fixing a typo in the name)

Fixed

  • cleaned up stim.crct.type and stimulus.stimtype to only contain available stimulus types.
  • --initial flag in example 01/02B

Known issues

  • Some regression tests are failing when using Ginkgo as the numerical backend (#151)

[11.0] - 2022-07-18

Added

  • Control over output domain for (phie, phie_i, and vm) via -dataout_i and -dataout_e.
  • Dedicated, asynchronous IO processes via -num_io_nodes.
  • Support for arctan, atan, sin, floor functions in .model and CellML files
  • CI pipeline extended by Continuous Benchmarking via Megware's framework
  • Modify package generation and include paths in make_dynamic_model.sh to make it usable in precompiled packages (rpm, deb, pkg and AppImage).

Fixed

  • When using cmake to build openCARP with external tools, openMP is disabled in meshtool if it is disabled for openCARP
  • Right-handed coordinate system also for 2D elements in SF::get_transformed_pts() (thanks @jk)
  • Maintenance on tutorials (thanks @joshuasteyer, @jk)
  • CMake aborted when libgfortran wasn't found (thanks @teo.puig)
  • Fix include path hints in make_dynamic_model.sh for the case where openCARP is compiled from sources

[10.0] - 2022-05-30

Added

  • EasyML2mmt.py to faciliatate conversion from .model to .cellml via .mmt, see example 01/11 for detailed instructions
  • Documentation on monodmain and bidomain boundary conditions (sections 3.2 and 3.3 of the manual)
  • Performance stats output for ionics (ODE_stats.dat) and IO (IO_stats.dat) in sim output dir

Changed

  • The AppImage package now contains some helper scripts: one to extract openCARP binaries from the AppImage, the other one to install carputils.
  • In the postinstall phase of cmake, symbolic links created for MPI executables in /usr/local/bin could potentially interfer with an existing installation. These symbolic links were removed and the path to the MPI executable is now configured in carputils settings.
  • openCARP Docker image is now based on Ubuntu 20.04
  • bench --imp-info now also shows plugin metadata
  • Metadata lines in .model files do not need to end with a semicolon anymore
  • Added _build/physics/limpet to make_dynamic_model.sh include directories to be compatible with CMake-based installations

Fixed

  • square(X) and cube(X) in .model files were causing error during code generation when using the Rosenbrock method
  • make_dynamic_model.sh: Skip tests on contents of my_switches.def if it does not exist in install directory
  • Fix the inclusion of MPI executables in Linux precompiled packages
  • Fix documentation pipeline to include Stim structure.
  • Fix error when trying to recompile openCARP after adding a new ionic model
  • Ionic model metadata fields were cut if they contained a colon
  • Made ionic model metadata fields consistent
  • Compilation on macOS with M1 processor
  • Changed xmltree.etree.getchildren() to list(xmltree.etree) for Python3.9 compatibility
  • Better support for exponential notation in CellML files

[9.0] - 2022-02-22

Added

  • Implementation for --stim-species and --stim-ratios parameters in bench
  • Option for OpenMP support in CMake (-DUSE_OPENMP=ON)

Changed

  • Names of ionic models and plugins. See physics/limpet/models/README.md for details of the naming scheme and a mapping from old to new names. Additionally, variables were named consistenly across all available ionic models and plugins.
  • bench: consistently no output of progress to terminal if using --fout irrespective of wheter --validate is being used or not.
  • model files: changed pow(x,2) and pow(x,3) to square(X) and cube(X), respectively.
  • Ensure fibre vectors have unit length (https://git.opencarp.org/openCARP/openCARP/-/merge_requests/73)
  • Courtemanche.model now considers dynamically changing intracellular potassium concentration as in the original publication

Fixed

  • Add missing link to hydra_pmi_proxy in /usr/local/bin in postinstall phase for MPICH
  • Kurata et al. ionic model
  • mesher fiber generation for off-center meshes (https://git.opencarp.org/openCARP/openCARP/-/issues/132)
  • Loading of external IMPs when openCARP is built with -DNDEBUG flag

[8.2] - 2021-12-18

Added

  • Add CI jobs for testing (on schedule) and releasing openCARP Spack package when a new version is released.
  • Added libjpeg as a dependency in CPack for being able to install pillow python package
  • Documentation for the installation of openCARP via Spack.
  • Optional building igbdft, required FFTW3 library
  • --buildinfo flag for bench
  • Added autotester pipeline
  • Added AppImage building and release

[8.1] - 2021-10-01

Fixed

  • Fixed bench not starting when tracing is used.
  • Fixed trace output granularity.

[8.0] - 2021-09-23

Added

  • Added trace functionality.
  • Added human readable interpretations of PETSc solver divergence errors.
  • Automatically add dropdown entries on webpage (parameters, doxygen, test reports) for release versions.

Fixed

  • Many fixes and improvements.

[7.0] - 2021-06-29

Added

  • Pathmanathan & Gray cell model for test cases with analytical solution
  • Loewe-Lutz-Fabbri-Severi cell model (human sinus node)
  • Extended documentation on gvec[] parameters
  • A filename given as parameter can now be given with its extension
  • Warning in header to not change auto-generated files in simulator
  • Numerical schemes as chapter 29 of the user manual

Changed

  • Default PETSc linear solver options set more sensibly.
  • limpet/common.py module renamed to limpet/limpetcommon.py for better compatibility with other common modules
  • Ionic model code is only re-generated in the CMake compilation when changes are present (determined per model)
  • Types of some parameters of type string but corresponding to file names to RFile/WFile
  • carp.prm was renamed to openCARP.prm as well as the auto-generated files in simulator

Fixed

  • Adjustments per node were only applied to the first node of the mesh.

[6.0] - 2021-05-17

Added

  • illumination ionics interface and IchR2 model supporting it
  • Bench parameter --start-out to control first output time step
  • dump_vtx option for stimuli

Fixed

  • Archiving of releases in the RADAR repository
  • mesher fix for 2D mesh lon files.
  • many fixes throughout the codebase.
  • CI fixes.

[5.0] - 2021-01-20

Fixed

  • CVODE related fixes.

Added

  • Added EasyML function rand01(): random number in range [0,1]
  • Header to restitution*.dat files generated by bench (starting with '# ')
  • Added stim[].ptcl.stimlist to specify list of stimulation times.
  • Documentation on units for currents on the single cell level.

[4.0] - 2020-09-29

Fixed

  • Several fixes to FEM integration.

Added

  • External projects (carputils, examples, and meshtool) in the packages.
  • Added support for Prism and Pyramid element types.
  • Added support for per-element conductivity scaling.
  • Added support for element renumbering and element-based input data.

Changed

  • Restructured docker files, merged user-version and developer-version docker images.

[3.2] - 2020-07-13

Added

  • mMS ionic model.
  • Increased robustness of im_param option by applying whitespace removal to option string.
  • CI improvements.

Fixed

  • Fixed write_statef option not working.
  • Fixed dynamic model building workflow.

[3.1] - 2020-06-18

Added

  • MacOS installer.

[3.0] - 2020-06-17

Added

  • Support for heterogenous electrode strength scaling via stimulus[].vtx_fcn (legacy stim) and stim[].elec.vtx_fcn (new stim format).

Fixed

  • Fixes to igbapd. It is now more consistent in its output handling.

Changed

  • Exposed more state vars in COURTEMANCHE model.
  • CI updates.
  • Reworked index and indexed data reading.

[2.0] - 2020-05-09

Added

  • Python3 support complete.
  • Added support for different (i.e. non-PETSc) matrix and solver implementations.
  • KDtree partitioner is faster and requires less memory.

Fixed

  • Fixed MacCannell_Fb_plug and I_KATP models.
  • Laplace solver only requires extracellular mesh.
  • Many fixes and optimizations to the cmake building and packaging workflow.

Changed

  • CONTRIBUTORS.md is now CONTRIBUTORS.yml, which will also be used to generate the metadata for archives of the releases.
  • Exposed TT2.Gto limpet variable.
  • Build-time code generation now uses python3.

[1.2] - 2020-03-17

Fixed

  • adjust_MIIF_variable now tells the user what adjustment went wrong.

Added

  • Added gridout_p for partitioning output.

Removed

  • Removed some unsupported simulator parameters.

Changed

  • Further improved python3 compatibility.
  • Improved message output for gridout.

[1.1] - 2020-03-05

Fixed

  • Dynamic ionic model loading was fixed.

Changed

  • Many python scripts are now python3 compatible. The transition is not complete yet.

[1.0] - 2020-03-03

  • Initial public release

© Copyright 2020 openCARP project    Supported by DFG and EuroHPC    Contact    Imprint and data protection