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