| svZeroDSolver
    | 
Spherical heart chamber model. More...
#include <ChamberSphere.h>
| Public Types | |
| enum | ParamId { rho = 0 , thick0 = 1 , radius0 = 2 , W1 = 3 , W2 = 4 , eta = 5 , sigma_max = 6 , alpha_max = 7 , alpha_min = 8 , tsys = 9 , tdias = 10 , steepness = 11 } | 
| Local IDs of the parameters.  More... | |
| Public Member Functions | |
| ChamberSphere (int id, Model *model) | |
| Construct a new ChamberSphere object. | |
| void | setup_dofs (DOFHandler &dofhandler) | 
| Set up the degrees of freedom (DOF) of the block. | |
| void | update_constant (SparseSystem &system, std::vector< double > ¶meters) | 
| Update the constant contributions of the element in a sparse system. | |
| void | update_time (SparseSystem &system, std::vector< double > ¶meters) | 
| Update the time-dependent contributions of the element in a sparse system. | |
| void | update_solution (SparseSystem &system, std::vector< double > ¶meters, const Eigen::Matrix< double, Eigen::Dynamic, 1 > &y, const Eigen::Matrix< double, Eigen::Dynamic, 1 > &dy) | 
| Update the solution-dependent contributions of the element in a sparse system. | |
| void | get_elastance_values (std::vector< double > ¶meters) | 
| Update the elastance functions which depend on time. | |
|  Public Member Functions inherited from Block | |
| Block (int id, Model *model, BlockType block_type, BlockClass block_class, std::vector< std::pair< std::string, InputParameter > > input_params) | |
| Construct a new Block object. | |
| ~Block () | |
| Destroy the Block object. | |
| Block (const Block &)=delete | |
| Copy the Block object. | |
| std::string | get_name () | 
| Get the name of the block. | |
| void | update_vessel_type (VesselType type) | 
| Update vessel type of the block. | |
| void | setup_params_ (const std::vector< int > ¶m_ids) | 
| Setup parameter IDs for the block. | |
| void | setup_dofs_ (DOFHandler &dofhandler, int num_equations, const std::list< std::string > &internal_var_names) | 
| Set up the degrees of freedom (DOF) of the block. | |
| virtual void | setup_model_dependent_params () | 
| Setup parameters that depend on the model. | |
| virtual void | setup_initial_state_dependent_params (State initial_state, std::vector< double > ¶meters) | 
| Setup parameters that depend on the initial state. | |
| virtual void | post_solve (Eigen::Matrix< double, Eigen::Dynamic, 1 > &y) | 
| Modify the solution after solving it. | |
| virtual void | update_gradient (Eigen::SparseMatrix< double > &jacobian, Eigen::Matrix< double, Eigen::Dynamic, 1 > &residual, Eigen::Matrix< double, Eigen::Dynamic, 1 > &alpha, std::vector< double > &y, std::vector< double > &dy) | 
| Set the gradient of the block contributions with respect to the parameters. | |
| virtual TripletsContributions | get_num_triplets () | 
| Get number of triplets of element. | |
| Additional Inherited Members | |
|  Public Attributes inherited from Block | |
| const int | id | 
| Global ID of the block. | |
| const Model * | model | 
| The model to which the block belongs. | |
| const BlockType | block_type | 
| Type of this block. | |
| const BlockClass | block_class | 
| Class of this block. | |
| VesselType | vessel_type = VesselType::neither | 
| Vessel type of this block. | |
| const std::vector< std::pair< std::string, InputParameter > > | input_params | 
| Map from name to input parameter. | |
| std::vector< Node * > | inlet_nodes | 
| Inlet nodes. | |
| std::vector< Node * > | outlet_nodes | 
| Outlet nodes. | |
| bool | steady = false | 
| Toggle steady behavior. | |
| bool | input_params_list = false | 
| Are input parameters given as a list? | |
| std::vector< int > | global_param_ids | 
| Global IDs for the block parameters. | |
| std::vector< int > | global_var_ids | 
| Global variable indices of the local element contributions. | |
| std::vector< int > | global_eqn_ids | 
| Global equation indices of the local element contributions. | |
| TripletsContributions | num_triplets | 
| Number of triplets of element. | |
Spherical heart chamber model.
Models the mechanical behavior of a spherical heart chamber with active contraction. For reference, see [1] Equations (13a-b) for continuum mechanics (without length-dependent contraction valves, vessels) and [6] Equations (12-16) for the simplified active contraction model.
Cauchy-Green deformation tensor and time derivative:
![\[  C = \left(1 + \frac{r}{r_0} \right)^2
\]](form_41.png)
![\[  \dot{C} = 2 \left(1 + \frac{r}{r_0} \right) \frac{\dot{r}}{r_0}
\]](form_42.png)
![\[  \rho d_0 \dot{v} + \frac{d_0}{r_0} \left(1 + \frac{r}{r_0} \right) S -
P_\text{out} C = 0
\]](form_43.png)
![\[  -S + \tau + 4 (1 - C^{-3}) (W_1 + C W_2) + 2 \eta \dot{C}
  (1 - 2 C^{-6}) = 0
\]](form_44.png)
![\[  4 \pi r_0^2 Cv - \dot{V} = 0
\]](form_45.png)
![\[  \dot{\tau} + a \tau - \sigma_\text{max} a_+ = 0, \quad a_+ = \max(a, 0),
\quad a = f\alpha_\text{max} + (1 - f)\alpha_\text{min}
\]](form_46.png)
![\[  f = S_+ \cdot S_-, \quad S_\pm = \frac{1}{2} \left(1.0 \pm \text{tanh}\left(
\frac{t - t_\text{sys/dias}} {\gamma} \right) \right)
\]](form_47.png)
![\[  \dot{r} - v = 0
\]](form_48.png)
![\[  Q_\text{in} - Q_\text{out} - \dot{V} = 0
\]](form_49.png)
![\[  P_\text{in} - P_\text{out} = 0
\]](form_50.png)
Parameter sequence for constructing this block:
rho - Density 
thick0 - Wall thickness 
radius0 - Reference radius 
W1 - Material constant 
W2 - Material constant 
eta - Viscosity parameter 
sigma_max - Maximum active stress 
alpha_max - Maximum activation parameter 
alpha_min - Minimum activation parameter 
tsys - Systole timing parameter 
tdias - Diastole timing parameter 
steepness - Activation steepness parameter 
"vessels": [
   {
       "boundary_conditions": {},
       "vessel_id": 1,
       "vessel_length": 1.0,
       "vessel_name": "ventricle",
       "zero_d_element_type": "ChamberSphere",
       "zero_d_element_values": {
           "rho" : 1e3,
           "thick0" : 0.01,
           "radius0" : 0.05,
           "W1" : 10e3,
           "W2" : 40,
           "eta" : 10.0,
           "sigma_max" : 185e3,
           "alpha_max": 30.0,
           "alpha_min": -30.0,
           "tsys": 0.170,
           "tdias": 0.484,
           "steepness": 0.005
       }
   }
]
Names of internal variables in this block's output:
radius - Chamber radius 
velo - Chamber velocity 
stress - Spherical stress 
tau - Active stress 
volume - Chamber volume 
Local IDs of the parameters.
| 
 | inline | 
Construct a new ChamberSphere object.
| id | Global ID of the block | 
| model | The model to which the block belongs | 
| void ChamberSphere::get_elastance_values | ( | std::vector< double > & | parameters | ) | 
Update the elastance functions which depend on time.
| parameters | Parameters of the model | 
| 
 | virtual | 
Set up the degrees of freedom (DOF) of the block.
Set global_var_ids and global_eqn_ids of the element based on the number of equations and the number of internal variables of the element.
| dofhandler | Degree-of-freedom handler to register variables and equations at | 
Reimplemented from Block.
| 
 | virtual | 
Update the constant contributions of the element in a sparse system.
| system | System to update contributions at | 
| parameters | Parameters of the model | 
Reimplemented from Block.
| 
 | virtual | 
Update the solution-dependent contributions of the element in a sparse system.
| system | System to update contributions at | 
| parameters | Parameters of the model | 
| y | Current solution | 
| dy | Current derivate of the solution | 
Reimplemented from Block.
| 
 | virtual | 
Update the time-dependent contributions of the element in a sparse system.
| system | System to update contributions at | 
| parameters | Parameters of the model | 
Reimplemented from Block.