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.
Files changed (42) hide show
  1. femagtools/__init__.py +1 -1
  2. femagtools/amela.py +2 -2
  3. femagtools/dxfsl/area.py +129 -25
  4. femagtools/dxfsl/conv.py +2 -9
  5. femagtools/dxfsl/converter.py +33 -10
  6. femagtools/dxfsl/fslrenderer.py +6 -12
  7. femagtools/dxfsl/geom.py +31 -9
  8. femagtools/dxfsl/journal.py +2 -2
  9. femagtools/dxfsl/machine.py +14 -13
  10. femagtools/dxfsl/shape.py +3 -0
  11. femagtools/ecloss.py +381 -2
  12. femagtools/femag.py +41 -0
  13. femagtools/fsl.py +31 -50
  14. femagtools/machine/pm.py +1 -1
  15. femagtools/machine/sm.py +14 -0
  16. femagtools/mcv.py +128 -124
  17. femagtools/me.py +13 -13
  18. femagtools/model.py +8 -2
  19. femagtools/plot/fieldlines.py +1 -1
  20. femagtools/plot/mcv.py +18 -0
  21. femagtools/plot/wdg.py +2 -2
  22. femagtools/svgfsl/converter.py +1 -1
  23. femagtools/templates/gen_hairpin_winding.mako +36 -45
  24. femagtools/templates/magnetIron.mako +1 -1
  25. femagtools/templates/magnetIron2.mako +1 -1
  26. femagtools/templates/magnetIron3.mako +1 -1
  27. femagtools/templates/magnetIron4.mako +1 -1
  28. femagtools/templates/magnetIron5.mako +1 -1
  29. femagtools/templates/magnetIronV.mako +1 -1
  30. femagtools/templates/magnetSector.mako +1 -1
  31. femagtools/templates/mesh-airgap.mako +12 -6
  32. femagtools/templates/prepare_thermal.mako +148 -13
  33. femagtools/windings.py +25 -20
  34. {femagtools-1.7.9.dist-info → femagtools-1.8.0.dist-info}/METADATA +20 -20
  35. {femagtools-1.7.9.dist-info → femagtools-1.8.0.dist-info}/RECORD +41 -42
  36. {femagtools-1.7.9.dist-info → femagtools-1.8.0.dist-info}/WHEEL +1 -1
  37. tests/test_mcv.py +106 -1
  38. tests/test_windings.py +5 -0
  39. tests/test_mcvwriter.py +0 -96
  40. {femagtools-1.7.9.dist-info → femagtools-1.8.0.dist-info}/LICENSE +0 -0
  41. {femagtools-1.7.9.dist-info → femagtools-1.8.0.dist-info}/entry_points.txt +0 -0
  42. {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 test_write_poc(tmpdir):
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
@@ -158,3 +158,8 @@ def test_num_layers():
158
158
 
159
159
  assert w.l == 2
160
160
  assert w.yd == 4
161
+
162
+ def test_zoneplan():
163
+ w = femagtools.windings.Winding(
164
+ {'Q': 60, 'p': 32, 'm': 3, 'l': 1})
165
+ assert [1, -2, 3, -4, 5, -6, -17, 18, -19, 20] == w.zoneplan()[0][0]
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()