femagtools 1.3.1__py3-none-any.whl → 1.3.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/airgap.py +11 -37
- femagtools/amela.py +2 -1
- femagtools/bch.py +19 -3
- femagtools/dxfsl/area.py +56 -15
- femagtools/dxfsl/converter.py +2 -0
- femagtools/dxfsl/geom.py +160 -41
- femagtools/dxfsl/machine.py +80 -3
- femagtools/ecloss.py +5 -3
- femagtools/femag.py +7 -1
- femagtools/isa7.py +35 -22
- femagtools/machine/effloss.py +4 -1
- femagtools/machine/utils.py +12 -8
- femagtools/model.py +11 -1
- femagtools/plot.py +33 -9
- femagtools/templates/afm_rotor.mako +102 -0
- femagtools/templates/afm_stator.mako +141 -0
- femagtools/templates/basic_modpar.mako +23 -2
- femagtools/templates/cogg_calc.mako +28 -5
- femagtools/templates/cu_losses.mako +1 -1
- femagtools/templates/fieldcalc.mako +39 -0
- femagtools/templates/gen_winding.mako +52 -47
- femagtools/templates/mesh-airgap.mako +43 -0
- femagtools/templates/stator3Linear.mako +5 -4
- femagtools/templates/therm-static.mako +12 -0
- femagtools/templates/torq_calc.mako +2 -4
- femagtools/utils.py +45 -0
- femagtools/windings.py +2 -1
- {femagtools-1.3.1.dist-info → femagtools-1.3.2.dist-info}/METADATA +1 -1
- {femagtools-1.3.1.dist-info → femagtools-1.3.2.dist-info}/RECORD +34 -30
- {femagtools-1.3.1.dist-info → femagtools-1.3.2.dist-info}/WHEEL +1 -1
- {femagtools-1.3.1.dist-info → femagtools-1.3.2.dist-info}/LICENSE +0 -0
- {femagtools-1.3.1.dist-info → femagtools-1.3.2.dist-info}/entry_points.txt +0 -0
- {femagtools-1.3.1.dist-info → femagtools-1.3.2.dist-info}/top_level.txt +0 -0
@@ -14,6 +14,7 @@ ag = 0
|
|
14
14
|
% if model.move_action == 0:
|
15
15
|
% if model.external_rotor:
|
16
16
|
dy2 = ${model.get(['outer_diam'])*1e3}
|
17
|
+
% if hasattr(model, 'bore_diam'):
|
17
18
|
% if isinstance(model.get(['bore_diam']), list):
|
18
19
|
<%
|
19
20
|
da2 = '{' + ','.join([str(x*1e3) for x in model.get(['bore_diam'])]) +'}'
|
@@ -27,9 +28,11 @@ end
|
|
27
28
|
da2 = ${model.get(['bore_diam'])*1e3}
|
28
29
|
da1 = da2 - 2*ag
|
29
30
|
% endif
|
31
|
+
% endif # bore_diam dos not exist
|
30
32
|
dy1 = ${model.get(['inner_diam'])*1e3}
|
31
33
|
% else: # internal rotor
|
32
34
|
dy1 = ${model.get(['outer_diam'])*1e3}
|
35
|
+
% if hasattr(model, 'bore_diam'):
|
33
36
|
% if isinstance(model.get(['bore_diam']), list):
|
34
37
|
<%
|
35
38
|
da1 = '{' + ','.join([str(x*1e3) for x in model.get(['bore_diam'])]) +'}'
|
@@ -43,6 +46,7 @@ end
|
|
43
46
|
da1 = ${model.get(['bore_diam'])*1e3}
|
44
47
|
da2 = da1 - 2*ag
|
45
48
|
% endif
|
49
|
+
% endif
|
46
50
|
% if hasattr(model, 'shaft_diam'):
|
47
51
|
dy2 = ${model.get(['shaft_diam'])*1e3}
|
48
52
|
dsh = ${model.get(['inner_diam'])*1e3}
|
@@ -66,7 +70,8 @@ m.num_pol_pair = m.num_poles/2
|
|
66
70
|
m.num_slots = m.num_sl_gen
|
67
71
|
m.npols_gen = m.num_poles * m.num_sl_gen / m.tot_num_slot
|
68
72
|
m.tot_num_sl = m.tot_num_slot
|
69
|
-
% if model.move_action == 0:
|
73
|
+
% if model.move_action == 0: # rotating
|
74
|
+
% if hasattr(model, 'bore_diam'):
|
70
75
|
% if isinstance(model.get(['bore_diam']), list):
|
71
76
|
m.fc_radius = (da1[2]/2-ag[2]/2) -- Radius airgap (extern)
|
72
77
|
m.fc_radius1 = (da1[1]/2-ag[1]/2) -- Radius airgap (intern?)
|
@@ -77,10 +82,26 @@ m.fc_radius1 = m.fc_radius
|
|
77
82
|
m.sl_radius = m.fc_radius -- radius of sliding area
|
78
83
|
% endif
|
79
84
|
% endif
|
85
|
+
% elif hasattr(model, 'pole_width'): # move action linear
|
86
|
+
m.pole_width = ${model['pole_width']*1e3}
|
87
|
+
% endif
|
88
|
+
% if hasattr(model, 'lfe'):
|
80
89
|
m.arm_length = ${model.get(['lfe'])*1e3}
|
90
|
+
% endif
|
81
91
|
pre_models("basic_modpar")
|
82
92
|
% endif
|
83
93
|
% if hasattr(model, 'num_agnodes'):
|
84
|
-
num_agnodes =
|
94
|
+
num_agnodes = m.npols_gen*${model.num_agnodes}
|
95
|
+
% if hasattr(model, 'bore_diam'):
|
85
96
|
agndst = 2*math.pi*m.fc_radius/num_agnodes
|
97
|
+
% else:
|
98
|
+
if m.pole_width ~= nil then
|
99
|
+
agndst = 2*m.pole_width/num_agnodes
|
100
|
+
else
|
101
|
+
agndst = 1 -- last resort
|
102
|
+
end
|
103
|
+
% endif
|
86
104
|
% endif
|
105
|
+
% if hasattr(model, 'afmtype'):
|
106
|
+
m.model_type = "${model['afmtype']}"
|
107
|
+
% endif
|
@@ -1,19 +1,42 @@
|
|
1
1
|
--
|
2
2
|
-- Cogging
|
3
3
|
--
|
4
|
-
m.move_action = 0.0 -- rotate
|
5
4
|
% if model.get('lfe', 0):
|
6
5
|
m.arm_length = ${model.get('lfe')*1e3}
|
7
6
|
% endif
|
8
|
-
|
7
|
+
m.move_action = ${model.get('move_action', 0)}
|
8
|
+
% if model.get('move_action', 0) == 0:
|
9
9
|
m.speed = ${model.get('speed')*60}
|
10
10
|
m.skew_angle = ${model.get('skew_angle', 0)}
|
11
|
+
m.fc_force_points = 0.0 -- number move points in air gap
|
12
|
+
m.phi_start = ${model.get('phi_start', 0)}
|
13
|
+
m.range_phi = ${model.get('range_phi', 0)}
|
14
|
+
% else:
|
15
|
+
m.speed_linear = ${model.get('speed')}
|
16
|
+
m.skew_linear = ${model.get('skew_displ',0)}
|
17
|
+
m.line = 0
|
18
|
+
m.two_pole_wi = 2*m.pole_width
|
19
|
+
m.range_x = m.two_pole_wi
|
20
|
+
m.range_y = 0.0
|
21
|
+
|
22
|
+
m.fc_force_points = 5
|
23
|
+
m.fcpx_mm1 = m.npols_gen*m.pole_width +1.0
|
24
|
+
m.fcpy_mm1 = -ag/2
|
25
|
+
m.fcpx_mm2 = -1.0
|
26
|
+
m.fcpy_mm2 = m.fcpy_mm1
|
27
|
+
m.fcpx_mm3 = m.fcpx_mm2
|
28
|
+
m.fcpy_mm3 = -m.magn_height -m.yoke_height -m.gap_ma_yoke -1 -ag
|
29
|
+
m.fcpx_mm4 = m.fcpx_mm1
|
30
|
+
m.fcpy_mm4 = m.fcpy_mm3
|
31
|
+
m.fcpx_mm5 = m.fcpx_mm1
|
32
|
+
m.fcpy_mm5 = m.fcpy_mm1
|
33
|
+
|
34
|
+
--m.npols_gen = 1 -- number of sectors simulated
|
35
|
+
% endif
|
36
|
+
|
11
37
|
m.nu_skew_steps = ${model.get('num_skew_steps', 0)}
|
12
38
|
m.magn_temp = ${model.get('magn_temp')}
|
13
39
|
m.fc_mult_move_type = 1.0 -- Type of move path in air gap
|
14
|
-
m.fc_force_points = 0.0 -- number move points in air gap
|
15
|
-
m.phi_start = ${model.get('phi_start', 0)}
|
16
|
-
m.range_phi = ${model.get('range_phi', 0)}
|
17
40
|
m.nu_move_steps = ${model.get('num_move_steps', 49)}
|
18
41
|
|
19
42
|
m.num_par_wdgs = ${model.get('num_par_wdgs',1)}
|
@@ -0,0 +1,39 @@
|
|
1
|
+
|
2
|
+
-- no load single calculation
|
3
|
+
|
4
|
+
maxit=300
|
5
|
+
du_u0=1e-3
|
6
|
+
|
7
|
+
get_wdg_keys("wkeys")
|
8
|
+
|
9
|
+
-- check the machine type PSM/ESM
|
10
|
+
magn = get_dev_data("magn_remanence")
|
11
|
+
|
12
|
+
if magn > 0 then -- IPM
|
13
|
+
-- set cur to zero
|
14
|
+
for i = 1, #wkeys do
|
15
|
+
def_curr_wdg(wkeys[i],0, 0)
|
16
|
+
end
|
17
|
+
else -- ESM
|
18
|
+
for i = 1, #wkeys - 1 do
|
19
|
+
def_curr_wdg(wkeys[i],0, 0)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
calc_field_single(maxit, reset, du_u0)
|
24
|
+
|
25
|
+
post_models("induct(x)","b") -- Calculate field distribution
|
26
|
+
|
27
|
+
data=io.open("bag.dat","w") -- Output in data file
|
28
|
+
N = table.getn(b) -- Number of elements in array
|
29
|
+
i = 1
|
30
|
+
repeat
|
31
|
+
data:write(string.format("%g %g %g\n",b[i],b[i+1],b[i+2]))
|
32
|
+
i = i+3
|
33
|
+
until i>=N
|
34
|
+
io.close(data)
|
35
|
+
|
36
|
+
color_gradation(0,0,"tot","Babs",0,0,"")
|
37
|
+
-- experimental (new femag-classic needed)
|
38
|
+
-- without grf_clear, overlay fieldlines with color gradation
|
39
|
+
add_field_lines("field.svg", 25)
|
@@ -47,35 +47,36 @@ add_to_wdg(m.xcoil_2, m.ycoil_2, "wsamekey", "wo", "wser")
|
|
47
47
|
pre_models("Gen_winding")
|
48
48
|
pre_models("gen_pocfile")
|
49
49
|
% endif
|
50
|
-
% else:
|
50
|
+
% else: # move_action > 0
|
51
51
|
color={"green", "yellow", "magenta", "lightgrey", "darkred", "skyblue", "violet"}
|
52
52
|
wkey={0,0,0,0,0,0}
|
53
|
-
|
53
|
+
|
54
54
|
bz = m.width_bz
|
55
|
-
|
55
|
+
sw = m.slot_width
|
56
56
|
ys = m.slot_height/2
|
57
|
-
|
58
|
-
|
59
|
-
for
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
57
|
+
wdgscheme = ${model.windings.get('wdgscheme', '{}')}
|
58
|
+
-- TODO: m.middle_line = 1 only
|
59
|
+
for l=1, #wdgscheme do
|
60
|
+
for z=1, #wdgscheme[l] do
|
61
|
+
for i=1, #wdgscheme[l][z] do
|
62
|
+
k = wdgscheme[l][z][i]
|
63
|
+
if math.abs(k) < m.num_sl_gen+1 then
|
64
|
+
xs = (2*math.abs(k)-1)*bz/2
|
65
|
+
dir = 1
|
66
|
+
if k < 0 then
|
67
|
+
dir = -1
|
68
|
+
end
|
69
|
+
if wkey[z] == 0 then
|
70
|
+
wdg = "wdg"..z
|
71
|
+
wkey[z]=def_new_wdg(xs + sw/4, ys, color[z], wdg, m.num_wires, 0, dir)
|
72
|
+
else
|
73
|
+
if l == 1 then
|
74
|
+
add_to_wdg(xs + sw/4, ys, wkey[z], dir, "wser")
|
75
|
+
else
|
76
|
+
add_to_wdg(xs - sw/4, ys, wkey[z], dir, "wser")
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|
79
80
|
end
|
80
81
|
end
|
81
82
|
end
|
@@ -104,7 +105,7 @@ f = assert(io.open(model..'_'..m.num_poles.."p.poc","w"));
|
|
104
105
|
elseif period<1000 then f:write(string.format(" %10.6f\n",period));
|
105
106
|
end
|
106
107
|
f:write("sin\n");
|
107
|
-
f:write(" 0.
|
108
|
+
f:write(" 0.0\n");
|
108
109
|
f:write(" 0\n");
|
109
110
|
io.close(f);
|
110
111
|
|
@@ -116,27 +117,31 @@ m.num_poles = ${model.poles}
|
|
116
117
|
|
117
118
|
% if 'thcap' in model.windings:
|
118
119
|
-- Thermal Material properties
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
dw =
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
def_mat_therm(
|
120
|
+
if m.slot_height ~= nil then
|
121
|
+
-- FEMAG slot model
|
122
|
+
-- TODO: slot model from user
|
123
|
+
rw = da1/2 +(m.slot_height-m.slot_h1)/2
|
124
|
+
dw = 0
|
125
|
+
dr = 0
|
126
|
+
if m.middle_line == 1 then
|
127
|
+
dw = 1/60
|
128
|
+
elseif m.middle_line == 2 then
|
129
|
+
dr = 1
|
130
|
+
end
|
131
|
+
lamCu = 400
|
132
|
+
capCu = 385
|
133
|
+
da = 1.0785
|
134
|
+
dCu = 1.0
|
135
|
+
lam = lamCu*(dCu/(da-dCu)+(da-dCu)/da)
|
136
|
+
cap = capCu*da^2/(dCu^2*math.pi/4)
|
137
|
+
for i=1,m.num_sl_gen do
|
138
|
+
a = (2*i-1)*math.pi/m.tot_num_sl + m.zeroangl/180*math.pi
|
139
|
+
xwl,ywl = pr2c(rw+dr,a+dw)
|
140
|
+
def_mat_therm(xwl,ywl,'yellow',8920,lam,cap,1)
|
141
|
+
if m.middle_line > 0 then
|
142
|
+
xwr,ywr = pr2c(rw-dr,a-dw)
|
143
|
+
def_mat_therm(xwr,ywr,'yellow',8920,lam,cap,1)
|
144
|
+
end
|
140
145
|
end
|
141
146
|
end
|
142
147
|
%endif
|
@@ -12,6 +12,7 @@ if not airgap_created then
|
|
12
12
|
if alfa == nil then
|
13
13
|
alfa = m.npols_gen*2*math.pi/m.num_poles
|
14
14
|
end
|
15
|
+
% if hasattr(model, 'bore_diam'):
|
15
16
|
r1 = m.fc_radius - ag/6
|
16
17
|
x1, y1 = pr2c(r1, alfa)
|
17
18
|
n = math.floor(m.fc_radius*alfa/agndst + 1.5)
|
@@ -41,4 +42,46 @@ if not airgap_created then
|
|
41
42
|
create_mesh_se(x0, y0)
|
42
43
|
x0, y0 = pr2c(r2+ag/6, alfa/2)
|
43
44
|
create_mesh_se(x0, y0)
|
45
|
+
% else:
|
46
|
+
-- airgap nodechains for axial flux
|
47
|
+
x1, y1 = 0, -ag/2 -- airgap center
|
48
|
+
x2, y2 = m.num_slots*(m.tooth_width+m.slot_width), y1
|
49
|
+
nc_line(x1, -ag/3, x2, -ag/3, num_agnodes+1)
|
50
|
+
nc_line(x1, -ag/3, x1, 0, 1)
|
51
|
+
nc_line(x2, -ag/3, x2, 0, 1)
|
52
|
+
create_mesh_se((x1+x2)/2, -ag/6)
|
53
|
+
|
54
|
+
nc_line(x1, -2*ag/3, x2, -2*ag/3, num_agnodes+1)
|
55
|
+
nc_line(x1, -2*ag/3, x1, -ag, 1)
|
56
|
+
nc_line(x2, -2*ag/3, x2, -ag, 1)
|
57
|
+
create_mesh_se((x1+x2)/2, -5*ag/6)
|
58
|
+
|
59
|
+
nc_line(x1, -ag/3, x1, -2*ag/3, 1)
|
60
|
+
nc_line(x2, -ag/3, x2, -2*ag/3, 1)
|
61
|
+
create_mesh_se((x1+x2)/2, -ag/2)
|
62
|
+
|
63
|
+
-- set boundary conditions
|
64
|
+
del_bcond()
|
65
|
+
if m.st_yoke_height > 0 then
|
66
|
+
sh = m.slot_height
|
67
|
+
else
|
68
|
+
sh = m.slot_height/2
|
69
|
+
end
|
70
|
+
x1,y1 = 0, sh+m.st_yoke_height
|
71
|
+
x2,y2 = x1, -ag - m.magn_height -m.yoke_height
|
72
|
+
x3,y3 = m.npols_gen*m.pole_width, y2
|
73
|
+
x4,y4 = x3, y1
|
74
|
+
if m.npols_gen%2 == 1 then
|
75
|
+
def_bcond_only(x1,y1, x2,y2, x3,y3, x4,y4, 3)
|
76
|
+
else
|
77
|
+
def_bcond_only(x1,y1, x2,y2, x3,y3, x4,y4, 4)
|
78
|
+
end
|
79
|
+
if (m.model_type ~= "S1R2") then
|
80
|
+
def_bcond_vpo(x4,y4, x1,y1)
|
81
|
+
end
|
82
|
+
if (m.model_type ~= "S2R1") then
|
83
|
+
def_bcond_vpo(x2,y2, x3,y3)
|
84
|
+
end
|
85
|
+
|
86
|
+
% endif
|
44
87
|
end
|
@@ -1,6 +1,6 @@
|
|
1
1
|
|
2
2
|
|
3
|
-
m.cood_system = ${model.get('coord_system', 1)} -- 1: x/y or 2: r/z
|
3
|
+
m.cood_system = ${model.get('coord_system', 1)} -- 1: x/y or 2: r/z
|
4
4
|
|
5
5
|
m.l_corner_x0 = 0.0
|
6
6
|
m.l_corner_y0 = 0.0
|
@@ -13,10 +13,11 @@ m.slot_r1 = ${model['slot_r1']*1e3}
|
|
13
13
|
m.slot_r2 = ${model['slot_r2']*1e3}
|
14
14
|
m.width_bz = ${model['width_bz']*1e3}
|
15
15
|
m.tooth_width = ${model['tooth_width']*1e3}
|
16
|
+
m.slot_width = m.width_bz - m.tooth_width
|
16
17
|
|
17
18
|
m.middle_line = ${model['middle_line']}
|
18
|
-
m.zeroangl = 0.000 -- Reference angle to x-axis [grad]
|
19
|
-
|
19
|
+
m.zeroangl = 0.000 -- Reference angle to x-axis [grad]
|
20
|
+
|
20
21
|
m.mcvkey_yoke = mcvkey_yoke
|
21
|
-
|
22
|
+
|
22
23
|
pre_models("STATOR3_Linear");
|
@@ -23,6 +23,18 @@ def_heat_transfer(x,y,yellow,heat_transfer_coefficient, area_factor)
|
|
23
23
|
---------------------------------------------
|
24
24
|
-- import losses
|
25
25
|
import_losses_from_femag_dc()
|
26
|
+
-- overwrite magnet losses (IALH)
|
27
|
+
%if not isinstance(model.get('magnet_loss_th', 0), list):
|
28
|
+
printf('magnet losses from B2 Method')
|
29
|
+
%else:
|
30
|
+
printf('magnet losses from IAlH Method')
|
31
|
+
%for i in model['magnet_loss_th']:
|
32
|
+
elkeys = get_spel_data("elkeys", ${i[0]})
|
33
|
+
x, y = get_elem_data("xycp", elkeys[1])
|
34
|
+
def_losses ( x,y,'red', ${i[1]})
|
35
|
+
%endfor
|
36
|
+
%endif
|
37
|
+
|
26
38
|
color_gradation_th(0,0,tot,Losses,0,0,model.."_losses.svg")
|
27
39
|
|
28
40
|
---------------------------------------------
|
@@ -25,18 +25,16 @@ m.range_y = 0.0
|
|
25
25
|
|
26
26
|
m.fc_force_points = 5
|
27
27
|
m.fcpx_mm1 = m.npols_gen*m.pole_width +1.0
|
28
|
-
m.fcpy_mm1 = -
|
28
|
+
m.fcpy_mm1 = -ag/2
|
29
29
|
m.fcpx_mm2 = -1.0
|
30
30
|
m.fcpy_mm2 = m.fcpy_mm1
|
31
31
|
m.fcpx_mm3 = m.fcpx_mm2
|
32
|
-
m.fcpy_mm3 = -m.magn_height -m.yoke_height -m.gap_ma_yoke -
|
32
|
+
m.fcpy_mm3 = -m.magn_height -m.yoke_height -m.gap_ma_yoke -ag -1
|
33
33
|
m.fcpx_mm4 = m.fcpx_mm1
|
34
34
|
m.fcpy_mm4 = m.fcpy_mm3
|
35
35
|
m.fcpx_mm5 = m.fcpx_mm1
|
36
36
|
m.fcpy_mm5 = m.fcpy_mm1
|
37
37
|
|
38
|
-
m.npols_gen = 1 -- number of sectors simulated
|
39
|
-
|
40
38
|
% endif
|
41
39
|
m.nu_force_pat = 0.0
|
42
40
|
m.nu_skew_steps = ${model.get('num_skew_steps',0)}
|
femagtools/utils.py
ADDED
@@ -0,0 +1,45 @@
|
|
1
|
+
import numpy as np
|
2
|
+
|
3
|
+
def fft(pos, y, pmod=0):
|
4
|
+
"""calculate fft spectrum of y and return samples,
|
5
|
+
values, amplitude and phase of base harmonic
|
6
|
+
|
7
|
+
Arguments:
|
8
|
+
pos: (list of floats) sample positions
|
9
|
+
y: (list of floats) y values
|
10
|
+
pmod: number of poles in model (ignored if 0)
|
11
|
+
"""
|
12
|
+
model_angle = pos[-1] - pos[0]
|
13
|
+
ntiles = int(round(360/model_angle))
|
14
|
+
|
15
|
+
if pmod:
|
16
|
+
negative_periodic = pmod % 2
|
17
|
+
else:
|
18
|
+
negative_periodic = np.abs(y[0] - y[-1])/np.max(y) > 1
|
19
|
+
|
20
|
+
if negative_periodic:
|
21
|
+
yx = np.append(
|
22
|
+
np.concatenate(
|
23
|
+
[n*y[:-1]
|
24
|
+
for n in [m % 2 or -1
|
25
|
+
for m in range(1, ntiles+1)]]),
|
26
|
+
y[0])
|
27
|
+
else:
|
28
|
+
yx = np.append(
|
29
|
+
np.tile(y[:-1], ntiles),
|
30
|
+
y[0])
|
31
|
+
|
32
|
+
N = len(yx)
|
33
|
+
# compute DFT from induction
|
34
|
+
Y = np.fft.fft(yx)
|
35
|
+
|
36
|
+
# find the peak (amplitude of base harmonic)
|
37
|
+
i = np.argmax(np.abs(Y[:N//2]))
|
38
|
+
a = 2*np.abs(Y[i])/N
|
39
|
+
freq = np.fft.fftfreq(N, d=pos[1]-pos[0])
|
40
|
+
T0 = np.abs(1/freq[i])
|
41
|
+
npoles = 2*int(np.ceil(360/T0))
|
42
|
+
|
43
|
+
return {'a': a, 'freq': freq, 'T0': T0, 'alfa0': np.angle(Y[i]),
|
44
|
+
'nue': (2*np.abs(Y[:9*npoles])/N).tolist(),
|
45
|
+
'yi': yx.tolist()}
|
femagtools/windings.py
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: femagtools
|
3
|
-
Version: 1.3.
|
3
|
+
Version: 1.3.2
|
4
4
|
Summary: Python API for FEMAG
|
5
5
|
Author-email: Ronald Tanner <tar@semafor.ch>, Dapu Zhang <d.zhan@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=
|
2
|
-
femagtools/airgap.py,sha256=
|
1
|
+
femagtools/__init__.py,sha256=z_fNAxGXyLOmiYKuS-2RP37KC2IJUR3n6UnUcpMt3q4,1630
|
2
|
+
femagtools/airgap.py,sha256=ohp5GMuJGcrPhkpJHjlcsPZLlMJn2KDfk8gdNX7zyE8,1550
|
3
3
|
femagtools/amazon.py,sha256=r9RRZVjKe6A7HUoRHmVpP-y1zfgJNvcPgW7mmeukvpk,12122
|
4
|
-
femagtools/amela.py,sha256=
|
4
|
+
femagtools/amela.py,sha256=jLGbTJU-ldK-dF9WbSDfuJYPtlmombqxZQ_K6t-IG28,14056
|
5
5
|
femagtools/asm.py,sha256=5nSrgY3s9iWgnQYBjz6AVbk6IutLzBgcsuGZZo4KbkU,7706
|
6
|
-
femagtools/bch.py,sha256=
|
6
|
+
femagtools/bch.py,sha256=rxMi68HUa_D-s626FheXiXimzYthohPqQ7lPjnHPUuM,69488
|
7
7
|
femagtools/bchxml.py,sha256=O6DlNS5xL8CPNLH9DV86bDAkl4pnvhpvbByUYMB6bhI,2923
|
8
8
|
femagtools/condor.py,sha256=J8z9iBdvrGu3I1eFNoyKV8AXzRoTEPGLSak6cXUQxAM,10766
|
9
9
|
femagtools/conductor.py,sha256=rXO7c7Qh_s7JpgILmLd4IbG64vP6Eh143YF9u25Mdwg,1076
|
@@ -13,9 +13,9 @@ femagtools/dakota.py,sha256=OBPxicuZiw1X-7WJ05MvEQXocH-GPgRiOoRjY_jOVW4,7017
|
|
13
13
|
femagtools/dakota_femag.py,sha256=FGGXg1uYkTDNdElqsyMwtHJQKFzGV9f_3FaA55JEfuk,4064
|
14
14
|
femagtools/dakotaout.py,sha256=6nn0PXsB40mPKiQLenqAtHy0KXCO7kvqqQ-aD2JhQvw,5573
|
15
15
|
femagtools/docker.py,sha256=XDVmLBB0z4sZZpcrx7Wbm84xl4ksj7aqn5-ZOPxdxm4,7460
|
16
|
-
femagtools/ecloss.py,sha256=
|
16
|
+
femagtools/ecloss.py,sha256=4tO-P6OwBbto2Xk0IJ0T5le7rT2BDWPQAAZwaKhNgcA,13239
|
17
17
|
femagtools/erg.py,sha256=IXKq76P9qLt_ssNOP78v8Qizk3J2Zg80yaKDSjzwoJE,1224
|
18
|
-
femagtools/femag.py,sha256=
|
18
|
+
femagtools/femag.py,sha256=Vt3JANsphKTKJOBdacYVsMLr5IbabTr_Dxws7tHe0y4,42422
|
19
19
|
femagtools/forcedens.py,sha256=nEM1MHxtpLee2sGFsehzrWEdsCRe_RSRqyNfj6u_l8g,7415
|
20
20
|
femagtools/fsl.py,sha256=ZYT83mAZasoUZWSYGeWdDJz0zyIftenNclDNsY0tQ-c,30989
|
21
21
|
femagtools/getset.py,sha256=yJ6Em35DeWK7WNZW0qjjS5s7LUkVh5mbgxF59HHm5FM,3017
|
@@ -23,7 +23,7 @@ femagtools/gmsh.py,sha256=IKhNiviIBji4cMxAhxaYXNqBRMNAPSKsBGdnGyxkyQw,3903
|
|
23
23
|
femagtools/google.py,sha256=rU2GxRxgwdrNkGmXY_E-IWOF69OSu3LmpKFnuegk_0Y,17166
|
24
24
|
femagtools/grid.py,sha256=s7LfKKLm2H4-cza2kSEANq6vwxq10Su3TJl3kHShHRA,1561
|
25
25
|
femagtools/hxy.py,sha256=TU0GoHtStq3VBoc4nGLmtKquY8-tT0UWxLf5FzMBLjE,3738
|
26
|
-
femagtools/isa7.py,sha256=
|
26
|
+
femagtools/isa7.py,sha256=9uV20bmT4qZs4vZybzVfyJH-lN3wmN9KqogsE5juKms,42052
|
27
27
|
femagtools/jcf2msh.py,sha256=pqVF3w_fr7WjqXldQrJTEDqdsQzO_m13XSC65JRulBw,2790
|
28
28
|
femagtools/jhb.py,sha256=stJxkmzHpfUIBVcFw7jWbV5KN9_EFqzOCgacyhUqWvM,1779
|
29
29
|
femagtools/job.py,sha256=dOatzr10nIda76CjVRSS0SfEWC8_BAw0kowli523qbY,11320
|
@@ -31,7 +31,7 @@ femagtools/losscoeffs.py,sha256=IKq_Lbeeh05sPYdTFZUEg5GhHTYhioqzLwxBYUcj78Q,2261
|
|
31
31
|
femagtools/magnet.py,sha256=Nuk060bT4Wa3lX74HdefqTTtUxLaERDSBYTTpbi6KP4,1093
|
32
32
|
femagtools/mcv.py,sha256=GcM7lf7dHvHsX9QMMMYCwkB5K5rThcLV73X-7fe-dr0,39696
|
33
33
|
femagtools/me.py,sha256=XNK0l-aroNYfKyxV_uslE8q3vJb_KuntAYTWd-4FQaQ,1833
|
34
|
-
femagtools/model.py,sha256=
|
34
|
+
femagtools/model.py,sha256=6AuHsaNLdsjBg_DC8HUigzyn4t36OU6EHC6GuEAxxQA,14696
|
35
35
|
femagtools/moproblem.py,sha256=kOP8pRdD8YXz28_M2WKnFgl3eeJ7tqg49ohoazsmUOg,2825
|
36
36
|
femagtools/multiproc.py,sha256=NmfUOcGrgAdHpHUanTakiYA48mPaV5oCbYgxvYj49LE,8506
|
37
37
|
femagtools/mxw2msh.py,sha256=6FytyRtxMAO5vWRgZRWCQs04RFq7qiRy6hjOGb8NwpM,1841
|
@@ -40,51 +40,55 @@ 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=Oak-C1_5iFZonwokB3ezB52fcZi5yiUEffjG1Tmgag8,8685
|
42
42
|
femagtools/parstudy.py,sha256=YbCpDL9m3MQtClOPzc0xDO8WWRWAd8jLnw4y5rHp3Gk,18717
|
43
|
-
femagtools/plot.py,sha256=
|
43
|
+
femagtools/plot.py,sha256=9y19IJIz6U3LGcdnTwkIy_b5aWsZ1R-NaON_ublq_kk,62239
|
44
44
|
femagtools/poc.py,sha256=MN5DRL4vHycNzXSTt9kjuZP1yZ2I02NmrKQFsmRcbF0,6536
|
45
45
|
femagtools/tks.py,sha256=jgQ5dpKNPZg0ydwNGLBVjsL5WRsjfk9FtkZt3eoX79I,5791
|
46
46
|
femagtools/ts.py,sha256=vm3GzLG6lzkg_Z84U-ZCgYHhev-PPtNuGs1q-CKJ4rA,47280
|
47
|
+
femagtools/utils.py,sha256=LDvKfyKY5UmBLqA8OxzZXJ8uzS7j6nx76FPtrP-ssEk,1265
|
47
48
|
femagtools/vbf.py,sha256=9XGfhftmD9carU8ByQ5DwqoR4daq5mJ39eMqruwml0Q,2444
|
48
49
|
femagtools/vtu.py,sha256=DA0uRYW9121Ay9Je0xeJ1DXeCtE6fiCMEiuvkSSGg0U,8595
|
49
|
-
femagtools/windings.py,sha256=
|
50
|
+
femagtools/windings.py,sha256=1O9fLTEu8x_HeibVG0ia72ROLrcAVjNyJ24Y8TAfGWQ,22310
|
50
51
|
femagtools/dxfsl/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
51
|
-
femagtools/dxfsl/area.py,sha256=
|
52
|
+
femagtools/dxfsl/area.py,sha256=TmTJy7T8pCpxdk_DM345mLwJez6nat5OIgVosXYsq6E,54793
|
52
53
|
femagtools/dxfsl/conv.py,sha256=xOCj0vPlyRVP1FVNPLtKx_Fe88emjaht_DD4bfycD6A,8990
|
53
|
-
femagtools/dxfsl/converter.py,sha256=
|
54
|
+
femagtools/dxfsl/converter.py,sha256=kOFaY8XMt2KAvmKNoGtaAZAL246WtOJrM2AL4prbY_0,19237
|
54
55
|
femagtools/dxfsl/corner.py,sha256=UI1MLlVmiTBURywsOnXnXV7eBABoENc6ortkW_3GYH8,1266
|
55
56
|
femagtools/dxfsl/dumprenderer.py,sha256=n4AvInjvGIaC2iKZtQaYXXDyJVSQ3uEOFOLD4-xfKRY,1861
|
56
57
|
femagtools/dxfsl/fslrenderer.py,sha256=jrn5JGltco8cyk83IxxmG0M36Uco-_xaUqPUZMZBeZo,23372
|
57
58
|
femagtools/dxfsl/functions.py,sha256=CVEfdYgIlXFPoeRgljOGQt-FlPsk6ZzCn2G1D8wlGho,9835
|
58
|
-
femagtools/dxfsl/geom.py,sha256=
|
59
|
-
femagtools/dxfsl/machine.py,sha256=
|
59
|
+
femagtools/dxfsl/geom.py,sha256=c4ubHZdiZr2zjVEErpJRiZS4ExsL5p3keOnag6CGefg,146625
|
60
|
+
femagtools/dxfsl/machine.py,sha256=LC8D9FmZPcoMHzd-whswtCEapdAVkIgQyrL5ydjIol8,31058
|
60
61
|
femagtools/dxfsl/plotrenderer.py,sha256=f7ZTnD0HCLBzurUsVAqqZskTzLeKfhqtfHL32mXZcA4,12311
|
61
62
|
femagtools/dxfsl/shape.py,sha256=G1Y6tEc_gj3BcGVx2BVOkGI9_Jhd824cUvo2CtigWAM,44863
|
62
63
|
femagtools/machine/__init__.py,sha256=AYFgOw8Apy_BAYFNYXfX_AzrP5C3LrmWL5j3qgainng,7413
|
63
|
-
femagtools/machine/effloss.py,sha256=
|
64
|
+
femagtools/machine/effloss.py,sha256=vN7VEvhelXaq0BXoxj_K69ZY_OCYWpRiXI_TSV1XJU8,11467
|
64
65
|
femagtools/machine/im.py,sha256=enHiNrOUJhhjt8InmRt3m6txlQvLMhGR-wSLNRZ6pp4,38093
|
65
66
|
femagtools/machine/pm.py,sha256=WJxUwnJ547gsx4TH4HgWbvUwCJspIz55tw7qaQZy0fg,51280
|
66
67
|
femagtools/machine/sizing.py,sha256=4y4nShJYHBJTepl70tGUNqKhR2rd1bY5jZ0wektiDng,21743
|
67
68
|
femagtools/machine/sm.py,sha256=6KoXHsN7OFeUjTq7W6UqRaGHtXIKlngu8OFjh3Xz8Mw,32810
|
68
|
-
femagtools/machine/utils.py,sha256=
|
69
|
+
femagtools/machine/utils.py,sha256=HNWv3jm1ISCehK8Re_peqPIcU35lLE3p5Ba03HpfrKo,16747
|
69
70
|
femagtools/moo/__init__.py,sha256=zinmWEOrsEz6DmMX0Dbn4t6_1UR-p4bEGqyR1wUQk_Q,175
|
70
71
|
femagtools/moo/algorithm.py,sha256=scHmwwa1LyJKod_hZ_Mm5ZKz86ptF_psAFWI2JyqqH8,5493
|
71
72
|
femagtools/moo/population.py,sha256=gi8PSVUXkYY5vzgAwWvxfMbH_z51fN58O4-NKoarwzI,10100
|
72
73
|
femagtools/moo/problem.py,sha256=McIGKAXK97Jygumns0qmFeYxTG6KDRSQj2aENeC9F9A,2391
|
73
74
|
femagtools/templates/FE-losses.mako,sha256=Rql5_8Q6_uthpr-uFXMUo7tdHehfZYND-7M-ohJXVU8,874
|
75
|
+
femagtools/templates/afm_rotor.mako,sha256=cVdfuHMfOwsBkU3TdBodBhBLzCQ4PFDU7OyPDAj4uSw,3062
|
76
|
+
femagtools/templates/afm_stator.mako,sha256=WcoC3FF0jXDYi03kDBDXhQGZeM6e1qye54jIsOpP83g,4618
|
74
77
|
femagtools/templates/airgapinduc.mako,sha256=aCMLZ7P4vjeSGikIetkwymgDjESdftPN_aYx2LfjfsY,246
|
75
78
|
femagtools/templates/asyn_motor.mako,sha256=vvZ0SIJj4ORaCbE1Hl5NeCU_j2CWdOltVpSKP7ESJTQ,2879
|
76
|
-
femagtools/templates/basic_modpar.mako,sha256=
|
79
|
+
femagtools/templates/basic_modpar.mako,sha256=7qXIYrqJqI3xRnxXKG5zSwBNsiQotc94Q37X4sbAXxQ,3036
|
77
80
|
femagtools/templates/calc_field_ts.mako,sha256=hNs7INzk92U8LljQvQHnKf20fD2HU6igtx1rhsOvPkc,1911
|
78
81
|
femagtools/templates/calc_therm_field.mako,sha256=Q1aAulucLjrtNiCnFGin3ObK13R1KG6dWjJTWwdfxds,1600
|
79
|
-
femagtools/templates/cogg_calc.mako,sha256=
|
82
|
+
femagtools/templates/cogg_calc.mako,sha256=aKGbAVP4ZkhAjZmtDIx2sBIhbTNOUPDV1Rx1J4Um_zc,1746
|
80
83
|
femagtools/templates/colorgrad.mako,sha256=H1wbqukj3SspVBtbMKPjiuaUyDa6uIUJDgfWXwBi5eE,400
|
81
84
|
femagtools/templates/com_motor_sim.mako,sha256=XvLTOCGX8VXzrMS7NJAo1rPc7BnnYV8oVqYcg0ko154,1264
|
82
85
|
femagtools/templates/conduct-data.mako,sha256=quT9S1cq2C2GyeoUe-erxV6w20KvRPuJVJQQw33L9kk,472
|
83
86
|
femagtools/templates/connect_models.mako,sha256=8j1hzBMeoDJ7-GL5BH-S5p53Bu5jtqqsC2_w6MSwWnI,663
|
84
|
-
femagtools/templates/cu_losses.mako,sha256=
|
87
|
+
femagtools/templates/cu_losses.mako,sha256=EeNwINYuwBuhbo9LH3STdQOTxOyyWw_BANgh_BSV9TE,1339
|
85
88
|
femagtools/templates/ec-rotorbar.mako,sha256=RbA1TVNczEEddTNjvGLPxILExxp4rIgoxXe1YT6a4Is,1672
|
86
89
|
femagtools/templates/fe-contr.mako,sha256=NoP7FQ62ITxgNmwP6GmkCnGhjEn5gPLUFgdLdhkKylY,1983
|
87
|
-
femagtools/templates/
|
90
|
+
femagtools/templates/fieldcalc.mako,sha256=-KgomjTDoWIJH-9nMyfkIWvfSjHnYYeuL8eIGyvZnCs,905
|
91
|
+
femagtools/templates/gen_winding.mako,sha256=O4e2yTgFb4GfOBsMvxUwqF6rUSOpek4AU4wRvQ7DVDg,4983
|
88
92
|
femagtools/templates/inductances.mako,sha256=OpcW3E7LW09J8eoXylzfq2R16LKKxzJDr0PGCdHzixM,560
|
89
93
|
femagtools/templates/ld_lq_fast.mako,sha256=bS6YmQ8jR2xFqKEyKiyBxR27SIoqiByigY3YrnmtMqQ,1270
|
90
94
|
femagtools/templates/leak_dist_wind.mako,sha256=vs8fpxcM203kL8BVNuR8BKSmMsQM6U1_vTtYXZIfdSc,600
|
@@ -102,7 +106,7 @@ femagtools/templates/magnetSector.mako,sha256=HYguaQX_DUvplLKhwa_4IR5aBlwRP34vL8
|
|
102
106
|
femagtools/templates/magnetSectorLinear.mako,sha256=ez2rkZslw66Zy4DCDiLjI2K45nEjGgunl0jsXseO_Zs,727
|
103
107
|
femagtools/templates/magnetShell.mako,sha256=vpyZIZ5tOsrmUVM00Kime7zyu1lK9P61xq78jB8BLdo,1295
|
104
108
|
femagtools/templates/magnetShell2.mako,sha256=4IJBfBTPxuYHr1SAcVvNdQoGd8emwsx8vMKQPI9pRlc,4080
|
105
|
-
femagtools/templates/mesh-airgap.mako,sha256=
|
109
|
+
femagtools/templates/mesh-airgap.mako,sha256=rqOsQ6IQXwR8VFo-FUyMDreK4-OlFcl0_NzOTm_WHuU,2250
|
106
110
|
femagtools/templates/modal_analysis.mako,sha256=Thf62FBqL738qnp1ongPr196GJY27vwElKqPfMWF45s,2298
|
107
111
|
femagtools/templates/mult_cal_fast.mako,sha256=Kuy3ngSJRFBkeKPC_wX_2dCdxqrV3jF5UALnICMpRl8,1202
|
108
112
|
femagtools/templates/new_model.mako,sha256=P7658h99bKrA6YbP1D365ImIZPGEAZoBeYCdq0DT0AA,345
|
@@ -125,18 +129,18 @@ femagtools/templates/shortcircuit.mako,sha256=Mr1zRtF_Y2QZ1qpTn8_-PASYrTFRYWpByh
|
|
125
129
|
femagtools/templates/srm.mako,sha256=NneriEFv1wurQCGBI2xozzF2pTzlzS8pEPqtKm0SASQ,2077
|
126
130
|
femagtools/templates/stator1.mako,sha256=1sf0lzLXsjwiBNk3OGLwlio3GUVFogfxqEwaySVO6cs,761
|
127
131
|
femagtools/templates/stator2.mako,sha256=7Ae9sfaX7H4ummL6-g8iG42ArUvl6J809TW2tOdPpYE,599
|
128
|
-
femagtools/templates/stator3Linear.mako,sha256=
|
132
|
+
femagtools/templates/stator3Linear.mako,sha256=pNe3C1wT0W2C0qePo3sEyebW1z_dpTuJzg0r5kf3JQY,760
|
129
133
|
femagtools/templates/stator4.mako,sha256=Jq8pfIuOmmpyGOL1z2aQZfbwMS5-Zyn6OGJ51LCBVKs,1179
|
130
134
|
femagtools/templates/statorBG.mako,sha256=fh0cVOZVWyLojlGxWJoFz2pvdL6Yxy4xzhY-Joc2xeg,893
|
131
135
|
femagtools/templates/statorRing.mako,sha256=sDgDmk71EoE8d4e9cmyqKqRldfC8uKMmpHEjXJGIt_k,2071
|
132
136
|
femagtools/templates/statorRotor3.mako,sha256=MrU_JCSH8tJEUH09fftJJslkbEeIwOB1WGBSxXqUqeI,4942
|
133
137
|
femagtools/templates/stator_msh.mako,sha256=Neze1ielMCk7TrARyhOra91fFQVT8Phsgk2Omt_aMG8,1799
|
134
138
|
femagtools/templates/therm-dynamic.mako,sha256=pEz7jrUpopK1-RqgulNnrkSaCZDjfLelsVo6cBqmpac,3142
|
135
|
-
femagtools/templates/therm-static.mako,sha256=
|
136
|
-
femagtools/templates/torq_calc.mako,sha256=
|
137
|
-
femagtools-1.3.
|
138
|
-
femagtools-1.3.
|
139
|
-
femagtools-1.3.
|
140
|
-
femagtools-1.3.
|
141
|
-
femagtools-1.3.
|
142
|
-
femagtools-1.3.
|
139
|
+
femagtools/templates/therm-static.mako,sha256=koAz72K64fP1SlzCaj_fcJv7mYW0IBtkKTCGVusiux0,1348
|
140
|
+
femagtools/templates/torq_calc.mako,sha256=R4HdtiPwcOcudzW7Pd2GhPqjfQnCfYj2ZIxfz6bsEx0,1729
|
141
|
+
femagtools-1.3.2.dist-info/LICENSE,sha256=V5OED7AzEaOtvbfgNheKOSUeNtijvKQuo84FtSJNkJU,1316
|
142
|
+
femagtools-1.3.2.dist-info/METADATA,sha256=FF6YUcPElZE8KS7ReASBs0q6NB4k8qH_rfd1VKEXb8I,5714
|
143
|
+
femagtools-1.3.2.dist-info/WHEEL,sha256=AtBG6SXL3KF_v0NxLf0ehyVOh0cold-JbJYXNGorC6Q,92
|
144
|
+
femagtools-1.3.2.dist-info/entry_points.txt,sha256=FZpd7JumQdJo-AZUyRA8-aJthK85jg37_qjRoDTY-Mo,191
|
145
|
+
femagtools-1.3.2.dist-info/top_level.txt,sha256=DScrn5RiUYKtaEVgcG3AMSWDUd2N8uqxk-gZY-2CaYk,11
|
146
|
+
femagtools-1.3.2.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|