Energy.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/circuit/thermal/SEThermalCircuitCalculator.h>
18 #include <biogears/cdm/system/physiology/SEEnergySystem.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 SEPatient;
25 class SEPatientActionCollection;
26 class SELiquidSubstanceQuantity;
27 class SEThermalCircuitNode;
28 class SEThermalCircuitPath;
29 class SEFluidCircuitPath;
30 class SEThermalCircuit;
31 class SEThermalCircuitCalculator;
32 class BioGears;
33 
37 class BIOGEARS_API Energy : public SEEnergySystem, public BioGearsSystem {
38  friend class BioGears;
39  friend class BioGearsEngineTest;
40 
41 protected:
42  static auto make_unique(BioGears& bg) -> std::unique_ptr<Energy>;
43  Energy(BioGears& bg);
45 
46 public:
47  ~Energy(void) override;
48 
49  static size_t TypeHash() { return reinterpret_cast<size_t>(&TypeHash); }
50  static constexpr char const * const TypeTag() { return "Energy"; }
51  const char* classname() const override { return TypeTag(); }
52  size_t hash_code() const override { return TypeHash(); }
53 
54  void Clear() override;
55 
56  // Set members to a stable homeostatic state
57  void Initialize() override;
58 
59  // Load a state
60  virtual bool Load(const CDM::BioGearsEnergySystemData& in);
61  virtual CDM::BioGearsEnergySystemData* Unload() const override;
62 
63 protected:
64  virtual void Unload(CDM::BioGearsEnergySystemData& data) const;
65 
66  // Set pointers and other member variables common to both homeostatic initialization and loading a state
67  void SetUp() override;
68 
69 public:
70  void AtSteadyState() override;
71  void PreProcess() override;
72  void Process() override;
73  void PostProcess() override;
74 
75 private:
76  // Preprocess Methods
77  void CalculateMetabolicHeatGeneration();
78  void CalculateSweatRate();
79  void UpdateHeatResistance();
80  // Actions/Conditions
81  void Exercise();
82 
83 protected:
84  void ManageEnergyDeficit();
85  void ProcessOverride();
86  void OverrideControlLoop();
87 
88 private:
89  // These are both part of the consume meal condition.
90  //void Dehydration(double time); // Need to revisit
91 
92  // Used in Reset & Starvation
93  void CalculateBasalMetabolicRate();
94 
95  // Process Methods
96  void CalculateVitalSigns();
97 
98  // Serializable member variables (Set in Initialize and in schema)
101  bool m_packOn;
103 
104  // Stateless member variable (Set in SetUp())
105  double m_dT_s;
108  // Cmpts,Substance, and nodes
113  //Nodes
116  //Paths
120  //Circuits
124 
125 };
126 }
SEThermalCircuitCalculator m_circuitCalculator
Definition: Energy.h:123
SEThermalCircuitNode * m_coreNode
Definition: Energy.h:114
SEThermalCircuitNode * m_skinNode
Definition: Energy.h:115
Definition: SEThermalCircuitPath.h:25
bool m_packOn
Definition: Energy.h:101
double m_dT_s
Definition: Energy.h:105
SELiquidSubstanceQuantity * m_SkinChloride
Definition: Energy.h:111
SELiquidSubstanceQuantity * m_SkinSodium
Definition: Energy.h:110
Definition: Energy.h:37
static constexpr char const *const TypeTag()
Definition: Energy.h:50
Definition: SELiquidSubstanceQuantity.h:28
Definition: SEFluidCircuitPath.h:25
Definition: SEPatient.h:48
SEPatientActionCollection * m_PatientActions
Definition: Energy.h:107
SEThermalCircuitPath * m_temperatureGroundToCorePath
Definition: Energy.h:117
Definition: RunningAverage.h:19
RunningAverage m_BicarbonateMolarity_mmol_Per_L
Definition: Energy.h:100
SEFluidCircuitPath * m_skinExtravascularToSweatingGroundPath
Definition: Energy.h:119
SELiquidSubstanceQuantity * m_SkinPotassium
Definition: Energy.h:112
Definition: BioGearsEngineTest.h:24
Definition: SEThermalCircuitNode.h:20
SEThermalCircuitPath * m_coreToSkinPath
Definition: Energy.h:118
double m_previousWeightPack_kg
Definition: Energy.h:102
BioGears & m_data
Definition: Energy.h:44
SEThermalCircuit * m_InternalTemperatureCircuit
Definition: Energy.h:121
static size_t TypeHash()
Definition: Energy.h:49
SELiquidSubstanceQuantity * m_AortaHCO3
Definition: Energy.h:109
SEThermalCircuit * m_TemperatureCircuit
Definition: Energy.h:122
SEPatient * m_Patient
Definition: Energy.h:106
Definition: SEEnergySystem.h:32
size_t hash_code() const override
Definition: Energy.h:52
RunningAverage m_BloodpH
Definition: Energy.h:99
const char * classname() const override
Definition: Energy.h:51
Class corresponding to the BioGearsEnergySystemData schema type.
Definition: BioGearsPhysiology.hxx:3583
Manages and controls execution of all data/systems in BioGears.
Definition: BioGears.h:86
Definition: SEThermalCircuitCalculator.h:25
Generic class for handling the BioGears stabilization methodology.
Definition: BioGearsSystem.h:23
Definition: SEThermalCircuit.h:20
Definition: SEElectricalCircuit.h:18
Definition: SEPatientActionCollection.h:54