femagtools 1.8.14__py3-none-any.whl → 1.8.15__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
femagtools/__init__.py CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  """
4
4
  __title__ = 'femagtools'
5
- __version__ = '1.8.14'
5
+ __version__ = '1.8.15'
6
6
  __author__ = 'Ronald Tanner'
7
7
  __license__ = 'BSD'
8
8
  __copyright__ = 'Copyright 2023-2025 Gamma Technology'
femagtools/bch.py CHANGED
@@ -420,6 +420,11 @@ class Reader:
420
420
  self.windings[w[0]]['N'].append(w[2])
421
421
  self.windings[w[0]]['R'].append(w[3]/1e3)
422
422
  self.windings[w[0]]['PHI'].append(w[4])
423
+ # check if external rotor
424
+ if hasattr(self, "machine"):
425
+ if "fc_radius" in self.machine:
426
+ if np.mean(self.windings[1]["R"]) < self.machine["fc_radius"]:
427
+ self.external_rotor = True
423
428
 
424
429
  def __read_winding_factors(self, content):
425
430
  "read winding factors section"
@@ -1202,10 +1207,7 @@ class Reader:
1202
1207
  m = []
1203
1208
  subregs = [name.split()[-1]
1204
1209
  for name in content[2].split('\t') if name][2:]
1205
- # outer rotor motor
1206
- if 'Iron' in subregs and \
1207
- 'Rotor' in subregs:
1208
- self.external_rotor = True
1210
+
1209
1211
  logger.info("Stator Subregions: %s", subregs)
1210
1212
  speed = float(content[0].split()[-1])/60.
1211
1213
  logger.info('losses for speed %f', speed)
femagtools/femag.py CHANGED
@@ -153,7 +153,7 @@ class BaseFemag(object):
153
153
  dest = dir if dir else self.workdir
154
154
  if isinstance(feloss, (int, float)):
155
155
  try:
156
- feloss = {1: 'jordan', 11: 'bertotti'}[int(feloss)]
156
+ feloss = {1: 'jordan', 2: "steinmetz", 10:"modified steinmetz", 11: 'bertotti'}[int(feloss)]
157
157
  except KeyError:
158
158
  feloss = ''
159
159
  return [self.magnetizingCurves.writefile(m[0], dest,
@@ -188,6 +188,11 @@ class BaseFemag(object):
188
188
  recsin = simulation.get('recsin', '')
189
189
  feloss = simulation.get('calc_fe_loss', '')
190
190
  self.copy_magnetizing_curves(self.model, recsin=recsin, feloss=feloss)
191
+
192
+ if feloss and \
193
+ int(feloss) in (1, 2):
194
+ simulation["calc_fe_loss"] = 1
195
+
191
196
  try:
192
197
  if 'wdgdef' in self.model.winding:
193
198
  self.model.winding['wdgfile'] = self.create_wdg_def(
@@ -213,6 +213,9 @@ def parident(workdir, engine, temp, machine,
213
213
  if np.isscalar(machine['magnet'][slotmodel]['rel_magn_width']):
214
214
  num_slices = kwargs.get('num_slices', 3)
215
215
  rmagw = num_slices*[machine['magnet'][slotmodel]['rel_magn_width']]
216
+ elif len(machine['magnet'][slotmodel]['rel_magn_width']) == 1:
217
+ num_slices = kwargs.get('num_slices', 3)
218
+ rmagw = num_slices*machine['magnet'][slotmodel]['rel_magn_width']
216
219
  else:
217
220
  rmagw = machine['magnet'][slotmodel]['rel_magn_width']
218
221
  num_slices = len(rmagw)
@@ -543,13 +546,18 @@ def process(lfe, pole_width, machine, bch):
543
546
  nsegx = machine['magnet'].get('num_segments', 1)
544
547
  if type(nsegx) == int:
545
548
  nsegx = [nsegx]*len(bch)
549
+ elif len(nsegx) == 1 and len(nsegx) < len(bch):
550
+ nsegx = nsegx*len(bch)
551
+ else:
552
+ pass
546
553
  for nx, b in zip(nsegx, bch):
547
554
  pm = b['losses'][0]['magnet_data']
548
555
  magloss = ecloss.MagnLoss(magnet_data=[pm])
549
556
  ml = magloss.calc_losses_ialh2(nsegx=nx)
550
- b['losses'][-1][k] = ml[0]
557
+ b["losses"][-1].update({k: ml[0]})
551
558
  else:
552
559
  k = 'magnetJ'
560
+
553
561
  if len(pole_width) > 1:
554
562
  maglosses = _integrate1d(radius, scale_factor*np.array(
555
563
  [b['losses'][-1][k]/lz
@@ -1025,7 +1033,9 @@ class AFPM:
1025
1033
  machine['magnet'][slotmodel]['rel_magn_width'])
1026
1034
  if np.isscalar(machine['magnet'][slotmodel]['rel_magn_width']):
1027
1035
  rmagw = num_slices*[machine['magnet'][slotmodel]['rel_magn_width']]
1028
- else:
1036
+ elif len(machine['magnet'][slotmodel]['rel_magn_width']) == 1:
1037
+ rmagw = num_slices*machine['magnet'][slotmodel]['rel_magn_width']
1038
+ else:
1029
1039
  rmagw = machine['magnet'][slotmodel]['rel_magn_width']
1030
1040
  num_slices = len(rmagw)
1031
1041
 
@@ -370,7 +370,7 @@ def efficiency_losses_map(eecpars, u1, T, temp, n, npoints=(60, 40),
370
370
  plfe1 = m.kpfe*m.iqd_plfe1(*iqd, f1)
371
371
  plfe2 = m.kpfe*m.iqd_plfe2(*iqd, f1)
372
372
  plmag = np.zeros_like(plfe2)
373
- plcu1 = m.iqd_plcu1(iqd[0], iqd[1], 2*np.pi*f1)
373
+ plcu1 = m.iqd_plcu1(iqd[0], iqd[1], f1)
374
374
  try:
375
375
  plcu1_dc = m.iqd_plcu1(iqd[0], iqd[1],
376
376
  np.array([0.0 for i in f1])).tolist()
femagtools/plot/wdg.py CHANGED
@@ -7,6 +7,7 @@
7
7
  """
8
8
  import numpy as np
9
9
  import matplotlib.pyplot as plt
10
+ import logging
10
11
 
11
12
 
12
13
  def currdist(wdg, title='', k='all', phi=0, ax=0):
@@ -81,13 +82,13 @@ def mmf_fft(f, title='', mmfmin=1e-2, ax=0):
81
82
  pass
82
83
 
83
84
 
84
- def zoneplan(wdg, write_title=True, max_slots=0, ax=0):
85
+ def zoneplan(wdg, write_title=True, ax=0, max_slots=0):
85
86
  """plot zone plan of winding wdg"""
86
87
  from matplotlib.patches import Rectangle
87
88
  upper, lower = wdg.zoneplan()
88
89
  Qb = len([n for l in upper for n in l])
89
90
  if max_slots:
90
- Qb = max_slots
91
+ Qb = min(max_slots, Qb)
91
92
  from femagtools.windings import coil_color
92
93
  h = 0.5
93
94
  w = 1
@@ -171,7 +172,7 @@ def winding_factors(wdg, n=8, ax=0):
171
172
  pass
172
173
 
173
174
 
174
- def winding(wdg, ax=0):
175
+ def winding(wdg, ax=0, max_slots=0):
175
176
  """plot coils of windings wdg"""
176
177
  from matplotlib.patches import Rectangle
177
178
  from matplotlib.lines import Line2D
@@ -186,12 +187,16 @@ def winding(wdg, ax=0):
186
187
  if ax == 0:
187
188
  ax = plt.gca()
188
189
  z = wdg.zoneplan()
190
+ z0 = z[0] if len(z[0]) >= len(z[1]) else z[1]
191
+ Qb = sum([len(l) for l in z0])
192
+ if max_slots:
193
+ Qb = min(max_slots, Qb)
189
194
  xoff = 0
190
195
  if z[-1]:
191
196
  xoff = 0.75
192
197
  yd = dslot*wdg.yd
193
198
  mh = 2*coil_height/yd
194
- slots = sorted([abs(n) for m in z[0] for n in m])
199
+ slots = sorted([abs(n) for m in z[0] for n in m])[:Qb]
195
200
  smax = slots[-1]*dslot
196
201
  for n in slots: # draw slots and lamination
197
202
  x = n*dslot
@@ -204,6 +209,15 @@ def winding(wdg, ax=0):
204
209
  backgroundcolor="white",
205
210
  bbox=dict(boxstyle='circle,pad=0', fc="white", lw=0))
206
211
 
212
+ # colors in slots
213
+ csl = [['']*(Qb+1), ['']*(Qb+1)]
214
+ for i, layer in enumerate(z):
215
+ for m, mslots in enumerate(layer):
216
+ for k in mslots:
217
+ if abs(k) > Qb:
218
+ continue
219
+ csl[i][abs(k)-1] = coil_color[m]
220
+
207
221
  nl = 2 if z[1] else 1
208
222
  line_thickness = [0.6, 1.2]
209
223
  for i, layer in enumerate(z):
@@ -213,8 +227,9 @@ def winding(wdg, ax=0):
213
227
  d = 1
214
228
  for m, mslots in enumerate(layer):
215
229
  for k in mslots:
230
+ if abs(k) > Qb:
231
+ continue
216
232
  x = abs(k) * dslot + b
217
- kcoil = (abs(k)-1)//wdg.yd
218
233
  xpoints = []
219
234
  ypoints = []
220
235
  if nl == 2:
@@ -224,6 +239,12 @@ def winding(wdg, ax=0):
224
239
  d = 1 if i == 1 else 0
225
240
  else:
226
241
  d = 0 if k > 0 else 1
242
+ if abs(k) > 1:
243
+ if csl[0][abs(k)-2] == coil_color[m]:
244
+ d = 1
245
+ csl[0][abs(k)-1] = ''
246
+ else:
247
+ d = 0
227
248
 
228
249
  if direction[d] == 'right':
229
250
  # first layer, positive dir or neg. dir and 2-layers:
femagtools/windings.py CHANGED
@@ -12,6 +12,12 @@
12
12
  Number of coils per phase: c = Q * l/2/m
13
13
  Number of parallel circuits (coil groups): g
14
14
  Number of turns per phase: w1 = Q * n * l/2/m/g
15
+
16
+ Refs:
17
+ odd number of phases
18
+ doi:10.1007/s00502-021-00873-6
19
+ even number of phases
20
+ doi:10.1049/iet-epa.2020.0553
15
21
  """
16
22
  import numpy as np
17
23
  import femagtools.bch
@@ -131,8 +137,6 @@ def end_wdg_length_hairpins(wire_h, wire_w, wire_th, wire_gap,
131
137
 
132
138
 
133
139
  class Winding(object):
134
- # TODO: raise ValueError "Unbalanced winding" if Q % (m * gcd(Q, p)) != 0
135
-
136
140
  def __init__(self, arg):
137
141
  """create winding either from bch winding section or winding dict()
138
142
 
@@ -199,15 +203,29 @@ class Winding(object):
199
203
  coilwidth = self.yd
200
204
 
201
205
  self.yd = coilwidth
206
+ if self.m % 2: # odd number of phases
207
+ q1, q2, Yk, Qb = q1q2yk(self.Q, self.p, self.m, self.l)
208
+ j = 2 if layers == 1 else 1
209
+ k1 = [(q1 + q2)*i for i in range(self.m)]
210
+ k2 = (q1*(self.m+1) + q2*(self.m-1))//2
211
+ pos = [[(j*Yk*(k + n)) % Qb
212
+ for n in range(q1)] for k in k1]
213
+ neg = [[j*Yk*(k + n + k2) % Qb
214
+ for n in range(q2)] for k in k1]
215
+ else: # even number of phases
216
+ if np.mod(self.Q, 4/self.l*self.m*np.gcd(self.Q, self.p)):
217
+ raise ValueError(
218
+ f"Unbalanced winding: Q={self.Q}, p={self.p}, m={self.m}")
219
+ t = np.gcd(self.Q, self.p)
220
+ Qb = self.Q//t
221
+ seq = np.array([i for j in range(Qb)
222
+ for i in range(Qb) if (j*self.p//t - i) % Qb == 0])
223
+ if self.l == 1:
224
+ seq = seq[::2]
225
+ seq = np.array(seq).reshape((-1, 6))
226
+ pos = seq[::2].T
227
+ neg = seq[1::2].T
202
228
 
203
- q1, q2, Yk, Qb = q1q2yk(self.Q, self.p, self.m, self.l)
204
- j = 2 if layers == 1 else 1
205
- k1 = [(q1 + q2)*i for i in range(self.m)]
206
- k2 = (q1*(self.m+1) + q2*(self.m-1))//2
207
- pos = [[(j*Yk*(k + n)) % Qb
208
- for n in range(q1)] for k in k1]
209
- neg = [[j*Yk*(k + n + k2) % Qb
210
- for n in range(q2)] for k in k1]
211
229
  if self.l > 1:
212
230
  slots = [sorted([(k, 1, 1)
213
231
  for k in p] + [(k, -1, 1)
@@ -495,16 +513,16 @@ class Winding(object):
495
513
  if not is_upper(r, s*taus - (x-taus/2))]
496
514
  for key in self.windings]
497
515
 
498
- z = ([[d*s for s, d in zip(u, ud)] for u, ud in zip(upper, udirs)],
499
- [[d*s for s, d in zip(l, ld)] for l, ld in zip(lower, ldirs)])
516
+ z = ([[int(d*s) for s, d in zip(u, ud)] for u, ud in zip(upper, udirs)],
517
+ [[int(d*s) for s, d in zip(l, ld)] for l, ld in zip(lower, ldirs)])
500
518
  # complete if not basic winding:
501
519
  Qb = self.Q//num_basic_windings(self.Q, self.p, self.l)
502
520
 
503
521
  if not np.asarray(upper).size or not np.asarray(lower).size:
504
522
  layers = 1
505
523
  if layers == 1 and z[1]:
506
- z = ([[d*s for s, d in zip(l, ld)] for l, ld in zip(lower, ldirs)],
507
- [[d*s for s, d in zip(u, ud)] for u, ud in zip(upper, udirs)])
524
+ z = ([[int(d*s) for s, d in zip(l, ld)] for l, ld in zip(lower, ldirs)],
525
+ [[int(d*s) for s, d in zip(u, ud)] for u, ud in zip(upper, udirs)])
508
526
 
509
527
  if max([abs(n) for m in z[0] for n in m]) < Qb:
510
528
  return [[k + [-n+Qb//2 if n < 0 else -(n+Qb//2) for n in k]
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: femagtools
3
- Version: 1.8.14
3
+ Version: 1.8.15
4
4
  Summary: Python API for FEMAG
5
5
  Author-email: Ronald Tanner <tar@semafor.ch>, Dapu Zhang <dzhang@gtisoft.com>, Beat Holm <hob@semafor.ch>, Günther Amsler <amg@semafor.ch>, Nicolas Mauchle <mau@semafor.ch>
6
6
  License: Copyright (c) 2016-2023, Semafor Informatik & Energie AG, Basel
@@ -1,9 +1,9 @@
1
- femagtools/__init__.py,sha256=gJcP88c10j1_CgFqstAAzR2NxPFwt_-dkoYUz5i2-yk,1601
1
+ femagtools/__init__.py,sha256=qICbWqrJVPMO4pvagU-k07Q0dkOXxLyKxNhgp6aGXYQ,1601
2
2
  femagtools/airgap.py,sha256=hELJXe52yUw82JwZ1tGUXUtRhMG2_WSUBVeGkTZSAM8,1900
3
3
  femagtools/amazon.py,sha256=O1ICuv21XDAJi1qK1Sigs2TdS6hDZP19OzvmE2t76wU,12069
4
4
  femagtools/amela.py,sha256=2q-Xsj6i6nQ3iKheBR1vQ4FulJfF1i-L8w3a3U8GYWo,4362
5
5
  femagtools/asm.py,sha256=CiL0KWaF4P7O6-VwmGLdva_icwmPrPiI-TFQ19XYTKk,7660
6
- femagtools/bch.py,sha256=TC1DKNHuYS9QQNVdBdM1QiMmF6qlT3RnRA4uDMa270c,75623
6
+ femagtools/bch.py,sha256=e6kKyp4iaGb-GPMxwq5LgcyA0GQxteRJDfZsLZVfLyw,75732
7
7
  femagtools/bchxml.py,sha256=KrRjAdrUPZXmiWvonu9HhpG_NvImMBpiXWTL4iSr4kE,3142
8
8
  femagtools/condor.py,sha256=J8z9iBdvrGu3I1eFNoyKV8AXzRoTEPGLSak6cXUQxAM,10766
9
9
  femagtools/conductor.py,sha256=rXO7c7Qh_s7JpgILmLd4IbG64vP6Eh143YF9u25Mdwg,1076
@@ -15,7 +15,7 @@ femagtools/dakotaout.py,sha256=6nn0PXsB40mPKiQLenqAtHy0KXCO7kvqqQ-aD2JhQvw,5573
15
15
  femagtools/docker.py,sha256=XDVmLBB0z4sZZpcrx7Wbm84xl4ksj7aqn5-ZOPxdxm4,7460
16
16
  femagtools/ecloss.py,sha256=3qwfb_9qpWw99asUDcQgdbP51VGXp4MlLQZDhywWHEk,35051
17
17
  femagtools/erg.py,sha256=IXKq76P9qLt_ssNOP78v8Qizk3J2Zg80yaKDSjzwoJE,1224
18
- femagtools/femag.py,sha256=ejagYsOG9CJDcJQvldq3v3NcZ0OdMC5aipZenc-5MI4,44868
18
+ femagtools/femag.py,sha256=rJ_n1Fvu8RcL-6LTH5o-lvV8pP0kpsqmx6RggsiJMhU,45013
19
19
  femagtools/forcedens.py,sha256=7NNv75Vg9vQ_fy8W4kM2rlSO970zaSmeurhPmdAxsOU,8485
20
20
  femagtools/fsl.py,sha256=AWyc7mIgUL2tjqw_kmK22y-gZXhTzOccyhjJLwCqKcg,37736
21
21
  femagtools/getset.py,sha256=yJ6Em35DeWK7WNZW0qjjS5s7LUkVh5mbgxF59HHm5FM,3017
@@ -49,7 +49,7 @@ femagtools/ts.py,sha256=yoYjpKrr_0b-tHfsX5azJEBXHUs9PN8P-SMhbjjRhCA,48381
49
49
  femagtools/utils.py,sha256=yZYgAKHsvK7QyY2-ijE3gSzXlE3vfuhD5dx7myyw434,1703
50
50
  femagtools/vbf.py,sha256=9XGfhftmD9carU8ByQ5DwqoR4daq5mJ39eMqruwml0Q,2444
51
51
  femagtools/vtu.py,sha256=Sf83dHIfCKY2km-MIUHKKoj-JKN4PDX7kkPLZXyIYY4,10723
52
- femagtools/windings.py,sha256=p7BkIbi8mMc_CmWqAjOZNKz1-GlQb4kON4rWhvlARf8,27498
52
+ femagtools/windings.py,sha256=eGRoDbi9yruiWHqZysamBLPJefw8IQX3Lq4KpG4oIKo,28216
53
53
  femagtools/zmq.py,sha256=62x5VRk0TMNER0-EZ8E28IdLKzsttlbxy1U_3wocNLc,9618
54
54
  femagtools/dxfsl/__init__.py,sha256=MywcCdpKPKs4qJBJJgeDsikJFJ2P48dbTuNk303f5pM,76
55
55
  femagtools/dxfsl/area.py,sha256=CpTMRBF8_AJmJMkkn-LgRv27U5xJ5Ohhd2ppRvESPNU,69757
@@ -71,8 +71,8 @@ femagtools/dxfsl/shape.py,sha256=uQqbgXIA2_KP2XRdhCfVfGWjcjwzhJ5t9RhiqR9R98c,616
71
71
  femagtools/dxfsl/svgparser.py,sha256=RY2TU9MK6gOaNmI6w6RNqcw7H9YGmK-NUwvdylKBcsE,3763
72
72
  femagtools/dxfsl/symmetry.py,sha256=dXfZVIqT49nbMirY5YVaRPi8kNB8reaiq-eIbhw1Z54,43936
73
73
  femagtools/machine/__init__.py,sha256=xDY9QSUVL2Y17I4fq-nXsb5uMHCIxnCmGVIiL0fZZYE,7447
74
- femagtools/machine/afpm.py,sha256=ZkYk-acfmwV2ebhU8BUE6dKYkDrCR8UKp1plxEdZ4v8,40223
75
- femagtools/machine/effloss.py,sha256=vDFKscFTWuW2ro4DRfNdmehQRhMBvqUG7iTm3YaARi8,16431
74
+ femagtools/machine/afpm.py,sha256=_Ei1FMuoC1GiI0z90qnyuxNrefkmeRdtDZKm20glzNY,40711
75
+ femagtools/machine/effloss.py,sha256=Mf_C6rFrVn5ku-3IJnyD07XfccHAcTk4wVotCzLKoiQ,16423
76
76
  femagtools/machine/im.py,sha256=UeN1e0JTwsbaFjGhJFBmhwRDlgckNNf8_A69YmG6ABE,39545
77
77
  femagtools/machine/pm.py,sha256=hXG71o2TqTxqy-FRy1WoeSOT-KysOGeZlCCnaLfISuE,70026
78
78
  femagtools/machine/sizing.py,sha256=QO-k-UALmSPFNf8ajJPDnzKtlbkiAhX1DqWCRLr-H9k,32306
@@ -95,7 +95,7 @@ femagtools/plot/machine.py,sha256=fVLOZTc19Ru8eXLdtoTeIYsHRWhGLkn_YVZ6qO6KgrE,26
95
95
  femagtools/plot/mcv.py,sha256=ijZg6KPwZC7sDxEzGEUfVWvDoSEfgcaH-hzQMt7E90I,3671
96
96
  femagtools/plot/nc.py,sha256=E7_7WNG3MNrV4QPJJqng1nfuXf3ZbjAGeonthqQlMss,11349
97
97
  femagtools/plot/phasor.py,sha256=5QG1GkXKVksc8P6Q4thKADf6W1l8rDKeArIHFYvbXlw,4858
98
- femagtools/plot/wdg.py,sha256=Orw2XGThHpOuJ_raSRnQTzj5tOmwllNWweByoOXbA7I,9820
98
+ femagtools/plot/wdg.py,sha256=uTEtpW_xCXueGnkWx8fTQHruBiayw62AVTXkc9vz9iM,10536
99
99
  femagtools/svgfsl/converter.py,sha256=5q4LognshXNTpUWLnU5rtgCfAwZnEuPzqsgyeRYC-VM,3019
100
100
  femagtools/templates/FE-losses.mako,sha256=cfDlO11vWovz2muPLg9X2rgeHD9Ihaz8PRiz63MRr88,819
101
101
  femagtools/templates/afm_rotor.mako,sha256=4yoEA4fOq9FRcwxOMRw1oX4Bs_jcrtyHOY6kHPYJ5MY,3175
@@ -172,7 +172,7 @@ femagtools/templates/stator_msh.mako,sha256=Neze1ielMCk7TrARyhOra91fFQVT8Phsgk2O
172
172
  femagtools/templates/therm-dynamic.mako,sha256=pEz7jrUpopK1-RqgulNnrkSaCZDjfLelsVo6cBqmpac,3142
173
173
  femagtools/templates/therm_static.mako,sha256=ulevp4AP-kZ1_qdScPMaX9tLqvvP0t9lFflWTXgUxaE,1310
174
174
  femagtools/templates/torq_calc.mako,sha256=et6O9ZEkPMOYcaJVpYtH2u3aoU0iyhRCPkfN4ZLdjxA,2353
175
- femagtools-1.8.14.dist-info/licenses/LICENSE,sha256=NaQe4uvkszQPJmiRPHecfk-Ab9VSRXo8xQLGNVHTeFo,1362
175
+ femagtools-1.8.15.dist-info/licenses/LICENSE,sha256=NaQe4uvkszQPJmiRPHecfk-Ab9VSRXo8xQLGNVHTeFo,1362
176
176
  tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
177
177
  tests/test_afpm.py,sha256=ge5CXnVQ7E5gVViTI9hQOC0hHetBci18pY9prbUCAqU,16849
178
178
  tests/test_airgap_induction.py,sha256=cmpy1og59oWEyCO4oF_zDuc1DUwCbdeebNL1ujpZza4,1065
@@ -211,7 +211,7 @@ tests/test_tksreader.py,sha256=8QtPAzxPJbkpxd1Nw2I7ggaTaKaL4WY55JJBHkZAzus,766
211
211
  tests/test_ts.py,sha256=tR2x5cKU9gw2fUprzaPgPbCvmDOHDO36JUPCCoTlY7Y,1833
212
212
  tests/test_vbfreader.py,sha256=-6oAhLJDb7K3Ui5O1mtHvbskawEfgyIH-Of5n-8u-fc,832
213
213
  tests/test_vtu.py,sha256=pGpHuAcaCk5zDYTBBp_akOEenZOpq-IzGl_kaMtodyA,1469
214
- tests/test_windings.py,sha256=rZjAudsSCHedbo5BWt1ZVaU49ktxjOim1r7BzJmSdUo,5841
214
+ tests/test_windings.py,sha256=WKFabGC6-TpCnxXL9U91J84INK_ntkMMU1FZRuE7m6k,6142
215
215
  tests/engines/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
216
216
  tests/engines/test_amazon.py,sha256=4uy36NIo0epi3CgjUm8vl4snLpr4NRvUoWi6Zew_zcE,2014
217
217
  tests/engines/test_config.py,sha256=_I1Z5RuubgnOGQeZHjAsCsovt0WEMH0o4ILz032l_Bc,663
@@ -222,8 +222,8 @@ tests/moo/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
222
222
  tests/moo/test_algorithm.py,sha256=Em8sFm2vzPmuIzRrBBnUQLU_TYuJHSf-kEeozw0XeX4,2563
223
223
  tests/moo/test_population.py,sha256=FvX9LRCxQx0_E2GxHQ5vKwOYFBQiNbT6Lmv5GmNWjTQ,5471
224
224
  tests/moo/test_problem.py,sha256=ALeP4u7g-dFhfwWL8vxivdrrYzVKPjHMCAXzzgyNZbs,467
225
- femagtools-1.8.14.dist-info/METADATA,sha256=BrabUwTwkjyUIeeY3Ln1RIyfy1FQefxu8EgDckCsobA,6213
226
- femagtools-1.8.14.dist-info/WHEEL,sha256=DnLRTWE75wApRYVsjgc6wsVswC54sMSJhAEd4xhDpBk,91
227
- femagtools-1.8.14.dist-info/entry_points.txt,sha256=jrvOkZPiN44u1sASeu271VRaVIv5V-uRpN0_N5U_R8c,248
228
- femagtools-1.8.14.dist-info/top_level.txt,sha256=Ri4YWtU8MZTzNje9IKyXhTakNbsrCynuWdon4Yq94Dc,17
229
- femagtools-1.8.14.dist-info/RECORD,,
225
+ femagtools-1.8.15.dist-info/METADATA,sha256=tFQ51rVZ5aZLm_-o116EK8gTaOuPU3xOo2Km76rTi_k,6213
226
+ femagtools-1.8.15.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
227
+ femagtools-1.8.15.dist-info/entry_points.txt,sha256=jrvOkZPiN44u1sASeu271VRaVIv5V-uRpN0_N5U_R8c,248
228
+ femagtools-1.8.15.dist-info/top_level.txt,sha256=Ri4YWtU8MZTzNje9IKyXhTakNbsrCynuWdon4Yq94Dc,17
229
+ femagtools-1.8.15.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (80.4.0)
2
+ Generator: setuptools (80.9.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5
 
tests/test_windings.py CHANGED
@@ -163,3 +163,14 @@ def test_zoneplan():
163
163
  w = femagtools.windings.Winding(
164
164
  {'Q': 60, 'p': 32, 'm': 3, 'l': 1})
165
165
  assert [1, -2, 3, -4, 5, -6, -17, 18, -19, 20] == w.zoneplan()[0][0]
166
+
167
+ def test_zoneplan_6phase():
168
+ w = femagtools.windings.Winding(
169
+ {'Q': 24, 'p': 11, 'm': 6, 'l': 1})
170
+ assert [
171
+ [1, -2, -13, 14],
172
+ [-11, 12, 23, -24],
173
+ [-9, 10, 21, -22],
174
+ [-7, 8, 19, -20],
175
+ [-5, 6, 17, -18],
176
+ [-3, 4, 15, -16]] == w.zoneplan()[0]