SECircuitPath.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/cdm/circuit/SECircuitNode.h>
16 #include <biogears/schema/cdm/Properties.hxx>
17 
18 #define CIRCUIT_PATH_TEMPLATE typename FluxScalar, typename ResistanceScalar, typename CapacitanceScalar, typename InductanceScalar, typename PotentialScalar, typename QuantityScalar
19 #define CIRCUIT_PATH_TYPES FluxScalar, ResistanceScalar, CapacitanceScalar, InductanceScalar, PotentialScalar, QuantityScalar
20 #define ELECTRICAL_CIRCUIT_PATH SEScalarElectricCurrent, SEScalarElectricResistance, SEScalarElectricCapacitance, SEScalarElectricInductance, SEScalarElectricPotential, SEScalarElectricCharge
21 #define FLUID_CIRCUIT_PATH SEScalarVolumePerTime, SEScalarFlowResistance, SEScalarFlowCompliance, SEScalarFlowInertance, SEScalarPressure, SEScalarVolume
22 #define THERMAL_CIRCUIT_PATH SEScalarPower, SEScalarHeatResistance, SEScalarHeatCapacitance, SEScalarHeatInductance, SEScalarTemperature, SEScalarEnergy
23 
24 CDM_BIND_DECL(CircuitPathData)
25 
26 namespace biogears {
27 template <CIRCUIT_PATH_TEMPLATE>
28 class SECircuitPath : public Loggable {
29  template <typename CircuitBindType, typename NodeType, typename CircuitNodeBindType, typename PathType, typename CircuitPathBindType>
30  friend class SECircuit;
31 
32 protected:
35 
36 public:
37  virtual ~SECircuitPath();
38 
39  virtual void Clear();
40 
41  virtual bool Load(const CDM::CircuitPathData& in);
42  virtual CDM::CircuitPathData* Unload() const = 0;
43 
44 protected:
45  virtual void Unload(CDM::CircuitPathData& data) const;
46 
47 public:
48  virtual std::string GetName() const;
49  virtual const char* GetName_cStr() const;
50 
51  virtual SECircuitNode<CIRCUIT_NODE_TYPES>& GetSourceNode() const;
52  virtual SECircuitNode<CIRCUIT_NODE_TYPES>& GetTargetNode() const;
53 
54  virtual bool HasFlux() const;
55  virtual FluxScalar& GetFlux();
56  virtual bool HasNextFlux() const;
57  virtual FluxScalar& GetNextFlux();
58  virtual bool HasFluxSource() const;
59  virtual FluxScalar& GetFluxSource();
60  virtual bool HasNextFluxSource() const;
61  virtual FluxScalar& GetNextFluxSource();
62  virtual bool HasFluxSourceBaseline() const;
63  virtual FluxScalar& GetFluxSourceBaseline();
64 
65  virtual bool HasResistance() const;
66  virtual ResistanceScalar& GetResistance();
67  virtual bool HasNextResistance() const;
68  virtual ResistanceScalar& GetNextResistance();
69  virtual bool HasResistanceBaseline() const;
70  virtual ResistanceScalar& GetResistanceBaseline();
71 
72  virtual bool HasCapacitance() const;
73  virtual CapacitanceScalar& GetCapacitance();
74  virtual bool HasNextCapacitance() const;
75  virtual CapacitanceScalar& GetNextCapacitance();
76  virtual bool HasCapacitanceBaseline() const;
77  virtual CapacitanceScalar& GetCapacitanceBaseline();
78 
79  virtual bool HasInductance() const;
80  virtual InductanceScalar& GetInductance();
81  virtual bool HasNextInductance() const;
82  virtual InductanceScalar& GetNextInductance();
83  virtual bool HasInductanceBaseline() const;
84  virtual InductanceScalar& GetInductanceBaseline();
85 
86  virtual bool HasPotentialSource() const;
87  virtual PotentialScalar& GetPotentialSource();
88  virtual bool HasNextPotentialSource() const;
89  virtual PotentialScalar& GetNextPotentialSource();
90  virtual bool HasPotentialSourceBaseline() const;
91  virtual PotentialScalar& GetPotentialSourceBaseline();
92  virtual bool HasValveBreakdownPotential() const;
93  virtual PotentialScalar& GetValveBreakdownPotential();
94 
95  virtual bool HasValidElements() const;
96  virtual unsigned short NumberOfElements() const { return m_NumElements; }
97  virtual unsigned short NumberOfNextElements() const { return m_NumNextElements; }
98 
99  virtual CDM::enumOpenClosed::value GetSwitch() const;
100  virtual void SetSwitch(CDM::enumOpenClosed::value state);
101  virtual void FlipSwitch();
102  virtual bool HasSwitch() const;
103  virtual void InvalidateSwitch();
104 
105  virtual CDM::enumOpenClosed::value GetNextSwitch() const;
106  virtual void SetNextSwitch(CDM::enumOpenClosed::value state);
107  virtual void FlipNextSwitch();
108  virtual bool HasNextSwitch() const;
109  virtual void InvalidateNextSwitch();
110 
111  virtual CDM::enumOpenClosed::value GetValve() const;
112  virtual void SetValve(CDM::enumOpenClosed::value state);
113  virtual void FlipValve();
114  virtual bool HasValve() const;
115  virtual void InvalidateValve();
116 
117  virtual CDM::enumOpenClosed::value GetNextValve() const;
118  virtual void SetNextValve(CDM::enumOpenClosed::value state);
119  virtual void FlipNextValve();
120  virtual bool HasNextValve() const;
121  virtual void InvalidateNextValve();
122 
123  virtual CDM::enumOpenClosed::value GetPolarizedState() const;
124  virtual void SetPolarizedState(CDM::enumOpenClosed::value state);
125  virtual void FlipPolarizedState();
126  virtual bool HasPolarizedState() const;
127  virtual void InvalidatePolarizedState();
128 
129  virtual CDM::enumOpenClosed::value GetNextPolarizedState() const;
130  virtual void SetNextPolarizedState(CDM::enumOpenClosed::value state);
131  virtual void FlipNextPolarizedState();
132  virtual bool HasNextPolarizedState() const;
133  virtual void InvalidateNextPolarizedState();
134 
135 protected:
136  std::string m_Name;
139  mutable unsigned short m_NumElements;
140  mutable unsigned short m_NumNextElements;
142  // Valves and Switches //
150 
151  ResistanceScalar* m_Resistance;
152  ResistanceScalar* m_NextResistance;
153  ResistanceScalar* m_ResistanceBaseline;
154 
155  CapacitanceScalar* m_Capacitance;
156  CapacitanceScalar* m_NextCapacitance;
157  CapacitanceScalar* m_CapacitanceBaseline;
158 
159  InductanceScalar* m_Inductance;
160  InductanceScalar* m_NextInductance;
161  InductanceScalar* m_InductanceBaseline;
162 
163  FluxScalar* m_Flux;
164  FluxScalar* m_NextFlux;
165  FluxScalar* m_FluxSource;
166  FluxScalar* m_NextFluxSource;
167  FluxScalar* m_FluxSourceBaseline;
168 
169  PotentialScalar* m_PotentialSource;
170  PotentialScalar* m_NextPotentialSource;
171  PotentialScalar* m_PotentialSourceBaseline;
172  PotentialScalar* m_ValveBreakdownPotential;
173 };
174 }
175 #include <biogears/cdm/circuit/SECircuitPath.inl>
CapacitanceScalar * m_CapacitanceBaseline
Definition: SECircuitPath.h:157
Definition: SECircuit.h:25
ResistanceScalar * m_ResistanceBaseline
Definition: SECircuitPath.h:153
FluxScalar * m_NextFlux
Definition: SECircuitPath.h:164
CDM::enumOpenClosed::value m_NextPolarizedState
Definition: SECircuitPath.h:149
SECircuitNode< CIRCUIT_NODE_TYPES > & m_SourceNode
Definition: SECircuitPath.h:137
Definition: SECircuitPath.h:28
FluxScalar * m_FluxSource
Definition: SECircuitPath.h:165
InductanceScalar * m_InductanceBaseline
Definition: SECircuitPath.h:161
PotentialScalar * m_ValveBreakdownPotential
Definition: SECircuitPath.h:172
std::string m_Name
Definition: SECircuitPath.h:136
CDM::enumOpenClosed::value m_Switch
Definition: SECircuitPath.h:144
Definition: Logger.h:27
unsigned short m_NumElements
Definition: SECircuitPath.h:139
unsigned short m_NumNextElements
Definition: SECircuitPath.h:140
PotentialScalar * m_NextPotentialSource
Definition: SECircuitPath.h:170
ResistanceScalar * m_NextResistance
Definition: SECircuitPath.h:152
value
Underlying enum type.
Definition: Properties.hxx:1917
PotentialScalar * m_PotentialSourceBaseline
Definition: SECircuitPath.h:171
SECircuitNode< CIRCUIT_NODE_TYPES > & m_TargetNode
Definition: SECircuitPath.h:138
CapacitanceScalar * m_NextCapacitance
Definition: SECircuitPath.h:156
InductanceScalar * m_Inductance
Definition: SECircuitPath.h:159
Class corresponding to the CircuitPathData schema type.
Definition: Circuit.hxx:1411
CDM::enumOpenClosed::value m_NextSwitch
Definition: SECircuitPath.h:145
CDM::enumOpenClosed::value m_Valve
Definition: SECircuitPath.h:146
virtual unsigned short NumberOfElements() const
Definition: SECircuitPath.h:96
InductanceScalar * m_NextInductance
Definition: SECircuitPath.h:160
virtual unsigned short NumberOfNextElements() const
Definition: SECircuitPath.h:97
ResistanceScalar * m_Resistance
Definition: SECircuitPath.h:151
FluxScalar * m_NextFluxSource
Definition: SECircuitPath.h:166
FluxScalar * m_FluxSourceBaseline
Definition: SECircuitPath.h:167
CDM::enumOpenClosed::value m_NextValve
Definition: SECircuitPath.h:147
Definition: SEElectricalCircuit.h:18
Definition: SECircuitNode.h:28
PotentialScalar * m_PotentialSource
Definition: SECircuitPath.h:169
FluxScalar * m_Flux
Definition: SECircuitPath.h:163
CapacitanceScalar * m_Capacitance
Definition: SECircuitPath.h:155
CDM::enumOpenClosed::value m_PolarizedState
Definition: SECircuitPath.h:148