femagtools 1.8.14__tar.gz → 1.8.16__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.14/src/femagtools.egg-info → femagtools-1.8.16}/PKG-INFO +1 -1
- {femagtools-1.8.14 → femagtools-1.8.16}/src/femagtools/__init__.py +1 -1
- {femagtools-1.8.14 → femagtools-1.8.16}/src/femagtools/bch.py +6 -4
- {femagtools-1.8.14 → femagtools-1.8.16}/src/femagtools/femag.py +6 -1
- {femagtools-1.8.14 → femagtools-1.8.16}/src/femagtools/fsl.py +10 -1
- {femagtools-1.8.14 → femagtools-1.8.16}/src/femagtools/isa7.py +39 -7
- {femagtools-1.8.14 → femagtools-1.8.16}/src/femagtools/machine/afpm.py +12 -2
- {femagtools-1.8.14 → femagtools-1.8.16}/src/femagtools/machine/effloss.py +27 -14
- {femagtools-1.8.14 → femagtools-1.8.16}/src/femagtools/machine/im.py +81 -69
- {femagtools-1.8.14 → femagtools-1.8.16}/src/femagtools/machine/sm.py +50 -13
- {femagtools-1.8.14 → femagtools-1.8.16}/src/femagtools/plot/char.py +12 -5
- {femagtools-1.8.14 → femagtools-1.8.16}/src/femagtools/plot/nc.py +9 -0
- {femagtools-1.8.14 → femagtools-1.8.16}/src/femagtools/plot/wdg.py +26 -5
- {femagtools-1.8.14 → femagtools-1.8.16}/src/femagtools/templates/ec-rotorbar.mako +4 -0
- {femagtools-1.8.14 → femagtools-1.8.16}/src/femagtools/templates/statorRing.mako +1 -1
- {femagtools-1.8.14 → femagtools-1.8.16}/src/femagtools/templates/torq_calc.mako +4 -0
- {femagtools-1.8.14 → femagtools-1.8.16}/src/femagtools/windings.py +32 -14
- {femagtools-1.8.14 → femagtools-1.8.16/src/femagtools.egg-info}/PKG-INFO +1 -1
- {femagtools-1.8.14 → femagtools-1.8.16}/src/tests/test_effloss.py +1 -1
- {femagtools-1.8.14 → femagtools-1.8.16}/src/tests/test_fsl.py +1 -1
- femagtools-1.8.16/src/tests/test_im.py +49 -0
- {femagtools-1.8.14 → femagtools-1.8.16}/src/tests/test_machine.py +1 -1
- {femagtools-1.8.14 → femagtools-1.8.16}/src/tests/test_nc.py +17 -0
- {femagtools-1.8.14 → femagtools-1.8.16}/src/tests/test_windings.py +11 -0
- femagtools-1.8.14/src/tests/test_im.py +0 -23
- {femagtools-1.8.14 → femagtools-1.8.16}/LICENSE +0 -0
- {femagtools-1.8.14 → femagtools-1.8.16}/MANIFEST.in +0 -0
- {femagtools-1.8.14 → femagtools-1.8.16}/README.md +0 -0
- {femagtools-1.8.14 → femagtools-1.8.16}/pyproject.toml +0 -0
- {femagtools-1.8.14 → femagtools-1.8.16}/setup.cfg +0 -0
- {femagtools-1.8.14 → femagtools-1.8.16}/src/femagtools/airgap.py +0 -0
- {femagtools-1.8.14 → femagtools-1.8.16}/src/femagtools/amazon.py +0 -0
- {femagtools-1.8.14 → femagtools-1.8.16}/src/femagtools/amela.py +0 -0
- {femagtools-1.8.14 → femagtools-1.8.16}/src/femagtools/asm.py +0 -0
- {femagtools-1.8.14 → femagtools-1.8.16}/src/femagtools/bchxml.py +0 -0
- {femagtools-1.8.14 → femagtools-1.8.16}/src/femagtools/condor.py +0 -0
- {femagtools-1.8.14 → femagtools-1.8.16}/src/femagtools/conductor.py +0 -0
- {femagtools-1.8.14 → femagtools-1.8.16}/src/femagtools/config.py +0 -0
- {femagtools-1.8.14 → femagtools-1.8.16}/src/femagtools/convert.py +0 -0
- {femagtools-1.8.14 → femagtools-1.8.16}/src/femagtools/dakota.py +0 -0
- {femagtools-1.8.14 → femagtools-1.8.16}/src/femagtools/dakota_femag.py +0 -0
- {femagtools-1.8.14 → femagtools-1.8.16}/src/femagtools/dakotaout.py +0 -0
- {femagtools-1.8.14 → femagtools-1.8.16}/src/femagtools/docker.py +0 -0
- {femagtools-1.8.14 → femagtools-1.8.16}/src/femagtools/dxfsl/__init__.py +0 -0
- {femagtools-1.8.14 → femagtools-1.8.16}/src/femagtools/dxfsl/area.py +0 -0
- {femagtools-1.8.14 → femagtools-1.8.16}/src/femagtools/dxfsl/areabuilder.py +0 -0
- {femagtools-1.8.14 → femagtools-1.8.16}/src/femagtools/dxfsl/concat.py +0 -0
- {femagtools-1.8.14 → femagtools-1.8.16}/src/femagtools/dxfsl/conv.py +0 -0
- {femagtools-1.8.14 → femagtools-1.8.16}/src/femagtools/dxfsl/converter.py +0 -0
- {femagtools-1.8.14 → femagtools-1.8.16}/src/femagtools/dxfsl/corner.py +0 -0
- {femagtools-1.8.14 → femagtools-1.8.16}/src/femagtools/dxfsl/dumprenderer.py +0 -0
- {femagtools-1.8.14 → femagtools-1.8.16}/src/femagtools/dxfsl/dxfparser.py +0 -0
- {femagtools-1.8.14 → femagtools-1.8.16}/src/femagtools/dxfsl/femparser.py +0 -0
- {femagtools-1.8.14 → femagtools-1.8.16}/src/femagtools/dxfsl/fslrenderer.py +0 -0
- {femagtools-1.8.14 → femagtools-1.8.16}/src/femagtools/dxfsl/functions.py +0 -0
- {femagtools-1.8.14 → femagtools-1.8.16}/src/femagtools/dxfsl/geom.py +0 -0
- {femagtools-1.8.14 → femagtools-1.8.16}/src/femagtools/dxfsl/journal.py +0 -0
- {femagtools-1.8.14 → femagtools-1.8.16}/src/femagtools/dxfsl/machine.py +0 -0
- {femagtools-1.8.14 → femagtools-1.8.16}/src/femagtools/dxfsl/plotrenderer.py +0 -0
- {femagtools-1.8.14 → femagtools-1.8.16}/src/femagtools/dxfsl/shape.py +0 -0
- {femagtools-1.8.14 → femagtools-1.8.16}/src/femagtools/dxfsl/svgparser.py +0 -0
- {femagtools-1.8.14 → femagtools-1.8.16}/src/femagtools/dxfsl/symmetry.py +0 -0
- {femagtools-1.8.14 → femagtools-1.8.16}/src/femagtools/ecloss.py +0 -0
- {femagtools-1.8.14 → femagtools-1.8.16}/src/femagtools/erg.py +0 -0
- {femagtools-1.8.14 → femagtools-1.8.16}/src/femagtools/forcedens.py +0 -0
- {femagtools-1.8.14 → femagtools-1.8.16}/src/femagtools/getset.py +0 -0
- {femagtools-1.8.14 → femagtools-1.8.16}/src/femagtools/gmsh.py +0 -0
- {femagtools-1.8.14 → femagtools-1.8.16}/src/femagtools/google.py +0 -0
- {femagtools-1.8.14 → femagtools-1.8.16}/src/femagtools/grid.py +0 -0
- {femagtools-1.8.14 → femagtools-1.8.16}/src/femagtools/heat_source_network.py +0 -0
- {femagtools-1.8.14 → femagtools-1.8.16}/src/femagtools/hxy.py +0 -0
- {femagtools-1.8.14 → femagtools-1.8.16}/src/femagtools/jhb.py +0 -0
- {femagtools-1.8.14 → femagtools-1.8.16}/src/femagtools/job.py +0 -0
- {femagtools-1.8.14 → femagtools-1.8.16}/src/femagtools/leakinduc.py +0 -0
- {femagtools-1.8.14 → femagtools-1.8.16}/src/femagtools/losscoeffs.py +0 -0
- {femagtools-1.8.14 → femagtools-1.8.16}/src/femagtools/machine/__init__.py +0 -0
- {femagtools-1.8.14 → femagtools-1.8.16}/src/femagtools/machine/pm.py +0 -0
- {femagtools-1.8.14 → femagtools-1.8.16}/src/femagtools/machine/sizing.py +0 -0
- {femagtools-1.8.14 → femagtools-1.8.16}/src/femagtools/machine/utils.py +0 -0
- {femagtools-1.8.14 → femagtools-1.8.16}/src/femagtools/magnet.py +0 -0
- {femagtools-1.8.14 → femagtools-1.8.16}/src/femagtools/mcv.py +0 -0
- {femagtools-1.8.14 → femagtools-1.8.16}/src/femagtools/me.py +0 -0
- {femagtools-1.8.14 → femagtools-1.8.16}/src/femagtools/model.py +0 -0
- {femagtools-1.8.14 → femagtools-1.8.16}/src/femagtools/moo/__init__.py +0 -0
- {femagtools-1.8.14 → femagtools-1.8.16}/src/femagtools/moo/algorithm.py +0 -0
- {femagtools-1.8.14 → femagtools-1.8.16}/src/femagtools/moo/population.py +0 -0
- {femagtools-1.8.14 → femagtools-1.8.16}/src/femagtools/moo/problem.py +0 -0
- {femagtools-1.8.14 → femagtools-1.8.16}/src/femagtools/moo/test/AlgorithmTest.py +0 -0
- {femagtools-1.8.14 → femagtools-1.8.16}/src/femagtools/moo/test/PopulationTest.py +0 -0
- {femagtools-1.8.14 → femagtools-1.8.16}/src/femagtools/moo/test/ProblemTest.py +0 -0
- {femagtools-1.8.14 → femagtools-1.8.16}/src/femagtools/moproblem.py +0 -0
- {femagtools-1.8.14 → femagtools-1.8.16}/src/femagtools/multiproc.py +0 -0
- {femagtools-1.8.14 → femagtools-1.8.16}/src/femagtools/mxw2msh.py +0 -0
- {femagtools-1.8.14 → femagtools-1.8.16}/src/femagtools/nc.py +0 -0
- {femagtools-1.8.14 → femagtools-1.8.16}/src/femagtools/netlist.py +0 -0
- {femagtools-1.8.14 → femagtools-1.8.16}/src/femagtools/ntib.py +0 -0
- {femagtools-1.8.14 → femagtools-1.8.16}/src/femagtools/opt.py +0 -0
- {femagtools-1.8.14 → femagtools-1.8.16}/src/femagtools/parstudy.py +0 -0
- {femagtools-1.8.14 → femagtools-1.8.16}/src/femagtools/plot/__init__.py +0 -0
- {femagtools-1.8.14 → femagtools-1.8.16}/src/femagtools/plot/bch.py +0 -0
- {femagtools-1.8.14 → femagtools-1.8.16}/src/femagtools/plot/fieldlines.py +0 -0
- {femagtools-1.8.14 → femagtools-1.8.16}/src/femagtools/plot/fluxdens.py +0 -0
- {femagtools-1.8.14 → femagtools-1.8.16}/src/femagtools/plot/forcedens.py +0 -0
- {femagtools-1.8.14 → femagtools-1.8.16}/src/femagtools/plot/machine.py +0 -0
- {femagtools-1.8.14 → femagtools-1.8.16}/src/femagtools/plot/mcv.py +0 -0
- {femagtools-1.8.14 → femagtools-1.8.16}/src/femagtools/plot/phasor.py +0 -0
- {femagtools-1.8.14 → femagtools-1.8.16}/src/femagtools/poc.py +0 -0
- {femagtools-1.8.14 → femagtools-1.8.16}/src/femagtools/semi_fea.py +0 -0
- {femagtools-1.8.14 → femagtools-1.8.16}/src/femagtools/shortcircuit.py +0 -0
- {femagtools-1.8.14 → femagtools-1.8.16}/src/femagtools/svgfsl/converter.py +0 -0
- {femagtools-1.8.14 → femagtools-1.8.16}/src/femagtools/templates/FE-losses.mako +0 -0
- {femagtools-1.8.14 → femagtools-1.8.16}/src/femagtools/templates/afm_rotor.mako +0 -0
- {femagtools-1.8.14 → femagtools-1.8.16}/src/femagtools/templates/afm_stator.mako +0 -0
- {femagtools-1.8.14 → femagtools-1.8.16}/src/femagtools/templates/airgapinduc.mako +0 -0
- {femagtools-1.8.14 → femagtools-1.8.16}/src/femagtools/templates/asyn_motor.mako +0 -0
- {femagtools-1.8.14 → femagtools-1.8.16}/src/femagtools/templates/basic_modpar.mako +0 -0
- {femagtools-1.8.14 → femagtools-1.8.16}/src/femagtools/templates/bertotti.mako +0 -0
- {femagtools-1.8.14 → femagtools-1.8.16}/src/femagtools/templates/calc_field_ts.mako +0 -0
- {femagtools-1.8.14 → femagtools-1.8.16}/src/femagtools/templates/calc_therm_field.mako +0 -0
- {femagtools-1.8.14 → femagtools-1.8.16}/src/femagtools/templates/cogg_calc.mako +0 -0
- {femagtools-1.8.14 → femagtools-1.8.16}/src/femagtools/templates/colorgrad.mako +0 -0
- {femagtools-1.8.14 → femagtools-1.8.16}/src/femagtools/templates/com_motor_sim.mako +0 -0
- {femagtools-1.8.14 → femagtools-1.8.16}/src/femagtools/templates/conduct-data.mako +0 -0
- {femagtools-1.8.14 → femagtools-1.8.16}/src/femagtools/templates/connect_models.mako +0 -0
- {femagtools-1.8.14 → femagtools-1.8.16}/src/femagtools/templates/cu_losses.mako +0 -0
- {femagtools-1.8.14 → femagtools-1.8.16}/src/femagtools/templates/displ_stator_rotor.mako +0 -0
- {femagtools-1.8.14 → femagtools-1.8.16}/src/femagtools/templates/fe-contr.mako +0 -0
- {femagtools-1.8.14 → femagtools-1.8.16}/src/femagtools/templates/fieldcalc.mako +0 -0
- {femagtools-1.8.14 → femagtools-1.8.16}/src/femagtools/templates/gen_hairpin_winding.mako +0 -0
- {femagtools-1.8.14 → femagtools-1.8.16}/src/femagtools/templates/gen_winding.mako +0 -0
- {femagtools-1.8.14 → femagtools-1.8.16}/src/femagtools/templates/inductances.mako +0 -0
- {femagtools-1.8.14 → femagtools-1.8.16}/src/femagtools/templates/ld_lq_fast.mako +0 -0
- {femagtools-1.8.14 → femagtools-1.8.16}/src/femagtools/templates/leak_dist_wind.mako +0 -0
- {femagtools-1.8.14 → femagtools-1.8.16}/src/femagtools/templates/leak_evol_wind.mako +0 -0
- {femagtools-1.8.14 → femagtools-1.8.16}/src/femagtools/templates/leak_tooth_wind.mako +0 -0
- {femagtools-1.8.14 → femagtools-1.8.16}/src/femagtools/templates/magnet-data.mako +0 -0
- {femagtools-1.8.14 → femagtools-1.8.16}/src/femagtools/templates/magnetFC2.mako +0 -0
- {femagtools-1.8.14 → femagtools-1.8.16}/src/femagtools/templates/magnetIron.mako +0 -0
- {femagtools-1.8.14 → femagtools-1.8.16}/src/femagtools/templates/magnetIron2.mako +0 -0
- {femagtools-1.8.14 → femagtools-1.8.16}/src/femagtools/templates/magnetIron3.mako +0 -0
- {femagtools-1.8.14 → femagtools-1.8.16}/src/femagtools/templates/magnetIron4.mako +0 -0
- {femagtools-1.8.14 → femagtools-1.8.16}/src/femagtools/templates/magnetIron5.mako +0 -0
- {femagtools-1.8.14 → femagtools-1.8.16}/src/femagtools/templates/magnetIronV.mako +0 -0
- {femagtools-1.8.14 → femagtools-1.8.16}/src/femagtools/templates/magnetSector.mako +0 -0
- {femagtools-1.8.14 → femagtools-1.8.16}/src/femagtools/templates/magnetSectorLinear.mako +0 -0
- {femagtools-1.8.14 → femagtools-1.8.16}/src/femagtools/templates/magnetShell.mako +0 -0
- {femagtools-1.8.14 → femagtools-1.8.16}/src/femagtools/templates/magnetShell2.mako +0 -0
- {femagtools-1.8.14 → femagtools-1.8.16}/src/femagtools/templates/mesh-airgap.mako +0 -0
- {femagtools-1.8.14 → femagtools-1.8.16}/src/femagtools/templates/modal_analysis.mako +0 -0
- {femagtools-1.8.14 → femagtools-1.8.16}/src/femagtools/templates/modified_steinmetz.mako +0 -0
- {femagtools-1.8.14 → femagtools-1.8.16}/src/femagtools/templates/mult_cal_fast.mako +0 -0
- {femagtools-1.8.14 → femagtools-1.8.16}/src/femagtools/templates/new_model.mako +0 -0
- {femagtools-1.8.14 → femagtools-1.8.16}/src/femagtools/templates/noloadflux-rot.mako +0 -0
- {femagtools-1.8.14 → femagtools-1.8.16}/src/femagtools/templates/noloadflux.mako +0 -0
- {femagtools-1.8.14 → femagtools-1.8.16}/src/femagtools/templates/noloadfluxdc.mako +0 -0
- {femagtools-1.8.14 → femagtools-1.8.16}/src/femagtools/templates/open.mako +0 -0
- {femagtools-1.8.14 → femagtools-1.8.16}/src/femagtools/templates/plots.mako +0 -0
- {femagtools-1.8.14 → femagtools-1.8.16}/src/femagtools/templates/pm_sym_f_cur.mako +0 -0
- {femagtools-1.8.14 → femagtools-1.8.16}/src/femagtools/templates/pm_sym_fast.mako +0 -0
- {femagtools-1.8.14 → femagtools-1.8.16}/src/femagtools/templates/pm_sym_loss.mako +0 -0
- {femagtools-1.8.14 → femagtools-1.8.16}/src/femagtools/templates/prepare_thermal.mako +0 -0
- {femagtools-1.8.14 → femagtools-1.8.16}/src/femagtools/templates/psd_psq_fast.mako +0 -0
- {femagtools-1.8.14 → femagtools-1.8.16}/src/femagtools/templates/psi-torq-rem-rot.mako +0 -0
- {femagtools-1.8.14 → femagtools-1.8.16}/src/femagtools/templates/psi-torq-rem.mako +0 -0
- {femagtools-1.8.14 → femagtools-1.8.16}/src/femagtools/templates/psi-torq-rot.mako +0 -0
- {femagtools-1.8.14 → femagtools-1.8.16}/src/femagtools/templates/ring.mako +0 -0
- {femagtools-1.8.14 → femagtools-1.8.16}/src/femagtools/templates/rot_hsm.mako +0 -0
- {femagtools-1.8.14 → femagtools-1.8.16}/src/femagtools/templates/rotorAsyn.mako +0 -0
- {femagtools-1.8.14 → femagtools-1.8.16}/src/femagtools/templates/rotorKs2.mako +0 -0
- {femagtools-1.8.14 → femagtools-1.8.16}/src/femagtools/templates/rotor_msh.mako +0 -0
- {femagtools-1.8.14 → femagtools-1.8.16}/src/femagtools/templates/rotor_winding.mako +0 -0
- {femagtools-1.8.14 → femagtools-1.8.16}/src/femagtools/templates/shortcircuit.mako +0 -0
- {femagtools-1.8.14 → femagtools-1.8.16}/src/femagtools/templates/srm.mako +0 -0
- {femagtools-1.8.14 → femagtools-1.8.16}/src/femagtools/templates/stator1.mako +0 -0
- {femagtools-1.8.14 → femagtools-1.8.16}/src/femagtools/templates/stator2.mako +0 -0
- {femagtools-1.8.14 → femagtools-1.8.16}/src/femagtools/templates/stator3Linear.mako +0 -0
- {femagtools-1.8.14 → femagtools-1.8.16}/src/femagtools/templates/stator4.mako +0 -0
- {femagtools-1.8.14 → femagtools-1.8.16}/src/femagtools/templates/statorBG.mako +0 -0
- {femagtools-1.8.14 → femagtools-1.8.16}/src/femagtools/templates/statorRotor3.mako +0 -0
- {femagtools-1.8.14 → femagtools-1.8.16}/src/femagtools/templates/stator_msh.mako +0 -0
- {femagtools-1.8.14 → femagtools-1.8.16}/src/femagtools/templates/therm-dynamic.mako +0 -0
- {femagtools-1.8.14 → femagtools-1.8.16}/src/femagtools/templates/therm_static.mako +0 -0
- {femagtools-1.8.14 → femagtools-1.8.16}/src/femagtools/tks.py +0 -0
- {femagtools-1.8.14 → femagtools-1.8.16}/src/femagtools/ts.py +0 -0
- {femagtools-1.8.14 → femagtools-1.8.16}/src/femagtools/utils.py +0 -0
- {femagtools-1.8.14 → femagtools-1.8.16}/src/femagtools/vbf.py +0 -0
- {femagtools-1.8.14 → femagtools-1.8.16}/src/femagtools/vtu.py +0 -0
- {femagtools-1.8.14 → femagtools-1.8.16}/src/femagtools/zmq.py +0 -0
- {femagtools-1.8.14 → femagtools-1.8.16}/src/femagtools.egg-info/SOURCES.txt +0 -0
- {femagtools-1.8.14 → femagtools-1.8.16}/src/femagtools.egg-info/dependency_links.txt +0 -0
- {femagtools-1.8.14 → femagtools-1.8.16}/src/femagtools.egg-info/entry_points.txt +0 -0
- {femagtools-1.8.14 → femagtools-1.8.16}/src/femagtools.egg-info/requires.txt +0 -0
- {femagtools-1.8.14 → femagtools-1.8.16}/src/femagtools.egg-info/top_level.txt +0 -0
- {femagtools-1.8.14 → femagtools-1.8.16}/src/tests/__init__.py +0 -0
- {femagtools-1.8.14 → femagtools-1.8.16}/src/tests/engines/__init__.py +0 -0
- {femagtools-1.8.14 → femagtools-1.8.16}/src/tests/engines/test_amazon.py +0 -0
- {femagtools-1.8.14 → femagtools-1.8.16}/src/tests/engines/test_config.py +0 -0
- {femagtools-1.8.14 → femagtools-1.8.16}/src/tests/geom/__init__.py +0 -0
- {femagtools-1.8.14 → femagtools-1.8.16}/src/tests/geom/test_functions.py +0 -0
- {femagtools-1.8.14 → femagtools-1.8.16}/src/tests/geom/test_point_inside.py +0 -0
- {femagtools-1.8.14 → femagtools-1.8.16}/src/tests/moo/__init__.py +0 -0
- {femagtools-1.8.14 → femagtools-1.8.16}/src/tests/moo/test_algorithm.py +0 -0
- {femagtools-1.8.14 → femagtools-1.8.16}/src/tests/moo/test_population.py +0 -0
- {femagtools-1.8.14 → femagtools-1.8.16}/src/tests/moo/test_problem.py +0 -0
- {femagtools-1.8.14 → femagtools-1.8.16}/src/tests/test_afpm.py +0 -0
- {femagtools-1.8.14 → femagtools-1.8.16}/src/tests/test_airgap_induction.py +0 -0
- {femagtools-1.8.14 → femagtools-1.8.16}/src/tests/test_amela.py +0 -0
- {femagtools-1.8.14 → femagtools-1.8.16}/src/tests/test_asm.py +0 -0
- {femagtools-1.8.14 → femagtools-1.8.16}/src/tests/test_bchreader.py +0 -0
- {femagtools-1.8.14 → femagtools-1.8.16}/src/tests/test_conductor.py +0 -0
- {femagtools-1.8.14 → femagtools-1.8.16}/src/tests/test_convert.py +0 -0
- {femagtools-1.8.14 → femagtools-1.8.16}/src/tests/test_dxfsl.py +0 -0
- {femagtools-1.8.14 → femagtools-1.8.16}/src/tests/test_erg.py +0 -0
- {femagtools-1.8.14 → femagtools-1.8.16}/src/tests/test_femag.py +0 -0
- {femagtools-1.8.14 → femagtools-1.8.16}/src/tests/test_forcedens.py +0 -0
- {femagtools-1.8.14 → femagtools-1.8.16}/src/tests/test_heat_source_network.py +0 -0
- {femagtools-1.8.14 → femagtools-1.8.16}/src/tests/test_hxy.py +0 -0
- {femagtools-1.8.14 → femagtools-1.8.16}/src/tests/test_isa7.py +0 -0
- {femagtools-1.8.14 → femagtools-1.8.16}/src/tests/test_jhb.py +0 -0
- {femagtools-1.8.14 → femagtools-1.8.16}/src/tests/test_job.py +0 -0
- {femagtools-1.8.14 → femagtools-1.8.16}/src/tests/test_losscoeffs.py +0 -0
- {femagtools-1.8.14 → femagtools-1.8.16}/src/tests/test_magncurv.py +0 -0
- {femagtools-1.8.14 → femagtools-1.8.16}/src/tests/test_magnet.py +0 -0
- {femagtools-1.8.14 → femagtools-1.8.16}/src/tests/test_mcv.py +0 -0
- {femagtools-1.8.14 → femagtools-1.8.16}/src/tests/test_mcvreader.py +0 -0
- {femagtools-1.8.14 → femagtools-1.8.16}/src/tests/test_me.py +0 -0
- {femagtools-1.8.14 → femagtools-1.8.16}/src/tests/test_model.py +0 -0
- {femagtools-1.8.14 → femagtools-1.8.16}/src/tests/test_parident.py +0 -0
- {femagtools-1.8.14 → femagtools-1.8.16}/src/tests/test_parstudy.py +0 -0
- {femagtools-1.8.14 → femagtools-1.8.16}/src/tests/test_pocfile.py +0 -0
- {femagtools-1.8.14 → femagtools-1.8.16}/src/tests/test_sizing.py +0 -0
- {femagtools-1.8.14 → femagtools-1.8.16}/src/tests/test_sm.py +0 -0
- {femagtools-1.8.14 → femagtools-1.8.16}/src/tests/test_tksreader.py +0 -0
- {femagtools-1.8.14 → femagtools-1.8.16}/src/tests/test_ts.py +0 -0
- {femagtools-1.8.14 → femagtools-1.8.16}/src/tests/test_vbfreader.py +0 -0
- {femagtools-1.8.14 → femagtools-1.8.16}/src/tests/test_vtu.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.16
|
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
|
@@ -420,6 +420,11 @@ class Reader:
|
|
420
420
|
self.windings[w[0]]['N'].append(w[2])
|
421
421
|
self.windings[w[0]]['R'].append(w[3]/1e3)
|
422
422
|
self.windings[w[0]]['PHI'].append(w[4])
|
423
|
+
# check if external rotor
|
424
|
+
if hasattr(self, "machine"):
|
425
|
+
if "fc_radius" in self.machine:
|
426
|
+
if np.mean(self.windings[1]["R"]) < self.machine["fc_radius"]:
|
427
|
+
self.external_rotor = True
|
423
428
|
|
424
429
|
def __read_winding_factors(self, content):
|
425
430
|
"read winding factors section"
|
@@ -1202,10 +1207,7 @@ class Reader:
|
|
1202
1207
|
m = []
|
1203
1208
|
subregs = [name.split()[-1]
|
1204
1209
|
for name in content[2].split('\t') if name][2:]
|
1205
|
-
|
1206
|
-
if 'Iron' in subregs and \
|
1207
|
-
'Rotor' in subregs:
|
1208
|
-
self.external_rotor = True
|
1210
|
+
|
1209
1211
|
logger.info("Stator Subregions: %s", subregs)
|
1210
1212
|
speed = float(content[0].split()[-1])/60.
|
1211
1213
|
logger.info('losses for speed %f', speed)
|
@@ -153,7 +153,7 @@ class BaseFemag(object):
|
|
153
153
|
dest = dir if dir else self.workdir
|
154
154
|
if isinstance(feloss, (int, float)):
|
155
155
|
try:
|
156
|
-
feloss = {1: 'jordan', 11: 'bertotti'}[int(feloss)]
|
156
|
+
feloss = {1: 'jordan', 2: "steinmetz", 10:"modified steinmetz", 11: 'bertotti'}[int(feloss)]
|
157
157
|
except KeyError:
|
158
158
|
feloss = ''
|
159
159
|
return [self.magnetizingCurves.writefile(m[0], dest,
|
@@ -188,6 +188,11 @@ class BaseFemag(object):
|
|
188
188
|
recsin = simulation.get('recsin', '')
|
189
189
|
feloss = simulation.get('calc_fe_loss', '')
|
190
190
|
self.copy_magnetizing_curves(self.model, recsin=recsin, feloss=feloss)
|
191
|
+
|
192
|
+
if feloss and \
|
193
|
+
int(feloss) in (1, 2):
|
194
|
+
simulation["calc_fe_loss"] = 1
|
195
|
+
|
191
196
|
try:
|
192
197
|
if 'wdgdef' in self.model.winding:
|
193
198
|
self.model.winding['wdgfile'] = self.create_wdg_def(
|
@@ -23,6 +23,15 @@ def cosys(model):
|
|
23
23
|
return 'cosys("polar")'
|
24
24
|
return 'cosys("cartes")'
|
25
25
|
|
26
|
+
class MaterialCollection:
|
27
|
+
def __init__(self, materials):
|
28
|
+
self.materials = materials
|
29
|
+
|
30
|
+
def find(self, name):
|
31
|
+
for mat in self.materials:
|
32
|
+
if mat['name'] == name:
|
33
|
+
return mat
|
34
|
+
return None
|
26
35
|
|
27
36
|
class Builder:
|
28
37
|
def __init__(self, templatedirs=[]):
|
@@ -922,4 +931,4 @@ class Builder:
|
|
922
931
|
content='\n'.join(content),
|
923
932
|
type='fsl',
|
924
933
|
content_template='\n'.join(content_template),
|
925
|
-
parameter=parameter)
|
934
|
+
parameter=parameter)
|
@@ -921,7 +921,7 @@ class Isa7(object):
|
|
921
921
|
else:
|
922
922
|
flx_fac = 1
|
923
923
|
el_fe_ind = [np.array(reader.el_fe_induction_1).T/flx_fac,
|
924
|
-
|
924
|
+
np.array(reader.el_fe_induction_2).T/flx_fac]
|
925
925
|
eddy_cu_vpot = np.array(reader.eddy_cu_vpot).T/1000
|
926
926
|
if len(el_fe_ind[0].shape) == 4:
|
927
927
|
pdim = self.pos_el_fe_induction.shape[0]
|
@@ -1051,12 +1051,9 @@ class Isa7(object):
|
|
1051
1051
|
slf = 1 #self.PS_FILFACTOR_CU[r]
|
1052
1052
|
self.mass[r]['conductors'] += scf*se.area()*self.arm_length*spw*l*slf
|
1053
1053
|
for se in self.superelements:
|
1054
|
-
winding_detected=0
|
1055
|
-
lamination_detected=0
|
1056
1054
|
r = 0 if se.outside else 1
|
1057
1055
|
if se.subregion:
|
1058
1056
|
if se.subregion.winding:
|
1059
|
-
winding_detected=1
|
1060
1057
|
spw = self.CU_SPEZ_WEIGHT*1e3
|
1061
1058
|
l = self.PS_LENGTH_CU[r]*1e-2
|
1062
1059
|
slf = self.PS_FILFACTOR_CU[r]
|
@@ -1064,7 +1061,6 @@ class Isa7(object):
|
|
1064
1061
|
continue
|
1065
1062
|
|
1066
1063
|
if se.mcvtype or se.elements[0].is_lamination():
|
1067
|
-
lamination_detected=1
|
1068
1064
|
try:
|
1069
1065
|
spw = self.iron_loss_coefficients[se.mcvtype-1][
|
1070
1066
|
'spec_weight']*1e3 # kg/m³
|
@@ -1096,7 +1092,8 @@ class Isa7(object):
|
|
1096
1092
|
|
1097
1093
|
"""
|
1098
1094
|
return [sr.name for sr in self.subregions
|
1099
|
-
if sr.superelements[0].mcvtype or
|
1095
|
+
if (sr.superelements[0].mcvtype or
|
1096
|
+
sr.superelements[0].elements[0].is_lamination())]
|
1100
1097
|
|
1101
1098
|
def _axis_ratio(self, apos, br, bt):
|
1102
1099
|
from .utils import fft
|
@@ -1399,6 +1396,23 @@ class Isa7(object):
|
|
1399
1396
|
bxy.append(Trot(-theta).dot((fd['bx'], fd['by'])))
|
1400
1397
|
return transform_flux_density(se.alpha, np.array(bxy))
|
1401
1398
|
|
1399
|
+
def lamination_border(self):
|
1400
|
+
"""return xy coordinates of lamination border nodes"""
|
1401
|
+
bnodes = []
|
1402
|
+
for sr in self.get_iron_subregions():
|
1403
|
+
#bnodes += self.get_subregion(sr).border_node_keys()
|
1404
|
+
bnodes += self.get_subregion(sr).nonper_border_nodes()[1]
|
1405
|
+
keys, unique_counts = np.unique(bnodes, return_counts=True)
|
1406
|
+
|
1407
|
+
return np.array([self.nodes[k-1].xy
|
1408
|
+
for k, c in zip(keys, unique_counts) if c == 1])
|
1409
|
+
|
1410
|
+
def punchdist(self):
|
1411
|
+
""" return lamination elements with punching border distance"""
|
1412
|
+
elam = [e for e in self.elements if e.is_lamination()]
|
1413
|
+
bnodes = self.lamination_border()
|
1414
|
+
return elam, np.array([e.punchdist(bnodes) for e in elam])
|
1415
|
+
|
1402
1416
|
class Point(object):
|
1403
1417
|
def __init__(self, x, y):
|
1404
1418
|
self.x = x
|
@@ -1495,7 +1509,8 @@ class Element(BaseEntity):
|
|
1495
1509
|
[v.xy for v in vertices], axis=0)/len(vertices)
|
1496
1510
|
|
1497
1511
|
def flux_density(self, cosys='cartes'):
|
1498
|
-
"""return flux density components of this element converted
|
1512
|
+
"""return flux density components of this element converted
|
1513
|
+
to cosys: cartes, cylind, polar"""
|
1499
1514
|
ev = self.vertices
|
1500
1515
|
b1, b2 = 0, 0
|
1501
1516
|
if self.el_type == ElType.LinearTriangle:
|
@@ -1621,6 +1636,16 @@ class Element(BaseEntity):
|
|
1621
1636
|
"""return temperature of this element"""
|
1622
1637
|
return sum([v.vpot[1] for v in self.vertices])/len(self.vertices)
|
1623
1638
|
|
1639
|
+
def punchdist(self, bnodes):
|
1640
|
+
"""return dist to punching border"""
|
1641
|
+
try:
|
1642
|
+
if self.is_lamination():
|
1643
|
+
return np.min(np.linalg.norm(bnodes-self.center,
|
1644
|
+
axis=1))
|
1645
|
+
except AttributeError:
|
1646
|
+
pass
|
1647
|
+
return np.nan
|
1648
|
+
|
1624
1649
|
|
1625
1650
|
class SuperElement(BaseEntity):
|
1626
1651
|
def __init__(self, key, sr_key, elements, nodechains, color,
|
@@ -1704,6 +1729,7 @@ class SubRegion(BaseEntity):
|
|
1704
1729
|
for se in superelements:
|
1705
1730
|
se.subregion = self
|
1706
1731
|
self.nodechains = nodechains
|
1732
|
+
self._border = []
|
1707
1733
|
|
1708
1734
|
def elements(self):
|
1709
1735
|
"""return elements of this subregion"""
|
@@ -1716,6 +1742,12 @@ class SubRegion(BaseEntity):
|
|
1716
1742
|
"""return area of this subregion"""
|
1717
1743
|
return sum([e.area for e in self.elements()])
|
1718
1744
|
|
1745
|
+
def nonper_border_nodes(self):
|
1746
|
+
"""return border nodes with non-periodic boundary condition"""
|
1747
|
+
return (np.array([n.xy for nc in self.nodechains
|
1748
|
+
for n in nc.nodes if n.pernod == 0]),
|
1749
|
+
set([n.key for nc in self.nodechains
|
1750
|
+
for n in nc.nodes if n.pernod == 0]))
|
1719
1751
|
|
1720
1752
|
class Winding(BaseEntity):
|
1721
1753
|
def __init__(self, key, name, subregions, num_turns, cur_re, cur_im,
|
@@ -213,6 +213,9 @@ def parident(workdir, engine, temp, machine,
|
|
213
213
|
if np.isscalar(machine['magnet'][slotmodel]['rel_magn_width']):
|
214
214
|
num_slices = kwargs.get('num_slices', 3)
|
215
215
|
rmagw = num_slices*[machine['magnet'][slotmodel]['rel_magn_width']]
|
216
|
+
elif len(machine['magnet'][slotmodel]['rel_magn_width']) == 1:
|
217
|
+
num_slices = kwargs.get('num_slices', 3)
|
218
|
+
rmagw = num_slices*machine['magnet'][slotmodel]['rel_magn_width']
|
216
219
|
else:
|
217
220
|
rmagw = machine['magnet'][slotmodel]['rel_magn_width']
|
218
221
|
num_slices = len(rmagw)
|
@@ -543,13 +546,18 @@ def process(lfe, pole_width, machine, bch):
|
|
543
546
|
nsegx = machine['magnet'].get('num_segments', 1)
|
544
547
|
if type(nsegx) == int:
|
545
548
|
nsegx = [nsegx]*len(bch)
|
549
|
+
elif len(nsegx) == 1 and len(nsegx) < len(bch):
|
550
|
+
nsegx = nsegx*len(bch)
|
551
|
+
else:
|
552
|
+
pass
|
546
553
|
for nx, b in zip(nsegx, bch):
|
547
554
|
pm = b['losses'][0]['magnet_data']
|
548
555
|
magloss = ecloss.MagnLoss(magnet_data=[pm])
|
549
556
|
ml = magloss.calc_losses_ialh2(nsegx=nx)
|
550
|
-
b[
|
557
|
+
b["losses"][-1].update({k: ml[0]})
|
551
558
|
else:
|
552
559
|
k = 'magnetJ'
|
560
|
+
|
553
561
|
if len(pole_width) > 1:
|
554
562
|
maglosses = _integrate1d(radius, scale_factor*np.array(
|
555
563
|
[b['losses'][-1][k]/lz
|
@@ -1025,7 +1033,9 @@ class AFPM:
|
|
1025
1033
|
machine['magnet'][slotmodel]['rel_magn_width'])
|
1026
1034
|
if np.isscalar(machine['magnet'][slotmodel]['rel_magn_width']):
|
1027
1035
|
rmagw = num_slices*[machine['magnet'][slotmodel]['rel_magn_width']]
|
1028
|
-
|
1036
|
+
elif len(machine['magnet'][slotmodel]['rel_magn_width']) == 1:
|
1037
|
+
rmagw = num_slices*machine['magnet'][slotmodel]['rel_magn_width']
|
1038
|
+
else:
|
1029
1039
|
rmagw = machine['magnet'][slotmodel]['rel_magn_width']
|
1030
1040
|
num_slices = len(rmagw)
|
1031
1041
|
|
@@ -79,7 +79,11 @@ def iqd_tmech_umax_multi(num_proc, ntmesh, m, u1, with_mtpa, with_tmech,
|
|
79
79
|
while progress_readers:
|
80
80
|
for r in multiprocessing.connection.wait(progress_readers):
|
81
81
|
try:
|
82
|
-
collected_msg.append(r.recv())
|
82
|
+
#collected_msg.append(r.recv())
|
83
|
+
ret = r.recv()
|
84
|
+
if isinstance(ret, Exception):
|
85
|
+
raise ret
|
86
|
+
collected_msg.append(ret)
|
83
87
|
i += 1
|
84
88
|
except EOFError:
|
85
89
|
progress_readers.remove(r)
|
@@ -263,10 +267,11 @@ def efficiency_losses_map(eecpars, u1, T, temp, n, npoints=(60, 40),
|
|
263
267
|
if isinstance(m, (SynchronousMachineLdq, SynchronousMachinePsidq)):
|
264
268
|
iq, id, iex = m.iqd_torque(T[-1])
|
265
269
|
i1max = betai1(iq, id)[1]
|
266
|
-
w1type, tmax = m.w1_imax_umax(i1max, u1)
|
270
|
+
w1type, tmax = m.w1_imax_umax(i1max, u1)
|
267
271
|
pmax = tmax*w1type/m.p
|
268
272
|
else:
|
269
273
|
iq, id = m.iqd_torque(T[-1])
|
274
|
+
w1type, tmax = m.w1_imax_umax(betai1(iq, id)[1], u1)
|
270
275
|
|
271
276
|
i1max = betai1(iq, id)[1]
|
272
277
|
logger.info("%s %s", n, T)
|
@@ -274,16 +279,19 @@ def efficiency_losses_map(eecpars, u1, T, temp, n, npoints=(60, 40),
|
|
274
279
|
w1 = 2*np.pi*nx*m.p
|
275
280
|
if isinstance(m, (SynchronousMachineLdq, SynchronousMachinePsidq)):
|
276
281
|
tq = T[-1]
|
277
|
-
if tq*w1/m.p > pmax:
|
282
|
+
if tq*w1/m.p > pmax:
|
278
283
|
tq = pmax/w1*m.p
|
279
284
|
else:
|
280
|
-
|
281
|
-
|
282
|
-
|
285
|
+
if w1 <= w1type:
|
286
|
+
tq = tmax
|
287
|
+
else:
|
288
|
+
iq, id, tq = m.iqd_imax_umax(i1max, w1, u1, T[-1],
|
289
|
+
with_tmech=with_tmech,
|
290
|
+
with_mtpa=with_mtpa)
|
283
291
|
if np.isclose(tq, T[-1]):
|
284
292
|
tq = T[-1]
|
285
293
|
for Tx in T:
|
286
|
-
if Tx <= tq:
|
294
|
+
if np.abs(Tx) <= tq:
|
287
295
|
nt.append((nx, Tx))
|
288
296
|
if not nt:
|
289
297
|
raise ValueError("Speed, Torque Mesh is empty")
|
@@ -339,7 +347,7 @@ def efficiency_losses_map(eecpars, u1, T, temp, n, npoints=(60, 40),
|
|
339
347
|
else:
|
340
348
|
f1 = []
|
341
349
|
u1max = u1
|
342
|
-
r = dict(u1=[], i1=[], plfe1=[], plcu1=[], plcu2=[])
|
350
|
+
r = dict(u1=[], i1=[], plfe1=[], plcu1=[], plcu2=[], plcu1_dc=[], plcu1_ac=[])
|
343
351
|
for nx, tq in ntmesh.T:
|
344
352
|
wm = 2*np.pi*nx
|
345
353
|
w1 = m.w1(u1max, m.psiref, tq, wm)
|
@@ -352,7 +360,9 @@ def efficiency_losses_map(eecpars, u1, T, temp, n, npoints=(60, 40),
|
|
352
360
|
i2 = m.i2(w1, m.psi, wm)
|
353
361
|
r['plcu1'].append(m.m*np.abs(i1)**2*m.rstat(w1))
|
354
362
|
r['plcu2'].append(m.m*np.abs(i2)**2*m.rrot(w1-m.p*wm))
|
355
|
-
|
363
|
+
plcu_dc = m.m*np.abs(i1)**2*m.rstat(0)
|
364
|
+
r['plcu1_dc'].append(plcu_dc)
|
365
|
+
r['plcu1_ac'].append(m.m*np.abs(i1)**2*m.rstat(w1)-plcu_dc)
|
356
366
|
if isinstance(m, PmRelMachine):
|
357
367
|
plfe1 = m.kpfe*m.iqd_plfe1(*iqd, f1)
|
358
368
|
plfe2 = m.kpfe*m.iqd_plfe2(iqd[0], iqd[1], f1)
|
@@ -370,7 +380,7 @@ def efficiency_losses_map(eecpars, u1, T, temp, n, npoints=(60, 40),
|
|
370
380
|
plfe1 = m.kpfe*m.iqd_plfe1(*iqd, f1)
|
371
381
|
plfe2 = m.kpfe*m.iqd_plfe2(*iqd, f1)
|
372
382
|
plmag = np.zeros_like(plfe2)
|
373
|
-
plcu1 = m.iqd_plcu1(iqd[0], iqd[1],
|
383
|
+
plcu1 = m.iqd_plcu1(iqd[0], iqd[1], f1)
|
374
384
|
try:
|
375
385
|
plcu1_dc = m.iqd_plcu1(iqd[0], iqd[1],
|
376
386
|
np.array([0.0 for i in f1])).tolist()
|
@@ -388,19 +398,22 @@ def efficiency_losses_map(eecpars, u1, T, temp, n, npoints=(60, 40),
|
|
388
398
|
plmag = np.zeros(ntmesh.shape[1])
|
389
399
|
plcu1 = np.array(r['plcu1'])
|
390
400
|
plcu2 = np.array(r['plcu2'])
|
391
|
-
plcu1_dc = [] # reserved for winding (dc, ac) losses
|
392
|
-
plcu1_ac = []
|
401
|
+
plcu1_dc = r['plcu1_dc'] # [] # reserved for winding (dc, ac) losses
|
402
|
+
plcu1_ac = r['plcu1_ac'] #[]
|
393
403
|
iqd = np.zeros(ntmesh.shape)
|
394
404
|
u1 = np.array(r['u1'])
|
395
405
|
i1 = np.array(r['i1'])
|
406
|
+
|
407
|
+
|
396
408
|
try:
|
397
409
|
if isinstance(eecpars, dict):
|
398
410
|
tfric = eecpars['kfric_b']*eecpars['rotor_mass']*30e-3/np.pi
|
411
|
+
if 'tfric' in eecpars: # to get the user setted value (possible in IM)
|
412
|
+
tfric=eecpars['tfric']
|
399
413
|
else:
|
400
414
|
tfric = m.tfric
|
401
415
|
except KeyError:
|
402
416
|
tfric = 0
|
403
|
-
|
404
417
|
plfric = 2*np.pi*ntmesh[0]*tfric
|
405
418
|
if not with_tmech:
|
406
419
|
ntmesh[1] -= tfric
|
@@ -437,4 +450,4 @@ def efficiency_losses_map(eecpars, u1, T, temp, n, npoints=(60, 40),
|
|
437
450
|
plfric=plfric.tolist(),
|
438
451
|
losses=ploss.tolist(),
|
439
452
|
plcu1_dc=plcu1_dc,
|
440
|
-
plcu1_ac=plcu1_ac)
|
453
|
+
plcu1_ac=plcu1_ac)
|
@@ -198,7 +198,9 @@ class InductionMachine(Component):
|
|
198
198
|
|
199
199
|
def lstat(self, w):
|
200
200
|
"""stator leakage inductance"""
|
201
|
-
|
201
|
+
# we add end-winding inductance here
|
202
|
+
le_value = getattr(self, 'le', 0)
|
203
|
+
return self.lsigma1 + le_value
|
202
204
|
|
203
205
|
def rrot(self, w):
|
204
206
|
"""rotor resistance"""
|
@@ -485,77 +487,81 @@ class InductionMachine(Component):
|
|
485
487
|
"""
|
486
488
|
with_tmech = kwargs.get('with_tmech', True)
|
487
489
|
|
488
|
-
|
489
|
-
|
490
|
-
|
491
|
-
|
492
|
-
|
493
|
-
|
494
|
-
|
495
|
-
|
496
|
-
|
497
|
-
|
498
|
-
try:
|
499
|
-
w1 = self.w1(u1max, self.psiref, tq, wm, with_tmech)
|
500
|
-
except ValueError:
|
501
|
-
wmPullout = wm
|
502
|
-
break
|
503
|
-
wmMax = max(1.5*wmPullout, 3*abs(pmmax/T))
|
504
|
-
if n:
|
505
|
-
wmMax = 2*np.pi*n
|
506
|
-
if wmMax > wmPullout:
|
507
|
-
wmtab0 = np.linspace(wmPullout, wmMax)
|
508
|
-
for wm, tq in zip(wmtab0, [pmmax/wx**2
|
509
|
-
for wx in wmtab0]):
|
490
|
+
if np.isscalar(T):
|
491
|
+
wmType = self.wmfweak(u1max, self.psiref, T, with_tmech)
|
492
|
+
logger.info(wmType)
|
493
|
+
pmmax = wmType*T
|
494
|
+
wmPullout = so.fsolve(
|
495
|
+
lambda wx: (kpo*self.pullouttorque(self.p *
|
496
|
+
wx, u1max) - abs(pmmax/wx)),
|
497
|
+
wmType)[0]
|
498
|
+
wmtab0 = np.linspace(wmType, 3*wmPullout)
|
499
|
+
for wm, tq in zip(wmtab0, [pmmax/wx for wx in wmtab0]):
|
510
500
|
logger.debug("u1 %g psi %g tq %g wm %g",
|
511
|
-
|
501
|
+
u1max, self.psiref, tq, wm)
|
512
502
|
try:
|
513
503
|
w1 = self.w1(u1max, self.psiref, tq, wm, with_tmech)
|
514
504
|
except ValueError:
|
515
|
-
|
505
|
+
wmPullout = wm
|
516
506
|
break
|
517
|
-
|
518
|
-
|
519
|
-
|
520
|
-
|
521
|
-
|
522
|
-
|
523
|
-
|
524
|
-
|
525
|
-
|
526
|
-
|
527
|
-
|
528
|
-
|
529
|
-
|
530
|
-
|
531
|
-
|
532
|
-
|
533
|
-
|
534
|
-
if
|
535
|
-
|
536
|
-
|
537
|
-
|
538
|
-
|
539
|
-
|
540
|
-
|
541
|
-
|
542
|
-
|
543
|
-
|
544
|
-
|
545
|
-
|
546
|
-
|
547
|
-
|
548
|
-
|
507
|
+
wmMax = max(1.5*wmPullout, 3*abs(pmmax/T))
|
508
|
+
if n:
|
509
|
+
wmMax = 2*np.pi*n
|
510
|
+
if wmMax > wmPullout:
|
511
|
+
wmtab0 = np.linspace(wmPullout, wmMax)
|
512
|
+
for wm, tq in zip(wmtab0, [pmmax/wx**2
|
513
|
+
for wx in wmtab0]):
|
514
|
+
logger.debug("u1 %g psi %g tq %g wm %g",
|
515
|
+
u1max, self.psiref, tq, wm)
|
516
|
+
try:
|
517
|
+
w1 = self.w1(u1max, self.psiref, tq, wm, with_tmech)
|
518
|
+
except ValueError:
|
519
|
+
wmMax = wm
|
520
|
+
break
|
521
|
+
|
522
|
+
logger.info("wmtype %f wpo %f wmmax %f", wmType, wmPullout, wmMax)
|
523
|
+
|
524
|
+
if wmType < wmPullout < wmMax:
|
525
|
+
wmrange = sorted([0, wmType, wmPullout, wmMax])
|
526
|
+
elif wmMax < wmType:
|
527
|
+
wmrange = sorted([0, wmMax])
|
528
|
+
elif wmType<0 or wmPullout<0 or wmMax<0:
|
529
|
+
wmrange = sorted([1, abs(min(wmMax,wmType, wmPullout)), abs(max(wmMax,wmType, wmPullout))])
|
530
|
+
else:
|
531
|
+
wmrange = sorted([0, wmType, wmMax])
|
532
|
+
logger.info("Speed range %s", wmrange)
|
533
|
+
wmlin = []
|
534
|
+
dw = 0
|
535
|
+
for i, nx in enumerate([round(nsamples*(w1-w0)/wmMax)
|
536
|
+
for w1, w0 in zip(wmrange[1:],
|
537
|
+
wmrange)]):
|
538
|
+
if nx == 1:
|
539
|
+
nx = 2
|
540
|
+
if nx > 0:
|
541
|
+
lw = np.linspace(wmrange[i]+dw, wmrange[i+1], nx)
|
542
|
+
dw = lw[-1] - lw[-2]
|
543
|
+
wmlin.append(lw)
|
544
|
+
if len(wmlin) > 1:
|
545
|
+
wmtab = np.concatenate(wmlin)
|
546
|
+
else:
|
547
|
+
wmtab = wmlin[1:]
|
548
|
+
|
549
|
+
def tload2(wm):
|
550
|
+
if wm < wmType and wm < wmPullout:
|
551
|
+
return T
|
552
|
+
if wm < wmPullout:
|
553
|
+
if pmmax < 0:
|
554
|
+
return max(T, pmmax/wm)
|
555
|
+
return min(T, pmmax/wm)
|
549
556
|
if pmmax < 0:
|
550
|
-
return max(
|
551
|
-
return min(
|
552
|
-
if pmmax < 0:
|
553
|
-
return max(wmPullout*pmmax/wm**2, T)
|
554
|
-
return min(wmPullout*pmmax/wm**2, T)
|
557
|
+
return max(wmPullout*pmmax/wm**2, T)
|
558
|
+
return min(wmPullout*pmmax/wm**2, T)
|
555
559
|
|
560
|
+
T = [tload2(wx) for wx in wmtab]
|
561
|
+
else:
|
562
|
+
wmtab = n
|
556
563
|
r = dict(u1=[], i1=[], T=[], cosphi=[], n=[], s=[], sk=[],
|
557
|
-
|
558
|
-
T = [tload2(wx) for wx in wmtab]
|
564
|
+
plfe1=[], plcu1=[], plcu2=[], f1=[])
|
559
565
|
tfric = self.tfric
|
560
566
|
with warnings.catch_warnings():
|
561
567
|
warnings.simplefilter("ignore")
|
@@ -582,7 +588,8 @@ class InductionMachine(Component):
|
|
582
588
|
r['s'].append(float((w1 - self.p * wm) / w1))
|
583
589
|
r['sk'].append(self.sk(w1, np.abs(u1)/w1))
|
584
590
|
# add n_type to result dict
|
585
|
-
|
591
|
+
if np.isscalar(T):
|
592
|
+
r['n_type'] = wmType/2/np.pi
|
586
593
|
# except ValueError as ex:
|
587
594
|
# break
|
588
595
|
r['plfw'] = [self.pfric(n) for n in r['n']]
|
@@ -863,9 +870,11 @@ def parident(workdir, engine, f1, u1, wdgcon,
|
|
863
870
|
# TODO: sigma = 58e6
|
864
871
|
# if 'material' in machine[wdgk]:
|
865
872
|
# sigma = condMat[machine[wdgk]]['elconduct']
|
873
|
+
if 'material' in m['windings']:
|
874
|
+
sigma = m['windings']['cuconduct']
|
866
875
|
g = loadsim['num_par_wdgs']
|
867
876
|
r1 = wdg_resistance(
|
868
|
-
wdg, n, g, aw, da1, hs, lfe)
|
877
|
+
wdg, n, g, aw, da1, hs, lfe, sigma=sigma)
|
869
878
|
|
870
879
|
# psi1 = ip.interp1d(i1_0, np.mean(psi1_0, axis=1),
|
871
880
|
# kind='quadratic')
|
@@ -910,7 +919,7 @@ def parident(workdir, engine, f1, u1, wdgcon,
|
|
910
919
|
# ls2 = results[1]['ls2']
|
911
920
|
pfe = results[2]['pfe1'][0]
|
912
921
|
|
913
|
-
end_ring_section = machine['rotor']
|
922
|
+
end_ring_section = machine['rotor'].get('Aring', 0)
|
914
923
|
bore_diam = machine['bore_diam']
|
915
924
|
for key, value in machine['rotor'].items():
|
916
925
|
if isinstance(value, dict) and 'slot_height' in value:
|
@@ -957,12 +966,15 @@ def parident(workdir, engine, f1, u1, wdgcon,
|
|
957
966
|
wmat = machine[wdgk]['material']
|
958
967
|
impars['kth1'] = parstudy.femag.condMat.find(wmat)['tempcoef']
|
959
968
|
except KeyError:
|
960
|
-
logger.warning('Missing winding material id')
|
969
|
+
logger.warning('Missing winding material id for stator')
|
970
|
+
for mat in condMat:
|
971
|
+
if mat['name'] == 'Cu': #as Copper is used as default (cf r1 and wdg_resistance)
|
972
|
+
impars['kth1'] = mat['tempcoef']
|
961
973
|
try:
|
962
974
|
bmat = machine['rotor']['material']
|
963
975
|
impars['kth2'] = parstudy.femag.condMat.find(bmat)['tempcoef']
|
964
976
|
except KeyError:
|
965
|
-
logger.warning('Missing winding material id')
|
977
|
+
logger.warning('Missing winding material id for rotor')
|
966
978
|
|
967
979
|
return impars
|
968
980
|
|