femagtools 1.8.1__py3-none-any.whl → 1.8.2__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 +1 -1
- femagtools/dxfsl/area.py +45 -1
- femagtools/dxfsl/areabuilder.py +93 -45
- femagtools/dxfsl/converter.py +51 -26
- femagtools/dxfsl/fslrenderer.py +5 -4
- femagtools/dxfsl/geom.py +123 -137
- femagtools/dxfsl/machine.py +161 -9
- femagtools/dxfsl/shape.py +46 -1
- femagtools/dxfsl/svgparser.py +1 -1
- femagtools/dxfsl/symmetry.py +115 -30
- femagtools/fsl.py +10 -10
- femagtools/machine/__init__.py +5 -4
- femagtools/machine/afpm.py +41 -15
- femagtools/machine/sizing.py +189 -11
- femagtools/machine/utils.py +2 -2
- femagtools/mcv.py +2 -3
- femagtools/model.py +4 -3
- femagtools/parstudy.py +1 -1
- femagtools/plot/nc.py +2 -2
- {femagtools-1.8.1.dist-info → femagtools-1.8.2.dist-info}/METADATA +1 -1
- {femagtools-1.8.1.dist-info → femagtools-1.8.2.dist-info}/RECORD +26 -26
- tests/test_mcv.py +1 -1
- {femagtools-1.8.1.dist-info → femagtools-1.8.2.dist-info}/LICENSE +0 -0
- {femagtools-1.8.1.dist-info → femagtools-1.8.2.dist-info}/WHEEL +0 -0
- {femagtools-1.8.1.dist-info → femagtools-1.8.2.dist-info}/entry_points.txt +0 -0
- {femagtools-1.8.1.dist-info → femagtools-1.8.2.dist-info}/top_level.txt +0 -0
femagtools/machine/sizing.py
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
"""general design of an AC electrical machine
|
2
2
|
|
3
|
-
Types: spm, ipm, eesm, im
|
3
|
+
Types: spm, ipm, eesm, im, afpm
|
4
4
|
|
5
5
|
"""
|
6
6
|
import numpy as np
|
@@ -10,6 +10,25 @@ from .utils import wdg_resistance
|
|
10
10
|
|
11
11
|
logger = logging.getLogger("femagools.machine.sizing")
|
12
12
|
|
13
|
+
AFPM_DEFAULTS = dict(
|
14
|
+
airgap=2e-3,
|
15
|
+
kd=0.7, # ratio of inner vs outer diameter 0.6 .. 0.8
|
16
|
+
eta=0.92, # efficiency
|
17
|
+
cos_phi=0.95, # power factor
|
18
|
+
m=3, # number of phases
|
19
|
+
ui_u=0.8, # U ind / U
|
20
|
+
J=8.5e6, # current density A/mm²
|
21
|
+
sigmas=40e3, # shear force 30 .. 65 kN/m2
|
22
|
+
Ba=0.7, # flux density in airgap
|
23
|
+
Bth=1.5, # flux density in teeth 1.5 .. 2 T
|
24
|
+
By=1.2, # flux density in yoke 1.2 .. 1.5 T
|
25
|
+
kq=0.6, # stator winding fill factor 0.35 .. 0.75
|
26
|
+
mag_width=0.95, # rel magnet width 0.6 .. 1
|
27
|
+
Hc=700, # max. coercitive field strength, 500 .. 900 kA/m
|
28
|
+
brem=1.2, # remanence 0.3 .. 1.3 T
|
29
|
+
demag=6 # safety factor for demagnetisation (nom current)
|
30
|
+
)
|
31
|
+
"""default sizing parameters for AFPM"""
|
13
32
|
|
14
33
|
PM_DEFAULTS = dict(
|
15
34
|
airgap=1.5e-3, # airgap width m
|
@@ -217,7 +236,7 @@ def _stator_slots(par, slots):
|
|
217
236
|
# check sim factor, height/width ratio
|
218
237
|
if qhbmin[1] == len(q)-1:
|
219
238
|
# last has smallest sim factor
|
220
|
-
|
239
|
+
return q[qhbmin[1]][0]
|
221
240
|
elif q[qhbmin[1]][2] < q[qhbmin[1]+1][2]:
|
222
241
|
# select ideal height/width ratio (3.2)
|
223
242
|
return q[qhbmin[1]][0]
|
@@ -270,7 +289,7 @@ def get_stator_dimensions(par, slots=[]):
|
|
270
289
|
Ui_U = par['ui_u']
|
271
290
|
|
272
291
|
# design parameters
|
273
|
-
# AJ =
|
292
|
+
# AJ = par['AJ'] # 100*1e9 # thermal load, typically 100 .. 300 A²/mm³
|
274
293
|
J = par['J'] # current density 3 .. 6 A/mm²
|
275
294
|
Ba = par['Ba'] # airgap flux density, typically 0.6 .. 1.5 T
|
276
295
|
kq = par['kq'] # winding fill factor, typically 0.35 .. 0.75
|
@@ -431,15 +450,13 @@ def get_stator_dimensions(par, slots=[]):
|
|
431
450
|
|
432
451
|
return r
|
433
452
|
|
434
|
-
|
435
453
|
def _get_magnet_height(I1, N, kw, par):
|
436
454
|
airgap = par['airgap']
|
437
455
|
Ba = par['Ba']
|
438
456
|
p = par['p']
|
439
457
|
m = par['m']
|
440
458
|
|
441
|
-
Hc = par['Hc']
|
442
|
-
Hc = Hc*1e3 # unit kA/m
|
459
|
+
Hc = par['Hc']*1e3 # unit kA/m -> A/m
|
443
460
|
# Safety Factor for demagnetization
|
444
461
|
demag = par['demag']
|
445
462
|
THETA1 = m/np.pi*np.sqrt(2)*I1*N*kw/p
|
@@ -648,6 +665,10 @@ def _set_defaults(par, defaults):
|
|
648
665
|
par[k] = defaults[k]
|
649
666
|
|
650
667
|
|
668
|
+
def _set_afpm_defaults(par):
|
669
|
+
_set_defaults(par, AFPM_DEFAULTS)
|
670
|
+
|
671
|
+
|
651
672
|
def _set_pm_defaults(par):
|
652
673
|
_set_defaults(par, PM_DEFAULTS)
|
653
674
|
|
@@ -708,6 +729,163 @@ def spm(pnom: float, speed: float, p: int, **kwargs) -> dict:
|
|
708
729
|
return r
|
709
730
|
|
710
731
|
|
732
|
+
def afpm(pnom: float, speed: float, p: int, afmtype: str, **kwargs) -> dict:
|
733
|
+
"""returns dimension of a AFPM machine
|
734
|
+
|
735
|
+
Args:
|
736
|
+
pnom: power at rated speed (W)
|
737
|
+
speed: rotation speed (1/s)
|
738
|
+
p: number of pole pairs
|
739
|
+
afmtype: one of 'S1R1', 'S2R1', 'S1R2'
|
740
|
+
|
741
|
+
udc: (optional) DC link voltage (V)
|
742
|
+
u1: (optional) phase voltage (Vrms)
|
743
|
+
Q1: (optional) total number of stator slots
|
744
|
+
brem: (optional) remanence of magnet (T)
|
745
|
+
"""
|
746
|
+
par = dict(
|
747
|
+
pnom=pnom, speed=speed, p=p)
|
748
|
+
par.update(kwargs)
|
749
|
+
_set_afpm_defaults(par)
|
750
|
+
|
751
|
+
kp = 1 if afmtype == 'S1R1' else 2
|
752
|
+
kps = 1 if afmtype in ('S1R1', 'S1R2') else 2
|
753
|
+
kpr = 2 if afmtype == 'S1R2' else 1
|
754
|
+
kd = par['kd'] # ratio of inner_diam/outer_diam
|
755
|
+
tnom = pnom/(2*np.pi*speed)
|
756
|
+
sigmas = par['sigmas'] # shear force
|
757
|
+
# outer diameter:
|
758
|
+
# https://web.mit.edu/kirtley/binlustuff/literature/electric%20machine/designOfAxialFluxPMM.pdf
|
759
|
+
Do = 2*np.power(tnom/(kp*sigmas*np.pi*kd*(1-kd**2)), 1/3)
|
760
|
+
Di = Do*kd
|
761
|
+
# pole width and iron length
|
762
|
+
Davg = (Do+Di)/2
|
763
|
+
taup = np.pi * Davg/(2*p)
|
764
|
+
lfe = (Do-Di)/2
|
765
|
+
# flux density in airgap
|
766
|
+
Bd1 = 4.0/np.pi*par['Ba']*np.sin(np.pi/2.0*par['mag_width'])
|
767
|
+
|
768
|
+
# rated phase voltage
|
769
|
+
if 'udc' in par:
|
770
|
+
u1nom = 0.9*par['udc']/np.sqrt(2)/np.sqrt(3)
|
771
|
+
else:
|
772
|
+
u1nom = par['u1']
|
773
|
+
f1 = speed*p
|
774
|
+
# flux linkage
|
775
|
+
psi1 = kpr*2.0/np.pi*taup*lfe*Bd1
|
776
|
+
|
777
|
+
# winding factor
|
778
|
+
Q1 = par['Q1']
|
779
|
+
m = par['m']
|
780
|
+
yd = par.get('coil_span', 0)
|
781
|
+
if yd:
|
782
|
+
wdg = Winding({'Q': par['Q1'], 'p': par['p'], 'm': 3,
|
783
|
+
'yd': yd, 'l': 2})
|
784
|
+
else:
|
785
|
+
wdg = Winding({'Q': par['Q1'], 'p': par['p'], 'm': 3, 'l': 2})
|
786
|
+
|
787
|
+
kw = wdg.kw()
|
788
|
+
|
789
|
+
Ui = par['ui_u'] * u1nom
|
790
|
+
N = np.sqrt(2)*Ui/(2*np.pi*f1*kw*psi1)
|
791
|
+
|
792
|
+
# feasible number of turns per coil...
|
793
|
+
layers = wdg.l
|
794
|
+
# coils per phase (kps: number of stators)
|
795
|
+
ncoils = kps*Q1 // 2 // m * layers
|
796
|
+
ngroups = [1] + [g for g in range(2, layers*p + 1) if layers * p % g == 0]
|
797
|
+
ndiff = [abs(N - ncoils // a * a * round(N / ncoils))
|
798
|
+
for a in ngroups]
|
799
|
+
logger.debug("N %f ngroups %s ndiffs %s", N, ngroups, ndiff)
|
800
|
+
# parallel groups
|
801
|
+
a_calc = ngroups[np.argmin(ndiff)]
|
802
|
+
a = par.get("a", a_calc)
|
803
|
+
if a not in ngroups:
|
804
|
+
logger.warning("Check given number %s of parallel wdg groups. Valid ngroups are: %s",
|
805
|
+
a, ngroups)
|
806
|
+
# num wires per coil side (number of coil groups a)
|
807
|
+
num_wires = round(a * N / ncoils)
|
808
|
+
|
809
|
+
# correction of number of turns per phase
|
810
|
+
N_old = N
|
811
|
+
N = num_wires * ncoils / a
|
812
|
+
|
813
|
+
# correction of voltage
|
814
|
+
Ui = Ui/N_old*N
|
815
|
+
u1nom = Ui/par['ui_u']
|
816
|
+
|
817
|
+
# current loading
|
818
|
+
# A = np.sqrt(2)*sigmas/kw/Ba
|
819
|
+
I1 = pnom/(m*par['eta']*par['cos_phi']*u1nom)
|
820
|
+
A = 2*m*N*I1/np.pi/Di
|
821
|
+
# slot area
|
822
|
+
# J = AJ/A
|
823
|
+
hs1 = 1e-3 # slot opening height
|
824
|
+
taus = np.pi/Q1
|
825
|
+
ans = taus*Di*A/(par['kq']*par['J'])
|
826
|
+
bds = taus*(Di+2*hs1)*Bd1/par['Bth']
|
827
|
+
bns = taus*(Di+2*hs1) - bds
|
828
|
+
|
829
|
+
hns = (-bns + np.sqrt(bns**2 + 4*ans*np.tan(taus)))/2/np.tan(taus)/kps
|
830
|
+
hys = psi1/lfe/par['By']/kps
|
831
|
+
|
832
|
+
aw = ans * par['kq'] / layers / num_wires * kps
|
833
|
+
|
834
|
+
r = {'outer_diam': Do, 'inner_diam': Di, 'airgap': par['airgap']/kp,
|
835
|
+
'afmtype': afmtype, 'lfe': lfe,
|
836
|
+
'poles': 2*p,
|
837
|
+
'ans': round(ans, 6),
|
838
|
+
'hns': round(hns, 4),
|
839
|
+
'bns': round(bns, 4),
|
840
|
+
'A': round(A, 3),
|
841
|
+
'AJ': round(par['J']*A, 0),
|
842
|
+
'w1': int(N),
|
843
|
+
'kw': round(kw, 4),
|
844
|
+
'ess': round(1e-3*pnom/(60*speed)/(Do**2*lfe), 4),
|
845
|
+
'q': wdg.q,
|
846
|
+
'i1': round(I1, 3), # np.pi*Da1*A/2/m/N
|
847
|
+
'psi1': round(psi1, 5),
|
848
|
+
'u1': u1nom,
|
849
|
+
'ui': Ui}
|
850
|
+
hs1 = 0
|
851
|
+
hs2 = 0
|
852
|
+
r['stator'] = dict(
|
853
|
+
u1nom=round(u1nom, 1), f1nom=round(f1, 1),
|
854
|
+
num_slots=Q1,
|
855
|
+
nodedist=1,
|
856
|
+
# num_slots_gen = req_poles*Q1/2/p,
|
857
|
+
afm_stator=dict(
|
858
|
+
slot_width=r['bns'],
|
859
|
+
slot_height=hs1+r['hns'],
|
860
|
+
slot_h1=hs1,
|
861
|
+
slot_h2=hs1,
|
862
|
+
slot_open_width=r['bns'],
|
863
|
+
slot_r1=0,
|
864
|
+
slot_r2=0, # bns2/2,
|
865
|
+
yoke_height=round(hys, 4) if kpr == 1 else 0))
|
866
|
+
|
867
|
+
relculen = 1.4
|
868
|
+
r['winding'] = dict(
|
869
|
+
#wire_diam=round(dwire, 5),
|
870
|
+
num_phases=m,
|
871
|
+
cufilfact=par['kq'],
|
872
|
+
culength=relculen,
|
873
|
+
num_par_wdgs=a,
|
874
|
+
num_layers=layers,
|
875
|
+
#resistance=round(r1, 4),
|
876
|
+
coil_span=wdg.yd,
|
877
|
+
num_wires=int(num_wires))
|
878
|
+
|
879
|
+
hm = _get_magnet_height(r['i1'], r['w1'], r['kw'], par)/kpr
|
880
|
+
r['magnet'] = dict(
|
881
|
+
afm_rotor=dict(
|
882
|
+
yoke_height=round(hys/kpr, 4) if kps == 1 else 0,
|
883
|
+
rel_magn_width=par['mag_width'],
|
884
|
+
magn_height=round(hm, 4))
|
885
|
+
)
|
886
|
+
return r
|
887
|
+
|
888
|
+
|
711
889
|
def ipm(pnom: float, speed: float, p: int, **kwargs) -> dict:
|
712
890
|
"""returns dimension of a IPM machine
|
713
891
|
|
@@ -808,11 +986,11 @@ def eesm(pnom: float, speed: float, p: int, **kwargs) -> dict:
|
|
808
986
|
|
809
987
|
|
810
988
|
if __name__ == "__main__":
|
811
|
-
|
812
|
-
pnom = 10e3
|
813
|
-
speed = 4400/60
|
814
|
-
p = 4
|
815
|
-
udc = 600
|
989
|
+
# sizing example with SPM
|
990
|
+
pnom = 10e3 # shaft power in W
|
991
|
+
speed = 4400/60 # speed in 1/s
|
992
|
+
p = 4 # number of pole pairs
|
993
|
+
udc = 600 # DC voltage in V
|
816
994
|
|
817
995
|
r = spm(pnom, speed, p, udc=udc)
|
818
996
|
|
femagtools/machine/utils.py
CHANGED
@@ -449,8 +449,8 @@ def dqparident(workdir, engine, temp, machine,
|
|
449
449
|
leakfile.unlink(missing_ok=True)
|
450
450
|
|
451
451
|
period_frac = kwargs.get('period_frac', 6)
|
452
|
-
if machine.get('external_rotor', False):
|
453
|
-
|
452
|
+
if machine.get('external_rotor', False) and period_frac > 1:
|
453
|
+
logger.warning("period frac for external rotor requires GT femag version >= 2024")
|
454
454
|
|
455
455
|
if dqtype == 'ldq':
|
456
456
|
simulation = dict(
|
femagtools/mcv.py
CHANGED
@@ -335,9 +335,8 @@ class Mcv(object):
|
|
335
335
|
self.setData(data)
|
336
336
|
|
337
337
|
self.mc1_curves = len(self.curve)
|
338
|
-
if self.mc1_type
|
339
|
-
self.
|
340
|
-
if self.mc1_type in (ORIENT_CRV, ORIENT_PM_CRV):
|
338
|
+
if (self.mc1_type in (ORIENT_CRV, ORIENT_PM_CRV)
|
339
|
+
or self.mc1_curves > 1):
|
341
340
|
self.version_mc_curve = self.ORIENTED_VERSION_MC_CURVE
|
342
341
|
elif self.mc1_type == DEMCRV_BR:
|
343
342
|
self.version_mc_curve = self.PARAMETER_PM_CURVE
|
femagtools/model.py
CHANGED
@@ -136,14 +136,15 @@ class MachineModel(Model):
|
|
136
136
|
name = 'DRAFT'
|
137
137
|
if isinstance(parameters, str):
|
138
138
|
name = parameters
|
139
|
+
self.connect_full = False # no matter
|
139
140
|
else:
|
140
141
|
if 'name' in parameters:
|
141
142
|
name = parameters['name']
|
142
143
|
if 'windings' in parameters:
|
143
144
|
self.winding = self.windings
|
144
145
|
|
145
|
-
|
146
|
-
|
146
|
+
# connect model even for complete model (see fsl connect_models)
|
147
|
+
self.connect_full = parameters.get('afmtype', '') == ''
|
147
148
|
# must sanitize name to prevent femag complaints
|
148
149
|
self.name = ''.join([n
|
149
150
|
for n in name.strip()
|
@@ -410,7 +411,7 @@ class MachineModel(Model):
|
|
410
411
|
missing += m
|
411
412
|
names += n
|
412
413
|
if missing:
|
413
|
-
raise MCerror("
|
414
|
+
raise MCerror("Material properties missing: {}".format(
|
414
415
|
', '.join(set(missing))))
|
415
416
|
return set(names)
|
416
417
|
|
femagtools/parstudy.py
CHANGED
@@ -325,7 +325,7 @@ class ParameterStudy(object):
|
|
325
325
|
shutil.copy(ff, repdir)
|
326
326
|
calcid += 1
|
327
327
|
if isinstance(r, dict) and 'error' in r:
|
328
|
-
logger.
|
328
|
+
logger.warning("job %d failed: %s", k, r['error'])
|
329
329
|
if objective_vars:
|
330
330
|
f.append([float('nan')]*len(objective_vars))
|
331
331
|
else:
|
femagtools/plot/nc.py
CHANGED
@@ -14,7 +14,7 @@ DEFAULT_CMAP='viridis'
|
|
14
14
|
"""default colormap (see https://matplotlib.org/stable/users/explain/colors/colormaps.html)"""
|
15
15
|
|
16
16
|
|
17
|
-
def spel(isa, superelements=[], with_axis=False, ax=0):
|
17
|
+
def spel(isa, superelements=[], with_axis=False, with_wiredir=False, ax=0):
|
18
18
|
"""plot super elements of I7/ISA7 model
|
19
19
|
Args:
|
20
20
|
isa: Isa7 object
|
@@ -35,7 +35,7 @@ def spel(isa, superelements=[], with_axis=False, ax=0):
|
|
35
35
|
color=isa.color[se.color], lw=0))
|
36
36
|
try:
|
37
37
|
# draw wire direction
|
38
|
-
if se.subregion:
|
38
|
+
if se.subregion and with_wiredir:
|
39
39
|
if se.subregion.curdir != 0:
|
40
40
|
wkey = se.subregion.winding.key
|
41
41
|
if se.subregion.curdir < 0:
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: femagtools
|
3
|
-
Version: 1.8.
|
3
|
+
Version: 1.8.2
|
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=
|
1
|
+
femagtools/__init__.py,sha256=kRVLeU7jCmB8MUrNUdzChKl4fzai9F9XlN-SHUMQXTo,1600
|
2
2
|
femagtools/airgap.py,sha256=hELJXe52yUw82JwZ1tGUXUtRhMG2_WSUBVeGkTZSAM8,1900
|
3
3
|
femagtools/amazon.py,sha256=O1ICuv21XDAJi1qK1Sigs2TdS6hDZP19OzvmE2t76wU,12069
|
4
4
|
femagtools/amela.py,sha256=RFTuQ5EcX19G2YJchnktr6j62mNptrdTreShQDOeuKA,13874
|
@@ -17,7 +17,7 @@ femagtools/ecloss.py,sha256=kTsE9Lx6nt6Ez9PBfD58hPMcnH2PxSc95zJaYMCQd5Q,33957
|
|
17
17
|
femagtools/erg.py,sha256=IXKq76P9qLt_ssNOP78v8Qizk3J2Zg80yaKDSjzwoJE,1224
|
18
18
|
femagtools/femag.py,sha256=m8mfMjzjkL_R-iqyInxM7y7F4jgKg6ZI7FfTQlbxtng,46988
|
19
19
|
femagtools/forcedens.py,sha256=7NNv75Vg9vQ_fy8W4kM2rlSO970zaSmeurhPmdAxsOU,8485
|
20
|
-
femagtools/fsl.py,sha256=
|
20
|
+
femagtools/fsl.py,sha256=PU4t8wBvtVckv4f8ozg5_exxspuToW0W0O95jZZ5IU4,36924
|
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
|
@@ -29,9 +29,9 @@ femagtools/jhb.py,sha256=stJxkmzHpfUIBVcFw7jWbV5KN9_EFqzOCgacyhUqWvM,1779
|
|
29
29
|
femagtools/job.py,sha256=sIRVXsyoupfRXqGsWyOHMetcKlWIyggxfVURjM8aD54,11322
|
30
30
|
femagtools/losscoeffs.py,sha256=Nil2fvkkS6-T29OnHIsdVbegCHyl23iZg8rMVbbA5wY,6785
|
31
31
|
femagtools/magnet.py,sha256=Nuk060bT4Wa3lX74HdefqTTtUxLaERDSBYTTpbi6KP4,1093
|
32
|
-
femagtools/mcv.py,sha256=
|
32
|
+
femagtools/mcv.py,sha256=CAv-8bRm9aQJR5LVVXuLGGw1id_uu0m-fMiPMYX9Z-o,40488
|
33
33
|
femagtools/me.py,sha256=z6RJkvSbgMmorCQTxKvq44uIYKh82uYYExjkNePJCmE,1813
|
34
|
-
femagtools/model.py,sha256=
|
34
|
+
femagtools/model.py,sha256=dk9x-iqRzgOTdTCeU_ynUZGb1bt4FvU1ZGMPXytMbUg,17965
|
35
35
|
femagtools/moproblem.py,sha256=kOP8pRdD8YXz28_M2WKnFgl3eeJ7tqg49ohoazsmUOg,2825
|
36
36
|
femagtools/multiproc.py,sha256=7mJF-VU1NrJkENyg8eHtDrDRNBwLPK43phZv3ehm9BU,8435
|
37
37
|
femagtools/mxw2msh.py,sha256=CIIqAvfs8U-A0OfuOAoDaqNSmoMSHSI_tW1CPFRCP5E,2151
|
@@ -39,7 +39,7 @@ femagtools/nc.py,sha256=bAj3iurE9WaovoCi76ry2aJZJ6rC1zO6xWrfsSD6lrc,15160
|
|
39
39
|
femagtools/netlist.py,sha256=CSCl8setLZ_L8DCnNWaNA3-wLe1yo-fmzARZoVvYfaA,2052
|
40
40
|
femagtools/ntib.py,sha256=76g1ZO3Fq_kN-HTMBvaKvJmMMlJMyEPFeNAcJPq3w7Y,3099
|
41
41
|
femagtools/opt.py,sha256=wBU0yh3hZlNti_zfIvtKcPg1EJrnE3I1BqmVxLGWixU,8753
|
42
|
-
femagtools/parstudy.py,sha256=
|
42
|
+
femagtools/parstudy.py,sha256=OXAqRGSvOZHNZTx_bXSgXpKv_ABB6zHOU-dJLJjrhBI,19464
|
43
43
|
femagtools/poc.py,sha256=wMwOxMhPLFRiGPMsKQwWWuGr6UZPzRBajhfVMfXptNU,6794
|
44
44
|
femagtools/tks.py,sha256=xStMu6P1xsc36tS53FKnbL6i2ZTVnCNXyTVw8_gjepo,7436
|
45
45
|
femagtools/ts.py,sha256=x9aCMVASjdBZuyI2pJGMyi1dveGFd_pWQ20cZ-l_moc,47216
|
@@ -48,32 +48,32 @@ femagtools/vbf.py,sha256=9XGfhftmD9carU8ByQ5DwqoR4daq5mJ39eMqruwml0Q,2444
|
|
48
48
|
femagtools/vtu.py,sha256=Sf83dHIfCKY2km-MIUHKKoj-JKN4PDX7kkPLZXyIYY4,10723
|
49
49
|
femagtools/windings.py,sha256=OYoEFIQci3f3sYJkcyRjBpBpDRtX2Y2aHZiRXOEgsls,23497
|
50
50
|
femagtools/dxfsl/__init__.py,sha256=MywcCdpKPKs4qJBJJgeDsikJFJ2P48dbTuNk303f5pM,76
|
51
|
-
femagtools/dxfsl/area.py,sha256=
|
52
|
-
femagtools/dxfsl/areabuilder.py,sha256=
|
51
|
+
femagtools/dxfsl/area.py,sha256=C0mPWeer2kleh3x5GHibMSjegEjfmEZHTHTB9WVHIPg,67005
|
52
|
+
femagtools/dxfsl/areabuilder.py,sha256=6dfWryYjXzGIVDOsX2zb1VKIhUzmpL43XhF-wtdesAg,35882
|
53
53
|
femagtools/dxfsl/concat.py,sha256=F6scwesxyOmfmKQ5kGspNCxA71Yz6QgxFL7lTj3hsaI,13385
|
54
54
|
femagtools/dxfsl/conv.py,sha256=-d03mQiDWF_MD4T0TIH7k-zNa6p7w9rtc6QE2Bz1Q7s,10362
|
55
|
-
femagtools/dxfsl/converter.py,sha256=
|
55
|
+
femagtools/dxfsl/converter.py,sha256=YXesbeqHbwtr97xPMJTNSsxe_kVJycJQfrKrIQVoJQw,36425
|
56
56
|
femagtools/dxfsl/corner.py,sha256=-XPBcnEau-2-SRHLYzlBqCQGaFfgm_DH2qR1mSaFoAs,1311
|
57
57
|
femagtools/dxfsl/dumprenderer.py,sha256=n4AvInjvGIaC2iKZtQaYXXDyJVSQ3uEOFOLD4-xfKRY,1861
|
58
58
|
femagtools/dxfsl/dxfparser.py,sha256=kyXG0kZfNyOgn96MqBgP8RhOQhppfB5NbyRNNybs1C0,13451
|
59
59
|
femagtools/dxfsl/femparser.py,sha256=O8940Q1Mz8MKng6W8M3s9KfTvhDLJ56tfQWtZEW3xMM,2134
|
60
|
-
femagtools/dxfsl/fslrenderer.py,sha256=
|
60
|
+
femagtools/dxfsl/fslrenderer.py,sha256=d2a_HXml2CqS8FkmSbFXsUtOLIfSI14C4qGQd0Xj-c4,27961
|
61
61
|
femagtools/dxfsl/functions.py,sha256=teJHtVxoViGs66AB8_4BxRrFQx9SbPT2azIrKyhJHOc,12005
|
62
|
-
femagtools/dxfsl/geom.py,sha256=
|
62
|
+
femagtools/dxfsl/geom.py,sha256=CuaW4aa0Xb3dTYX_HSHpMxqOXGztT35_ISHh0Dj-FJE,173525
|
63
63
|
femagtools/dxfsl/journal.py,sha256=4LMSW5wCYlETzid6SIF8b5DH-DCgtH4nFx-xIxjtbfg,4265
|
64
|
-
femagtools/dxfsl/machine.py,sha256=
|
64
|
+
femagtools/dxfsl/machine.py,sha256=8KG0jIcK7vYFTXqIwYNOecGaYgvhZ9UjrRHJQZ9kjHE,56514
|
65
65
|
femagtools/dxfsl/plotrenderer.py,sha256=q2cORuxJEf1Ws6oCY9c0gF6N3kDrcI6WOz3u5Vl6R_c,13823
|
66
|
-
femagtools/dxfsl/shape.py,sha256
|
67
|
-
femagtools/dxfsl/svgparser.py,sha256=
|
68
|
-
femagtools/dxfsl/symmetry.py,sha256=
|
69
|
-
femagtools/machine/__init__.py,sha256=
|
70
|
-
femagtools/machine/afpm.py,sha256=
|
66
|
+
femagtools/dxfsl/shape.py,sha256=-hUphAYwhja_6FyWHjUbBlNSPh6tWZCKYdz7aDplqWk,61566
|
67
|
+
femagtools/dxfsl/svgparser.py,sha256=RY2TU9MK6gOaNmI6w6RNqcw7H9YGmK-NUwvdylKBcsE,3763
|
68
|
+
femagtools/dxfsl/symmetry.py,sha256=DPZ-y-UjEshNlOdC90kGhpAitsIwrvCN6gZeNGp5DJU,41120
|
69
|
+
femagtools/machine/__init__.py,sha256=B7yeRZzf29NWCWy8C8iJFdTr9bszAoMRcVEpblhCeg4,7256
|
70
|
+
femagtools/machine/afpm.py,sha256=wMyfdGDaBAt6knDSzw04Oxy_oDuBCEi06f6WaKZoRGw,25918
|
71
71
|
femagtools/machine/effloss.py,sha256=GV_bc5f1ysBi1Ng7FR3fD1xh5KXa6ACc55iWfsltMBI,13663
|
72
72
|
femagtools/machine/im.py,sha256=3Y54AHMZfAjkvgexx2E-5jxNWzaVQ-SyaETCh7gNBYA,38008
|
73
73
|
femagtools/machine/pm.py,sha256=C4vDdPIsIRUKtzY3b1RNT1v37p1uP3pMUduftNejcPc,68129
|
74
|
-
femagtools/machine/sizing.py,sha256=
|
74
|
+
femagtools/machine/sizing.py,sha256=YhsT5Iki7_zW1BBKB1dD_q6qHI-kvjb3_68881Q71LU,30039
|
75
75
|
femagtools/machine/sm.py,sha256=Y6g4KPm-2bhzMYjGarojokEzaNgOmFR2G4DIKBtVQOs,39210
|
76
|
-
femagtools/machine/utils.py,sha256=
|
76
|
+
femagtools/machine/utils.py,sha256=VswrQuGB_uGE4cYWIQSXLSEVJKrmSwNJdGlme7RPEno,20912
|
77
77
|
femagtools/moo/__init__.py,sha256=zinmWEOrsEz6DmMX0Dbn4t6_1UR-p4bEGqyR1wUQk_Q,175
|
78
78
|
femagtools/moo/algorithm.py,sha256=e-Cgp2rp_hG9DXqWqluzQGNIWvCfthUgLD8O-aVPofA,5763
|
79
79
|
femagtools/moo/population.py,sha256=krIl8tOJXPhCgBemkqn-jwvZg1VzsGniqMN_KAFxbuw,10203
|
@@ -88,7 +88,7 @@ femagtools/plot/fieldlines.py,sha256=_7ykKhnQLeS4fz34pnzovH1gIhcUSKJ3gl1GUgWYix8
|
|
88
88
|
femagtools/plot/fluxdens.py,sha256=NlexRJ3f_8CgKoWrV82ZIsAXPrLhwj98uOe8_fUks7A,1082
|
89
89
|
femagtools/plot/forcedens.py,sha256=Vloi9czy7qbGXI-Vm7Cow6IfHTsFhCLI1YWduFOR55c,4075
|
90
90
|
femagtools/plot/mcv.py,sha256=ijZg6KPwZC7sDxEzGEUfVWvDoSEfgcaH-hzQMt7E90I,3671
|
91
|
-
femagtools/plot/nc.py,sha256=
|
91
|
+
femagtools/plot/nc.py,sha256=kfTifzAMReQZu4UmbHZo1caAK0n7N51lkPj7BU7l1lU,10876
|
92
92
|
femagtools/plot/phasor.py,sha256=5QG1GkXKVksc8P6Q4thKADf6W1l8rDKeArIHFYvbXlw,4858
|
93
93
|
femagtools/plot/wdg.py,sha256=Orw2XGThHpOuJ_raSRnQTzj5tOmwllNWweByoOXbA7I,9820
|
94
94
|
femagtools/svgfsl/converter.py,sha256=5q4LognshXNTpUWLnU5rtgCfAwZnEuPzqsgyeRYC-VM,3019
|
@@ -188,7 +188,7 @@ tests/test_losscoeffs.py,sha256=3EKmDFRuvn88z_8r0HxKFdB0lNXNnhEgaFshL8BkDjE,2012
|
|
188
188
|
tests/test_machine.py,sha256=Woha6nfKaYQCxxoG57sUztpnpU6K9imXwn9B_KMhanw,12906
|
189
189
|
tests/test_magncurv.py,sha256=wPf1dNACZ1BkqKHSqJxiNi6Dq8JP3QCRBY4ql_0YCyU,2608
|
190
190
|
tests/test_magnet.py,sha256=BUHG_8SEi4d8j6yV9BSzcpYc2-UVMRFv50P_jgTTXoQ,276
|
191
|
-
tests/test_mcv.py,sha256=
|
191
|
+
tests/test_mcv.py,sha256=cPgijMjDxSt1CwN6syE4r4WWAlUSruZDQsTK_oNhfg4,4570
|
192
192
|
tests/test_mcvreader.py,sha256=3cgq22b_iaWLrs4WWOUNHqJREnv0YoFivNpAb4teEJs,2118
|
193
193
|
tests/test_me.py,sha256=En00OrOhZclBO4u74q5Os0FgVP4TGFLzz99LF0QHXHA,196
|
194
194
|
tests/test_model.py,sha256=kYjjFgZPIex3foX3skiOdD5MCcmA2JP7oDDuE9txv_U,2698
|
@@ -213,9 +213,9 @@ tests/moo/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
213
213
|
tests/moo/test_algorithm.py,sha256=Em8sFm2vzPmuIzRrBBnUQLU_TYuJHSf-kEeozw0XeX4,2563
|
214
214
|
tests/moo/test_population.py,sha256=FvX9LRCxQx0_E2GxHQ5vKwOYFBQiNbT6Lmv5GmNWjTQ,5471
|
215
215
|
tests/moo/test_problem.py,sha256=ALeP4u7g-dFhfwWL8vxivdrrYzVKPjHMCAXzzgyNZbs,467
|
216
|
-
femagtools-1.8.
|
217
|
-
femagtools-1.8.
|
218
|
-
femagtools-1.8.
|
219
|
-
femagtools-1.8.
|
220
|
-
femagtools-1.8.
|
221
|
-
femagtools-1.8.
|
216
|
+
femagtools-1.8.2.dist-info/LICENSE,sha256=NaQe4uvkszQPJmiRPHecfk-Ab9VSRXo8xQLGNVHTeFo,1362
|
217
|
+
femagtools-1.8.2.dist-info/METADATA,sha256=yH0fPdMTzP_mojxKfekWdoGkrj_tvA0WrEpRVt_XYlc,6198
|
218
|
+
femagtools-1.8.2.dist-info/WHEEL,sha256=PZUExdf71Ui_so67QXpySuHtCi3-J3wvF4ORK6k_S8U,91
|
219
|
+
femagtools-1.8.2.dist-info/entry_points.txt,sha256=jrvOkZPiN44u1sASeu271VRaVIv5V-uRpN0_N5U_R8c,248
|
220
|
+
femagtools-1.8.2.dist-info/top_level.txt,sha256=Ri4YWtU8MZTzNje9IKyXhTakNbsrCynuWdon4Yq94Dc,17
|
221
|
+
femagtools-1.8.2.dist-info/RECORD,,
|
tests/test_mcv.py
CHANGED
@@ -33,7 +33,7 @@ def test_write_mcv_orient_crv(tmpdir):
|
|
33
33
|
mcvr = femagtools.mcv.Reader()
|
34
34
|
mcvr.readMcv(filename+ext)
|
35
35
|
assert mcvr['version_mc_curve'] == 1
|
36
|
-
assert mcvr['ctype'] == femagtools.mcv.
|
36
|
+
assert mcvr['ctype'] == femagtools.mcv.MAGCRV
|
37
37
|
assert mcvr['curve'][0]['bi'] == pytest.approx(B, 1e-3)
|
38
38
|
assert mcvr['curve'][0]['hi'] == pytest.approx(H, 1e-3)
|
39
39
|
assert mcvr['curve'][1]['bi'] == pytest.approx(B, 1e-3)
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|