femagtools 1.8.16__py3-none-any.whl → 1.8.17__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 CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  """
4
4
  __title__ = 'femagtools'
5
- __version__ = '1.8.16'
5
+ __version__ = '1.8.17'
6
6
  __author__ = 'Ronald Tanner'
7
7
  __license__ = 'BSD'
8
8
  __copyright__ = 'Copyright 2023-2025 Gamma Technology'
femagtools/dxfsl/area.py CHANGED
@@ -958,6 +958,23 @@ class Area(object):
958
958
  return False
959
959
  return True
960
960
 
961
+ def is_line_inside(self, p1, p2):
962
+ if self.is_point_inside(p1):
963
+ if self.is_point_inside(p2):
964
+ logger.debug("Border: Type of area %s is %s",
965
+ self.identifier(), self.type)
966
+ return True
967
+ if self.the_point_is_inside_area(p2):
968
+ logger.debug("Inside: Type of area %s is %s",
969
+ self.identifier(), self.type)
970
+ return True
971
+ elif self.is_point_inside(p2):
972
+ if self.the_point_is_inside_area(p1):
973
+ logger.debug("Inside: Type of area %s is %s",
974
+ self.identifier(), self.type)
975
+ return True
976
+ return False
977
+
961
978
  def get_best_point_inside(self, geom):
962
979
  px1 = self.min_x - 5
963
980
  px2 = self.max_x + 5
@@ -202,6 +202,18 @@ def build_machine_rotor(machine, inner, mindist, plt, EESM=False, single=False):
202
202
  title="Rotor Magnet Slice after Rebuild")
203
203
 
204
204
  rebuild = False
205
+ if machine_temp.magnets_missing(EESM):
206
+ mag = machine_temp.looking_for_one_possible_magnet()
207
+ if mag:
208
+ if machine.is_mirrored():
209
+ rebuild = machine_temp.create_mirror_lines_outside_magnets()
210
+ if machine_temp.create_auxiliary_lines():
211
+ rebuild = True
212
+ if rebuild:
213
+ machine_temp.rebuild_subregions(EESM, single=single)
214
+ machine_temp.geom.force_area_as_magnet(mag)
215
+ return machine_temp
216
+
205
217
  if machine_temp.has_magnets_in_the_middle():
206
218
  logger.debug("Magnets cut")
207
219
  rebuild = machine_temp.create_mirror_lines_outside_magnets()
@@ -432,10 +444,10 @@ def convert(dxfile,
432
444
  return dict(error='unknown location {}'.format(part[1]))
433
445
  else:
434
446
  if da:
435
- logger.warn("distance airgap (da) ignored")
447
+ logger.warning("distance airgap (da) ignored")
436
448
  da = 0.0
437
449
  if dy:
438
- logger.warn("distance yoke (dy) ignored")
450
+ logger.warning("distance yoke (dy) ignored")
439
451
  dy = 0.0
440
452
 
441
453
  split_ini = split
@@ -1064,7 +1076,7 @@ def create_femag_parameters_stator(motor, position):
1064
1076
  params['da1'] = 2*motor.geom.min_radius
1065
1077
  params['slot_area'] = motor.slot_area()
1066
1078
  params['stator'] = _create_stator_parameters(motor)
1067
- params['machine'] = motor
1079
+ #params['machine'] = motor
1068
1080
  return params
1069
1081
 
1070
1082
 
@@ -1080,5 +1092,5 @@ def create_femag_parameters_rotor(motor, position):
1080
1092
  params['da1'] = 2*motor.geom.min_radius
1081
1093
  params['slot_area'] = motor.slot_area()
1082
1094
  params['rotor'] = _create_rotor_parameters(motor)
1083
- params['machine'] = motor
1095
+ #params['machine'] = motor
1084
1096
  return params
@@ -270,7 +270,7 @@ class FslRenderer(object):
270
270
  for area in geom.list_of_areas():
271
271
  if area.number_of_elements() > 1:
272
272
  p = area.get_point_inside(geom)
273
- if p:
273
+ if p and area.type > 0:
274
274
  self.content.append("x0, y0 = {}, {}".format(p[0], p[1]))
275
275
  # self.content.append("point(x0, y0, red, 4)") # for debugging
276
276
  self.content.append("create_mesh_se(x0, y0)")
@@ -324,7 +324,7 @@ class FslRenderer(object):
324
324
  self.content.append(
325
325
  'x0_shaft, y0_shaft = x0, y0')
326
326
 
327
- self.content.append("\n")
327
+ self.content.append("create_mesh(x0, y0)\n")
328
328
 
329
329
  txt = ["if x0_iron_yoke > 0.0 then",
330
330
  " if mcvkey_yoke ~= 'dummy' then",
femagtools/dxfsl/geom.py CHANGED
@@ -2612,6 +2612,7 @@ class Geometry(object):
2612
2612
  areas_inside = [a for a in self.area_list
2613
2613
  if area.is_inside(a, self)]
2614
2614
  if not areas_inside:
2615
+ area.areas_inside = {}
2615
2616
  continue
2616
2617
 
2617
2618
  areas_notouch = {a.identifier(): a for a in areas_inside
@@ -3748,6 +3749,41 @@ class Geometry(object):
3748
3749
 
3749
3750
  logger.debug("end of search_unknown_subregions")
3750
3751
 
3752
+ def possible_magnet_in_the_middle(self, midangle):
3753
+ self.set_areas_inside_for_all_areas()
3754
+ mags = []
3755
+ for n, a in enumerate(self.list_of_areas()):
3756
+ if a.areas_inside:
3757
+ continue
3758
+ if a.close_to_startangle or a.close_to_endangle:
3759
+ continue
3760
+ if np.isclose(a.min_dist, self.min_radius):
3761
+ continue
3762
+ if np.isclose(a.max_dist, self.max_radius):
3763
+ continue
3764
+
3765
+ a_midangle = a.get_mid_angle(self.center)
3766
+ if np.isclose(midangle, a_midangle, atol=1e-2, rtol=1e-2):
3767
+ s = a.area_size()
3768
+ mags.append([s, n, a])
3769
+
3770
+ if not mags:
3771
+ return False
3772
+ mags.sort(reverse=True)
3773
+ s, n, a = mags[0]
3774
+ a.set_type(AREA.TYPE_MAGNET_AIRGAP)
3775
+ a.phi = midangle
3776
+ a.mag_width = (a.max_dist - a.min_dist) * 0.9
3777
+ return a
3778
+
3779
+ def force_area_as_magnet(self, area):
3780
+ for a in self.list_of_areas():
3781
+ if a.is_equal(area, 1e-2):
3782
+ a.set_type(area.type)
3783
+ a.phi = area.phi
3784
+ a.mag_width = area.mag_width
3785
+ return
3786
+
3751
3787
  def magnets_in_the_middle(self, midangle):
3752
3788
  mag_areas = [a for a in self.list_of_areas()
3753
3789
  if a.is_magnet()]
@@ -4188,28 +4224,11 @@ class Geometry(object):
4188
4224
  return True
4189
4225
  return False
4190
4226
 
4191
- def _line_inside_magnets(self, p1, p2):
4192
- for area in self.list_of_areas():
4193
- if area.is_magnet():
4194
- if area.is_point_inside(p1):
4195
- if area.is_point_inside(p2):
4196
- return True
4197
- return False
4198
-
4199
- def _line_inside_air(self, p1, p2):
4200
- for area in self.list_of_areas():
4201
- if area.is_air():
4202
- if area.is_point_inside(p1):
4203
- if area.is_point_inside(p2):
4204
- return True
4205
- return False
4206
-
4207
4227
  def _line_inside_not_iron(self, p1, p2):
4208
4228
  for area in self.list_of_areas():
4209
4229
  if area.is_shaft() or area.is_air() or area.is_magnet():
4210
- if area.is_point_inside(p1):
4211
- if area.is_point_inside(p2):
4212
- return True
4230
+ if area.is_line_inside(p1, p2):
4231
+ return True
4213
4232
  return False
4214
4233
 
4215
4234
  def inside_area_list(self, p):
@@ -1259,6 +1259,11 @@ class Machine(object):
1259
1259
  def has_magnets(self):
1260
1260
  return self.geom.has_magnets
1261
1261
 
1262
+ def magnets_missing(self, EESM):
1263
+ if EESM:
1264
+ return False
1265
+ return not self.has_magnets()
1266
+
1262
1267
  def delete_tiny_elements(self, mindist):
1263
1268
  return self.geom.delete_tiny_elements(mindist)
1264
1269
 
@@ -1320,6 +1325,11 @@ class Machine(object):
1320
1325
  self.endangle)
1321
1326
  return self.geom.magnets_in_the_middle(midangle)
1322
1327
 
1328
+ def looking_for_one_possible_magnet(self):
1329
+ midangle = middle_angle(self.startangle,
1330
+ self.endangle)
1331
+ return self.geom.possible_magnet_in_the_middle(midangle)
1332
+
1323
1333
  def create_mirror_lines_outside_windings(self):
1324
1334
  logger.debug("create_mirror_lines_outside_windings")
1325
1335
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: femagtools
3
- Version: 1.8.16
3
+ Version: 1.8.17
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=yW5kIvW8xbIRiQDkTT8Is4UgEjOhkX7Vqoytu45rvFc,1601
1
+ femagtools/__init__.py,sha256=am_tyjdDpW3WrLQwY_5hXT4qkmY962_B8s3ffUfabsg,1601
2
2
  femagtools/airgap.py,sha256=hELJXe52yUw82JwZ1tGUXUtRhMG2_WSUBVeGkTZSAM8,1900
3
3
  femagtools/amazon.py,sha256=O1ICuv21XDAJi1qK1Sigs2TdS6hDZP19OzvmE2t76wU,12069
4
4
  femagtools/amela.py,sha256=2q-Xsj6i6nQ3iKheBR1vQ4FulJfF1i-L8w3a3U8GYWo,4362
@@ -52,20 +52,20 @@ femagtools/vtu.py,sha256=Sf83dHIfCKY2km-MIUHKKoj-JKN4PDX7kkPLZXyIYY4,10723
52
52
  femagtools/windings.py,sha256=eGRoDbi9yruiWHqZysamBLPJefw8IQX3Lq4KpG4oIKo,28216
53
53
  femagtools/zmq.py,sha256=62x5VRk0TMNER0-EZ8E28IdLKzsttlbxy1U_3wocNLc,9618
54
54
  femagtools/dxfsl/__init__.py,sha256=MywcCdpKPKs4qJBJJgeDsikJFJ2P48dbTuNk303f5pM,76
55
- femagtools/dxfsl/area.py,sha256=CpTMRBF8_AJmJMkkn-LgRv27U5xJ5Ohhd2ppRvESPNU,69757
55
+ femagtools/dxfsl/area.py,sha256=xre3SotFmcNcoGCTTKtFzSRWU_40Xn3BKWHtkXts210,70481
56
56
  femagtools/dxfsl/areabuilder.py,sha256=6dfWryYjXzGIVDOsX2zb1VKIhUzmpL43XhF-wtdesAg,35882
57
57
  femagtools/dxfsl/concat.py,sha256=F6scwesxyOmfmKQ5kGspNCxA71Yz6QgxFL7lTj3hsaI,13385
58
58
  femagtools/dxfsl/conv.py,sha256=rAG_r2twWtcZyLKe8L8gYcC-n-JMG-dK1iMmd9yviTQ,12237
59
- femagtools/dxfsl/converter.py,sha256=PQ92kyRIxKWdrlVpNSvIq_Ska-RDMC26RVM1rluPVk0,40826
59
+ femagtools/dxfsl/converter.py,sha256=FZcvK0qB1_xgUbUqx68l08My-nxTIjNCrv8SuD9eUZc,41360
60
60
  femagtools/dxfsl/corner.py,sha256=-XPBcnEau-2-SRHLYzlBqCQGaFfgm_DH2qR1mSaFoAs,1311
61
61
  femagtools/dxfsl/dumprenderer.py,sha256=n4AvInjvGIaC2iKZtQaYXXDyJVSQ3uEOFOLD4-xfKRY,1861
62
62
  femagtools/dxfsl/dxfparser.py,sha256=kyXG0kZfNyOgn96MqBgP8RhOQhppfB5NbyRNNybs1C0,13451
63
63
  femagtools/dxfsl/femparser.py,sha256=O8940Q1Mz8MKng6W8M3s9KfTvhDLJ56tfQWtZEW3xMM,2134
64
- femagtools/dxfsl/fslrenderer.py,sha256=gaHBJwqPt7fVz-fyphCb-xppmIFvu72zBpeB18eAvko,27826
64
+ femagtools/dxfsl/fslrenderer.py,sha256=QwfR3i20ossNByfAtM7GyTz5yvcR3vnpL2T3-HOeebk,27855
65
65
  femagtools/dxfsl/functions.py,sha256=1RFT2YPR_rTJSKtTqIoO8Z-s_kXKIp95zed83SM0gZg,12784
66
- femagtools/dxfsl/geom.py,sha256=bUa_5103OdNJTzEexYYPvMs9Kx1BSNbvWL9ekETWmI4,178082
66
+ femagtools/dxfsl/geom.py,sha256=VXml10ndn0xxUFZJDdnkvFZwCDNEhnVv_O59i2wDWi4,178717
67
67
  femagtools/dxfsl/journal.py,sha256=r4z52av3k95MjwzypgUJpj8sSAeQoJsS81Uqs1IBLVw,4265
68
- femagtools/dxfsl/machine.py,sha256=_GmGQdrH7yCkRdCCdkm4yALHS1Gwof77zJOZbWtgRPo,57990
68
+ femagtools/dxfsl/machine.py,sha256=qNfim-hpRiSUnC-cUaywpgMs3d_xzL1aFvbhEOfTD3U,58317
69
69
  femagtools/dxfsl/plotrenderer.py,sha256=q2cORuxJEf1Ws6oCY9c0gF6N3kDrcI6WOz3u5Vl6R_c,13823
70
70
  femagtools/dxfsl/shape.py,sha256=uQqbgXIA2_KP2XRdhCfVfGWjcjwzhJ5t9RhiqR9R98c,61668
71
71
  femagtools/dxfsl/svgparser.py,sha256=RY2TU9MK6gOaNmI6w6RNqcw7H9YGmK-NUwvdylKBcsE,3763
@@ -172,7 +172,7 @@ femagtools/templates/stator_msh.mako,sha256=Neze1ielMCk7TrARyhOra91fFQVT8Phsgk2O
172
172
  femagtools/templates/therm-dynamic.mako,sha256=pEz7jrUpopK1-RqgulNnrkSaCZDjfLelsVo6cBqmpac,3142
173
173
  femagtools/templates/therm_static.mako,sha256=ulevp4AP-kZ1_qdScPMaX9tLqvvP0t9lFflWTXgUxaE,1310
174
174
  femagtools/templates/torq_calc.mako,sha256=PH2IXg9ysi0w8N_8YB0IsE3rRj2VE2AYkGortQxFGfQ,2424
175
- femagtools-1.8.16.dist-info/licenses/LICENSE,sha256=NaQe4uvkszQPJmiRPHecfk-Ab9VSRXo8xQLGNVHTeFo,1362
175
+ femagtools-1.8.17.dist-info/licenses/LICENSE,sha256=NaQe4uvkszQPJmiRPHecfk-Ab9VSRXo8xQLGNVHTeFo,1362
176
176
  tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
177
177
  tests/test_afpm.py,sha256=ge5CXnVQ7E5gVViTI9hQOC0hHetBci18pY9prbUCAqU,16849
178
178
  tests/test_airgap_induction.py,sha256=cmpy1og59oWEyCO4oF_zDuc1DUwCbdeebNL1ujpZza4,1065
@@ -222,8 +222,8 @@ tests/moo/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
222
222
  tests/moo/test_algorithm.py,sha256=Em8sFm2vzPmuIzRrBBnUQLU_TYuJHSf-kEeozw0XeX4,2563
223
223
  tests/moo/test_population.py,sha256=FvX9LRCxQx0_E2GxHQ5vKwOYFBQiNbT6Lmv5GmNWjTQ,5471
224
224
  tests/moo/test_problem.py,sha256=ALeP4u7g-dFhfwWL8vxivdrrYzVKPjHMCAXzzgyNZbs,467
225
- femagtools-1.8.16.dist-info/METADATA,sha256=H9y1DOCVUWBJhZgyHDJa1Vqt9r7xHZg9rZUiWXUxEoQ,6213
226
- femagtools-1.8.16.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
227
- femagtools-1.8.16.dist-info/entry_points.txt,sha256=jrvOkZPiN44u1sASeu271VRaVIv5V-uRpN0_N5U_R8c,248
228
- femagtools-1.8.16.dist-info/top_level.txt,sha256=Ri4YWtU8MZTzNje9IKyXhTakNbsrCynuWdon4Yq94Dc,17
229
- femagtools-1.8.16.dist-info/RECORD,,
225
+ femagtools-1.8.17.dist-info/METADATA,sha256=mCopiSFOllthSV5m6Stpw-B_n2P1BplX-DI3MpMXXl4,6213
226
+ femagtools-1.8.17.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
227
+ femagtools-1.8.17.dist-info/entry_points.txt,sha256=jrvOkZPiN44u1sASeu271VRaVIv5V-uRpN0_N5U_R8c,248
228
+ femagtools-1.8.17.dist-info/top_level.txt,sha256=Ri4YWtU8MZTzNje9IKyXhTakNbsrCynuWdon4Yq94Dc,17
229
+ femagtools-1.8.17.dist-info/RECORD,,