svZeroDSolver
Loading...
Searching...
No Matches
OpenLoopCoronaryVarResBC Class Reference

Open loop coronary boundary condition with time-varying microvascular resistance based on [11]. More...

#include <OpenLoopCoronaryVarResBC.h>

Inheritance diagram for OpenLoopCoronaryVarResBC:
[legend]

Public Member Functions

 OpenLoopCoronaryVarResBC (int id, Model *model)
 Construct a new OpenLoopCoronaryVarResBC object.
Public Member Functions inherited from OpenLoopCoronaryBC
 OpenLoopCoronaryBC (int id, Model *model)
 Construct a new OpenLoopCoronaryBC object.
void setup_dofs (DOFHandler &dofhandler)
 Set up the degrees of freedom (DOF) of the block.
void setup_initial_state_dependent_params (State initial_state, std::vector< double > &parameters)
 Setup parameters that depend on the initial state.
void update_constant (SparseSystem &system, std::vector< double > &parameters)
 Update the constant contributions of the element in a sparse system.
void update_time (SparseSystem &system, std::vector< double > &parameters)
 Update the time-dependent contributions of the element in a sparse system.
virtual ~OpenLoopCoronaryBC ()=default
 Virtual destructor for proper cleanup in derived classes.
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 > &param_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 update_solution (SparseSystem &system, std::vector< double > &parameters, 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.
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.
virtual void set_activation_function (std::unique_ptr< ActivationFunction > af)
 Set activation function (for chamber blocks that use one).

Protected Member Functions

double get_Ram (std::vector< double > &parameters, double time) const override
 Get time-varying microvascular resistance.
Protected Member Functions inherited from OpenLoopCoronaryBC
 OpenLoopCoronaryBC (int id, Model *model, BlockType block_type, const std::vector< std::pair< std::string, InputParameter > > &input_params)
 Protected constructor for derived classes.

Additional Inherited Members

Public Attributes inherited from OpenLoopCoronaryBC
TripletsContributions num_triplets {5, 4, 0}
 Number of triplets of element.
Public Attributes inherited from Block
const int id
 Global ID of the block.
const Modelmodel
 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.
Protected Attributes inherited from OpenLoopCoronaryBC
double P_Cim_0 = 0
 Pressure proximal to Cim/Vim at initial state.
double Pim_0 = 0
 Pim at initial state.

Detailed Description

Open loop coronary boundary condition with time-varying microvascular resistance based on [11].

This model extends the standard open loop coronary BC ([4]) by allowing the microvascular resistance $R_{am}$ to vary with time according to:

\‍[R_{am}(t) = \left[ \left( \sqrt{R_{am,max}} - \sqrt{R_{am,min}} \right)
e(t) + \sqrt{R_{am,min}} \right]^2
\‍]

where $e(t)$ is a time-dependent function:

\‍[e(t) =
\begin{cases}
\dfrac{1}{2}\left[ 1 - \cos\left( \pi \dfrac{t_{cycle}}{T_{vc}} \right)
\right], & 0 \le t_{cycle} \le T_{vc}, \\
\dfrac{1}{2}\left[ 1 + \cos\left( \pi \dfrac{t_{cycle} - T_{vc}}{T_{vr}}
\right) \right], & T_{vc} < t_{cycle} \le T_{vc} + T_{vr}, \\
0, & t_{cycle} > T_{vc} + T_{vr}
\end{cases}
\‍]

where $t_{cycle}$ is the time within the current cardiac cycle.

\‍[\begin{circuitikz} \draw
node[left] {$Q_{in}$} [-latex] (0,0) -- (0.8,0);
\draw (1,0) node[anchor=south]{$P_{in}$}
to [R, l=$R_a$, *-*] (3,0)
to [R, l=$R_{am}(t)$, -] (5,0)
node[anchor=south]{$P_{cim}$}
to [R, l=$R_v$, *-*] (7,0)
node[anchor=south]{$P_{v}$}
(5,0) to [C, l=$C_{im} \;V_{im}$, -*] (5,-1.5)
node[left]{$P_{im}$}
(3,0) to [C, l=$C_a$, -*] (3,-1.5)
node[left]{$P_a$};
\end{circuitikz}
\‍]

Governing equations

Same as OpenLoopCoronaryBC, but with $R_{am}$ replaced by $R_{am}(t)$.

Parameters

Parameter sequence for constructing this block

  • 0 Ra: Small artery resistance
  • 1 Rv: Venous resistance
  • 2 Ca: Small artery capacitance
  • 3 Cim: Intramyocardial capacitance
  • 4 Pim: Intramyocardial pressure (time-dependent)
  • 5 Pv: Venous pressure
  • 6 Ram_min: Minimum microvascular resistance
  • 7 Ram_max: Maximum microvascular resistance
  • 8 T_vc: Contraction time
  • 9 T_vr: Relaxation time

Usage in json configuration file

"boundary_conditions": [
    {
        "bc_name": "OUT",
        "bc_type": "CORONARY_VAR_RES",
        "bc_values": {
            "Ca": 0.0001,
            "Cc": 0.0001,
            "Pim": [
                1000.0,
                1000.0
            ],
            "P_v": 0.0,
            "Ra1": 100.0,
            "Ra2_min": 50.0,
            "Ra2_max": 200.0,
            "Rv1": 100.0,
            "T_vc": 0.2,
            "T_vr": 0.3,
            "t": [
                0.0,
                1.0
            ]
        }
    }
]

Internal variables

Names of internal variables in this block's output:

  • volume_im: Intramyocardial volume

Constructor & Destructor Documentation

◆ OpenLoopCoronaryVarResBC()

OpenLoopCoronaryVarResBC::OpenLoopCoronaryVarResBC ( int id,
Model * model )
inline

Construct a new OpenLoopCoronaryVarResBC object.

Parameters
idGlobal ID of the block
modelThe model to which the block belongs

Member Function Documentation

◆ get_Ram()

double OpenLoopCoronaryVarResBC::get_Ram ( std::vector< double > & parameters,
double time ) const
overrideprotectedvirtual

Get time-varying microvascular resistance.

Overrides base class to provide time-varying resistance based on cardiac cycle phase.

Parameters
parametersParameters of the model
timeCurrent simulation time
Returns
Time-varying resistance Ram(t)

Reimplemented from OpenLoopCoronaryBC.


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