SELiquidCompartment.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 
15 #include <biogears/cdm/compartment/fluid/SEFluidCompartment.h>
16 #include <biogears/cdm/compartment/fluid/SELiquidCompartmentLink.h>
17 #include <biogears/cdm/compartment/substances/SELiquidSubstanceQuantity.h>
18 #include <biogears/cdm/substance/SESubstanceTransport.h>
19 #include <biogears/schema/cdm/Compartment.hxx>
20 #include <biogears/cdm/properties/SEScalar.h>
21 #include <biogears/cdm/properties/SEScalarFraction.h>
22 
23 namespace biogears {
24 class SETissueCompartment;
25 class SECompartmentManager;
26 class SELiquidSubstanceQuantity;
27 class BIOGEARS_API SELiquidCompartment : public SEFluidCompartment<SELiquidCompartmentLink, SELiquidTransportVertex, SELiquidTransportSubstance, SELiquidSubstanceQuantity> {
28  friend class SETissueCompartment;
29  friend class SECompartmentManager;
31 
32 protected:
33  SELiquidCompartment(const char* name, Logger* logger);
34  SELiquidCompartment(const std::string& name, Logger* logger);
35 
36 public:
37  virtual ~SELiquidCompartment();
38 
39  virtual void Clear() override;
40 
41  virtual bool Load(const CDM::LiquidCompartmentData& in, SESubstanceManager& subMgr, SECircuitManager* circuits = nullptr);
42  virtual CDM::LiquidCompartmentData* Unload() override;
43 
44 protected:
45  virtual void Unload(CDM::LiquidCompartmentData& data);
46 
47 public:
48  virtual const SEScalar* GetScalar(const char* name) override;
49  virtual const SEScalar* GetScalar(const std::string& name) override;
50 
51  virtual void StateChange() override;
52 
53  virtual void Balance(BalanceLiquidBy by); // Balance all substances based on a specific property
54 
55  virtual bool HasPH() const;
56  virtual SEScalar& GetPH();
57  virtual double GetPH() const;
58 
59  virtual bool HasWaterVolumeFraction() const;
60  virtual SEScalarFraction& GetWaterVolumeFraction();
61  virtual double GetWaterVolumeFraction() const;
62 
63  virtual void AddChild(SELiquidCompartment& child);
64  virtual const std::vector<SELiquidCompartment*>& GetChildren() { return m_Children; }
65  virtual const std::vector<SELiquidCompartment*>& GetLeaves() { return m_Leaves; }
66 
67 protected:
68  virtual SELiquidSubstanceQuantity& CreateSubstanceQuantity(SESubstance& substance);
69 
72 
73  std::vector<SELiquidCompartment*> m_Children;
74  std::vector<SELiquidCompartment*> m_Leaves;
75 };
76 }
Definition: SEScalar.h:33
Class corresponding to the LiquidCompartmentData schema type.
Definition: Compartment.hxx:2876
BalanceLiquidBy
Definition: SELiquidSubstanceQuantity.h:21
SEScalarFraction * m_WaterVolumeFraction
Definition: SELiquidCompartment.h:71
Definition: SEFluidCompartment.h:39
virtual const std::vector< SELiquidCompartment * > & GetLeaves()
Definition: SELiquidCompartment.h:65
Definition: SECompartmentManager.h:32
Definition: SELiquidSubstanceQuantity.h:28
SEScalar * m_pH
Definition: SELiquidCompartment.h:70
Definition: Logger.h:75
Definition: SELiquidCompartment.h:27
std::vector< SELiquidCompartment * > m_Leaves
Definition: SELiquidCompartment.h:74
Definition: SEScalarFraction.h:18
Definition: SESubstance.h:49
std::vector< SELiquidCompartment * > m_Children
Definition: SELiquidCompartment.h:73
virtual const std::vector< SELiquidCompartment * > & GetChildren()
Definition: SELiquidCompartment.h:64
Definition: SESubstanceManager.h:23
Definition: SEElectricalCircuit.h:18
Definition: SETissueCompartment.h:32
Definition: SECircuitManager.h:53