SECircuitNode.h
1 /* Distributed under the Apache License, Version 2.0.
2  See accompanying NOTICE file for details.*/
3 
4 #pragma once
5 #include "cdm/properties/SEScalarElectricCharge.h"
6 #include "cdm/properties/SEScalarElectricPotential.h"
7 #include "cdm/properties/SEScalarPressure.h"
8 #include "cdm/properties/SEScalarVolume.h"
9 #include "cdm/properties/SEScalarTemperature.h"
10 #include "cdm/properties/SEScalarEnergy.h"
11 
12 enum class eBlackBox_Property_Type
13 {
14  Calculate = 0,
15  Imposed
16 };
17 
18 #define CIRCUIT_NODE_TEMPLATE typename PotentialScalar, typename QuantityScalar, \
19  typename PotentialUnit, typename QuantityUnit
20 #define CIRCUIT_NODE_TYPES PotentialScalar,QuantityScalar, \
21  PotentialUnit,QuantityUnit
22 #define ELECTRICAL_CIRCUIT_NODE SEScalarElectricPotential, SEScalarElectricCharge, \
23  ElectricPotentialUnit, ElectricChargeUnit
24 #define FLUID_CIRCUIT_NODE SEScalarPressure, SEScalarVolume, \
25  PressureUnit, VolumeUnit
26 #define THERMAL_CIRCUIT_NODE SEScalarTemperature, SEScalarEnergy, \
27  TemperatureUnit, EnergyUnit
28 
29 template<CIRCUIT_NODE_TEMPLATE>
30 class SECircuitNode : public Loggable
31 {
32  friend class PBCircuit;//friend the serialization class
33  template< typename NodeType, typename PathType> friend class SECircuit;
34 protected:
35  SECircuitNode(const std::string& name, Logger* logger);
36 public:
37  virtual ~SECircuitNode();
38 
39  virtual void Clear(); //clear memory
40 
41  virtual std::string GetName() const;
42 
43  virtual bool IsPartOfBlackBox() const;
44  virtual void SetPartOfBlackBox(bool b);
45  virtual bool IsBlackBoxMiddle() const;
46 
47  virtual bool HasPotential() const;
48  virtual PotentialScalar& GetPotential();
49  virtual bool HasNextPotential() const;
50  virtual PotentialScalar& GetNextPotential();
51 
52  virtual void RemoveImposedPotential();
53  virtual bool IsPotentialImposed() const;
54  virtual void ImposePotential(const PotentialScalar& s);
55  virtual void ImposePotential(double v, const PotentialUnit& unit);
56 
57  virtual bool HasQuantity() const;
58  virtual QuantityScalar& GetQuantity();
59  virtual bool HasNextQuantity() const;
60  virtual QuantityScalar& GetNextQuantity();
61  virtual bool HasQuantityBaseline() const;
62  virtual QuantityScalar& GetQuantityBaseline();
63 
64  virtual void RemoveImposedQuantity();
65  virtual bool IsQuantityImposed() const;
66  virtual void ImposeQuantity(const QuantityScalar& s);
67  virtual void ImposeQuantity(double v, const QuantityUnit& unit);
68 
69  void SetCalculatorIndex(const int index);
70  int GetCalculatorIndex() const;
71 
72  bool IsReferenceNode() const;
75 
76 protected:
77  std::string m_Name;
78  bool m_IsPartOfBlackBox = false;
79  bool m_IsBlackBoxMiddle = false;
80 
81  PotentialScalar* m_Potential;
82  PotentialScalar* m_NextPotential;
83  eBlackBox_Property_Type m_PotentialType = eBlackBox_Property_Type::Calculate;
84 
86  // Quantity Types //
88  QuantityScalar* m_Quantity;
89  QuantityScalar* m_NextQuantity;
90  QuantityScalar* m_QuantityBaseline;
91  eBlackBox_Property_Type m_QuantityType = eBlackBox_Property_Type::Calculate;
92 
93 private:
95  bool m_IsReferenceNode = false;
96 };
97 
98 
99 #include "cdm/circuit/SECircuitNode.hxx"
Definition: Logger.h:23
Definition: Logger.h:71
Definition: PBCircuit.h:26
Definition: SECircuit.h:13
Definition: SECircuitNode.h:31
bool IsReferenceNode() const
virtual void ImposePotential(double v, const PotentialUnit &unit)
void SetCalculatorIndex(const int index)
virtual PotentialScalar & GetPotential()
void RemoveAsReferenceNode()
bool m_IsPartOfBlackBox
Definition: SECircuitNode.h:78
virtual void ImposeQuantity(const QuantityScalar &s)
QuantityScalar * m_Quantity
Definition: SECircuitNode.h:88
virtual bool IsQuantityImposed() const
int GetCalculatorIndex() const
bool m_IsReferenceNode
Definition: SECircuitNode.h:95
void SetAsReferenceNode()
virtual bool IsPartOfBlackBox() const
virtual bool IsPotentialImposed() const
SECircuitNode(const std::string &name, Logger *logger)
QuantityScalar * m_NextQuantity
Definition: SECircuitNode.h:89
virtual std::string GetName() const
virtual void ImposePotential(const PotentialScalar &s)
virtual void SetPartOfBlackBox(bool b)
PotentialScalar * m_Potential
Definition: SECircuitNode.h:81
eBlackBox_Property_Type m_QuantityType
Definition: SECircuitNode.h:91
bool m_IsBlackBoxMiddle
Definition: SECircuitNode.h:79
eBlackBox_Property_Type m_PotentialType
Definition: SECircuitNode.h:83
virtual bool HasNextPotential() const
virtual void RemoveImposedPotential()
virtual bool HasNextQuantity() const
virtual bool IsBlackBoxMiddle() const
virtual QuantityScalar & GetNextQuantity()
std::string m_Name
Definition: SECircuitNode.h:77
virtual QuantityScalar & GetQuantity()
virtual void ImposeQuantity(double v, const QuantityUnit &unit)
virtual QuantityScalar & GetQuantityBaseline()
virtual bool HasQuantityBaseline() const
virtual void RemoveImposedQuantity()
virtual PotentialScalar & GetNextPotential()
QuantityScalar * m_QuantityBaseline
Definition: SECircuitNode.h:90
PotentialScalar * m_NextPotential
Definition: SECircuitNode.h:82
int m_CalculatorIndex
Definition: SECircuitNode.h:94
virtual bool HasQuantity() const
virtual bool HasPotential() const
virtual ~SECircuitNode()
virtual void Clear()

Distributed under the Apache License, Version 2.0.

See accompanying NOTICE file for details.