svMultiPhysics
Loading...
Searching...
No Matches
Classes | Public Member Functions | Static Public Attributes | Protected Member Functions | List of all members
ActiveStressRegazzoni Class Reference

Mean-field active stress model (implements the RDQ20-MF formulation). More...

#include <ActiveStressRegazzoni.h>

Inheritance diagram for ActiveStressRegazzoni:
[legend]

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 &params)
 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 &params) 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.
 

Detailed Description

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:

  1. Regazzoni, Dede', Quarteroni (2020)
  2. F. Regazzoni, cardiac-activation reference implementation
Note
Although this model is governed by a system of ODEs, it inherits from ActiveStress rather than ActiveStressODE because it requires a customized time-stepping scheme to handle the stiffness of the model.
Todo:
Force-strain-rate feedback requires a stabilization strategy for robust use in coupled electromechanics. This will be addressed in a follow-up PR.

Constructor & Destructor Documentation

◆ ActiveStressRegazzoni()

ActiveStressRegazzoni::ActiveStressRegazzoni ( )
inline

Constructor.

Member Function Documentation

◆ advance_time_step_local()

void ActiveStressRegazzoni::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
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.

◆ compute_active_tension_local()

double ActiveStressRegazzoni::compute_active_tension_local ( const Vector< double > &  state,
const double  fiber_stretch 
) const
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.

◆ distribute_model_specific_parameters()

void ActiveStressRegazzoni::distribute_model_specific_parameters ( const CmMod &  cm_mod,
const cmType &  cm 
)
overrideprotectedvirtual

Distribute model parameters to all parallel processes.

Implements ActiveStress.

◆ get_parameters()

virtual std::unique_ptr< ActiveStressModelParameters > ActiveStressRegazzoni::get_parameters ( ) const
inlineoverridevirtual

Construct an instance of model parameters.

Implements ActiveStress.

◆ init_local()

void ActiveStressRegazzoni::init_local ( Vector< double > &  state) const
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.

Parameters
[out]stateState vector for a single node, to be initialized by this function.

Implements ActiveStress.

◆ read_model_specific_parameters()

void ActiveStressRegazzoni::read_model_specific_parameters ( const ActiveStressModelParameters &  params)
overrideprotectedvirtual

Read model parameters from a parameter object.

Implements ActiveStress.

◆ ru_index()

static constexpr unsigned int ActiveStressRegazzoni::ru_index ( unsigned int  TL,
unsigned int  TC,
unsigned int  TR,
unsigned int  CC 
)
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].

◆ xb_index()

static constexpr unsigned int ActiveStressRegazzoni::xb_index ( unsigned int  i)
inlinestaticconstexpr

Flat index of the XB moment state i (in [0, 3]), spanning [16, 19].

Member Data Documentation

◆ label

const std::string ActiveStressRegazzoni::label = "Regazzoni"
inlinestatic

Model label, used for factory registration and XML selection.

◆ n_ru_states

constexpr unsigned int ActiveStressRegazzoni::n_ru_states = 16
staticconstexpr

Number of regulatory-unit (RU) probability states (entries 0-15).

◆ n_state_variables

constexpr unsigned int ActiveStressRegazzoni::n_state_variables = n_ru_states + n_xb_states
staticconstexpr

Total number of state variables.

◆ n_xb_states

constexpr unsigned int ActiveStressRegazzoni::n_xb_states = 4
staticconstexpr

Number of crossbridge (XB) moment states (entries 16-19).


The documentation for this class was generated from the following files: