femagtools 1.8.17__tar.gz → 1.8.18__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.
- {femagtools-1.8.17/src/femagtools.egg-info → femagtools-1.8.18}/PKG-INFO +2 -2
- {femagtools-1.8.17 → femagtools-1.8.18}/pyproject.toml +1 -1
- {femagtools-1.8.17 → femagtools-1.8.18}/src/femagtools/__init__.py +1 -1
- {femagtools-1.8.17 → femagtools-1.8.18}/src/femagtools/airgap.py +5 -1
- {femagtools-1.8.17 → femagtools-1.8.18}/src/femagtools/dxfsl/area.py +35 -23
- {femagtools-1.8.17 → femagtools-1.8.18}/src/femagtools/dxfsl/areabuilder.py +69 -46
- {femagtools-1.8.17 → femagtools-1.8.18}/src/femagtools/dxfsl/converter.py +9 -1
- {femagtools-1.8.17 → femagtools-1.8.18}/src/femagtools/dxfsl/geom.py +233 -56
- {femagtools-1.8.17 → femagtools-1.8.18}/src/femagtools/dxfsl/machine.py +28 -8
- {femagtools-1.8.17 → femagtools-1.8.18}/src/femagtools/dxfsl/symmetry.py +20 -5
- {femagtools-1.8.17 → femagtools-1.8.18}/src/femagtools/femag.py +27 -16
- {femagtools-1.8.17 → femagtools-1.8.18}/src/femagtools/machine/__init__.py +2 -0
- {femagtools-1.8.17 → femagtools-1.8.18}/src/femagtools/machine/effloss.py +10 -4
- {femagtools-1.8.17 → femagtools-1.8.18}/src/femagtools/machine/pm.py +72 -68
- {femagtools-1.8.17 → femagtools-1.8.18}/src/femagtools/machine/sm.py +15 -15
- {femagtools-1.8.17 → femagtools-1.8.18}/src/femagtools/plot/bch.py +3 -1
- {femagtools-1.8.17 → femagtools-1.8.18}/src/femagtools/plot/char.py +5 -16
- {femagtools-1.8.17 → femagtools-1.8.18}/src/femagtools/plot/nc.py +67 -34
- {femagtools-1.8.17 → femagtools-1.8.18}/src/femagtools/shortcircuit.py +10 -3
- {femagtools-1.8.17 → femagtools-1.8.18}/src/femagtools/utils.py +5 -4
- {femagtools-1.8.17 → femagtools-1.8.18/src/femagtools.egg-info}/PKG-INFO +2 -2
- {femagtools-1.8.17 → femagtools-1.8.18}/src/femagtools.egg-info/requires.txt +1 -1
- {femagtools-1.8.17 → femagtools-1.8.18}/src/tests/test_machine.py +1 -2
- {femagtools-1.8.17 → femagtools-1.8.18}/LICENSE +0 -0
- {femagtools-1.8.17 → femagtools-1.8.18}/MANIFEST.in +0 -0
- {femagtools-1.8.17 → femagtools-1.8.18}/README.md +0 -0
- {femagtools-1.8.17 → femagtools-1.8.18}/setup.cfg +0 -0
- {femagtools-1.8.17 → femagtools-1.8.18}/src/femagtools/amazon.py +0 -0
- {femagtools-1.8.17 → femagtools-1.8.18}/src/femagtools/amela.py +0 -0
- {femagtools-1.8.17 → femagtools-1.8.18}/src/femagtools/asm.py +0 -0
- {femagtools-1.8.17 → femagtools-1.8.18}/src/femagtools/bch.py +0 -0
- {femagtools-1.8.17 → femagtools-1.8.18}/src/femagtools/bchxml.py +0 -0
- {femagtools-1.8.17 → femagtools-1.8.18}/src/femagtools/condor.py +0 -0
- {femagtools-1.8.17 → femagtools-1.8.18}/src/femagtools/conductor.py +0 -0
- {femagtools-1.8.17 → femagtools-1.8.18}/src/femagtools/config.py +0 -0
- {femagtools-1.8.17 → femagtools-1.8.18}/src/femagtools/convert.py +0 -0
- {femagtools-1.8.17 → femagtools-1.8.18}/src/femagtools/dakota.py +0 -0
- {femagtools-1.8.17 → femagtools-1.8.18}/src/femagtools/dakota_femag.py +0 -0
- {femagtools-1.8.17 → femagtools-1.8.18}/src/femagtools/dakotaout.py +0 -0
- {femagtools-1.8.17 → femagtools-1.8.18}/src/femagtools/docker.py +0 -0
- {femagtools-1.8.17 → femagtools-1.8.18}/src/femagtools/dxfsl/__init__.py +0 -0
- {femagtools-1.8.17 → femagtools-1.8.18}/src/femagtools/dxfsl/concat.py +0 -0
- {femagtools-1.8.17 → femagtools-1.8.18}/src/femagtools/dxfsl/conv.py +0 -0
- {femagtools-1.8.17 → femagtools-1.8.18}/src/femagtools/dxfsl/corner.py +0 -0
- {femagtools-1.8.17 → femagtools-1.8.18}/src/femagtools/dxfsl/dumprenderer.py +0 -0
- {femagtools-1.8.17 → femagtools-1.8.18}/src/femagtools/dxfsl/dxfparser.py +0 -0
- {femagtools-1.8.17 → femagtools-1.8.18}/src/femagtools/dxfsl/femparser.py +0 -0
- {femagtools-1.8.17 → femagtools-1.8.18}/src/femagtools/dxfsl/fslrenderer.py +0 -0
- {femagtools-1.8.17 → femagtools-1.8.18}/src/femagtools/dxfsl/functions.py +0 -0
- {femagtools-1.8.17 → femagtools-1.8.18}/src/femagtools/dxfsl/journal.py +0 -0
- {femagtools-1.8.17 → femagtools-1.8.18}/src/femagtools/dxfsl/plotrenderer.py +0 -0
- {femagtools-1.8.17 → femagtools-1.8.18}/src/femagtools/dxfsl/shape.py +0 -0
- {femagtools-1.8.17 → femagtools-1.8.18}/src/femagtools/dxfsl/svgparser.py +0 -0
- {femagtools-1.8.17 → femagtools-1.8.18}/src/femagtools/ecloss.py +0 -0
- {femagtools-1.8.17 → femagtools-1.8.18}/src/femagtools/erg.py +0 -0
- {femagtools-1.8.17 → femagtools-1.8.18}/src/femagtools/forcedens.py +0 -0
- {femagtools-1.8.17 → femagtools-1.8.18}/src/femagtools/fsl.py +0 -0
- {femagtools-1.8.17 → femagtools-1.8.18}/src/femagtools/getset.py +0 -0
- {femagtools-1.8.17 → femagtools-1.8.18}/src/femagtools/gmsh.py +0 -0
- {femagtools-1.8.17 → femagtools-1.8.18}/src/femagtools/google.py +0 -0
- {femagtools-1.8.17 → femagtools-1.8.18}/src/femagtools/grid.py +0 -0
- {femagtools-1.8.17 → femagtools-1.8.18}/src/femagtools/heat_source_network.py +0 -0
- {femagtools-1.8.17 → femagtools-1.8.18}/src/femagtools/hxy.py +0 -0
- {femagtools-1.8.17 → femagtools-1.8.18}/src/femagtools/isa7.py +0 -0
- {femagtools-1.8.17 → femagtools-1.8.18}/src/femagtools/jhb.py +0 -0
- {femagtools-1.8.17 → femagtools-1.8.18}/src/femagtools/job.py +0 -0
- {femagtools-1.8.17 → femagtools-1.8.18}/src/femagtools/leakinduc.py +0 -0
- {femagtools-1.8.17 → femagtools-1.8.18}/src/femagtools/losscoeffs.py +0 -0
- {femagtools-1.8.17 → femagtools-1.8.18}/src/femagtools/machine/afpm.py +0 -0
- {femagtools-1.8.17 → femagtools-1.8.18}/src/femagtools/machine/im.py +0 -0
- {femagtools-1.8.17 → femagtools-1.8.18}/src/femagtools/machine/sizing.py +0 -0
- {femagtools-1.8.17 → femagtools-1.8.18}/src/femagtools/machine/utils.py +0 -0
- {femagtools-1.8.17 → femagtools-1.8.18}/src/femagtools/magnet.py +0 -0
- {femagtools-1.8.17 → femagtools-1.8.18}/src/femagtools/mcv.py +0 -0
- {femagtools-1.8.17 → femagtools-1.8.18}/src/femagtools/me.py +0 -0
- {femagtools-1.8.17 → femagtools-1.8.18}/src/femagtools/model.py +0 -0
- {femagtools-1.8.17 → femagtools-1.8.18}/src/femagtools/moo/__init__.py +0 -0
- {femagtools-1.8.17 → femagtools-1.8.18}/src/femagtools/moo/algorithm.py +0 -0
- {femagtools-1.8.17 → femagtools-1.8.18}/src/femagtools/moo/population.py +0 -0
- {femagtools-1.8.17 → femagtools-1.8.18}/src/femagtools/moo/problem.py +0 -0
- {femagtools-1.8.17 → femagtools-1.8.18}/src/femagtools/moo/test/AlgorithmTest.py +0 -0
- {femagtools-1.8.17 → femagtools-1.8.18}/src/femagtools/moo/test/PopulationTest.py +0 -0
- {femagtools-1.8.17 → femagtools-1.8.18}/src/femagtools/moo/test/ProblemTest.py +0 -0
- {femagtools-1.8.17 → femagtools-1.8.18}/src/femagtools/moproblem.py +0 -0
- {femagtools-1.8.17 → femagtools-1.8.18}/src/femagtools/multiproc.py +0 -0
- {femagtools-1.8.17 → femagtools-1.8.18}/src/femagtools/mxw2msh.py +0 -0
- {femagtools-1.8.17 → femagtools-1.8.18}/src/femagtools/nc.py +0 -0
- {femagtools-1.8.17 → femagtools-1.8.18}/src/femagtools/netlist.py +0 -0
- {femagtools-1.8.17 → femagtools-1.8.18}/src/femagtools/ntib.py +0 -0
- {femagtools-1.8.17 → femagtools-1.8.18}/src/femagtools/opt.py +0 -0
- {femagtools-1.8.17 → femagtools-1.8.18}/src/femagtools/parstudy.py +0 -0
- {femagtools-1.8.17 → femagtools-1.8.18}/src/femagtools/plot/__init__.py +0 -0
- {femagtools-1.8.17 → femagtools-1.8.18}/src/femagtools/plot/fieldlines.py +0 -0
- {femagtools-1.8.17 → femagtools-1.8.18}/src/femagtools/plot/fluxdens.py +0 -0
- {femagtools-1.8.17 → femagtools-1.8.18}/src/femagtools/plot/forcedens.py +0 -0
- {femagtools-1.8.17 → femagtools-1.8.18}/src/femagtools/plot/machine.py +0 -0
- {femagtools-1.8.17 → femagtools-1.8.18}/src/femagtools/plot/mcv.py +0 -0
- {femagtools-1.8.17 → femagtools-1.8.18}/src/femagtools/plot/phasor.py +0 -0
- {femagtools-1.8.17 → femagtools-1.8.18}/src/femagtools/plot/wdg.py +0 -0
- {femagtools-1.8.17 → femagtools-1.8.18}/src/femagtools/poc.py +0 -0
- {femagtools-1.8.17 → femagtools-1.8.18}/src/femagtools/semi_fea.py +0 -0
- {femagtools-1.8.17 → femagtools-1.8.18}/src/femagtools/svgfsl/converter.py +0 -0
- {femagtools-1.8.17 → femagtools-1.8.18}/src/femagtools/templates/FE-losses.mako +0 -0
- {femagtools-1.8.17 → femagtools-1.8.18}/src/femagtools/templates/afm_rotor.mako +0 -0
- {femagtools-1.8.17 → femagtools-1.8.18}/src/femagtools/templates/afm_stator.mako +0 -0
- {femagtools-1.8.17 → femagtools-1.8.18}/src/femagtools/templates/airgapinduc.mako +0 -0
- {femagtools-1.8.17 → femagtools-1.8.18}/src/femagtools/templates/asyn_motor.mako +0 -0
- {femagtools-1.8.17 → femagtools-1.8.18}/src/femagtools/templates/basic_modpar.mako +0 -0
- {femagtools-1.8.17 → femagtools-1.8.18}/src/femagtools/templates/bertotti.mako +0 -0
- {femagtools-1.8.17 → femagtools-1.8.18}/src/femagtools/templates/calc_field_ts.mako +0 -0
- {femagtools-1.8.17 → femagtools-1.8.18}/src/femagtools/templates/calc_therm_field.mako +0 -0
- {femagtools-1.8.17 → femagtools-1.8.18}/src/femagtools/templates/cogg_calc.mako +0 -0
- {femagtools-1.8.17 → femagtools-1.8.18}/src/femagtools/templates/colorgrad.mako +0 -0
- {femagtools-1.8.17 → femagtools-1.8.18}/src/femagtools/templates/com_motor_sim.mako +0 -0
- {femagtools-1.8.17 → femagtools-1.8.18}/src/femagtools/templates/conduct-data.mako +0 -0
- {femagtools-1.8.17 → femagtools-1.8.18}/src/femagtools/templates/connect_models.mako +0 -0
- {femagtools-1.8.17 → femagtools-1.8.18}/src/femagtools/templates/cu_losses.mako +0 -0
- {femagtools-1.8.17 → femagtools-1.8.18}/src/femagtools/templates/displ_stator_rotor.mako +0 -0
- {femagtools-1.8.17 → femagtools-1.8.18}/src/femagtools/templates/ec-rotorbar.mako +0 -0
- {femagtools-1.8.17 → femagtools-1.8.18}/src/femagtools/templates/fe-contr.mako +0 -0
- {femagtools-1.8.17 → femagtools-1.8.18}/src/femagtools/templates/fieldcalc.mako +0 -0
- {femagtools-1.8.17 → femagtools-1.8.18}/src/femagtools/templates/gen_hairpin_winding.mako +0 -0
- {femagtools-1.8.17 → femagtools-1.8.18}/src/femagtools/templates/gen_winding.mako +0 -0
- {femagtools-1.8.17 → femagtools-1.8.18}/src/femagtools/templates/inductances.mako +0 -0
- {femagtools-1.8.17 → femagtools-1.8.18}/src/femagtools/templates/ld_lq_fast.mako +0 -0
- {femagtools-1.8.17 → femagtools-1.8.18}/src/femagtools/templates/leak_dist_wind.mako +0 -0
- {femagtools-1.8.17 → femagtools-1.8.18}/src/femagtools/templates/leak_evol_wind.mako +0 -0
- {femagtools-1.8.17 → femagtools-1.8.18}/src/femagtools/templates/leak_tooth_wind.mako +0 -0
- {femagtools-1.8.17 → femagtools-1.8.18}/src/femagtools/templates/magnet-data.mako +0 -0
- {femagtools-1.8.17 → femagtools-1.8.18}/src/femagtools/templates/magnetFC2.mako +0 -0
- {femagtools-1.8.17 → femagtools-1.8.18}/src/femagtools/templates/magnetIron.mako +0 -0
- {femagtools-1.8.17 → femagtools-1.8.18}/src/femagtools/templates/magnetIron2.mako +0 -0
- {femagtools-1.8.17 → femagtools-1.8.18}/src/femagtools/templates/magnetIron3.mako +0 -0
- {femagtools-1.8.17 → femagtools-1.8.18}/src/femagtools/templates/magnetIron4.mako +0 -0
- {femagtools-1.8.17 → femagtools-1.8.18}/src/femagtools/templates/magnetIron5.mako +0 -0
- {femagtools-1.8.17 → femagtools-1.8.18}/src/femagtools/templates/magnetIronV.mako +0 -0
- {femagtools-1.8.17 → femagtools-1.8.18}/src/femagtools/templates/magnetSector.mako +0 -0
- {femagtools-1.8.17 → femagtools-1.8.18}/src/femagtools/templates/magnetSectorLinear.mako +0 -0
- {femagtools-1.8.17 → femagtools-1.8.18}/src/femagtools/templates/magnetShell.mako +0 -0
- {femagtools-1.8.17 → femagtools-1.8.18}/src/femagtools/templates/magnetShell2.mako +0 -0
- {femagtools-1.8.17 → femagtools-1.8.18}/src/femagtools/templates/mesh-airgap.mako +0 -0
- {femagtools-1.8.17 → femagtools-1.8.18}/src/femagtools/templates/modal_analysis.mako +0 -0
- {femagtools-1.8.17 → femagtools-1.8.18}/src/femagtools/templates/modified_steinmetz.mako +0 -0
- {femagtools-1.8.17 → femagtools-1.8.18}/src/femagtools/templates/mult_cal_fast.mako +0 -0
- {femagtools-1.8.17 → femagtools-1.8.18}/src/femagtools/templates/new_model.mako +0 -0
- {femagtools-1.8.17 → femagtools-1.8.18}/src/femagtools/templates/noloadflux-rot.mako +0 -0
- {femagtools-1.8.17 → femagtools-1.8.18}/src/femagtools/templates/noloadflux.mako +0 -0
- {femagtools-1.8.17 → femagtools-1.8.18}/src/femagtools/templates/noloadfluxdc.mako +0 -0
- {femagtools-1.8.17 → femagtools-1.8.18}/src/femagtools/templates/open.mako +0 -0
- {femagtools-1.8.17 → femagtools-1.8.18}/src/femagtools/templates/plots.mako +0 -0
- {femagtools-1.8.17 → femagtools-1.8.18}/src/femagtools/templates/pm_sym_f_cur.mako +0 -0
- {femagtools-1.8.17 → femagtools-1.8.18}/src/femagtools/templates/pm_sym_fast.mako +0 -0
- {femagtools-1.8.17 → femagtools-1.8.18}/src/femagtools/templates/pm_sym_loss.mako +0 -0
- {femagtools-1.8.17 → femagtools-1.8.18}/src/femagtools/templates/prepare_thermal.mako +0 -0
- {femagtools-1.8.17 → femagtools-1.8.18}/src/femagtools/templates/psd_psq_fast.mako +0 -0
- {femagtools-1.8.17 → femagtools-1.8.18}/src/femagtools/templates/psi-torq-rem-rot.mako +0 -0
- {femagtools-1.8.17 → femagtools-1.8.18}/src/femagtools/templates/psi-torq-rem.mako +0 -0
- {femagtools-1.8.17 → femagtools-1.8.18}/src/femagtools/templates/psi-torq-rot.mako +0 -0
- {femagtools-1.8.17 → femagtools-1.8.18}/src/femagtools/templates/ring.mako +0 -0
- {femagtools-1.8.17 → femagtools-1.8.18}/src/femagtools/templates/rot_hsm.mako +0 -0
- {femagtools-1.8.17 → femagtools-1.8.18}/src/femagtools/templates/rotorAsyn.mako +0 -0
- {femagtools-1.8.17 → femagtools-1.8.18}/src/femagtools/templates/rotorKs2.mako +0 -0
- {femagtools-1.8.17 → femagtools-1.8.18}/src/femagtools/templates/rotor_msh.mako +0 -0
- {femagtools-1.8.17 → femagtools-1.8.18}/src/femagtools/templates/rotor_winding.mako +0 -0
- {femagtools-1.8.17 → femagtools-1.8.18}/src/femagtools/templates/shortcircuit.mako +0 -0
- {femagtools-1.8.17 → femagtools-1.8.18}/src/femagtools/templates/srm.mako +0 -0
- {femagtools-1.8.17 → femagtools-1.8.18}/src/femagtools/templates/stator1.mako +0 -0
- {femagtools-1.8.17 → femagtools-1.8.18}/src/femagtools/templates/stator2.mako +0 -0
- {femagtools-1.8.17 → femagtools-1.8.18}/src/femagtools/templates/stator3Linear.mako +0 -0
- {femagtools-1.8.17 → femagtools-1.8.18}/src/femagtools/templates/stator4.mako +0 -0
- {femagtools-1.8.17 → femagtools-1.8.18}/src/femagtools/templates/statorBG.mako +0 -0
- {femagtools-1.8.17 → femagtools-1.8.18}/src/femagtools/templates/statorRing.mako +0 -0
- {femagtools-1.8.17 → femagtools-1.8.18}/src/femagtools/templates/statorRotor3.mako +0 -0
- {femagtools-1.8.17 → femagtools-1.8.18}/src/femagtools/templates/stator_msh.mako +0 -0
- {femagtools-1.8.17 → femagtools-1.8.18}/src/femagtools/templates/therm-dynamic.mako +0 -0
- {femagtools-1.8.17 → femagtools-1.8.18}/src/femagtools/templates/therm_static.mako +0 -0
- {femagtools-1.8.17 → femagtools-1.8.18}/src/femagtools/templates/torq_calc.mako +0 -0
- {femagtools-1.8.17 → femagtools-1.8.18}/src/femagtools/tks.py +0 -0
- {femagtools-1.8.17 → femagtools-1.8.18}/src/femagtools/ts.py +0 -0
- {femagtools-1.8.17 → femagtools-1.8.18}/src/femagtools/vbf.py +0 -0
- {femagtools-1.8.17 → femagtools-1.8.18}/src/femagtools/vtu.py +0 -0
- {femagtools-1.8.17 → femagtools-1.8.18}/src/femagtools/windings.py +0 -0
- {femagtools-1.8.17 → femagtools-1.8.18}/src/femagtools/zmq.py +0 -0
- {femagtools-1.8.17 → femagtools-1.8.18}/src/femagtools.egg-info/SOURCES.txt +0 -0
- {femagtools-1.8.17 → femagtools-1.8.18}/src/femagtools.egg-info/dependency_links.txt +0 -0
- {femagtools-1.8.17 → femagtools-1.8.18}/src/femagtools.egg-info/entry_points.txt +0 -0
- {femagtools-1.8.17 → femagtools-1.8.18}/src/femagtools.egg-info/top_level.txt +0 -0
- {femagtools-1.8.17 → femagtools-1.8.18}/src/tests/__init__.py +0 -0
- {femagtools-1.8.17 → femagtools-1.8.18}/src/tests/engines/__init__.py +0 -0
- {femagtools-1.8.17 → femagtools-1.8.18}/src/tests/engines/test_amazon.py +0 -0
- {femagtools-1.8.17 → femagtools-1.8.18}/src/tests/engines/test_config.py +0 -0
- {femagtools-1.8.17 → femagtools-1.8.18}/src/tests/geom/__init__.py +0 -0
- {femagtools-1.8.17 → femagtools-1.8.18}/src/tests/geom/test_functions.py +0 -0
- {femagtools-1.8.17 → femagtools-1.8.18}/src/tests/geom/test_point_inside.py +0 -0
- {femagtools-1.8.17 → femagtools-1.8.18}/src/tests/moo/__init__.py +0 -0
- {femagtools-1.8.17 → femagtools-1.8.18}/src/tests/moo/test_algorithm.py +0 -0
- {femagtools-1.8.17 → femagtools-1.8.18}/src/tests/moo/test_population.py +0 -0
- {femagtools-1.8.17 → femagtools-1.8.18}/src/tests/moo/test_problem.py +0 -0
- {femagtools-1.8.17 → femagtools-1.8.18}/src/tests/test_afpm.py +0 -0
- {femagtools-1.8.17 → femagtools-1.8.18}/src/tests/test_airgap_induction.py +0 -0
- {femagtools-1.8.17 → femagtools-1.8.18}/src/tests/test_amela.py +0 -0
- {femagtools-1.8.17 → femagtools-1.8.18}/src/tests/test_asm.py +0 -0
- {femagtools-1.8.17 → femagtools-1.8.18}/src/tests/test_bchreader.py +0 -0
- {femagtools-1.8.17 → femagtools-1.8.18}/src/tests/test_conductor.py +0 -0
- {femagtools-1.8.17 → femagtools-1.8.18}/src/tests/test_convert.py +0 -0
- {femagtools-1.8.17 → femagtools-1.8.18}/src/tests/test_dxfsl.py +0 -0
- {femagtools-1.8.17 → femagtools-1.8.18}/src/tests/test_effloss.py +0 -0
- {femagtools-1.8.17 → femagtools-1.8.18}/src/tests/test_erg.py +0 -0
- {femagtools-1.8.17 → femagtools-1.8.18}/src/tests/test_femag.py +0 -0
- {femagtools-1.8.17 → femagtools-1.8.18}/src/tests/test_forcedens.py +0 -0
- {femagtools-1.8.17 → femagtools-1.8.18}/src/tests/test_fsl.py +0 -0
- {femagtools-1.8.17 → femagtools-1.8.18}/src/tests/test_heat_source_network.py +0 -0
- {femagtools-1.8.17 → femagtools-1.8.18}/src/tests/test_hxy.py +0 -0
- {femagtools-1.8.17 → femagtools-1.8.18}/src/tests/test_im.py +0 -0
- {femagtools-1.8.17 → femagtools-1.8.18}/src/tests/test_isa7.py +0 -0
- {femagtools-1.8.17 → femagtools-1.8.18}/src/tests/test_jhb.py +0 -0
- {femagtools-1.8.17 → femagtools-1.8.18}/src/tests/test_job.py +0 -0
- {femagtools-1.8.17 → femagtools-1.8.18}/src/tests/test_losscoeffs.py +0 -0
- {femagtools-1.8.17 → femagtools-1.8.18}/src/tests/test_magncurv.py +0 -0
- {femagtools-1.8.17 → femagtools-1.8.18}/src/tests/test_magnet.py +0 -0
- {femagtools-1.8.17 → femagtools-1.8.18}/src/tests/test_mcv.py +0 -0
- {femagtools-1.8.17 → femagtools-1.8.18}/src/tests/test_mcvreader.py +0 -0
- {femagtools-1.8.17 → femagtools-1.8.18}/src/tests/test_me.py +0 -0
- {femagtools-1.8.17 → femagtools-1.8.18}/src/tests/test_model.py +0 -0
- {femagtools-1.8.17 → femagtools-1.8.18}/src/tests/test_nc.py +0 -0
- {femagtools-1.8.17 → femagtools-1.8.18}/src/tests/test_parident.py +0 -0
- {femagtools-1.8.17 → femagtools-1.8.18}/src/tests/test_parstudy.py +0 -0
- {femagtools-1.8.17 → femagtools-1.8.18}/src/tests/test_pocfile.py +0 -0
- {femagtools-1.8.17 → femagtools-1.8.18}/src/tests/test_sizing.py +0 -0
- {femagtools-1.8.17 → femagtools-1.8.18}/src/tests/test_sm.py +0 -0
- {femagtools-1.8.17 → femagtools-1.8.18}/src/tests/test_tksreader.py +0 -0
- {femagtools-1.8.17 → femagtools-1.8.18}/src/tests/test_ts.py +0 -0
- {femagtools-1.8.17 → femagtools-1.8.18}/src/tests/test_vbfreader.py +0 -0
- {femagtools-1.8.17 → femagtools-1.8.18}/src/tests/test_vtu.py +0 -0
- {femagtools-1.8.17 → femagtools-1.8.18}/src/tests/test_windings.py +0 -0
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: femagtools
|
3
|
-
Version: 1.8.
|
3
|
+
Version: 1.8.18
|
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
|
@@ -38,7 +38,7 @@ Requires-Python: >=3.7
|
|
38
38
|
Description-Content-Type: text/markdown
|
39
39
|
License-File: LICENSE
|
40
40
|
Requires-Dist: numpy
|
41
|
-
Requires-Dist: scipy
|
41
|
+
Requires-Dist: scipy<=1.14.1
|
42
42
|
Requires-Dist: mako
|
43
43
|
Requires-Dist: six
|
44
44
|
Requires-Dist: lmfit
|
@@ -24,7 +24,11 @@ def fft(pos: list, b: list, pmod=0) -> dict:
|
|
24
24
|
Bamp = r['a']
|
25
25
|
alfa0 = r['alfa0']
|
26
26
|
T0 = r['T0']
|
27
|
-
|
27
|
+
try:
|
28
|
+
npoles = 2*round(360/T0)
|
29
|
+
except ZeroDivisionError:
|
30
|
+
npoles=0
|
31
|
+
pass
|
28
32
|
logger.info("flux density: %s poles B amp %f ",
|
29
33
|
npoles, r['a'])
|
30
34
|
return dict(Bamp=Bamp, npoles=npoles,
|
@@ -475,6 +475,19 @@ class Area(object):
|
|
475
475
|
|
476
476
|
self.alpha = round(alpha_angle(self.min_angle, self.max_angle), 3)
|
477
477
|
|
478
|
+
def set_close_to_start_end_angles(self, startangle, endangle):
|
479
|
+
logger.debug("set_close_to_start_end_angles(%s, %s)",startangle, endangle)
|
480
|
+
logger.debug(">> %s: min/max = %s/%s", self.identifier(), self.min_angle, self.max_angle)
|
481
|
+
if np.isclose(startangle, endangle): # full
|
482
|
+
self.close_to_startangle = True
|
483
|
+
self.close_to_endangle = True
|
484
|
+
return
|
485
|
+
|
486
|
+
self.close_to_startangle = np.isclose(self.min_angle, startangle,
|
487
|
+
1e-04, 1e-04)
|
488
|
+
self.close_to_endangle = np.isclose(self.max_angle, endangle,
|
489
|
+
1e-04, 1e-04)
|
490
|
+
|
478
491
|
def center_is_inside(self, center):
|
479
492
|
if less(self.min_x, center[0], rtol=1e-03, atol=1e-04) and \
|
480
493
|
greater(self.max_x, center[0], rtol=1e-03, atol=1e-04) and \
|
@@ -552,12 +565,17 @@ class Area(object):
|
|
552
565
|
return (self.close_to_startangle and self.close_to_endangle)
|
553
566
|
|
554
567
|
def is_in_touch_with_area(self, geom, a):
|
568
|
+
if self.is_one_circle_element():
|
569
|
+
return False
|
570
|
+
if a.is_one_circle_element():
|
571
|
+
return False
|
572
|
+
|
555
573
|
n1 = self.area[0].n1
|
556
574
|
n2 = a.area[0].n2
|
557
575
|
try:
|
558
576
|
return nx.has_path(geom.g, n1, n2)
|
559
|
-
except nx.NetworkXError:
|
560
|
-
logger.warning("has_path() failed")
|
577
|
+
except nx.NetworkXError as e:
|
578
|
+
logger.warning("has_path() failed: %s", e)
|
561
579
|
return False
|
562
580
|
|
563
581
|
def has_connection(self, geom, a, ndec):
|
@@ -1189,6 +1207,11 @@ class Area(object):
|
|
1189
1207
|
continue
|
1190
1208
|
return r
|
1191
1209
|
|
1210
|
+
def is_one_circle_element(self):
|
1211
|
+
if len(self.area) == 1:
|
1212
|
+
return is_Circle(self.area[0])
|
1213
|
+
return False
|
1214
|
+
|
1192
1215
|
def is_circle(self):
|
1193
1216
|
e = self.area[0]
|
1194
1217
|
if len(self.area) == 1:
|
@@ -1436,11 +1459,7 @@ class Area(object):
|
|
1436
1459
|
opposite_radius = max_radius
|
1437
1460
|
|
1438
1461
|
airgap_toleranz = (self.max_dist - self.min_dist) / 50.0 # 2%
|
1439
|
-
|
1440
|
-
self.close_to_startangle = np.isclose(self.min_angle, startangle,
|
1441
|
-
1e-04, 1e-04)
|
1442
|
-
self.close_to_endangle = np.isclose(self.max_angle, endangle,
|
1443
|
-
1e-04, 1e-04)
|
1462
|
+
self.set_close_to_start_end_angles(startangle, endangle)
|
1444
1463
|
self.surface = self.area_size()
|
1445
1464
|
|
1446
1465
|
def mark_stator_subregions(self,
|
@@ -1471,10 +1490,7 @@ class Area(object):
|
|
1471
1490
|
opposite_radius = r_out
|
1472
1491
|
airgap_toleranz = (self.max_dist - self.min_dist) / 50.0 # 2%
|
1473
1492
|
|
1474
|
-
self.
|
1475
|
-
1e-04, 1e-04)
|
1476
|
-
self.close_to_endangle = np.isclose(self.max_angle, alpha,
|
1477
|
-
1e-04, 1e-04)
|
1493
|
+
self.set_close_to_start_end_angles(0.0, alpha)
|
1478
1494
|
self.surface = self.area_size()
|
1479
1495
|
|
1480
1496
|
logger.debug("\n***** mark_stator_subregions [{}] *****"
|
@@ -1580,7 +1596,10 @@ class Area(object):
|
|
1580
1596
|
logger.debug("***** air #3")
|
1581
1597
|
|
1582
1598
|
if self.close_to_startangle or self.close_to_endangle:
|
1583
|
-
|
1599
|
+
if stator_size > 0.0:
|
1600
|
+
f = self.surface / stator_size
|
1601
|
+
else:
|
1602
|
+
f = 0.0
|
1584
1603
|
if f < 0.02: # area_size less then 2 percent of stator size
|
1585
1604
|
# Luftloch
|
1586
1605
|
self.type = TYPE_AIR # air
|
@@ -1624,10 +1643,7 @@ class Area(object):
|
|
1624
1643
|
opposite_radius = r_out
|
1625
1644
|
airgap_toleranz = (self.max_dist - self.min_dist) / 50.0 # 2%
|
1626
1645
|
|
1627
|
-
self.
|
1628
|
-
1e-04, 1e-04)
|
1629
|
-
self.close_to_endangle = np.isclose(self.max_angle, endangle,
|
1630
|
-
1e-04, 1e-04)
|
1646
|
+
self.set_close_to_start_end_angles(startangle, endangle)
|
1631
1647
|
|
1632
1648
|
logger.debug("\n***** mark_EESM_rotor_subregions [{}] *****"
|
1633
1649
|
.format(self.id))
|
@@ -1697,10 +1713,7 @@ class Area(object):
|
|
1697
1713
|
opposite_radius = r_out
|
1698
1714
|
airgap_toleranz = (self.max_dist - self.min_dist) / 50.0 # 2%
|
1699
1715
|
|
1700
|
-
self.
|
1701
|
-
1e-04, 1e-04)
|
1702
|
-
self.close_to_endangle = np.isclose(self.max_angle, endangle,
|
1703
|
-
1e-04, 1e-04)
|
1716
|
+
self.set_close_to_start_end_angles(startangle, endangle)
|
1704
1717
|
|
1705
1718
|
logger.debug("\n***** mark_PMSM_rotor_subregions [{}] *****"
|
1706
1719
|
.format(self.id))
|
@@ -1805,8 +1818,7 @@ class Area(object):
|
|
1805
1818
|
logger.debug(">>> air is a circle")
|
1806
1819
|
return self.type
|
1807
1820
|
|
1808
|
-
self.
|
1809
|
-
self.close_to_endangle = np.isclose(self.max_angle, alpha)
|
1821
|
+
self.set_close_to_start_end_angles(self, 0.0, alpha)
|
1810
1822
|
|
1811
1823
|
if self.is_magnet_rectangle():
|
1812
1824
|
self.type = TYPE_MAGNET_RECT # magnet embedded
|
@@ -1848,7 +1860,7 @@ class Area(object):
|
|
1848
1860
|
return 0.0
|
1849
1861
|
return np.pi * e.radius**2
|
1850
1862
|
|
1851
|
-
nodes = [n for n in self.
|
1863
|
+
nodes = [n for n in self.virtual_nodes(parts=4)]
|
1852
1864
|
return area_size(nodes)
|
1853
1865
|
|
1854
1866
|
def set_surface(self, mirrored):
|
@@ -730,31 +730,12 @@ class AreaBuilder(object):
|
|
730
730
|
logger.debug("end of create_inner_corner_auxiliary_areas")
|
731
731
|
return created
|
732
732
|
|
733
|
-
def get_airgap_line(self,
|
733
|
+
def get_airgap_line(self, n1, n2, end_node):
|
734
734
|
logger.debug("get_airgap_line")
|
735
735
|
|
736
736
|
self.set_edge_attributes()
|
737
737
|
|
738
|
-
|
739
|
-
if not nodes:
|
740
|
-
logger.debug("end of get_airgap_line: no nodes found")
|
741
|
-
return [], []
|
742
|
-
|
743
|
-
n1 = nodes[0]
|
744
|
-
if points_are_close(start_node, n1):
|
745
|
-
n2 = nodes[-1]
|
746
|
-
else:
|
747
|
-
n2 = n1
|
748
|
-
for n1 in nodes[1:]:
|
749
|
-
if points_are_close(start_node, n1):
|
750
|
-
break
|
751
|
-
n2 = n1
|
752
|
-
|
753
|
-
if not points_are_close(start_node, n1):
|
754
|
-
logger.debug("end of get_airgap_line: not close to start-node")
|
755
|
-
return [], []
|
756
|
-
|
757
|
-
logger.debug("START EDGE FOUND: %s - %s", n1, n2)
|
738
|
+
logger.debug("START EDGE IS: %s - %s", n1, n2)
|
758
739
|
nodes = [n1, n2]
|
759
740
|
info = self.get_edge_info(n1, n2)
|
760
741
|
elements = [info.element]
|
@@ -768,28 +749,37 @@ class AreaBuilder(object):
|
|
768
749
|
nodes.append(n2)
|
769
750
|
elements.append(info.element)
|
770
751
|
|
771
|
-
logger.debug("end of get_airgap_line
|
752
|
+
logger.debug("end of get_airgap_line: %s nodes", len(nodes))
|
772
753
|
return nodes, elements
|
773
754
|
|
755
|
+
def get_upper_border_line(self):
|
756
|
+
start_node = self.geom.end_corners[-1]
|
757
|
+
end_node = self.geom.start_corners[-1]
|
758
|
+
next_node = self.get_right_neighbor(start_node)
|
759
|
+
logger.debug("UPPER NODES start=%s, next=%s, end=%s", start_node, next_node, end_node)
|
760
|
+
return self.get_airgap_line(start_node, next_node, end_node)
|
761
|
+
|
762
|
+
def get_lower_border_line(self):
|
763
|
+
start_node = self.geom.start_corners[0]
|
764
|
+
end_node = self.geom.end_corners[0]
|
765
|
+
next_node = self.get_left_neighbor(start_node)
|
766
|
+
logger.debug("LOWER NODES start=%s, next=%s, end=%s", start_node, next_node, end_node)
|
767
|
+
return self.get_airgap_line(start_node, next_node, end_node)
|
768
|
+
|
774
769
|
def get_inner_airgap_line(self):
|
775
|
-
logger.debug("
|
770
|
+
logger.debug("get_inner_airgap_line()")
|
776
771
|
assert(self.geom.is_inner)
|
777
772
|
assert(self.geom.area_list)
|
773
|
+
return self.get_upper_border_line()
|
778
774
|
|
779
|
-
|
780
|
-
|
781
|
-
|
782
|
-
|
783
|
-
|
784
|
-
start_node = self.geom.end_corners[-1]
|
785
|
-
logger.debug("START NODE %s", start_node)
|
786
|
-
end_node = self.geom.start_corners[-1]
|
787
|
-
logger.debug("END NODE %s", end_node)
|
788
|
-
|
789
|
-
return self.get_airgap_line(start_node, end_node, area[0])
|
775
|
+
def get_inner_opposite_airgap_line(self):
|
776
|
+
logger.debug("get_inner_opposite_airgap_line()")
|
777
|
+
assert(self.geom.is_inner)
|
778
|
+
assert(self.geom.area_list)
|
779
|
+
return self.get_lower_border_line()
|
790
780
|
|
791
781
|
def close_outer_winding_areas(self):
|
792
|
-
logger.debug("close_outer_winding_areas")
|
782
|
+
logger.debug("begin close_outer_winding_areas")
|
793
783
|
|
794
784
|
airgap_line, airgap_el = self.get_outer_airgap_line()
|
795
785
|
logger.debug("Outer Airgap with %s Nodes", len(airgap_line))
|
@@ -830,24 +820,53 @@ class AreaBuilder(object):
|
|
830
820
|
dist_prev = dist
|
831
821
|
alpha_prev = alpha
|
832
822
|
|
823
|
+
logger.debug("end close_outer_winding_areas: lines=%s", lines_created)
|
833
824
|
return lines_created > 0
|
834
825
|
|
826
|
+
def get_left_neighbor(self, start_node):
|
827
|
+
nbrs = self.geom.get_neighbors(start_node)
|
828
|
+
start_alpha = normalise_angle(alpha_line(start_node, self.geom.center))
|
829
|
+
next_angle = 0.0
|
830
|
+
next_node = None
|
831
|
+
for n in nbrs:
|
832
|
+
alpha = normalise_angle(alpha_line(start_node, n))
|
833
|
+
angle = alpha_angle(start_alpha, alpha)
|
834
|
+
if angle > next_angle:
|
835
|
+
next_angle = angle
|
836
|
+
next_node = n
|
837
|
+
|
838
|
+
logger.debug("Left neighbor is %s", next_node)
|
839
|
+
return next_node
|
840
|
+
|
841
|
+
def get_right_neighbor(self, start_node):
|
842
|
+
nbrs = self.geom.get_neighbors(start_node)
|
843
|
+
start_alpha = normalise_angle(alpha_line(start_node, self.geom.center))
|
844
|
+
next_angle = 99
|
845
|
+
next_node = None
|
846
|
+
for n in nbrs:
|
847
|
+
alpha = normalise_angle(alpha_line(start_node, n))
|
848
|
+
angle = alpha_angle(start_alpha, alpha)
|
849
|
+
if angle < next_angle:
|
850
|
+
next_angle = angle
|
851
|
+
next_node = n
|
852
|
+
|
853
|
+
logger.debug("Right neighbor is %s", next_node)
|
854
|
+
return next_node
|
855
|
+
|
835
856
|
def get_outer_airgap_line(self):
|
836
|
-
logger.debug("
|
857
|
+
logger.debug("get_outer_airgap_line()")
|
837
858
|
assert(self.geom.is_outer)
|
838
859
|
assert(self.geom.area_list)
|
860
|
+
return self.get_lower_border_line()
|
839
861
|
|
840
|
-
|
841
|
-
|
842
|
-
|
843
|
-
|
844
|
-
|
845
|
-
start_node = self.geom.start_corners[0]
|
846
|
-
logger.debug("START NODE %s", start_node)
|
847
|
-
end_node = self.geom.end_corners[0]
|
848
|
-
logger.debug("END NODE %s", end_node)
|
862
|
+
def get_outer_opposite_airgap_line(self):
|
863
|
+
logger.debug("get_outer_opposite_airgap_line()")
|
864
|
+
assert(self.geom.is_outer)
|
865
|
+
assert(self.geom.area_list)
|
866
|
+
return self.get_upper_border_line()
|
849
867
|
|
850
|
-
|
868
|
+
# same procedure as inner airgap line
|
869
|
+
return self.get_inner_airgap_line()
|
851
870
|
|
852
871
|
def create_one_area_group(self, areas):
|
853
872
|
logger.debug("begin of create_one_area_group")
|
@@ -915,9 +934,13 @@ class AreaBuilder(object):
|
|
915
934
|
max_x = 0
|
916
935
|
area = None
|
917
936
|
for a in area_list:
|
937
|
+
if a.is_one_circle_element():
|
938
|
+
continue
|
918
939
|
if a.max_x > max_x:
|
919
940
|
max_x = a.max_x
|
920
941
|
area = a
|
942
|
+
if area is None:
|
943
|
+
return False
|
921
944
|
|
922
945
|
x0, y0 = -9999.0, 0.0
|
923
946
|
for x, y in area.list_of_nodes():
|
@@ -168,6 +168,10 @@ def symmetry_search(machine,
|
|
168
168
|
def build_machine_rotor(machine, inner, mindist, plt, EESM=False, single=False):
|
169
169
|
logger.debug("Begin of build_machine_rotor")
|
170
170
|
|
171
|
+
if machine.part == 1:
|
172
|
+
logger.error("Full machine rotor without symmetrylines")
|
173
|
+
sys.exit(1)
|
174
|
+
|
171
175
|
if machine.has_windings():
|
172
176
|
logger.debug("do nothing here with windings in rotor")
|
173
177
|
logger.debug("End of build_machine_rotor")
|
@@ -258,6 +262,10 @@ def build_machine_stator(machine, inner, mindist, plt, EESM=False, single=False)
|
|
258
262
|
logger.debug("Begin of build_machine_stator")
|
259
263
|
timer = Timer(start_it=True)
|
260
264
|
|
265
|
+
if machine.part == 1:
|
266
|
+
logger.error("Full stator without symmetrylines")
|
267
|
+
sys.exit(1)
|
268
|
+
|
261
269
|
if not machine.geom.is_stator():
|
262
270
|
logger.debug("Rotor with windings")
|
263
271
|
|
@@ -520,13 +528,13 @@ def convert(dxfile,
|
|
520
528
|
p, basegeom,
|
521
529
|
title="Before finding Machine")
|
522
530
|
|
523
|
-
machine_base = basegeom.get_machine()
|
524
531
|
if show_plots:
|
525
532
|
p.render_elements(basegeom, Shape,
|
526
533
|
title=input_file.name,
|
527
534
|
with_hull=False,
|
528
535
|
rows=3, cols=2, num=1, show=debug_mode)
|
529
536
|
|
537
|
+
machine_base = basegeom.get_machine()
|
530
538
|
if not machine_base.is_a_machine():
|
531
539
|
logger.warn("it's Not a Machine")
|
532
540
|
return dict(error='machine not detected')
|