Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
eclipse
GitHub Repository: eclipse/sumo
Path: blob/main/src/utils/traction_wire/Element.h
169678 views
1
/****************************************************************************/
2
// Eclipse SUMO, Simulation of Urban MObility; see https://eclipse.dev/sumo
3
// Copyright (C) 2001-2025 German Aerospace Center (DLR) and others.
4
// This program and the accompanying materials are made available under the
5
// terms of the Eclipse Public License 2.0 which is available at
6
// https://www.eclipse.org/legal/epl-2.0/
7
// This Source Code may also be made available under the following Secondary
8
// Licenses when the conditions for such availability set forth in the Eclipse
9
// Public License 2.0 are satisfied: GNU General Public License, version 2
10
// or later which is available at
11
// https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html
12
// SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-or-later
13
/****************************************************************************/
14
/// @file Element.h
15
/// @author Jakub Sevcik (RICE)
16
/// @author Jan Prikryl (RICE)
17
/// @date 2019-12-15
18
///
19
/// @note based on work 2017 Ahmad Khaled, Ahmad Essam, Omnia Zakaria, Mary Nader
20
///
21
// Representation of electric circuit elements: resistors, voltage and current sources
22
/****************************************************************************/
23
#pragma once
24
#include <config.h>
25
26
#include <string>
27
#include <iostream>
28
29
30
// ===========================================================================
31
// class declarations
32
// ===========================================================================
33
class Node;
34
35
36
// ===========================================================================
37
// class definitions
38
// ===========================================================================
39
/**
40
* An element is any component in the circuit (resistor, current source, voltage source)
41
* Every element has two terminals pNode (positive terminal) and nNode (negative terminal)
42
* value is the resistance in case of a resistor, current in case of a current source
43
* and voltage in case of voltage source.
44
*
45
* Conventions used:
46
*
47
* 1 - in case of a current source, "value" represents the current going from nNode to pNode,
48
* 2 - in case of a voltage source, "value" represents the voltage difference of pNode - nNode.
49
*/
50
class Element {
51
52
public:
53
enum ElementType {
54
RESISTOR_traction_wire,
55
CURRENT_SOURCE_traction_wire,
56
VOLTAGE_SOURCE_traction_wire,
57
ERROR_traction_wire
58
};
59
60
private:
61
Node* pNode;
62
Node* nNode;
63
double voltage;
64
double current;
65
double resistance;
66
double powerWanted;
67
ElementType type;
68
std::string name; // unique property, each object has distinctive and unique name
69
int id; // a sequential ID number, might be useful when making the equation
70
bool isenabled;
71
72
public:
73
// a constructor. same functionality as init functions in the last project
74
Element(std::string name, ElementType type, double value);
75
76
//getters and setters
77
double getVoltage(); // get the voltage across the element
78
double getCurrent(); // get the current running through the element
79
double getResistance();
80
double getPowerWanted();
81
double getPower();
82
int getId();
83
Node* getPosNode();
84
Node* getNegNode();
85
ElementType getType();
86
std::string getName();
87
bool isEnabled();
88
89
void setPosNode(Node* node);
90
void setNegNode(Node* node);
91
void setId(int id);
92
void setVoltage(double voltage);
93
void setCurrent(double current);
94
void setResistance(double resistance);
95
void setPowerWanted(double powerWanted);
96
void setEnabled(bool isenabled);
97
98
// if node == pNode, return nNode, else if node == nNode return pNode, else return NULL
99
Node* getTheOtherNode(Node* node);
100
// sets the type of elements
101
void setType(ElementType ET);
102
103
};
104
105