What’s New in the Pulse Physiology Engine 4.4.0
×
TissueModel.h
1/* Distributed under the Apache License, Version 2.0.
2 See accompanying NOTICE file for details.*/
3
4#pragma once
5
6#include "engine/common/system/Model.h"
7#include "engine/common/system/Systems.h"
8
9class SESubstance;
16
17namespace pulse
18{
19 class PBPhysiology;
20 class EngineTest;
28 class PULSE_DECL TissueModel : public TissueSystem, public Model
29 {
30 friend PBPhysiology;//friend the serialization class
31 friend EngineTest;
32 public:
33 TissueModel(Data& data);
34 virtual ~TissueModel();
35
36 void Clear() override;
37
38 // Set members to a stable homeostatic state
39 void Initialize() override;
40 // Set pointers and other member variables common to both homeostatic initialization and loading a state
41 void SetUp() override;
42
43 void AtSteadyState() override;
44 void PreProcess() override;
45 void Process(bool solve_and_transport = true) override;
46 void PostProcess(bool solve_and_transport = true) override;
47
48 protected:
49 void ComputeExposedModelParameters() override;
50
51 // Preprocess Methods
52 void ProduceAlbumin(double duration_s);
53 void Dehydration();
54 void Burn();
55 void ApplyBurnTissueModifiers(SEFluidCircuitPath* resistancePath, SEFluidCircuitPath* compliancePath, double burnEffect, double modifier);
56
57 /*Tissue System*/
58 void CalculateMetabolicConsumptionAndProduction(double time);
59 void GlucoseLipidControl(double time);
60
61 /*Process Methods*/
62 void CalculateDiffusion();
63 void CalculatePulmonaryCapillarySubstanceTransfer();
64 void CalculateVitals();
65
66 /*Postprocess Methods*/
67
68 /*Diffusion Utilities*/
69 void DistributeMassbyVolumeWeighted(SELiquidCompartment& cmpt, const SESubstance& sub, double mass, const MassUnit& unit);
70 void DistributeMassbyMassWeighted(SELiquidCompartment& cmpt, const SESubstance& sub, double mass, const MassUnit& unit);
71
72 double PerfusionLimitedDiffusion(SETissueCompartment& tissue, SELiquidCompartment& vascular, const SESubstance& sub, double partitionCoeff, double timestep_s);
73 void AlveolarPartialPressureGradientDiffusion(SEGasCompartment& pulmonary, SELiquidCompartment& vascular, SESubstance& sub, double DiffusingCapacityO2_mL_Per_s_mmHg, double timestep_s);
74
75 double MoveMassByInstantDiffusion(SELiquidCompartment& source, SELiquidCompartment& target, const SESubstance& sub);
76 double MoveMassBySimpleDiffusion(SELiquidCompartment& source, SELiquidCompartment& target, const SESubstance& sub, double permeabilityCofficient_mL_Per_s, double timestep_s);
77 double MoveMassByFacilitatedDiffusion(SELiquidCompartment& source, SELiquidCompartment& target, const SESubstance& sub, double combinedCoefficient_g_Per_s, double timestep_s);
78 double MoveMassByActiveTransport(SELiquidCompartment& source, SELiquidCompartment& target, const SESubstance& sub, double DiffusingCapacityO2_mL_Per_s_mmHg, double timestep_s);
79
80 // Serializable member variables (Set in Initialize and in schema)
81 double m_RestingTissueGlucose_g;
82 double m_RestingBloodGlucose_mg_Per_mL;
83 double m_RestingBloodLipid_mg_Per_mL;
84 double m_RestingBloodInsulin_mg_Per_mL;
85 double m_RestingFluidMass_kg;
86 double m_PreviousFluidMass_kg;
87 // Cache of flows to use to calculate consumption/production during cardiac arrest
88 std::map<SELiquidCompartment*, double> m_CardiacArrestVascularFlows_ml_per_min;
89
90 // Stateless member variable (Set in SetUp())
91 double m_AlbuminProdutionRate_g_Per_s;
92 SESubstance* m_Albumin;
93 SESubstance* m_Glucose;
94 SESubstance* m_Tristearin;
95 SESubstance* m_O2;
96 SESubstance* m_CO2;
97 SESubstance* m_CO;
98 SESubstance* m_Lactate;
99 SESubstance* m_Acetoacetate;
100 SESubstance* m_Creatinine;
101 SESubstance* m_Sodium;
102 SESubstance* m_Calcium;
103 SESubstance* m_Insulin;
104 SESubstanceCompound* m_Sweat;
105
106 SEFluidCircuitNode* m_GutT1;
107 SEFluidCircuitPath* m_GutT1ToGutT3;
108
109 SELiquidSubstanceQuantity* m_LiverAcetoacetate;
110 SELiquidSubstanceQuantity* m_LiverTissueAlbumin;
111 SETissueCompartment* m_LeftLungTissue;
112 SETissueCompartment* m_RightLungTissue;
113 SETissueCompartment* m_MuscleTissue;
114 SELiquidCompartment* m_MuscleIntracellular;
115 SETissueCompartment* m_LiverTissue;
116 SELiquidCompartment* m_LiverIntracellular;
117 SETissueCompartment* m_FatTissue;
118 SELiquidCompartment* m_FatIntracellular;
119
120 SELiquidCompartment* m_FatVascular;
121 SELiquidSubstanceQuantity* m_FatVascularLipid;
122 SELiquidSubstanceQuantity* m_LiverVascularGlucose;
123 SELiquidCompartment* m_MuscleVascular;
124 SELiquidSubstanceQuantity* m_MuscleVascularGlucose;
125
126 SEGasCompartment* m_LeftAlveoli;
127 SEGasCompartment* m_RightAlveoli;
128 SELiquidCompartment* m_LeftPulmonaryCapillaries;
129 SELiquidCompartment* m_RightPulmonaryCapillaries;
130
131 std::vector<SEFluidCircuitPath*> m_VascularResistances;
132 std::map<SETissueCompartment*, SELiquidCompartment*> m_TissueToVascular;
133 std::vector<SETissueCompartment*> m_ConsumptionProdutionTissues;
134
135 // Burn model members - tissue circuit paths
136 // Resistance paths control fluid exchange between vascular and tissue compartments
137 SEFluidCircuitPath* m_SkinT2ToSkinT1; // Skin tissue resistance path
138 SEFluidCircuitPath* m_FatT2ToFatT1; // Fat tissue resistance path
139 SEFluidCircuitPath* m_MuscleT2ToMuscleT1; // Muscle tissue resistance path
140 // Compliance paths control tissue fluid capacity
141 SEFluidCircuitPath* m_SkinT1ToSkinT3; // Skin tissue compliance path
142 SEFluidCircuitPath* m_FatT1ToFatT3; // Fat tissue compliance path
143 SEFluidCircuitPath* m_MuscleT1ToMuscleT3; // Muscle tissue compliance path
144 };
145END_NAMESPACE
Definition: SEScalarMass.h:8
Definition: PBPhysiology.h:25
Definition: SEFluidCircuitNode.h:10
Definition: SEFluidCircuitPath.h:9
Definition: SEGasCompartment.h:14
Definition: SELiquidCompartment.h:11
Definition: SELiquidSubstanceQuantity.h:12
Definition: SESubstanceCompound.h:10
Definition: SESubstance.h:16
Definition: SETissueCompartment.h:9
Definition: Logger.h:14

Distributed under the Apache License, Version 2.0.

See accompanying NOTICE file for details.