SimVascular / SimVascular/svMultiPhysics

Implementing Electromechanics Coupling

Open
#523 11 comments 0 reactions 1 assignee View on GitHub

@kko27 is already working on this.

Since Mar 30, 2026.

enhancement
Dominant language
C++
Stars
45
Forks
60
Avg merge
5d 23h
Merged PRs (30d)
11

Description

Problem

svMultiphysics is currently missing coupling between the electrophysiology and mechanics solvers. There is some legacy code (if you look at the cemModelType class) that hints that a coupling scheme was attempted previously. This was re-implemented in C++ in the current codebase without running any tests.

When we couple electrophysiology to mechanics, we typically need an active tension model. This model represents how the actin and myosin filaments in cardiomyocytes form cross-bridges. This dynamic interaction produces the active tension that drives muscle contraction. The cross-bridge interactions are also modulated by the intracellular calcium concentration, which we obtain from the electrophysiology solver as an output. Schematically, we formalize the coupling approach below:
Image
In the current code base, there are legacy active stress and strain routines which have been defined for each EP ionic model. However, these routines are a little behind literature, as the latest models are more biophysically informed (some examples include Land-Niederer [1] models and Regazzoni-Quarteroni [2] models). This motivates the need for an electromechanics coupled approach.

Solution

Several subtasks need to be completed before we can begin to incorporate electromechanics. These are outlined below:

  • Allow users to specify electromechanics coupling physics in the solver.xml input file. This feature is missing and was likely not ported from svFSI.
  • Plot calcium concentrations from EP ionic model to results.vtu files. This ties in with issue #519 as calcium concentration can be used as a heuristic to determine when to temporally delay the active tension activation. Also, note that calcium concentration will be important for validation studies of EP.
  • Computation of the fiber stretch and stretch rates. Fiber stretch calculations currently exist in the post.cpp routine, but this has not been tested. These are critical parameters that are inputs of the active tension model.
  • Implement cellular ODE models of active tension generation. As an initial example, the Land-Niederer active tension model [1] will be used.
  • Active tension generation coupling and integration with solver. An important note to make here is that two coupling approaches exist for electromechanics: (1) Strong Implicit Coupling and (2) Staggered (Segregated) Approaches. Staggered approaches require stabilization while implicit coupling approaches are stable but are intrusive (requires direct modification of tangent matrix). I plan to experiment with both approaches before deciding on how to implement it for other users.
  • Spatial and temporal interpolation routines. These are not critical for this issue but in the future, we will need to implement spatial interpolation so that the EP and mechanics solvers can be solved at different length scales.
Additional context

Key References:

[1] Land, S., Park-Holohan, S.J., Smith, N.P., Dos Remedios, C.G., Kentish, J.C. and Niederer, S.A., 2017. A model of cardiac contraction based on novel measurements of tension development in human cardiomyocytes. Journal of molecular and cellular cardiology, 106, pp.68-83.

[2] Regazzoni, F., Dedè, L. and Quarteroni, A., 2020. Biophysically detailed mathematical models of multiscale cardiac active mechanics. PLoS computational biology, 16(10), p.e1008294.

[3] Regazzoni, F. and Quarteroni, A., 2021. An oscillation-free fully staggered algorithm for velocity-dependent active models of cardiac mechanics. Computer Methods in Applied Mechanics and Engineering, 373, p.113506.

Code of Conduct
  • I agree to follow this project's Code of Conduct and Contributing Guidelines

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.