Skip to content

Commit f5fba39

Browse files
authored
Merge pull request #39 from opusonesolutions/multi-conductor
Multi-conductor cable radius means outside radius
2 parents 9eb2fa8 + da387a6 commit f5fba39

File tree

3 files changed

+28
-27
lines changed

3 files changed

+28
-27
lines changed

carsons/carsons.py

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -291,18 +291,15 @@ def GMR_cn(self, phase) -> float:
291291
class MultiConductorCarsonsEquations(ModifiedCarsonsEquations):
292292
def __init__(self, model):
293293
super().__init__(model)
294-
self.radius: Dict[str, float] = model.radius
295-
self.insulation_thickness: Dict[str, float] = \
296-
model.insulation_thickness
294+
self.outside_radius: Dict[str, float] = model.outside_radius
297295

298296
def compute_d(self, i, j) -> float:
299297
# Assumptions:
300298
# 1. All conductors in the cable are touching each other and
301299
# therefore equidistant.
302300
# 2. In case of quadruplex cables, the space between conductors
303301
# which are diagonally positioned is neglected.
304-
return (self.radius[i] + self.radius[j]
305-
+ self.insulation_thickness[i] + self.insulation_thickness[j])
302+
return self.outside_radius[i] + self.outside_radius[j]
306303

307304
@property
308305
def conductors(self):

tests/helpers.py

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -95,15 +95,13 @@ def __init__(self, conductors, is_secondary=False):
9595
self._resistance = {}
9696
self._geometric_mean_radius = {}
9797
self._wire_positions = {}
98-
self._radius = {}
99-
self._insulation_thickness = {}
98+
self._outside_radius = {}
10099

101100
for phase, val in conductors.items():
102101
self._resistance[phase] = val['resistance']
103102
self._geometric_mean_radius[phase] = val['gmr']
104103
self._wire_positions[phase] = val['wire_positions']
105-
self._radius[phase] = val['radius']
106-
self._insulation_thickness[phase] = val['insulation_thickness']
104+
self._outside_radius[phase] = val['outside_radius']
107105

108106
self._phases = sorted(list(conductors.keys()))
109107

@@ -124,9 +122,5 @@ def phases(self):
124122
return self._phases
125123

126124
@property
127-
def radius(self):
128-
return self._radius
129-
130-
@property
131-
def insulation_thickness(self):
132-
return self._insulation_thickness
125+
def outside_radius(self):
126+
return self._outside_radius

tests/test_multi_conductor.py

Lines changed: 22 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -21,12 +21,13 @@ def test_triplex_phased_cable():
2121
Test against 3/0 triplex NS75 aluminum conductor cable.
2222
"""
2323
phases = 'ABC'
24+
insulation_thickness = 0.00137 # meters
2425
phase_conductor = {
2526
'resistance': (0.611 * (ohms / miles)).to('ohm / meters').magnitude,
2627
'gmr': (0.014 * feet).to('meters').magnitude,
2728
'wire_positions': (0, 5),
28-
'radius': (0.464 / 2 * inches).to('meters').magnitude,
29-
'insulation_thickness': 0.00137,
29+
'outside_radius': ((0.464 / 2 * inches).to('meters').magnitude +
30+
insulation_thickness),
3031
}
3132
multi_line_model = MultiLineModel({ph: phase_conductor for ph in phases})
3233
carsons_model = MultiConductorCarsonsEquations(multi_line_model)
@@ -51,13 +52,17 @@ def test_triplex_secondary():
5152
'resistance': (0.97 * (ohms / miles)).to('ohm / meters').magnitude,
5253
'gmr': (0.0111 * feet).to('meters').magnitude,
5354
'wire_positions': (0, 1),
54-
'radius': (0.368 / 2 * inches).to('meters').magnitude,
5555
}
56+
insulation_thickness = 0.08 # inches
5657
phase_conductor = {
5758
**conductor,
58-
'insulation_thickness': (0.08 * inches).to('meters').magnitude
59+
'outside_radius': ((0.368 / 2 + insulation_thickness) * inches
60+
).to('meters').magnitude,
61+
}
62+
neutral_conductor = {
63+
**conductor,
64+
'outside_radius': (0.368 / 2 * inches).to('meters').magnitude,
5965
}
60-
neutral_conductor = {**conductor, 'insulation_thickness': 0}
6166
multi_line_model = MultiLineModel(
6267
{'S1': phase_conductor, 'S2': phase_conductor, 'N': neutral_conductor}
6368
)
@@ -86,26 +91,31 @@ def test_triplex_secondary():
8691

8792

8893
@pytest.mark.parametrize(
89-
'phases, resistance, gmr, wire_position, radius, insulation_thickness, '
90-
'expected_result',
94+
'phases, resistance, gmr, wire_position, core_radius,'
95+
'insulation_thickness, expected_result',
9196
[('B', 0.97, 0.0111, (0, 5), 0.368/2, 0.00137, EXPECTED_DUPLEX_IMPEDANCE),
9297
('ABC', 0.484, 0.0158, (0, 5), 0.522/2, 0.00137,
9398
EXPECTED_QUADRUPLEX_IMPEDANCE)]
9499
)
95100
def test_multi_conductor_cable_with_neutral(
96-
phases, resistance, gmr, wire_position, radius,
101+
phases, resistance, gmr, wire_position, core_radius,
97102
insulation_thickness, expected_result
98103
):
99104
conductor = {
100105
'resistance': (resistance * (ohms / miles)
101106
).to('ohm / meters').magnitude,
102107
'gmr': (gmr * feet).to('meters').magnitude,
103108
'wire_positions': wire_position,
104-
'radius': (radius * inches).to('meters').magnitude,
105109
}
106-
phase_conductor = {**conductor,
107-
'insulation_thickness': insulation_thickness}
108-
neutral_conductor = {**conductor, 'insulation_thickness': 0}
110+
phase_conductor = {
111+
**conductor,
112+
'outside_radius': ((core_radius * inches).to('meters').magnitude +
113+
insulation_thickness),
114+
}
115+
neutral_conductor = {
116+
**conductor,
117+
'outside_radius': (core_radius * inches).to('meters').magnitude,
118+
}
109119

110120
line_model_dict = {ph: phase_conductor for ph in phases}
111121
line_model_dict.update({'N': neutral_conductor})

0 commit comments

Comments
 (0)