femagtools 1.8.11__py3-none-any.whl → 1.8.12__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.11'
5
+ __version__ = '1.8.12'
6
6
  __author__ = 'Ronald Tanner'
7
7
  __license__ = 'BSD'
8
8
  __copyright__ = 'Copyright 2023-2025 Gamma Technology'
femagtools/fsl.py CHANGED
@@ -765,7 +765,7 @@ class Builder:
765
765
  if pfefunc:
766
766
  sim['loss_funct'] = pfefunc
767
767
  '''
768
- if sim.get('plots'):
768
+ if sim.get('plots') and sim.get('calculationMode', '') != 'psi-torq-rem':
769
769
  plots = self.__render(sim, 'plots')
770
770
  else:
771
771
  plots = []
femagtools/parstudy.py CHANGED
@@ -190,7 +190,10 @@ class ParameterStudy(object):
190
190
  simulation['range_phi'] = 720/model.get('poles')
191
191
  except AttributeError: # if dxf or pure fsl model
192
192
  simulation['range_phi'] = 0.0
193
- simulation.update(model.winding)
193
+ try:
194
+ simulation.update(model.winding)
195
+ except AttributeError:
196
+ pass
194
197
  fea = femagtools.model.FeaModel(simulation)
195
198
 
196
199
  prob = femagtools.moproblem.FemagMoProblem(decision_vars,
@@ -229,7 +232,10 @@ class ParameterStudy(object):
229
232
  fea.poc.pole_pitch = 2*360/model.get('poles')
230
233
  fea.pocfilename = fea.poc.filename()
231
234
  if not hasattr(fea, 'pocfilename'):
232
- fea.pocfilename = f"{model.name}_{model.get('poles')}p.poc"
235
+ try:
236
+ fea.pocfilename = f"{model.name}_{model.get('poles')}p.poc"
237
+ except AttributeError:
238
+ logger.warning("Missing number of poles")
233
239
  elapsedTime = 0
234
240
  self.bchmapper_data = [] # clear bch data
235
241
  # split x value (par_range) array in handy chunks:
femagtools/plot/bch.py CHANGED
@@ -527,20 +527,36 @@ def demagnetization(demag, ax=0):
527
527
  i1 = [scale*x for x in demag['i1']]
528
528
  ax.plot(i1, demag['rr'], 'o', color='C0')
529
529
  ax.plot(i1, demag['rr'], color='C0')
530
- rrmin = 0.6
530
+ rrmin = min(0.6, np.min(demag['rr']))
531
+
532
+ Imax = scale*abs(demag['i1max'])
533
+ demaglabels = [f'Imax = {Imax:.1f} {unit}']
531
534
  if demag.get('i1c', 0):
532
535
  Icrit = scale*demag['i1c']
533
- Hk = demag['Hk']
534
- Tmag = demag['Tmag']
535
- di = 0.05*np.max(i1)
536
- rrmin = min(0.6, np.min(demag['rr']))
537
- ax.plot([Icrit, Icrit], [rrmin, 1], 'k--')
538
- ax.annotate(
539
- f'Icrit = {Icrit:.1f}{unit}\nHk = {Hk:.1f} kA/m\nTmag={Tmag:.1f} °C',
540
- xy=(Icrit, rrmin),
541
- xytext=(Icrit-di, rrmin+0.1*(1-rrmin)), ha='right',
536
+ ax.plot([Icrit, Icrit], [rrmin, 1], 'r:')
537
+ ax.text(Icrit, rrmin+0.15, 'Icrit', fontfamily='monospace',
538
+ rotation=90, size='large', ha='right', va='bottom')
539
+ demaglabels.append(f'Icrit = {Icrit:.1f} {unit}')
540
+
541
+ ax.plot([Imax, Imax], [rrmin, 1], 'g:')
542
+ ax.text(Imax, rrmin+0.05, 'Imax', fontfamily='monospace',
543
+ rotation=90, size='large', ha='right', va='bottom')
544
+
545
+ Hk = demag['Hk']
546
+ Tmag = demag['Tmag']
547
+ demaglabels += [f'Hk = {Hk:.1f} kA/m',
548
+ f'Tmag = {Tmag:.1f} °C']
549
+
550
+ ax.text(0, rrmin+0.05,
551
+ '\n'.join(demaglabels),
552
+ fontfamily='monospace',
553
+ ha='left', va='bottom', size='large',
542
554
  bbox={'facecolor': 'white',
543
555
  'edgecolor': 'white'})
556
+
557
+ #ax.annotate('Imax', xy=(Imax, demag['rr_i1max']), ha='center', va='bottom',
558
+ # xytext=(Imax, demag['rr_i1max']-0.1), rotation=90,
559
+ # arrowprops=dict(facecolor='green', edgecolor='green', shrink=0.05))
544
560
  ax.set_ylim([rrmin, 1.01])
545
561
  ax.set_ylabel('Rel. Remanence')
546
562
  ax.set_xlabel(f'Phase Current / {unit}')
@@ -106,16 +106,19 @@ def shortcircuit(femag, machine, bch, simulation, engine=0):
106
106
  encoding='latin1', errors='ignore'))
107
107
  bchsc.scData['demag'] = bchsc.demag
108
108
  if simulation.get('sim_demagn', 0):
109
- d = {'displ': [d['displ']
109
+ dd = {'displ': [d['displ']
110
110
  for d in bchsc.demag if 'displ' in d],
111
111
  'H_max': [d['H_max']
112
112
  for d in bchsc.demag if 'H_max' in d],
113
113
  'H_av': [d['H_av']
114
114
  for d in bchsc.demag if 'H_av' in d]}
115
- simulation['i1max'] = bchsc.scData['iks']
115
+ i1max = bchsc.scData['iks']
116
+ if dd['displ']:
117
+ phi = dd['displ'][0]/180*np.pi
116
118
  bchsc.scData['demag'] = demag(
117
- femag, machine, simulation, engine)
118
- bchsc.scData['demag'].update(d)
119
+ femag, machine, simulation,
120
+ i1max, phi, engine)
121
+ bchsc.scData['demag'].update(dd)
119
122
  scdata = bchsc.scData
120
123
  #for w in bch.flux:
121
124
  # try:
@@ -129,7 +132,7 @@ def shortcircuit(femag, machine, bch, simulation, engine=0):
129
132
  if simulation.get('sc_type', 3) == 2:
130
133
  if 'i1max' not in simulation:
131
134
  # just a wild guess
132
- simulation['i1max'] = 4.5*bch.machine['i1']
135
+ simulation['i1max'] = 5*bch.machine['i1']
133
136
  logger.info("2phase short circuit simulation i1max = %.0f",
134
137
  simulation['i1max'])
135
138
  scdata = shortcircuit_2phase(femag, machine, simulation, engine)
@@ -161,12 +164,13 @@ def shortcircuit_2phase(femag, machine, simulation, engine=0):
161
164
  num_cur_steps = 4
162
165
  i1 = np.linspace(0, i1max, num_cur_steps)
163
166
  i1vec = np.concat((-i1[::-1], i1[1:]))
164
- num_par_wdgs = machine['winding'].get('num_par_wdgs', 1)
165
167
  flux_sim = {
166
168
  'calculationMode': 'psi-torq-rot',
167
169
  'i1max': i1max,
168
170
  'curvec': [],
169
- 'num_par_wdgs': num_par_wdgs}
171
+ 'magntemp': simulation['magn_temp'],
172
+ 'fc_radius': simulation['fc_radius'],
173
+ 'num_par_wdgs': simulation['num_par_wdgs']}
170
174
 
171
175
  if engine:
172
176
  parstudy = _parstudy_list(femag, sc_result_func)
@@ -304,6 +308,11 @@ def shortcircuit_2phase(femag, machine, simulation, engine=0):
304
308
  logger.info("Torque %.1f %.1f %.1f (dphi %.4f)",
305
309
  tp[1], tv[1], tc[1], dphi)
306
310
 
311
+ # rotor position at maximum current:
312
+ trot = min(iav[0], iap[0])
313
+ phi = wm*trot + phi0
314
+ logger.info("phi %.1f")
315
+
307
316
  scData = {
308
317
  'ia': ia.tolist(),
309
318
  'ib': (-ia).tolist(),
@@ -316,63 +325,52 @@ def shortcircuit_2phase(femag, machine, simulation, engine=0):
316
325
  'iks': iap[1] if iap[1] > abs(iav[1]) else iav[1],
317
326
  'tks': tp[1] if tp[1] > abs(tv[1]) else tv[1]
318
327
  }
319
- scData['peakWindingCurrents'] = [scData['iks'],
320
- -scData['iks'], 0]
328
+ scData['peakWindingCurrents'] = [float(scData['iks']),
329
+ -float(scData['iks']), 0]
321
330
  if simulation.get('sim_demagn', 0):
322
- scData['demag'] = demag(femag, machine, simulation, engine)
331
+ i1max = iap[1] if iap[1] > abs(iav[1]) else iav[1]
332
+ scData['demag'] = demag(femag, machine, simulation,
333
+ i1max, phi, engine)
323
334
  return scData
324
335
 
325
- def dm_result_func(task):
326
- basedir = pathlib.Path(task.directory)
327
- i1rr = []
328
- for f in sorted(basedir.glob('psi-torq-rem-rot-*.dat')):
329
- ptr = np.loadtxt(f)
330
- i1rr.append((np.max(ptr.T[1:4]), np.min(ptr.T[-1])))
331
- return i1rr
332
-
333
- def demag(femag, machine, simulation, engine=0):
336
+ def demag(femag, machine, simulation, i1max, phi, engine=0):
334
337
  """demag simulation using psi-torq-rem-rot"""
335
338
  logger.info("Demagnetization processing")
336
- i1max = simulation['i1max']
337
- i1min = simulation.get('i1min', i1max/4)
339
+ i1min = simulation.get('i1min', abs(i1max/3))
338
340
  num_steps = 7
339
- b = (i1min-i1max)/np.log(i1min/i1max)
340
- a = i1max/b
341
- i1tab = [b*(a+np.log(x))
342
- for x in np.linspace(i1min/i1max, 1,
343
- num_steps)]
341
+ b = (i1min-abs(i1max))/np.log(i1min/abs(i1max))
342
+ a = abs(i1max)/b
343
+ xtab = np.linspace(i1min/abs(i1max),
344
+ 1+2*(1-i1min/abs(i1max))/(num_steps-1), num_steps+2)
345
+ i1tab = b*(a+np.log(xtab))
344
346
 
345
347
  if simulation.get('sc_type', 3) == 3:
346
348
  curvec = [[-a/2, a, -a/2] for a in i1tab]
347
349
  else:
348
- curvec = [[a, -a, 0] for a in i1tab]
350
+ if i1max > 0:
351
+ curvec = [[a, -a, 0] for a in i1tab]
352
+ else:
353
+ curvec = [[-a, a, 0] for a in i1tab]
349
354
  simulation.update({
350
- 'calculationMode': 'psi-torq-rem-rot',
355
+ 'calculationMode': 'psi-torq-rem',
356
+ 'phi': phi,
357
+ 'magntemp': simulation['Tmag'],
351
358
  'curvec': curvec})
352
- if engine:
353
- parstudy = _parstudy_list(femag, dm_result_func)
354
- parvardef = {
355
- "decision_vars": [
356
- {"values": curvec, "name": "curvec"}]
357
- }
358
- results = parstudy(parvardef, machine, simulation, engine)
359
- i1rr = np.vstack(
360
- ((0, 1),
361
- np.array(results['f']).reshape((-1, 2))))
362
- else:
363
- class Task:
364
- def __init__(self, workdir):
365
- self.directory = workdir
366
- _ = femag(machine, simulation)
367
- i1rr = np.vstack(
368
- [(0, 1), dm_result_func(Task(femag.workdir))])
369
- i1, rr = np.array(i1rr).T
359
+ _ = femag(machine, simulation)
360
+
361
+ ptr = np.loadtxt(femag.workdir / "psi-torq-rem.dat")
362
+ i1 = np.concat(([0], np.max(ptr[:,1:4], axis=1)))
363
+ rr = np.concat(([1], ptr[:,-1]))
370
364
  dmag = {'Hk': simulation['Hk'],
371
365
  'Tmag': simulation['Tmag'],
372
366
  'i1': i1.tolist(),
367
+ 'i1max': float(np.abs(i1max)),
373
368
  'rr': rr.tolist()}
374
369
  # critical current
375
370
  if np.min(rr) < 0.99:
376
- k = np.where(rr < 0.99)[0][0]
377
- dmag['i1c'] = i1[k]
371
+ k = np.where(np.diff(dmag['rr'])<-1e-3)[0][0]+1
372
+ dmag['i1c'] = float(i1[k])
373
+ if abs(i1max) < i1[-1]:
374
+ rrf = make_interp_spline(i1, rr)
375
+ dmag['rr_i1max'] = float(rrf(abs(i1max)))
378
376
  return dmag
@@ -0,0 +1,112 @@
1
+ -- calculate flux linkages, torque, and rel remanence (magstatic mode)
2
+ --
3
+ -- model:
4
+ -- Hk (kA/m) knee point field strength
5
+ -- curvec (A) phase current amplitude samples (list of [ía, ib, ic])
6
+ -- num_par_wdgs (number of parallel winding groups, default 1)
7
+ -- fc_radius (m) radius of airgap center
8
+ --
9
+ -- creates file psi-torq-rem.dat in current directory with columns:
10
+ -- displ curr1 curr2 curr3 psi1 psi2 psi3 torq rrem
11
+
12
+ <%include file="magnet-data.mako"/>
13
+
14
+ function dmg(ek, Br, alfam, murm, Bd, Bq, Hd, Hq, alfahm, Hk)
15
+ if Hd < Hk then
16
+ muem = murm*4*math.pi*1e-7
17
+ Brn = Bd - Hk*1e3*muem
18
+ if Br < 1e-5 then
19
+ Brn = 1e-5
20
+ end
21
+ return Brn, alfam, 1
22
+ end
23
+ return Br, alfam, 1
24
+ end
25
+
26
+ function calc_flux_torq_rem(curvec)
27
+ for k=1,3 do
28
+ def_curr_wdg(k, curvec[k]/a, 0)
29
+ end
30
+
31
+ dRR = 0
32
+ RR = 0
33
+ maxit=m.num_nonl_it
34
+ maxcop=m.error_perm -- err_perm in %
35
+ permode='restore'
36
+ repeat
37
+ calc_field_single({
38
+ maxit=maxit, maxcop=maxcop, -- err_perm in %
39
+ permode=permode})
40
+ if(maxit > 1) then
41
+ maxit = 1
42
+ permode='actual'
43
+ maxcop = 0.05
44
+ end
45
+ stat, RR, dRR = calc_demag(5, Hk)
46
+ --printf("%g %g", RR, dRR)
47
+ until math.abs(dRR) < 1e-5
48
+
49
+ psi = {}
50
+ for k=1,3 do
51
+ psir, psii = flux_winding_wk(k)
52
+ psi[k] = {ksym*psir/a*m.arm_length, ksym*psii/a*m.arm_length}
53
+ end
54
+
55
+ fr, ft, tq, fx, fy = force_torque()
56
+
57
+ return psi, tq, RR
58
+ end
59
+ %if model.get('fc_radius', 0):
60
+ if m.fc_radius == nil then
61
+ m.fc_radius = ${model['fc_radius']*1e3}
62
+ end
63
+ %endif
64
+ %if type(model.get('curvec')[0]) is list:
65
+ curvec = {${','.join(['{'+','.join([str(x) for x in y])+'}' for y in model['curvec']])}} -- A
66
+ %else:
67
+ curvec = {{${','.join([str(x) for x in model['curvec']])}}} -- A
68
+ %endif
69
+ a=${model.get('num_par_wdgs', 1)} -- parallel branches
70
+
71
+ ksym = m.num_poles/m.npols_gen
72
+
73
+ -- HcB = Brem*tempcoefbr*(magn_temp-20)+1)/muerel/12.565e-7
74
+ -- Hcmin = HcJ*tempcoefhc*(magn_temp-20.0)+1)/HcB*1e2 -- limit of demagnetization in
75
+ Hk = ${model.get('Hk', -999)}
76
+
77
+ phi = ${model.get('phi', 0)}*180/math.pi
78
+ -- initialize rotate
79
+ rotate({
80
+ airgap = m.fc_radius, -- air gap radius
81
+ region = "inside", -- region to rotate
82
+ mode = "save" -- save initial model state
83
+ })
84
+
85
+ file_psi = io.open("psi-torq-rem.dat","w")
86
+ for i=1, #curvec do
87
+ print(string.format(" current: %d/%d %g, %g, %g\n",
88
+ i, #curvec, curvec[i][1], curvec[i][2], curvec[i][3]))
89
+
90
+ rotate({angle=phi, mode="absolute"})
91
+ psi, tq, rr = calc_flux_torq_rem(curvec[i])
92
+
93
+ file_psi:write(string.format("%g ", phi))
94
+ for k=1, 3 do
95
+ file_psi:write(string.format("%g ", curvec[i][k]))
96
+ end
97
+ for k=1, 3 do
98
+ file_psi:write(string.format("%g ", psi[k][1]))
99
+ end
100
+ file_psi:write(string.format("%g ", tq))
101
+ file_psi:write(string.format("%g ", rr))
102
+ file_psi:write("\n")
103
+
104
+ % if model.get('plots', []):
105
+ if i == #curvec-2 then
106
+ <%include file="plots.mako"/>
107
+ end
108
+ % endif
109
+ end
110
+
111
+ rotate({mode = "reset"}) -- restore the initial state (discard any changes)
112
+ file_psi:close()
@@ -7,6 +7,8 @@
7
7
  -- creates file psi-torq-rot.dat in current directory with columns:
8
8
  -- displ curr1 curr2 curr3 psi1 psi2 psi3 torq
9
9
  --
10
+ <%include file="magnet-data.mako"/>
11
+
10
12
  function gcd(a, b)
11
13
  return b==0 and a or gcd(b,a%b)
12
14
  end
@@ -69,6 +71,11 @@ dphi = 360//gcd(Q1, p)/nrot
69
71
  print(string.format(" rotation steps: %d current steps: %d\n", nrot, #curvec))
70
72
 
71
73
  phi = 0
74
+ %if model.get('fc_radius', 0):
75
+ if m.fc_radius == nil then
76
+ m.fc_radius = ${model['fc_radius']*1e3}
77
+ end
78
+ %endif
72
79
  -- initialize rotate
73
80
  rotate({
74
81
  airgap = m.fc_radius, -- air gap radius
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: femagtools
3
- Version: 1.8.11
3
+ Version: 1.8.12
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,4 +1,4 @@
1
- femagtools/__init__.py,sha256=OjqGiMTH-XiYM7D-s7y7ZBDVyqoZzGDKh78C5m5kB78,1601
1
+ femagtools/__init__.py,sha256=wRK12H26MLJW_1cDk2ngqCP1fJGYZOWzt-2ugf0c9ao,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
@@ -17,7 +17,7 @@ femagtools/ecloss.py,sha256=nES8mtXNFitmxDvKL5o39hZl6qu-HfR6kUh9eBA9zxQ,34660
17
17
  femagtools/erg.py,sha256=IXKq76P9qLt_ssNOP78v8Qizk3J2Zg80yaKDSjzwoJE,1224
18
18
  femagtools/femag.py,sha256=ScrZ9gbWQIy4eIhF0Wmi41lSFm7-WRtiLcJOvkITcHo,44864
19
19
  femagtools/forcedens.py,sha256=7NNv75Vg9vQ_fy8W4kM2rlSO970zaSmeurhPmdAxsOU,8485
20
- femagtools/fsl.py,sha256=hP2TBxjHXsWhrc6Uhd8s2ODVRqmMfsW8dFS2h-d6OwE,36990
20
+ femagtools/fsl.py,sha256=J1V1Kr-PZpWbLegYMAvgfUabj1WZOji_-JR9mlf23gg,37043
21
21
  femagtools/getset.py,sha256=yJ6Em35DeWK7WNZW0qjjS5s7LUkVh5mbgxF59HHm5FM,3017
22
22
  femagtools/gmsh.py,sha256=IKhNiviIBji4cMxAhxaYXNqBRMNAPSKsBGdnGyxkyQw,3903
23
23
  femagtools/google.py,sha256=ugRyHY1zBjHR4aNfbA7GeF-ZU_NgleuVTZaWpi_XLT4,17144
@@ -40,10 +40,10 @@ femagtools/nc.py,sha256=sKfFaeT8hPVUCb1axPIwfUVxuUsnrHygdfqiHv7G_YA,15216
40
40
  femagtools/netlist.py,sha256=CSCl8setLZ_L8DCnNWaNA3-wLe1yo-fmzARZoVvYfaA,2052
41
41
  femagtools/ntib.py,sha256=76g1ZO3Fq_kN-HTMBvaKvJmMMlJMyEPFeNAcJPq3w7Y,3099
42
42
  femagtools/opt.py,sha256=wBU0yh3hZlNti_zfIvtKcPg1EJrnE3I1BqmVxLGWixU,8753
43
- femagtools/parstudy.py,sha256=vsXR2aamfVpdP9wEz-_ZT_KpFE256lg_sP_6dAQ3rOs,19866
43
+ femagtools/parstudy.py,sha256=kYUUX7wGggt5FEkH2jChl_BhAmKqBACCFYF_LN5mHeA,20045
44
44
  femagtools/poc.py,sha256=yPWmpi8Q2g7NmpAi2YV5ezyo0VUj67EK0tcX2wikerw,7207
45
45
  femagtools/semi_fea.py,sha256=WZtYKrzhDruETyuEW2kpiNp9OaA7Hheq3qJiAIYtsjg,3475
46
- femagtools/shortcircuit.py,sha256=_A_7csabj5gfRR7bfqNuC05-2HqP2-UMiYX4BSvfpQs,13936
46
+ femagtools/shortcircuit.py,sha256=B1gfxItKLv2qDgdHQkDWaSAAHsNwXdDD7Hu8mysIekY,14001
47
47
  femagtools/tks.py,sha256=mDi45S5go9-jwALh6rS9RWPoOFBORZm0-XL4ECjSf_8,7531
48
48
  femagtools/ts.py,sha256=x9aCMVASjdBZuyI2pJGMyi1dveGFd_pWQ20cZ-l_moc,47216
49
49
  femagtools/utils.py,sha256=dJkQ5xsoVMzSEB5-2hEiwe2of9mLmsDo8nkrnSN-gPE,1643
@@ -86,7 +86,7 @@ femagtools/moo/test/AlgorithmTest.py,sha256=KzR1og4bu6NOE61DDKjEMTQdsysmho4LCYmJ
86
86
  femagtools/moo/test/PopulationTest.py,sha256=lG9NeWo0xrslfQRa4tgy1Nj23VJMFIlg_vQ9KUBYnRA,5529
87
87
  femagtools/moo/test/ProblemTest.py,sha256=r5XEfY4LPscDb35TxxPd0lbP3nUmL6_G6vrRo1I3RSg,505
88
88
  femagtools/plot/__init__.py,sha256=LFrHy_9L6FxJqhYND2z1534s3ebPXkfXVagFeNA1wWk,978
89
- femagtools/plot/bch.py,sha256=C054GIbgghiyyuwiDQw-ikmUlBZVWAYT3zSJ_T7rW_I,33397
89
+ femagtools/plot/bch.py,sha256=c2zSrtUyQWeKoxcJPGsuNvQ59veyXlvD-Fu4UBdmAyU,34078
90
90
  femagtools/plot/char.py,sha256=xv4cNOTorK-fy7eUFhmyR-013TFI2A2999xXKgL2AnA,12469
91
91
  femagtools/plot/fieldlines.py,sha256=_7ykKhnQLeS4fz34pnzovH1gIhcUSKJ3gl1GUgWYix8,1137
92
92
  femagtools/plot/fluxdens.py,sha256=NlexRJ3f_8CgKoWrV82ZIsAXPrLhwj98uOe8_fUks7A,1082
@@ -151,7 +151,8 @@ femagtools/templates/pm_sym_loss.mako,sha256=FNAvi_gmTXsGylrpi7lLKPoOOcNCV1mG6rc
151
151
  femagtools/templates/prepare_thermal.mako,sha256=V3W6BGW7gjY8Lg2qzvGDi8rxx3JvPzrWoABDvHKyq54,9539
152
152
  femagtools/templates/psd_psq_fast.mako,sha256=IOZx04JhVleAAbBOPWk9gEwDyT28z0zkF9tyEBteRPU,1428
153
153
  femagtools/templates/psi-torq-rem-rot.mako,sha256=A1KOsYNSJhIJfumF-egnU-HUfNMPeX-XSPL_WsoE1Cw,3579
154
- femagtools/templates/psi-torq-rot.mako,sha256=e0-kJZ4mQ5w-Dd4riJkcjlJAt0STcNrVRVJfa-6cV7g,2498
154
+ femagtools/templates/psi-torq-rem.mako,sha256=N9AcWV0_c2jvZCr-LOW6QqDC7QIbZ-cVZ2fQ_Jw61KA,3099
155
+ femagtools/templates/psi-torq-rot.mako,sha256=_iT-IbgeC28wQzMVfi7uIN0cfp5pZ6d1mpLsoQrMx2c,2646
155
156
  femagtools/templates/ring.mako,sha256=Cuc_FuCPWZM-g3TxHqzTdjknYEJSUgP-y64gp8pekDI,643
156
157
  femagtools/templates/rot_hsm.mako,sha256=eh50TbpWNUALK9_7wOOJ7KPewHos7JExAfMACbPlXYc,973
157
158
  femagtools/templates/rotorAsyn.mako,sha256=r_gce0oic24nPdI7BmERM1sokXpC5vvm8Sm0TIPb2zI,2280
@@ -220,9 +221,9 @@ tests/moo/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
220
221
  tests/moo/test_algorithm.py,sha256=Em8sFm2vzPmuIzRrBBnUQLU_TYuJHSf-kEeozw0XeX4,2563
221
222
  tests/moo/test_population.py,sha256=FvX9LRCxQx0_E2GxHQ5vKwOYFBQiNbT6Lmv5GmNWjTQ,5471
222
223
  tests/moo/test_problem.py,sha256=ALeP4u7g-dFhfwWL8vxivdrrYzVKPjHMCAXzzgyNZbs,467
223
- femagtools-1.8.11.dist-info/LICENSE,sha256=NaQe4uvkszQPJmiRPHecfk-Ab9VSRXo8xQLGNVHTeFo,1362
224
- femagtools-1.8.11.dist-info/METADATA,sha256=S4Peo7fKYPOUPvhtG7ZkLhuluCeYh4ZlhdoQH7AIor4,6191
225
- femagtools-1.8.11.dist-info/WHEEL,sha256=52BFRY2Up02UkjOa29eZOS2VxUrpPORXg1pkohGGUS8,91
226
- femagtools-1.8.11.dist-info/entry_points.txt,sha256=jrvOkZPiN44u1sASeu271VRaVIv5V-uRpN0_N5U_R8c,248
227
- femagtools-1.8.11.dist-info/top_level.txt,sha256=Ri4YWtU8MZTzNje9IKyXhTakNbsrCynuWdon4Yq94Dc,17
228
- femagtools-1.8.11.dist-info/RECORD,,
224
+ femagtools-1.8.12.dist-info/LICENSE,sha256=NaQe4uvkszQPJmiRPHecfk-Ab9VSRXo8xQLGNVHTeFo,1362
225
+ femagtools-1.8.12.dist-info/METADATA,sha256=Y7Cxd_Wdj5H25nX8oaFX9ZWBxCvupQPDWKZTnJc-nGM,6191
226
+ femagtools-1.8.12.dist-info/WHEEL,sha256=beeZ86-EfXScwlR_HKu4SllMC9wUEj_8Z_4FJ3egI2w,91
227
+ femagtools-1.8.12.dist-info/entry_points.txt,sha256=jrvOkZPiN44u1sASeu271VRaVIv5V-uRpN0_N5U_R8c,248
228
+ femagtools-1.8.12.dist-info/top_level.txt,sha256=Ri4YWtU8MZTzNje9IKyXhTakNbsrCynuWdon4Yq94Dc,17
229
+ femagtools-1.8.12.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (76.0.0)
2
+ Generator: setuptools (76.1.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5