The Cardiovascular system utilizes circuit methodology to characterize the intravascular fluid dynamics throughout the body. More...
#include <Cardiovascular.h>
Static Public Member Functions | |
static size_t | TypeHash () |
static constexpr char const *const | TypeTag () |
Static Public Member Functions inherited from biogears::SECardiovascularSystem | |
static size_t | TypeHash () |
static constexpr char const *const | TypeTag () |
Static Public Member Functions inherited from biogears::SESystem | |
static const SEScalar * | GetScalar (const char *name, std::vector< SESystem * > *systems) |
static const SEScalar * | GetScalar (const std::string &name, std::vector< SESystem * > *systems) |
Protected Member Functions | |
Cardiovascular (BioGears &bg) | |
virtual void | Unload (CDM::BioGearsCardiovascularSystemData &data) const |
void | SetUp () override |
Initializes parameters for Cardiovascular Class. More... | |
void | ProcessOverride () |
determine override requirements from user defined inputs More... | |
void | OverrideControlLoop () |
Protected Member Functions inherited from biogears::SECardiovascularSystem | |
void | Unload (CDM::CardiovascularSystemData &data) const |
Protected Member Functions inherited from biogears::SESystem | |
void | Unload (CDM::SystemData &data) const |
Protected Member Functions inherited from biogears::Loggable | |
virtual void | Debug (const char *msg, const char *origin="") const |
virtual void | Debug (const std::string &msg, const std::string &origin=empty) const |
virtual void | Debug (std::ostream &msg, const std::string &origin=empty) const |
virtual void | Info (const char *msg, const char *origin="") const |
virtual void | Info (const std::string &msg, const std::string &origin=empty) const |
virtual void | Info (std::ostream &msg, const std::string &origin=empty) const |
virtual void | Warning (const char *msg, const char *origin="") const |
virtual void | Warning (const std::string &msg, const std::string &origin=empty) const |
virtual void | Warning (std::ostream &msg, const std::string &origin=empty) const |
virtual void | Error (const char *msg, const char *origin="") const |
virtual void | Error (const std::string msg, const std::string origin=empty) const |
virtual void | Error (std::ostream &msg, const std::string &origin=empty) const |
virtual void | Fatal (const char *msg, const char *origin="") const |
virtual void | Fatal (const std::string &msg, const std::string &origin=empty) const |
virtual void | Fatal (std::ostream &msg, const std::string &origin=empty) const |
Protected Member Functions inherited from biogears::BioGearsSystem | |
virtual void | LoadState () |
Static Protected Member Functions | |
static auto | make_unique (BioGears &bg) -> std::unique_ptr< Cardiovascular > |
Private Member Functions | |
void | ChronicRenalStenosis () |
Establishes the renal stenosis condition in one or both of the renal arteries. More... | |
void | ChronicAnemia () |
Establishes the anemia condition by removing hemoglobin and reducing blood viscosity (simulated by vascular resistance reduction). More... | |
void | ChronicHeartFailure () |
Establishes the chronic heart failure condition. More... | |
void | ChronicPericardialEffusion () |
Establishes the pericardial effusion condition. More... | |
void | HeartDriver () |
Calculates the contraction and relaxation of the left and right heart during the cardiac cycle. More... | |
void | AdjustVascularTone () |
Adjusts vascular tone due to Efferent reflex, drug, and other effects. More... | |
void | BeginCardiacCycle () |
Sets up the evolution of the next cardiac cycle. More... | |
void | CalculateHeartElastance () |
Calculation of the left and right ventricular elastance. More... | |
void | TuneCircuit () |
Tune the cardiovascular circuit during stabilization. More... | |
void | TunePaths (double systemicResistanceScale, double systemicComplianceScale, double aortaResistanceScale, double aortaComplianceScale, double rightHeartResistanceScale, double venaCavaComplianceScale) |
Method that changes path parameters during circuit tuning. More... | |
void | MetabolicToneResponse () |
Calculates metabolic and thermal feedback on the systemic vascular tone. More... | |
void | ProcessActions () |
Holds the action methods for the cardiovascular system. More... | |
void | CPR () |
The CPR function controls the force applied during a chest compression action. More... | |
void | CalculateAndSetCPRcompressionForce () |
Calculates and sets the pressure on the heart pressure sources when a CPR compression is applied. More... | |
void | Hemorrhage () |
The hemorrhage function simulates bleeding from a specified compartment. More... | |
void | PericardialEffusion () |
The function initiates a flow source on the pericardium. It is used by both the action and condition. More... | |
void | PericardialEffusionPressureApplication () |
The pericardial effusion pressure application function calculates the pressure applied to the heart due to a pericardial effusion. More... | |
void | CardiacArrest () |
The cardiac arrest action causes the sudden loss of heart function and breathing. More... | |
void | TraumaticBrainInjury () |
The traumatic brain injury action increases flow resistance in the brain. More... | |
void | CalculateVitalSigns () |
CalculateVitalSigns computes and/or updates cardiovascular system level data. More... | |
void | CalculateHeartRate () |
Calculates the heart rate from the period. More... | |
void | RecordAndResetCardiacCycle () |
Sets the systolic and diastolic pressures. More... | |
Friends | |
class | BioGears |
class | BioGearsEngineTest |
Additional Inherited Members | |
Static Public Attributes inherited from biogears::Loggable | |
static const std::string | empty |
static const char * | empty_cStr |
Detailed Description
The Cardiovascular system utilizes circuit methodology to characterize the intravascular fluid dynamics throughout the body.
The Cardiovascular system utilizes circuit methodology to evaluate the hemodynamics throughout the human body. The cardiovascular system consists of a representation of the human vasculature. The heart model is the driving force that creates blood flow through the cardiovascular system. The resulting blood flow is utilized by other physiologic systems as a means of transporting the oxygen, carbon dioxide and other substances throughout the human body. The system may be modified to mimic real world insults and interventions. Due to its interconnectedness with other systems, if alterations are made to the cardiovascular system then the feedback will be felt in the other physiologic systems.
Constructor & Destructor Documentation
|
protected |
|
overridevirtual |
Member Function Documentation
|
private |
Adjusts vascular tone due to Efferent reflex, drug, and other effects.
Adjusts vascular tone due to Efferent reflex, drug, and other effects
- Todo:
- Add dilation (decreased resistance) to myocardium supply path if myocardium oxygen deficit event is active.
|
overridevirtual |
Cardiovascular system at steady state.
Initializes Cardiovascular conditions if any are present.
- Anemia
- Renal Stenosis
- Heart Failure
- Pericardial Effusion
Reimplemented from biogears::BioGearsSystem.
|
private |
Sets up the evolution of the next cardiac cycle.
This function is directed from Cardiovascular::HeartDriver. It set's up the evolution of the proceeding cardiac cycle. It is used to apply the effects of drugs or exercise on the cardiovascular system. These effects will persist for the remainder of the cardiac cycle, at which point this function is called again if a new heart beat is warranted (i.e. not in cardiac arrest).
- Todo:
- need to reset the heart elastance min and max at the end of each stabilization period in AtSteadyState()
|
private |
Calculates and sets the pressure on the heart pressure sources when a CPR compression is applied.
Calculates and sets the pressure on the heart pressure sources when a CPR compression is applied.
SEScalar & biogears::Cardiovascular::CalculateCardiovascularSOFA | ( | ) |
|
private |
Calculation of the left and right ventricular elastance.
This function calculates the left and right ventricular elastance at the current time in the cardiac cycle. The elastance takes the form of a double hill function with a period equivalent to the cardiac cycle length. [93]
|
private |
Calculates the heart rate from the period.
When flow is detected, the heart rate is computed from the cardiac cycle duration. Because a time step is added right before the flow detection (in case the cardiac cycle is continuing) we must peel off the time step here.
|
private |
CalculateVitalSigns computes and/or updates cardiovascular system level data.
Calculate vital signs obtains the pressures in the aorta, pulmonary arteries, pulmonary veins and vena cava. Waveform data for the system, such as arterial pressure, is set every at every time slice. Mean data, such as mean arterial pressure, is set using a running average. Data that are more useful filtered are also set from a running mean. Several events and irreversible states are detected and set by this method.
- Todo:
- Make sure irreversible state is hit before we get here.
- Error:
- Fatal: Diastolic pressure has fallen below -2
- Error:
- Fatal: Systolic pressure has exceeded 700
- Event:
- Patient: Hypovolemic Shock: blood volume below 70% of its normal value
- Event:
- Patient: blood loss below 60%, irreversible state enacted
- Irreversible:
- Over half the patients blood volume has been lost.
- Event:
- Patient: Cardiogenic Shock: Cardiac Index has fallen below 2.2 L/min-m^2, Systolic Arterial Pressure is below 90 mmHg, and Pulmonary Capillary Wedge Pressure is above 15.0. [69]
- Event:
- Patient: Tachycardia: heart rate exceeds 100 beats per minute. This state is alleviated if it decreases below 90.
- Event:
- Patient: Bradycardia: heart rate falls below 60 beats per minute. This state is alleviated if it increases above 65.
- Event:
- Patient: Asystole: Heart Rate has fallen below minimum value and is being set to 0.
- Event:
- Patient: Irreversible State: heart has been in asystole for over 45 min:
- Irreversible:
- Heart has been in asystole for over 45 min
|
private |
The cardiac arrest action causes the sudden loss of heart function and breathing.
Cardiac arrest is the sudden loss of effective blood circulation. When the cardiac arrest action is active, the heart will not beat effectively and breathing will not occur.
|
private |
Establishes the anemia condition by removing hemoglobin and reducing blood viscosity (simulated by vascular resistance reduction).
We are modeling iron deficiency anemia as a chronic reduction in hemoglobin in the blood as well as a reduction in the cardiovascular resistances to lower the systemic vascular resistance that is seen with the reduced viscosity. The oxygen carrying capacity of the blood is reduced due to the decrease in hemoglobin content.
- Error:
- if too much hemoglobin is removed, we will no longer meet validation, so set to maximum amount that can be removed.
|
private |
Establishes the chronic heart failure condition.
Heart failure is a chronic condition that is modeled by a permanent reduction in the left heart contractility. The user may scale the severity of this action with a fraction from 0 to 1, with 0 being non-existent to 1 being severe heart failure.
|
private |
Establishes the pericardial effusion condition.
Pericardial effusion can be either chronic (slow) or acute (fast). Chronic effusion will eventually lead to tamponade, acute effusion leads immediately to tamponade and imminent death. The chronic effusion parameters are set in the BioGears engine so that life-threatening tamponade will occur in about 30 minutes after the insult.
- Error:
- Cannot specify volume accumulation greater than 1000 mL. Accumulated volume is now set at 1000 mL.
- Error:
- Cannot specify volume accumulation less than 0 mL. Accumulated volume is now set at 0 mL.
|
private |
Establishes the renal stenosis condition in one or both of the renal arteries.
Stenosed renal arteries are slightly occluded, which increases the resistance from the aorta to the kidney. This is implemented as a condition, which specifies what percent of the artery is occluded and which artery or arteries are being affected.
- Todo:
- move this to CV
- Error:
- Cannot specify left occlusion fraction less than zero
- Error:
- Cannot specify right occlusion fraction less than zero
- Error:
- Cannot specify left occlusion fraction greater than one
- Error:
- Cannot specify right occlusion fraction greater than one
|
inlineoverridevirtual |
Reimplemented from biogears::SECardiovascularSystem.
|
overridevirtual |
Reimplemented from biogears::SECardiovascularSystem.
|
private |
The CPR function controls the force applied during a chest compression action.
The user may apply a chest compression to continue blood circulation if the heart no longer has an effective rhythm. The compression can either be defined by an explicit force or by a fraction of the maximum allowable force. If the compression input is a force scale then the method controls the shape of the force pulse and converts the force pressure for application to the heart. If the compression input is force, then the raw force is converted to pressure and applied to the heart. The pressure is applied at the pressure source on the LeftHeart3ToGround and RightHeart3ToGround paths in the cardiovascular circuit.
- Error:
- Warning: CPR compression ratio must be a positive value between 0 and 1 inclusive.
|
inlineoverridevirtual |
Reimplemented from biogears::SECardiovascularSystem.
|
private |
Calculates the contraction and relaxation of the left and right heart during the cardiac cycle.
This function tracks the progress of the current cardiac cycle, and modifies the compliance of the left and right heart to drive the cardiovascular circuit. The reduced compliance at the beginning of the cycle acts to increase the pressure, driving flow out of the heart. The compliance is then reduced allowing flow into the heart. This represents the systolic and diastolic portion of the cardiac cycle. The compliance is driven by an elastance equation. This function also keeps track of the cardiac cycle time and calls BeginCardiacCycle() at the start of systole portion of each cycle. Modifications to heart rate and heart compliance are calculated by BeginCardiacCycle() and applied for the remained of the current cardiac cycle. Changes to things like heart rate and heart contractility can only occur at the top of the current cardiac cycle, after the last cardiac cycle has completed. This helps to avoid discontinuous behavior such as the complete cessation of heart function mid contraction.
|
private |
The hemorrhage function simulates bleeding from a specified compartment.
The cardiovascular circuit has paths from each compartment to ground (initially open) that represent bleeding sites. When a hemorrhage is activated, the current pressure at the location and the user specified bleed rate are used to determine a resistance for the appropriate bleeding path. A resistance is set (rather than a flow source) so that pulsatile flow characteristics can be observed and so that bleeding rate diminishes with blood volume. Tourniquets can be applied to the extremities, which increase the resistance on the paths into and out of the heomrrhage compartment.
- Todo:
- Enforce limits and remove fatal errors.
|
overridevirtual |
Initializes system properties.
Reimplemented from biogears::BioGearsSystem.
|
virtual |
|
staticprotected |
|
private |
Calculates metabolic and thermal feedback on the systemic vascular tone.
This method controls the vascular tone response to metabolic changes. As the metabolic rate increases, the resistances to non-vital organs is increased while the resistance to the muscle and skin is reduced, thus increasing heat convective rejection (see Energy::UpdateHeatResistance()). In the case of decreasing core temperature the resistance to the skin is increased to shunt blood flow and reduce heat transfer from the core to skin.
- Todo:
- Possibly add a thermoreception model to nervous and move the computation there.
|
protected |
|
private |
The function initiates a flow source on the pericardium. It is used by both the action and condition.
The pericardial effusion action may be called during run time. It initiates a flow source on the pericardium which leads to increased pericardium volume. As the volume increases, a pressure source is applied to the left and right heart nodes, simulating the restriction of the swelling pericardium.
- Error:
- Effusion rate is out of physiologic bounds. Effusion rate is reset to 1.0 milliliters per second.
- Error:
- Cannot specify effusion rate less than zero. Effusion rate is now set to 0.0.
|
private |
The pericardial effusion pressure application function calculates the pressure applied to the heart due to a pericardial effusion.
The pressure applied to the left and right heart is dictated by the pericardium pressure. The response is tuned to 40% of this value to achieve the correct physiologic response.
|
overridevirtual |
Update the cardiovascular circuit.
The current time-step's circuit solution is set to the next time-step when it is passed to PostProcess.
Implements biogears::BioGearsSystem.
|
overridevirtual |
Preprocess prepares the cardiovascular system for the circuit solver.
This function calculates the appropriate modifications to the cardiovascular circuit for the time within the cardiac cycle and it processes the actions on the cardiovascular system.
Implements biogears::BioGearsSystem.
|
overridevirtual |
Process solves the cardiovascular circuit.
Modifications to the cardiovascular system are made during the preprocess step of the cardiovascular and other systems. The new state of the circuit is solved using BioGears Circuit Methodology. Advective substance transport is computed using the BioGears Substance Transport Methodology. Finally, vitals sign data is computed and system data is populated in the CalculateVitalSigns method.
Implements biogears::BioGearsSystem.
|
private |
Holds the action methods for the cardiovascular system.
This method holds the actions for the CV system so that only one method need be called in preprocess.
- Hemorrhage
- Pericardial Effusion
- CPR
- CardiacArrest
|
protected |
determine override requirements from user defined inputs
User specified override outputs that are specific to the cardiovascular system are implemented here. If overrides aren't present for this system then this function will not be called during preprocess.
|
private |
Sets the systolic and diastolic pressures.
The systemic arterial and pulmonary arterial systolic and diastolic pressures are set here. The variables used to track the maximum and minimum pressures are then reset for the next cardiac cycle.
|
overrideprotectedvirtual |
Initializes parameters for Cardiovascular Class.
Initializes member variables and system level values on the common data model.
- Todo:
- We are assuming that the complex renal system is connected. Make it agnostic.
Implements biogears::BioGearsSystem.
|
private |
The traumatic brain injury action increases flow resistance in the brain.
The user may specify a brain injury of varying severity to apply during runtime. The brain resistance is scaled based on severity, which impacts flow and pressure in the brain, simulating the effects of a non-localized brain injury.
|
private |
Tune the cardiovascular circuit during stabilization.
Tunes the resistors and capacitors associated with tissue compartments during stabilization to achieve the requested patient parameters
|
private |
Method that changes path parameters during circuit tuning.
Method that changes path parameters during circuit tuning.
|
inlinestatic |
|
inlinestatic |
|
overridevirtual |
Reimplemented from biogears::SECardiovascularSystem.
|
protectedvirtual |
Friends And Related Function Documentation
|
friend |
|
friend |
Member Data Documentation
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
protected |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |