What’s New in the Pulse Physiology Engine 4.4.0
×
SEFluidCompartment.h
1/* Distributed under the Apache License, Version 2.0.
2 See accompanying NOTICE file for details.*/
3
4#pragma once
5#include "cdm/compartment/SECompartment.h"
6#include "cdm/circuit/fluid/SEFluidCircuitNode.h"
7#include "cdm/compartment/SECompartmentNodes.h"
8#include "cdm/substance/SESubstanceTransport.h"
9
10class SESubstance;
12template<typename EdgeType, typename VertexType, typename CompartmentType> class SEFluidCompartmentLink;
13
14#define FLUID_COMPARTMENT_TEMPLATE typename LinkType, typename VertexType, typename TransportSubstanceType, typename SubstanceQuantityType
15#define FLUID_COMPARTMENT_TYPES LinkType, VertexType, TransportSubstanceType, SubstanceQuantityType
16
17template<FLUID_COMPARTMENT_TEMPLATE>
18class SEFluidCompartment : public SECompartment, public VertexType
19{
20 friend class PBCompartment;//friend the serialization class
21 template<typename CompartmentType, typename CompartmentLinkType> friend class SECompartmentGraph;
22protected:
23 SEFluidCompartment(const std::string& name, Logger* logger);
24public:
25 virtual ~SEFluidCompartment();
26
27 void Clear() override;
28
29 std::string GetName() const override { return m_Name; }
30
31 const SEScalar* GetScalar(const std::string& name) override;
32
33 bool HasChildren() const override { return !m_FluidChildren.empty(); }
34
35 virtual bool HasNodeMapping() const { return m_Nodes.HasMapping(); }
37 virtual void MapNode(SEFluidCircuitNode& node);
38
39 virtual void Sample(bool CycleStart);
40 virtual void SampleFlow(); // We can add other sampling support as needed, just follow the pattern
41
42 virtual bool HasInflow() const;
43 virtual const SEScalarVolumePerTime& GetInflow() const;
44 virtual double GetInflow(const VolumePerTimeUnit& unit) const;
45
46 virtual bool HasAverageInflow() const;
47 virtual const SEScalarVolumePerTime& GetAverageInflow() const;
48 virtual double GetAverageInflow(const VolumePerTimeUnit& unit) const;
49
50 virtual bool HasOutflow() const;
51 virtual const SEScalarVolumePerTime& GetOutflow() const;
52 virtual double GetOutflow(const VolumePerTimeUnit& unit) const;
53
54 virtual bool HasAverageOutflow() const;
55 virtual const SEScalarVolumePerTime& GetAverageOutflow() const;
56 virtual double GetAverageOutflow(const VolumePerTimeUnit& unit) const;
57
58 virtual bool HasPressure() const;
60 virtual double GetPressure(const PressureUnit& unit) const;
61
62 virtual bool HasVolume() const;
63 virtual SEScalarVolume& GetVolume();
64 virtual double GetVolume(const VolumeUnit& unit) const;
65
66 virtual bool HasSubstanceQuantities() const;
67 virtual bool HasSubstanceQuantity(const SESubstance& substance) const;
68 virtual SubstanceQuantityType* GetSubstanceQuantity(const SESubstance& substance);
69 virtual const SubstanceQuantityType* GetSubstanceQuantity(const SESubstance& substance) const;
70 virtual const std::vector<SubstanceQuantityType*>& GetSubstanceQuantities() const;
71 virtual void ZeroSubstanceQuantities();
72
73 virtual void AddLink(LinkType& link);
74 virtual void RemoveLink(LinkType& link);
75 virtual void RemoveLinks();
76 virtual const std::vector<LinkType*>& GetLinks();
77
78 virtual bool HasChild(const SEFluidCompartment& cmpt);
79
80protected:
81 virtual void RemoveSubstanceQuantity(const SESubstance& substance);
82
83 bool HasQuantity() const override { return HasVolume(); }
84 SEScalarVolume& GetQuantity() override { return GetVolume(); }
85
86 virtual double CalculateInflow_mL_Per_s() const;
87 virtual double CalculateOutflow_mL_Per_s() const;
88
89 std::vector<TransportSubstanceType*>& GetTransportSubstances() override { return m_TransportSubstances; }
90
98
101
102 std::vector<SubstanceQuantityType*> m_SubstanceQuantities;
103 std::vector<TransportSubstanceType*> m_TransportSubstances;
104
105 std::vector<LinkType*> m_Links;
106 std::vector<LinkType*> m_IncomingLinks;
107 std::vector<LinkType*> m_OutgoingLinks;
108 std::vector<SEFluidCompartment*> m_FluidChildren;
110};
111
112#include "cdm/compartment/fluid/SEFluidCompartment.hxx"
Definition: Logger.h:71
Definition: PBCompartment.h:28
Definition: SEScalarPressure.h:8
Definition: SECompartmentGraph.h:11
Definition: SECompartment.h:14
std::string m_Name
Definition: SECompartment.h:32
virtual bool HasMapping() const
Definition: SECompartmentNodes.h:24
Definition: SEFluidCircuitNode.h:10
Definition: SEFluidCompartment.h:19
bool HasChildren() const override
Definition: SEFluidCompartment.h:33
bool HasQuantity() const override
Definition: SEFluidCompartment.h:83
virtual bool HasVolume() const
Definition: SEFluidCompartment.hxx:339
virtual void ZeroSubstanceQuantities()
Definition: SEFluidCompartment.hxx:445
virtual void RemoveSubstanceQuantity(const SESubstance &substance)
Definition: SEFluidCompartment.hxx:430
virtual ~SEFluidCompartment()
Definition: SEFluidCompartment.hxx:23
SEScalarVolumePerTime * m_AverageOutflow
Definition: SEFluidCompartment.h:95
virtual SEScalarPressure & GetPressure()
Definition: SEFluidCompartment.hxx:271
virtual void RemoveLink(LinkType &link)
Definition: SEFluidCompartment.hxx:480
SEScalarVolumePerTime * m_AverageInflow
Definition: SEFluidCompartment.h:94
std::vector< TransportSubstanceType * > m_TransportSubstances
Definition: SEFluidCompartment.h:103
std::vector< LinkType * > m_Links
Definition: SEFluidCompartment.h:105
virtual void AddLink(LinkType &link)
Definition: SEFluidCompartment.hxx:454
virtual SECompartmentNodes< FLUID_COMPARTMENT_NODE > & GetNodeMapping()
Definition: SEFluidCompartment.h:36
virtual double CalculateInflow_mL_Per_s() const
Definition: SEFluidCompartment.hxx:208
virtual bool HasOutflow() const
Definition: SEFluidCompartment.hxx:154
SEScalarVolume & GetQuantity() override
Definition: SEFluidCompartment.h:84
std::vector< SubstanceQuantityType * > m_SubstanceQuantities
Definition: SEFluidCompartment.h:102
virtual const std::vector< SubstanceQuantityType * > & GetSubstanceQuantities() const
Definition: SEFluidCompartment.hxx:425
std::vector< LinkType * > m_OutgoingLinks
Definition: SEFluidCompartment.h:107
virtual const SEScalarVolumePerTime & GetOutflow() const
Definition: SEFluidCompartment.hxx:164
SERunningAverage * m_AverageOutflow_mL_Per_s
Definition: SEFluidCompartment.h:97
virtual bool HasAverageOutflow() const
Definition: SEFluidCompartment.hxx:185
virtual bool HasSubstanceQuantity(const SESubstance &substance) const
Definition: SEFluidCompartment.hxx:394
virtual void RemoveLinks()
Definition: SEFluidCompartment.hxx:487
std::vector< TransportSubstanceType * > & GetTransportSubstances() override
Definition: SEFluidCompartment.h:89
virtual SubstanceQuantityType * GetSubstanceQuantity(const SESubstance &substance)
Definition: SEFluidCompartment.hxx:405
virtual bool HasSubstanceQuantities() const
Definition: SEFluidCompartment.hxx:389
virtual const SEScalarVolumePerTime & GetAverageInflow() const
Definition: SEFluidCompartment.hxx:136
virtual void MapNode(SEFluidCircuitNode &node)
Definition: SEFluidCompartment.hxx:66
virtual bool HasInflow() const
Definition: SEFluidCompartment.hxx:100
SEScalarVolumePerTime * m_Inflow
Definition: SEFluidCompartment.h:91
virtual bool HasNodeMapping() const
Definition: SEFluidCompartment.h:35
std::vector< SEFluidCompartment * > m_FluidChildren
Definition: SEFluidCompartment.h:108
virtual bool HasPressure() const
Definition: SEFluidCompartment.hxx:257
SEScalarVolumePerTime * m_Outflow
Definition: SEFluidCompartment.h:92
bool m_SampleFlow
Definition: SEFluidCompartment.h:93
SECompartmentNodes< FLUID_COMPARTMENT_NODE > m_Nodes
Definition: SEFluidCompartment.h:109
virtual bool HasChild(const SEFluidCompartment &cmpt)
Definition: SEFluidCompartment.hxx:498
virtual SEScalarVolume & GetVolume()
Definition: SEFluidCompartment.hxx:353
void Clear() override
Definition: SEFluidCompartment.hxx:29
SERunningAverage * m_AverageInflow_mL_Per_s
Definition: SEFluidCompartment.h:96
std::vector< LinkType * > m_IncomingLinks
Definition: SEFluidCompartment.h:106
SEFluidCompartment(const std::string &name, Logger *logger)
Definition: SEFluidCompartment.hxx:10
virtual const std::vector< LinkType * > & GetLinks()
Definition: SEFluidCompartment.hxx:492
std::string GetName() const override
Definition: SEFluidCompartment.h:29
virtual void SampleFlow()
Definition: SEFluidCompartment.hxx:92
virtual bool HasAverageInflow() const
Definition: SEFluidCompartment.hxx:131
SEScalarVolume * m_Volume
Definition: SEFluidCompartment.h:100
SEScalarPressure * m_Pressure
Definition: SEFluidCompartment.h:99
virtual void Sample(bool CycleStart)
Definition: SEFluidCompartment.hxx:75
const SEScalar * GetScalar(const std::string &name) override
Definition: SEFluidCompartment.hxx:48
virtual const SEScalarVolumePerTime & GetAverageOutflow() const
Definition: SEFluidCompartment.hxx:190
virtual double CalculateOutflow_mL_Per_s() const
Definition: SEFluidCompartment.hxx:233
virtual const SEScalarVolumePerTime & GetInflow() const
Definition: SEFluidCompartment.hxx:110
Definition: SERunningAverage.h:8
Definition: SEScalar.h:19
Definition: SEScalarPressure.h:29
Definition: SEScalarVolume.h:28
Definition: SEScalarVolumePerTime.h:32
Definition: SESubstance.h:16
Definition: SEScalarVolumePerTime.h:8
Definition: SEScalarVolume.h:8

Distributed under the Apache License, Version 2.0.

See accompanying NOTICE file for details.