Renal.h
1 /**************************************************************************************
2 Copyright 2015 Applied Research Associates, Inc.
3 Licensed under the Apache License, Version 2.0 (the "License"); you may not use
4 this file except in compliance with the License. You may obtain a copy of the License
5 at:
6 http://www.apache.org/licenses/LICENSE-2.0
7 Unless required by applicable law or agreed to in writing, software distributed under
8 the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
9 CONDITIONS OF ANY KIND, either express or implied. See the License for the
10 specific language governing permissions and limitations under the License.
11 **************************************************************************************/
12 
13 #pragma once
14 #include <biogears/cdm/CommonDataModel.h>
15 #include <biogears/exports.h>
16 
17 #include <biogears/cdm/properties/SEScalarMass.h>
18 #include <biogears/cdm/system/physiology/SERenalSystem.h>
19 #include <biogears/cdm/utils/RunningAverage.h>
20 #include <biogears/engine/Controller/BioGearsSystem.h>
21 #include <biogears/schema/biogears/BioGearsPhysiology.hxx>
22 
23 namespace biogears {
24 class SEUrinalysis;
25 class SEPatient;
26 class SEFluidCircuit;
27 class SEFluidCircuitNode;
28 class SEFluidCircuitPath;
29 class SESubstance;
30 class SELiquidCompartment;
31 class SELiquidSubstanceQuantity;
32 class BioGears;
33 class SETissueCompartment;
37 class BIOGEARS_API Renal : public SERenalSystem, public BioGearsSystem {
38  friend class BioGears;
39  friend class BioGearsEngineTest;
40 
41 protected:
42  static auto make_unique(BioGears& bg) -> std::unique_ptr<Renal>;
43  Renal(BioGears& bg);
45 
46  double m_dt;
47 
48 public:
49  virtual ~Renal() override;
50 
51  static size_t TypeHash() { return reinterpret_cast<size_t>(&TypeHash); }
52  static constexpr char const * const TypeTag() { return "Renal"; }
53  const char* classname() const override { return TypeTag(); }
54  size_t hash_code() const override { return TypeHash(); }
55 
56  void Clear() override;
57 
58  // Set members to a stable homeostatic state
59  void Initialize() override;
60 
61  // Load a state
62  virtual bool Load(const CDM::BioGearsRenalSystemData& in);
63  virtual CDM::BioGearsRenalSystemData* Unload() const override;
64 
65 protected:
66  virtual void Unload(CDM::BioGearsRenalSystemData& data) const;
67 
68  // Set pointers and other member varialbes common to both homeostatic initialization and loading a state
69  void SetUp() override;
70 
71 public:
72  void AtSteadyState() override;
73  void PreProcess() override;
74  void Process() override;
75  void PostProcess() override;
76 
77  // Assessments
78  bool CalculateUrinalysis(SEUrinalysis& u);
79  SEScalar& CalculateRenalSOFA();
80 
81 protected:
82  struct ActiveTransport {
83  public:
88  };
89 
90  // Initialization
91  void CalculateFilterability(SESubstance& sub);
92 
93 
94  //Preprocess
95  void CalculateUltrafiltrationFeedback();
96  void CalculateColloidOsmoticPressure(SEScalarMassPerVolume& albuminConcentration, SEScalarPressure& osmoticPressure);
97  void CalculateReabsorptionFeedback();
98  void CalculateOsmoreceptorFeedback();
99  void CalculateFluidPermeability();
100  void CalculateTubuloglomerularFeedback();
101  void UpdateBladderVolume();
102  void ProcessActions();
103  void Urinate();
104 
105  //Process
106  void CalculateActiveTransport();
107  void CalculateGlomerularTransport(SESubstance& sub);
108  void CalculateReabsorptionTransport(SESubstance& sub);
109  void CalculateSecretion();
110  void CalculateExcretion(SESubstance& sub);
111  void CalculateAutomaticClearance(SESubstance& sub);
112  void CalculateGluconeogenesis();
113  void CalculateVitalSigns();
114 
115  //Override
116  void ProcessOverride();
117  void OverrideControlLoop();
118 
119 
120  // Serializable member variables (Set in Initialize and in schema)
122  //Tubuloglomerular Feedback
127  //Events
136 
137  // Stateless member variable (Set in SetUp())
139  //Circuits
141  //Nodes
161  //Paths
184 
185  //Substances
191  //Compartments
208  // Compartment Substance Quantites
210 
215 
220 
227 
230 
231  // Configuration
234  // Ultrafiltration
236  // Tubuloglomerular Feedback
241  // Osmoreceptor Feedback
245  // Secretion
247  // Reabsorption
250 
251  // Utility/ScratchPads
254 
255 };
256 }
SEFluidCircuitPath * m_leftBowmansOsmoticSourcePath
Definition: Renal.h:163
double m_minLeftAfferentResistance_mmHg_s_Per_mL
Definition: Renal.h:238
double m_defaultOpenResistance_mmHg_s_Per_mL
Definition: Renal.h:232
SEFluidCircuitNode * m_leftNetTubulesNode
Definition: Renal.h:156
SETissueCompartment * m_rightKidneyTissue
Definition: Renal.h:195
double leftGlucoseReabsorptionMass_mg
Definition: Renal.h:84
SELiquidCompartment * m_rightBowmans
Definition: Renal.h:204
double rightLactateExcretedMass_mg
Definition: Renal.h:87
SEFluidCircuitPath * m_leftUreterPath
Definition: Renal.h:167
SEFluidCircuitNode * m_leftNetPeritubularCapillariesNode
Definition: Renal.h:155
double m_rightReabsorptionPermeabilityModificationFactor
Definition: Renal.h:243
SEFluidCircuitNode * m_rightBowmansNode
Definition: Renal.h:148
SEFluidCircuitPath * m_leftGlomerularFilterResistancePath
Definition: Renal.h:168
double m_leftReabsorptionPermeabilitySetpoint_mL_Per_s_mmHg_m2
Definition: Renal.h:248
RunningAverage m_rightRenalArterialPressure_mmHg_runningAvg
Definition: Renal.h:135
SELiquidSubstanceQuantity * m_bladderGlucose
Definition: Renal.h:221
SELiquidCompartment * m_rightPeritubular
Definition: Renal.h:200
SEFluidCircuitPath * m_rightTubulesOsmoticSourcePath
Definition: Renal.h:173
SELiquidSubstanceQuantity * m_rightPeritubularGlucose
Definition: Renal.h:216
SELiquidSubstanceQuantity * m_bladderUrea
Definition: Renal.h:224
Definition: SEScalar.h:33
SEFluidCircuitPath * m_leftReabsorptionResistancePath
Definition: Renal.h:164
SELiquidCompartment * m_venaCava
Definition: Renal.h:193
ActiveTransport m_SubstanceTransport
Definition: Renal.h:253
SEFluidCircuitPath * m_bladderToGroundPressurePath
Definition: Renal.h:178
SEFluidCircuitPath * m_rightUreterPath
Definition: Renal.h:175
SESubstance * m_urea
Definition: Renal.h:187
SEFluidCircuitNode * m_rightPeritubularNode
Definition: Renal.h:149
Definition: Renal.h:37
double m_leftAfferentResistance_mmHg_s_Per_mL
Definition: Renal.h:123
SELiquidSubstanceQuantity * m_rightPeritubularPotassium
Definition: Renal.h:217
RunningAverage m_rightSodiumFlow_mg_Per_s_runningAvg
Definition: Renal.h:133
SELiquidSubstanceQuantity * m_rightUreterLactate
Definition: Renal.h:219
SELiquidSubstanceQuantity * m_leftPeritubularGlucose
Definition: Renal.h:211
size_t hash_code() const override
Definition: Renal.h:54
SEFluidCircuitNode * m_leftPeritubularNode
Definition: Renal.h:144
SESubstance * m_sodium
Definition: Renal.h:186
double rightGlucoseReabsorptionMass_mg
Definition: Renal.h:85
Class corresponding to the BioGearsRenalSystemData schema type.
Definition: BioGearsPhysiology.hxx:6191
SEFluidCircuitPath * m_rightEfferentArteriolePath
Definition: Renal.h:183
SEFluidCircuitNode * m_rightTubulesNode
Definition: Renal.h:150
SEScalarMass m_spCleared
Definition: Renal.h:252
SELiquidSubstanceQuantity * m_rightTubulesSodium
Definition: Renal.h:226
SELiquidSubstanceQuantity * m_aortaLactate
Definition: Renal.h:209
Definition: SELiquidSubstanceQuantity.h:28
double m_leftReabsorptionPermeabilityModificationFactor
Definition: Renal.h:242
Definition: SEFluidCircuitPath.h:25
RunningAverage m_urineOsmolarity_mOsm_Per_L_runningAvg
Definition: Renal.h:129
SEFluidCircuitPath * m_rightAfferentArteriolePath
Definition: Renal.h:177
SEFluidCircuitNode * m_leftBowmansNode
Definition: Renal.h:143
Definition: SEPatient.h:48
double m_rightSodiumFlowSetPoint_mg_Per_s
Definition: Renal.h:126
SEFluidCircuitNode * m_leftNetGlomerularCapillariesNode
Definition: Renal.h:153
Definition: SEScalarMass.h:38
Definition: RunningAverage.h:19
SELiquidCompartment * m_aorta
Definition: Renal.h:192
SEFluidCircuit * m_RenalCircuit
Definition: Renal.h:140
Definition: SEFluidCircuitNode.h:21
Definition: SELiquidCompartment.h:27
SEFluidCircuitPath * m_rightGlomerularFilterResistancePath
Definition: Renal.h:176
SELiquidCompartment * m_ground
Definition: Renal.h:207
SEFluidCircuitNode * m_rightGlomerularNode
Definition: Renal.h:147
SEFluidCircuitPath * m_leftAfferentArteriolePath
Definition: Renal.h:169
const char * classname() const override
Definition: Renal.h:53
SELiquidSubstanceQuantity * m_leftUreterLactate
Definition: Renal.h:214
SELiquidSubstanceQuantity * m_leftUreterPotassium
Definition: Renal.h:213
Definition: Renal.h:82
Definition: SEFluidCircuit.h:20
SEFluidCircuitNode * m_leftRenalArteryNode
Definition: Renal.h:146
double m_leftSodiumFlowSetPoint_mg_Per_s
Definition: Renal.h:125
RunningAverage m_urineProductionRate_mL_Per_min_runningAvg
Definition: Renal.h:128
double m_rightAfferentResistance_mmHg_s_Per_mL
Definition: Renal.h:124
SELiquidCompartment * m_leftTubules
Definition: Renal.h:205
Definition: BioGearsEngineTest.h:24
SELiquidCompartment * m_leftGlomerular
Definition: Renal.h:201
SEFluidCircuitPath * m_leftPeritubularOsmoticSourcePath
Definition: Renal.h:166
SEFluidCircuitNode * m_rightRenalArteryNode
Definition: Renal.h:151
double m_minRightAfferentResistance_mmHg_s_Per_mL
Definition: Renal.h:240
SEFluidCircuitNode * m_bladderNode
Definition: Renal.h:152
static constexpr char const *const TypeTag()
Definition: Renal.h:52
SEFluidCircuitPath * m_rightBowmansOsmoticSourcePath
Definition: Renal.h:172
SEFluidCircuitPath * m_rightPeritubularOsmoticSourcePath
Definition: Renal.h:174
SEPatient * m_patient
Definition: Renal.h:138
SEFluidCircuitNode * m_rightNetBowmansCapsulesNode
Definition: Renal.h:158
SELiquidSubstanceQuantity * m_rightUreterPotassium
Definition: Renal.h:218
SELiquidSubstanceQuantity * m_bladderSodium
Definition: Renal.h:223
Definition: SEScalarPressure.h:37
SELiquidCompartment * m_leftBowmans
Definition: Renal.h:202
SEFluidCircuitNode * m_leftGlomerularNode
Definition: Renal.h:142
SELiquidSubstanceQuantity * m_leftKidneyIntracellularLactate
Definition: Renal.h:228
SELiquidCompartment * m_leftUreter
Definition: Renal.h:197
Definition: SESubstance.h:49
bool m_Urinating
Definition: Renal.h:121
SETissueCompartment * m_leftKidneyTissue
Definition: Renal.h:196
double m_maxRightAfferentResistance_mmHg_s_Per_mL
Definition: Renal.h:239
SEFluidCircuitPath * m_urethraPath
Definition: Renal.h:179
SEFluidCircuitNode * m_rightNetGlomerularCapillariesNode
Definition: Renal.h:157
RunningAverage m_sodiumConcentration_mg_Per_mL_runningAvg
Definition: Renal.h:130
static size_t TypeHash()
Definition: Renal.h:51
SEFluidCircuitPath * m_leftTubulesOsmoticSourcePath
Definition: Renal.h:165
SEFluidCircuitNode * m_leftTubulesNode
Definition: Renal.h:145
Definition: SEScalarMassPerVolume.h:46
SELiquidSubstanceQuantity * m_bladderPotassium
Definition: Renal.h:222
SELiquidSubstanceQuantity * m_leftTubulesSodium
Definition: Renal.h:225
SELiquidSubstanceQuantity * m_leftPeritubularPotassium
Definition: Renal.h:212
SEFluidCircuitPath * m_leftGlomerularOsmoticSourcePath
Definition: Renal.h:162
Manages and controls execution of all data/systems in BioGears.
Definition: BioGears.h:86
SELiquidSubstanceQuantity * m_rightKidneyIntracellularLactate
Definition: Renal.h:229
double leftLactateExcretedMass_mg
Definition: Renal.h:86
RunningAverage m_sodiumExcretionRate_mg_Per_min_runningAvg
Definition: Renal.h:131
Definition: SEUrinalysis.h:25
SESubstance * m_glucose
Definition: Renal.h:188
SELiquidCompartment * m_rightUreter
Definition: Renal.h:199
SELiquidCompartment * m_rightGlomerular
Definition: Renal.h:203
Generic class for handling the BioGears stabilization methodology.
Definition: BioGearsSystem.h:23
BioGears & m_data
Definition: Renal.h:44
SESubstance * m_lactate
Definition: Renal.h:189
Definition: SEElectricalCircuit.h:18
double m_maxLeftAfferentResistance_mmHg_s_Per_mL
Definition: Renal.h:237
RunningAverage m_leftRenalArterialPressure_mmHg_runningAvg
Definition: Renal.h:134
SELiquidCompartment * m_leftPeritubular
Definition: Renal.h:198
SEFluidCircuitPath * m_rightGlomerularOsmoticSourcePath
Definition: Renal.h:171
SEFluidCircuitPath * m_leftTubulesPath
Definition: Renal.h:180
SELiquidCompartment * m_bladder
Definition: Renal.h:194
double m_baselinePotassiumConcentration_g_Per_dL
Definition: Renal.h:246
SEFluidCircuitPath * m_leftEfferentArteriolePath
Definition: Renal.h:182
Definition: SETissueCompartment.h:32
double m_dt
Definition: Renal.h:46
double m_sodiumPlasmaConcentrationSetpoint_mg_Per_mL
Definition: Renal.h:244
double m_defaultClosedResistance_mmHg_s_Per_mL
Definition: Renal.h:233
RunningAverage m_leftSodiumFlow_mg_Per_s_runningAvg
Definition: Renal.h:132
SEFluidCircuitNode * m_rightNetPeritubularCapillariesNode
Definition: Renal.h:159
SELiquidCompartment * m_rightTubules
Definition: Renal.h:206
SEFluidCircuitNode * m_leftNetBowmansCapsulesNode
Definition: Renal.h:154
SEFluidCircuitNode * m_rightNetTubulesNode
Definition: Renal.h:160
Definition: SERenalSystem.h:42
double m_CVOpenResistance_mmHg_s_Per_mL
Definition: Renal.h:235
SEFluidCircuitPath * m_rightTubulesPath
Definition: Renal.h:181
SEFluidCircuitPath * m_rightReabsorptionResistancePath
Definition: Renal.h:170
double m_rightReabsorptionPermeabilitySetpoint_mL_Per_s_mmHg_m2
Definition: Renal.h:249
SESubstance * m_potassium
Definition: Renal.h:190