femagtools 1.8.6__py3-none-any.whl → 1.8.7__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.
@@ -0,0 +1,127 @@
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-rot.dat in current directory with columns:
10
+ -- displ curr1 curr2 curr3 psi1 psi2 psi3 torq rrem
11
+
12
+ function gcd(a, b)
13
+ return b==0 and a or gcd(b,a%b)
14
+ end
15
+
16
+ function dmg(ek, Br, alfam, murm, Bd, Bq, Hd, Hq, alfahm, Hk)
17
+ if Hd < Hk then
18
+ muem = murm*4*math.pi*1e-7
19
+ Brn = Bd - Hk*1e3*muem
20
+ if Br < 1e-5 then
21
+ Brn = 1e-5
22
+ end
23
+ return Brn, alfam, 1
24
+ end
25
+ return Br, alfam, 1
26
+ end
27
+
28
+ function calc_flux_torq_rem(phi, curvec)
29
+ for k=1,3 do
30
+ def_curr_wdg(k, curvec[k]/a, 0)
31
+ end
32
+
33
+ dRR = 0
34
+ RR = 0
35
+ maxit=m.num_nonl_it
36
+ maxcop=m.error_perm -- err_perm in %
37
+ permode='restore'
38
+ repeat
39
+ calc_field_single({
40
+ maxit=maxit, maxcop=maxcop, -- err_perm in %
41
+ permode=permode})
42
+ if(maxit > 1) then
43
+ maxit = 1
44
+ permode='actual'
45
+ maxcop = 0.05
46
+ end
47
+ stat, RR, dRR = calc_demag(5, Hk)
48
+ --printf("%g %g", RR, dRR)
49
+ until math.abs(dRR) < 1e-5
50
+
51
+ psi = {}
52
+ for k=1,3 do
53
+ psir, psii = flux_winding_wk(k)
54
+ psi[k] = {ksym*psir/a*m.arm_length, ksym*psii/a*m.arm_length}
55
+ end
56
+
57
+ fr, ft, tq, fx, fy = force_torque()
58
+
59
+ return psi, tq, RR
60
+ end
61
+ %if model.get('fc_radius', 0):
62
+ if m.fc_radius == nil then
63
+ m.fc_radius = ${model['fc_radius']*1e3}
64
+ end
65
+ %endif
66
+ %if type(model.get('curvec')[0]) is list:
67
+ curvec = {${','.join(['{'+','.join([str(x) for x in y])+'}' for y in model['curvec']])}} -- A
68
+ %else:
69
+ curvec = {{${','.join([str(x) for x in model['curvec']])}}} -- A
70
+ %endif
71
+ a=${model.get('num_par_wdgs', 1)} -- parallel branches
72
+
73
+ ksym = m.num_poles/m.npols_gen
74
+
75
+ if num_agnodes ~= nil then
76
+ dphi = 360/num_agnodes -- ndst[2] -- deg
77
+ else
78
+ post_models("nodedistance", "ndst" )
79
+ dphi = ndst[2] -- deg
80
+ end
81
+ nodes = math.floor(360/m.num_poles/dphi+0.5)
82
+ printf("Nodes in airgap total %g, Nodes per pole: %d", 360/dphi, nodes)
83
+ -- find a valid number of steps for a rotation:
84
+ nrot = nodes
85
+ while( nrot%2) == 0 do
86
+ nrot = nrot//2
87
+ end
88
+ -- HcB = Brem*tempcoefbr*(magn_temp-20)+1)/muerel/12.565e-7
89
+ -- Hcmin = HcJ*tempcoefhc*(magn_temp-20.0)+1)/HcB*1e2 -- limit of demagnetization in
90
+ Hk = ${model.get('Hk', -999)}
91
+ Q1 = get_dev_data("num_slots")
92
+ p = m.num_poles//2
93
+ dphi = 360//gcd(Q1, p)/nrot
94
+ print(string.format(" rotation steps: %d current steps: %d\n", nrot, #curvec))
95
+
96
+ phi = 0
97
+ -- initialize rotate
98
+ rotate({
99
+ airgap = m.fc_radius, -- air gap radius
100
+ region = "inside", -- region to rotate
101
+ mode = "save" -- save initial model state
102
+ })
103
+
104
+ for i=1, #curvec do
105
+ print(string.format(" current: %d/%d %g, %g, %g\n",
106
+ i, #curvec, curvec[i][1], curvec[i][2], curvec[i][3]))
107
+
108
+ file_psi = io.open("psi-torq-rem-rot-"..i..".dat","w")
109
+ for n=1,nrot+1 do
110
+ psi, tq, rr = calc_flux_torq_rem(phi, curvec[i])
111
+ file_psi:write(string.format("%g ", phi))
112
+ for k=1, 3 do
113
+ file_psi:write(string.format("%g ", curvec[i][k]))
114
+ end
115
+ for k=1, 3 do
116
+ file_psi:write(string.format("%g ", psi[k][1]))
117
+ end
118
+ file_psi:write(string.format("%g ", tq))
119
+ file_psi:write(string.format("%g ", rr))
120
+ file_psi:write("\n")
121
+
122
+ phi = n*dphi
123
+ rotate({angle=phi, mode="absolute"})
124
+ end
125
+ file_psi:close()
126
+ rotate({mode = "reset"}) -- restore the initial state (discard any changes)
127
+ end
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: femagtools
3
- Version: 1.8.6
3
+ Version: 1.8.7
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=2SMaY7V-Yp8JBGAb9m9bsHhX8WWkzbzADhc7yCeh0Lw,1600
1
+ femagtools/__init__.py,sha256=ACK3cP4kilKCsL9TszbvzK0Gd3rNR9mdxXLlRxxVOI8,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
5
5
  femagtools/asm.py,sha256=CiL0KWaF4P7O6-VwmGLdva_icwmPrPiI-TFQ19XYTKk,7660
6
- femagtools/bch.py,sha256=PSQmGp2zuAqMYnE9r-zZdehxVcS8BKtAunpBEZTn9uA,74131
6
+ femagtools/bch.py,sha256=wLuYbxNPpZ8b-74O_m-85qmbW2pg0ozEXfd2DD7-gvY,74388
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,21 +15,21 @@ femagtools/dakotaout.py,sha256=6nn0PXsB40mPKiQLenqAtHy0KXCO7kvqqQ-aD2JhQvw,5573
15
15
  femagtools/docker.py,sha256=XDVmLBB0z4sZZpcrx7Wbm84xl4ksj7aqn5-ZOPxdxm4,7460
16
16
  femagtools/ecloss.py,sha256=kTsE9Lx6nt6Ez9PBfD58hPMcnH2PxSc95zJaYMCQd5Q,33957
17
17
  femagtools/erg.py,sha256=IXKq76P9qLt_ssNOP78v8Qizk3J2Zg80yaKDSjzwoJE,1224
18
- femagtools/femag.py,sha256=MDCw2k6MHF69N99turE_5T5qaciKqnREocev6x_6_fU,47479
18
+ femagtools/femag.py,sha256=y9H7_B4k1lDjQygoNe_amOzsZvLhobIYSFBrhU6BE6s,44799
19
19
  femagtools/forcedens.py,sha256=7NNv75Vg9vQ_fy8W4kM2rlSO970zaSmeurhPmdAxsOU,8485
20
- femagtools/fsl.py,sha256=Bq6bVykmU0Ih5YTbxhRAlCMn2fx1UE2G2UxGI83EKGQ,37072
20
+ femagtools/fsl.py,sha256=8aFo7a0cf2vOLiYTqKabwZl_1xs2JqJaAHKGckHCL6U,37204
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
24
24
  femagtools/grid.py,sha256=s7LfKKLm2H4-cza2kSEANq6vwxq10Su3TJl3kHShHRA,1561
25
25
  femagtools/heat_source_network.py,sha256=dz3nTK084SR2fyy1167wlpBlGrzv54OqCCGKPNWqpsU,16836
26
26
  femagtools/hxy.py,sha256=PkiZ_-CRhtvtpkmLAP8iMtwvzh7CjKGGcAbOhFb4Nls,6275
27
- femagtools/isa7.py,sha256=K0ieLtl3o1vE7900BDbOQbwfGELcy2Kh5J-2lAGdCtY,60231
27
+ femagtools/isa7.py,sha256=bP1yl2iwy_5W0QVv2eSXn74EfFOAvtUSpyJGiI3QwTg,61831
28
28
  femagtools/jhb.py,sha256=stJxkmzHpfUIBVcFw7jWbV5KN9_EFqzOCgacyhUqWvM,1779
29
29
  femagtools/job.py,sha256=sIRVXsyoupfRXqGsWyOHMetcKlWIyggxfVURjM8aD54,11322
30
- femagtools/losscoeffs.py,sha256=Nil2fvkkS6-T29OnHIsdVbegCHyl23iZg8rMVbbA5wY,6785
30
+ femagtools/losscoeffs.py,sha256=7B29VdEsmv8HSP749X3QBb_E-XN6Z9dvNleKiRLWaMI,7721
31
31
  femagtools/magnet.py,sha256=Nuk060bT4Wa3lX74HdefqTTtUxLaERDSBYTTpbi6KP4,1093
32
- femagtools/mcv.py,sha256=1yXaQIQEC63WmInnt0HggeFKRk2PmrPC90_uGd5-dOw,41696
32
+ femagtools/mcv.py,sha256=IDT0rw67mfennlHnuqJKDUS7vKezXMr_tZsSHDypUoE,48343
33
33
  femagtools/me.py,sha256=z6RJkvSbgMmorCQTxKvq44uIYKh82uYYExjkNePJCmE,1813
34
34
  femagtools/model.py,sha256=dk9x-iqRzgOTdTCeU_ynUZGb1bt4FvU1ZGMPXytMbUg,17965
35
35
  femagtools/moproblem.py,sha256=kOP8pRdD8YXz28_M2WKnFgl3eeJ7tqg49ohoazsmUOg,2825
@@ -39,9 +39,10 @@ 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=lLz2SIxUJRc1YV54vW-Zl1h_MvP9mHMtl1RJa_ich3c,19734
42
+ femagtools/parstudy.py,sha256=WY1LxvN44LBqhmZb2dnNO5lVRW3oNyRiKmyi6QxdmqU,19792
43
43
  femagtools/poc.py,sha256=yPWmpi8Q2g7NmpAi2YV5ezyo0VUj67EK0tcX2wikerw,7207
44
44
  femagtools/semi_fea.py,sha256=WZtYKrzhDruETyuEW2kpiNp9OaA7Hheq3qJiAIYtsjg,3475
45
+ femagtools/shortcircuit.py,sha256=9LjnX4z3Kt_DI7DO_h-ivZqxvPt8eAnkJ8_RIFB_q-s,13936
45
46
  femagtools/tks.py,sha256=C3lDdS91Yikf3cMnW-OEqmie-q6S24T81cCFrzwOyeI,7532
46
47
  femagtools/ts.py,sha256=x9aCMVASjdBZuyI2pJGMyi1dveGFd_pWQ20cZ-l_moc,47216
47
48
  femagtools/utils.py,sha256=dJkQ5xsoVMzSEB5-2hEiwe2of9mLmsDo8nkrnSN-gPE,1643
@@ -69,7 +70,7 @@ femagtools/dxfsl/shape.py,sha256=uQqbgXIA2_KP2XRdhCfVfGWjcjwzhJ5t9RhiqR9R98c,616
69
70
  femagtools/dxfsl/svgparser.py,sha256=RY2TU9MK6gOaNmI6w6RNqcw7H9YGmK-NUwvdylKBcsE,3763
70
71
  femagtools/dxfsl/symmetry.py,sha256=dXfZVIqT49nbMirY5YVaRPi8kNB8reaiq-eIbhw1Z54,43936
71
72
  femagtools/machine/__init__.py,sha256=B7yeRZzf29NWCWy8C8iJFdTr9bszAoMRcVEpblhCeg4,7256
72
- femagtools/machine/afpm.py,sha256=rUByVyzNhT0BEUgTCj-HuU4Wbi4PWVAOeOZfa23Cejk,37980
73
+ femagtools/machine/afpm.py,sha256=PTBCvHHW8Z4dhyjhHSEkgfdVU9gzEsHLw2mY3X5LQp8,38272
73
74
  femagtools/machine/effloss.py,sha256=gOgVdAr703Vh9T2Ht14of_I-95QOkH5qXmm11bfHK7s,14414
74
75
  femagtools/machine/im.py,sha256=isMSoCnIk4Hj47MwBNP5PW7a2rI-7N35A9zHGOSl43s,38111
75
76
  femagtools/machine/pm.py,sha256=C4vDdPIsIRUKtzY3b1RNT1v37p1uP3pMUduftNejcPc,68129
@@ -84,14 +85,14 @@ femagtools/moo/test/AlgorithmTest.py,sha256=KzR1og4bu6NOE61DDKjEMTQdsysmho4LCYmJ
84
85
  femagtools/moo/test/PopulationTest.py,sha256=lG9NeWo0xrslfQRa4tgy1Nj23VJMFIlg_vQ9KUBYnRA,5529
85
86
  femagtools/moo/test/ProblemTest.py,sha256=r5XEfY4LPscDb35TxxPd0lbP3nUmL6_G6vrRo1I3RSg,505
86
87
  femagtools/plot/__init__.py,sha256=LFrHy_9L6FxJqhYND2z1534s3ebPXkfXVagFeNA1wWk,978
87
- femagtools/plot/bch.py,sha256=Sdy6S_XT6bGnl21V-1XscqTkFUCIy-fCX8PivShI9GY,30754
88
+ femagtools/plot/bch.py,sha256=C054GIbgghiyyuwiDQw-ikmUlBZVWAYT3zSJ_T7rW_I,33397
88
89
  femagtools/plot/char.py,sha256=xv4cNOTorK-fy7eUFhmyR-013TFI2A2999xXKgL2AnA,12469
89
90
  femagtools/plot/fieldlines.py,sha256=_7ykKhnQLeS4fz34pnzovH1gIhcUSKJ3gl1GUgWYix8,1137
90
91
  femagtools/plot/fluxdens.py,sha256=NlexRJ3f_8CgKoWrV82ZIsAXPrLhwj98uOe8_fUks7A,1082
91
92
  femagtools/plot/forcedens.py,sha256=Vloi9czy7qbGXI-Vm7Cow6IfHTsFhCLI1YWduFOR55c,4075
92
93
  femagtools/plot/machine.py,sha256=fVLOZTc19Ru8eXLdtoTeIYsHRWhGLkn_YVZ6qO6KgrE,2654
93
94
  femagtools/plot/mcv.py,sha256=ijZg6KPwZC7sDxEzGEUfVWvDoSEfgcaH-hzQMt7E90I,3671
94
- femagtools/plot/nc.py,sha256=kfTifzAMReQZu4UmbHZo1caAK0n7N51lkPj7BU7l1lU,10876
95
+ femagtools/plot/nc.py,sha256=E7_7WNG3MNrV4QPJJqng1nfuXf3ZbjAGeonthqQlMss,11349
95
96
  femagtools/plot/phasor.py,sha256=5QG1GkXKVksc8P6Q4thKADf6W1l8rDKeArIHFYvbXlw,4858
96
97
  femagtools/plot/wdg.py,sha256=Orw2XGThHpOuJ_raSRnQTzj5tOmwllNWweByoOXbA7I,9820
97
98
  femagtools/svgfsl/converter.py,sha256=5q4LognshXNTpUWLnU5rtgCfAwZnEuPzqsgyeRYC-VM,3019
@@ -148,6 +149,7 @@ femagtools/templates/pm_sym_fast.mako,sha256=wD_bwszJ5svPOL1AtWThbkuMyxi-wRAPpP3
148
149
  femagtools/templates/pm_sym_loss.mako,sha256=FNAvi_gmTXsGylrpi7lLKPoOOcNCV1mG6rc8gnXQ8u0,1098
149
150
  femagtools/templates/prepare_thermal.mako,sha256=V3W6BGW7gjY8Lg2qzvGDi8rxx3JvPzrWoABDvHKyq54,9539
150
151
  femagtools/templates/psd_psq_fast.mako,sha256=IOZx04JhVleAAbBOPWk9gEwDyT28z0zkF9tyEBteRPU,1428
152
+ femagtools/templates/psi-torq-rem-rot.mako,sha256=A1KOsYNSJhIJfumF-egnU-HUfNMPeX-XSPL_WsoE1Cw,3579
151
153
  femagtools/templates/ring.mako,sha256=Cuc_FuCPWZM-g3TxHqzTdjknYEJSUgP-y64gp8pekDI,643
152
154
  femagtools/templates/rot_hsm.mako,sha256=eh50TbpWNUALK9_7wOOJ7KPewHos7JExAfMACbPlXYc,973
153
155
  femagtools/templates/rotorAsyn.mako,sha256=r_gce0oic24nPdI7BmERM1sokXpC5vvm8Sm0TIPb2zI,2280
@@ -195,7 +197,7 @@ tests/test_mcv.py,sha256=Vv51WU3WU0AkgcSpyujMdJ2KvSdLNsks5HGtY0pWMOY,4749
195
197
  tests/test_mcvreader.py,sha256=3cgq22b_iaWLrs4WWOUNHqJREnv0YoFivNpAb4teEJs,2118
196
198
  tests/test_me.py,sha256=En00OrOhZclBO4u74q5Os0FgVP4TGFLzz99LF0QHXHA,196
197
199
  tests/test_model.py,sha256=kYjjFgZPIex3foX3skiOdD5MCcmA2JP7oDDuE9txv_U,2698
198
- tests/test_nc.py,sha256=kIFUOlFy_jQUjLnS9wuy6c2YkPOrKyXlMtGxDIJnXsw,4205
200
+ tests/test_nc.py,sha256=QUf01YigPYtwkRsmt7_8ap9tQUJgIeDmWo53llVucTM,4668
199
201
  tests/test_parident.py,sha256=zwj-f-Q_s5dBr_fEvzd5iZqNVIcLwkoi_FF2_FNTiaw,1393
200
202
  tests/test_parstudy.py,sha256=wk7WfYQrx5dtv6MnmWCfNAEInvRKsbVXYEUIIR9zLbQ,3200
201
203
  tests/test_pocfile.py,sha256=eiMLBRQxDnHIGiqku6EXcQ3fb7wGIxhXmb20iyLlPRU,5816
@@ -216,9 +218,9 @@ tests/moo/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
216
218
  tests/moo/test_algorithm.py,sha256=Em8sFm2vzPmuIzRrBBnUQLU_TYuJHSf-kEeozw0XeX4,2563
217
219
  tests/moo/test_population.py,sha256=FvX9LRCxQx0_E2GxHQ5vKwOYFBQiNbT6Lmv5GmNWjTQ,5471
218
220
  tests/moo/test_problem.py,sha256=ALeP4u7g-dFhfwWL8vxivdrrYzVKPjHMCAXzzgyNZbs,467
219
- femagtools-1.8.6.dist-info/LICENSE,sha256=NaQe4uvkszQPJmiRPHecfk-Ab9VSRXo8xQLGNVHTeFo,1362
220
- femagtools-1.8.6.dist-info/METADATA,sha256=tI4Q7eHYpIQea6ThRR-t4cUGHGolUaBOwmzxfHktp_E,6190
221
- femagtools-1.8.6.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
222
- femagtools-1.8.6.dist-info/entry_points.txt,sha256=jrvOkZPiN44u1sASeu271VRaVIv5V-uRpN0_N5U_R8c,248
223
- femagtools-1.8.6.dist-info/top_level.txt,sha256=Ri4YWtU8MZTzNje9IKyXhTakNbsrCynuWdon4Yq94Dc,17
224
- femagtools-1.8.6.dist-info/RECORD,,
221
+ femagtools-1.8.7.dist-info/LICENSE,sha256=NaQe4uvkszQPJmiRPHecfk-Ab9VSRXo8xQLGNVHTeFo,1362
222
+ femagtools-1.8.7.dist-info/METADATA,sha256=FjouSutX0CXyaLR8K4xThZIFopGoxvhm6151vMBW95A,6190
223
+ femagtools-1.8.7.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
224
+ femagtools-1.8.7.dist-info/entry_points.txt,sha256=jrvOkZPiN44u1sASeu271VRaVIv5V-uRpN0_N5U_R8c,248
225
+ femagtools-1.8.7.dist-info/top_level.txt,sha256=Ri4YWtU8MZTzNje9IKyXhTakNbsrCynuWdon4Yq94Dc,17
226
+ femagtools-1.8.7.dist-info/RECORD,,
tests/test_nc.py CHANGED
@@ -92,6 +92,17 @@ def test_areas(pm):
92
92
  assert a[1]['slots'] == 0
93
93
  assert a[1]['magnets'] == pytest.approx(0.000345, abs=1e-5)
94
94
 
95
+ def test_geom(pm):
96
+ mag_spels = pm.magnet_super_elements()
97
+ assert len(mag_spels) == 5
98
+ g = mag_spels[0].get_rect_geom()
99
+ assert g['w'] == pytest.approx(0.0112, abs=1e-4)
100
+ assert g['h'] == pytest.approx(0.00308, abs=1e-5)
101
+ assert g['x0'] == pytest.approx(0.02317, abs=1e-5)
102
+ assert g['y0'] == pytest.approx(0.007528, abs=1e-5)
103
+ assert g['area'] == pytest.approx(3.45e-05, abs=1e-6)
104
+ assert g['alpha'] == pytest.approx(1.885, abs=1e-3)
105
+
95
106
  def test_calc_iron_loss(pm):
96
107
  import numpy as np
97
108
  def pfe(Bxnu, Bynu, fnu, losscoeffs):