News

openCARP September Digest

This post summarizes all developments that made its way into the master branch in the last month. The headline is that Ginkgo solves that fail to converge now stop the run, where before they carried on silently.

Nothing below is released yet: v20.0 went out on 1 September and everything since lives on
master, so you only see it with a fresh build from source.

Affects your simulations

  • Ginkgo runs that fail to converge now abort. If a Ginkgo linear solve hits its iteration limit
    or produces NaN/Inf, openCARP now stops with "solver failed to converge", just as PETSc already
    did. Before, the bad solution was accepted silently. The second-order parabolic solver
    (parab_solve = 2) now aborts the same way on every backend. What to do: a Ginkgo or
    parab_solve = 2 run that "worked" before and aborts now was producing unconverged results.
    Tighten the solver settings or reduce the time step, and do not trust old output from that setup. (!541, #544)
  • imp_region[].im_sv_dumps and imp_region[].plug_sv_dumps are gone, along with their
    imp_region_emi[] counterparts. openCARP created those files but never wrote anything to them.
    carputils has dropped the matching im_sv_dumps field. What to do: delete these lines from your
    .par files and scripts, because openCARP now rejects them as unknown parameters. Use gvec[] for
    state-variable output. (!549, #539, carputils !142)
  • EMI and bidomain potentials can shift by a constant. When a solve has no unique solution
    (EMI, or a bidomain elliptic solve with no ground), the constant component is now removed after
    the solve on both PETSc and Ginkgo. EMI singular solves also subtract the global mean. EMI
    volumetric I_ex/I_in stimuli are now scaled in full precision, which removes a small
    net-current imbalance in balanced source-sink setups. What to do: expect absolute potentials in
    these setups to differ from older runs. Compare differences, not absolute values. (!481, #497)
  • IGB files from a restarted run now carry the correct start time. After a restart from a
    checkpoint, the IGB header's time origin is the restart time; before, it was 0. What to do: if
    your post-processing adds the restart time to these files by hand, remove that offset or you will
    apply it twice. (commit a8155e0e)
  • Self-compiled ionic model libraries must be rebuilt. A fix to bench --doppel-on changed the
    interface shared by all ionic models. What to do: if you load your own models as shared
    libraries (DLOPEN, make_dynamic_model.sh), rebuild them after updating openCARP. (!489, #502)
  • Known issue on current master: bench --numstim is ignored. The Lapicque change (below)
    sets the number of stimuli from --bcl, so a normal bench run paces every bcl for the whole
    --duration instead of firing the requested number of beats. What to do: if you build bench
    from master, use --stim-times to fix the stimulus count until this is corrected, or check your
    traces. (!534)

New capabilities

  • Strength-duration (Lapicque) curves in bench. For each of --Lapicque N stimulus durations,
    log-spaced from --Lap-min to --Lap-max ms, bench prepaces the cell (--Lap-numstim beats at
    --Lap-bcl) and then bisects for the threshold current. Results go to --Lap-file (default
    stdout). (!534)
  • State-variable output in EMI. gvec[] now works in EMI simulations. Values are written per
    membrane face, using the same gvec[i].ID[j] syntax as mono-/bidomain, where j refers to
    imp_region_emi[j]. (!542)
  • Larger EMI meshes. EMI setup no longer replicates face lookups on every rank. That removes a
    hard limit of about 2 billion unique faces and reduces per-rank memory during setup. (!478, #484)
  • carputils Stimulus gains pulse.dumpTrace, which exposes openCARP's
    stim[i].pulse.dumpTrace so you can write the stimulus waveform from a model-component script. (carputils !140)

Fixed

  • *bench --imp-sv-dump and --plug-sv-dump files were named `.bin.bin.** They now get a single.bin` suffix. (!549, #539)
  • carputils PEERP ignored the meshtool path in your settings file and failed when meshtool
    was not on PATH. It now uses the configured path. (carputils !137, carputils #167)

Both fixes need an updated build or install.

Under the hood

7 changes to release, packaging, docs and build infrastructure. Two worth knowing: installation is
now tested on Debian 13, Ubuntu 26.04, Fedora 44 and Rocky Linux 10, with Debian 11 still covered
(!531, #538). The carputils changelog had the lead-field stimulus type wrong; it is LF_I
(crct.type = 13), not LeadField_I / 12 (carputils !140). The rest is the v20.0 release itself, Doxygen
headers, and work on the experimental powercapping manager (controller-based policy, Likwid on
AMD Zen 3, a PAPI CMake typo).

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