femagtools 1.7.0__py3-none-any.whl → 1.7.1__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 +9 -74
- femagtools/dxfsl/areabuilder.py +8 -2
- femagtools/dxfsl/converter.py +22 -8
- femagtools/dxfsl/geom.py +93 -16
- femagtools/dxfsl/journal.py +5 -0
- femagtools/dxfsl/machine.py +4 -1
- femagtools/dxfsl/plotrenderer.py +4 -0
- femagtools/machine/sizing.py +1 -1
- {femagtools-1.7.0.dist-info → femagtools-1.7.1.dist-info}/METADATA +1 -1
- {femagtools-1.7.0.dist-info → femagtools-1.7.1.dist-info}/RECORD +16 -16
- {femagtools-1.7.0.dist-info → femagtools-1.7.1.dist-info}/WHEEL +1 -1
- tests/test_sizing.py +2 -2
- {femagtools-1.7.0.dist-info → femagtools-1.7.1.dist-info}/LICENSE +0 -0
- {femagtools-1.7.0.dist-info → femagtools-1.7.1.dist-info}/entry_points.txt +0 -0
- {femagtools-1.7.0.dist-info → femagtools-1.7.1.dist-info}/top_level.txt +0 -0
femagtools/__init__.py
CHANGED
femagtools/dxfsl/area.py
CHANGED
@@ -81,6 +81,7 @@ class Area(object):
|
|
81
81
|
global area_number
|
82
82
|
area_number += 1
|
83
83
|
self.id = area_number
|
84
|
+
self.is_child = False
|
84
85
|
self.areas_inside = {}
|
85
86
|
self.areas_of_group = []
|
86
87
|
|
@@ -431,12 +432,14 @@ class Area(object):
|
|
431
432
|
d = distance(p1, p2)
|
432
433
|
gap_list.append((d, (p1, p2), dist_id, a.get_id()))
|
433
434
|
|
434
|
-
|
435
|
-
|
436
|
-
|
437
|
-
|
438
|
-
if
|
439
|
-
|
435
|
+
if rightangle is not None:
|
436
|
+
d, p1, p2 = a.get_nearest_point(center, radius, rightangle)
|
437
|
+
if p1:
|
438
|
+
gap_list.append((d, (p1, p2), dist_id, a.get_id()))
|
439
|
+
if leftangle is not None:
|
440
|
+
d, p1, p2 = a.get_nearest_point(center, radius, leftangle)
|
441
|
+
if p1:
|
442
|
+
gap_list.append((d, (p1, p2), dist_id, a.get_id()))
|
440
443
|
if not gap_list:
|
441
444
|
return []
|
442
445
|
gap_list.sort()
|
@@ -1553,74 +1556,6 @@ class Area(object):
|
|
1553
1556
|
for i in a.nested_areas_inside():
|
1554
1557
|
yield i
|
1555
1558
|
|
1556
|
-
def crunch_area(self, geom):
|
1557
|
-
n1_prev = None
|
1558
|
-
e_prev = None
|
1559
|
-
logger.debug("crunch area %s", self.identifier())
|
1560
|
-
|
1561
|
-
if self.is_circle():
|
1562
|
-
return 0
|
1563
|
-
|
1564
|
-
c = 0
|
1565
|
-
for n1, n2, e in self.list_of_elements():
|
1566
|
-
if e_prev is not None:
|
1567
|
-
if len([nbr for nbr in geom.g.neighbors(n1)]) == 2:
|
1568
|
-
e_new = e_prev.concatenate(n1_prev, n2, e)
|
1569
|
-
if e_new is not None:
|
1570
|
-
e_prev_dict = geom.g.get_edge_data(n1_prev, n1)
|
1571
|
-
e_dict = geom.g.get_edge_data(n1, n2)
|
1572
|
-
|
1573
|
-
logger.debug("--> remove from %s to %s [%s, %s, %s]",
|
1574
|
-
n1_prev,
|
1575
|
-
n1,
|
1576
|
-
e_prev_dict[0],
|
1577
|
-
e_prev_dict[1],
|
1578
|
-
e_prev_dict[2])
|
1579
|
-
logger.debug(" remove %s", e_prev)
|
1580
|
-
geom.remove_edge(e_prev)
|
1581
|
-
|
1582
|
-
logger.debug("--> remove from %s to %s [%s, %s, %s]",
|
1583
|
-
n1,
|
1584
|
-
n2,
|
1585
|
-
e_dict[0],
|
1586
|
-
e_dict[1],
|
1587
|
-
e_dict[2])
|
1588
|
-
logger.debug(" remove %s", e)
|
1589
|
-
if e.get_node_number(n1) == 1:
|
1590
|
-
flag1 = e_dict[1]
|
1591
|
-
flag2 = e_dict[2]
|
1592
|
-
else:
|
1593
|
-
flag1 = e_dict[2]
|
1594
|
-
flag2 = e_dict[1]
|
1595
|
-
geom.remove_edge(e)
|
1596
|
-
|
1597
|
-
logger.debug("--> add from %s to %s",
|
1598
|
-
n1_prev,
|
1599
|
-
n2)
|
1600
|
-
logger.debug(" add %s", e_new)
|
1601
|
-
geom.add_edge(n1_prev, n2, e_new)
|
1602
|
-
|
1603
|
-
e_new_dict = geom.g.get_edge_data(n1_prev, n2)
|
1604
|
-
e_new_dict[0] = True
|
1605
|
-
if e_new.get_node_number(n1_prev) == 1:
|
1606
|
-
e_new_dict[1] = flag1
|
1607
|
-
e_new_dict[2] = flag2
|
1608
|
-
else:
|
1609
|
-
e_new_dict[1] = flag2
|
1610
|
-
e_new_dict[2] = flag1
|
1611
|
-
|
1612
|
-
logger.debug(" new dict: [%s, %s, %s]",
|
1613
|
-
e_new_dict[0],
|
1614
|
-
e_new_dict[1],
|
1615
|
-
e_new_dict[2])
|
1616
|
-
e_prev = e_new
|
1617
|
-
c += 1
|
1618
|
-
continue
|
1619
|
-
|
1620
|
-
n1_prev = n1
|
1621
|
-
e_prev = e
|
1622
|
-
return c
|
1623
|
-
|
1624
1559
|
def __str__(self):
|
1625
1560
|
return "Area {}\n".format(self.id) + \
|
1626
1561
|
"distance...............: from {} to {}\n".\
|
femagtools/dxfsl/areabuilder.py
CHANGED
@@ -33,7 +33,7 @@ def disable_logging():
|
|
33
33
|
logger.debug("Logging level %s disabled", original_log_level)
|
34
34
|
|
35
35
|
# Set the log level to a higher level, e.g., WARNING or CRITICAL
|
36
|
-
logging.disable(logging.
|
36
|
+
logging.disable(logging.ERROR)
|
37
37
|
|
38
38
|
|
39
39
|
def enable_logging():
|
@@ -338,7 +338,11 @@ class EdgeInfo(object):
|
|
338
338
|
return True # two lines
|
339
339
|
|
340
340
|
def arc_line_direction_lefthand(self, start_edge, line_edge, builder):
|
341
|
-
logger.
|
341
|
+
logger.info("begin of arc_line_direction_lefthand")
|
342
|
+
if not self.is_arc():
|
343
|
+
logger.critical("FATAL: unexpected %s at position %s", self.classname(), self.n1)
|
344
|
+
sys.exit(1)
|
345
|
+
|
342
346
|
assert(self.is_arc())
|
343
347
|
assert(line_edge.is_line())
|
344
348
|
start_edge.log_edge(":::: start")
|
@@ -844,10 +848,12 @@ class AreaBuilder(object):
|
|
844
848
|
logger.debug("=== Area Group List ===")
|
845
849
|
self.set_edge_attributes()
|
846
850
|
errors = 0
|
851
|
+
disable_logging()
|
847
852
|
for k in group_keys:
|
848
853
|
if not self.build_group_area(group_list[k]):
|
849
854
|
logger.warning("Creation of an areagroup failed")
|
850
855
|
errors += 1
|
856
|
+
enable_logging()
|
851
857
|
|
852
858
|
t = timer.stop("areagroups created in %0.4f seconds")
|
853
859
|
logger.debug("end of create_area_groups: %s groups created",
|
femagtools/dxfsl/converter.py
CHANGED
@@ -26,6 +26,9 @@ def plot_geom(doit, plt, geom, title="Plot", areas=True):
|
|
26
26
|
logger.info("Prepare Plot %s", title)
|
27
27
|
plt.render_elements(geom, Shape,
|
28
28
|
draw_inside=areas,
|
29
|
+
draw_groups=False,
|
30
|
+
draw_phi=True,
|
31
|
+
critical=True,
|
29
32
|
title=title,
|
30
33
|
show=True,
|
31
34
|
with_corners=True,
|
@@ -165,6 +168,7 @@ def build_machine_rotor(machine, inner, mindist, plt, single=False):
|
|
165
168
|
if machine.is_mirrored():
|
166
169
|
logger.debug("Rotor is mirrored")
|
167
170
|
machine_temp = machine.undo_mirror()
|
171
|
+
machine_temp.delete_tiny_elements(mindist)
|
168
172
|
machine_temp.geom.set_rotor()
|
169
173
|
machine_temp.search_rotor_subregions(single=single)
|
170
174
|
else:
|
@@ -198,7 +202,6 @@ def build_machine_rotor(machine, inner, mindist, plt, single=False):
|
|
198
202
|
machine_temp.rebuild_subregions(single=single)
|
199
203
|
|
200
204
|
machine_temp.geom.recalculate_magnet_orientation()
|
201
|
-
machine_temp.delete_tiny_elements(mindist)
|
202
205
|
if inner:
|
203
206
|
machine_temp.create_inner_corner_areas()
|
204
207
|
|
@@ -220,6 +223,7 @@ def build_machine_stator(machine, inner, mindist, plt, single=False):
|
|
220
223
|
if machine.has_mirrored_windings():
|
221
224
|
logger.debug("undo mirrored windings")
|
222
225
|
machine_temp = machine.undo_mirror()
|
226
|
+
machine_temp.delete_tiny_elements(mindist)
|
223
227
|
machine_temp.geom.set_stator()
|
224
228
|
machine_temp.search_stator_subregions(single=single)
|
225
229
|
machine_temp.create_mirror_lines_outside_windings()
|
@@ -228,7 +232,6 @@ def build_machine_stator(machine, inner, mindist, plt, single=False):
|
|
228
232
|
if machine_temp.create_auxiliary_lines():
|
229
233
|
machine_temp.rebuild_subregions(single=single)
|
230
234
|
|
231
|
-
machine_temp.delete_tiny_elements(mindist)
|
232
235
|
if inner:
|
233
236
|
machine_temp.create_inner_corner_areas()
|
234
237
|
|
@@ -245,7 +248,7 @@ def build_machine_stator(machine, inner, mindist, plt, single=False):
|
|
245
248
|
def convert(dxfile,
|
246
249
|
rtol=1e-04,
|
247
250
|
atol=1e-03,
|
248
|
-
mindist=0.
|
251
|
+
mindist=0.01,
|
249
252
|
symtol=0.001,
|
250
253
|
sympart=0,
|
251
254
|
split=False,
|
@@ -271,9 +274,13 @@ def convert(dxfile,
|
|
271
274
|
conv = {}
|
272
275
|
|
273
276
|
input_file = Path(dxfile)
|
277
|
+
if not input_file.is_file():
|
278
|
+
logger.error("File %s is not available", input_file)
|
279
|
+
sys.exit(1)
|
280
|
+
|
274
281
|
basename = input_file.stem
|
275
282
|
if part:
|
276
|
-
logger.info("***** start processing %s *****", basename)
|
283
|
+
logger.info("***** start processing %s (%s) *****", basename, part)
|
277
284
|
else:
|
278
285
|
logger.info("***** start processing %s *****", basename)
|
279
286
|
timer = Timer(start_it=True)
|
@@ -281,7 +288,8 @@ def convert(dxfile,
|
|
281
288
|
journal = getJournal(name='converter', aktiv=debug_mode)
|
282
289
|
journal.get_journal(input_file.name)
|
283
290
|
journal.put_filename(str(input_file.resolve()))
|
284
|
-
journal.
|
291
|
+
journal.set('success', False)
|
292
|
+
journal.write_journal()
|
285
293
|
|
286
294
|
if part:
|
287
295
|
if part[0] not in ('rotor', 'stator'):
|
@@ -527,6 +535,9 @@ def convert(dxfile,
|
|
527
535
|
p)
|
528
536
|
machine_inner.sync_with_counterpart(machine_outer)
|
529
537
|
|
538
|
+
machine_inner.search_critical_elements(mindist)
|
539
|
+
machine_outer.search_critical_elements(mindist)
|
540
|
+
|
530
541
|
logger.info("***** END of work: %s *****", basename)
|
531
542
|
|
532
543
|
if machine_inner.geom.is_rotor():
|
@@ -674,6 +685,7 @@ def convert(dxfile,
|
|
674
685
|
rows=3, # rows
|
675
686
|
cols=2, # cols
|
676
687
|
num=3) # start num
|
688
|
+
machine.delete_tiny_elements(mindist)
|
677
689
|
|
678
690
|
if da > 0.0 or dy > 0.0:
|
679
691
|
if inner:
|
@@ -709,7 +721,6 @@ def convert(dxfile,
|
|
709
721
|
else:
|
710
722
|
machine.search_subregions(single=True)
|
711
723
|
|
712
|
-
machine.delete_tiny_elements(mindist)
|
713
724
|
machine.create_inner_corner_areas()
|
714
725
|
|
715
726
|
logger.info("***** END of work: %s *****", basename)
|
@@ -727,6 +738,7 @@ def convert(dxfile,
|
|
727
738
|
with_nodes=False,
|
728
739
|
neighbors=False,
|
729
740
|
write_id=write_id,
|
741
|
+
draw_phi=True,
|
730
742
|
fill_areas=True)
|
731
743
|
elif small_plots:
|
732
744
|
#p.figure().suptitle(input_file.name, fontsize=16)
|
@@ -737,6 +749,7 @@ def convert(dxfile,
|
|
737
749
|
with_nodes=False,
|
738
750
|
neighbors=False,
|
739
751
|
write_id=write_id,
|
752
|
+
draw_phi=True,
|
740
753
|
fill_areas=True)
|
741
754
|
|
742
755
|
if show_plots or small_plots:
|
@@ -765,11 +778,12 @@ def convert(dxfile,
|
|
765
778
|
fslrenderer = FslRenderer(basename)
|
766
779
|
conv['fsl'] = fslrenderer.render(machine, inner, outer)
|
767
780
|
|
768
|
-
|
781
|
+
if params is not None:
|
782
|
+
conv.update(params)
|
769
783
|
conv['name'] = basename
|
770
784
|
t = timer.stop("-- all done in %0.4f seconds --", info=True)
|
771
785
|
journal.put('time_total', t)
|
772
|
-
journal.
|
786
|
+
journal.set('success', True)
|
773
787
|
return conv
|
774
788
|
|
775
789
|
|
femagtools/dxfsl/geom.py
CHANGED
@@ -283,6 +283,7 @@ class Geometry(object):
|
|
283
283
|
self.has_magnets = False
|
284
284
|
self.journal = getJournal()
|
285
285
|
self.area_errors = 0
|
286
|
+
self.critical_points = []
|
286
287
|
i = 0
|
287
288
|
|
288
289
|
logger.debug("Geometry(split=%s, concat=%s, connect=%s, delete=%s, adjust=%s, main=%s,",
|
@@ -1829,6 +1830,10 @@ class Geometry(object):
|
|
1829
1830
|
for area in magnets:
|
1830
1831
|
area.render_magnet_phi(renderer, length)
|
1831
1832
|
|
1833
|
+
def render_critical(self, renderer):
|
1834
|
+
for e in self.critical_points:
|
1835
|
+
e.render(renderer, 'darkred')
|
1836
|
+
|
1832
1837
|
def get_points_in_iron(self):
|
1833
1838
|
points = []
|
1834
1839
|
for area in self.list_of_areas():
|
@@ -2459,6 +2464,49 @@ class Geometry(object):
|
|
2459
2464
|
# logger.info(" ++ %s", id)
|
2460
2465
|
logger.debug("end set_areas_inside_for_all_areas")
|
2461
2466
|
|
2467
|
+
def set_groups_inside_for_all_areas(self):
|
2468
|
+
logger.debug("begin set_groups_inside_for_all_areas")
|
2469
|
+
|
2470
|
+
groups_inside = {}
|
2471
|
+
groups = {}
|
2472
|
+
areas_outside = []
|
2473
|
+
for area in self.list_of_areas():
|
2474
|
+
grouplist = [a for a in self.areagroup_list
|
2475
|
+
if area.is_inside(a, self)]
|
2476
|
+
if not grouplist:
|
2477
|
+
continue
|
2478
|
+
groups_inside = {g.id: g for g in grouplist}
|
2479
|
+
area.areas_inside = groups_inside
|
2480
|
+
areas_outside.append(area)
|
2481
|
+
for g in grouplist:
|
2482
|
+
alist = groups.get(g.id, [])
|
2483
|
+
alist.append(area)
|
2484
|
+
groups[g.id] = alist
|
2485
|
+
|
2486
|
+
outside_id = [a.id for a in areas_outside]
|
2487
|
+
logger.debug("Areas outside: %s", outside_id)
|
2488
|
+
|
2489
|
+
for id in groups.keys():
|
2490
|
+
if len(groups[id]) > 1:
|
2491
|
+
logger.warning("Attention: nested groups of areas")
|
2492
|
+
self.journal.put("warning", "nested groups of areas")
|
2493
|
+
areas = groups[id]
|
2494
|
+
main_area = areas[0]
|
2495
|
+
main_size = main_area.area_size()
|
2496
|
+
for a in areas[1:]:
|
2497
|
+
sz = a.area_size()
|
2498
|
+
if sz < main_size:
|
2499
|
+
main_area = a
|
2500
|
+
main_size = sz
|
2501
|
+
assert(main_area is not None)
|
2502
|
+
main_area.is_child = True
|
2503
|
+
for area in areas:
|
2504
|
+
if area.id != main_area.id:
|
2505
|
+
del area.areas_inside[id]
|
2506
|
+
|
2507
|
+
logger.debug("end set_areas_inside_for_all_areas")
|
2508
|
+
return areas_outside
|
2509
|
+
|
2462
2510
|
def get_minmax_magnet(self):
|
2463
2511
|
logger.debug("get_minmax_magnet")
|
2464
2512
|
maglist = [a for a in self.list_of_areas() if a.is_magnet()]
|
@@ -2472,21 +2520,26 @@ class Geometry(object):
|
|
2472
2520
|
def create_auxiliary_lines(self, rightangle, leftangle):
|
2473
2521
|
logger.debug("begin of create_auxiliary_lines")
|
2474
2522
|
timer = Timer(start_it=True)
|
2523
|
+
done = False
|
2475
2524
|
|
2476
|
-
#
|
2477
|
-
|
2478
|
-
|
2479
|
-
|
2480
|
-
|
2481
|
-
|
2482
|
-
|
2483
|
-
|
2484
|
-
|
2525
|
+
if True: # new style
|
2526
|
+
logger.debug("-> start create_auxiliary_lines")
|
2527
|
+
area_list = self.list_of_areas()
|
2528
|
+
builder = AreaBuilder(geom=self)
|
2529
|
+
builder.create_area_groups(area_list)
|
2530
|
+
self.areagroup_list = builder.area_list
|
2531
|
+
area_list = self.set_groups_inside_for_all_areas()
|
2532
|
+
for area in area_list:
|
2533
|
+
if self.create_aux_lines(area, rightangle, leftangle):
|
2534
|
+
done = True
|
2535
|
+
else:
|
2536
|
+
logger.debug("-> start create_auxiliary_lines")
|
2537
|
+
self.set_areas_inside_for_all_areas()
|
2538
|
+
done = False
|
2539
|
+
for area in self.list_of_areas():
|
2540
|
+
if self.create_aux_lines(area, rightangle, leftangle):
|
2541
|
+
done = True
|
2485
2542
|
|
2486
|
-
done = False
|
2487
|
-
for area in self.list_of_areas():
|
2488
|
-
if self.create_aux_lines(area, rightangle, leftangle):
|
2489
|
-
done = True
|
2490
2543
|
t = timer.stop("-- auxiliary lines in %0.4f seconds --")
|
2491
2544
|
self.journal.put('time_auxiliary_lines', t)
|
2492
2545
|
logger.debug("end of create_auxiliary_lines")
|
@@ -2505,6 +2558,10 @@ class Geometry(object):
|
|
2505
2558
|
|
2506
2559
|
aux_color = 'red'
|
2507
2560
|
aux_linestyle = 'dotted'
|
2561
|
+
if area.is_child:
|
2562
|
+
logger.debug("Area %s is a child of another nested area", area.id)
|
2563
|
+
rightangle = None
|
2564
|
+
leftangle = None
|
2508
2565
|
|
2509
2566
|
areas_border = {a.get_id(): a for a in areas_inside
|
2510
2567
|
if area.has_connection(self, a, ndec)}
|
@@ -2861,7 +2918,7 @@ class Geometry(object):
|
|
2861
2918
|
edges = self.search_tiny_elements(mindist)
|
2862
2919
|
if not edges:
|
2863
2920
|
logger.debug("-- no tiny elements found")
|
2864
|
-
return
|
2921
|
+
return 0
|
2865
2922
|
|
2866
2923
|
deleted = 0
|
2867
2924
|
for edge in edges:
|
@@ -2901,8 +2958,27 @@ class Geometry(object):
|
|
2901
2958
|
|
2902
2959
|
if deleted:
|
2903
2960
|
logger.debug("%s tiny elements deleted", deleted)
|
2961
|
+
self.journal.put("tiny_elements_deleted", deleted)
|
2904
2962
|
logger.debug("end of delete_tiny_elements")
|
2905
|
-
return
|
2963
|
+
return deleted
|
2964
|
+
|
2965
|
+
def search_critical_elements(self, mindist):
|
2966
|
+
for n in self.g.nodes():
|
2967
|
+
nbrs = self.get_neighbors(n)
|
2968
|
+
if len(nbrs) < 3:
|
2969
|
+
continue
|
2970
|
+
critical_point = False
|
2971
|
+
critical_dist = 9999
|
2972
|
+
for nbr in nbrs:
|
2973
|
+
e = self.get_edge_element(n, nbr)
|
2974
|
+
if e.is_tiny(mindist):
|
2975
|
+
critical_point = True
|
2976
|
+
critical_dist = min(critical_dist, e.length())
|
2977
|
+
if critical_point:
|
2978
|
+
logger.debug("Warning: maybe critical point %s", n)
|
2979
|
+
self.journal.put("maybe_critical_points", (n, critical_dist))
|
2980
|
+
c = Circle(Element(center=n, radius=1))
|
2981
|
+
self.critical_points.append(c)
|
2906
2982
|
|
2907
2983
|
def check_shaft_area(self, shaft):
|
2908
2984
|
for a in self.list_of_areas():
|
@@ -3319,7 +3395,8 @@ class Geometry(object):
|
|
3319
3395
|
if builder.create_area_groups(areas):
|
3320
3396
|
return # bad
|
3321
3397
|
group_list = builder.area_list
|
3322
|
-
|
3398
|
+
# for debugging
|
3399
|
+
# self.areagroup_list = group_list
|
3323
3400
|
for group in group_list:
|
3324
3401
|
if not group.is_magnet_rectangle():
|
3325
3402
|
logger.debug("Warning: group is not a rectangle")
|
femagtools/dxfsl/journal.py
CHANGED
@@ -102,6 +102,11 @@ class Journal(object):
|
|
102
102
|
if self.get_total('appendices_deleted') > 0:
|
103
103
|
self.put_warning("Problem with appendices")
|
104
104
|
|
105
|
+
def set(self, name, val):
|
106
|
+
if not self.data:
|
107
|
+
return
|
108
|
+
self.data[name] = val
|
109
|
+
|
105
110
|
def put(self, name, val):
|
106
111
|
if not self.data:
|
107
112
|
return
|
femagtools/dxfsl/machine.py
CHANGED
@@ -1069,7 +1069,10 @@ class Machine(object):
|
|
1069
1069
|
return self.geom.has_magnets
|
1070
1070
|
|
1071
1071
|
def delete_tiny_elements(self, mindist):
|
1072
|
-
self.geom.delete_tiny_elements(mindist)
|
1072
|
+
return self.geom.delete_tiny_elements(mindist)
|
1073
|
+
|
1074
|
+
def search_critical_elements(self, mindist):
|
1075
|
+
self.geom.search_critical_elements(mindist)
|
1073
1076
|
|
1074
1077
|
def create_arc(self, radius,
|
1075
1078
|
color='red', linestyle='dotted',
|
femagtools/dxfsl/plotrenderer.py
CHANGED
@@ -207,6 +207,7 @@ class PlotRenderer(object):
|
|
207
207
|
draw_inside = kwargs.get('draw_inside', False)
|
208
208
|
draw_groups = kwargs.get('draw_groups', False)
|
209
209
|
draw_phi = kwargs.get('draw_phi', False)
|
210
|
+
critical = kwargs.get('critical', False)
|
210
211
|
fill_areas = kwargs.get('fill_areas', False)
|
211
212
|
write_id = kwargs.get('write_id', False)
|
212
213
|
with_legend = kwargs.get('with_legend', True)
|
@@ -308,6 +309,9 @@ class PlotRenderer(object):
|
|
308
309
|
if draw_phi:
|
309
310
|
geom.render_magnet_phi(self)
|
310
311
|
|
312
|
+
if critical:
|
313
|
+
geom.render_critical(self)
|
314
|
+
|
311
315
|
if with_center and geom.center:
|
312
316
|
self.point(geom.center, 'o', color='darkgreen')
|
313
317
|
x_min = min(x_min, geom.center[0]-5)
|
femagtools/machine/sizing.py
CHANGED
@@ -310,7 +310,7 @@ def get_stator_dimensions(par, slots=[]):
|
|
310
310
|
bns = taus*(Da+2*hs1) - bds
|
311
311
|
|
312
312
|
hns = (-bns + np.sqrt(bns**2 + 4*ans*np.tan(taus)))/2/np.tan(taus)
|
313
|
-
hys = psi1/2/lfe
|
313
|
+
hys = psi1/2/lfe/By
|
314
314
|
|
315
315
|
# airgap and yoke diameter
|
316
316
|
airgap = par['airgap']
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: femagtools
|
3
|
-
Version: 1.7.
|
3
|
+
Version: 1.7.1
|
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=J7PZIYNxvDe7bKOlKKN7KqkIMJCh3y9ziNTJ9-b6-xY,1600
|
2
2
|
femagtools/airgap.py,sha256=ZCIZTYf6BbuNYx68y9fUDBQo3taN8RuGl8q-jJ7ygiA,1577
|
3
3
|
femagtools/amazon.py,sha256=O1ICuv21XDAJi1qK1Sigs2TdS6hDZP19OzvmE2t76wU,12069
|
4
4
|
femagtools/amela.py,sha256=pHjfXzpANI-7oz8MtrqNcyDZ6PxVM91vCJuvYhHy1rk,13891
|
@@ -47,21 +47,21 @@ femagtools/vbf.py,sha256=9XGfhftmD9carU8ByQ5DwqoR4daq5mJ39eMqruwml0Q,2444
|
|
47
47
|
femagtools/vtu.py,sha256=Sf83dHIfCKY2km-MIUHKKoj-JKN4PDX7kkPLZXyIYY4,10723
|
48
48
|
femagtools/windings.py,sha256=6ioABZRWQ3xA4kmEz2NUkXh-C-FmW9YYkjQKs5YakQs,22197
|
49
49
|
femagtools/dxfsl/__init__.py,sha256=MywcCdpKPKs4qJBJJgeDsikJFJ2P48dbTuNk303f5pM,76
|
50
|
-
femagtools/dxfsl/area.py,sha256=
|
51
|
-
femagtools/dxfsl/areabuilder.py,sha256=
|
50
|
+
femagtools/dxfsl/area.py,sha256=cYnDtnEuwuDW5R1NKV0s8PUzzQzxhgCUktFqHAjP9K8,56581
|
51
|
+
femagtools/dxfsl/areabuilder.py,sha256=Siu11yRcNJiSCWwc865-OvuVhSmLtRQWysbe1-rUcN0,34197
|
52
52
|
femagtools/dxfsl/concat.py,sha256=F6scwesxyOmfmKQ5kGspNCxA71Yz6QgxFL7lTj3hsaI,13385
|
53
53
|
femagtools/dxfsl/conv.py,sha256=GeRYUvbdcP5vKtNm5S5gU1yyMboGkGNyOqzkHpYbEEo,10086
|
54
|
-
femagtools/dxfsl/converter.py,sha256=
|
54
|
+
femagtools/dxfsl/converter.py,sha256=ZxOfF3bUQ2VXRjnUwDaAis3eRI-SiNEuM0UnSDpwda8,32353
|
55
55
|
femagtools/dxfsl/corner.py,sha256=-XPBcnEau-2-SRHLYzlBqCQGaFfgm_DH2qR1mSaFoAs,1311
|
56
56
|
femagtools/dxfsl/dumprenderer.py,sha256=n4AvInjvGIaC2iKZtQaYXXDyJVSQ3uEOFOLD4-xfKRY,1861
|
57
57
|
femagtools/dxfsl/dxfparser.py,sha256=kyXG0kZfNyOgn96MqBgP8RhOQhppfB5NbyRNNybs1C0,13451
|
58
58
|
femagtools/dxfsl/femparser.py,sha256=O8940Q1Mz8MKng6W8M3s9KfTvhDLJ56tfQWtZEW3xMM,2134
|
59
59
|
femagtools/dxfsl/fslrenderer.py,sha256=DBE7qDlwIE5K8qD8ne7iNyaEVwHrpyis2TX1spteLsA,24979
|
60
60
|
femagtools/dxfsl/functions.py,sha256=F0AjzHfIfq3v-mhDzUOeq3zeYQCEsJl1-XpEyJQsSnQ,11805
|
61
|
-
femagtools/dxfsl/geom.py,sha256
|
62
|
-
femagtools/dxfsl/journal.py,sha256=
|
63
|
-
femagtools/dxfsl/machine.py,sha256=
|
64
|
-
femagtools/dxfsl/plotrenderer.py,sha256=
|
61
|
+
femagtools/dxfsl/geom.py,sha256=-hPErBLyAsDh-aq2s54psFqG2AaNr9jVeKMeEVUQF5E,165356
|
62
|
+
femagtools/dxfsl/journal.py,sha256=S17B7wsrq5QzIUbjgg0ntvnpgH0thHq9aQXO7GdYlQQ,4265
|
63
|
+
femagtools/dxfsl/machine.py,sha256=3leWkjdMCLX2HgMhw8gNdxTKROhNCKU7KQrDVbBQ8DI,49337
|
64
|
+
femagtools/dxfsl/plotrenderer.py,sha256=q2cORuxJEf1Ws6oCY9c0gF6N3kDrcI6WOz3u5Vl6R_c,13823
|
65
65
|
femagtools/dxfsl/shape.py,sha256=ZmWw7VTSJs5rcY1Lh99MKo804mO7dSGHdKMIh-nVBow,59904
|
66
66
|
femagtools/dxfsl/svgparser.py,sha256=R8V2V5jE6JyVfzshJVaPgsSuMlQf_pwJTFvrTrKDxZ0,2905
|
67
67
|
femagtools/dxfsl/symmetry.py,sha256=0WeDq_z42A_cjG4m_vREDWyx-wqHqXDkoCT2eXh2EMo,38084
|
@@ -70,7 +70,7 @@ femagtools/machine/afpm.py,sha256=hNyDFRLGmCuWRPZl_u1ztJ4pA-Y_mxLaVvg3UJkzRuE,24
|
|
70
70
|
femagtools/machine/effloss.py,sha256=sLB8AXYVAE_AL1Ca41A2EDbn9_7u6xNjaYFjmRPoTDg,13578
|
71
71
|
femagtools/machine/im.py,sha256=3Y54AHMZfAjkvgexx2E-5jxNWzaVQ-SyaETCh7gNBYA,38008
|
72
72
|
femagtools/machine/pm.py,sha256=N4UEpOEYpvJzGjWt4SLOpgMrjzoSYyuxpi-8wlT1U5A,58565
|
73
|
-
femagtools/machine/sizing.py,sha256=
|
73
|
+
femagtools/machine/sizing.py,sha256=BYaPEWrU1IDbnyRzC2MlQBA0MXaiK8sx1wD7Pn21XX8,23328
|
74
74
|
femagtools/machine/sm.py,sha256=ubS7mK2dibhwUpGwyY-23hoZbLrVqAtPeXVmqF657lg,37781
|
75
75
|
femagtools/machine/utils.py,sha256=ckPOfaaieRbThMKkBtCtoCMsehdbePH8xNoWPmNoS3Y,18782
|
76
76
|
femagtools/moo/__init__.py,sha256=zinmWEOrsEz6DmMX0Dbn4t6_1UR-p4bEGqyR1wUQk_Q,175
|
@@ -193,7 +193,7 @@ tests/test_nc.py,sha256=kIFUOlFy_jQUjLnS9wuy6c2YkPOrKyXlMtGxDIJnXsw,4205
|
|
193
193
|
tests/test_parident.py,sha256=WWCyRgqqX3bcp0Q7Pwxz4dN2kklIm5E7kBvqkO9m718,1340
|
194
194
|
tests/test_parstudy.py,sha256=wk7WfYQrx5dtv6MnmWCfNAEInvRKsbVXYEUIIR9zLbQ,3200
|
195
195
|
tests/test_pocfile.py,sha256=eiMLBRQxDnHIGiqku6EXcQ3fb7wGIxhXmb20iyLlPRU,5816
|
196
|
-
tests/test_sizing.py,sha256=
|
196
|
+
tests/test_sizing.py,sha256=NJ0FPlHx88lvqITSJ0sypE9HENd09WOMRRWea6a7zrk,1132
|
197
197
|
tests/test_sm.py,sha256=FjcAbx4n7kLH00kjnKoGMk6t4_V9TJzIaxM21MkrOjE,83524
|
198
198
|
tests/test_tksreader.py,sha256=8QtPAzxPJbkpxd1Nw2I7ggaTaKaL4WY55JJBHkZAzus,766
|
199
199
|
tests/test_ts.py,sha256=tR2x5cKU9gw2fUprzaPgPbCvmDOHDO36JUPCCoTlY7Y,1833
|
@@ -210,9 +210,9 @@ tests/moo/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
210
210
|
tests/moo/test_algorithm.py,sha256=Em8sFm2vzPmuIzRrBBnUQLU_TYuJHSf-kEeozw0XeX4,2563
|
211
211
|
tests/moo/test_population.py,sha256=FvX9LRCxQx0_E2GxHQ5vKwOYFBQiNbT6Lmv5GmNWjTQ,5471
|
212
212
|
tests/moo/test_problem.py,sha256=ALeP4u7g-dFhfwWL8vxivdrrYzVKPjHMCAXzzgyNZbs,467
|
213
|
-
femagtools-1.7.
|
214
|
-
femagtools-1.7.
|
215
|
-
femagtools-1.7.
|
216
|
-
femagtools-1.7.
|
217
|
-
femagtools-1.7.
|
218
|
-
femagtools-1.7.
|
213
|
+
femagtools-1.7.1.dist-info/LICENSE,sha256=NaQe4uvkszQPJmiRPHecfk-Ab9VSRXo8xQLGNVHTeFo,1362
|
214
|
+
femagtools-1.7.1.dist-info/METADATA,sha256=nm1a5JYXOmQ6qXk7AgIZES-VbkKq9kVeSqok7Jx3u7I,6147
|
215
|
+
femagtools-1.7.1.dist-info/WHEEL,sha256=cpQTJ5IWu9CdaPViMhC9YzF8gZuS5-vlfoFihTBC86A,91
|
216
|
+
femagtools-1.7.1.dist-info/entry_points.txt,sha256=jrvOkZPiN44u1sASeu271VRaVIv5V-uRpN0_N5U_R8c,248
|
217
|
+
femagtools-1.7.1.dist-info/top_level.txt,sha256=Ri4YWtU8MZTzNje9IKyXhTakNbsrCynuWdon4Yq94Dc,17
|
218
|
+
femagtools-1.7.1.dist-info/RECORD,,
|
tests/test_sizing.py
CHANGED
@@ -16,7 +16,7 @@ def test_im():
|
|
16
16
|
sigmas=fs, Ba=0.77,
|
17
17
|
cos_phi=0.8, eta=0.8,
|
18
18
|
lda=0.9, rtype='statorRotor3')
|
19
|
-
assert round(r['outer_diam'], 3) == 0.
|
19
|
+
assert round(r['outer_diam'], 3) == 0.182
|
20
20
|
assert r['stator']['num_slots'] == 36
|
21
21
|
|
22
22
|
|
@@ -33,7 +33,7 @@ def test_spm():
|
|
33
33
|
Hc=700, sigmas=fs, brem=1.1, Ba=0.77,
|
34
34
|
cos_phi=0.7, eta=0.8, demag=1.7,
|
35
35
|
lda=0.9)
|
36
|
-
assert round(r['outer_diam'], 3) == 0.
|
36
|
+
assert round(r['outer_diam'], 3) == 0.18
|
37
37
|
assert r['stator']['num_slots'] == 24
|
38
38
|
|
39
39
|
|
File without changes
|
File without changes
|
File without changes
|