|
svMultiPhysics
|
Mean-field active stress model (implements the RDQ20-MF formulation). More...
#include <ActiveStressRegazzoni.h>
Classes | |
| class | Parameters |
| Model parameters class. More... | |
Public Member Functions | |
| ActiveStressRegazzoni () | |
| Constructor. | |
| virtual std::unique_ptr< ActiveStressModelParameters > | get_parameters () const override |
| Construct an instance of model parameters. | |
Public Member Functions inherited from ActiveStress | |
| ActiveStress (const unsigned int n_states_, const bool needs_fiber_stretch, const bool needs_fiber_stretch_rate) | |
| Constructor. | |
| virtual | ~ActiveStress ()=default |
| Virtual destructor. | |
| void | read_parameters (const ActiveStressParameters ¶ms) |
| Read model parameters from a parameter object. | |
| void | distribute_parameters (const CmMod &cm_mod, const cmType &cm) |
| Distribute model parameters to all parallel processes. | |
| double | get_tension_fibers (const int idx) const |
| Get the tension along fibers \(\eta_f \Tact\) at a given point. | |
| double | get_tension_sheets (const int idx) const |
| Get the tension along sheets \(\eta_s \Tact\) at a given point. | |
| double | get_tension_sheet_normals (const int idx) const |
| Get the tension along sheet normals \(\eta_n \Tact\) at a given point. | |
| virtual void | init (const unsigned int tnNo) |
| Initialize the model. | |
| virtual void | advance_time_step (const double t, const double dt, const Vector< double > &calcium, const Vector< double > &fiber_stretch, const Vector< double > &fiber_stretch_rate) |
| Advance in time. | |
| bool | needs_fiber_stretch () const |
| Whether this model uses the fiber stretch passed to advance_time_step. This flag can be used to determine whether fiber stretch computation can be skipped for efficiency. | |
| bool | needs_fiber_stretch_rate () const |
| Whether this model uses the fiber stretch rate passed to advance_time_step. This flag can be used to determine whether fiber stretch rate computation can be skipped for efficiency. | |
Static Public Attributes | |
| static const std::string | label = "Regazzoni" |
| Model label, used for factory registration and XML selection. | |
Protected Member Functions | |
| virtual void | read_model_specific_parameters (const ActiveStressModelParameters ¶ms) override |
| Read model parameters from a parameter object. | |
| virtual void | distribute_model_specific_parameters (const CmMod &cm_mod, const cmType &cm) override |
| Distribute model parameters to all parallel processes. | |
| virtual void | init_local (Vector< double > &state) const override |
| Initialize the state vector for a single node. | |
| virtual void | advance_time_step_local (const double t, const double dt, const double calcium, const double fiber_stretch, const double fiber_stretch_rate, Vector< double > &state) const override |
| Advance in time for a single node. | |
| virtual double | compute_active_tension_local (const Vector< double > &state, const double fiber_stretch) const override |
| Compute the scalar active tension for a single node. | |
State vector layout | |
| static constexpr unsigned int | n_ru_states = 16 |
| Number of regulatory-unit (RU) probability states (entries 0-15). | |
| static constexpr unsigned int | n_xb_states = 4 |
| Number of crossbridge (XB) moment states (entries 16-19). | |
| static constexpr unsigned int | n_state_variables = n_ru_states + n_xb_states |
| Total number of state variables. | |
| static constexpr unsigned int | ru_index (unsigned int TL, unsigned int TC, unsigned int TR, unsigned int CC) |
| Flat index of the RU probability state P(TL, TC, TR, CC). | |
| static constexpr unsigned int | xb_index (unsigned int i) |
Flat index of the XB moment state i (in [0, 3]), spanning [16, 19]. | |
Additional Inherited Members | |
Public Attributes inherited from ActiveStress | |
| const unsigned int | n_states |
| Number of state variables for this model. | |
Protected Attributes inherited from ActiveStress | |
| bool | needs_fiber_stretch_ |
| Backing store for needs_fiber_stretch. | |
| bool | needs_fiber_stretch_rate_ |
| Backing store for needs_fiber_stretch_rate. | |
| double | time |
| Current time. Updated whenever calling advance_time_step. | |
| Array< double > | states |
| State variables for the model. | |
| Vector< double > | active_tension |
| Active tension at every node. | |
| double | eta_f |
| Active tension coefficient along the fiber direction. | |
| double | eta_s |
| Active tension coefficient along the sheet direction. | |
| double | eta_n |
| Active tension coefficient along the sheet-normal direction. | |
Mean-field active stress model (implements the RDQ20-MF formulation).
This class implements the mean-field RDQ20-MF sarcomere model of cardiomyocyte force generation of Regazzoni, Dede', and Quarteroni (2020), described in [1] and validated against the authors' reference implementation [2]. The node-local state has 20 variables: 16 regulatory-unit (RU) probabilities (entries 0-15) describing the tropomyosin/troponin configuration of a triplet of neighbouring units, and 4 crossbridge (XB) moments (entries 16-19). The RU probabilities are advanced with an explicit forward-Euler substepping scheme — for every macro time step, a number of smaller sub-steps are taken to update the RU states — and the XB moments with one implicit-Euler step per time step; the active tension is then reconstructed from the XB first moments.
The returned scalar active tension is
\[ \Tact = a_\text{XB} \, (\mu_P^1 + \mu_N^1) \, \phi(SL)\;, \]
where \(\mu_P^1\) and \(\mu_N^1\) are the permissive and non-permissive first XB moments (state entries 17 and 19), \(\phi(SL)\) is the single-overlap fraction of the sarcomere at sarcomere length \(SL = SL_0 \, \fiberstretch\) (with \(\fiberstretch\) the fiber stretch), and \(a_\text{XB}\) is the tension upscaling factor. Because \(\mu_P^1 + \mu_N^1\) and \(\phi(SL)\) are dimensionless, \(a_\text{XB}\) sets the units of the returned active tension.
References:
ActiveStress rather than ActiveStressODE because it requires a customized time-stepping scheme to handle the stiffness of the model.
|
inline |
Constructor.
|
overrideprotectedvirtual |
Advance in time for a single node.
Advances the RU probabilities (entries 0-15) with the forward-Euler substepping scheme and then the XB moments (entries 16-19) with one implicit-Euler step, using the calcium, fiber stretch and fiber-stretch rate at the node.
Implements ActiveStress.
|
overrideprotectedvirtual |
Compute the scalar active tension for a single node.
Evaluates \(\Tact\) as defined in the class description, using fiber_stretch to compute the sarcomere length \(SL = SL_0 \, \fiberstretch\). The returned value has the stress units of \(a_\text{XB}\).
Implements ActiveStress.
|
overrideprotectedvirtual |
Distribute model parameters to all parallel processes.
Implements ActiveStress.
|
inlineoverridevirtual |
Construct an instance of model parameters.
Implements ActiveStress.
|
overrideprotectedvirtual |
Initialize the state vector for a single node.
Sets the state to (1, 0, ..., 0), i.e. all probability mass in the RU state P(0, 0, 0, 0) and all crossbridge moments equal to zero.
| [out] | state | State vector for a single node, to be initialized by this function. |
Implements ActiveStress.
|
overrideprotectedvirtual |
Read model parameters from a parameter object.
Implements ActiveStress.
|
inlinestaticconstexpr |
Flat index of the RU probability state P(TL, TC, TR, CC).
Each argument is 0 or 1 and denotes the state of, respectively, the left tropomyosin unit, the central tropomyosin unit, the right tropomyosin unit and the central troponin (calcium unbound/bound). The ordering matches the reference implementation's serialization (TL outermost, CC innermost) and spans [0, 15].
|
inlinestaticconstexpr |
Flat index of the XB moment state i (in [0, 3]), spanning [16, 19].
|
inlinestatic |
Model label, used for factory registration and XML selection.
|
staticconstexpr |
Number of regulatory-unit (RU) probability states (entries 0-15).
|
staticconstexpr |
Total number of state variables.
|
staticconstexpr |
Number of crossbridge (XB) moment states (entries 16-19).