femagtools 1.7.5__tar.gz → 1.7.6__tar.gz

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 (226) hide show
  1. {femagtools-1.7.5/src/femagtools.egg-info → femagtools-1.7.6}/PKG-INFO +1 -1
  2. {femagtools-1.7.5 → femagtools-1.7.6}/src/femagtools/__init__.py +1 -1
  3. {femagtools-1.7.5 → femagtools-1.7.6}/src/femagtools/dxfsl/area.py +108 -7
  4. {femagtools-1.7.5 → femagtools-1.7.6}/src/femagtools/dxfsl/conv.py +15 -0
  5. {femagtools-1.7.5 → femagtools-1.7.6}/src/femagtools/dxfsl/converter.py +30 -15
  6. {femagtools-1.7.5 → femagtools-1.7.6}/src/femagtools/dxfsl/fslrenderer.py +3 -0
  7. {femagtools-1.7.5 → femagtools-1.7.6}/src/femagtools/dxfsl/geom.py +89 -17
  8. {femagtools-1.7.5 → femagtools-1.7.6}/src/femagtools/dxfsl/machine.py +26 -9
  9. {femagtools-1.7.5 → femagtools-1.7.6}/src/femagtools/fsl.py +4 -1
  10. {femagtools-1.7.5 → femagtools-1.7.6}/src/femagtools/machine/pm.py +188 -41
  11. {femagtools-1.7.5 → femagtools-1.7.6}/src/femagtools/machine/utils.py +2 -2
  12. {femagtools-1.7.5 → femagtools-1.7.6}/src/femagtools/plot/bch.py +19 -5
  13. {femagtools-1.7.5 → femagtools-1.7.6}/src/femagtools/templates/mesh-airgap.mako +9 -0
  14. {femagtools-1.7.5 → femagtools-1.7.6}/src/femagtools/templates/statorRotor3.mako +3 -0
  15. {femagtools-1.7.5 → femagtools-1.7.6/src/femagtools.egg-info}/PKG-INFO +1 -1
  16. {femagtools-1.7.5 → femagtools-1.7.6}/LICENSE +0 -0
  17. {femagtools-1.7.5 → femagtools-1.7.6}/MANIFEST.in +0 -0
  18. {femagtools-1.7.5 → femagtools-1.7.6}/README.md +0 -0
  19. {femagtools-1.7.5 → femagtools-1.7.6}/pyproject.toml +0 -0
  20. {femagtools-1.7.5 → femagtools-1.7.6}/setup.cfg +0 -0
  21. {femagtools-1.7.5 → femagtools-1.7.6}/src/femagtools/airgap.py +0 -0
  22. {femagtools-1.7.5 → femagtools-1.7.6}/src/femagtools/amazon.py +0 -0
  23. {femagtools-1.7.5 → femagtools-1.7.6}/src/femagtools/amela.py +0 -0
  24. {femagtools-1.7.5 → femagtools-1.7.6}/src/femagtools/asm.py +0 -0
  25. {femagtools-1.7.5 → femagtools-1.7.6}/src/femagtools/bch.py +0 -0
  26. {femagtools-1.7.5 → femagtools-1.7.6}/src/femagtools/bchxml.py +0 -0
  27. {femagtools-1.7.5 → femagtools-1.7.6}/src/femagtools/condor.py +0 -0
  28. {femagtools-1.7.5 → femagtools-1.7.6}/src/femagtools/conductor.py +0 -0
  29. {femagtools-1.7.5 → femagtools-1.7.6}/src/femagtools/config.py +0 -0
  30. {femagtools-1.7.5 → femagtools-1.7.6}/src/femagtools/convert.py +0 -0
  31. {femagtools-1.7.5 → femagtools-1.7.6}/src/femagtools/dakota.py +0 -0
  32. {femagtools-1.7.5 → femagtools-1.7.6}/src/femagtools/dakota_femag.py +0 -0
  33. {femagtools-1.7.5 → femagtools-1.7.6}/src/femagtools/dakotaout.py +0 -0
  34. {femagtools-1.7.5 → femagtools-1.7.6}/src/femagtools/docker.py +0 -0
  35. {femagtools-1.7.5 → femagtools-1.7.6}/src/femagtools/dxfsl/__init__.py +0 -0
  36. {femagtools-1.7.5 → femagtools-1.7.6}/src/femagtools/dxfsl/areabuilder.py +0 -0
  37. {femagtools-1.7.5 → femagtools-1.7.6}/src/femagtools/dxfsl/concat.py +0 -0
  38. {femagtools-1.7.5 → femagtools-1.7.6}/src/femagtools/dxfsl/corner.py +0 -0
  39. {femagtools-1.7.5 → femagtools-1.7.6}/src/femagtools/dxfsl/dumprenderer.py +0 -0
  40. {femagtools-1.7.5 → femagtools-1.7.6}/src/femagtools/dxfsl/dxfparser.py +0 -0
  41. {femagtools-1.7.5 → femagtools-1.7.6}/src/femagtools/dxfsl/femparser.py +0 -0
  42. {femagtools-1.7.5 → femagtools-1.7.6}/src/femagtools/dxfsl/functions.py +0 -0
  43. {femagtools-1.7.5 → femagtools-1.7.6}/src/femagtools/dxfsl/journal.py +0 -0
  44. {femagtools-1.7.5 → femagtools-1.7.6}/src/femagtools/dxfsl/plotrenderer.py +0 -0
  45. {femagtools-1.7.5 → femagtools-1.7.6}/src/femagtools/dxfsl/shape.py +0 -0
  46. {femagtools-1.7.5 → femagtools-1.7.6}/src/femagtools/dxfsl/svgparser.py +0 -0
  47. {femagtools-1.7.5 → femagtools-1.7.6}/src/femagtools/dxfsl/symmetry.py +0 -0
  48. {femagtools-1.7.5 → femagtools-1.7.6}/src/femagtools/ecloss.py +0 -0
  49. {femagtools-1.7.5 → femagtools-1.7.6}/src/femagtools/erg.py +0 -0
  50. {femagtools-1.7.5 → femagtools-1.7.6}/src/femagtools/femag.py +0 -0
  51. {femagtools-1.7.5 → femagtools-1.7.6}/src/femagtools/forcedens.py +0 -0
  52. {femagtools-1.7.5 → femagtools-1.7.6}/src/femagtools/getset.py +0 -0
  53. {femagtools-1.7.5 → femagtools-1.7.6}/src/femagtools/gmsh.py +0 -0
  54. {femagtools-1.7.5 → femagtools-1.7.6}/src/femagtools/google.py +0 -0
  55. {femagtools-1.7.5 → femagtools-1.7.6}/src/femagtools/grid.py +0 -0
  56. {femagtools-1.7.5 → femagtools-1.7.6}/src/femagtools/heat_source_network.py +0 -0
  57. {femagtools-1.7.5 → femagtools-1.7.6}/src/femagtools/hxy.py +0 -0
  58. {femagtools-1.7.5 → femagtools-1.7.6}/src/femagtools/isa7.py +0 -0
  59. {femagtools-1.7.5 → femagtools-1.7.6}/src/femagtools/jhb.py +0 -0
  60. {femagtools-1.7.5 → femagtools-1.7.6}/src/femagtools/job.py +0 -0
  61. {femagtools-1.7.5 → femagtools-1.7.6}/src/femagtools/losscoeffs.py +0 -0
  62. {femagtools-1.7.5 → femagtools-1.7.6}/src/femagtools/machine/__init__.py +0 -0
  63. {femagtools-1.7.5 → femagtools-1.7.6}/src/femagtools/machine/afpm.py +0 -0
  64. {femagtools-1.7.5 → femagtools-1.7.6}/src/femagtools/machine/effloss.py +0 -0
  65. {femagtools-1.7.5 → femagtools-1.7.6}/src/femagtools/machine/im.py +0 -0
  66. {femagtools-1.7.5 → femagtools-1.7.6}/src/femagtools/machine/sizing.py +0 -0
  67. {femagtools-1.7.5 → femagtools-1.7.6}/src/femagtools/machine/sm.py +0 -0
  68. {femagtools-1.7.5 → femagtools-1.7.6}/src/femagtools/magnet.py +0 -0
  69. {femagtools-1.7.5 → femagtools-1.7.6}/src/femagtools/mcv.py +0 -0
  70. {femagtools-1.7.5 → femagtools-1.7.6}/src/femagtools/me.py +0 -0
  71. {femagtools-1.7.5 → femagtools-1.7.6}/src/femagtools/model.py +0 -0
  72. {femagtools-1.7.5 → femagtools-1.7.6}/src/femagtools/moo/__init__.py +0 -0
  73. {femagtools-1.7.5 → femagtools-1.7.6}/src/femagtools/moo/algorithm.py +0 -0
  74. {femagtools-1.7.5 → femagtools-1.7.6}/src/femagtools/moo/population.py +0 -0
  75. {femagtools-1.7.5 → femagtools-1.7.6}/src/femagtools/moo/problem.py +0 -0
  76. {femagtools-1.7.5 → femagtools-1.7.6}/src/femagtools/moo/test/AlgorithmTest.py +0 -0
  77. {femagtools-1.7.5 → femagtools-1.7.6}/src/femagtools/moo/test/PopulationTest.py +0 -0
  78. {femagtools-1.7.5 → femagtools-1.7.6}/src/femagtools/moo/test/ProblemTest.py +0 -0
  79. {femagtools-1.7.5 → femagtools-1.7.6}/src/femagtools/moproblem.py +0 -0
  80. {femagtools-1.7.5 → femagtools-1.7.6}/src/femagtools/multiproc.py +0 -0
  81. {femagtools-1.7.5 → femagtools-1.7.6}/src/femagtools/mxw2msh.py +0 -0
  82. {femagtools-1.7.5 → femagtools-1.7.6}/src/femagtools/nc.py +0 -0
  83. {femagtools-1.7.5 → femagtools-1.7.6}/src/femagtools/netlist.py +0 -0
  84. {femagtools-1.7.5 → femagtools-1.7.6}/src/femagtools/ntib.py +0 -0
  85. {femagtools-1.7.5 → femagtools-1.7.6}/src/femagtools/opt.py +0 -0
  86. {femagtools-1.7.5 → femagtools-1.7.6}/src/femagtools/parstudy.py +0 -0
  87. {femagtools-1.7.5 → femagtools-1.7.6}/src/femagtools/plot/__init__.py +0 -0
  88. {femagtools-1.7.5 → femagtools-1.7.6}/src/femagtools/plot/char.py +0 -0
  89. {femagtools-1.7.5 → femagtools-1.7.6}/src/femagtools/plot/fieldlines.py +0 -0
  90. {femagtools-1.7.5 → femagtools-1.7.6}/src/femagtools/plot/fluxdens.py +0 -0
  91. {femagtools-1.7.5 → femagtools-1.7.6}/src/femagtools/plot/forcedens.py +0 -0
  92. {femagtools-1.7.5 → femagtools-1.7.6}/src/femagtools/plot/mcv.py +0 -0
  93. {femagtools-1.7.5 → femagtools-1.7.6}/src/femagtools/plot/nc.py +0 -0
  94. {femagtools-1.7.5 → femagtools-1.7.6}/src/femagtools/plot/phasor.py +0 -0
  95. {femagtools-1.7.5 → femagtools-1.7.6}/src/femagtools/plot/wdg.py +0 -0
  96. {femagtools-1.7.5 → femagtools-1.7.6}/src/femagtools/poc.py +0 -0
  97. {femagtools-1.7.5 → femagtools-1.7.6}/src/femagtools/svgfsl/converter.py +0 -0
  98. {femagtools-1.7.5 → femagtools-1.7.6}/src/femagtools/templates/FE-losses.mako +0 -0
  99. {femagtools-1.7.5 → femagtools-1.7.6}/src/femagtools/templates/afm_rotor.mako +0 -0
  100. {femagtools-1.7.5 → femagtools-1.7.6}/src/femagtools/templates/afm_stator.mako +0 -0
  101. {femagtools-1.7.5 → femagtools-1.7.6}/src/femagtools/templates/airgapinduc.mako +0 -0
  102. {femagtools-1.7.5 → femagtools-1.7.6}/src/femagtools/templates/asyn_motor.mako +0 -0
  103. {femagtools-1.7.5 → femagtools-1.7.6}/src/femagtools/templates/basic_modpar.mako +0 -0
  104. {femagtools-1.7.5 → femagtools-1.7.6}/src/femagtools/templates/bertotti.mako +0 -0
  105. {femagtools-1.7.5 → femagtools-1.7.6}/src/femagtools/templates/calc_field_ts.mako +0 -0
  106. {femagtools-1.7.5 → femagtools-1.7.6}/src/femagtools/templates/calc_therm_field.mako +0 -0
  107. {femagtools-1.7.5 → femagtools-1.7.6}/src/femagtools/templates/cogg_calc.mako +0 -0
  108. {femagtools-1.7.5 → femagtools-1.7.6}/src/femagtools/templates/colorgrad.mako +0 -0
  109. {femagtools-1.7.5 → femagtools-1.7.6}/src/femagtools/templates/com_motor_sim.mako +0 -0
  110. {femagtools-1.7.5 → femagtools-1.7.6}/src/femagtools/templates/conduct-data.mako +0 -0
  111. {femagtools-1.7.5 → femagtools-1.7.6}/src/femagtools/templates/connect_models.mako +0 -0
  112. {femagtools-1.7.5 → femagtools-1.7.6}/src/femagtools/templates/cu_losses.mako +0 -0
  113. {femagtools-1.7.5 → femagtools-1.7.6}/src/femagtools/templates/displ_stator_rotor.mako +0 -0
  114. {femagtools-1.7.5 → femagtools-1.7.6}/src/femagtools/templates/ec-rotorbar.mako +0 -0
  115. {femagtools-1.7.5 → femagtools-1.7.6}/src/femagtools/templates/fe-contr.mako +0 -0
  116. {femagtools-1.7.5 → femagtools-1.7.6}/src/femagtools/templates/fieldcalc.mako +0 -0
  117. {femagtools-1.7.5 → femagtools-1.7.6}/src/femagtools/templates/gen_winding.mako +0 -0
  118. {femagtools-1.7.5 → femagtools-1.7.6}/src/femagtools/templates/inductances.mako +0 -0
  119. {femagtools-1.7.5 → femagtools-1.7.6}/src/femagtools/templates/ld_lq_fast.mako +0 -0
  120. {femagtools-1.7.5 → femagtools-1.7.6}/src/femagtools/templates/leak_dist_wind.mako +0 -0
  121. {femagtools-1.7.5 → femagtools-1.7.6}/src/femagtools/templates/leak_evol_wind.mako +0 -0
  122. {femagtools-1.7.5 → femagtools-1.7.6}/src/femagtools/templates/leak_tooth_wind.mako +0 -0
  123. {femagtools-1.7.5 → femagtools-1.7.6}/src/femagtools/templates/magnet-data.mako +0 -0
  124. {femagtools-1.7.5 → femagtools-1.7.6}/src/femagtools/templates/magnetFC2.mako +0 -0
  125. {femagtools-1.7.5 → femagtools-1.7.6}/src/femagtools/templates/magnetIron.mako +0 -0
  126. {femagtools-1.7.5 → femagtools-1.7.6}/src/femagtools/templates/magnetIron2.mako +0 -0
  127. {femagtools-1.7.5 → femagtools-1.7.6}/src/femagtools/templates/magnetIron3.mako +0 -0
  128. {femagtools-1.7.5 → femagtools-1.7.6}/src/femagtools/templates/magnetIron4.mako +0 -0
  129. {femagtools-1.7.5 → femagtools-1.7.6}/src/femagtools/templates/magnetIron5.mako +0 -0
  130. {femagtools-1.7.5 → femagtools-1.7.6}/src/femagtools/templates/magnetIronV.mako +0 -0
  131. {femagtools-1.7.5 → femagtools-1.7.6}/src/femagtools/templates/magnetSector.mako +0 -0
  132. {femagtools-1.7.5 → femagtools-1.7.6}/src/femagtools/templates/magnetSectorLinear.mako +0 -0
  133. {femagtools-1.7.5 → femagtools-1.7.6}/src/femagtools/templates/magnetShell.mako +0 -0
  134. {femagtools-1.7.5 → femagtools-1.7.6}/src/femagtools/templates/magnetShell2.mako +0 -0
  135. {femagtools-1.7.5 → femagtools-1.7.6}/src/femagtools/templates/modal_analysis.mako +0 -0
  136. {femagtools-1.7.5 → femagtools-1.7.6}/src/femagtools/templates/modified_steinmetz.mako +0 -0
  137. {femagtools-1.7.5 → femagtools-1.7.6}/src/femagtools/templates/mult_cal_fast.mako +0 -0
  138. {femagtools-1.7.5 → femagtools-1.7.6}/src/femagtools/templates/new_model.mako +0 -0
  139. {femagtools-1.7.5 → femagtools-1.7.6}/src/femagtools/templates/noloadflux-rot.mako +0 -0
  140. {femagtools-1.7.5 → femagtools-1.7.6}/src/femagtools/templates/noloadflux.mako +0 -0
  141. {femagtools-1.7.5 → femagtools-1.7.6}/src/femagtools/templates/noloadfluxdc.mako +0 -0
  142. {femagtools-1.7.5 → femagtools-1.7.6}/src/femagtools/templates/open.mako +0 -0
  143. {femagtools-1.7.5 → femagtools-1.7.6}/src/femagtools/templates/plots.mako +0 -0
  144. {femagtools-1.7.5 → femagtools-1.7.6}/src/femagtools/templates/pm_sym_f_cur.mako +0 -0
  145. {femagtools-1.7.5 → femagtools-1.7.6}/src/femagtools/templates/pm_sym_fast.mako +0 -0
  146. {femagtools-1.7.5 → femagtools-1.7.6}/src/femagtools/templates/pm_sym_loss.mako +0 -0
  147. {femagtools-1.7.5 → femagtools-1.7.6}/src/femagtools/templates/psd_psq_fast.mako +0 -0
  148. {femagtools-1.7.5 → femagtools-1.7.6}/src/femagtools/templates/ring.mako +0 -0
  149. {femagtools-1.7.5 → femagtools-1.7.6}/src/femagtools/templates/rot_hsm.mako +0 -0
  150. {femagtools-1.7.5 → femagtools-1.7.6}/src/femagtools/templates/rotorAsyn.mako +0 -0
  151. {femagtools-1.7.5 → femagtools-1.7.6}/src/femagtools/templates/rotorKs2.mako +0 -0
  152. {femagtools-1.7.5 → femagtools-1.7.6}/src/femagtools/templates/rotor_msh.mako +0 -0
  153. {femagtools-1.7.5 → femagtools-1.7.6}/src/femagtools/templates/rotor_winding.mako +0 -0
  154. {femagtools-1.7.5 → femagtools-1.7.6}/src/femagtools/templates/shortcircuit.mako +0 -0
  155. {femagtools-1.7.5 → femagtools-1.7.6}/src/femagtools/templates/srm.mako +0 -0
  156. {femagtools-1.7.5 → femagtools-1.7.6}/src/femagtools/templates/stator1.mako +0 -0
  157. {femagtools-1.7.5 → femagtools-1.7.6}/src/femagtools/templates/stator2.mako +0 -0
  158. {femagtools-1.7.5 → femagtools-1.7.6}/src/femagtools/templates/stator3Linear.mako +0 -0
  159. {femagtools-1.7.5 → femagtools-1.7.6}/src/femagtools/templates/stator4.mako +0 -0
  160. {femagtools-1.7.5 → femagtools-1.7.6}/src/femagtools/templates/statorBG.mako +0 -0
  161. {femagtools-1.7.5 → femagtools-1.7.6}/src/femagtools/templates/statorRing.mako +0 -0
  162. {femagtools-1.7.5 → femagtools-1.7.6}/src/femagtools/templates/stator_msh.mako +0 -0
  163. {femagtools-1.7.5 → femagtools-1.7.6}/src/femagtools/templates/therm-dynamic.mako +0 -0
  164. {femagtools-1.7.5 → femagtools-1.7.6}/src/femagtools/templates/therm_static.mako +0 -0
  165. {femagtools-1.7.5 → femagtools-1.7.6}/src/femagtools/templates/torq_calc.mako +0 -0
  166. {femagtools-1.7.5 → femagtools-1.7.6}/src/femagtools/tks.py +0 -0
  167. {femagtools-1.7.5 → femagtools-1.7.6}/src/femagtools/ts.py +0 -0
  168. {femagtools-1.7.5 → femagtools-1.7.6}/src/femagtools/utils.py +0 -0
  169. {femagtools-1.7.5 → femagtools-1.7.6}/src/femagtools/vbf.py +0 -0
  170. {femagtools-1.7.5 → femagtools-1.7.6}/src/femagtools/vtu.py +0 -0
  171. {femagtools-1.7.5 → femagtools-1.7.6}/src/femagtools/windings.py +0 -0
  172. {femagtools-1.7.5 → femagtools-1.7.6}/src/femagtools.egg-info/SOURCES.txt +0 -0
  173. {femagtools-1.7.5 → femagtools-1.7.6}/src/femagtools.egg-info/dependency_links.txt +0 -0
  174. {femagtools-1.7.5 → femagtools-1.7.6}/src/femagtools.egg-info/entry_points.txt +0 -0
  175. {femagtools-1.7.5 → femagtools-1.7.6}/src/femagtools.egg-info/requires.txt +0 -0
  176. {femagtools-1.7.5 → femagtools-1.7.6}/src/femagtools.egg-info/top_level.txt +0 -0
  177. {femagtools-1.7.5 → femagtools-1.7.6}/src/tests/__init__.py +0 -0
  178. {femagtools-1.7.5 → femagtools-1.7.6}/src/tests/engines/__init__.py +0 -0
  179. {femagtools-1.7.5 → femagtools-1.7.6}/src/tests/engines/test_amazon.py +0 -0
  180. {femagtools-1.7.5 → femagtools-1.7.6}/src/tests/engines/test_config.py +0 -0
  181. {femagtools-1.7.5 → femagtools-1.7.6}/src/tests/geom/__init__.py +0 -0
  182. {femagtools-1.7.5 → femagtools-1.7.6}/src/tests/geom/test_functions.py +0 -0
  183. {femagtools-1.7.5 → femagtools-1.7.6}/src/tests/geom/test_point_inside.py +0 -0
  184. {femagtools-1.7.5 → femagtools-1.7.6}/src/tests/moo/__init__.py +0 -0
  185. {femagtools-1.7.5 → femagtools-1.7.6}/src/tests/moo/test_algorithm.py +0 -0
  186. {femagtools-1.7.5 → femagtools-1.7.6}/src/tests/moo/test_population.py +0 -0
  187. {femagtools-1.7.5 → femagtools-1.7.6}/src/tests/moo/test_problem.py +0 -0
  188. {femagtools-1.7.5 → femagtools-1.7.6}/src/tests/test_afpm.py +0 -0
  189. {femagtools-1.7.5 → femagtools-1.7.6}/src/tests/test_airgap_induction.py +0 -0
  190. {femagtools-1.7.5 → femagtools-1.7.6}/src/tests/test_amela.py +0 -0
  191. {femagtools-1.7.5 → femagtools-1.7.6}/src/tests/test_asm.py +0 -0
  192. {femagtools-1.7.5 → femagtools-1.7.6}/src/tests/test_bchreader.py +0 -0
  193. {femagtools-1.7.5 → femagtools-1.7.6}/src/tests/test_conductor.py +0 -0
  194. {femagtools-1.7.5 → femagtools-1.7.6}/src/tests/test_convert.py +0 -0
  195. {femagtools-1.7.5 → femagtools-1.7.6}/src/tests/test_dxfsl.py +0 -0
  196. {femagtools-1.7.5 → femagtools-1.7.6}/src/tests/test_effloss.py +0 -0
  197. {femagtools-1.7.5 → femagtools-1.7.6}/src/tests/test_erg.py +0 -0
  198. {femagtools-1.7.5 → femagtools-1.7.6}/src/tests/test_femag.py +0 -0
  199. {femagtools-1.7.5 → femagtools-1.7.6}/src/tests/test_forcedens.py +0 -0
  200. {femagtools-1.7.5 → femagtools-1.7.6}/src/tests/test_fsl.py +0 -0
  201. {femagtools-1.7.5 → femagtools-1.7.6}/src/tests/test_heat_source_network.py +0 -0
  202. {femagtools-1.7.5 → femagtools-1.7.6}/src/tests/test_hxy.py +0 -0
  203. {femagtools-1.7.5 → femagtools-1.7.6}/src/tests/test_im.py +0 -0
  204. {femagtools-1.7.5 → femagtools-1.7.6}/src/tests/test_isa7.py +0 -0
  205. {femagtools-1.7.5 → femagtools-1.7.6}/src/tests/test_jhb.py +0 -0
  206. {femagtools-1.7.5 → femagtools-1.7.6}/src/tests/test_job.py +0 -0
  207. {femagtools-1.7.5 → femagtools-1.7.6}/src/tests/test_losscoeffs.py +0 -0
  208. {femagtools-1.7.5 → femagtools-1.7.6}/src/tests/test_machine.py +0 -0
  209. {femagtools-1.7.5 → femagtools-1.7.6}/src/tests/test_magncurv.py +0 -0
  210. {femagtools-1.7.5 → femagtools-1.7.6}/src/tests/test_magnet.py +0 -0
  211. {femagtools-1.7.5 → femagtools-1.7.6}/src/tests/test_mcv.py +0 -0
  212. {femagtools-1.7.5 → femagtools-1.7.6}/src/tests/test_mcvreader.py +0 -0
  213. {femagtools-1.7.5 → femagtools-1.7.6}/src/tests/test_mcvwriter.py +0 -0
  214. {femagtools-1.7.5 → femagtools-1.7.6}/src/tests/test_me.py +0 -0
  215. {femagtools-1.7.5 → femagtools-1.7.6}/src/tests/test_model.py +0 -0
  216. {femagtools-1.7.5 → femagtools-1.7.6}/src/tests/test_nc.py +0 -0
  217. {femagtools-1.7.5 → femagtools-1.7.6}/src/tests/test_parident.py +0 -0
  218. {femagtools-1.7.5 → femagtools-1.7.6}/src/tests/test_parstudy.py +0 -0
  219. {femagtools-1.7.5 → femagtools-1.7.6}/src/tests/test_pocfile.py +0 -0
  220. {femagtools-1.7.5 → femagtools-1.7.6}/src/tests/test_sizing.py +0 -0
  221. {femagtools-1.7.5 → femagtools-1.7.6}/src/tests/test_sm.py +0 -0
  222. {femagtools-1.7.5 → femagtools-1.7.6}/src/tests/test_tksreader.py +0 -0
  223. {femagtools-1.7.5 → femagtools-1.7.6}/src/tests/test_ts.py +0 -0
  224. {femagtools-1.7.5 → femagtools-1.7.6}/src/tests/test_vbfreader.py +0 -0
  225. {femagtools-1.7.5 → femagtools-1.7.6}/src/tests/test_vtu.py +0 -0
  226. {femagtools-1.7.5 → femagtools-1.7.6}/src/tests/test_windings.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: femagtools
3
- Version: 1.7.5
3
+ Version: 1.7.6
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
@@ -2,7 +2,7 @@
2
2
 
3
3
  """
4
4
  __title__ = 'femagtools'
5
- __version__ = '1.7.5'
5
+ __version__ = '1.7.6'
6
6
  __author__ = 'Ronald Tanner'
7
7
  __license__ = 'BSD'
8
8
  __copyright__ = 'Copyright 2023-2024 Gamma Technology'
@@ -40,6 +40,8 @@ TYPE_MAGNET_OR_IRON = 9
40
40
  TYPE_SHAFT = 10
41
41
  TYPE_MAGNET_RECT_NEAR_AIRGAP = 11
42
42
  TYPE_WINDINGS_OR_AIR = 12
43
+ TYPE_WINDINGS_OR_IRON = 13
44
+ TYPE_FD_WINDINGS = 15
43
45
  TYPE_MAGNET_UNDEFINED = 99
44
46
  TYPE_GROUP = 20
45
47
 
@@ -206,6 +208,8 @@ class Area(object):
206
208
  return 'Iron'
207
209
  if self.type == TYPE_WINDINGS:
208
210
  return 'Windings'
211
+ if self.type == TYPE_FD_WINDINGS:
212
+ return 'Field Windings'
209
213
  if self.type == TYPE_MAGNET_AIRGAP or self.type == TYPE_MAGNET_RECT:
210
214
  return 'Magnet'
211
215
  if self.type == TYPE_YOKE:
@@ -221,6 +225,8 @@ class Area(object):
221
225
  return 'Iron'
222
226
  if self.type == TYPE_WINDINGS:
223
227
  return 'Wndg'
228
+ if self.type == TYPE_FD_WINDINGS:
229
+ return 'FD_Wndg'
224
230
  if self.type == TYPE_MAGNET_AIRGAP or self.type == TYPE_MAGNET_RECT:
225
231
  return 'Mag'
226
232
  if self.type == TYPE_YOKE:
@@ -236,6 +242,8 @@ class Area(object):
236
242
  return 'cyan'
237
243
  if self.type == TYPE_WINDINGS:
238
244
  return 'green'
245
+ if self.type == TYPE_FD_WINDINGS:
246
+ return 'yellow'
239
247
  if self.type == TYPE_MAGNET_AIRGAP or self.type == TYPE_MAGNET_RECT:
240
248
  return 'red'
241
249
  if self.type == TYPE_YOKE:
@@ -251,6 +259,8 @@ class Area(object):
251
259
  return 0.3
252
260
  if self.type == TYPE_WINDINGS:
253
261
  return 1.0
262
+ if self.type == TYPE_FD_WINDINGS:
263
+ return 1.0
254
264
  if self.type == TYPE_MAGNET_AIRGAP or self.type == TYPE_MAGNET_RECT:
255
265
  return 1.0
256
266
  if self.type == TYPE_YOKE:
@@ -277,7 +287,9 @@ class Area(object):
277
287
  return self.type == TYPE_IRON
278
288
 
279
289
  def is_winding(self):
280
- return self.type == TYPE_WINDINGS
290
+ return \
291
+ self.type == TYPE_WINDINGS or \
292
+ self.type == TYPE_FD_WINDINGS
281
293
 
282
294
  def is_magnet(self):
283
295
  return self.type == TYPE_MAGNET_AIRGAP or self.type == TYPE_MAGNET_RECT
@@ -324,6 +336,17 @@ class Area(object):
324
336
  return True
325
337
  return False
326
338
 
339
+ def minmax_dist_from_center(self, center):
340
+ rmin = 1e20
341
+ rmax = 0
342
+ for n in self.list_of_nodes():
343
+ r = np.linalg.norm(np.array(n)-center)
344
+ if r < rmin:
345
+ rmin = r
346
+ if r > rmax:
347
+ rmax = r
348
+ return rmin, rmax
349
+
327
350
  def minmax_angle_dist_from_center(self, center, dist):
328
351
  circ = Circle(Element(center=center, radius=dist))
329
352
  s = self.area[0]
@@ -1315,11 +1338,89 @@ class Area(object):
1315
1338
  logger.debug("***** air #4\n")
1316
1339
  return 0
1317
1340
 
1318
- def mark_rotor_subregions(self, is_inner, mirrored, alpha,
1319
- center, r_in, r_out,
1320
- startangle,
1321
- endangle):
1322
- logger.debug("mark_rotor_subregions")
1341
+ def mark_EESM_rotor_subregions(self,
1342
+ is_inner,
1343
+ mirrored,
1344
+ alpha,
1345
+ center,
1346
+ r_in,
1347
+ r_out,
1348
+ startangle,
1349
+ endangle):
1350
+ logger.debug("mark_EESM_rotor_subregions")
1351
+
1352
+ alpha = round(alpha, 6)
1353
+
1354
+ if self.is_circle():
1355
+ self.type = TYPE_AIR # air
1356
+ logger.debug(">>> air is a circle")
1357
+ return self.type
1358
+
1359
+ if is_inner:
1360
+ self.close_to_ag = np.isclose(r_out, self.max_dist, rtol=1e-9, atol=0.005)
1361
+ close_to_opposition = greater_equal(r_in * 1.05, self.min_dist)
1362
+ airgap_radius = r_out
1363
+ opposite_radius = r_in
1364
+ airgap_toleranz = -(self.max_dist - self.min_dist) / 50.0 # 2%
1365
+ else:
1366
+ self.close_to_ag = np.isclose(r_in, self.min_dist, rtol=1e-9, atol=0.005)
1367
+ close_to_opposition = greater_equal(self.max_dist * 1.05, r_out)
1368
+ airgap_radius = r_in
1369
+ opposite_radius = r_out
1370
+ airgap_toleranz = (self.max_dist - self.min_dist) / 50.0 # 2%
1371
+
1372
+ self.close_to_startangle = np.isclose(self.min_angle, startangle,
1373
+ 1e-04, 1e-04)
1374
+ self.close_to_endangle = np.isclose(self.max_angle, endangle,
1375
+ 1e-04, 1e-04)
1376
+
1377
+ logger.debug("\n***** mark_EESM_rotor_subregions [{}] *****"
1378
+ .format(self.id))
1379
+ logger.debug(" - close_to_ag : %s", self.close_to_ag)
1380
+ logger.debug(" - close_to_opposition: %s", close_to_opposition)
1381
+ logger.debug(" - min dist : %3.12f", self.min_dist)
1382
+ logger.debug(" - max dist : %3.12f", self.max_dist)
1383
+ logger.debug(" - airgap radius : %3.12f", airgap_radius)
1384
+ logger.debug(" - opposite radius : %3.12f", opposite_radius)
1385
+ logger.debug(" - close_to_startangle: %s", self.close_to_startangle)
1386
+ logger.debug(" - close_to_endangle : %s", self.close_to_endangle)
1387
+ logger.debug(" - alpha : %3.12f", alpha)
1388
+ logger.debug(" - min_angle : %3.12f", self.min_angle)
1389
+ logger.debug(" - max_angle : %3.12f", self.max_angle)
1390
+
1391
+ if self.has_iron_separator():
1392
+ logger.debug("***** iron (has iron separator)\n")
1393
+ self.type = TYPE_IRON # iron
1394
+ return self.type
1395
+
1396
+ if is_inner:
1397
+ # looking for shaft
1398
+ if close_to_opposition and not self.close_to_ag:
1399
+ logger.debug("-- check for shaft")
1400
+ if self.is_shaft_area(center):
1401
+ self.type = TYPE_SHAFT # shaft
1402
+ logger.debug("***** shaft (close to opposition)\n")
1403
+ return self.type
1404
+
1405
+ if close_to_opposition or self.close_to_ag:
1406
+ self.type = TYPE_IRON # iron
1407
+ logger.debug("***** iron (close to opposition)\n")
1408
+ return self.type
1409
+
1410
+ self.type = TYPE_WINDINGS_OR_IRON # windings or iron
1411
+ logger.debug("***** air (somewhere)\n")
1412
+ return self.type
1413
+
1414
+ def mark_PMSM_rotor_subregions(self,
1415
+ is_inner,
1416
+ mirrored,
1417
+ alpha,
1418
+ center,
1419
+ r_in,
1420
+ r_out,
1421
+ startangle,
1422
+ endangle):
1423
+ logger.debug("mark_PMSM_rotor_subregions")
1323
1424
 
1324
1425
  alpha = round(alpha, 6)
1325
1426
 
@@ -1346,7 +1447,7 @@ class Area(object):
1346
1447
  self.close_to_endangle = np.isclose(self.max_angle, endangle,
1347
1448
  1e-04, 1e-04)
1348
1449
 
1349
- logger.debug("\n***** mark_rotor_subregions [{}] *****"
1450
+ logger.debug("\n***** mark_PMSM_rotor_subregions [{}] *****"
1350
1451
  .format(self.id))
1351
1452
  logger.debug(" - close_to_ag : %s", self.close_to_ag)
1352
1453
  logger.debug(" - close_to_opposition: %s", close_to_opposition)
@@ -25,6 +25,16 @@ def main():
25
25
  description='Process DXF file and create a plot or FSL file.')
26
26
  argparser.add_argument('dxfile',
27
27
  help='name of DXF file')
28
+ argparser.add_argument('--PMSM',
29
+ help='Permanent Magnet Synchronous Motor',
30
+ dest='PMSM',
31
+ action="store_true",
32
+ default=False)
33
+ argparser.add_argument('--EESM',
34
+ help='Electric Excited Synchronous Motor',
35
+ dest='EESM',
36
+ action="store_true",
37
+ default=False)
28
38
  argparser.add_argument('--inner',
29
39
  help='name of inner element',
30
40
  dest='inner',
@@ -209,12 +219,17 @@ def main():
209
219
  if args.sym_part not in (3, 4, 6, 8):
210
220
  logger.error("Argument sympart not in (3, 4, 6, 8)")
211
221
  sys.exit(1)
222
+ if args.EESM:
223
+ if args.PMSM:
224
+ logger.error("PMSM or EESM expected (default PMSM)")
225
+ sys.exit(1)
212
226
 
213
227
  if not args.write_fsl:
214
228
  if not (args.show_plots or args.show_areas or args.view):
215
229
  args.write_fsl = True
216
230
 
217
231
  res = convert(args.dxfile, # DXF-Filename
232
+ args.EESM, # motor type EESM or PMSM
218
233
  rtol=args.rtol, # relative pickdist toleranz
219
234
  atol=args.atol, # absolute pickdist toleranz
220
235
  symtol=args.sym_tolerance,
@@ -158,7 +158,7 @@ def symmetry_search(machine,
158
158
  return machine_ok
159
159
 
160
160
 
161
- def build_machine_rotor(machine, inner, mindist, plt, single=False):
161
+ def build_machine_rotor(machine, inner, mindist, plt, EESM=False, single=False):
162
162
  logger.debug("Begin of build_machine_rotor")
163
163
  if machine.has_windings():
164
164
  logger.debug("do nothing here with windings in rotor")
@@ -170,7 +170,7 @@ def build_machine_rotor(machine, inner, mindist, plt, single=False):
170
170
  machine_temp = machine.undo_mirror()
171
171
  machine_temp.delete_tiny_elements(mindist)
172
172
  machine_temp.geom.set_rotor()
173
- machine_temp.search_rotor_subregions(single=single)
173
+ machine_temp.search_rotor_subregions(EESM, single=single)
174
174
  else:
175
175
  machine_temp = machine
176
176
 
@@ -199,7 +199,7 @@ def build_machine_rotor(machine, inner, mindist, plt, single=False):
199
199
  logger.debug("Auxiliary Lines created: rebuild subregions")
200
200
  rebuild = True
201
201
  if rebuild:
202
- machine_temp.rebuild_subregions(single=single)
202
+ machine_temp.rebuild_subregions(EESM, single=single)
203
203
 
204
204
  machine_temp.geom.recalculate_magnet_orientation()
205
205
  if inner:
@@ -215,7 +215,7 @@ def build_machine_rotor(machine, inner, mindist, plt, single=False):
215
215
  return machine_temp
216
216
 
217
217
 
218
- def build_machine_stator(machine, inner, mindist, plt, single=False):
218
+ def build_machine_stator(machine, inner, mindist, plt, EESM=False, single=False):
219
219
  logger.debug("Begin of build_machine_stator")
220
220
  if not machine.geom.is_stator():
221
221
  logger.debug("Rotor with windings")
@@ -230,7 +230,7 @@ def build_machine_stator(machine, inner, mindist, plt, single=False):
230
230
  else:
231
231
  machine_temp = machine
232
232
  if machine_temp.create_auxiliary_lines():
233
- machine_temp.rebuild_subregions(single=single)
233
+ machine_temp.rebuild_subregions(EESM, single=single)
234
234
 
235
235
  if inner:
236
236
  machine_temp.create_inner_corner_areas()
@@ -246,6 +246,7 @@ def build_machine_stator(machine, inner, mindist, plt, single=False):
246
246
 
247
247
 
248
248
  def convert(dxfile,
249
+ EESM=False,
249
250
  rtol=1e-04,
250
251
  atol=1e-03,
251
252
  mindist=0.01,
@@ -505,34 +506,38 @@ def convert(dxfile,
505
506
 
506
507
  machine_inner.sync_with_counterpart(machine_outer)
507
508
 
508
- machine_inner.search_subregions()
509
- machine_outer.search_subregions()
509
+ machine_inner.search_subregions(EESM)
510
+ machine_outer.search_subregions(EESM)
510
511
 
511
512
  # Inner mirrored rotor
512
513
  if machine_inner.geom.is_rotor():
513
514
  machine_inner = build_machine_rotor(machine_inner,
514
515
  True, # is inner
515
516
  mindist,
516
- p)
517
+ p,
518
+ EESM=EESM)
517
519
 
518
520
  # Outer mirrored rotor
519
521
  if machine_outer.geom.is_rotor():
520
522
  machine_outer = build_machine_rotor(machine_outer,
521
523
  False, # is outer
522
524
  mindist,
523
- p)
525
+ p,
526
+ EESM=EESM)
524
527
 
525
528
  if machine_inner.geom.is_stator() or machine_inner.has_windings():
526
529
  machine_inner = build_machine_stator(machine_inner,
527
530
  True,
528
531
  mindist,
529
- p)
532
+ p,
533
+ EESM=EESM)
530
534
 
531
535
  if machine_outer.geom.is_stator() or machine_outer.has_windings():
532
536
  machine_outer = build_machine_stator(machine_outer,
533
537
  False,
534
538
  mindist,
535
- p)
539
+ p,
540
+ EESM=EESM)
536
541
  machine_inner.sync_with_counterpart(machine_outer)
537
542
 
538
543
  machine_inner.search_critical_elements(mindist)
@@ -707,20 +712,30 @@ def convert(dxfile,
707
712
  machine.geom.set_stator()
708
713
  machine.set_inner_or_outer(part[1])
709
714
  machine.search_stator_subregions(single=True)
710
- machine = build_machine_stator(machine, inner, mindist, p, single=True)
715
+ machine = build_machine_stator(machine,
716
+ inner,
717
+ mindist,
718
+ p,
719
+ EESM=EESM,
720
+ single=True)
711
721
 
712
722
  params = create_femag_parameters_stator(machine,
713
723
  part[1])
714
724
  else:
715
725
  machine.geom.set_rotor()
716
726
  machine.set_inner_or_outer(part[1])
717
- machine.search_rotor_subregions(single=True)
718
- machine = build_machine_rotor(machine, inner, mindist, p, single=True)
727
+ machine.search_rotor_subregions(EESM, single=True)
728
+ machine = build_machine_rotor(machine,
729
+ inner,
730
+ mindist,
731
+ p,
732
+ EESM=EESM,
733
+ single=True)
719
734
 
720
735
  params = create_femag_parameters_rotor(machine,
721
736
  part[1])
722
737
  else:
723
- machine.search_subregions(single=True)
738
+ machine.search_subregions(EESM, single=True)
724
739
 
725
740
  machine.create_inner_corner_areas()
726
741
 
@@ -254,6 +254,9 @@ class FslRenderer(object):
254
254
  if area.type not in subregions:
255
255
  subregions[area.type] = 1
256
256
  num_windings += 1
257
+ rmin, rmax = area.minmax_dist_from_center((0,0))
258
+ self.content.append(
259
+ f'rcoil_{num_windings} = {rmin}, {rmax}')
257
260
  self.content.append('m.xcoil_{}, m.ycoil_{} = x0, y0'.
258
261
  format(num_windings, num_windings))
259
262
 
@@ -3040,11 +3040,20 @@ class Geometry(object):
3040
3040
  for e in elist:
3041
3041
  e.init_attributes('lightblue', 'no_fsl')
3042
3042
 
3043
- def search_subregions(self, startangle, endangle, single=False):
3043
+ def search_subregions(self, startangle, endangle, EESM, single=False):
3044
3044
  if self.is_stator():
3045
- self.search_stator_subregions(startangle, endangle, single=single)
3045
+ self.search_stator_subregions(startangle,
3046
+ endangle,
3047
+ single=single)
3046
3048
  elif self.is_rotor():
3047
- self.search_rotor_subregions(startangle, endangle, single=single)
3049
+ if EESM:
3050
+ self.search_EESM_rotor_subregions(startangle,
3051
+ endangle,
3052
+ single=single)
3053
+ else:
3054
+ self.search_PMSM_rotor_subregions(startangle,
3055
+ endangle,
3056
+ single=single)
3048
3057
  else:
3049
3058
  logger.warning("no stator or rotor assigned")
3050
3059
  self.search_unknown_subregions()
@@ -3262,25 +3271,88 @@ class Geometry(object):
3262
3271
  self.check_shaft_area(shaft_areas[0])
3263
3272
  logger.debug("End of search_stator_subregions")
3264
3273
 
3265
- def search_rotor_subregions(self,
3266
- startangle,
3267
- endangle,
3268
- single=False):
3269
- logger.debug("Begin of search_rotor_subregions")
3274
+ def search_EESM_rotor_subregions(self,
3275
+ startangle,
3276
+ endangle,
3277
+ single=False):
3278
+ logger.debug("Begin of search_EESM_rotor_subregions")
3279
+
3280
+ if self.alfa == 0.0:
3281
+ self.alfa = np.pi * 2.0
3282
+
3283
+ types = {}
3284
+ for area in self.list_of_areas():
3285
+ t = area.mark_EESM_rotor_subregions(self.is_inner,
3286
+ self.is_mirrored(),
3287
+ self.alfa,
3288
+ self.center,
3289
+ self.min_radius,
3290
+ self.max_radius,
3291
+ startangle,
3292
+ endangle)
3293
+ if t in types:
3294
+ types[t] += 1
3295
+ else:
3296
+ types[t] = 1
3297
+
3298
+ windings = [a for a in self.list_of_areas()
3299
+ if a.is_type(AREA.TYPE_WINDINGS_OR_IRON)]
3300
+
3301
+ if self.is_mirrored():
3302
+ [a.set_type(AREA.TYPE_IRON) for a in windings
3303
+ if a.close_to_endangle]
3304
+ wlist = [(a.max_angle, a) for a in self.list_of_areas()
3305
+ if a.is_type(AREA.TYPE_WINDINGS_OR_IRON)]
3306
+ if wlist:
3307
+ wlist.sort(reverse=True)
3308
+ a, w = wlist[0]
3309
+ w.set_type(AREA.TYPE_FD_WINDINGS)
3310
+ else:
3311
+ midangle = middle_angle(startangle, endangle)
3312
+ [a.set_type(AREA.TYPE_IRON) for a in windings
3313
+ if a.max_angle > midangle and a.min_angle < midangle]
3314
+ windings = [a for a in self.list_of_areas()
3315
+ if a.is_type(AREA.TYPE_WINDINGS_OR_IRON)]
3316
+ if len(windings) > 1:
3317
+ wlist = []
3318
+ for w in windings:
3319
+ if w.max_angle < midangle:
3320
+ angle = alpha_angle(w.max_angle, midangle)
3321
+ else:
3322
+ angle = alpha_angle(midangle, w.min_angle)
3323
+ wlist.append((angle, w))
3324
+ wlist.sort()
3325
+ a1, w1 = wlist[0]
3326
+ a2, w2 = wlist[1]
3327
+ if np.isclose(a1, a2):
3328
+ w1.set_type(AREA.TYPE_FD_WINDINGS)
3329
+ w2.set_type(AREA.TYPE_FD_WINDINGS)
3330
+
3331
+ # all remaining areas are in iron
3332
+ [a.set_type(AREA.TYPE_IRON) for a in self.list_of_areas()
3333
+ if a.is_type(AREA.TYPE_WINDINGS_OR_IRON)]
3334
+
3335
+ logger.debug("End of search_EESM_rotor_subregions")
3336
+
3337
+ def search_PMSM_rotor_subregions(self,
3338
+ startangle,
3339
+ endangle,
3340
+ single=False):
3341
+ logger.debug("Begin of search_PMSM_rotor_subregions")
3270
3342
 
3271
3343
  if self.alfa == 0.0:
3272
3344
  self.alfa = np.pi * 2.0
3273
3345
 
3274
3346
  types = {}
3275
3347
  for area in self.list_of_areas():
3276
- t = area.mark_rotor_subregions(self.is_inner,
3277
- self.is_mirrored(),
3278
- self.alfa,
3279
- self.center,
3280
- self.min_radius,
3281
- self.max_radius,
3282
- startangle,
3283
- endangle)
3348
+ t = area.mark_PMSM_rotor_subregions(self.is_inner,
3349
+ self.is_mirrored(),
3350
+ self.alfa,
3351
+ self.center,
3352
+ self.min_radius,
3353
+ self.max_radius,
3354
+ startangle,
3355
+ endangle)
3284
3356
  if t in types:
3285
3357
  types[t] += 1
3286
3358
  else:
@@ -3408,7 +3480,7 @@ class Geometry(object):
3408
3480
  self.search_stator_subregions(startangle, endangle, single=single)
3409
3481
  return
3410
3482
 
3411
- logger.debug("end of search_rotor_subregions")
3483
+ logger.debug("end of search_PMSM_rotor_subregions")
3412
3484
 
3413
3485
  def recalculate_magnet_orientation(self):
3414
3486
  logger.debug("begin of recalculate_magnet_orientation")
@@ -1046,21 +1046,36 @@ class Machine(object):
1046
1046
  cp_machine.geom.sym_counterpart = self.get_symmetry_part()
1047
1047
  cp_machine.geom.sym_part = cp_machine.get_symmetry_part()
1048
1048
 
1049
- def search_subregions(self, single=False):
1049
+ def search_subregions(self, EESM, single=False):
1050
1050
  logger.debug("Search subregions")
1051
- self.geom.search_subregions(self.startangle, self.endangle, single=single)
1052
-
1053
- def search_rotor_subregions(self, single=False):
1054
- self.geom.search_rotor_subregions(self.startangle, self.endangle, single=single)
1051
+ self.geom.search_subregions(self.startangle,
1052
+ self.endangle,
1053
+ EESM,
1054
+ single=single)
1055
+
1056
+ def search_rotor_subregions(self, EESM, single=False):
1057
+ if EESM:
1058
+ self.geom.search_EESM_rotor_subregions(self.startangle,
1059
+ self.endangle,
1060
+ single=single)
1061
+ else:
1062
+ self.geom.search_PMSM_rotor_subregions(self.startangle,
1063
+ self.endangle,
1064
+ single=single)
1055
1065
 
1056
1066
  def search_stator_subregions(self, single=False):
1057
- self.geom.search_stator_subregions(self.startangle, self.endangle, single=single)
1067
+ self.geom.search_stator_subregions(self.startangle,
1068
+ self.endangle,
1069
+ single=single)
1058
1070
 
1059
- def rebuild_subregions(self, single=False):
1071
+ def rebuild_subregions(self, EESM, single=False):
1060
1072
  logger.debug("Rebuild subregions")
1061
1073
  self.geom.set_edge_attributes()
1062
1074
  self.geom.area_list = []
1063
- self.geom.search_subregions(self.startangle, self.endangle, single=single)
1075
+ self.geom.search_subregions(self.startangle,
1076
+ self.endangle,
1077
+ EESM,
1078
+ single=single)
1064
1079
 
1065
1080
  def has_windings(self):
1066
1081
  return self.geom.has_windings
@@ -1170,7 +1185,9 @@ class Machine(object):
1170
1185
  self.geom.area_list = []
1171
1186
  logger.debug("create subregions again")
1172
1187
  self.geom.create_list_of_areas()
1173
- self.geom.search_subregions(self.startangle, self.endangle)
1188
+ self.geom.search_subregions(self.startangle,
1189
+ self.endangle,
1190
+ False)
1174
1191
 
1175
1192
  logger.debug("end create_mirror_lines_outside_windings")
1176
1193
 
@@ -768,7 +768,10 @@ class Builder:
768
768
 
769
769
  return (fslmodel + self.create_analysis(sim) +
770
770
  ['save_model("close")'])
771
-
771
+
772
+ def create_detailed_wire(self, params, templ):
773
+ return self.__render(params, templ)
774
+
772
775
  def __render(self, model, templ, stator=False, magnet=False):
773
776
  if templ.split('.')[-1] in ('fsl', 'mako'):
774
777
  try: