femagtools 1.8.0__tar.gz → 1.8.1__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 (227) hide show
  1. {femagtools-1.8.0/src/femagtools.egg-info → femagtools-1.8.1}/PKG-INFO +1 -1
  2. {femagtools-1.8.0 → femagtools-1.8.1}/src/femagtools/__init__.py +1 -1
  3. {femagtools-1.8.0 → femagtools-1.8.1}/src/femagtools/dxfsl/area.py +2 -2
  4. {femagtools-1.8.0 → femagtools-1.8.1}/src/femagtools/dxfsl/conv.py +0 -5
  5. {femagtools-1.8.0 → femagtools-1.8.1}/src/femagtools/dxfsl/converter.py +42 -8
  6. {femagtools-1.8.0 → femagtools-1.8.1}/src/femagtools/dxfsl/fslrenderer.py +9 -1
  7. {femagtools-1.8.0 → femagtools-1.8.1}/src/femagtools/dxfsl/geom.py +122 -73
  8. {femagtools-1.8.0 → femagtools-1.8.1}/src/femagtools/dxfsl/machine.py +5 -2
  9. {femagtools-1.8.0 → femagtools-1.8.1}/src/femagtools/ecloss.py +13 -8
  10. {femagtools-1.8.0 → femagtools-1.8.1}/src/femagtools/femag.py +61 -29
  11. {femagtools-1.8.0 → femagtools-1.8.1}/src/femagtools/fsl.py +21 -6
  12. {femagtools-1.8.0 → femagtools-1.8.1}/src/femagtools/machine/sm.py +5 -11
  13. {femagtools-1.8.0 → femagtools-1.8.1}/src/femagtools/templates/afm_rotor.mako +4 -0
  14. {femagtools-1.8.0 → femagtools-1.8.1}/src/femagtools/templates/prepare_thermal.mako +57 -54
  15. {femagtools-1.8.0 → femagtools-1.8.1/src/femagtools.egg-info}/PKG-INFO +1 -1
  16. {femagtools-1.8.0 → femagtools-1.8.1}/LICENSE +0 -0
  17. {femagtools-1.8.0 → femagtools-1.8.1}/MANIFEST.in +0 -0
  18. {femagtools-1.8.0 → femagtools-1.8.1}/README.md +0 -0
  19. {femagtools-1.8.0 → femagtools-1.8.1}/pyproject.toml +0 -0
  20. {femagtools-1.8.0 → femagtools-1.8.1}/setup.cfg +0 -0
  21. {femagtools-1.8.0 → femagtools-1.8.1}/src/femagtools/airgap.py +0 -0
  22. {femagtools-1.8.0 → femagtools-1.8.1}/src/femagtools/amazon.py +0 -0
  23. {femagtools-1.8.0 → femagtools-1.8.1}/src/femagtools/amela.py +0 -0
  24. {femagtools-1.8.0 → femagtools-1.8.1}/src/femagtools/asm.py +0 -0
  25. {femagtools-1.8.0 → femagtools-1.8.1}/src/femagtools/bch.py +0 -0
  26. {femagtools-1.8.0 → femagtools-1.8.1}/src/femagtools/bchxml.py +0 -0
  27. {femagtools-1.8.0 → femagtools-1.8.1}/src/femagtools/condor.py +0 -0
  28. {femagtools-1.8.0 → femagtools-1.8.1}/src/femagtools/conductor.py +0 -0
  29. {femagtools-1.8.0 → femagtools-1.8.1}/src/femagtools/config.py +0 -0
  30. {femagtools-1.8.0 → femagtools-1.8.1}/src/femagtools/convert.py +0 -0
  31. {femagtools-1.8.0 → femagtools-1.8.1}/src/femagtools/dakota.py +0 -0
  32. {femagtools-1.8.0 → femagtools-1.8.1}/src/femagtools/dakota_femag.py +0 -0
  33. {femagtools-1.8.0 → femagtools-1.8.1}/src/femagtools/dakotaout.py +0 -0
  34. {femagtools-1.8.0 → femagtools-1.8.1}/src/femagtools/docker.py +0 -0
  35. {femagtools-1.8.0 → femagtools-1.8.1}/src/femagtools/dxfsl/__init__.py +0 -0
  36. {femagtools-1.8.0 → femagtools-1.8.1}/src/femagtools/dxfsl/areabuilder.py +0 -0
  37. {femagtools-1.8.0 → femagtools-1.8.1}/src/femagtools/dxfsl/concat.py +0 -0
  38. {femagtools-1.8.0 → femagtools-1.8.1}/src/femagtools/dxfsl/corner.py +0 -0
  39. {femagtools-1.8.0 → femagtools-1.8.1}/src/femagtools/dxfsl/dumprenderer.py +0 -0
  40. {femagtools-1.8.0 → femagtools-1.8.1}/src/femagtools/dxfsl/dxfparser.py +0 -0
  41. {femagtools-1.8.0 → femagtools-1.8.1}/src/femagtools/dxfsl/femparser.py +0 -0
  42. {femagtools-1.8.0 → femagtools-1.8.1}/src/femagtools/dxfsl/functions.py +0 -0
  43. {femagtools-1.8.0 → femagtools-1.8.1}/src/femagtools/dxfsl/journal.py +0 -0
  44. {femagtools-1.8.0 → femagtools-1.8.1}/src/femagtools/dxfsl/plotrenderer.py +0 -0
  45. {femagtools-1.8.0 → femagtools-1.8.1}/src/femagtools/dxfsl/shape.py +0 -0
  46. {femagtools-1.8.0 → femagtools-1.8.1}/src/femagtools/dxfsl/svgparser.py +0 -0
  47. {femagtools-1.8.0 → femagtools-1.8.1}/src/femagtools/dxfsl/symmetry.py +0 -0
  48. {femagtools-1.8.0 → femagtools-1.8.1}/src/femagtools/erg.py +0 -0
  49. {femagtools-1.8.0 → femagtools-1.8.1}/src/femagtools/forcedens.py +0 -0
  50. {femagtools-1.8.0 → femagtools-1.8.1}/src/femagtools/getset.py +0 -0
  51. {femagtools-1.8.0 → femagtools-1.8.1}/src/femagtools/gmsh.py +0 -0
  52. {femagtools-1.8.0 → femagtools-1.8.1}/src/femagtools/google.py +0 -0
  53. {femagtools-1.8.0 → femagtools-1.8.1}/src/femagtools/grid.py +0 -0
  54. {femagtools-1.8.0 → femagtools-1.8.1}/src/femagtools/heat_source_network.py +0 -0
  55. {femagtools-1.8.0 → femagtools-1.8.1}/src/femagtools/hxy.py +0 -0
  56. {femagtools-1.8.0 → femagtools-1.8.1}/src/femagtools/isa7.py +0 -0
  57. {femagtools-1.8.0 → femagtools-1.8.1}/src/femagtools/jhb.py +0 -0
  58. {femagtools-1.8.0 → femagtools-1.8.1}/src/femagtools/job.py +0 -0
  59. {femagtools-1.8.0 → femagtools-1.8.1}/src/femagtools/losscoeffs.py +0 -0
  60. {femagtools-1.8.0 → femagtools-1.8.1}/src/femagtools/machine/__init__.py +0 -0
  61. {femagtools-1.8.0 → femagtools-1.8.1}/src/femagtools/machine/afpm.py +0 -0
  62. {femagtools-1.8.0 → femagtools-1.8.1}/src/femagtools/machine/effloss.py +0 -0
  63. {femagtools-1.8.0 → femagtools-1.8.1}/src/femagtools/machine/im.py +0 -0
  64. {femagtools-1.8.0 → femagtools-1.8.1}/src/femagtools/machine/pm.py +0 -0
  65. {femagtools-1.8.0 → femagtools-1.8.1}/src/femagtools/machine/sizing.py +0 -0
  66. {femagtools-1.8.0 → femagtools-1.8.1}/src/femagtools/machine/utils.py +0 -0
  67. {femagtools-1.8.0 → femagtools-1.8.1}/src/femagtools/magnet.py +0 -0
  68. {femagtools-1.8.0 → femagtools-1.8.1}/src/femagtools/mcv.py +0 -0
  69. {femagtools-1.8.0 → femagtools-1.8.1}/src/femagtools/me.py +0 -0
  70. {femagtools-1.8.0 → femagtools-1.8.1}/src/femagtools/model.py +0 -0
  71. {femagtools-1.8.0 → femagtools-1.8.1}/src/femagtools/moo/__init__.py +0 -0
  72. {femagtools-1.8.0 → femagtools-1.8.1}/src/femagtools/moo/algorithm.py +0 -0
  73. {femagtools-1.8.0 → femagtools-1.8.1}/src/femagtools/moo/population.py +0 -0
  74. {femagtools-1.8.0 → femagtools-1.8.1}/src/femagtools/moo/problem.py +0 -0
  75. {femagtools-1.8.0 → femagtools-1.8.1}/src/femagtools/moo/test/AlgorithmTest.py +0 -0
  76. {femagtools-1.8.0 → femagtools-1.8.1}/src/femagtools/moo/test/PopulationTest.py +0 -0
  77. {femagtools-1.8.0 → femagtools-1.8.1}/src/femagtools/moo/test/ProblemTest.py +0 -0
  78. {femagtools-1.8.0 → femagtools-1.8.1}/src/femagtools/moproblem.py +0 -0
  79. {femagtools-1.8.0 → femagtools-1.8.1}/src/femagtools/multiproc.py +0 -0
  80. {femagtools-1.8.0 → femagtools-1.8.1}/src/femagtools/mxw2msh.py +0 -0
  81. {femagtools-1.8.0 → femagtools-1.8.1}/src/femagtools/nc.py +0 -0
  82. {femagtools-1.8.0 → femagtools-1.8.1}/src/femagtools/netlist.py +0 -0
  83. {femagtools-1.8.0 → femagtools-1.8.1}/src/femagtools/ntib.py +0 -0
  84. {femagtools-1.8.0 → femagtools-1.8.1}/src/femagtools/opt.py +0 -0
  85. {femagtools-1.8.0 → femagtools-1.8.1}/src/femagtools/parstudy.py +0 -0
  86. {femagtools-1.8.0 → femagtools-1.8.1}/src/femagtools/plot/__init__.py +0 -0
  87. {femagtools-1.8.0 → femagtools-1.8.1}/src/femagtools/plot/bch.py +0 -0
  88. {femagtools-1.8.0 → femagtools-1.8.1}/src/femagtools/plot/char.py +0 -0
  89. {femagtools-1.8.0 → femagtools-1.8.1}/src/femagtools/plot/fieldlines.py +0 -0
  90. {femagtools-1.8.0 → femagtools-1.8.1}/src/femagtools/plot/fluxdens.py +0 -0
  91. {femagtools-1.8.0 → femagtools-1.8.1}/src/femagtools/plot/forcedens.py +0 -0
  92. {femagtools-1.8.0 → femagtools-1.8.1}/src/femagtools/plot/mcv.py +0 -0
  93. {femagtools-1.8.0 → femagtools-1.8.1}/src/femagtools/plot/nc.py +0 -0
  94. {femagtools-1.8.0 → femagtools-1.8.1}/src/femagtools/plot/phasor.py +0 -0
  95. {femagtools-1.8.0 → femagtools-1.8.1}/src/femagtools/plot/wdg.py +0 -0
  96. {femagtools-1.8.0 → femagtools-1.8.1}/src/femagtools/poc.py +0 -0
  97. {femagtools-1.8.0 → femagtools-1.8.1}/src/femagtools/svgfsl/converter.py +0 -0
  98. {femagtools-1.8.0 → femagtools-1.8.1}/src/femagtools/templates/FE-losses.mako +0 -0
  99. {femagtools-1.8.0 → femagtools-1.8.1}/src/femagtools/templates/afm_stator.mako +0 -0
  100. {femagtools-1.8.0 → femagtools-1.8.1}/src/femagtools/templates/airgapinduc.mako +0 -0
  101. {femagtools-1.8.0 → femagtools-1.8.1}/src/femagtools/templates/asyn_motor.mako +0 -0
  102. {femagtools-1.8.0 → femagtools-1.8.1}/src/femagtools/templates/basic_modpar.mako +0 -0
  103. {femagtools-1.8.0 → femagtools-1.8.1}/src/femagtools/templates/bertotti.mako +0 -0
  104. {femagtools-1.8.0 → femagtools-1.8.1}/src/femagtools/templates/calc_field_ts.mako +0 -0
  105. {femagtools-1.8.0 → femagtools-1.8.1}/src/femagtools/templates/calc_therm_field.mako +0 -0
  106. {femagtools-1.8.0 → femagtools-1.8.1}/src/femagtools/templates/cogg_calc.mako +0 -0
  107. {femagtools-1.8.0 → femagtools-1.8.1}/src/femagtools/templates/colorgrad.mako +0 -0
  108. {femagtools-1.8.0 → femagtools-1.8.1}/src/femagtools/templates/com_motor_sim.mako +0 -0
  109. {femagtools-1.8.0 → femagtools-1.8.1}/src/femagtools/templates/conduct-data.mako +0 -0
  110. {femagtools-1.8.0 → femagtools-1.8.1}/src/femagtools/templates/connect_models.mako +0 -0
  111. {femagtools-1.8.0 → femagtools-1.8.1}/src/femagtools/templates/cu_losses.mako +0 -0
  112. {femagtools-1.8.0 → femagtools-1.8.1}/src/femagtools/templates/displ_stator_rotor.mako +0 -0
  113. {femagtools-1.8.0 → femagtools-1.8.1}/src/femagtools/templates/ec-rotorbar.mako +0 -0
  114. {femagtools-1.8.0 → femagtools-1.8.1}/src/femagtools/templates/fe-contr.mako +0 -0
  115. {femagtools-1.8.0 → femagtools-1.8.1}/src/femagtools/templates/fieldcalc.mako +0 -0
  116. {femagtools-1.8.0 → femagtools-1.8.1}/src/femagtools/templates/gen_hairpin_winding.mako +0 -0
  117. {femagtools-1.8.0 → femagtools-1.8.1}/src/femagtools/templates/gen_winding.mako +0 -0
  118. {femagtools-1.8.0 → femagtools-1.8.1}/src/femagtools/templates/inductances.mako +0 -0
  119. {femagtools-1.8.0 → femagtools-1.8.1}/src/femagtools/templates/ld_lq_fast.mako +0 -0
  120. {femagtools-1.8.0 → femagtools-1.8.1}/src/femagtools/templates/leak_dist_wind.mako +0 -0
  121. {femagtools-1.8.0 → femagtools-1.8.1}/src/femagtools/templates/leak_evol_wind.mako +0 -0
  122. {femagtools-1.8.0 → femagtools-1.8.1}/src/femagtools/templates/leak_tooth_wind.mako +0 -0
  123. {femagtools-1.8.0 → femagtools-1.8.1}/src/femagtools/templates/magnet-data.mako +0 -0
  124. {femagtools-1.8.0 → femagtools-1.8.1}/src/femagtools/templates/magnetFC2.mako +0 -0
  125. {femagtools-1.8.0 → femagtools-1.8.1}/src/femagtools/templates/magnetIron.mako +0 -0
  126. {femagtools-1.8.0 → femagtools-1.8.1}/src/femagtools/templates/magnetIron2.mako +0 -0
  127. {femagtools-1.8.0 → femagtools-1.8.1}/src/femagtools/templates/magnetIron3.mako +0 -0
  128. {femagtools-1.8.0 → femagtools-1.8.1}/src/femagtools/templates/magnetIron4.mako +0 -0
  129. {femagtools-1.8.0 → femagtools-1.8.1}/src/femagtools/templates/magnetIron5.mako +0 -0
  130. {femagtools-1.8.0 → femagtools-1.8.1}/src/femagtools/templates/magnetIronV.mako +0 -0
  131. {femagtools-1.8.0 → femagtools-1.8.1}/src/femagtools/templates/magnetSector.mako +0 -0
  132. {femagtools-1.8.0 → femagtools-1.8.1}/src/femagtools/templates/magnetSectorLinear.mako +0 -0
  133. {femagtools-1.8.0 → femagtools-1.8.1}/src/femagtools/templates/magnetShell.mako +0 -0
  134. {femagtools-1.8.0 → femagtools-1.8.1}/src/femagtools/templates/magnetShell2.mako +0 -0
  135. {femagtools-1.8.0 → femagtools-1.8.1}/src/femagtools/templates/mesh-airgap.mako +0 -0
  136. {femagtools-1.8.0 → femagtools-1.8.1}/src/femagtools/templates/modal_analysis.mako +0 -0
  137. {femagtools-1.8.0 → femagtools-1.8.1}/src/femagtools/templates/modified_steinmetz.mako +0 -0
  138. {femagtools-1.8.0 → femagtools-1.8.1}/src/femagtools/templates/mult_cal_fast.mako +0 -0
  139. {femagtools-1.8.0 → femagtools-1.8.1}/src/femagtools/templates/new_model.mako +0 -0
  140. {femagtools-1.8.0 → femagtools-1.8.1}/src/femagtools/templates/noloadflux-rot.mako +0 -0
  141. {femagtools-1.8.0 → femagtools-1.8.1}/src/femagtools/templates/noloadflux.mako +0 -0
  142. {femagtools-1.8.0 → femagtools-1.8.1}/src/femagtools/templates/noloadfluxdc.mako +0 -0
  143. {femagtools-1.8.0 → femagtools-1.8.1}/src/femagtools/templates/open.mako +0 -0
  144. {femagtools-1.8.0 → femagtools-1.8.1}/src/femagtools/templates/plots.mako +0 -0
  145. {femagtools-1.8.0 → femagtools-1.8.1}/src/femagtools/templates/pm_sym_f_cur.mako +0 -0
  146. {femagtools-1.8.0 → femagtools-1.8.1}/src/femagtools/templates/pm_sym_fast.mako +0 -0
  147. {femagtools-1.8.0 → femagtools-1.8.1}/src/femagtools/templates/pm_sym_loss.mako +0 -0
  148. {femagtools-1.8.0 → femagtools-1.8.1}/src/femagtools/templates/psd_psq_fast.mako +0 -0
  149. {femagtools-1.8.0 → femagtools-1.8.1}/src/femagtools/templates/ring.mako +0 -0
  150. {femagtools-1.8.0 → femagtools-1.8.1}/src/femagtools/templates/rot_hsm.mako +0 -0
  151. {femagtools-1.8.0 → femagtools-1.8.1}/src/femagtools/templates/rotorAsyn.mako +0 -0
  152. {femagtools-1.8.0 → femagtools-1.8.1}/src/femagtools/templates/rotorKs2.mako +0 -0
  153. {femagtools-1.8.0 → femagtools-1.8.1}/src/femagtools/templates/rotor_msh.mako +0 -0
  154. {femagtools-1.8.0 → femagtools-1.8.1}/src/femagtools/templates/rotor_winding.mako +0 -0
  155. {femagtools-1.8.0 → femagtools-1.8.1}/src/femagtools/templates/shortcircuit.mako +0 -0
  156. {femagtools-1.8.0 → femagtools-1.8.1}/src/femagtools/templates/srm.mako +0 -0
  157. {femagtools-1.8.0 → femagtools-1.8.1}/src/femagtools/templates/stator1.mako +0 -0
  158. {femagtools-1.8.0 → femagtools-1.8.1}/src/femagtools/templates/stator2.mako +0 -0
  159. {femagtools-1.8.0 → femagtools-1.8.1}/src/femagtools/templates/stator3Linear.mako +0 -0
  160. {femagtools-1.8.0 → femagtools-1.8.1}/src/femagtools/templates/stator4.mako +0 -0
  161. {femagtools-1.8.0 → femagtools-1.8.1}/src/femagtools/templates/statorBG.mako +0 -0
  162. {femagtools-1.8.0 → femagtools-1.8.1}/src/femagtools/templates/statorRing.mako +0 -0
  163. {femagtools-1.8.0 → femagtools-1.8.1}/src/femagtools/templates/statorRotor3.mako +0 -0
  164. {femagtools-1.8.0 → femagtools-1.8.1}/src/femagtools/templates/stator_msh.mako +0 -0
  165. {femagtools-1.8.0 → femagtools-1.8.1}/src/femagtools/templates/therm-dynamic.mako +0 -0
  166. {femagtools-1.8.0 → femagtools-1.8.1}/src/femagtools/templates/therm_static.mako +0 -0
  167. {femagtools-1.8.0 → femagtools-1.8.1}/src/femagtools/templates/torq_calc.mako +0 -0
  168. {femagtools-1.8.0 → femagtools-1.8.1}/src/femagtools/tks.py +0 -0
  169. {femagtools-1.8.0 → femagtools-1.8.1}/src/femagtools/ts.py +0 -0
  170. {femagtools-1.8.0 → femagtools-1.8.1}/src/femagtools/utils.py +0 -0
  171. {femagtools-1.8.0 → femagtools-1.8.1}/src/femagtools/vbf.py +0 -0
  172. {femagtools-1.8.0 → femagtools-1.8.1}/src/femagtools/vtu.py +0 -0
  173. {femagtools-1.8.0 → femagtools-1.8.1}/src/femagtools/windings.py +0 -0
  174. {femagtools-1.8.0 → femagtools-1.8.1}/src/femagtools.egg-info/SOURCES.txt +0 -0
  175. {femagtools-1.8.0 → femagtools-1.8.1}/src/femagtools.egg-info/dependency_links.txt +0 -0
  176. {femagtools-1.8.0 → femagtools-1.8.1}/src/femagtools.egg-info/entry_points.txt +0 -0
  177. {femagtools-1.8.0 → femagtools-1.8.1}/src/femagtools.egg-info/requires.txt +0 -0
  178. {femagtools-1.8.0 → femagtools-1.8.1}/src/femagtools.egg-info/top_level.txt +0 -0
  179. {femagtools-1.8.0 → femagtools-1.8.1}/src/tests/__init__.py +0 -0
  180. {femagtools-1.8.0 → femagtools-1.8.1}/src/tests/engines/__init__.py +0 -0
  181. {femagtools-1.8.0 → femagtools-1.8.1}/src/tests/engines/test_amazon.py +0 -0
  182. {femagtools-1.8.0 → femagtools-1.8.1}/src/tests/engines/test_config.py +0 -0
  183. {femagtools-1.8.0 → femagtools-1.8.1}/src/tests/geom/__init__.py +0 -0
  184. {femagtools-1.8.0 → femagtools-1.8.1}/src/tests/geom/test_functions.py +0 -0
  185. {femagtools-1.8.0 → femagtools-1.8.1}/src/tests/geom/test_point_inside.py +0 -0
  186. {femagtools-1.8.0 → femagtools-1.8.1}/src/tests/moo/__init__.py +0 -0
  187. {femagtools-1.8.0 → femagtools-1.8.1}/src/tests/moo/test_algorithm.py +0 -0
  188. {femagtools-1.8.0 → femagtools-1.8.1}/src/tests/moo/test_population.py +0 -0
  189. {femagtools-1.8.0 → femagtools-1.8.1}/src/tests/moo/test_problem.py +0 -0
  190. {femagtools-1.8.0 → femagtools-1.8.1}/src/tests/test_afpm.py +0 -0
  191. {femagtools-1.8.0 → femagtools-1.8.1}/src/tests/test_airgap_induction.py +0 -0
  192. {femagtools-1.8.0 → femagtools-1.8.1}/src/tests/test_amela.py +0 -0
  193. {femagtools-1.8.0 → femagtools-1.8.1}/src/tests/test_asm.py +0 -0
  194. {femagtools-1.8.0 → femagtools-1.8.1}/src/tests/test_bchreader.py +0 -0
  195. {femagtools-1.8.0 → femagtools-1.8.1}/src/tests/test_conductor.py +0 -0
  196. {femagtools-1.8.0 → femagtools-1.8.1}/src/tests/test_convert.py +0 -0
  197. {femagtools-1.8.0 → femagtools-1.8.1}/src/tests/test_dxfsl.py +0 -0
  198. {femagtools-1.8.0 → femagtools-1.8.1}/src/tests/test_effloss.py +0 -0
  199. {femagtools-1.8.0 → femagtools-1.8.1}/src/tests/test_erg.py +0 -0
  200. {femagtools-1.8.0 → femagtools-1.8.1}/src/tests/test_femag.py +0 -0
  201. {femagtools-1.8.0 → femagtools-1.8.1}/src/tests/test_forcedens.py +0 -0
  202. {femagtools-1.8.0 → femagtools-1.8.1}/src/tests/test_fsl.py +0 -0
  203. {femagtools-1.8.0 → femagtools-1.8.1}/src/tests/test_heat_source_network.py +0 -0
  204. {femagtools-1.8.0 → femagtools-1.8.1}/src/tests/test_hxy.py +0 -0
  205. {femagtools-1.8.0 → femagtools-1.8.1}/src/tests/test_im.py +0 -0
  206. {femagtools-1.8.0 → femagtools-1.8.1}/src/tests/test_isa7.py +0 -0
  207. {femagtools-1.8.0 → femagtools-1.8.1}/src/tests/test_jhb.py +0 -0
  208. {femagtools-1.8.0 → femagtools-1.8.1}/src/tests/test_job.py +0 -0
  209. {femagtools-1.8.0 → femagtools-1.8.1}/src/tests/test_losscoeffs.py +0 -0
  210. {femagtools-1.8.0 → femagtools-1.8.1}/src/tests/test_machine.py +0 -0
  211. {femagtools-1.8.0 → femagtools-1.8.1}/src/tests/test_magncurv.py +0 -0
  212. {femagtools-1.8.0 → femagtools-1.8.1}/src/tests/test_magnet.py +0 -0
  213. {femagtools-1.8.0 → femagtools-1.8.1}/src/tests/test_mcv.py +0 -0
  214. {femagtools-1.8.0 → femagtools-1.8.1}/src/tests/test_mcvreader.py +0 -0
  215. {femagtools-1.8.0 → femagtools-1.8.1}/src/tests/test_me.py +0 -0
  216. {femagtools-1.8.0 → femagtools-1.8.1}/src/tests/test_model.py +0 -0
  217. {femagtools-1.8.0 → femagtools-1.8.1}/src/tests/test_nc.py +0 -0
  218. {femagtools-1.8.0 → femagtools-1.8.1}/src/tests/test_parident.py +0 -0
  219. {femagtools-1.8.0 → femagtools-1.8.1}/src/tests/test_parstudy.py +0 -0
  220. {femagtools-1.8.0 → femagtools-1.8.1}/src/tests/test_pocfile.py +0 -0
  221. {femagtools-1.8.0 → femagtools-1.8.1}/src/tests/test_sizing.py +0 -0
  222. {femagtools-1.8.0 → femagtools-1.8.1}/src/tests/test_sm.py +0 -0
  223. {femagtools-1.8.0 → femagtools-1.8.1}/src/tests/test_tksreader.py +0 -0
  224. {femagtools-1.8.0 → femagtools-1.8.1}/src/tests/test_ts.py +0 -0
  225. {femagtools-1.8.0 → femagtools-1.8.1}/src/tests/test_vbfreader.py +0 -0
  226. {femagtools-1.8.0 → femagtools-1.8.1}/src/tests/test_vtu.py +0 -0
  227. {femagtools-1.8.0 → femagtools-1.8.1}/src/tests/test_windings.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: femagtools
3
- Version: 1.8.0
3
+ Version: 1.8.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
@@ -2,7 +2,7 @@
2
2
 
3
3
  """
4
4
  __title__ = 'femagtools'
5
- __version__ = '1.8.0'
5
+ __version__ = '1.8.1'
6
6
  __author__ = 'Ronald Tanner'
7
7
  __license__ = 'BSD'
8
8
  __copyright__ = 'Copyright 2023-2024 Gamma Technology'
@@ -822,9 +822,9 @@ class Area(object):
822
822
  mm[3] = max(mm[3], n[3])
823
823
  return mm
824
824
 
825
- def intersect_line(self, line):
825
+ def intersect_area(self, line):
826
826
  for e in self.area:
827
- if e.intersect_line(line):
827
+ if e.intersect_shape(line, include_end=True):
828
828
  return True
829
829
  return False
830
830
 
@@ -250,11 +250,6 @@ def main():
250
250
  keys = ('tot_num_slot', 'num_sl_gen', 'num_poles', 'nodedist',
251
251
  'dy1', 'da1', 'da2', 'dy2', 'agndst', 'name')
252
252
  logger.info("%s", {k: res[k] for k in keys if k in res})
253
- if args.write_fsl:
254
- if res is not None:
255
- basename = os.path.basename(args.dxfile).split('.')[0]
256
- with io.open(basename + '.fsl', 'w', encoding='utf-8') as f:
257
- f.write('\n'.join(res['fsl']))
258
253
 
259
254
  if __name__ == "__main__":
260
255
  loglevel = logging.INFO
@@ -2,6 +2,7 @@
2
2
 
3
3
  """
4
4
  import os
5
+ import io
5
6
  from pathlib import Path
6
7
  from femagtools import __version__
7
8
  from femagtools.dxfsl.geom import Geometry
@@ -160,12 +161,16 @@ def symmetry_search(machine,
160
161
 
161
162
 
162
163
  def build_machine_rotor(machine, inner, mindist, plt, EESM=False, single=False):
164
+ global journal
163
165
  logger.debug("Begin of build_machine_rotor")
166
+
164
167
  if machine.has_windings():
165
168
  logger.debug("do nothing here with windings in rotor")
166
169
  logger.debug("End of build_machine_rotor")
167
170
  return machine
168
171
 
172
+ timer = Timer(start_it=True)
173
+
169
174
  if machine.is_mirrored():
170
175
  logger.debug("Rotor is mirrored")
171
176
  machine_temp = machine.undo_mirror()
@@ -207,17 +212,27 @@ def build_machine_rotor(machine, inner, mindist, plt, EESM=False, single=False):
207
212
  machine_temp.create_inner_corner_areas()
208
213
 
209
214
  if not machine_temp.is_mirrored():
210
- machine_temp.create_boundery_nodes()
215
+ plot_geom(False, # for developer
216
+ plt, machine_temp.geom,
217
+ title="Rotor before Boundery Corr")
218
+ machine_temp.create_boundary_nodes()
211
219
 
212
220
  plot_geom(False, # for developer
213
221
  plt, machine_temp.geom,
214
222
  title="Final Rotor")
223
+
224
+ t = timer.stop("-- rotor created in %0.4f seconds --")
225
+ journal.put('time_rotor_created', t)
226
+
215
227
  logger.debug("End of build_machine_rotor")
216
228
  return machine_temp
217
229
 
218
230
 
219
231
  def build_machine_stator(machine, inner, mindist, plt, EESM=False, single=False):
232
+ global journal
220
233
  logger.debug("Begin of build_machine_stator")
234
+ timer = Timer(start_it=True)
235
+
221
236
  if not machine.geom.is_stator():
222
237
  logger.debug("Rotor with windings")
223
238
 
@@ -240,25 +255,34 @@ def build_machine_stator(machine, inner, mindist, plt, EESM=False, single=False)
240
255
  else:
241
256
  machine_temp = machine
242
257
 
243
- rebuild = machine_temp.create_auxiliary_lines()
244
258
  if machine_temp.geom.reduce_element_nodes(mindist):
259
+ machine_temp.rebuild_subregions(EESM, single=single)
245
260
  plot_geom(False, # for developer
246
261
  plt, machine_temp.geom,
247
- title="Nodes reduced",
248
- areas=False)
249
- rebuild = True
250
- if rebuild:
262
+ title="Nodes reduced")
263
+
264
+ if machine_temp.create_auxiliary_lines():
251
265
  machine_temp.rebuild_subregions(EESM, single=single)
266
+ plot_geom(False, # for developer
267
+ plt, machine_temp.geom,
268
+ title="Stator with Auxiliary Lines")
252
269
 
253
270
  if inner:
254
271
  machine_temp.create_inner_corner_areas()
255
272
 
256
273
  if not machine_temp.is_mirrored():
257
- machine_temp.create_boundery_nodes()
274
+ plot_geom(False, # for developer
275
+ plt, machine_temp.geom,
276
+ title="Stator before Boundery Corr")
277
+ machine_temp.create_boundary_nodes()
258
278
 
259
279
  plot_geom(False, # for developer
260
280
  plt, machine_temp.geom,
261
281
  title="Final Stator")
282
+
283
+ t = timer.stop("-- stator created in %0.4f seconds --")
284
+ journal.put('time_stator_created', t)
285
+
262
286
  logger.debug("End of build_machine_stator")
263
287
  return machine_temp
264
288
 
@@ -290,6 +314,7 @@ def convert(dxfile,
290
314
  full_model=False,
291
315
  debug_mode=False,
292
316
  write_journal=False):
317
+ global journal
293
318
  layers = ()
294
319
  conv = {}
295
320
 
@@ -816,10 +841,19 @@ def convert(dxfile,
816
841
 
817
842
  mtype = 'EESM' if EESM else 'PMSM'
818
843
  fslrenderer = FslRenderer(basename, mtype)
819
- conv['fsl'] = fslrenderer.render(machine, inner, outer)
844
+ conv['fsl'] = fslrenderer.render(machine, inner, outer, standalone=True)
820
845
 
821
846
  if params is not None:
822
847
  conv.update(params)
848
+
849
+ if write_fsl:
850
+ logger.debug("Write fsl")
851
+ if conv and conv['fsl']:
852
+ with io.open(basename + '.fsl', 'w', encoding='utf-8') as f:
853
+ f.write('\n'.join(conv['fsl']))
854
+ else:
855
+ logger.warning("No fsl data available")
856
+
823
857
  conv['name'] = basename
824
858
  t = timer.stop("-- all done in %0.4f seconds --", info=True)
825
859
  journal.put('time_total', t)
@@ -154,7 +154,7 @@ class FslRenderer(object):
154
154
  return sorted([(abs(r - np.linalg.norm(e.center_of_connection())), e)
155
155
  for e in geom.elements(Shape)])
156
156
 
157
- def render(self, machine, inner=False, outer=False):
157
+ def render(self, machine, inner=False, outer=False, standalone=False):
158
158
  '''create fsl statements with nodechains'''
159
159
  machine.set_alfa_and_corners()
160
160
  geom = machine.geom
@@ -162,6 +162,14 @@ class FslRenderer(object):
162
162
  geom.split_all_lines_longer_than(split_len)
163
163
  self.content = []
164
164
 
165
+ if standalone:
166
+ self.content += ['if (agndst == nil) then',
167
+ ' agndst = 0.5',
168
+ ' m.npols_gen = 2',
169
+ ' m.num_sl_gen = 2',
170
+ ' new_model_force("{}","Test")'.format(self.model),
171
+ 'end']
172
+
165
173
  MAXDST=4.0
166
174
  NUMLEVELS=10
167
175
  NDT0=1.1
@@ -2753,7 +2753,7 @@ class Geometry(object):
2753
2753
  intersection = False
2754
2754
  inner_gap_list = []
2755
2755
  for no_a in my_notouch:
2756
- if no_a.intersect_line(line):
2756
+ if no_a.intersect_area(line):
2757
2757
  intersection = True
2758
2758
  logger.debug(" --> intersection with %s",
2759
2759
  no_a.get_id())
@@ -2817,6 +2817,7 @@ class Geometry(object):
2817
2817
  pts = self.split_and_get_intersect_points(line)
2818
2818
  if len(pts) != 2:
2819
2819
  logger.error("ERROR in create_aux_lines()")
2820
+ self.journal.put("warning", "Error while creating auxiliary lines")
2820
2821
  logger.debug("Points: %s", pts)
2821
2822
  logger.debug("Line: %s", line)
2822
2823
 
@@ -3635,16 +3636,21 @@ class Geometry(object):
3635
3636
  area.mark_airgap_corners(start_cp, end_cp)
3636
3637
  return
3637
3638
 
3638
- def num_areas_of_type(self, type):
3639
+ def num_areas_of_type(self, types=()):
3639
3640
  return len([area for area in self.list_of_areas()
3640
- if area.is_type(type)])
3641
+ if area.type in types])
3641
3642
 
3642
3643
  def area_size_of_type(self, type):
3643
3644
  return sum([area.surface for area in self.list_of_areas()
3644
3645
  if area.is_type(type)])*1e-3
3645
3646
 
3646
3647
  def num_of_windings(self):
3647
- return self.num_areas_of_type(AREA.TYPE_WINDINGS)
3648
+ return self.num_areas_of_type((AREA.TYPE_WINDINGS,))
3649
+
3650
+ def num_of_irons(self):
3651
+ return self.num_areas_of_type((AREA.TYPE_IRON,
3652
+ AREA.TYPE_YOKE,
3653
+ AREA.TYPE_TOOTH,))
3648
3654
 
3649
3655
  def area_close_to_endangle(self, type):
3650
3656
  return len([area for area in self.list_of_areas()
@@ -4206,9 +4212,9 @@ class Geometry(object):
4206
4212
  if not ok1: # fatal => ignore
4207
4213
  logger.debug("end repair_border_line: missing point %s", n1)
4208
4214
  return False
4209
- d1, n1, ok1 = nodes[-1]
4210
- if not ok1: # fatal => ignore
4211
- logger.debug("end repair_border_line: missing point %s", n1)
4215
+ d2, n2, ok2 = nodes[-1]
4216
+ if not ok2: # fatal => ignore
4217
+ logger.debug("end repair_border_line: missing point %s", n2)
4212
4218
  return False
4213
4219
 
4214
4220
  remove_n1 = None
@@ -4240,89 +4246,132 @@ class Geometry(object):
4240
4246
  logger.debug("end repair_border_line")
4241
4247
  return True
4242
4248
 
4243
- def create_boundery_nodes(self,
4249
+ def create_boundary_nodes(self,
4244
4250
  center,
4245
4251
  startangle,
4246
4252
  endangle,
4247
4253
  rtol=None, atol=None):
4254
+ logger.debug("begin of create_boundary_nodes")
4248
4255
  if not rtol:
4249
- rtol = 1e-4
4256
+ rtol = 1e-3
4250
4257
  if not atol:
4251
4258
  atol = 1e-3
4252
4259
 
4253
- start_nodes = [n for n in self.angle_nodes(center, startangle, rtol, atol)]
4254
- end_nodes = [n for n in self.angle_nodes(center, endangle, rtol, atol)]
4255
- alpha = alpha_angle(startangle, endangle)
4256
-
4257
- logger.debug("begin of create_boundery_nodes")
4258
- start_rot_nodes = self.rotate_nodes(alpha, start_nodes)
4259
- end_rot_nodes = self.rotate_nodes(-alpha, end_nodes)
4260
-
4261
- def miss_nodelist(src_nodelist, dest_nodelist):
4262
- nlist = []
4263
- for src_n in src_nodelist:
4264
- ok = False
4265
- for dest_n in dest_nodelist:
4266
- if points_are_close(src_n, dest_n, rtol=rtol, atol=atol):
4267
- ok = True
4268
- break
4269
- if not ok:
4270
- nlist.append(src_n)
4271
- return nlist
4272
-
4273
- logger.debug("Begin with Nodes Start=%s, End=%s", len(start_nodes), len(end_nodes))
4274
-
4275
- missing_end_nodes = miss_nodelist(start_rot_nodes, end_nodes)
4276
- missing_start_nodes = miss_nodelist(end_rot_nodes, start_nodes)
4277
-
4278
- if missing_start_nodes:
4279
- logger.debug("%s missing start nodes", len(missing_start_nodes))
4280
- start_nodes = [(distance(center, n), n, True) for n in start_nodes]
4281
- for n in missing_start_nodes:
4282
- start_nodes.append((distance(center, n), n, False))
4283
- start_nodes.sort()
4284
- if not self.repair_border_line(start_nodes):
4285
- logger.debug("end of create_boundery_nodes (failed)")
4286
- return
4287
- else:
4288
- start_nodes = [(distance(center, n), n, True) for n in start_nodes]
4289
- start_nodes.sort()
4290
-
4291
- if missing_end_nodes:
4292
- logger.debug("%s missing end nodes", len(missing_end_nodes))
4293
- end_nodes = [(distance(center, n), n, True) for n in end_nodes]
4294
- for n in missing_end_nodes:
4295
- end_nodes.append((distance(center, n), n, False))
4296
- end_nodes.sort()
4297
- if not self.repair_border_line(end_nodes):
4298
- logger.debug("end of create_boundery_nodes (failed)")
4299
- return
4300
- else:
4301
- end_nodes = [(distance(center, n), n, True) for n in end_nodes]
4302
- end_nodes.sort()
4260
+ def check_line(nlist):
4261
+ d, n1, b = nlist[0]
4262
+ for d, n2, b in nlist[1:]:
4263
+ if not self.get_edge_element(n1, n2):
4264
+ return False
4265
+ n1 = n2
4266
+ return True
4303
4267
 
4304
- start_nodes = [(distance(center, n), n)
4268
+ start_nodes = [(distance(center, n), n, True)
4305
4269
  for n in self.angle_nodes(center, startangle, rtol, atol)]
4306
4270
  start_nodes.sort()
4307
- end_nodes = [(distance(center, n), n)
4271
+ d_start1, n, b = start_nodes[0]
4272
+ if not points_are_close(self.start_corners[0], n):
4273
+ logger.warning("end of create_boundary_nodes: corner missing in start boundary")
4274
+ return False
4275
+ d_start2, n, b = start_nodes[-1]
4276
+ if not points_are_close(self.start_corners[-1], n):
4277
+ logger.warning("end of create_boundary_nodes: corner missing in start boundary")
4278
+ return False
4279
+ if not check_line(start_nodes):
4280
+ logger.warning("end of create_boundary_nodes: bad start boundary")
4281
+ return False
4282
+
4283
+ logger.debug("Start Nodes")
4284
+ [logger.debug(" --> %s", x) for x in start_nodes]
4285
+
4286
+ end_nodes = [(distance(center, n), n, True)
4308
4287
  for n in self.angle_nodes(center, endangle, rtol, atol)]
4309
4288
  end_nodes.sort()
4289
+ d_end1, n, b = end_nodes[0]
4290
+ if not points_are_close(self.end_corners[0], n):
4291
+ logger.warning("end of create_boundary_nodes: corner missing in end boundary")
4292
+ return False
4293
+ d_end2, n, b = end_nodes[-1]
4294
+ if not points_are_close(self.end_corners[-1], n):
4295
+ logger.warning("end of create_boundary_nodes: corner missing in end boundary")
4296
+ return False
4297
+ if not check_line(end_nodes):
4298
+ logger.warning("end of create_boundary_nodes: bad end boundary")
4299
+ return False
4300
+
4301
+ logger.debug("End Nodes")
4302
+ [logger.debug(" --> %s", x) for x in end_nodes]
4310
4303
 
4311
- logger.debug("End with Nodes Start=%s, End=%s", len(start_nodes), len(end_nodes))
4304
+ logger.debug("Lower Corners: %s <> %s", d_start1, d_end1)
4305
+ if not np.isclose(d_start1, d_end1, rtol=self.rtol, atol=self.atol):
4306
+ logger.warning("end of create_boundary_nodes: corners dont match")
4307
+ return False
4312
4308
 
4313
- nodes = [n for d, n in start_nodes]
4314
- start_rot_nodes = self.rotate_nodes(alpha, nodes)
4309
+ logger.debug("Upper Corners: %s <> %s", d_start2, d_end2)
4310
+ if not np.isclose(d_start2, d_end2, rtol=self.rtol, atol=self.atol):
4311
+ logger.warning("end of create_boundary_nodes: corners dont match")
4312
+ return False
4315
4313
 
4316
- for d, node in start_nodes:
4317
- self.set_point_of_node(node, node)
4318
- i = 0
4319
- if len(end_nodes) == len(start_rot_nodes):
4320
- for d, node in end_nodes:
4321
- self.set_point_of_node(node, start_rot_nodes[i])
4322
- i += 1
4314
+ if len(start_nodes) == 2 and len(end_nodes) == 2:
4315
+ logger.debug("end of create_boundary_nodes: only corners available")
4316
+ return False # ok
4317
+
4318
+ def node_distance_list(nodelist1, nodelist2):
4319
+ distlist = []
4320
+ i1 = 0
4321
+ i2 = 0
4322
+ while i1 < len(nodelist1) and i2 < len(nodelist2):
4323
+ d1, n1, b1 = nodelist1[i1]
4324
+ d2, n2, b2 = nodelist2[i2]
4325
+ if np.isclose(d1, d2, rtol=self.rtol, atol=self.atol):
4326
+ distlist.append((d1, True, True))
4327
+ i1 += 1
4328
+ i2 += 1
4329
+ elif d1 > d2:
4330
+ distlist.append((d2, False, True))
4331
+ i2 += 1
4332
+ else:
4333
+ distlist.append((d1, True, False))
4334
+ i1 += 1
4335
+ if not i1 == len(nodelist1) and i2 == len(nodelist2):
4336
+ return []
4337
+ return distlist
4323
4338
 
4324
- logger.debug("end of create_boundery_nodes")
4325
- return
4339
+ distance_list = node_distance_list(start_nodes, end_nodes)
4340
+ [logger.debug("distance: %s, (%s, %s)", d, b1, b2)
4341
+ for d, b1, b2 in distance_list]
4342
+
4343
+ diff = len(distance_list) - len(start_nodes)
4344
+ done = False
4345
+ if not diff == 0:
4346
+ logger.debug("%s missing start nodes", diff)
4347
+ done = True
4348
+ for d, in_start, in_end in distance_list:
4349
+ if not in_start:
4350
+ p = point(self.center, d, startangle)
4351
+ start_nodes.append((d, p, False))
4352
+ start_nodes.sort()
4353
+ assert(len(start_nodes) == len(distance_list))
4354
+ if not self.repair_border_line(start_nodes):
4355
+ logger.debug("end of create_boundary_nodes (failed)")
4356
+ return False
4357
+
4358
+ diff = len(distance_list) - len(end_nodes)
4359
+ if not diff == 0:
4360
+ logger.debug("%s missing end nodes", diff)
4361
+ done = True
4362
+ for d, in_start, in_end in distance_list:
4363
+ if not in_end:
4364
+ p = point(self.center, d, endangle)
4365
+ end_nodes.append((d, p, False))
4366
+ end_nodes.sort()
4367
+ assert(len(end_nodes) == len(distance_list))
4368
+
4369
+ if not self.repair_border_line(end_nodes):
4370
+ logger.debug("end of create_boundary_nodes (failed)")
4371
+ return False
4372
+
4373
+ logger.debug("end of create_boundary_nodes")
4374
+ return done
4326
4375
 
4327
4376
  def set_point_of_node(self, node, p):
4328
4377
  if isinstance(node, list):
@@ -14,6 +14,7 @@ from femagtools.dxfsl.functions import alpha_angle, normalise_angle, middle_angl
14
14
  from femagtools.dxfsl.functions import alpha_line, line_m, line_n, mirror_point
15
15
  from femagtools.dxfsl.functions import within_interval, part_of_circle
16
16
  from femagtools.dxfsl.functions import less, less_equal, greater, greater_equal
17
+ from femagtools.dxfsl.journal import Journal, getJournal
17
18
  logger = logging.getLogger('femagtools.geom')
18
19
 
19
20
 
@@ -38,6 +39,7 @@ class Machine(object):
38
39
  self.airgap2_radius = 0.0
39
40
  self.airgap_second = None
40
41
  self.previous_machine = None
42
+ self.journal = getJournal()
41
43
 
42
44
  if not self.center:
43
45
  raise ValueError("FATAL ERROR: no center in Geometry")
@@ -554,8 +556,9 @@ class Machine(object):
554
556
  rtol=rtol, atol=atol)
555
557
  logger.debug('end of repair_hull_geom')
556
558
 
557
- def create_boundery_nodes(self):
558
- self.geom.create_boundery_nodes(self.center, self.startangle, self.endangle)
559
+ def create_boundary_nodes(self):
560
+ if self.geom.create_boundary_nodes(self.center, self.startangle, self.endangle):
561
+ logger.debug("___additional boundary nodes created___")
559
562
 
560
563
  def create_auxiliary_lines(self):
561
564
  logger.debug("create_auxiliary_lines")
@@ -97,7 +97,7 @@ def binterp(x, y, xq, yq, b):
97
97
 
98
98
  def binterp_ialh2(x, y, xq, yq, b):
99
99
  '''interpolate flux density with Rbf interpolator'''
100
- f = RBFInterpolator(np.array([[i, j] for i, j in zip(x, y)]), b)
100
+ f = RBFInterpolator(np.array([[i, j] for i, j in zip(x, y)]), b, kernel='thin_plate_spline')
101
101
  inp = f(np.array([[i, j] for i, j in zip(xq, yq)]))
102
102
  return inp.reshape(len(np.unique(xq)), -1)
103
103
 
@@ -571,6 +571,10 @@ class MagnLoss(Amela):
571
571
  amplb = np.sqrt(amplbx**2 + amplby**2)
572
572
  fmax2 = 0.5*freq[-1]
573
573
 
574
+ if sum(amplb) == 0:
575
+ warnings.warn('Bx and By data equals to zero, check simulation parameters for this loadcase')
576
+ filt = 0
577
+
574
578
  if sum(amplb) > 0:
575
579
  pec = (np.multiply(amplb,freq))**2
576
580
  pecmax = np.max(pec)
@@ -604,10 +608,12 @@ class MagnLoss(Amela):
604
608
 
605
609
  for ii in range (nx): # Inverse Fourier-Transformation
606
610
  for jj in range (ny):
607
- sx_pm_3D[ii,jj,0:-1] = np.fft.irfftn(complbx[ii,jj,:])
608
- sy_pm_3D[ii,jj,0:-1] = np.fft.irfftn(complby[ii,jj,:])
609
- sx_pm_3D[ii,jj,nt-1] = sx_pm_3D[ii,jj,0]
610
- sy_pm_3D[ii,jj,nt-1] = sy_pm_3D[ii,jj,0]
611
+ sx = np.fft.irfftn(complbx[ii,jj,:], [nt - 1])
612
+ sy = np.fft.irfftn(complby[ii,jj,:], [nt - 1])
613
+ sx = np.append(sx, sx[0])
614
+ sy = np.append(sy, sy[0])
615
+ sx_pm_3D[ii,jj,:] = sx
616
+ sy_pm_3D[ii,jj,:] = sy
611
617
 
612
618
  return sx_pm_3D, sy_pm_3D
613
619
 
@@ -736,8 +742,7 @@ class MagnLoss(Amela):
736
742
 
737
743
  nsegx = max(1,nsegx) # 1 = no segmentation
738
744
  nsegz = max(1,nsegz) # 1 = no segmentation
739
- if nsegy != 1:
740
- nsegy = 1 # y segmentation not supported, nsegy is always = 1
745
+ nsegy = 1 # y segmentation not supported, nsegy is always = 1
741
746
 
742
747
  delta_eff = 0
743
748
 
@@ -758,7 +763,7 @@ class MagnLoss(Amela):
758
763
  (sx_abs, sy_abs, sx_phase, sy_phase, freq_range) = self.Process_B_data(nx, ny, nsegx, nsegy, nt, i['elcp'], i['bl'], excpl_new, eycpl_new)
759
764
  loss = self.loss_ialh2(sx_abs, sy_abs, sx_phase, sy_phase, freq_range, nx, ny, wm, hm, lm, nsegx, nsegy, nsegz, delta_eff) * self.numpoles
760
765
  ialh_loss += loss
761
- #print(f'Loadcase {i['loadcase']}, Superelement {i['spel_key']}, Total losses = {loss:.3f} W')
766
+ logger.info(f'Loadcase {i["loadcase"]}, Superelement {i["spel_key"]}, Total losses = {loss:.3f} W')
762
767
  loss_detail.append([i['spel_key'], loss/self.numpoles])
763
768
  self.th_loss.append(loss_detail)
764
769
  all_load_cases.append(ialh_loss)