Harmony
HARMONic stabilitY assessment of PE-penetrated power systems
Loading...
Searching...
No Matches
Cable.h
Go to the documentation of this file.
1#ifndef _CABLE_H_
2#define _CABLE_H_
3
9#include "../Element.h"
10
11class Element; // Forward declaration of Element class
12
18class Cable : public Element {
19public:
20
25 class Conductor {
26 public:
35 Conductor(double ri = 0, double ro = 0, double resistivity = 0, double permeability = 1, double area = 0)
37
38 // Member variables
39 double ri; //conductor inner radius
40 double ro; //conductor outer radius
41 double resistivity; //conductor resistivity ρ [Ωm]
42 double permeability; //relative permeability μᵣ
43 double area; //nominal area
44 };
45
50 class Insulator {
51 public:
61 Insulator(double ri = 0, double ro = 0, double permittivity = 1, double permeability = 1, double innerSemiConductorOuterRadius = 0, double outerSemiConductorInnerRadius = 0)
62 : ri(ri), ro(ro), permittivity(permittivity), permeability(permeability), a(innerSemiConductorOuterRadius), b(outerSemiConductorInnerRadius) {}
63
64 // Member variables
65 double ri; //insulator inner radius
66 double ro; //insulator outer radius
67 double permittivity; //relative permittivity epsilon_r
68 double permeability; //relative permeability mu_r
69
70 //If a semiconductor is present in an insulator, we have: r_i < semiconductor < a + a < insulator < b + b < semiconductor < r_o
71 double a; //inner semiconductor outer radius -> Inner semiconductor r_i < r < a
72 double b; //outer semiconductor inner radius -> Outer semiconductor b < r < r_o
73 };
74
75 // Constructor simple
79 Cable() : Element("cable", "DC1", 1, 1), length(0), type("underground"), eliminate(true) {};
80
93 Cable(const string& symbol, const std::string& location, int pins, const string& type_constructor,
94 double length_constructor, std::tuple<double, double, double> earth,
95 std::map<string, Conductor*> conductors_constructor, std::map<string, Insulator*> insulators_constructor,
96 std::vector<std::pair<double, double>> positions_constructor);
97
98 void setLength(double newLength) { length = newLength; }
99 void addConductor(const std::string& key, Conductor* conductor) { conductors[key] = conductor; }
100 void addInsulator(const std::string& key, Insulator* insulator) { insulators[key] = insulator; }
101 void addPosition(double x, double y) { positions.emplace_back(x, y); }
102 void setEarthParameters(double mu, double epsilon, double rho) { earth_parameters = std::make_tuple(mu, epsilon, rho); }
103 void setConfiguration(const std::string& newConfig) { configuration = newConfig; }
104 void setEliminate(bool value) { eliminate = value; } //to change the value of eliminate
105
106
107 // Getter methods
108 double getLength() const { return length; }
109 const std::tuple<double, double, double>& getEarthParameters() const { return earth_parameters; }
110 const std::vector<std::pair<double, double>>& getPositions() const { return positions; }
111 const std::string& getConfiguration() const { return configuration; }
112 const std::string& getType() const { return type; }
113 bool getEliminate() const { return eliminate; }
114
115 Conductor* getConductor(const std::string& key) {
116 auto it = conductors.find(key);
117 if (it != conductors.end()) {
118 return (it->second); // Return a pointer to the conductor if found
119 }
120 else {
121 return nullptr; // Return nullptr if conductor not found
122 }
123 }
124
125 // Function to access an insulator from the insulators map
126 Insulator* getInsulator(const std::string& key) {
127 auto it = insulators.find(key);
128 if (it != insulators.end()) {
129 return (it->second);
130 }
131 return nullptr; // Insulator not found
132 }
133
134 void updateInsulator(const std::string& key, Insulator* insulator) {
135 insulators[key] = insulator;
136 }
137
138 void updateLayers(); // Function to update layers
139
140 // Function to modify a conductor in the conductors map
141 void updateConductor(const std::string& key, Conductor* conductor) {
142 conductors[key] = conductor;
143 }
144
145 // Function to remove a conductor from the conductors map
146 void removeConductor(const std::string& key) {
147 auto it = conductors.find(key);
148 if (it != conductors.end()) {
149 delete it->second;
150 conductors.erase(it);
151 }
152 }
153
154 // Define a member function in the Cable class to access the conductors map
155 const std::map<std::string, Conductor*>& getCableConductors() const {
156 return conductors;
157 }
158
159 // Define a member function in the Cable class to access the insulators map
160 const std::map<std::string, Insulator*>& getCableInsulators() const {
161 return insulators;
162 }
163
164 // Functions for handling properties
165 bool hasProperty(const std::string& key) { return (conductors.find(key) != conductors.end() || insulators.find(key) != insulators.end()); }
166 bool isConductor(const std::string& key) { return (conductors.find(key) != conductors.end()); }
167 bool isInsulator(const std::string& key) { return (insulators.find(key) != insulators.end()); }
168
169
170 // Function to compute Y parameters
171 virtual std::vector<std::vector<complex<double>>> compute_y_parameters(double frequency) override;
172
173 virtual void printElementValues() override;
174
175 // Destructor
176 ~Cable();
177
178private:
179 // Private member variables
180 double length; //line length [m]
181 //dictionary with a particular order. Key: Symbol-> C1, C2, C3 and C4. Value: Conductor-> Mutable Struct Conductor, defined above
182 // entries are "Symbol" of the conductor and pointer to the conductor
183 std::map<std::string, Conductor*> conductors;
184 //dictionary with a particular order. Key: Symbol-> I1, I2, I3 and I4. Value: Insulator-> Mutable Struct Insulator, defined above
185 // entries are "Symbol" of the insulator and pointer to the insulator
186 std::map<std::string, Insulator*> insulators;
187 //indicates all variables are real number, vector composed by tuple of real numbers. e.g. positions=[(0,0),(1,1)]. Cables positions 1st:x=0, y=0. 2nd: x=1, y=1.
188 std::vector<std::pair<double, double>> positions;
189 //(μᵣ, ϵᵣ, ρ) in units ([], [], [Ωm]) compact way of representing the type for a tuple of length N where all elements are of type Int or Float64.
190 std::tuple<double, double, double> earth_parameters;
191
192 std::string configuration = "coaxial"; // Configuration is a datatype symbol with value "coaxial".
193 std::string type; // Type is a datatype symbol with value "underground" or "aerial".
194 bool eliminate = true;
195
196 DenseMatrix Z;
197 DenseMatrix Y;
198 MatrixXd P; //DenseMatrix P;
199};
200
201#endif
Conducting layer with inner/outer radius and material properties.
Definition Cable.h:25
double area
Definition Cable.h:43
double ri
Definition Cable.h:39
double permeability
Definition Cable.h:42
double resistivity
Definition Cable.h:41
double ro
Definition Cable.h:40
Conductor(double ri=0, double ro=0, double resistivity=0, double permeability=1, double area=0)
Construct a cable conductor layer.
Definition Cable.h:35
Insulating layer with optional inner/outer semiconductor radii.
Definition Cable.h:50
double ro
Definition Cable.h:66
double b
Definition Cable.h:72
double ri
Definition Cable.h:65
double permittivity
Definition Cable.h:67
double permeability
Definition Cable.h:68
Insulator(double ri=0, double ro=0, double permittivity=1, double permeability=1, double innerSemiConductorOuterRadius=0, double outerSemiConductorInnerRadius=0)
Construct a cable insulator layer.
Definition Cable.h:61
double a
Definition Cable.h:71
Multi-layer cable model with conductor and insulator sections.
Definition Cable.h:18
void addConductor(const std::string &key, Conductor *conductor)
Definition Cable.h:99
void setConfiguration(const std::string &newConfig)
Definition Cable.h:103
const std::vector< std::pair< double, double > > & getPositions() const
Definition Cable.h:110
const std::tuple< double, double, double > & getEarthParameters() const
Definition Cable.h:109
const std::map< std::string, Conductor * > & getCableConductors() const
Definition Cable.h:155
bool getEliminate() const
Definition Cable.h:113
const std::string & getType() const
Definition Cable.h:112
void setLength(double newLength)
Definition Cable.h:98
void addInsulator(const std::string &key, Insulator *insulator)
Definition Cable.h:100
const std::map< std::string, Insulator * > & getCableInsulators() const
Definition Cable.h:160
void updateLayers()
Definition Cable.cpp:336
void setEliminate(bool value)
Definition Cable.h:104
void removeConductor(const std::string &key)
Definition Cable.h:146
~Cable()
Definition Cable.cpp:277
bool hasProperty(const std::string &key)
Definition Cable.h:165
Conductor * getConductor(const std::string &key)
Definition Cable.h:115
double getLength() const
Definition Cable.h:108
void updateConductor(const std::string &key, Conductor *conductor)
Definition Cable.h:141
Insulator * getInsulator(const std::string &key)
Definition Cable.h:126
void addPosition(double x, double y)
Definition Cable.h:101
virtual std::vector< std::vector< complex< double > > > compute_y_parameters(double frequency) override
Compute complex Y-parameters at a single frequency.
Definition Cable.cpp:287
void setEarthParameters(double mu, double epsilon, double rho)
Definition Cable.h:102
void updateInsulator(const std::string &key, Insulator *insulator)
Definition Cable.h:134
const std::string & getConfiguration() const
Definition Cable.h:111
virtual void printElementValues() override
Print extended element-specific values (override in derived classes).
Definition Cable.cpp:403
bool isInsulator(const std::string &key)
Definition Cable.h:167
bool isConductor(const std::string &key)
Definition Cable.h:166
Cable()
Default cable with placeholder symbol, location, and pin counts.
Definition Cable.h:79
Base class for multi-phase network elements with Y-parameters and MNA stamping hooks.
Definition Element.h:29