SELiquidSubstanceQuantity.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/compartment/substances/SESubstanceQuantity.h>
15 #include <biogears/cdm/substance/SESubstanceTransport.h>
16 #include <biogears/cdm/properties/SEScalarAmountPerVolume.h>
17 
18 namespace biogears {
19 class SELiquidCompartment;
20 
21 enum class BalanceLiquidBy {
22  Mass,
24  Molarity,
26 
27 class SELiquidCompartment;
29  friend class SELiquidCompartment;
30 
31 protected:
33 
34 public:
35  virtual ~SELiquidSubstanceQuantity();
36 
37  virtual void Clear() override;
38  virtual void Invalidate() override;
39 
40  virtual bool Load(const CDM::LiquidSubstanceQuantityData& in);
41  virtual CDM::LiquidSubstanceQuantityData* Unload() override;
42 
43 protected:
44  virtual void Unload(CDM::LiquidSubstanceQuantityData& data);
45 
46 public:
47  virtual void SetToZero();
48  virtual const SEScalar* GetScalar(const char* name) override;
49  virtual const SEScalar* GetScalar(const std::string& name) override;
50 
51  virtual void Balance(BalanceLiquidBy e); // Balance Substance based on a specific property
52 
53  virtual bool HasConcentration() const;
54  virtual SEScalarMassPerVolume& GetConcentration();
55  virtual double GetConcentration(const MassPerVolumeUnit& unit) const;
56 
57  virtual bool HasMass() const;
58  virtual SEScalarMass& GetMass();
59  virtual double GetMass(const MassUnit& unit) const;
60 
61  virtual bool HasMassCleared() const;
62  virtual SEScalarMass& GetMassCleared();
63  virtual double GetMassCleared(const MassUnit& unit) const;
64 
65  virtual bool HasMassDeposited() const;
66  virtual SEScalarMass& GetMassDeposited();
67  virtual double GetMassDeposited(const MassUnit& unit) const;
68 
69  virtual bool HasMassExcreted() const;
70  virtual SEScalarMass& GetMassExcreted();
71  virtual double GetMassExcreted(const MassUnit& unit) const;
72 
73  virtual bool HasMolarity() const;
74  virtual SEScalarAmountPerVolume& GetMolarity();
75  virtual double GetMolarity(const AmountPerVolumeUnit& unit) const;
76 
77  virtual bool HasPartialPressure() const;
78  virtual SEScalarPressure& GetPartialPressure();
79  virtual double GetPartialPressure(const PressureUnit& unit) const;
80 
81  virtual bool HasSaturation() const;
82  virtual SEScalarFraction& GetSaturation();
83  virtual double GetSaturation() const;
84  virtual void SetHemoglobins(SESubstance& Hb, SESubstance& HbO2, SESubstance& HbCO2, SESubstance& HbO2CO2, SESubstance& HbCO);
85 
86 protected:
87  virtual void AddChild(SELiquidSubstanceQuantity& subQ);
88 
89  virtual bool HasExtensive() const override { return HasMass(); }
90  virtual SEScalarMass& GetExtensive() override { return GetMass(); }
91 
92  virtual bool HasIntensive() const override { return HasConcentration(); }
93  virtual SEScalarMassPerVolume& GetIntensive() override { return GetConcentration(); }
94 
103 
105  std::vector<SELiquidSubstanceQuantity*> m_Children;
106 
107  bool m_isO2;
108  bool m_isCO;
109  bool m_isCO2;
110  // Inorder to caluclate a hierarchical saturation, we need these substances
116 };
117 }
Definition: SESubstanceTransport.h:29
SEScalarMass * m_MassDeposited
Definition: SELiquidSubstanceQuantity.h:98
SEScalarPressure * m_PartialPressure
Definition: SELiquidSubstanceQuantity.h:101
SESubstance * m_HbO2CO2
Definition: SELiquidSubstanceQuantity.h:114
SESubstance * m_Hb
Definition: SELiquidSubstanceQuantity.h:111
Definition: SEScalar.h:33
BalanceLiquidBy
Definition: SELiquidSubstanceQuantity.h:21
bool m_isCO2
Definition: SELiquidSubstanceQuantity.h:109
virtual bool HasIntensive() const override
Definition: SELiquidSubstanceQuantity.h:92
virtual SEScalarMass & GetExtensive() override
Definition: SELiquidSubstanceQuantity.h:90
Definition: SELiquidSubstanceQuantity.h:28
Definition: SEScalarMass.h:38
SEScalarAmountPerVolume * m_Molarity
Definition: SELiquidSubstanceQuantity.h:100
SEScalarMassPerVolume * m_Concentration
Definition: SELiquidSubstanceQuantity.h:95
SESubstance * m_HbCO2
Definition: SELiquidSubstanceQuantity.h:113
Definition: SEScalarAmountPerVolume.h:17
Definition: SELiquidCompartment.h:27
Definition: SEScalarAmountPerVolume.h:37
Definition: SEScalarFraction.h:18
SESubstance * m_HbCO
Definition: SELiquidSubstanceQuantity.h:115
SEScalarMass * m_Mass
Definition: SELiquidSubstanceQuantity.h:96
SEScalarFraction * m_Saturation
Definition: SELiquidSubstanceQuantity.h:102
Class corresponding to the LiquidSubstanceQuantityData schema type.
Definition: SubstanceQuantity.hxx:1197
Definition: SEScalarPressure.h:37
virtual SEScalarMassPerVolume & GetIntensive() override
Definition: SELiquidSubstanceQuantity.h:93
Definition: SESubstance.h:49
Definition: SESubstanceQuantity.h:18
std::vector< SELiquidSubstanceQuantity * > m_Children
Definition: SELiquidSubstanceQuantity.h:105
SEScalarMass * m_MassExcreted
Definition: SELiquidSubstanceQuantity.h:99
SELiquidCompartment & m_Compartment
Definition: SELiquidSubstanceQuantity.h:104
Definition: SEScalarPressure.h:18
Definition: SEScalarMassPerVolume.h:46
Definition: SEScalarMassPerVolume.h:18
bool m_isO2
Definition: SELiquidSubstanceQuantity.h:107
bool m_isCO
Definition: SELiquidSubstanceQuantity.h:108
virtual bool HasExtensive() const override
Definition: SELiquidSubstanceQuantity.h:89
SEScalarMass * m_MassCleared
Definition: SELiquidSubstanceQuantity.h:97
Definition: SEScalarMass.h:18
Definition: SEElectricalCircuit.h:18
SESubstance * m_HbO2
Definition: SELiquidSubstanceQuantity.h:112