| svZeroDSolver
    | 
Junction between blood vessels. More...
#include <BloodVesselJunction.h>
| Public Member Functions | |
| BloodVesselJunction (int id, Model *model) | |
| Construct a new BloodVesselJunction 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. | |
| virtual 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 | 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. | |
|  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 | update_time (SparseSystem &system, std::vector< double > ¶meters) | 
| Update the time-dependent contributions of the element in a sparse system. | |
| virtual void | post_solve (Eigen::Matrix< double, Eigen::Dynamic, 1 > &y) | 
| Modify the solution after solving it. | |
| virtual TripletsContributions | get_num_triplets () | 
| Get number of triplets of element. | |
| Public Attributes | |
| TripletsContributions | num_triplets | 
| Number of triplets of element. | |
|  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. | |
Junction between blood vessels.
Models a junction with one inlet and arbitrary outlets using modified blood vessel elements between each inlet and outlet pair.
![\[  \begin{circuitikz}
  \draw node[left] {$Q_\text{in}$} [-latex] (0,0) -- (0.8,0);
  \draw (1,0.1) node[anchor=south]{$P_\text{in}$};
  \draw (1,0) to [short, *-] (2.5,0.75);
  \draw (1,0) to [short, *-] (2.5,-0.75);
  \draw (2.5,0.75) node[anchor=south]{} to [generic, l_=$BV_{1}$, -*]
  (4.5,0.75); \draw (2.4,0.75) node[anchor=south]{}; \draw (4.6,0.75)
  node[anchor=south] {$P_{out,1}$}; \draw (2.5,-0.75) node[anchor=south]{}
to
  [generic, l^=$BV_{2}$, -*] (4.5,-0.75); \draw (2.4,-0.75)
  node[anchor=north]{}; \draw (4.6,-0.75) node[anchor=north]
  {$P_{out,2}$}; \draw [-latex] (4.7,0.75) -- (5.5,0.75) node[right]
  {$Q_{out,1}$}; \draw [-latex] (4.7,-0.75) -- (5.5,-0.75) node[right]
  {$Q_{out,2}$}; \end{circuitikz}
\]](form_21.png)
Each blood vessel is modelled as:
![\[  \begin{circuitikz} \draw
  node[left] {$Q_\text{in}$} [-latex] (0,0) -- (0.8,0);
  \draw (1,0) node[anchor=south]{$P_\text{in}$}
  to [R, l=$R$, *-] (3,0)
  to [R, l=$S$, -] (5,0)
  (5,0) to [L, l=$L$, -*] (7,0)
  node[anchor=south]{$P_\text{out}$};
  \draw [-latex] (7.2,0) -- (8,0) node[right] {$Q_\text{out}$};
  \end{circuitikz}
\]](form_22.png)
![\[  Q_\text{in}-\sum_{i}^{n_{outlets}} Q_{out, i} = 0
\]](form_23.png)
![\[  P_\text{in}-P_{\text{out},i} - (R+S|Q_{\text{out},i}|) \cdot Q_{\text{out},i}
  - L \dot{Q}_{\text{out},i} = 0 \quad \forall i \in n_{outlets} \]](form_24.png)
![\[  \mathbf{y}^{e}=\left[\begin{array}{lllllll}P_\text{in} & Q_\text{in}
  & P_{out, 1} & Q_{out, 1} &
  \dots & P_{out, i} & Q_{out, i}\end{array}\right] \]](form_25.png)
![\[  \mathbf{F}^{e} = \left[\begin{array}{ccccccc}
  0 & 1 & 0 & -1 & 0 & -1 & \dots \\
  1 & 0 & -1 & -R_1 & 0 & 0 & \\
  1 & 0 & 0 & 0 & -1 & -R_2 & \\
  \vdots & & & & & & \ddots
  \end{array}\right]
\]](form_26.png)
![\[  \mathbf{E}^{e} = \left[\begin{array}{ccccccc}
  0 & 0 & 0 & 0 & 0 & 0 & \dots \\
  0 & 0 & 0 & -L_1 & 0 & 0 & \\
  0 & 0 & 0 & 0 & 0 & -L_2 & \\
  \vdots & & & & & & \ddots
  \end{array}\right]
\]](form_27.png)
![\[  \mathbf{c}^{e} = \left[\begin{array}{c}
  0 \\
  - S_1 |Q_{\text{in},1}| Q_{\text{in},1} \\
  - S_2 |Q_{\text{in},2}| Q_{\text{in},2} \\
  \vdots
  \end{array}\right] \]](form_28.png)
Gradient of the equations with respect to the parameters:
![\[  \mathbf{J}^{e} = \left[\begin{array}{lllllllll}
  0 & 0 & \dots & 0 & 0 & \dots & 0 & 0 &
  \dots \\
  - y_4 & 0 & \dots & - \dot y_4 & 0 & \dots & |y_4| y_4 & 0 & \dots \\
  0 & - y_6 & \dots & 0 & - \dot y_6 & \dots & 0 & |y_6| y_6 & \dots \\
  0 & 0 & \ddots & 0 & 0 & \ddots & 0 & 0 & \ddots \\
  \end{array}\right]
\]](form_29.png)
Parameter sequence for constructing this block
i Poiseuille resistance for inner blood vessel ii+num_outlets Inductance for inner blood vessel ii+2*num_outlets Stenosis coefficient for inner blood vessel i"junctions": [
    {
        "inlet_vessels": [
            0
        ],
        "junction_name": "J0",
        "junction_type": "BloodVesselJunction",
        "junction_values": {
            "R_poiseuille": [
                100,
                200
            ],
            "C": [
                0.0,
                0.0
            ],
            "L": [
                0.0,
                0.0
            ],
            "stenosis_coefficient": [
                0.0,
                0.0
            ]
        },
        "outlet_vessels": [
            1,
            2
        ]
    }
]
This block has no internal variables.
| 
 | inline | 
Construct a new BloodVesselJunction object.
| id | Global ID of the block | 
| model | The model to which the block belongs | 
| 
 | 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 | 
Set the gradient of the block contributions with respect to the parameters.
| jacobian | Jacobian with respect to the parameters | 
| alpha | Current parameter vector | 
| residual | Residual with respect to the parameters | 
| y | Current solution | 
| dy | Time-derivative of the current solution | 
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.
| TripletsContributions BloodVesselJunction::num_triplets | 
Number of triplets of element.
Number of triplets that the element contributes to the global system (relevant for sparse memory reservation)