The Cardiovascular system utilizes circuit methodology to characterize the intravascular fluid dynamics throughout the body. More...

#include <Cardiovascular.h>

Inherits SECardiovascularSystem, PulseCardiovascularSystem, and PulseSystem.

Public Member Functions

virtual ~Cardiovascular ()
 
void Clear ()
 
- Public Member Functions inherited from SECardiovascularSystem
 SECardiovascularSystem (Logger *logger)
 
virtual ~SECardiovascularSystem ()
 
virtual const SEScalarGetScalar (const std::string &name)
 
virtual bool HasArterialPressure () const
 
virtual SEScalarPressureGetArterialPressure ()
 
virtual double GetArterialPressure (const PressureUnit &unit) const
 
virtual bool HasBloodVolume () const
 
virtual SEScalarVolumeGetBloodVolume ()
 
virtual double GetBloodVolume (const VolumeUnit &unit) const
 
virtual bool HasCardiacIndex () const
 
virtual SEScalarVolumePerTimeAreaGetCardiacIndex ()
 
virtual double GetCardiacIndex (const VolumePerTimeAreaUnit &unit) const
 
virtual bool HasCardiacOutput () const
 
virtual SEScalarVolumePerTimeGetCardiacOutput ()
 
virtual double GetCardiacOutput (const VolumePerTimeUnit &unit) const
 
virtual bool HasCentralVenousPressure () const
 
virtual SEScalarPressureGetCentralVenousPressure ()
 
virtual double GetCentralVenousPressure (const PressureUnit &unit) const
 
virtual bool HasCerebralBloodFlow () const
 
virtual SEScalarVolumePerTimeGetCerebralBloodFlow ()
 
virtual double GetCerebralBloodFlow (const VolumePerTimeUnit &unit) const
 
virtual bool HasCerebralPerfusionPressure () const
 
virtual SEScalarPressureGetCerebralPerfusionPressure ()
 
virtual double GetCerebralPerfusionPressure (const PressureUnit &unit) const
 
virtual bool HasDiastolicArterialPressure () const
 
virtual SEScalarPressureGetDiastolicArterialPressure ()
 
virtual double GetDiastolicArterialPressure (const PressureUnit &unit) const
 
virtual bool HasHeartEjectionFraction () const
 
virtual SEScalar0To1GetHeartEjectionFraction ()
 
virtual double GetHeartEjectionFraction () const
 
virtual bool HasHeartRate () const
 
virtual SEScalarFrequencyGetHeartRate ()
 
virtual double GetHeartRate (const FrequencyUnit &unit) const
 
virtual eHeartRhythm GetHeartRhythm () const
 
virtual void SetHeartRhythm (eHeartRhythm Rhythm)
 
virtual bool HasHeartStrokeVolume () const
 
virtual SEScalarVolumeGetHeartStrokeVolume ()
 
virtual double GetHeartStrokeVolume (const VolumeUnit &unit) const
 
virtual bool HasIntracranialPressure () const
 
virtual SEScalarPressureGetIntracranialPressure ()
 
virtual double GetIntracranialPressure (const PressureUnit &unit) const
 
virtual bool HasMeanArterialPressure () const
 
virtual SEScalarPressureGetMeanArterialPressure ()
 
virtual double GetMeanArterialPressure (const PressureUnit &unit) const
 
virtual bool HasMeanArterialCarbonDioxidePartialPressure () const
 
virtual SEScalarPressureGetMeanArterialCarbonDioxidePartialPressure ()
 
virtual double GetMeanArterialCarbonDioxidePartialPressure (const PressureUnit &unit) const
 
virtual bool HasMeanArterialCarbonDioxidePartialPressureDelta () const
 
virtual SEScalarPressureGetMeanArterialCarbonDioxidePartialPressureDelta ()
 
virtual double GetMeanArterialCarbonDioxidePartialPressureDelta (const PressureUnit &unit) const
 
virtual bool HasMeanCentralVenousPressure () const
 
virtual SEScalarPressureGetMeanCentralVenousPressure ()
 
virtual double GetMeanCentralVenousPressure (const PressureUnit &unit) const
 
virtual bool HasMeanSkinFlow () const
 
virtual SEScalarVolumePerTimeGetMeanSkinFlow ()
 
virtual double GetMeanSkinFlow (const VolumePerTimeUnit &unit) const
 
virtual bool HasPulmonaryArterialPressure () const
 
virtual SEScalarPressureGetPulmonaryArterialPressure ()
 
virtual double GetPulmonaryArterialPressure (const PressureUnit &unit) const
 
virtual bool HasPulmonaryCapillariesWedgePressure () const
 
virtual SEScalarPressureGetPulmonaryCapillariesWedgePressure ()
 
virtual double GetPulmonaryCapillariesWedgePressure (const PressureUnit &unit) const
 
virtual bool HasPulmonaryDiastolicArterialPressure () const
 
virtual SEScalarPressureGetPulmonaryDiastolicArterialPressure ()
 
virtual double GetPulmonaryDiastolicArterialPressure (const PressureUnit &unit) const
 
virtual bool HasPulmonaryMeanArterialPressure () const
 
virtual SEScalarPressureGetPulmonaryMeanArterialPressure ()
 
virtual double GetPulmonaryMeanArterialPressure (const PressureUnit &unit) const
 
virtual bool HasPulmonaryMeanCapillaryFlow () const
 
virtual SEScalarVolumePerTimeGetPulmonaryMeanCapillaryFlow ()
 
virtual double GetPulmonaryMeanCapillaryFlow (const VolumePerTimeUnit &unit) const
 
virtual bool HasPulmonaryMeanShuntFlow () const
 
virtual SEScalarVolumePerTimeGetPulmonaryMeanShuntFlow ()
 
virtual double GetPulmonaryMeanShuntFlow (const VolumePerTimeUnit &unit) const
 
virtual bool HasPulmonarySystolicArterialPressure () const
 
virtual SEScalarPressureGetPulmonarySystolicArterialPressure ()
 
virtual double GetPulmonarySystolicArterialPressure (const PressureUnit &unit) const
 
virtual bool HasPulmonaryVascularResistance () const
 
virtual SEScalarFlowResistanceGetPulmonaryVascularResistance ()
 
virtual double GetPulmonaryVascularResistance (const FlowResistanceUnit &unit) const
 
virtual bool HasPulmonaryVascularResistanceIndex () const
 
virtual SEScalarPressureTimePerVolumeAreaGetPulmonaryVascularResistanceIndex ()
 
virtual double GetPulmonaryVascularResistanceIndex (const PressureTimePerVolumeAreaUnit &unit) const
 
virtual bool HasPulsePressure () const
 
virtual SEScalarPressureGetPulsePressure ()
 
virtual double GetPulsePressure (const PressureUnit &unit) const
 
virtual bool HasSystolicArterialPressure () const
 
virtual SEScalarPressureGetSystolicArterialPressure ()
 
virtual double GetSystolicArterialPressure (const PressureUnit &unit) const
 
virtual bool HasSystemicVascularResistance () const
 
virtual SEScalarFlowResistanceGetSystemicVascularResistance ()
 
virtual double GetSystemicVascularResistance (const FlowResistanceUnit &unit) const
 
- Public Member Functions inherited from SESystem
 SESystem (Logger *logger)
 
virtual ~SESystem ()
 
- Public Member Functions inherited from Loggable
 Loggable ()
 
 Loggable (Logger *log)
 
virtual ~Loggable ()
 
virtual LoggerGetLogger () const
 
virtual void Debug (std::string const &msg, std::string const &origin=empty) const
 
virtual void Debug (std::stringstream &msg, std::string const &origin=empty) const
 
virtual void Debug (std::ostream &msg, std::string const &origin=empty) const
 
virtual void Info (std::string const &msg, std::string const &origin=empty) const
 
virtual void Info (std::stringstream &msg, std::string const &origin=empty) const
 
virtual void Info (const std::stringstream &msg, std::string const &origin=empty) const
 
virtual void Info (std::ostream &msg, std::string const &origin=empty) const
 
virtual void Warning (std::string const &msg, std::string const &origin=empty) const
 
virtual void Warning (std::stringstream &msg, std::string const &origin=empty) const
 
virtual void Warning (std::ostream &msg, std::string const &origin=empty) const
 
virtual void Error (std::string const &msg, std::string const &origin=empty) const
 
virtual void Error (std::stringstream &msg, std::string const &origin=empty) const
 
virtual void Error (std::ostream &msg, std::string const &origin=empty) const
 
virtual void Fatal (std::string const &msg, std::string const &origin=empty) const
 
virtual void Fatal (std::stringstream &msg, std::string const &origin=empty) const
 
virtual void Fatal (std::ostream &msg, std::string const &origin=empty) const
 

Protected Member Functions

 Cardiovascular (PulseController &data)
 
void Initialize ()
 Initializes system properties. More...
 
void SetUp ()
 Initializes parameters for Cardiovascular Class. More...
 
void AtSteadyState ()
 Cardiovascular system at steady state. More...
 
void PreProcess ()
 Preprocess prepares the cardiovascular system for the circuit solver. More...
 
void Process ()
 Process solves the cardiovascular circuit. More...
 
void PostProcess ()
 Update the cardiovascular circuit. More...
 
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 baroreceptor 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 UpdateHeartRhythm ()
 Determines the heart rhythm. 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 InternalHemorrhagePressureApplication ()
 The internal pressure application function calculates the pressure applied to the aorta due to blood pooling in the abdominal cavity. 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...
 

Protected Attributes

PulseControllerm_data
 
bool m_StartSystole
 
bool m_HeartFlowDetected
 
bool m_EnterCardiacArrest
 
double m_CardiacCyclePeriod_s
 
double m_CurrentCardiacCycleDuration_s
 
double m_LeftHeartElastanceModifier
 
double m_LeftHeartElastance_mmHg_Per_mL
 
double m_LeftHeartElastanceMax_mmHg_Per_mL
 
double m_LeftHeartElastanceMin_mmHg_Per_mL
 
double m_RightHeartElastance_mmHg_Per_mL
 
double m_RightHeartElastanceMax_mmHg_Per_mL
 
double m_RightHeartElastanceMin_mmHg_Per_mL
 
double m_CompressionTime_s
 
double m_CompressionRatio
 
double m_CompressionPeriod_s
 
std::vector< SEFluidCircuitPath * > m_HemorrhagePaths
 
std::vector< SEFluidCircuitPath * > m_InternalHemorrhagePaths
 
std::vector< SELiquidCompartmentLink * > m_HemorrhageLinks
 
std::vector< SELiquidCompartmentLink * > m_InternalHemorrhageLinks
 
double m_CurrentCardiacCycleTime_s
 
double m_CardiacCycleDiastolicVolume_mL
 
double m_CardiacCycleAortaPressureLow_mmHg
 
double m_CardiacCycleAortaPressureHigh_mmHg
 
double m_CardiacCyclePulmonaryArteryPressureLow_mmHg
 
double m_CardiacCyclePulmonaryArteryPressureHigh_mmHg
 
double m_LastCardiacCycleMeanArterialCO2PartialPressure_mmHg
 
double m_CardiacCycleStrokeVolume_mL
 
SERunningAveragem_CardiacCycleArterialPressure_mmHg
 
SERunningAveragem_CardiacCycleArterialCO2PartialPressure_mmHg
 
SERunningAveragem_CardiacCyclePulmonaryCapillariesWedgePressure_mmHg
 
SERunningAveragem_CardiacCyclePulmonaryCapillariesFlow_mL_Per_s
 
SERunningAveragem_CardiacCyclePulmonaryShuntFlow_mL_Per_s
 
SERunningAveragem_CardiacCyclePulmonaryArteryPressure_mmHg
 
SERunningAveragem_CardiacCycleCentralVenousPressure_mmHg
 
SERunningAveragem_CardiacCycleSkinFlow_mL_Per_s
 
double m_dT_s
 
bool m_TuneCircuit = true
 
std::string m_TuningFile
 
double m_minIndividialSystemicResistance__mmHg_s_Per_mL
 
SEFluidCircuitCalculatorm_circuitCalculator
 
SELiquidTransporterm_transporter
 
SEPatientm_patient
 
SEFluidCircuitm_CirculatoryCircuit
 
SELiquidCompartmentGraphm_CirculatoryGraph
 
SEFluidCircuitNodem_MainPulmonaryArteries
 
SEFluidCircuitNodem_LeftHeart2
 
SEFluidCircuitNodem_Ground
 
SEFluidCircuitPathm_AortaCompliance
 
SEFluidCircuitPathm_AortaResistance
 
SEFluidCircuitPathm_VenaCavaCompliance
 
SEFluidCircuitPathm_RightHeartResistance
 
SEFluidCircuitPathm_LeftPulmonaryArteriesToVeins
 
SEFluidCircuitPathm_LeftPulmonaryArteriesToCapillaries
 
SEFluidCircuitPathm_RightPulmonaryArteriesToVeins
 
SEFluidCircuitPathm_RightPulmonaryArteriesToCapillaries
 
SEFluidCircuitPathm_InternalHemorrhageToAorta
 
SEFluidCircuitPathm_pAortaToBone
 
SEFluidCircuitPathm_pAortaToBrain
 
SEFluidCircuitPathm_pBrainToVenaCava
 
SEFluidCircuitPathm_pAortaToLiver
 
SEFluidCircuitPathm_pAortaToLeftKidney
 
SEFluidCircuitPathm_pAortaToLargeIntestine
 
SEFluidCircuitPathm_pAortaToMuscle
 
SEFluidCircuitPathm_pMuscleToVenaCava
 
SEFluidCircuitPathm_pAortaToMyocardium
 
SEFluidCircuitPathm_pMyocardiumToVenaCava
 
SEFluidCircuitPathm_pAortaToRightKidney
 
SEFluidCircuitPathm_pAortaToSkin
 
SEFluidCircuitPathm_pAortaToSmallIntestine
 
SEFluidCircuitPathm_pAortaToSplanchnic
 
SEFluidCircuitPathm_pAortaToSpleen
 
SEFluidCircuitPathm_pGndToPericardium
 
SEFluidCircuitPathm_pPericardiumToGnd
 
SEFluidCircuitPathm_pRightHeartToGnd
 
SEFluidCircuitPathm_pRightHeart
 
SEFluidCircuitPathm_pLeftHeartToGnd
 
SEFluidCircuitPathm_pLeftHeart
 
SEFluidCircuitPathm_LeftHeartToAorta
 
SEFluidCircuitPathm_pBrainResistanceUpstream
 
SEFluidCircuitPathm_pBrainResistanceDownstream
 
SEFluidCircuitPathm_leftRenalArteryPath
 
SEFluidCircuitPathm_rightRenalArteryPath
 
SEFluidCircuitPathm_pGndToAbdominalCavity
 
SEFluidCircuitPathm_pAbdominalCavityToGnd
 
SELiquidCompartmentm_AbdominalCavity
 
SELiquidCompartmentm_Aorta
 
SELiquidSubstanceQuantitym_AortaCO2
 
SELiquidCompartmentm_Brain
 
SELiquidCompartmentm_Groundcmpt
 
SELiquidCompartmentm_LeftHeart
 
SELiquidCompartmentm_LeftPulmonaryCapillaries
 
SELiquidCompartmentm_LeftPulmonaryArteries
 
SELiquidCompartmentm_LeftPulmonaryVeins
 
SELiquidCompartmentm_Pericardium
 
SELiquidCompartmentm_RightHeart
 
SELiquidCompartmentm_RightPulmonaryCapillaries
 
SELiquidCompartmentm_RightPulmonaryArteries
 
SELiquidCompartmentm_RightPulmonaryVeins
 
SELiquidCompartmentm_VenaCava
 
std::vector< SEFluidCircuitPath * > m_systemicResistancePaths
 
std::vector< SEFluidCircuitPath * > m_systemicCompliancePaths
 
- Protected Attributes inherited from SECardiovascularSystem
SEScalarPressurem_ArterialPressure
 
SEScalarVolumem_BloodVolume
 
SEScalarVolumePerTimeAream_CardiacIndex
 
SEScalarVolumePerTimem_CardiacOutput
 
SEScalarPressurem_CentralVenousPressure
 
SEScalarVolumePerTimem_CerebralBloodFlow
 
SEScalarPressurem_CerebralPerfusionPressure
 
SEScalarPressurem_DiastolicArterialPressure
 
SEScalar0To1m_HeartEjectionFraction
 
SEScalarFrequencym_HeartRate
 
eHeartRhythm m_HeartRhythm
 
SEScalarVolumem_HeartStrokeVolume
 
SEScalarPressurem_IntracranialPressure
 
SEScalarPressurem_MeanArterialPressure
 
SEScalarPressurem_MeanArterialCarbonDioxidePartialPressure
 
SEScalarPressurem_MeanArterialCarbonDioxidePartialPressureDelta
 
SEScalarPressurem_MeanCentralVenousPressure
 
SEScalarVolumePerTimem_MeanSkinFlow
 
SEScalarPressurem_PulmonaryArterialPressure
 
SEScalarPressurem_PulmonaryCapillariesWedgePressure
 
SEScalarPressurem_PulmonaryDiastolicArterialPressure
 
SEScalarPressurem_PulmonaryMeanArterialPressure
 
SEScalarVolumePerTimem_PulmonaryMeanCapillaryFlow
 
SEScalarVolumePerTimem_PulmonaryMeanShuntFlow
 
SEScalarPressurem_PulmonarySystolicArterialPressure
 
SEScalarFlowResistancem_PulmonaryVascularResistance
 
SEScalarPressureTimePerVolumeAream_PulmonaryVascularResistanceIndex
 
SEScalarPressurem_PulsePressure
 
SEScalarPressurem_SystolicArterialPressure
 
SEScalarFlowResistancem_SystemicVascularResistance
 
- Protected Attributes inherited from SESystem
std::stringstream m_ss
 
- Protected Attributes inherited from Loggable
Loggerm_Logger
 

Friends

class PBPulsePhysiology
 
class PulseController
 
class PulseEngineTest
 

Additional Inherited Members

- Static Public Member Functions inherited from SESystem
static const SEScalarGetScalar (const std::string &name, std::vector< SESystem *> *systems)
 
- Static Public Attributes inherited from Loggable
static const std::string empty
 

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

◆ Cardiovascular()

Cardiovascular::Cardiovascular ( PulseController data)
protected

◆ ~Cardiovascular()

Cardiovascular::~Cardiovascular ( )
virtual

Member Function Documentation

◆ AdjustVascularTone()

void Cardiovascular::AdjustVascularTone ( )
protected

Adjusts vascular tone due to baroreceptor reflex, drug, and other effects.

Adjusts vascular tone due to baroreceptor reflex, drug, and other effects

Todo:
Add dilation (decreased resistance) to myocardium supply path if myocardium oxygen deficit event is active.
Todo:
We are treating all systemic resistance paths equally, including the brain.

◆ AtSteadyState()

void Cardiovascular::AtSteadyState ( )
protectedvirtual

Cardiovascular system at steady state.

Initializes Cardiovascular conditions if any are present.

  • Anemia
  • Renal Stenosis
  • Heart Failure
  • Pericardial Effusion

Reimplemented from PulseSystem.

◆ BeginCardiacCycle()

void Cardiovascular::BeginCardiacCycle ( )
protected

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 stabiliation period in AtSteadyState()

◆ CalculateAndSetCPRcompressionForce()

void Cardiovascular::CalculateAndSetCPRcompressionForce ( )
protected

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.

◆ CalculateHeartElastance()

void Cardiovascular::CalculateHeartElastance ( )
protected

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. [71]

◆ CalculateHeartRate()

void Cardiovascular::CalculateHeartRate ( )
protected

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.

◆ CalculateVitalSigns()

void Cardiovascular::CalculateVitalSigns ( )
protected

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 65% of its normal value
Event:
Patient: blood loss below 50%, 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. [53]
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: Irreversible State: heart has been in asystole for over 45 min:
Irreversible:
Heart has been in asystole for over 45 min

◆ CardiacArrest()

void Cardiovascular::CardiacArrest ( )
protected

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.

◆ ChronicAnemia()

void Cardiovascular::ChronicAnemia ( )
protected

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.

◆ ChronicHeartFailure()

void Cardiovascular::ChronicHeartFailure ( )
protected

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.

◆ ChronicPericardialEffusion()

void Cardiovascular::ChronicPericardialEffusion ( )
protected

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 Pulse 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.

◆ ChronicRenalStenosis()

void Cardiovascular::ChronicRenalStenosis ( )
protected

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

◆ Clear()

void Cardiovascular::Clear ( )
virtual

Reimplemented from SECardiovascularSystem.

◆ CPR()

void Cardiovascular::CPR ( )
protected

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.

◆ HeartDriver()

void Cardiovascular::HeartDriver ( )
protected

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.

◆ Hemorrhage()

void Cardiovascular::Hemorrhage ( )
protected

The hemorrhage function simulates bleeding from a specified compartment.

The user may specify multiple bleeds across the anatomical compartments. The Model creates a separate bleeding path for each node in each anatomical compartment by volume-weighting the flow. Hemorrhage calls for a compartment that already contains a hemorrhage will be overwritten with the new value. Compartments can overlap.

Todo:
Enforce limits and remove fatal errors.
Error:
Error: Bleeding rate cannot exceed cardiac output
Error:
Error: Bleeding rate cannot be less than zero
Error:
Error: Bleeding must be from a vascular compartment
Error:
Fatal: Bleeding must come from nodes in the circultatory circuit
Error:
Error: Hemorrhage compartments must have nodes in the circulatory circuit

◆ Initialize()

void Cardiovascular::Initialize ( )
protectedvirtual

Initializes system properties.

Reimplemented from PulseSystem.

◆ InternalHemorrhagePressureApplication()

void Cardiovascular::InternalHemorrhagePressureApplication ( )
protected

The internal pressure application function calculates the pressure applied to the aorta due to blood pooling in the abdominal cavity.

The pressure applied to the aorta is dictated by the pressure in the abdominal cavity. The response is tuned to 45% of this value to achieve the correct physiologic response.

◆ MetabolicToneResponse()

void Cardiovascular::MetabolicToneResponse ( )
protected

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.

[76]

Todo:
Skip over Brain and Myocardium and add arms and legs

◆ PericardialEffusion()

void Cardiovascular::PericardialEffusion ( )
protected

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.

◆ PericardialEffusionPressureApplication()

void Cardiovascular::PericardialEffusionPressureApplication ( )
protected

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.

◆ PostProcess()

void Cardiovascular::PostProcess ( )
protectedvirtual

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 PulseSystem.

◆ PreProcess()

void Cardiovascular::PreProcess ( )
protectedvirtual

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 PulseSystem.

◆ Process()

void Cardiovascular::Process ( )
protectedvirtual

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 Pulse Circuit Methodology. Advective substance transport is computed using the Pulse Substance Transport Methodology. Finally, vitals sign data is computed and system data is populated in the CalculateVitalSigns method.

Implements PulseSystem.

◆ ProcessActions()

void Cardiovascular::ProcessActions ( )
protected

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

◆ RecordAndResetCardiacCycle()

void Cardiovascular::RecordAndResetCardiacCycle ( )
protected

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.

◆ SetUp()

void Cardiovascular::SetUp ( )
protectedvirtual

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 PulseSystem.

◆ TraumaticBrainInjury()

void Cardiovascular::TraumaticBrainInjury ( )
protected

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.

◆ TuneCircuit()

void Cardiovascular::TuneCircuit ( )
protected

Tune the cardiovascular circuit during stabilization.

Tunes the resistors and capacitors associated with tissue compartments during stabilization to achieve the requested patient parameters

◆ TunePaths()

void Cardiovascular::TunePaths ( double  systemicResistanceScale,
double  systemicComplianceScale,
double  aortaResistanceScale,
double  aortaComplianceScale,
double  rightHeartResistanceScale,
double  venaCavaComplianceScale 
)
protected

Method that changes path parameters during circuit tuning.

Method that changes path parameters during circuit tuning.

◆ UpdateHeartRhythm()

void Cardiovascular::UpdateHeartRhythm ( )
protected

Determines the heart rhythm.

The heart rhythm is set to either Asystole or NormalSinus based on if the patient has an active cardiac arrest or has triggered the asystole event some other way.

Friends And Related Function Documentation

◆ PBPulsePhysiology

friend class PBPulsePhysiology
friend

◆ PulseController

friend class PulseController
friend

◆ PulseEngineTest

friend class PulseEngineTest
friend

Member Data Documentation

◆ m_AbdominalCavity

SELiquidCompartment* Cardiovascular::m_AbdominalCavity
protected

◆ m_Aorta

SELiquidCompartment* Cardiovascular::m_Aorta
protected

◆ m_AortaCO2

SELiquidSubstanceQuantity* Cardiovascular::m_AortaCO2
protected

◆ m_AortaCompliance

SEFluidCircuitPath* Cardiovascular::m_AortaCompliance
protected

◆ m_AortaResistance

SEFluidCircuitPath* Cardiovascular::m_AortaResistance
protected

◆ m_Brain

SELiquidCompartment* Cardiovascular::m_Brain
protected

◆ m_CardiacCycleAortaPressureHigh_mmHg

double Cardiovascular::m_CardiacCycleAortaPressureHigh_mmHg
protected

◆ m_CardiacCycleAortaPressureLow_mmHg

double Cardiovascular::m_CardiacCycleAortaPressureLow_mmHg
protected

◆ m_CardiacCycleArterialCO2PartialPressure_mmHg

SERunningAverage* Cardiovascular::m_CardiacCycleArterialCO2PartialPressure_mmHg
protected

◆ m_CardiacCycleArterialPressure_mmHg

SERunningAverage* Cardiovascular::m_CardiacCycleArterialPressure_mmHg
protected

◆ m_CardiacCycleCentralVenousPressure_mmHg

SERunningAverage* Cardiovascular::m_CardiacCycleCentralVenousPressure_mmHg
protected

◆ m_CardiacCycleDiastolicVolume_mL

double Cardiovascular::m_CardiacCycleDiastolicVolume_mL
protected

◆ m_CardiacCyclePeriod_s

double Cardiovascular::m_CardiacCyclePeriod_s
protected

◆ m_CardiacCyclePulmonaryArteryPressure_mmHg

SERunningAverage* Cardiovascular::m_CardiacCyclePulmonaryArteryPressure_mmHg
protected

◆ m_CardiacCyclePulmonaryArteryPressureHigh_mmHg

double Cardiovascular::m_CardiacCyclePulmonaryArteryPressureHigh_mmHg
protected

◆ m_CardiacCyclePulmonaryArteryPressureLow_mmHg

double Cardiovascular::m_CardiacCyclePulmonaryArteryPressureLow_mmHg
protected

◆ m_CardiacCyclePulmonaryCapillariesFlow_mL_Per_s

SERunningAverage* Cardiovascular::m_CardiacCyclePulmonaryCapillariesFlow_mL_Per_s
protected

◆ m_CardiacCyclePulmonaryCapillariesWedgePressure_mmHg

SERunningAverage* Cardiovascular::m_CardiacCyclePulmonaryCapillariesWedgePressure_mmHg
protected

◆ m_CardiacCyclePulmonaryShuntFlow_mL_Per_s

SERunningAverage* Cardiovascular::m_CardiacCyclePulmonaryShuntFlow_mL_Per_s
protected

◆ m_CardiacCycleSkinFlow_mL_Per_s

SERunningAverage* Cardiovascular::m_CardiacCycleSkinFlow_mL_Per_s
protected

◆ m_CardiacCycleStrokeVolume_mL

double Cardiovascular::m_CardiacCycleStrokeVolume_mL
protected

◆ m_circuitCalculator

SEFluidCircuitCalculator* Cardiovascular::m_circuitCalculator
protected

◆ m_CirculatoryCircuit

SEFluidCircuit* Cardiovascular::m_CirculatoryCircuit
protected

◆ m_CirculatoryGraph

SELiquidCompartmentGraph* Cardiovascular::m_CirculatoryGraph
protected

◆ m_CompressionPeriod_s

double Cardiovascular::m_CompressionPeriod_s
protected

◆ m_CompressionRatio

double Cardiovascular::m_CompressionRatio
protected

◆ m_CompressionTime_s

double Cardiovascular::m_CompressionTime_s
protected

◆ m_CurrentCardiacCycleDuration_s

double Cardiovascular::m_CurrentCardiacCycleDuration_s
protected

◆ m_CurrentCardiacCycleTime_s

double Cardiovascular::m_CurrentCardiacCycleTime_s
protected

◆ m_data

PulseController& Cardiovascular::m_data
protected

◆ m_dT_s

double Cardiovascular::m_dT_s
protected

◆ m_EnterCardiacArrest

bool Cardiovascular::m_EnterCardiacArrest
protected

◆ m_Ground

SEFluidCircuitNode* Cardiovascular::m_Ground
protected

◆ m_Groundcmpt

SELiquidCompartment* Cardiovascular::m_Groundcmpt
protected

◆ m_HeartFlowDetected

bool Cardiovascular::m_HeartFlowDetected
protected

◆ m_HemorrhageLinks

std::vector<SELiquidCompartmentLink*> Cardiovascular::m_HemorrhageLinks
protected

◆ m_HemorrhagePaths

std::vector<SEFluidCircuitPath*> Cardiovascular::m_HemorrhagePaths
protected

◆ m_InternalHemorrhageLinks

std::vector<SELiquidCompartmentLink*> Cardiovascular::m_InternalHemorrhageLinks
protected

◆ m_InternalHemorrhagePaths

std::vector<SEFluidCircuitPath*> Cardiovascular::m_InternalHemorrhagePaths
protected

◆ m_InternalHemorrhageToAorta

SEFluidCircuitPath* Cardiovascular::m_InternalHemorrhageToAorta
protected

◆ m_LastCardiacCycleMeanArterialCO2PartialPressure_mmHg

double Cardiovascular::m_LastCardiacCycleMeanArterialCO2PartialPressure_mmHg
protected

◆ m_LeftHeart

SELiquidCompartment* Cardiovascular::m_LeftHeart
protected

◆ m_LeftHeart2

SEFluidCircuitNode* Cardiovascular::m_LeftHeart2
protected

◆ m_LeftHeartElastance_mmHg_Per_mL

double Cardiovascular::m_LeftHeartElastance_mmHg_Per_mL
protected

◆ m_LeftHeartElastanceMax_mmHg_Per_mL

double Cardiovascular::m_LeftHeartElastanceMax_mmHg_Per_mL
protected

◆ m_LeftHeartElastanceMin_mmHg_Per_mL

double Cardiovascular::m_LeftHeartElastanceMin_mmHg_Per_mL
protected

◆ m_LeftHeartElastanceModifier

double Cardiovascular::m_LeftHeartElastanceModifier
protected

◆ m_LeftHeartToAorta

SEFluidCircuitPath* Cardiovascular::m_LeftHeartToAorta
protected

◆ m_LeftPulmonaryArteries

SELiquidCompartment* Cardiovascular::m_LeftPulmonaryArteries
protected

◆ m_LeftPulmonaryArteriesToCapillaries

SEFluidCircuitPath* Cardiovascular::m_LeftPulmonaryArteriesToCapillaries
protected

◆ m_LeftPulmonaryArteriesToVeins

SEFluidCircuitPath* Cardiovascular::m_LeftPulmonaryArteriesToVeins
protected

◆ m_LeftPulmonaryCapillaries

SELiquidCompartment* Cardiovascular::m_LeftPulmonaryCapillaries
protected

◆ m_LeftPulmonaryVeins

SELiquidCompartment* Cardiovascular::m_LeftPulmonaryVeins
protected

◆ m_leftRenalArteryPath

SEFluidCircuitPath* Cardiovascular::m_leftRenalArteryPath
protected

◆ m_MainPulmonaryArteries

SEFluidCircuitNode* Cardiovascular::m_MainPulmonaryArteries
protected

◆ m_minIndividialSystemicResistance__mmHg_s_Per_mL

double Cardiovascular::m_minIndividialSystemicResistance__mmHg_s_Per_mL
protected

◆ m_pAbdominalCavityToGnd

SEFluidCircuitPath* Cardiovascular::m_pAbdominalCavityToGnd
protected

◆ m_pAortaToBone

SEFluidCircuitPath* Cardiovascular::m_pAortaToBone
protected

◆ m_pAortaToBrain

SEFluidCircuitPath* Cardiovascular::m_pAortaToBrain
protected

◆ m_pAortaToLargeIntestine

SEFluidCircuitPath* Cardiovascular::m_pAortaToLargeIntestine
protected

◆ m_pAortaToLeftKidney

SEFluidCircuitPath* Cardiovascular::m_pAortaToLeftKidney
protected

◆ m_pAortaToLiver

SEFluidCircuitPath* Cardiovascular::m_pAortaToLiver
protected

◆ m_pAortaToMuscle

SEFluidCircuitPath* Cardiovascular::m_pAortaToMuscle
protected

◆ m_pAortaToMyocardium

SEFluidCircuitPath* Cardiovascular::m_pAortaToMyocardium
protected

◆ m_pAortaToRightKidney

SEFluidCircuitPath* Cardiovascular::m_pAortaToRightKidney
protected

◆ m_pAortaToSkin

SEFluidCircuitPath* Cardiovascular::m_pAortaToSkin
protected

◆ m_pAortaToSmallIntestine

SEFluidCircuitPath* Cardiovascular::m_pAortaToSmallIntestine
protected

◆ m_pAortaToSplanchnic

SEFluidCircuitPath* Cardiovascular::m_pAortaToSplanchnic
protected

◆ m_pAortaToSpleen

SEFluidCircuitPath* Cardiovascular::m_pAortaToSpleen
protected

◆ m_patient

SEPatient* Cardiovascular::m_patient
protected

◆ m_pBrainResistanceDownstream

SEFluidCircuitPath* Cardiovascular::m_pBrainResistanceDownstream
protected

◆ m_pBrainResistanceUpstream

SEFluidCircuitPath* Cardiovascular::m_pBrainResistanceUpstream
protected

◆ m_pBrainToVenaCava

SEFluidCircuitPath* Cardiovascular::m_pBrainToVenaCava
protected

◆ m_Pericardium

SELiquidCompartment* Cardiovascular::m_Pericardium
protected

◆ m_pGndToAbdominalCavity

SEFluidCircuitPath* Cardiovascular::m_pGndToAbdominalCavity
protected

◆ m_pGndToPericardium

SEFluidCircuitPath* Cardiovascular::m_pGndToPericardium
protected

◆ m_pLeftHeart

SEFluidCircuitPath* Cardiovascular::m_pLeftHeart
protected

◆ m_pLeftHeartToGnd

SEFluidCircuitPath* Cardiovascular::m_pLeftHeartToGnd
protected

◆ m_pMuscleToVenaCava

SEFluidCircuitPath* Cardiovascular::m_pMuscleToVenaCava
protected

◆ m_pMyocardiumToVenaCava

SEFluidCircuitPath* Cardiovascular::m_pMyocardiumToVenaCava
protected

◆ m_pPericardiumToGnd

SEFluidCircuitPath* Cardiovascular::m_pPericardiumToGnd
protected

◆ m_pRightHeart

SEFluidCircuitPath* Cardiovascular::m_pRightHeart
protected

◆ m_pRightHeartToGnd

SEFluidCircuitPath* Cardiovascular::m_pRightHeartToGnd
protected

◆ m_RightHeart

SELiquidCompartment* Cardiovascular::m_RightHeart
protected

◆ m_RightHeartElastance_mmHg_Per_mL

double Cardiovascular::m_RightHeartElastance_mmHg_Per_mL
protected

◆ m_RightHeartElastanceMax_mmHg_Per_mL

double Cardiovascular::m_RightHeartElastanceMax_mmHg_Per_mL
protected

◆ m_RightHeartElastanceMin_mmHg_Per_mL

double Cardiovascular::m_RightHeartElastanceMin_mmHg_Per_mL
protected

◆ m_RightHeartResistance

SEFluidCircuitPath* Cardiovascular::m_RightHeartResistance
protected

◆ m_RightPulmonaryArteries

SELiquidCompartment* Cardiovascular::m_RightPulmonaryArteries
protected

◆ m_RightPulmonaryArteriesToCapillaries

SEFluidCircuitPath* Cardiovascular::m_RightPulmonaryArteriesToCapillaries
protected

◆ m_RightPulmonaryArteriesToVeins

SEFluidCircuitPath* Cardiovascular::m_RightPulmonaryArteriesToVeins
protected

◆ m_RightPulmonaryCapillaries

SELiquidCompartment* Cardiovascular::m_RightPulmonaryCapillaries
protected

◆ m_RightPulmonaryVeins

SELiquidCompartment* Cardiovascular::m_RightPulmonaryVeins
protected

◆ m_rightRenalArteryPath

SEFluidCircuitPath* Cardiovascular::m_rightRenalArteryPath
protected

◆ m_StartSystole

bool Cardiovascular::m_StartSystole
protected

◆ m_systemicCompliancePaths

std::vector<SEFluidCircuitPath*> Cardiovascular::m_systemicCompliancePaths
protected

◆ m_systemicResistancePaths

std::vector<SEFluidCircuitPath*> Cardiovascular::m_systemicResistancePaths
protected

◆ m_transporter

SELiquidTransporter* Cardiovascular::m_transporter
protected

◆ m_TuneCircuit

bool Cardiovascular::m_TuneCircuit = true
protected

◆ m_TuningFile

std::string Cardiovascular::m_TuningFile
protected

◆ m_VenaCava

SELiquidCompartment* Cardiovascular::m_VenaCava
protected

◆ m_VenaCavaCompliance

SEFluidCircuitPath* Cardiovascular::m_VenaCavaCompliance
protected