femagtools 1.7.3__tar.gz → 1.7.4__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.3/src/femagtools.egg-info → femagtools-1.7.4}/PKG-INFO +2 -2
  2. {femagtools-1.7.3 → femagtools-1.7.4}/pyproject.toml +1 -1
  3. {femagtools-1.7.3 → femagtools-1.7.4}/src/femagtools/__init__.py +1 -1
  4. {femagtools-1.7.3 → femagtools-1.7.4}/src/femagtools/airgap.py +11 -0
  5. {femagtools-1.7.3 → femagtools-1.7.4}/src/femagtools/bch.py +28 -20
  6. {femagtools-1.7.3 → femagtools-1.7.4}/src/femagtools/dxfsl/fslrenderer.py +3 -2
  7. {femagtools-1.7.3 → femagtools-1.7.4}/src/femagtools/fsl.py +8 -17
  8. femagtools-1.7.4/src/femagtools/heat_source_network.py +403 -0
  9. {femagtools-1.7.3 → femagtools-1.7.4}/src/femagtools/machine/pm.py +78 -4
  10. {femagtools-1.7.3 → femagtools-1.7.4}/src/femagtools/machine/utils.py +109 -51
  11. {femagtools-1.7.3 → femagtools-1.7.4}/src/femagtools/model.py +12 -1
  12. {femagtools-1.7.3 → femagtools-1.7.4}/src/femagtools/parstudy.py +4 -5
  13. {femagtools-1.7.3 → femagtools-1.7.4}/src/femagtools/plot/char.py +5 -2
  14. {femagtools-1.7.3 → femagtools-1.7.4}/src/femagtools/templates/basic_modpar.mako +2 -0
  15. femagtools-1.7.3/src/femagtools/templates/therm-static.mako → femagtools-1.7.4/src/femagtools/templates/therm_static.mako +15 -13
  16. {femagtools-1.7.3 → femagtools-1.7.4}/src/femagtools/windings.py +5 -2
  17. {femagtools-1.7.3 → femagtools-1.7.4/src/femagtools.egg-info}/PKG-INFO +2 -2
  18. {femagtools-1.7.3 → femagtools-1.7.4}/src/femagtools.egg-info/SOURCES.txt +3 -1
  19. {femagtools-1.7.3 → femagtools-1.7.4}/src/femagtools.egg-info/requires.txt +1 -1
  20. femagtools-1.7.4/src/tests/test_heat_source_network.py +21 -0
  21. {femagtools-1.7.3 → femagtools-1.7.4}/src/tests/test_machine.py +4 -4
  22. {femagtools-1.7.3 → femagtools-1.7.4}/LICENSE +0 -0
  23. {femagtools-1.7.3 → femagtools-1.7.4}/MANIFEST.in +0 -0
  24. {femagtools-1.7.3 → femagtools-1.7.4}/README.md +0 -0
  25. {femagtools-1.7.3 → femagtools-1.7.4}/setup.cfg +0 -0
  26. {femagtools-1.7.3 → femagtools-1.7.4}/src/femagtools/amazon.py +0 -0
  27. {femagtools-1.7.3 → femagtools-1.7.4}/src/femagtools/amela.py +0 -0
  28. {femagtools-1.7.3 → femagtools-1.7.4}/src/femagtools/asm.py +0 -0
  29. {femagtools-1.7.3 → femagtools-1.7.4}/src/femagtools/bchxml.py +0 -0
  30. {femagtools-1.7.3 → femagtools-1.7.4}/src/femagtools/condor.py +0 -0
  31. {femagtools-1.7.3 → femagtools-1.7.4}/src/femagtools/conductor.py +0 -0
  32. {femagtools-1.7.3 → femagtools-1.7.4}/src/femagtools/config.py +0 -0
  33. {femagtools-1.7.3 → femagtools-1.7.4}/src/femagtools/convert.py +0 -0
  34. {femagtools-1.7.3 → femagtools-1.7.4}/src/femagtools/dakota.py +0 -0
  35. {femagtools-1.7.3 → femagtools-1.7.4}/src/femagtools/dakota_femag.py +0 -0
  36. {femagtools-1.7.3 → femagtools-1.7.4}/src/femagtools/dakotaout.py +0 -0
  37. {femagtools-1.7.3 → femagtools-1.7.4}/src/femagtools/docker.py +0 -0
  38. {femagtools-1.7.3 → femagtools-1.7.4}/src/femagtools/dxfsl/__init__.py +0 -0
  39. {femagtools-1.7.3 → femagtools-1.7.4}/src/femagtools/dxfsl/area.py +0 -0
  40. {femagtools-1.7.3 → femagtools-1.7.4}/src/femagtools/dxfsl/areabuilder.py +0 -0
  41. {femagtools-1.7.3 → femagtools-1.7.4}/src/femagtools/dxfsl/concat.py +0 -0
  42. {femagtools-1.7.3 → femagtools-1.7.4}/src/femagtools/dxfsl/conv.py +0 -0
  43. {femagtools-1.7.3 → femagtools-1.7.4}/src/femagtools/dxfsl/converter.py +0 -0
  44. {femagtools-1.7.3 → femagtools-1.7.4}/src/femagtools/dxfsl/corner.py +0 -0
  45. {femagtools-1.7.3 → femagtools-1.7.4}/src/femagtools/dxfsl/dumprenderer.py +0 -0
  46. {femagtools-1.7.3 → femagtools-1.7.4}/src/femagtools/dxfsl/dxfparser.py +0 -0
  47. {femagtools-1.7.3 → femagtools-1.7.4}/src/femagtools/dxfsl/femparser.py +0 -0
  48. {femagtools-1.7.3 → femagtools-1.7.4}/src/femagtools/dxfsl/functions.py +0 -0
  49. {femagtools-1.7.3 → femagtools-1.7.4}/src/femagtools/dxfsl/geom.py +0 -0
  50. {femagtools-1.7.3 → femagtools-1.7.4}/src/femagtools/dxfsl/journal.py +0 -0
  51. {femagtools-1.7.3 → femagtools-1.7.4}/src/femagtools/dxfsl/machine.py +0 -0
  52. {femagtools-1.7.3 → femagtools-1.7.4}/src/femagtools/dxfsl/plotrenderer.py +0 -0
  53. {femagtools-1.7.3 → femagtools-1.7.4}/src/femagtools/dxfsl/shape.py +0 -0
  54. {femagtools-1.7.3 → femagtools-1.7.4}/src/femagtools/dxfsl/svgparser.py +0 -0
  55. {femagtools-1.7.3 → femagtools-1.7.4}/src/femagtools/dxfsl/symmetry.py +0 -0
  56. {femagtools-1.7.3 → femagtools-1.7.4}/src/femagtools/ecloss.py +0 -0
  57. {femagtools-1.7.3 → femagtools-1.7.4}/src/femagtools/erg.py +0 -0
  58. {femagtools-1.7.3 → femagtools-1.7.4}/src/femagtools/femag.py +0 -0
  59. {femagtools-1.7.3 → femagtools-1.7.4}/src/femagtools/forcedens.py +0 -0
  60. {femagtools-1.7.3 → femagtools-1.7.4}/src/femagtools/getset.py +0 -0
  61. {femagtools-1.7.3 → femagtools-1.7.4}/src/femagtools/gmsh.py +0 -0
  62. {femagtools-1.7.3 → femagtools-1.7.4}/src/femagtools/google.py +0 -0
  63. {femagtools-1.7.3 → femagtools-1.7.4}/src/femagtools/grid.py +0 -0
  64. {femagtools-1.7.3 → femagtools-1.7.4}/src/femagtools/hxy.py +0 -0
  65. {femagtools-1.7.3 → femagtools-1.7.4}/src/femagtools/isa7.py +0 -0
  66. {femagtools-1.7.3 → femagtools-1.7.4}/src/femagtools/jhb.py +0 -0
  67. {femagtools-1.7.3 → femagtools-1.7.4}/src/femagtools/job.py +0 -0
  68. {femagtools-1.7.3 → femagtools-1.7.4}/src/femagtools/losscoeffs.py +0 -0
  69. {femagtools-1.7.3 → femagtools-1.7.4}/src/femagtools/machine/__init__.py +0 -0
  70. {femagtools-1.7.3 → femagtools-1.7.4}/src/femagtools/machine/afpm.py +0 -0
  71. {femagtools-1.7.3 → femagtools-1.7.4}/src/femagtools/machine/effloss.py +0 -0
  72. {femagtools-1.7.3 → femagtools-1.7.4}/src/femagtools/machine/im.py +0 -0
  73. {femagtools-1.7.3 → femagtools-1.7.4}/src/femagtools/machine/sizing.py +0 -0
  74. {femagtools-1.7.3 → femagtools-1.7.4}/src/femagtools/machine/sm.py +0 -0
  75. {femagtools-1.7.3 → femagtools-1.7.4}/src/femagtools/magnet.py +0 -0
  76. {femagtools-1.7.3 → femagtools-1.7.4}/src/femagtools/mcv.py +0 -0
  77. {femagtools-1.7.3 → femagtools-1.7.4}/src/femagtools/me.py +0 -0
  78. {femagtools-1.7.3 → femagtools-1.7.4}/src/femagtools/moo/__init__.py +0 -0
  79. {femagtools-1.7.3 → femagtools-1.7.4}/src/femagtools/moo/algorithm.py +0 -0
  80. {femagtools-1.7.3 → femagtools-1.7.4}/src/femagtools/moo/population.py +0 -0
  81. {femagtools-1.7.3 → femagtools-1.7.4}/src/femagtools/moo/problem.py +0 -0
  82. {femagtools-1.7.3 → femagtools-1.7.4}/src/femagtools/moo/test/AlgorithmTest.py +0 -0
  83. {femagtools-1.7.3 → femagtools-1.7.4}/src/femagtools/moo/test/PopulationTest.py +0 -0
  84. {femagtools-1.7.3 → femagtools-1.7.4}/src/femagtools/moo/test/ProblemTest.py +0 -0
  85. {femagtools-1.7.3 → femagtools-1.7.4}/src/femagtools/moproblem.py +0 -0
  86. {femagtools-1.7.3 → femagtools-1.7.4}/src/femagtools/multiproc.py +0 -0
  87. {femagtools-1.7.3 → femagtools-1.7.4}/src/femagtools/mxw2msh.py +0 -0
  88. {femagtools-1.7.3 → femagtools-1.7.4}/src/femagtools/nc.py +0 -0
  89. {femagtools-1.7.3 → femagtools-1.7.4}/src/femagtools/netlist.py +0 -0
  90. {femagtools-1.7.3 → femagtools-1.7.4}/src/femagtools/ntib.py +0 -0
  91. {femagtools-1.7.3 → femagtools-1.7.4}/src/femagtools/opt.py +0 -0
  92. {femagtools-1.7.3 → femagtools-1.7.4}/src/femagtools/plot/__init__.py +0 -0
  93. {femagtools-1.7.3 → femagtools-1.7.4}/src/femagtools/plot/bch.py +0 -0
  94. {femagtools-1.7.3 → femagtools-1.7.4}/src/femagtools/plot/fieldlines.py +0 -0
  95. {femagtools-1.7.3 → femagtools-1.7.4}/src/femagtools/plot/fluxdens.py +0 -0
  96. {femagtools-1.7.3 → femagtools-1.7.4}/src/femagtools/plot/forcedens.py +0 -0
  97. {femagtools-1.7.3 → femagtools-1.7.4}/src/femagtools/plot/mcv.py +0 -0
  98. {femagtools-1.7.3 → femagtools-1.7.4}/src/femagtools/plot/nc.py +0 -0
  99. {femagtools-1.7.3 → femagtools-1.7.4}/src/femagtools/plot/phasor.py +0 -0
  100. {femagtools-1.7.3 → femagtools-1.7.4}/src/femagtools/plot/wdg.py +0 -0
  101. {femagtools-1.7.3 → femagtools-1.7.4}/src/femagtools/poc.py +0 -0
  102. {femagtools-1.7.3 → femagtools-1.7.4}/src/femagtools/svgfsl/converter.py +0 -0
  103. {femagtools-1.7.3 → femagtools-1.7.4}/src/femagtools/templates/FE-losses.mako +0 -0
  104. {femagtools-1.7.3 → femagtools-1.7.4}/src/femagtools/templates/afm_rotor.mako +0 -0
  105. {femagtools-1.7.3 → femagtools-1.7.4}/src/femagtools/templates/afm_stator.mako +0 -0
  106. {femagtools-1.7.3 → femagtools-1.7.4}/src/femagtools/templates/airgapinduc.mako +0 -0
  107. {femagtools-1.7.3 → femagtools-1.7.4}/src/femagtools/templates/asyn_motor.mako +0 -0
  108. {femagtools-1.7.3 → femagtools-1.7.4}/src/femagtools/templates/bertotti.mako +0 -0
  109. {femagtools-1.7.3 → femagtools-1.7.4}/src/femagtools/templates/calc_field_ts.mako +0 -0
  110. {femagtools-1.7.3 → femagtools-1.7.4}/src/femagtools/templates/calc_therm_field.mako +0 -0
  111. {femagtools-1.7.3 → femagtools-1.7.4}/src/femagtools/templates/cogg_calc.mako +0 -0
  112. {femagtools-1.7.3 → femagtools-1.7.4}/src/femagtools/templates/colorgrad.mako +0 -0
  113. {femagtools-1.7.3 → femagtools-1.7.4}/src/femagtools/templates/com_motor_sim.mako +0 -0
  114. {femagtools-1.7.3 → femagtools-1.7.4}/src/femagtools/templates/conduct-data.mako +0 -0
  115. {femagtools-1.7.3 → femagtools-1.7.4}/src/femagtools/templates/connect_models.mako +0 -0
  116. {femagtools-1.7.3 → femagtools-1.7.4}/src/femagtools/templates/cu_losses.mako +0 -0
  117. {femagtools-1.7.3 → femagtools-1.7.4}/src/femagtools/templates/displ_stator_rotor.mako +0 -0
  118. {femagtools-1.7.3 → femagtools-1.7.4}/src/femagtools/templates/ec-rotorbar.mako +0 -0
  119. {femagtools-1.7.3 → femagtools-1.7.4}/src/femagtools/templates/fe-contr.mako +0 -0
  120. {femagtools-1.7.3 → femagtools-1.7.4}/src/femagtools/templates/fieldcalc.mako +0 -0
  121. {femagtools-1.7.3 → femagtools-1.7.4}/src/femagtools/templates/gen_winding.mako +0 -0
  122. {femagtools-1.7.3 → femagtools-1.7.4}/src/femagtools/templates/inductances.mako +0 -0
  123. {femagtools-1.7.3 → femagtools-1.7.4}/src/femagtools/templates/ld_lq_fast.mako +0 -0
  124. {femagtools-1.7.3 → femagtools-1.7.4}/src/femagtools/templates/leak_dist_wind.mako +0 -0
  125. {femagtools-1.7.3 → femagtools-1.7.4}/src/femagtools/templates/leak_evol_wind.mako +0 -0
  126. {femagtools-1.7.3 → femagtools-1.7.4}/src/femagtools/templates/leak_tooth_wind.mako +0 -0
  127. {femagtools-1.7.3 → femagtools-1.7.4}/src/femagtools/templates/magnet-data.mako +0 -0
  128. {femagtools-1.7.3 → femagtools-1.7.4}/src/femagtools/templates/magnetFC2.mako +0 -0
  129. {femagtools-1.7.3 → femagtools-1.7.4}/src/femagtools/templates/magnetIron.mako +0 -0
  130. {femagtools-1.7.3 → femagtools-1.7.4}/src/femagtools/templates/magnetIron2.mako +0 -0
  131. {femagtools-1.7.3 → femagtools-1.7.4}/src/femagtools/templates/magnetIron3.mako +0 -0
  132. {femagtools-1.7.3 → femagtools-1.7.4}/src/femagtools/templates/magnetIron4.mako +0 -0
  133. {femagtools-1.7.3 → femagtools-1.7.4}/src/femagtools/templates/magnetIron5.mako +0 -0
  134. {femagtools-1.7.3 → femagtools-1.7.4}/src/femagtools/templates/magnetIronV.mako +0 -0
  135. {femagtools-1.7.3 → femagtools-1.7.4}/src/femagtools/templates/magnetSector.mako +0 -0
  136. {femagtools-1.7.3 → femagtools-1.7.4}/src/femagtools/templates/magnetSectorLinear.mako +0 -0
  137. {femagtools-1.7.3 → femagtools-1.7.4}/src/femagtools/templates/magnetShell.mako +0 -0
  138. {femagtools-1.7.3 → femagtools-1.7.4}/src/femagtools/templates/magnetShell2.mako +0 -0
  139. {femagtools-1.7.3 → femagtools-1.7.4}/src/femagtools/templates/mesh-airgap.mako +0 -0
  140. {femagtools-1.7.3 → femagtools-1.7.4}/src/femagtools/templates/modal_analysis.mako +0 -0
  141. {femagtools-1.7.3 → femagtools-1.7.4}/src/femagtools/templates/modified_steinmetz.mako +0 -0
  142. {femagtools-1.7.3 → femagtools-1.7.4}/src/femagtools/templates/mult_cal_fast.mako +0 -0
  143. {femagtools-1.7.3 → femagtools-1.7.4}/src/femagtools/templates/new_model.mako +0 -0
  144. {femagtools-1.7.3 → femagtools-1.7.4}/src/femagtools/templates/noloadflux-rot.mako +0 -0
  145. {femagtools-1.7.3 → femagtools-1.7.4}/src/femagtools/templates/noloadflux.mako +0 -0
  146. {femagtools-1.7.3 → femagtools-1.7.4}/src/femagtools/templates/noloadfluxdc.mako +0 -0
  147. {femagtools-1.7.3 → femagtools-1.7.4}/src/femagtools/templates/open.mako +0 -0
  148. {femagtools-1.7.3 → femagtools-1.7.4}/src/femagtools/templates/plots.mako +0 -0
  149. {femagtools-1.7.3 → femagtools-1.7.4}/src/femagtools/templates/pm_sym_f_cur.mako +0 -0
  150. {femagtools-1.7.3 → femagtools-1.7.4}/src/femagtools/templates/pm_sym_fast.mako +0 -0
  151. {femagtools-1.7.3 → femagtools-1.7.4}/src/femagtools/templates/pm_sym_loss.mako +0 -0
  152. {femagtools-1.7.3 → femagtools-1.7.4}/src/femagtools/templates/psd_psq_fast.mako +0 -0
  153. {femagtools-1.7.3 → femagtools-1.7.4}/src/femagtools/templates/ring.mako +0 -0
  154. {femagtools-1.7.3 → femagtools-1.7.4}/src/femagtools/templates/rot_hsm.mako +0 -0
  155. {femagtools-1.7.3 → femagtools-1.7.4}/src/femagtools/templates/rotorAsyn.mako +0 -0
  156. {femagtools-1.7.3 → femagtools-1.7.4}/src/femagtools/templates/rotorKs2.mako +0 -0
  157. {femagtools-1.7.3 → femagtools-1.7.4}/src/femagtools/templates/rotor_msh.mako +0 -0
  158. {femagtools-1.7.3 → femagtools-1.7.4}/src/femagtools/templates/rotor_winding.mako +0 -0
  159. {femagtools-1.7.3 → femagtools-1.7.4}/src/femagtools/templates/shortcircuit.mako +0 -0
  160. {femagtools-1.7.3 → femagtools-1.7.4}/src/femagtools/templates/srm.mako +0 -0
  161. {femagtools-1.7.3 → femagtools-1.7.4}/src/femagtools/templates/stator1.mako +0 -0
  162. {femagtools-1.7.3 → femagtools-1.7.4}/src/femagtools/templates/stator2.mako +0 -0
  163. {femagtools-1.7.3 → femagtools-1.7.4}/src/femagtools/templates/stator3Linear.mako +0 -0
  164. {femagtools-1.7.3 → femagtools-1.7.4}/src/femagtools/templates/stator4.mako +0 -0
  165. {femagtools-1.7.3 → femagtools-1.7.4}/src/femagtools/templates/statorBG.mako +0 -0
  166. {femagtools-1.7.3 → femagtools-1.7.4}/src/femagtools/templates/statorRing.mako +0 -0
  167. {femagtools-1.7.3 → femagtools-1.7.4}/src/femagtools/templates/statorRotor3.mako +0 -0
  168. {femagtools-1.7.3 → femagtools-1.7.4}/src/femagtools/templates/stator_msh.mako +0 -0
  169. {femagtools-1.7.3 → femagtools-1.7.4}/src/femagtools/templates/therm-dynamic.mako +0 -0
  170. {femagtools-1.7.3 → femagtools-1.7.4}/src/femagtools/templates/torq_calc.mako +0 -0
  171. {femagtools-1.7.3 → femagtools-1.7.4}/src/femagtools/tks.py +0 -0
  172. {femagtools-1.7.3 → femagtools-1.7.4}/src/femagtools/ts.py +0 -0
  173. {femagtools-1.7.3 → femagtools-1.7.4}/src/femagtools/utils.py +0 -0
  174. {femagtools-1.7.3 → femagtools-1.7.4}/src/femagtools/vbf.py +0 -0
  175. {femagtools-1.7.3 → femagtools-1.7.4}/src/femagtools/vtu.py +0 -0
  176. {femagtools-1.7.3 → femagtools-1.7.4}/src/femagtools.egg-info/dependency_links.txt +0 -0
  177. {femagtools-1.7.3 → femagtools-1.7.4}/src/femagtools.egg-info/entry_points.txt +0 -0
  178. {femagtools-1.7.3 → femagtools-1.7.4}/src/femagtools.egg-info/top_level.txt +0 -0
  179. {femagtools-1.7.3 → femagtools-1.7.4}/src/tests/__init__.py +0 -0
  180. {femagtools-1.7.3 → femagtools-1.7.4}/src/tests/engines/__init__.py +0 -0
  181. {femagtools-1.7.3 → femagtools-1.7.4}/src/tests/engines/test_amazon.py +0 -0
  182. {femagtools-1.7.3 → femagtools-1.7.4}/src/tests/engines/test_config.py +0 -0
  183. {femagtools-1.7.3 → femagtools-1.7.4}/src/tests/geom/__init__.py +0 -0
  184. {femagtools-1.7.3 → femagtools-1.7.4}/src/tests/geom/test_functions.py +0 -0
  185. {femagtools-1.7.3 → femagtools-1.7.4}/src/tests/geom/test_point_inside.py +0 -0
  186. {femagtools-1.7.3 → femagtools-1.7.4}/src/tests/moo/__init__.py +0 -0
  187. {femagtools-1.7.3 → femagtools-1.7.4}/src/tests/moo/test_algorithm.py +0 -0
  188. {femagtools-1.7.3 → femagtools-1.7.4}/src/tests/moo/test_population.py +0 -0
  189. {femagtools-1.7.3 → femagtools-1.7.4}/src/tests/moo/test_problem.py +0 -0
  190. {femagtools-1.7.3 → femagtools-1.7.4}/src/tests/test_afpm.py +0 -0
  191. {femagtools-1.7.3 → femagtools-1.7.4}/src/tests/test_airgap_induction.py +0 -0
  192. {femagtools-1.7.3 → femagtools-1.7.4}/src/tests/test_amela.py +0 -0
  193. {femagtools-1.7.3 → femagtools-1.7.4}/src/tests/test_asm.py +0 -0
  194. {femagtools-1.7.3 → femagtools-1.7.4}/src/tests/test_bchreader.py +0 -0
  195. {femagtools-1.7.3 → femagtools-1.7.4}/src/tests/test_conductor.py +0 -0
  196. {femagtools-1.7.3 → femagtools-1.7.4}/src/tests/test_convert.py +0 -0
  197. {femagtools-1.7.3 → femagtools-1.7.4}/src/tests/test_dxfsl.py +0 -0
  198. {femagtools-1.7.3 → femagtools-1.7.4}/src/tests/test_effloss.py +0 -0
  199. {femagtools-1.7.3 → femagtools-1.7.4}/src/tests/test_erg.py +0 -0
  200. {femagtools-1.7.3 → femagtools-1.7.4}/src/tests/test_femag.py +0 -0
  201. {femagtools-1.7.3 → femagtools-1.7.4}/src/tests/test_forcedens.py +0 -0
  202. {femagtools-1.7.3 → femagtools-1.7.4}/src/tests/test_fsl.py +0 -0
  203. {femagtools-1.7.3 → femagtools-1.7.4}/src/tests/test_hxy.py +0 -0
  204. {femagtools-1.7.3 → femagtools-1.7.4}/src/tests/test_im.py +0 -0
  205. {femagtools-1.7.3 → femagtools-1.7.4}/src/tests/test_isa7.py +0 -0
  206. {femagtools-1.7.3 → femagtools-1.7.4}/src/tests/test_jhb.py +0 -0
  207. {femagtools-1.7.3 → femagtools-1.7.4}/src/tests/test_job.py +0 -0
  208. {femagtools-1.7.3 → femagtools-1.7.4}/src/tests/test_losscoeffs.py +0 -0
  209. {femagtools-1.7.3 → femagtools-1.7.4}/src/tests/test_magncurv.py +0 -0
  210. {femagtools-1.7.3 → femagtools-1.7.4}/src/tests/test_magnet.py +0 -0
  211. {femagtools-1.7.3 → femagtools-1.7.4}/src/tests/test_mcv.py +0 -0
  212. {femagtools-1.7.3 → femagtools-1.7.4}/src/tests/test_mcvreader.py +0 -0
  213. {femagtools-1.7.3 → femagtools-1.7.4}/src/tests/test_mcvwriter.py +0 -0
  214. {femagtools-1.7.3 → femagtools-1.7.4}/src/tests/test_me.py +0 -0
  215. {femagtools-1.7.3 → femagtools-1.7.4}/src/tests/test_model.py +0 -0
  216. {femagtools-1.7.3 → femagtools-1.7.4}/src/tests/test_nc.py +0 -0
  217. {femagtools-1.7.3 → femagtools-1.7.4}/src/tests/test_parident.py +0 -0
  218. {femagtools-1.7.3 → femagtools-1.7.4}/src/tests/test_parstudy.py +0 -0
  219. {femagtools-1.7.3 → femagtools-1.7.4}/src/tests/test_pocfile.py +0 -0
  220. {femagtools-1.7.3 → femagtools-1.7.4}/src/tests/test_sizing.py +0 -0
  221. {femagtools-1.7.3 → femagtools-1.7.4}/src/tests/test_sm.py +0 -0
  222. {femagtools-1.7.3 → femagtools-1.7.4}/src/tests/test_tksreader.py +0 -0
  223. {femagtools-1.7.3 → femagtools-1.7.4}/src/tests/test_ts.py +0 -0
  224. {femagtools-1.7.3 → femagtools-1.7.4}/src/tests/test_vbfreader.py +0 -0
  225. {femagtools-1.7.3 → femagtools-1.7.4}/src/tests/test_vtu.py +0 -0
  226. {femagtools-1.7.3 → femagtools-1.7.4}/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.3
3
+ Version: 1.7.4
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
@@ -37,7 +37,7 @@ Classifier: Topic :: Scientific/Engineering
37
37
  Requires-Python: >=3.7
38
38
  Description-Content-Type: text/markdown
39
39
  License-File: LICENSE
40
- Requires-Dist: numpy
40
+ Requires-Dist: numpy<=1.26.4
41
41
  Requires-Dist: scipy
42
42
  Requires-Dist: mako
43
43
  Requires-Dist: six
@@ -22,7 +22,7 @@ classifiers = [
22
22
  "Topic :: Scientific/Engineering"
23
23
  ]
24
24
  dependencies = [
25
- 'numpy',
25
+ 'numpy<=1.26.4', # lmfit restriction
26
26
  'scipy',
27
27
  'mako',
28
28
  'six',
@@ -2,7 +2,7 @@
2
2
 
3
3
  """
4
4
  __title__ = 'femagtools'
5
- __version__ = '1.7.3'
5
+ __version__ = '1.7.4'
6
6
  __author__ = 'Ronald Tanner'
7
7
  __license__ = 'BSD'
8
8
  __copyright__ = 'Copyright 2023-2024 Gamma Technology'
@@ -52,3 +52,14 @@ def read(filename, pmod=0):
52
52
  return(dict())
53
53
 
54
54
  return fft(bag[0], bag[1], pmod)
55
+
56
+ if __name__ == '__main__':
57
+ import sys
58
+ import matplotlib.pyplot as plt
59
+ import femagtools.plot.fluxdens
60
+ ag = read(sys.argv[1])
61
+ fig, axs = plt.subplots(nrows=2)
62
+ femagtools.plot.fluxdens.airgap(ag, ax=axs[0])
63
+ femagtools.plot.fluxdens.airgap_fft(ag, ax=axs[1])
64
+ fig.tight_layout()
65
+ plt.show()
@@ -70,7 +70,7 @@ def sttylosses(losses):
70
70
  except KeyError:
71
71
  pass
72
72
  return d
73
-
73
+
74
74
  if sregs == {'StYoke', 'StTeeth'}:
75
75
  return hysteddy('StYoke', 'StTeeth', losses)
76
76
  if sregs == {'StJo', 'StZa'}:
@@ -95,9 +95,9 @@ def sttylosses(losses):
95
95
  return l
96
96
  return {}
97
97
 
98
- def losses_mapping_external_rotor(losses):
98
+ def losses_mapping_external_rotor(losses):
99
99
  styoke = 'rotor'
100
- rotor = 'Iron'
100
+ rotor = 'Iron'
101
101
  d = {}
102
102
  try:
103
103
  d['styoke'] = losses[styoke]
@@ -1046,7 +1046,7 @@ class Reader:
1046
1046
  '''
1047
1047
  diff = np.floor(np.abs(np.diff(idList)))
1048
1048
  if idList[-1] == 0 and len(idList) > 2 and \
1049
- not np.all(diff == diff[0]):
1049
+ diff[-1] == 0:
1050
1050
  idList = idList[:-1]
1051
1051
  return idList
1052
1052
 
@@ -1062,7 +1062,8 @@ class Reader:
1062
1062
  m.append([floatnan(x) for x in rec])
1063
1063
 
1064
1064
  m = np.array(m).T
1065
- ncols = np.argmax(np.abs(m[1][1:]-m[1][:-1]))+1
1065
+ d = np.diff(m[1])
1066
+ ncols = (len(d)+1)//(len(d[d < 0])+1)
1066
1067
  if ncols == 1 and len(m[1]) > 1 and m[1][0] != m[1][1]: # simple correction
1067
1068
  ncols = 2
1068
1069
  iq = np.reshape(m[1], (-1, ncols))[0]
@@ -1071,7 +1072,8 @@ class Reader:
1071
1072
  ncols = ncols-1
1072
1073
 
1073
1074
  id = np.reshape(m[0], (-1, ncols)).T[0]
1074
- id = self.__removeTrailingZero(id)
1075
+ if id[0] >= 0:
1076
+ id = self.__removeTrailingZero(id)
1075
1077
  nrows = len(id)
1076
1078
  if nrows > 1 and id[nrows-1] < id[nrows-2]:
1077
1079
  nrows = nrows-1
@@ -1096,7 +1098,8 @@ class Reader:
1096
1098
  m.append([floatnan(x) for x in rec])
1097
1099
 
1098
1100
  m = np.array(m).T
1099
- ncols = np.argmax(np.abs(m[1][1:]-m[1][:-1]))+1
1101
+ d = np.diff(m[1])
1102
+ ncols = (len(d)+1)//(len(d[d < 0])+1)
1100
1103
  if ncols == 1 and len(m[1]) > 1 and m[1][0] != m[1][1]: # simple correction
1101
1104
  ncols = 2
1102
1105
  iq = np.linspace(np.min(m[1]), np.max(m[1]), ncols)
@@ -1105,7 +1108,8 @@ class Reader:
1105
1108
  ncols = ncols-1
1106
1109
 
1107
1110
  id = np.reshape(m[0], (-1, ncols)).T[0]
1108
- id = self.__removeTrailingZero(id)
1111
+ if id[0] >= 0:
1112
+ id = self.__removeTrailingZero(id)
1109
1113
  nrows = len(id)
1110
1114
  if nrows > 1 and id[nrows-1] < id[nrows-2]:
1111
1115
  nrows = nrows-1
@@ -1168,7 +1172,7 @@ class Reader:
1168
1172
  for name in content[2].split('\t') if name][2:]
1169
1173
  # outer rotor motor
1170
1174
  if 'Iron' in subregs and \
1171
- 'Rotor' in subregs:
1175
+ 'Rotor' in subregs:
1172
1176
  self.external_rotor = True
1173
1177
  logger.info("Stator Subregions: %s", subregs)
1174
1178
  speed = float(content[0].split()[-1])/60.
@@ -1184,7 +1188,11 @@ class Reader:
1184
1188
  if not m:
1185
1189
  return
1186
1190
  m = np.array(m).T
1187
- ncols = np.argmax(np.abs(m[1][1:]-m[1][:-1]))+1
1191
+ d = np.diff(m[1])
1192
+ if self.ldq:
1193
+ ncols = (len(d)+1)//(len(d[d > 0])+1)
1194
+ else:
1195
+ ncols = (len(d)+1)//(len(d[d < 0])+1)
1188
1196
  if ncols == 1 and len(m[1]) > 1 and m[1][0] != m[1][1]:
1189
1197
  ncols = 2
1190
1198
  id = np.reshape(m[0], (-1, ncols)).T[0]
@@ -1229,9 +1237,9 @@ class Reader:
1229
1237
  (nrows, ncols)).T.tolist()
1230
1238
  for k, v in zip(cols, m[2:])})
1231
1239
  ls['speed'] = speed
1232
- if self.external_rotor:
1240
+ if self.external_rotor:
1233
1241
  ls.update(losses_mapping_external_rotor(ls))
1234
- else:
1242
+ else:
1235
1243
  ls.update(sttylosses(ls))
1236
1244
  if self.ldq:
1237
1245
  self.ldq['losses'] = ls
@@ -1487,9 +1495,9 @@ class Reader:
1487
1495
  def __read_losses(self, content):
1488
1496
  losses = {}
1489
1497
  i = 0
1490
- # check if external rotor
1498
+ # check if external rotor
1491
1499
  if self.weights[0][1] == 0.0 and \
1492
- self.weights[0][-1] > 0:
1500
+ self.weights[0][-1] > 0:
1493
1501
  self.external_rotor = True
1494
1502
  # find results for angle:
1495
1503
  while True:
@@ -1548,8 +1556,8 @@ class Reader:
1548
1556
  losses['total'] += losses['staza']+losses['stajo']
1549
1557
  elif len(rec) == 1:
1550
1558
  t = l.split(':')[-1].strip()
1551
- if t == 'Iron':
1552
- if self.external_rotor:
1559
+ if t == 'Iron':
1560
+ if self.external_rotor:
1553
1561
  losses['rotfe'] = floatnan(rec[0])
1554
1562
  losses['total'] += losses['rotfe']
1555
1563
  else:
@@ -1561,14 +1569,14 @@ class Reader:
1561
1569
  continue
1562
1570
 
1563
1571
  if _rotloss.search(l):
1564
- if l.find('StZa') > -1:
1572
+ if l.find('StZa') > -1:
1565
1573
  self.external_rotor = True
1566
1574
  rec = self.__findNums(content[i+2])
1567
1575
  if len(rec) == 1:
1568
- if self.external_rotor:
1576
+ if self.external_rotor:
1569
1577
  losses['staza'] = floatnan(rec[0])
1570
1578
  losses['total'] += losses['staza']
1571
- else:
1579
+ else:
1572
1580
  rotfe = floatnan(rec[0])
1573
1581
  losses['rotfe'] += rotfe
1574
1582
  losses['total'] += rotfe
@@ -1602,7 +1610,7 @@ class Reader:
1602
1610
  if content[i+1].split() == ['rotf', '----']:
1603
1611
  losses['rotfe'] = sum([floatnan(x) for x in rec])
1604
1612
  losses['total'] += losses['rotfe']
1605
-
1613
+
1606
1614
  if content[i+1].split() == ['Iron', '----']: # external rotor
1607
1615
  losses['rotfe'] = sum([floatnan(x) for x in rec])
1608
1616
  losses['total'] += losses['rotfe']
@@ -189,7 +189,7 @@ class FslRenderer(object):
189
189
  '-- min_corner = {}, {}'.format(
190
190
  geom.start_min_corner(0),
191
191
  geom.start_min_corner(1)),
192
- '-- max_corner = {}, {}'.format(
192
+ '-- max_corner start = {}, {}'.format(
193
193
  geom.start_max_corner(0),
194
194
  geom.start_max_corner(1)),
195
195
  '\n']
@@ -211,11 +211,12 @@ class FslRenderer(object):
211
211
  'r, phi = c2pr(x0, y0)',
212
212
  'x1, y1 = pr2c(r1, phi)',
213
213
  'x2, y2 = pr2c(r1, {}*math.pi/parts)'.format(slice),
214
+ f'r = {geom.dist_end_max_corner()}',
214
215
  'x3, y3 = pr2c(r, {}*math.pi/parts)'.format(slice),
215
216
  'nc_line(x0, y0, x1, y1, 0)',
216
217
  'nc_circle_m(x1, y1, x2, y2, 0.0, 0.0, 0)',
217
218
  'nc_line(x2, y2, x3, y3, 0)',
218
- 'x0, y0 = pr2c(r1 - hair/2, math.pi/parts)',
219
+ 'x0, y0 = pr2c(r1 - hair/2, math.pi/parts/2)',
219
220
  'create_mesh_se(x0, y0)',
220
221
  '\n',
221
222
  'outer_da_start = {}'.format(
@@ -106,6 +106,7 @@ class Builder:
106
106
  params['show_plots'] = model.stator[templ].get('plot', False)
107
107
  params['write_fsl'] = True
108
108
  params['airgap'] = -1.0
109
+ params['nodedist'] = model.stator.get('nodedist', 1)
109
110
  pos = 'in' if model.external_rotor else 'out'
110
111
  params['part'] = ('stator', pos)
111
112
  conv = convert(model.stator['dxffile']['name'], **params)
@@ -491,6 +492,11 @@ class Builder:
491
492
  if not hasattr(model, 'stator'):
492
493
  setattr(model, 'stator', {})
493
494
  model.stator['num_slots'] = conv.get('tot_num_slot')
495
+ if model.get('num_agnodes', 0) == 0:
496
+ model.set_value('agndst', conv['agndst']*1e-3)
497
+ logger.info("num poles %d num slots %d outer diameter %.4f m agndst %.4f mm",
498
+ model.poles, model.stator['num_slots'],
499
+ model.outer_diam, model.agndst*1e3)
494
500
  if params['full_model']:
495
501
  model.stator['num_slots_gen'] = model.stator['num_slots']
496
502
  else:
@@ -531,21 +537,6 @@ class Builder:
531
537
  logger.info("create new model '%s'", model.name)
532
538
  if model.is_dxffile():
533
539
  self.prepare_model_with_dxf(model)
534
- if model.get('num_agnodes', 0) == 0:
535
- from femagtools.dxfsl.fslrenderer import agndst
536
- ag = model.get('airgap')
537
- model.set_value(
538
- 'agndst',
539
- agndst(model.get('bore_diam'),
540
- model.get('bore_diam') - 2*ag,
541
- model.stator.get('num_slots'),
542
- model.get('poles'),
543
- model.dxffile.get('nodedist')))
544
-
545
- logger.info(" num poles %d num slots %d outer diameter %.4f m",
546
- model.poles, model.stator['num_slots'],
547
- model.outer_diam)
548
-
549
540
  else:
550
541
  self.prepare_stator(model)
551
542
  if hasattr(model, 'magnet'):
@@ -553,9 +544,9 @@ class Builder:
553
544
  self.prepare_diameter(model)
554
545
  if self.fsl_stator and model.get('num_agnodes', 0) == 0:
555
546
  from femagtools.dxfsl.fslrenderer import agndst
556
- if model.get('agndst'):
547
+ if model.get('agndst',0):
557
548
  pass
558
- else:
549
+ else:
559
550
  ag = model.get('airgap')
560
551
  model.set_value(
561
552
  'agndst',