femagtools 1.7.9__py3-none-any.whl → 1.8.0__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/amela.py +2 -2
- femagtools/dxfsl/area.py +129 -25
- femagtools/dxfsl/conv.py +2 -9
- femagtools/dxfsl/converter.py +33 -10
- femagtools/dxfsl/fslrenderer.py +6 -12
- femagtools/dxfsl/geom.py +31 -9
- femagtools/dxfsl/journal.py +2 -2
- femagtools/dxfsl/machine.py +14 -13
- femagtools/dxfsl/shape.py +3 -0
- femagtools/ecloss.py +381 -2
- femagtools/femag.py +41 -0
- femagtools/fsl.py +31 -50
- femagtools/machine/pm.py +1 -1
- femagtools/machine/sm.py +14 -0
- femagtools/mcv.py +128 -124
- femagtools/me.py +13 -13
- femagtools/model.py +8 -2
- femagtools/plot/fieldlines.py +1 -1
- femagtools/plot/mcv.py +18 -0
- femagtools/plot/wdg.py +2 -2
- femagtools/svgfsl/converter.py +1 -1
- femagtools/templates/gen_hairpin_winding.mako +36 -45
- femagtools/templates/magnetIron.mako +1 -1
- femagtools/templates/magnetIron2.mako +1 -1
- femagtools/templates/magnetIron3.mako +1 -1
- femagtools/templates/magnetIron4.mako +1 -1
- femagtools/templates/magnetIron5.mako +1 -1
- femagtools/templates/magnetIronV.mako +1 -1
- femagtools/templates/magnetSector.mako +1 -1
- femagtools/templates/mesh-airgap.mako +12 -6
- femagtools/templates/prepare_thermal.mako +148 -13
- femagtools/windings.py +25 -20
- {femagtools-1.7.9.dist-info → femagtools-1.8.0.dist-info}/METADATA +20 -20
- {femagtools-1.7.9.dist-info → femagtools-1.8.0.dist-info}/RECORD +41 -42
- {femagtools-1.7.9.dist-info → femagtools-1.8.0.dist-info}/WHEEL +1 -1
- tests/test_mcv.py +106 -1
- tests/test_windings.py +5 -0
- tests/test_mcvwriter.py +0 -96
- {femagtools-1.7.9.dist-info → femagtools-1.8.0.dist-info}/LICENSE +0 -0
- {femagtools-1.7.9.dist-info → femagtools-1.8.0.dist-info}/entry_points.txt +0 -0
- {femagtools-1.7.9.dist-info → femagtools-1.8.0.dist-info}/top_level.txt +0 -0
tests/test_mcv.py
CHANGED
@@ -1,6 +1,10 @@
|
|
1
|
+
import sys
|
2
|
+
import os
|
3
|
+
import pytest
|
4
|
+
import numpy as np
|
1
5
|
import femagtools.mcv
|
2
6
|
|
3
|
-
def
|
7
|
+
def test_write_mcv_magcrv(tmpdir):
|
4
8
|
filename = f"{tmpdir}/mcvData"
|
5
9
|
|
6
10
|
B = [3e-02, 7e-02, 2e-01, 2.31]
|
@@ -8,3 +12,104 @@ def test_write_poc(tmpdir):
|
|
8
12
|
mcvData = dict(curve=[dict(bi=B,hi=H)])
|
9
13
|
mcv = femagtools.mcv.MagnetizingCurve(mcvData)
|
10
14
|
mcv.writefile(filename)
|
15
|
+
mcvr = femagtools.mcv.Reader()
|
16
|
+
ext = '.MC' if sys.platform == 'win32' else '.MCV'
|
17
|
+
mcvr.readMcv(filename+ext)
|
18
|
+
assert mcvr['version_mc_curve'] == 0
|
19
|
+
mcvr['ctype'] == femagtools.mcv.MAGCRV
|
20
|
+
assert mcvr['curve'][0]['bi'] == pytest.approx(B, 1e-3)
|
21
|
+
assert mcvr['curve'][0]['hi'] == pytest.approx(H, 1e-3)
|
22
|
+
assert len(mcvr['curve']) == 1
|
23
|
+
|
24
|
+
def test_write_mcv_orient_crv(tmpdir):
|
25
|
+
filename = f"{tmpdir}/mcvData"
|
26
|
+
|
27
|
+
B = [3e-02, 7e-02, 2e-01, 2.31]
|
28
|
+
H = [1e+02, 2e+02, 5e+02, 3e+05]
|
29
|
+
mcvData = dict(curve=[dict(bi=B,hi=H), dict(bi=B,hi=H)])
|
30
|
+
mcv = femagtools.mcv.MagnetizingCurve(mcvData)
|
31
|
+
mcv.writefile(filename)
|
32
|
+
ext = '.MC' if sys.platform == 'win32' else '.MCV'
|
33
|
+
mcvr = femagtools.mcv.Reader()
|
34
|
+
mcvr.readMcv(filename+ext)
|
35
|
+
assert mcvr['version_mc_curve'] == 1
|
36
|
+
assert mcvr['ctype'] == femagtools.mcv.ORIENT_CRV
|
37
|
+
assert mcvr['curve'][0]['bi'] == pytest.approx(B, 1e-3)
|
38
|
+
assert mcvr['curve'][0]['hi'] == pytest.approx(H, 1e-3)
|
39
|
+
assert mcvr['curve'][1]['bi'] == pytest.approx(B, 1e-3)
|
40
|
+
assert mcvr['curve'][1]['hi'] == pytest.approx(H, 1e-3)
|
41
|
+
assert len(mcvr['curve']) == 2
|
42
|
+
|
43
|
+
def test_read_mcv_magcrv():
|
44
|
+
testPath = os.path.split(__file__)[0]
|
45
|
+
if not testPath:
|
46
|
+
testPath = '.'
|
47
|
+
filename = "data/TKS_NO_20.MCV"
|
48
|
+
reader = femagtools.mcv.Reader()
|
49
|
+
reader.readMcv('{0}/{1}'.format(testPath, filename))
|
50
|
+
r = reader.get_results()
|
51
|
+
assert r['desc'] == u'PowerCore\xae NO 20 ;ThyssenKrupp Steel Eur'
|
52
|
+
assert r['fillfac'] == pytest.approx(0.92, 1e-6)
|
53
|
+
assert len(r['curve'][0]['bi']) == 24
|
54
|
+
assert r['curve'][0]['bi'][0] == 0.0
|
55
|
+
assert r['curve'][0]['bi'][-1] == pytest.approx(1.836, 1e-3)
|
56
|
+
|
57
|
+
def test_read_write_mcv_with_losses():
|
58
|
+
testPath = os.path.split(__file__)[0]
|
59
|
+
if not testPath:
|
60
|
+
testPath = '.'
|
61
|
+
filename = "data/TKM270-50A-LOSS.MCV"
|
62
|
+
reader = femagtools.mcv.Reader()
|
63
|
+
reader.readMcv('{0}/{1}'.format(testPath, filename))
|
64
|
+
r = reader.get_results()
|
65
|
+
assert r['name'] == u'TKM270-50A-LOSS'
|
66
|
+
assert len(r['curve'][0]['bi']) == 35
|
67
|
+
assert r['curve'][0]['bi'][-1] == pytest.approx(2.638, 1e-3)
|
68
|
+
assert set(r['losses'].keys()) == {'B', 'f', 'pfe', 'Bo', 'fo',
|
69
|
+
'cw', 'cw_freq', 'b_coeff', 'ch', 'ch_freq'}
|
70
|
+
assert len(r['losses']['pfe']) == 20
|
71
|
+
assert len(r['losses']['pfe'][8]) == 19
|
72
|
+
assert r['losses']['pfe'][8][18] == pytest.approx(3097.6, 0.1)
|
73
|
+
|
74
|
+
# test mcv writer
|
75
|
+
filename_out = "data/TKS_LOSS.MCV"
|
76
|
+
writer = femagtools.mcv.Writer(r)
|
77
|
+
writeMcvFile = '{0}/{1}'.format(testPath, filename_out)
|
78
|
+
writer.writeMcv(writeMcvFile)
|
79
|
+
# TEST
|
80
|
+
reader2 = femagtools.mcv.Reader()
|
81
|
+
reader2.readMcv(writeMcvFile)
|
82
|
+
|
83
|
+
for attr in ['version_mc_curve', 'mc1_curves', 'mc1_title']:
|
84
|
+
assert getattr(reader, attr) == getattr(reader2, attr)
|
85
|
+
for attr in ['mc1_remz', 'mc1_bsat', 'mc1_bref', 'mc1_fillfac',
|
86
|
+
'fo', 'Bo', 'ch', 'ch_freq', 'cw',
|
87
|
+
'cw_freq', 'b_coeff', 'rho', 'fe_sat_mag']:
|
88
|
+
assert getattr(reader, attr) == getattr(reader2, attr)
|
89
|
+
for attr in ['hi', 'bi']:
|
90
|
+
assert reader.curve[0][attr] == reader2.curve[0][attr]
|
91
|
+
np.testing.assert_almost_equal(reader.losses['f'],
|
92
|
+
reader2.losses['f'], 5)
|
93
|
+
np.testing.assert_almost_equal(reader.losses['B'],
|
94
|
+
reader2.losses['B'], 5)
|
95
|
+
|
96
|
+
def test_extrapol():
|
97
|
+
mcv = {'name':"M222",
|
98
|
+
'curve':[{
|
99
|
+
'bi':[0.0, 0.09, 0.179, 0.267, 0.358,
|
100
|
+
0.45, 0.543, 0.6334, 0.727,
|
101
|
+
0.819, 0.9142, 1.0142, 1.102,
|
102
|
+
1.196, 1.314, 1.3845, 1.433,
|
103
|
+
1.576, 1.677, 1.745, 1.787,
|
104
|
+
1.81, 1.825, 1.836],
|
105
|
+
|
106
|
+
'hi':[0.0, 22.16, 31.07, 37.25, 43.174,
|
107
|
+
49.54, 56.96, 66.11, 78.291,
|
108
|
+
95, 120.64, 164.6, 259.36,
|
109
|
+
565.86, 1650.26, 3631.12, 5000, 10000,
|
110
|
+
15000, 20000, 25000, 30000, 35000, 40000]}]}
|
111
|
+
c = femagtools.mcv.extrapol(mcv['curve'][0])
|
112
|
+
assert len(c['bi']) > len(mcv['curve'][0]['bi'])
|
113
|
+
assert len(c['hi']) > len(mcv['curve'][0]['hi'])
|
114
|
+
assert np.all(np.diff(c['bi']) > 0)
|
115
|
+
assert np.all(np.diff(c['hi']) > 0)
|
tests/test_windings.py
CHANGED
tests/test_mcvwriter.py
DELETED
@@ -1,96 +0,0 @@
|
|
1
|
-
#!/usr/bin/env python3
|
2
|
-
#
|
3
|
-
import unittest
|
4
|
-
import os
|
5
|
-
import femagtools.mcv
|
6
|
-
import numpy as np
|
7
|
-
|
8
|
-
|
9
|
-
class McvWriterTest(unittest.TestCase):
|
10
|
-
def test_read_write_mcv(self):
|
11
|
-
testPath = os.path.split(__file__)[0]
|
12
|
-
if not testPath:
|
13
|
-
testPath = '.'
|
14
|
-
filename = "data/TKS_NO_20.MCV"
|
15
|
-
filename_out = "data/TKS_NO_20_out.MCV"
|
16
|
-
reader = femagtools.mcv.Reader()
|
17
|
-
reader.readMcv('{0}/{1}'.format(testPath, filename))
|
18
|
-
r = reader.get_results()
|
19
|
-
self.assertEqual(r['desc'],
|
20
|
-
u'PowerCore\xae NO 20 ;ThyssenKrupp Steel Eur')
|
21
|
-
self.assertEqual(len(r['curve'][0]['bi']), 24)
|
22
|
-
self.assertEqual(r['curve'][0]['bi'][0], 0.0)
|
23
|
-
self.assertAlmostEqual(r['curve'][0]['bi'][-1], 1.836, 3)
|
24
|
-
|
25
|
-
# test mcv writer
|
26
|
-
writer = femagtools.mcv.Writer(r)
|
27
|
-
# writer.setData(r)
|
28
|
-
writeMcvFile = '{0}/{1}'.format(testPath, filename_out)
|
29
|
-
writer.writeMcv(writeMcvFile)
|
30
|
-
self.assertNotEqual(writer, None)
|
31
|
-
|
32
|
-
# TEST
|
33
|
-
reader2 = femagtools.mcv.Reader()
|
34
|
-
reader2.readMcv(writeMcvFile)
|
35
|
-
|
36
|
-
for attr in ['version_mc_curve', 'mc1_curves', 'mc1_title']:
|
37
|
-
self.assertAlmostEqual(getattr(reader, attr),
|
38
|
-
getattr(reader2, attr))
|
39
|
-
for attr in ['mc1_remz', 'mc1_bsat', 'mc1_bref', 'mc1_fillfac',
|
40
|
-
'fo', 'Bo', 'ch', 'ch_freq', 'cw',
|
41
|
-
'cw_freq', 'b_coeff', 'rho', 'fe_sat_mag']:
|
42
|
-
self.assertAlmostEqual(getattr(reader, attr),
|
43
|
-
getattr(reader2, attr), 3)
|
44
|
-
for attr in ['hi', 'bi']:
|
45
|
-
self.assertAlmostEqual(reader.curve[0][attr],
|
46
|
-
reader2.curve[0][attr], 3)
|
47
|
-
|
48
|
-
def test_read_write_mcv_with_losses(self):
|
49
|
-
testPath = os.path.split(__file__)[0]
|
50
|
-
if not testPath:
|
51
|
-
testPath = '.'
|
52
|
-
filename = "data/TKM270-50A-LOSS.MCV"
|
53
|
-
filename_out = "data/TKS_LOSS.MCV"
|
54
|
-
reader = femagtools.mcv.Reader()
|
55
|
-
reader.readMcv('{0}/{1}'.format(testPath, filename))
|
56
|
-
r = reader.get_results()
|
57
|
-
self.assertEqual(r['name'],
|
58
|
-
u'TKM270-50A-LOSS')
|
59
|
-
self.assertEqual(len(r['curve'][0]['bi']), 35)
|
60
|
-
self.assertAlmostEqual(r['curve'][0]['bi'][-1], 2.638, 3)
|
61
|
-
self.assertEqual(set(r['losses'].keys()),
|
62
|
-
set({'B', 'f', 'pfe', 'Bo', 'fo',
|
63
|
-
'cw', 'cw_freq', 'b_coeff', 'ch', 'ch_freq'}))
|
64
|
-
self.assertEqual(len(r['losses']['pfe']), 20)
|
65
|
-
self.assertEqual(len(r['losses']['pfe'][8]), 19)
|
66
|
-
self.assertAlmostEqual(r['losses']['pfe'][8][18], 3097.6, 1)
|
67
|
-
|
68
|
-
# test mcv writer
|
69
|
-
writer = femagtools.mcv.Writer(r)
|
70
|
-
# writer.setData(r)
|
71
|
-
writeMcvFile = '{0}/{1}'.format(testPath, filename_out)
|
72
|
-
writer.writeMcv(writeMcvFile)
|
73
|
-
self.assertNotEqual(writer, None)
|
74
|
-
|
75
|
-
# TEST
|
76
|
-
reader2 = femagtools.mcv.Reader()
|
77
|
-
reader2.readMcv(writeMcvFile)
|
78
|
-
|
79
|
-
for attr in ['version_mc_curve', 'mc1_curves', 'mc1_title']:
|
80
|
-
self.assertAlmostEqual(getattr(reader, attr),
|
81
|
-
getattr(reader2, attr))
|
82
|
-
for attr in ['mc1_remz', 'mc1_bsat', 'mc1_bref', 'mc1_fillfac',
|
83
|
-
'fo', 'Bo', 'ch', 'ch_freq', 'cw',
|
84
|
-
'cw_freq', 'b_coeff', 'rho', 'fe_sat_mag']:
|
85
|
-
self.assertAlmostEqual(getattr(reader, attr),
|
86
|
-
getattr(reader2, attr), 3)
|
87
|
-
for attr in ['hi', 'bi']:
|
88
|
-
self.assertAlmostEqual(reader.curve[0][attr],
|
89
|
-
reader2.curve[0][attr], 3)
|
90
|
-
np.testing.assert_almost_equal(reader.losses['f'],
|
91
|
-
reader2.losses['f'], 5)
|
92
|
-
np.testing.assert_almost_equal(reader.losses['B'],
|
93
|
-
reader2.losses['B'], 5)
|
94
|
-
|
95
|
-
if __name__ == '__main__':
|
96
|
-
unittest.main()
|
File without changes
|
File without changes
|
File without changes
|