PyOpenMagnetics 1.3.3__tar.gz → 1.3.5__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.
- {pyopenmagnetics-1.3.3 → pyopenmagnetics-1.3.5}/CMakeLists.txt +3 -0
- {pyopenmagnetics-1.3.3 → pyopenmagnetics-1.3.5}/PKG-INFO +1 -1
- {pyopenmagnetics-1.3.3 → pyopenmagnetics-1.3.5}/pyproject.toml +1 -1
- {pyopenmagnetics-1.3.3 → pyopenmagnetics-1.3.5}/src/advisers.cpp +63 -0
- {pyopenmagnetics-1.3.3 → pyopenmagnetics-1.3.5}/src/advisers.h +1 -0
- pyopenmagnetics-1.3.5/src/settings.cpp +538 -0
- pyopenmagnetics-1.3.3/src/settings.cpp +0 -251
- {pyopenmagnetics-1.3.3 → pyopenmagnetics-1.3.5}/.github/workflows/ci.yml +0 -0
- {pyopenmagnetics-1.3.3 → pyopenmagnetics-1.3.5}/.github/workflows/publish.yml +0 -0
- {pyopenmagnetics-1.3.3 → pyopenmagnetics-1.3.5}/.gitignore +0 -0
- {pyopenmagnetics-1.3.3 → pyopenmagnetics-1.3.5}/AGENTS.md +0 -0
- {pyopenmagnetics-1.3.3 → pyopenmagnetics-1.3.5}/LICENSE +0 -0
- {pyopenmagnetics-1.3.3 → pyopenmagnetics-1.3.5}/PyOpenMagnetics.pyi +0 -0
- {pyopenmagnetics-1.3.3 → pyopenmagnetics-1.3.5}/README.md +0 -0
- {pyopenmagnetics-1.3.3 → pyopenmagnetics-1.3.5}/api/MAS.py +0 -0
- {pyopenmagnetics-1.3.3 → pyopenmagnetics-1.3.5}/api/mas_db_reader.py +0 -0
- {pyopenmagnetics-1.3.3 → pyopenmagnetics-1.3.5}/api/validation.py +0 -0
- {pyopenmagnetics-1.3.3 → pyopenmagnetics-1.3.5}/clear_cibuildwheel_cache.sh +0 -0
- {pyopenmagnetics-1.3.3 → pyopenmagnetics-1.3.5}/docs/compatibility.md +0 -0
- {pyopenmagnetics-1.3.3 → pyopenmagnetics-1.3.5}/docs/errors.md +0 -0
- {pyopenmagnetics-1.3.3 → pyopenmagnetics-1.3.5}/docs/performance.md +0 -0
- {pyopenmagnetics-1.3.3 → pyopenmagnetics-1.3.5}/examples/README.md +0 -0
- {pyopenmagnetics-1.3.3 → pyopenmagnetics-1.3.5}/examples/buck_inductor.py +0 -0
- {pyopenmagnetics-1.3.3 → pyopenmagnetics-1.3.5}/examples/complete_simulation_example.py +0 -0
- {pyopenmagnetics-1.3.3 → pyopenmagnetics-1.3.5}/examples/converter_design_example.py +0 -0
- {pyopenmagnetics-1.3.3 → pyopenmagnetics-1.3.5}/examples/debug_bobbin.py +0 -0
- {pyopenmagnetics-1.3.3 → pyopenmagnetics-1.3.5}/examples/debug_coil.py +0 -0
- {pyopenmagnetics-1.3.3 → pyopenmagnetics-1.3.5}/examples/debug_core.py +0 -0
- {pyopenmagnetics-1.3.3 → pyopenmagnetics-1.3.5}/examples/debug_plotting.py +0 -0
- {pyopenmagnetics-1.3.3 → pyopenmagnetics-1.3.5}/examples/flyback_220v_12v_1a.py +0 -0
- {pyopenmagnetics-1.3.3 → pyopenmagnetics-1.3.5}/examples/flyback_220v_12v_2a_complete.py +0 -0
- {pyopenmagnetics-1.3.3 → pyopenmagnetics-1.3.5}/examples/flyback_bh_curve.png +0 -0
- {pyopenmagnetics-1.3.3 → pyopenmagnetics-1.3.5}/examples/flyback_core.png +0 -0
- {pyopenmagnetics-1.3.3 → pyopenmagnetics-1.3.5}/examples/flyback_design.py +0 -0
- {pyopenmagnetics-1.3.3 → pyopenmagnetics-1.3.5}/examples/flyback_summary.png +0 -0
- {pyopenmagnetics-1.3.3 → pyopenmagnetics-1.3.5}/examples/flyback_waveforms.png +0 -0
- {pyopenmagnetics-1.3.3 → pyopenmagnetics-1.3.5}/examples/list_plot_funcs.py +0 -0
- {pyopenmagnetics-1.3.3 → pyopenmagnetics-1.3.5}/examples/plot_flyback_design.py +0 -0
- {pyopenmagnetics-1.3.3 → pyopenmagnetics-1.3.5}/examples/plot_flyback_pyom.py +0 -0
- {pyopenmagnetics-1.3.3 → pyopenmagnetics-1.3.5}/examples/test_field_calc.py +0 -0
- {pyopenmagnetics-1.3.3 → pyopenmagnetics-1.3.5}/examples/test_field_plot.py +0 -0
- {pyopenmagnetics-1.3.3 → pyopenmagnetics-1.3.5}/force_fresh_build.sh +0 -0
- {pyopenmagnetics-1.3.3 → pyopenmagnetics-1.3.5}/llms.txt +0 -0
- {pyopenmagnetics-1.3.3 → pyopenmagnetics-1.3.5}/notebooks/01_getting_started.ipynb +0 -0
- {pyopenmagnetics-1.3.3 → pyopenmagnetics-1.3.5}/notebooks/02_buck_inductor.ipynb +0 -0
- {pyopenmagnetics-1.3.3 → pyopenmagnetics-1.3.5}/notebooks/03_core_losses.ipynb +0 -0
- {pyopenmagnetics-1.3.3 → pyopenmagnetics-1.3.5}/notebooks/README.md +0 -0
- {pyopenmagnetics-1.3.3 → pyopenmagnetics-1.3.5}/requirements.txt +0 -0
- {pyopenmagnetics-1.3.3 → pyopenmagnetics-1.3.5}/src/bobbin.cpp +0 -0
- {pyopenmagnetics-1.3.3 → pyopenmagnetics-1.3.5}/src/bobbin.h +0 -0
- {pyopenmagnetics-1.3.3 → pyopenmagnetics-1.3.5}/src/common.h +0 -0
- {pyopenmagnetics-1.3.3 → pyopenmagnetics-1.3.5}/src/converter.cpp +0 -0
- {pyopenmagnetics-1.3.3 → pyopenmagnetics-1.3.5}/src/converter.h +0 -0
- {pyopenmagnetics-1.3.3 → pyopenmagnetics-1.3.5}/src/core.cpp +0 -0
- {pyopenmagnetics-1.3.3 → pyopenmagnetics-1.3.5}/src/core.h +0 -0
- {pyopenmagnetics-1.3.3 → pyopenmagnetics-1.3.5}/src/database.cpp +0 -0
- {pyopenmagnetics-1.3.3 → pyopenmagnetics-1.3.5}/src/database.h +0 -0
- {pyopenmagnetics-1.3.3 → pyopenmagnetics-1.3.5}/src/logging.cpp +0 -0
- {pyopenmagnetics-1.3.3 → pyopenmagnetics-1.3.5}/src/logging.h +0 -0
- {pyopenmagnetics-1.3.3 → pyopenmagnetics-1.3.5}/src/losses.cpp +0 -0
- {pyopenmagnetics-1.3.3 → pyopenmagnetics-1.3.5}/src/losses.h +0 -0
- {pyopenmagnetics-1.3.3 → pyopenmagnetics-1.3.5}/src/module.cpp +0 -0
- {pyopenmagnetics-1.3.3 → pyopenmagnetics-1.3.5}/src/plotting.cpp +0 -0
- {pyopenmagnetics-1.3.3 → pyopenmagnetics-1.3.5}/src/plotting.h +0 -0
- {pyopenmagnetics-1.3.3 → pyopenmagnetics-1.3.5}/src/settings.h +0 -0
- {pyopenmagnetics-1.3.3 → pyopenmagnetics-1.3.5}/src/simulation.cpp +0 -0
- {pyopenmagnetics-1.3.3 → pyopenmagnetics-1.3.5}/src/simulation.h +0 -0
- {pyopenmagnetics-1.3.3 → pyopenmagnetics-1.3.5}/src/utils.cpp +0 -0
- {pyopenmagnetics-1.3.3 → pyopenmagnetics-1.3.5}/src/utils.h +0 -0
- {pyopenmagnetics-1.3.3 → pyopenmagnetics-1.3.5}/src/winding.cpp +0 -0
- {pyopenmagnetics-1.3.3 → pyopenmagnetics-1.3.5}/src/winding.h +0 -0
- {pyopenmagnetics-1.3.3 → pyopenmagnetics-1.3.5}/src/wire.cpp +0 -0
- {pyopenmagnetics-1.3.3 → pyopenmagnetics-1.3.5}/src/wire.h +0 -0
- {pyopenmagnetics-1.3.3 → pyopenmagnetics-1.3.5}/test.py +0 -0
- {pyopenmagnetics-1.3.3 → pyopenmagnetics-1.3.5}/tests/__init__.py +0 -0
- {pyopenmagnetics-1.3.3 → pyopenmagnetics-1.3.5}/tests/conftest.py +0 -0
- {pyopenmagnetics-1.3.3 → pyopenmagnetics-1.3.5}/tests/test_converter_endpoints.py +0 -0
- {pyopenmagnetics-1.3.3 → pyopenmagnetics-1.3.5}/tests/test_core.py +0 -0
- {pyopenmagnetics-1.3.3 → pyopenmagnetics-1.3.5}/tests/test_core_adviser.py +0 -0
- {pyopenmagnetics-1.3.3 → pyopenmagnetics-1.3.5}/tests/test_examples_integration.py +0 -0
- {pyopenmagnetics-1.3.3 → pyopenmagnetics-1.3.5}/tests/test_inputs.py +0 -0
- {pyopenmagnetics-1.3.3 → pyopenmagnetics-1.3.5}/tests/test_logging.py +0 -0
- {pyopenmagnetics-1.3.3 → pyopenmagnetics-1.3.5}/tests/test_magnetic_adviser.py +0 -0
- {pyopenmagnetics-1.3.3 → pyopenmagnetics-1.3.5}/tests/test_winding.py +0 -0
|
@@ -265,6 +265,9 @@ cmrc_add_resource_library(data ALIAS data::data NAMESPACE data WHENCE ${MAS_DIR}
|
|
|
265
265
|
${MAS_DIR}/data/wires.ndjson)
|
|
266
266
|
target_link_libraries(PyOpenMagnetics PUBLIC data::data)
|
|
267
267
|
|
|
268
|
+
cmrc_add_resource_library(core_losses_data ALIAS data::core_losses_data NAMESPACE coreLossesData ${MKF_DIR}/src/data/core_losses/ciGSE_coefficients.json)
|
|
269
|
+
target_link_libraries(PyOpenMagnetics PUBLIC data::core_losses_data)
|
|
270
|
+
|
|
268
271
|
include_directories("${CMAKE_BINARY_DIR}/_deps/json-src/include/nlohmann/")
|
|
269
272
|
include_directories("${CMAKE_BINARY_DIR}/_deps/pybind11-src/include/")
|
|
270
273
|
include_directories("${CMAKE_BINARY_DIR}/_deps/pybind11_json-src/include/pybind11_json/")
|
|
@@ -104,6 +104,37 @@ json calculate_advised_magnetics(json inputsJson, int maximumNumberResults, json
|
|
|
104
104
|
}
|
|
105
105
|
}
|
|
106
106
|
|
|
107
|
+
json calculate_advised_magnetics_fast(json inputsJson, int maximumNumberResults, json coreModeJson) {
|
|
108
|
+
try {
|
|
109
|
+
OpenMagnetics::Inputs inputs(inputsJson);
|
|
110
|
+
OpenMagnetics::CoreAdviser::CoreAdviserModes coreMode;
|
|
111
|
+
from_json(coreModeJson, coreMode);
|
|
112
|
+
|
|
113
|
+
OpenMagnetics::MagneticAdviser magneticAdviser;
|
|
114
|
+
magneticAdviser.set_core_mode(coreMode);
|
|
115
|
+
auto masMagnetics = magneticAdviser.get_advised_magnetic_fast(inputs, maximumNumberResults);
|
|
116
|
+
|
|
117
|
+
json results = json();
|
|
118
|
+
results["data"] = json::array();
|
|
119
|
+
for (auto& [masMagnetic, scoring] : masMagnetics) {
|
|
120
|
+
std::string name = masMagnetic.get_magnetic().get_manufacturer_info().value().get_reference().value();
|
|
121
|
+
json result;
|
|
122
|
+
json masJson;
|
|
123
|
+
to_json(masJson, masMagnetic);
|
|
124
|
+
result["mas"] = masJson;
|
|
125
|
+
result["scoring"] = scoring;
|
|
126
|
+
results["data"].push_back(result);
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
return results;
|
|
130
|
+
}
|
|
131
|
+
catch (const std::exception &exc) {
|
|
132
|
+
json exception;
|
|
133
|
+
exception["data"] = "Exception: " + std::string{exc.what()};
|
|
134
|
+
return exception;
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
|
|
107
138
|
json calculate_advised_magnetics_from_catalog(json inputsJson, json catalogJson, int maximumNumberResults) {
|
|
108
139
|
try {
|
|
109
140
|
OpenMagnetics::settings.set_coil_delimit_and_compact(true);
|
|
@@ -269,6 +300,38 @@ void register_adviser_bindings(py::module& m) {
|
|
|
269
300
|
)pbdoc",
|
|
270
301
|
py::arg("inputs_json"), py::arg("max_results"), py::arg("core_mode_json"));
|
|
271
302
|
|
|
303
|
+
m.def("calculate_advised_magnetics_fast", &calculate_advised_magnetics_fast,
|
|
304
|
+
R"pbdoc(
|
|
305
|
+
Get recommended complete magnetic designs using fast analytical mode.
|
|
306
|
+
|
|
307
|
+
Performs rapid magnetic design exploration using analytical turn/gap
|
|
308
|
+
calculation and simplified loss evaluation (DC ohmic + core losses only).
|
|
309
|
+
Bypasses CoilAdviser optimization and full MagneticSimulator for speed.
|
|
310
|
+
Results are sorted by ascending total losses (lower losses = better rank).
|
|
311
|
+
|
|
312
|
+
Suitable for design space exploration and Pareto front generation.
|
|
313
|
+
For production designs use calculate_advised_magnetics() instead.
|
|
314
|
+
|
|
315
|
+
Args:
|
|
316
|
+
inputs_json: JSON object containing design requirements and operating points.
|
|
317
|
+
Should be processed using process_inputs() first.
|
|
318
|
+
max_results: Maximum number of magnetic recommendations to return.
|
|
319
|
+
core_mode_json: Core selection mode - "AVAILABLE_CORES" or "STANDARD_CORES".
|
|
320
|
+
|
|
321
|
+
Returns:
|
|
322
|
+
JSON object with "data" array containing results sorted by total losses.
|
|
323
|
+
Each result has:
|
|
324
|
+
- "mas": Mas object with magnetic, inputs, and outputs (losses data)
|
|
325
|
+
- "scoring": Total losses value in watts (lower is better)
|
|
326
|
+
|
|
327
|
+
Example:
|
|
328
|
+
>>> inputs = PyMKF.process_inputs(raw_inputs)
|
|
329
|
+
>>> result = PyMKF.calculate_advised_magnetics_fast(inputs, 5, "STANDARD_CORES")
|
|
330
|
+
>>> for item in result["data"]:
|
|
331
|
+
... print(f"Total losses: {item['scoring']} W")
|
|
332
|
+
)pbdoc",
|
|
333
|
+
py::arg("inputs_json"), py::arg("max_results"), py::arg("core_mode_json"));
|
|
334
|
+
|
|
272
335
|
m.def("calculate_advised_magnetics_from_catalog", &calculate_advised_magnetics_from_catalog,
|
|
273
336
|
R"pbdoc(
|
|
274
337
|
Get recommended magnetics from a custom component catalog.
|
|
@@ -9,6 +9,7 @@ json calculate_advised_cores(json inputsJson, json weightsJson, int maximumNumbe
|
|
|
9
9
|
|
|
10
10
|
// Magnetic adviser
|
|
11
11
|
json calculate_advised_magnetics(json inputsJson, int maximumNumberResults, json coreModeJson);
|
|
12
|
+
json calculate_advised_magnetics_fast(json inputsJson, int maximumNumberResults, json coreModeJson);
|
|
12
13
|
json calculate_advised_magnetics_from_catalog(json inputsJson, json catalogJson, int maximumNumberResults);
|
|
13
14
|
json calculate_advised_magnetics_from_cache(json inputsJson, json filterFlowJson, int maximumNumberResults);
|
|
14
15
|
|
|
@@ -0,0 +1,538 @@
|
|
|
1
|
+
#include "settings.h"
|
|
2
|
+
|
|
3
|
+
namespace PyMKF {
|
|
4
|
+
|
|
5
|
+
py::dict get_constants() {
|
|
6
|
+
py::dict constantsMap;
|
|
7
|
+
constantsMap["residualGap"] = OpenMagnetics::constants.residualGap;
|
|
8
|
+
constantsMap["minimumNonResidualGap"] = OpenMagnetics::constants.minimumNonResidualGap;
|
|
9
|
+
constantsMap["vacuumPermeability"] = OpenMagnetics::constants.vacuumPermeability;
|
|
10
|
+
constantsMap["vacuumPermittivity"] = OpenMagnetics::constants.vacuumPermittivity;
|
|
11
|
+
constantsMap["spacerProtudingPercentage"] = OpenMagnetics::constants.spacerProtudingPercentage;
|
|
12
|
+
constantsMap["coilPainterScale"] = OpenMagnetics::constants.coilPainterScale;
|
|
13
|
+
constantsMap["minimumDistributedFringingFactor"] = OpenMagnetics::constants.minimumDistributedFringingFactor;
|
|
14
|
+
constantsMap["maximumDistributedFringingFactor"] = OpenMagnetics::constants.maximumDistributedFringingFactor;
|
|
15
|
+
constantsMap["initialGapLengthForSearching"] = OpenMagnetics::constants.initialGapLengthForSearching;
|
|
16
|
+
constantsMap["roshenMagneticFieldStrengthStep"] = OpenMagnetics::constants.roshenMagneticFieldStrengthStep;
|
|
17
|
+
constantsMap["foilToSectionMargin"] = OpenMagnetics::constants.foilToSectionMargin;
|
|
18
|
+
constantsMap["planarToSectionMargin"] = OpenMagnetics::constants.planarToSectionMargin;
|
|
19
|
+
return constantsMap;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
py::dict get_defaults() {
|
|
23
|
+
py::dict defaultsMap;
|
|
24
|
+
json aux;
|
|
25
|
+
to_json(aux, OpenMagnetics::defaults.coreLossesModelDefault);
|
|
26
|
+
defaultsMap["coreLossesModelDefault"] = aux;
|
|
27
|
+
to_json(aux, OpenMagnetics::defaults.coreTemperatureModelDefault);
|
|
28
|
+
defaultsMap["coreTemperatureModelDefault"] = aux;
|
|
29
|
+
to_json(aux, OpenMagnetics::defaults.reluctanceModelDefault);
|
|
30
|
+
defaultsMap["reluctanceModelDefault"] = aux;
|
|
31
|
+
to_json(aux, OpenMagnetics::defaults.magneticFieldStrengthModelDefault);
|
|
32
|
+
defaultsMap["magneticFieldStrengthModelDefault"] = aux;
|
|
33
|
+
to_json(aux, OpenMagnetics::defaults.magneticFieldStrengthFringingEffectModelDefault);
|
|
34
|
+
defaultsMap["magneticFieldStrengthFringingEffectModelDefault"] = aux;
|
|
35
|
+
defaultsMap["maximumProportionMagneticFluxDensitySaturation"] = OpenMagnetics::defaults.maximumProportionMagneticFluxDensitySaturation;
|
|
36
|
+
defaultsMap["coreAdviserFrequencyReference"] = OpenMagnetics::defaults.coreAdviserFrequencyReference;
|
|
37
|
+
defaultsMap["coreAdviserMagneticFluxDensityReference"] = OpenMagnetics::defaults.coreAdviserMagneticFluxDensityReference;
|
|
38
|
+
defaultsMap["coreAdviserThresholdValidity"] = OpenMagnetics::defaults.coreAdviserThresholdValidity;
|
|
39
|
+
defaultsMap["coreAdviserMaximumCoreTemperature"] = OpenMagnetics::defaults.coreAdviserMaximumCoreTemperature;
|
|
40
|
+
defaultsMap["coreAdviserMaximumPercentagePowerCoreLosses"] = OpenMagnetics::defaults.coreAdviserMaximumPercentagePowerCoreLosses;
|
|
41
|
+
defaultsMap["coreAdviserMaximumMagneticsAfterFiltering"] = OpenMagnetics::defaults.coreAdviserMaximumMagneticsAfterFiltering;
|
|
42
|
+
defaultsMap["coreAdviserMaximumNumberStacks"] = OpenMagnetics::defaults.coreAdviserMaximumNumberStacks;
|
|
43
|
+
defaultsMap["maximumCurrentDensity"] = OpenMagnetics::defaults.maximumCurrentDensity;
|
|
44
|
+
defaultsMap["maximumEffectiveCurrentDensity"] = OpenMagnetics::defaults.maximumEffectiveCurrentDensity;
|
|
45
|
+
defaultsMap["maximumNumberParallels"] = OpenMagnetics::defaults.maximumNumberParallels;
|
|
46
|
+
defaultsMap["magneticFluxDensitySaturation"] = OpenMagnetics::defaults.magneticFluxDensitySaturation;
|
|
47
|
+
defaultsMap["magnetizingInductanceThresholdValidity"] = OpenMagnetics::defaults.magnetizingInductanceThresholdValidity;
|
|
48
|
+
defaultsMap["harmonicAmplitudeThreshold"] = OpenMagnetics::defaults.harmonicAmplitudeThreshold;
|
|
49
|
+
defaultsMap["ambientTemperature"] = OpenMagnetics::defaults.ambientTemperature;
|
|
50
|
+
defaultsMap["measurementFrequency"] = OpenMagnetics::defaults.measurementFrequency;
|
|
51
|
+
defaultsMap["magneticFieldMirroringDimension"] = OpenMagnetics::defaults.magneticFieldMirroringDimension;
|
|
52
|
+
defaultsMap["maximumCoilPattern"] = OpenMagnetics::defaults.maximumCoilPattern;
|
|
53
|
+
to_json(aux, OpenMagnetics::defaults.defaultRoundWindowSectionsOrientation);
|
|
54
|
+
defaultsMap["defaultRoundWindowSectionsOrientation"] = aux;
|
|
55
|
+
to_json(aux, OpenMagnetics::defaults.defaultRectangularWindowSectionsOrientation);
|
|
56
|
+
defaultsMap["defaultRectangularWindowSectionsOrientation"] = aux;
|
|
57
|
+
defaultsMap["defaultEnamelledInsulationMaterial"] = OpenMagnetics::defaults.defaultEnamelledInsulationMaterial;
|
|
58
|
+
defaultsMap["defaultInsulationMaterial"] = OpenMagnetics::defaults.defaultInsulationMaterial;
|
|
59
|
+
defaultsMap["defaultLayerInsulationMaterial"] = OpenMagnetics::defaults.defaultLayerInsulationMaterial;
|
|
60
|
+
defaultsMap["overlappingFactorSurroundingTurns"] = OpenMagnetics::defaults.overlappingFactorSurroundingTurns;
|
|
61
|
+
to_json(aux, OpenMagnetics::defaults.commonWireStandard);
|
|
62
|
+
defaultsMap["commonWireStandard"] = aux;
|
|
63
|
+
return defaultsMap;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
json get_settings() {
|
|
67
|
+
try {
|
|
68
|
+
json settingsJson;
|
|
69
|
+
|
|
70
|
+
// General
|
|
71
|
+
settingsJson["verbose"] = OpenMagnetics::settings.get_verbose();
|
|
72
|
+
settingsJson["useToroidalCores"] = OpenMagnetics::settings.get_use_toroidal_cores();
|
|
73
|
+
settingsJson["useConcentricCores"] = OpenMagnetics::settings.get_use_concentric_cores();
|
|
74
|
+
settingsJson["useOnlyCoresInStock"] = OpenMagnetics::settings.get_use_only_cores_in_stock();
|
|
75
|
+
settingsJson["usePowderCores"] = OpenMagnetics::settings.get_use_powder_cores();
|
|
76
|
+
|
|
77
|
+
// Inputs
|
|
78
|
+
settingsJson["inputsTrimHarmonics"] = OpenMagnetics::settings.get_inputs_trim_harmonics();
|
|
79
|
+
settingsJson["inputsNumberPointsSampledWaveforms"] = OpenMagnetics::settings.get_inputs_number_points_sampled_waveforms();
|
|
80
|
+
|
|
81
|
+
// Magnetizing inductance
|
|
82
|
+
settingsJson["magnetizingInductanceIncludeAirInductance"] = OpenMagnetics::settings.get_magnetizing_inductance_include_air_inductance();
|
|
83
|
+
|
|
84
|
+
// Coil
|
|
85
|
+
settingsJson["coilAllowMarginTape"] = OpenMagnetics::settings.get_coil_allow_margin_tape();
|
|
86
|
+
settingsJson["coilAllowInsulatedWire"] = OpenMagnetics::settings.get_coil_allow_insulated_wire();
|
|
87
|
+
settingsJson["coilFillSectionsWithMarginTape"] = OpenMagnetics::settings.get_coil_fill_sections_with_margin_tape();
|
|
88
|
+
settingsJson["coilWindEvenIfNotFit"] = OpenMagnetics::settings.get_coil_wind_even_if_not_fit();
|
|
89
|
+
settingsJson["coilDelimitAndCompact"] = OpenMagnetics::settings.get_coil_delimit_and_compact();
|
|
90
|
+
settingsJson["coilTryRewind"] = OpenMagnetics::settings.get_coil_try_rewind();
|
|
91
|
+
settingsJson["coilIncludeAdditionalCoordinates"] = OpenMagnetics::settings.get_coil_include_additional_coordinates();
|
|
92
|
+
settingsJson["coilEqualizeMargins"] = OpenMagnetics::settings.get_coil_equalize_margins();
|
|
93
|
+
settingsJson["coilOnlyOneTurnPerLayerInContiguousRectangular"] = OpenMagnetics::settings.get_coil_only_one_turn_per_layer_in_contiguous_rectangular();
|
|
94
|
+
settingsJson["coilMaximumLayersPlanar"] = OpenMagnetics::settings.get_coil_maximum_layers_planar();
|
|
95
|
+
settingsJson["coilMesherInsideTurnsFactor"] = OpenMagnetics::settings.get_coil_mesher_inside_turns_factor();
|
|
96
|
+
settingsJson["coilEnableUserWindingLossesModels"] = OpenMagnetics::settings.get_coil_enable_user_winding_losses_models();
|
|
97
|
+
|
|
98
|
+
// Effective parameter standard
|
|
99
|
+
{
|
|
100
|
+
json aux;
|
|
101
|
+
to_json(aux, OpenMagnetics::settings.get_effective_parameter_standard());
|
|
102
|
+
settingsJson["effectiveParameterStandard"] = aux;
|
|
103
|
+
}
|
|
104
|
+
settingsJson["nanocrystallineStackingFactor"] = OpenMagnetics::settings.get_nanocrystalline_stacking_factor();
|
|
105
|
+
|
|
106
|
+
// Painter
|
|
107
|
+
settingsJson["painterNumberPointsX"] = OpenMagnetics::settings.get_painter_number_points_x();
|
|
108
|
+
settingsJson["painterNumberPointsY"] = OpenMagnetics::settings.get_painter_number_points_y();
|
|
109
|
+
settingsJson["painterMode"] = OpenMagnetics::settings.get_painter_mode();
|
|
110
|
+
settingsJson["painterLogarithmicScale"] = OpenMagnetics::settings.get_painter_logarithmic_scale();
|
|
111
|
+
settingsJson["painterIncludeFringing"] = OpenMagnetics::settings.get_painter_include_fringing();
|
|
112
|
+
settingsJson["painterDrawSpacer"] = OpenMagnetics::settings.get_painter_draw_spacer();
|
|
113
|
+
settingsJson["painterSimpleLitz"] = OpenMagnetics::settings.get_painter_simple_litz();
|
|
114
|
+
settingsJson["painterAdvancedLitz"] = OpenMagnetics::settings.get_painter_advanced_litz();
|
|
115
|
+
if (OpenMagnetics::settings.get_painter_maximum_value_colorbar()) {
|
|
116
|
+
settingsJson["painterMaximumValueColorbar"] = OpenMagnetics::settings.get_painter_maximum_value_colorbar();
|
|
117
|
+
}
|
|
118
|
+
if (OpenMagnetics::settings.get_painter_minimum_value_colorbar()) {
|
|
119
|
+
settingsJson["painterMinimumValueColorbar"] = OpenMagnetics::settings.get_painter_minimum_value_colorbar();
|
|
120
|
+
}
|
|
121
|
+
settingsJson["painterColorFerrite"] = OpenMagnetics::settings.get_painter_color_ferrite();
|
|
122
|
+
settingsJson["painterColorBobbin"] = OpenMagnetics::settings.get_painter_color_bobbin();
|
|
123
|
+
settingsJson["painterColorCopper"] = OpenMagnetics::settings.get_painter_color_copper();
|
|
124
|
+
settingsJson["painterColorInsulation"] = OpenMagnetics::settings.get_painter_color_insulation();
|
|
125
|
+
settingsJson["painterColorFr4"] = OpenMagnetics::settings.get_painter_color_fr4();
|
|
126
|
+
settingsJson["painterColorEnamel"] = OpenMagnetics::settings.get_painter_color_enamel();
|
|
127
|
+
settingsJson["painterColorFEP"] = OpenMagnetics::settings.get_painter_color_fep();
|
|
128
|
+
settingsJson["painterColorETFE"] = OpenMagnetics::settings.get_painter_color_etfe();
|
|
129
|
+
settingsJson["painterColorTCA"] = OpenMagnetics::settings.get_painter_color_tca();
|
|
130
|
+
settingsJson["painterColorPFA"] = OpenMagnetics::settings.get_painter_color_pfa();
|
|
131
|
+
settingsJson["painterColorSilk"] = OpenMagnetics::settings.get_painter_color_silk();
|
|
132
|
+
settingsJson["painterColorMargin"] = OpenMagnetics::settings.get_painter_color_margin();
|
|
133
|
+
settingsJson["painterColorSpacer"] = OpenMagnetics::settings.get_painter_color_spacer();
|
|
134
|
+
settingsJson["painterColorLines"] = OpenMagnetics::settings.get_painter_color_lines();
|
|
135
|
+
settingsJson["painterColorText"] = OpenMagnetics::settings.get_painter_color_text();
|
|
136
|
+
settingsJson["painterColorCurrentDensity"] = OpenMagnetics::settings.get_painter_color_current_density();
|
|
137
|
+
settingsJson["painterColorMagneticFieldMinimum"] = OpenMagnetics::settings.get_painter_color_magnetic_field_minimum();
|
|
138
|
+
settingsJson["painterColorMagneticFieldMaximum"] = OpenMagnetics::settings.get_painter_color_magnetic_field_maximum();
|
|
139
|
+
settingsJson["painterCciCoordinatesPath"] = OpenMagnetics::settings.get_painter_cci_coordinates_path();
|
|
140
|
+
settingsJson["painterMirroringDimension"] = OpenMagnetics::settings.get_painter_mirroring_dimension();
|
|
141
|
+
if (OpenMagnetics::settings.get_painter_magnetic_field_strength_model()) {
|
|
142
|
+
json aux;
|
|
143
|
+
to_json(aux, OpenMagnetics::settings.get_painter_magnetic_field_strength_model().value());
|
|
144
|
+
settingsJson["painterMagneticFieldStrengthModel"] = aux;
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
// Magnetic field
|
|
148
|
+
settingsJson["magneticFieldNumberPointsX"] = OpenMagnetics::settings.get_magnetic_field_number_points_x();
|
|
149
|
+
settingsJson["magneticFieldNumberPointsY"] = OpenMagnetics::settings.get_magnetic_field_number_points_y();
|
|
150
|
+
settingsJson["magneticFieldIncludeFringing"] = OpenMagnetics::settings.get_magnetic_field_include_fringing();
|
|
151
|
+
settingsJson["magneticFieldMirroringDimension"] = OpenMagnetics::settings.get_magnetic_field_mirroring_dimension();
|
|
152
|
+
|
|
153
|
+
// Leakage inductance
|
|
154
|
+
settingsJson["leakageInductanceGridAutoScaling"] = OpenMagnetics::settings.get_leakage_inductance_grid_auto_scaling();
|
|
155
|
+
settingsJson["leakageInductanceGridPrecisionLevelPlanar"] = OpenMagnetics::settings.get_leakage_inductance_grid_precision_level_planar();
|
|
156
|
+
settingsJson["leakageInductanceGridPrecisionLevelWound"] = OpenMagnetics::settings.get_leakage_inductance_grid_precision_level_wound();
|
|
157
|
+
|
|
158
|
+
// Adviser
|
|
159
|
+
settingsJson["coilAdviserMaximumNumberWires"] = OpenMagnetics::settings.get_coil_adviser_maximum_number_wires();
|
|
160
|
+
settingsJson["coreAdviserIncludeStacks"] = OpenMagnetics::settings.get_core_adviser_include_stacks();
|
|
161
|
+
settingsJson["coreAdviserIncludeDistributedGaps"] = OpenMagnetics::settings.get_core_adviser_include_distributed_gaps();
|
|
162
|
+
settingsJson["coreAdviserIncludeMargin"] = OpenMagnetics::settings.get_core_adviser_include_margin();
|
|
163
|
+
settingsJson["coreAdviserEnableIntermediatePruning"] = OpenMagnetics::settings.get_core_adviser_enable_intermediate_pruning();
|
|
164
|
+
settingsJson["coreAdviserMaximumMagneticsAfterFiltering"] = OpenMagnetics::settings.get_core_adviser_maximum_magnetics_after_filtering();
|
|
165
|
+
{
|
|
166
|
+
json aux;
|
|
167
|
+
to_json(aux, OpenMagnetics::settings.get_gapping_strategy());
|
|
168
|
+
settingsJson["gappingStrategy"] = aux;
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
// Wire adviser
|
|
172
|
+
settingsJson["wireAdviserIncludePlanar"] = OpenMagnetics::settings.get_wire_adviser_include_planar();
|
|
173
|
+
settingsJson["wireAdviserIncludeFoil"] = OpenMagnetics::settings.get_wire_adviser_include_foil();
|
|
174
|
+
settingsJson["wireAdviserIncludeRectangular"] = OpenMagnetics::settings.get_wire_adviser_include_rectangular();
|
|
175
|
+
settingsJson["wireAdviserIncludeLitz"] = OpenMagnetics::settings.get_wire_adviser_include_litz();
|
|
176
|
+
settingsJson["wireAdviserIncludeRound"] = OpenMagnetics::settings.get_wire_adviser_include_round();
|
|
177
|
+
settingsJson["wireAdviserAllowRectangularInToroidalCores"] = OpenMagnetics::settings.get_wire_adviser_allow_rectangular_in_toroidal_cores();
|
|
178
|
+
|
|
179
|
+
// Harmonics
|
|
180
|
+
settingsJson["harmonicAmplitudeThresholdQuickMode"] = OpenMagnetics::settings.get_harmonic_amplitude_threshold_quick_mode();
|
|
181
|
+
settingsJson["harmonicAmplitudeThreshold"] = OpenMagnetics::settings.get_harmonic_amplitude_threshold();
|
|
182
|
+
|
|
183
|
+
// Models
|
|
184
|
+
{
|
|
185
|
+
json aux;
|
|
186
|
+
to_json(aux, OpenMagnetics::settings.get_magnetic_field_strength_model());
|
|
187
|
+
settingsJson["magneticFieldStrengthModel"] = aux;
|
|
188
|
+
}
|
|
189
|
+
{
|
|
190
|
+
json aux;
|
|
191
|
+
to_json(aux, OpenMagnetics::settings.get_magnetic_field_strength_fringing_effect_model());
|
|
192
|
+
settingsJson["magneticFieldStrengthFringingEffectModel"] = aux;
|
|
193
|
+
}
|
|
194
|
+
{
|
|
195
|
+
json aux;
|
|
196
|
+
to_json(aux, OpenMagnetics::settings.get_leakage_inductance_magnetic_field_strength_model());
|
|
197
|
+
settingsJson["leakageInductanceMagneticFieldStrengthModel"] = aux;
|
|
198
|
+
}
|
|
199
|
+
{
|
|
200
|
+
json aux;
|
|
201
|
+
to_json(aux, OpenMagnetics::settings.get_reluctance_model());
|
|
202
|
+
settingsJson["reluctanceModel"] = aux;
|
|
203
|
+
}
|
|
204
|
+
{
|
|
205
|
+
json aux;
|
|
206
|
+
to_json(aux, OpenMagnetics::settings.get_core_temperature_model());
|
|
207
|
+
settingsJson["coreTemperatureModel"] = aux;
|
|
208
|
+
}
|
|
209
|
+
{
|
|
210
|
+
json aux;
|
|
211
|
+
to_json(aux, OpenMagnetics::settings.get_core_thermal_resistance_model());
|
|
212
|
+
settingsJson["coreThermalResistanceModel"] = aux;
|
|
213
|
+
}
|
|
214
|
+
{
|
|
215
|
+
json aux;
|
|
216
|
+
to_json(aux, OpenMagnetics::settings.get_winding_skin_effect_losses_model());
|
|
217
|
+
settingsJson["windingSkinEffectLossesModel"] = aux;
|
|
218
|
+
}
|
|
219
|
+
{
|
|
220
|
+
json aux;
|
|
221
|
+
to_json(aux, OpenMagnetics::settings.get_winding_proximity_effect_losses_model());
|
|
222
|
+
settingsJson["windingProximityEffectLossesModel"] = aux;
|
|
223
|
+
}
|
|
224
|
+
{
|
|
225
|
+
json aux;
|
|
226
|
+
to_json(aux, OpenMagnetics::settings.get_stray_capacitance_model());
|
|
227
|
+
settingsJson["strayCapacitanceModel"] = aux;
|
|
228
|
+
}
|
|
229
|
+
{
|
|
230
|
+
json aux;
|
|
231
|
+
to_json(aux, OpenMagnetics::settings.get_electric_field_output_unit());
|
|
232
|
+
settingsJson["electricFieldOutputUnit"] = aux;
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
// Circuit simulator
|
|
236
|
+
settingsJson["circuitSimulatorCurveFittingMode"] = OpenMagnetics::settings.get_circuit_simulator_curve_fitting_mode();
|
|
237
|
+
if (OpenMagnetics::settings.get_circuit_simulator_fracpole_options()) {
|
|
238
|
+
settingsJson["circuitSimulatorFracpoleOptions"] = OpenMagnetics::settings.get_circuit_simulator_fracpole_options().value();
|
|
239
|
+
}
|
|
240
|
+
settingsJson["circuitSimulatorIncludeSaturation"] = OpenMagnetics::settings.get_circuit_simulator_include_saturation();
|
|
241
|
+
settingsJson["circuitSimulatorIncludeMutualResistance"] = OpenMagnetics::settings.get_circuit_simulator_include_mutual_resistance();
|
|
242
|
+
settingsJson["circuitSimulatorCoreLossTopology"] = OpenMagnetics::settings.get_circuit_simulator_core_loss_topology();
|
|
243
|
+
|
|
244
|
+
// Preferred manufacturers
|
|
245
|
+
settingsJson["preferredCoreMaterialFerriteManufacturer"] = OpenMagnetics::settings.get_preferred_core_material_ferrite_manufacturer();
|
|
246
|
+
settingsJson["preferredCoreMaterialPowderManufacturer"] = OpenMagnetics::settings.get_preferred_core_material_powder_manufacturer();
|
|
247
|
+
settingsJson["coreCrossReferencerAllowDifferentCoreMaterialType"] = OpenMagnetics::settings.get_core_cross_referencer_allow_different_core_material_type();
|
|
248
|
+
|
|
249
|
+
return settingsJson;
|
|
250
|
+
}
|
|
251
|
+
catch (const std::exception &exc) {
|
|
252
|
+
json exception;
|
|
253
|
+
exception["data"] = "Exception: " + std::string{exc.what()};
|
|
254
|
+
return exception;
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
void set_settings(json settingsJson) {
|
|
259
|
+
try {
|
|
260
|
+
// General
|
|
261
|
+
if (settingsJson.contains("verbose")) OpenMagnetics::settings.set_verbose(settingsJson["verbose"]);
|
|
262
|
+
if (settingsJson.contains("useToroidalCores")) OpenMagnetics::settings.set_use_toroidal_cores(settingsJson["useToroidalCores"]);
|
|
263
|
+
if (settingsJson.contains("useConcentricCores")) OpenMagnetics::settings.set_use_concentric_cores(settingsJson["useConcentricCores"]);
|
|
264
|
+
if (settingsJson.contains("useOnlyCoresInStock")) OpenMagnetics::settings.set_use_only_cores_in_stock(settingsJson["useOnlyCoresInStock"]);
|
|
265
|
+
if (settingsJson.contains("usePowderCores")) OpenMagnetics::settings.set_use_powder_cores(settingsJson["usePowderCores"]);
|
|
266
|
+
|
|
267
|
+
// Inputs
|
|
268
|
+
if (settingsJson.contains("inputsTrimHarmonics")) OpenMagnetics::settings.set_inputs_trim_harmonics(settingsJson["inputsTrimHarmonics"]);
|
|
269
|
+
if (settingsJson.contains("inputsNumberPointsSampledWaveforms")) OpenMagnetics::settings.set_inputs_number_points_sampled_waveforms(settingsJson["inputsNumberPointsSampledWaveforms"]);
|
|
270
|
+
|
|
271
|
+
// Magnetizing inductance
|
|
272
|
+
if (settingsJson.contains("magnetizingInductanceIncludeAirInductance")) OpenMagnetics::settings.set_magnetizing_inductance_include_air_inductance(settingsJson["magnetizingInductanceIncludeAirInductance"]);
|
|
273
|
+
|
|
274
|
+
// Coil
|
|
275
|
+
if (settingsJson.contains("coilAllowMarginTape")) OpenMagnetics::settings.set_coil_allow_margin_tape(settingsJson["coilAllowMarginTape"]);
|
|
276
|
+
if (settingsJson.contains("coilAllowInsulatedWire")) OpenMagnetics::settings.set_coil_allow_insulated_wire(settingsJson["coilAllowInsulatedWire"]);
|
|
277
|
+
if (settingsJson.contains("coilFillSectionsWithMarginTape")) OpenMagnetics::settings.set_coil_fill_sections_with_margin_tape(settingsJson["coilFillSectionsWithMarginTape"]);
|
|
278
|
+
if (settingsJson.contains("coilWindEvenIfNotFit")) OpenMagnetics::settings.set_coil_wind_even_if_not_fit(settingsJson["coilWindEvenIfNotFit"]);
|
|
279
|
+
if (settingsJson.contains("coilDelimitAndCompact")) OpenMagnetics::settings.set_coil_delimit_and_compact(settingsJson["coilDelimitAndCompact"]);
|
|
280
|
+
if (settingsJson.contains("coilTryRewind")) OpenMagnetics::settings.set_coil_try_rewind(settingsJson["coilTryRewind"]);
|
|
281
|
+
if (settingsJson.contains("coilIncludeAdditionalCoordinates")) OpenMagnetics::settings.set_coil_include_additional_coordinates(settingsJson["coilIncludeAdditionalCoordinates"]);
|
|
282
|
+
if (settingsJson.contains("coilEqualizeMargins")) OpenMagnetics::settings.set_coil_equalize_margins(settingsJson["coilEqualizeMargins"]);
|
|
283
|
+
if (settingsJson.contains("coilOnlyOneTurnPerLayerInContiguousRectangular")) OpenMagnetics::settings.set_coil_only_one_turn_per_layer_in_contiguous_rectangular(settingsJson["coilOnlyOneTurnPerLayerInContiguousRectangular"]);
|
|
284
|
+
if (settingsJson.contains("coilMaximumLayersPlanar")) OpenMagnetics::settings.set_coil_maximum_layers_planar(settingsJson["coilMaximumLayersPlanar"]);
|
|
285
|
+
if (settingsJson.contains("coilMesherInsideTurnsFactor")) OpenMagnetics::settings.set_coil_mesher_inside_turns_factor(settingsJson["coilMesherInsideTurnsFactor"]);
|
|
286
|
+
if (settingsJson.contains("coilEnableUserWindingLossesModels")) OpenMagnetics::settings.set_coil_enable_user_winding_losses_models(settingsJson["coilEnableUserWindingLossesModels"]);
|
|
287
|
+
|
|
288
|
+
// Effective parameter standard
|
|
289
|
+
if (settingsJson.contains("effectiveParameterStandard")) {
|
|
290
|
+
EffectiveParameterStandard standard;
|
|
291
|
+
from_json(settingsJson["effectiveParameterStandard"], standard);
|
|
292
|
+
OpenMagnetics::settings.set_effective_parameter_standard(standard);
|
|
293
|
+
}
|
|
294
|
+
if (settingsJson.contains("nanocrystallineStackingFactor")) OpenMagnetics::settings.set_nanocrystalline_stacking_factor(settingsJson["nanocrystallineStackingFactor"]);
|
|
295
|
+
|
|
296
|
+
// Painter
|
|
297
|
+
if (settingsJson.contains("painterNumberPointsX")) OpenMagnetics::settings.set_painter_number_points_x(settingsJson["painterNumberPointsX"]);
|
|
298
|
+
if (settingsJson.contains("painterNumberPointsY")) OpenMagnetics::settings.set_painter_number_points_y(settingsJson["painterNumberPointsY"]);
|
|
299
|
+
if (settingsJson.contains("painterMode")) OpenMagnetics::settings.set_painter_mode(settingsJson["painterMode"]);
|
|
300
|
+
if (settingsJson.contains("painterLogarithmicScale")) OpenMagnetics::settings.set_painter_logarithmic_scale(settingsJson["painterLogarithmicScale"]);
|
|
301
|
+
if (settingsJson.contains("painterIncludeFringing")) OpenMagnetics::settings.set_painter_include_fringing(settingsJson["painterIncludeFringing"]);
|
|
302
|
+
if (settingsJson.contains("painterDrawSpacer")) OpenMagnetics::settings.set_painter_draw_spacer(settingsJson["painterDrawSpacer"]);
|
|
303
|
+
if (settingsJson.contains("painterSimpleLitz")) OpenMagnetics::settings.set_painter_simple_litz(settingsJson["painterSimpleLitz"]);
|
|
304
|
+
if (settingsJson.contains("painterAdvancedLitz")) OpenMagnetics::settings.set_painter_advanced_litz(settingsJson["painterAdvancedLitz"]);
|
|
305
|
+
if (settingsJson.contains("painterMaximumValueColorbar")) OpenMagnetics::settings.set_painter_maximum_value_colorbar(settingsJson["painterMaximumValueColorbar"]);
|
|
306
|
+
if (settingsJson.contains("painterMinimumValueColorbar")) OpenMagnetics::settings.set_painter_minimum_value_colorbar(settingsJson["painterMinimumValueColorbar"]);
|
|
307
|
+
if (settingsJson.contains("painterColorFerrite")) OpenMagnetics::settings.set_painter_color_ferrite(settingsJson["painterColorFerrite"]);
|
|
308
|
+
if (settingsJson.contains("painterColorBobbin")) OpenMagnetics::settings.set_painter_color_bobbin(settingsJson["painterColorBobbin"]);
|
|
309
|
+
if (settingsJson.contains("painterColorCopper")) OpenMagnetics::settings.set_painter_color_copper(settingsJson["painterColorCopper"]);
|
|
310
|
+
if (settingsJson.contains("painterColorInsulation")) OpenMagnetics::settings.set_painter_color_insulation(settingsJson["painterColorInsulation"]);
|
|
311
|
+
if (settingsJson.contains("painterColorFr4")) OpenMagnetics::settings.set_painter_color_fr4(settingsJson["painterColorFr4"]);
|
|
312
|
+
if (settingsJson.contains("painterColorEnamel")) OpenMagnetics::settings.set_painter_color_enamel(settingsJson["painterColorEnamel"]);
|
|
313
|
+
if (settingsJson.contains("painterColorFEP")) OpenMagnetics::settings.set_painter_color_fep(settingsJson["painterColorFEP"]);
|
|
314
|
+
if (settingsJson.contains("painterColorETFE")) OpenMagnetics::settings.set_painter_color_etfe(settingsJson["painterColorETFE"]);
|
|
315
|
+
if (settingsJson.contains("painterColorTCA")) OpenMagnetics::settings.set_painter_color_tca(settingsJson["painterColorTCA"]);
|
|
316
|
+
if (settingsJson.contains("painterColorPFA")) OpenMagnetics::settings.set_painter_color_pfa(settingsJson["painterColorPFA"]);
|
|
317
|
+
if (settingsJson.contains("painterColorSilk")) OpenMagnetics::settings.set_painter_color_silk(settingsJson["painterColorSilk"]);
|
|
318
|
+
if (settingsJson.contains("painterColorMargin")) OpenMagnetics::settings.set_painter_color_margin(settingsJson["painterColorMargin"]);
|
|
319
|
+
if (settingsJson.contains("painterColorSpacer")) OpenMagnetics::settings.set_painter_color_spacer(settingsJson["painterColorSpacer"]);
|
|
320
|
+
if (settingsJson.contains("painterColorLines")) OpenMagnetics::settings.set_painter_color_lines(settingsJson["painterColorLines"]);
|
|
321
|
+
if (settingsJson.contains("painterColorText")) OpenMagnetics::settings.set_painter_color_text(settingsJson["painterColorText"]);
|
|
322
|
+
if (settingsJson.contains("painterColorCurrentDensity")) OpenMagnetics::settings.set_painter_color_current_density(settingsJson["painterColorCurrentDensity"]);
|
|
323
|
+
if (settingsJson.contains("painterColorMagneticFieldMinimum")) OpenMagnetics::settings.set_painter_color_magnetic_field_minimum(settingsJson["painterColorMagneticFieldMinimum"]);
|
|
324
|
+
if (settingsJson.contains("painterColorMagneticFieldMaximum")) OpenMagnetics::settings.set_painter_color_magnetic_field_maximum(settingsJson["painterColorMagneticFieldMaximum"]);
|
|
325
|
+
if (settingsJson.contains("painterCciCoordinatesPath")) OpenMagnetics::settings.set_painter_cci_coordinates_path(settingsJson["painterCciCoordinatesPath"]);
|
|
326
|
+
if (settingsJson.contains("painterMirroringDimension")) OpenMagnetics::settings.set_painter_mirroring_dimension(settingsJson["painterMirroringDimension"]);
|
|
327
|
+
if (settingsJson.contains("painterMagneticFieldStrengthModel")) {
|
|
328
|
+
OpenMagnetics::MagneticFieldStrengthModels model;
|
|
329
|
+
from_json(settingsJson["painterMagneticFieldStrengthModel"], model);
|
|
330
|
+
OpenMagnetics::settings.set_painter_magnetic_field_strength_model(model);
|
|
331
|
+
}
|
|
332
|
+
|
|
333
|
+
// Magnetic field
|
|
334
|
+
if (settingsJson.contains("magneticFieldNumberPointsX")) OpenMagnetics::settings.set_magnetic_field_number_points_x(settingsJson["magneticFieldNumberPointsX"]);
|
|
335
|
+
if (settingsJson.contains("magneticFieldNumberPointsY")) OpenMagnetics::settings.set_magnetic_field_number_points_y(settingsJson["magneticFieldNumberPointsY"]);
|
|
336
|
+
if (settingsJson.contains("magneticFieldIncludeFringing")) OpenMagnetics::settings.set_magnetic_field_include_fringing(settingsJson["magneticFieldIncludeFringing"]);
|
|
337
|
+
if (settingsJson.contains("magneticFieldMirroringDimension")) OpenMagnetics::settings.set_magnetic_field_mirroring_dimension(settingsJson["magneticFieldMirroringDimension"]);
|
|
338
|
+
|
|
339
|
+
// Leakage inductance
|
|
340
|
+
if (settingsJson.contains("leakageInductanceGridAutoScaling")) OpenMagnetics::settings.set_leakage_inductance_grid_auto_scaling(settingsJson["leakageInductanceGridAutoScaling"]);
|
|
341
|
+
if (settingsJson.contains("leakageInductanceGridPrecisionLevelPlanar")) OpenMagnetics::settings.set_leakage_inductance_grid_precision_level_planar(settingsJson["leakageInductanceGridPrecisionLevelPlanar"]);
|
|
342
|
+
if (settingsJson.contains("leakageInductanceGridPrecisionLevelWound")) OpenMagnetics::settings.set_leakage_inductance_grid_precision_level_wound(settingsJson["leakageInductanceGridPrecisionLevelWound"]);
|
|
343
|
+
|
|
344
|
+
// Adviser
|
|
345
|
+
if (settingsJson.contains("coilAdviserMaximumNumberWires")) OpenMagnetics::settings.set_coil_adviser_maximum_number_wires(settingsJson["coilAdviserMaximumNumberWires"]);
|
|
346
|
+
if (settingsJson.contains("coreAdviserIncludeStacks")) OpenMagnetics::settings.set_core_adviser_include_stacks(settingsJson["coreAdviserIncludeStacks"]);
|
|
347
|
+
if (settingsJson.contains("coreAdviserIncludeDistributedGaps")) OpenMagnetics::settings.set_core_adviser_include_distributed_gaps(settingsJson["coreAdviserIncludeDistributedGaps"]);
|
|
348
|
+
if (settingsJson.contains("coreAdviserIncludeMargin")) OpenMagnetics::settings.set_core_adviser_include_margin(settingsJson["coreAdviserIncludeMargin"]);
|
|
349
|
+
if (settingsJson.contains("coreAdviserEnableIntermediatePruning")) OpenMagnetics::settings.set_core_adviser_enable_intermediate_pruning(settingsJson["coreAdviserEnableIntermediatePruning"]);
|
|
350
|
+
if (settingsJson.contains("coreAdviserMaximumMagneticsAfterFiltering")) OpenMagnetics::settings.set_core_adviser_maximum_magnetics_after_filtering(settingsJson["coreAdviserMaximumMagneticsAfterFiltering"]);
|
|
351
|
+
if (settingsJson.contains("gappingStrategy")) {
|
|
352
|
+
GappingOptimizationStrategy strategy;
|
|
353
|
+
from_json(settingsJson["gappingStrategy"], strategy);
|
|
354
|
+
OpenMagnetics::settings.set_gapping_strategy(strategy);
|
|
355
|
+
}
|
|
356
|
+
|
|
357
|
+
// Wire adviser
|
|
358
|
+
if (settingsJson.contains("wireAdviserIncludePlanar")) OpenMagnetics::settings.set_wire_adviser_include_planar(settingsJson["wireAdviserIncludePlanar"]);
|
|
359
|
+
if (settingsJson.contains("wireAdviserIncludeFoil")) OpenMagnetics::settings.set_wire_adviser_include_foil(settingsJson["wireAdviserIncludeFoil"]);
|
|
360
|
+
if (settingsJson.contains("wireAdviserIncludeRectangular")) OpenMagnetics::settings.set_wire_adviser_include_rectangular(settingsJson["wireAdviserIncludeRectangular"]);
|
|
361
|
+
if (settingsJson.contains("wireAdviserIncludeLitz")) OpenMagnetics::settings.set_wire_adviser_include_litz(settingsJson["wireAdviserIncludeLitz"]);
|
|
362
|
+
if (settingsJson.contains("wireAdviserIncludeRound")) OpenMagnetics::settings.set_wire_adviser_include_round(settingsJson["wireAdviserIncludeRound"]);
|
|
363
|
+
if (settingsJson.contains("wireAdviserAllowRectangularInToroidalCores")) OpenMagnetics::settings.set_wire_adviser_allow_rectangular_in_toroidal_cores(settingsJson["wireAdviserAllowRectangularInToroidalCores"]);
|
|
364
|
+
|
|
365
|
+
// Harmonics
|
|
366
|
+
if (settingsJson.contains("harmonicAmplitudeThresholdQuickMode")) OpenMagnetics::settings.set_harmonic_amplitude_threshold_quick_mode(settingsJson["harmonicAmplitudeThresholdQuickMode"]);
|
|
367
|
+
if (settingsJson.contains("harmonicAmplitudeThreshold")) OpenMagnetics::settings.set_harmonic_amplitude_threshold(settingsJson["harmonicAmplitudeThreshold"]);
|
|
368
|
+
|
|
369
|
+
// Models
|
|
370
|
+
if (settingsJson.contains("magneticFieldStrengthModel")) {
|
|
371
|
+
OpenMagnetics::MagneticFieldStrengthModels model;
|
|
372
|
+
from_json(settingsJson["magneticFieldStrengthModel"], model);
|
|
373
|
+
OpenMagnetics::settings.set_magnetic_field_strength_model(model);
|
|
374
|
+
}
|
|
375
|
+
if (settingsJson.contains("magneticFieldStrengthFringingEffectModel")) {
|
|
376
|
+
OpenMagnetics::MagneticFieldStrengthFringingEffectModels model;
|
|
377
|
+
from_json(settingsJson["magneticFieldStrengthFringingEffectModel"], model);
|
|
378
|
+
OpenMagnetics::settings.set_magnetic_field_strength_fringing_effect_model(model);
|
|
379
|
+
}
|
|
380
|
+
if (settingsJson.contains("leakageInductanceMagneticFieldStrengthModel")) {
|
|
381
|
+
OpenMagnetics::MagneticFieldStrengthModels model;
|
|
382
|
+
from_json(settingsJson["leakageInductanceMagneticFieldStrengthModel"], model);
|
|
383
|
+
OpenMagnetics::settings.set_leakage_inductance_magnetic_field_strength_model(model);
|
|
384
|
+
}
|
|
385
|
+
if (settingsJson.contains("reluctanceModel")) {
|
|
386
|
+
OpenMagnetics::ReluctanceModels model;
|
|
387
|
+
from_json(settingsJson["reluctanceModel"], model);
|
|
388
|
+
OpenMagnetics::settings.set_reluctance_model(model);
|
|
389
|
+
}
|
|
390
|
+
if (settingsJson.contains("coreTemperatureModel")) {
|
|
391
|
+
OpenMagnetics::CoreTemperatureModels model;
|
|
392
|
+
from_json(settingsJson["coreTemperatureModel"], model);
|
|
393
|
+
OpenMagnetics::settings.set_core_temperature_model(model);
|
|
394
|
+
}
|
|
395
|
+
if (settingsJson.contains("coreThermalResistanceModel")) {
|
|
396
|
+
OpenMagnetics::CoreThermalResistanceModels model;
|
|
397
|
+
from_json(settingsJson["coreThermalResistanceModel"], model);
|
|
398
|
+
OpenMagnetics::settings.set_core_thermal_resistance_model(model);
|
|
399
|
+
}
|
|
400
|
+
if (settingsJson.contains("windingSkinEffectLossesModel")) {
|
|
401
|
+
OpenMagnetics::WindingSkinEffectLossesModels model;
|
|
402
|
+
from_json(settingsJson["windingSkinEffectLossesModel"], model);
|
|
403
|
+
OpenMagnetics::settings.set_winding_skin_effect_losses_model(model);
|
|
404
|
+
}
|
|
405
|
+
if (settingsJson.contains("windingProximityEffectLossesModel")) {
|
|
406
|
+
OpenMagnetics::WindingProximityEffectLossesModels model;
|
|
407
|
+
from_json(settingsJson["windingProximityEffectLossesModel"], model);
|
|
408
|
+
OpenMagnetics::settings.set_winding_proximity_effect_losses_model(model);
|
|
409
|
+
}
|
|
410
|
+
if (settingsJson.contains("strayCapacitanceModel")) {
|
|
411
|
+
OpenMagnetics::StrayCapacitanceModels model;
|
|
412
|
+
from_json(settingsJson["strayCapacitanceModel"], model);
|
|
413
|
+
OpenMagnetics::settings.set_stray_capacitance_model(model);
|
|
414
|
+
}
|
|
415
|
+
if (settingsJson.contains("electricFieldOutputUnit")) {
|
|
416
|
+
OpenMagnetics::ElectricFieldOutputUnit unit;
|
|
417
|
+
from_json(settingsJson["electricFieldOutputUnit"], unit);
|
|
418
|
+
OpenMagnetics::settings.set_electric_field_output_unit(unit);
|
|
419
|
+
}
|
|
420
|
+
|
|
421
|
+
// Core losses model
|
|
422
|
+
if (settingsJson.contains("coreLossesPreferredModelName")) {
|
|
423
|
+
OpenMagnetics::CoreLossesModels model;
|
|
424
|
+
from_json(settingsJson["coreLossesPreferredModelName"], model);
|
|
425
|
+
OpenMagnetics::settings.set_core_losses_preferred_model_name(model);
|
|
426
|
+
}
|
|
427
|
+
|
|
428
|
+
// Circuit simulator
|
|
429
|
+
if (settingsJson.contains("circuitSimulatorCurveFittingMode")) OpenMagnetics::settings.set_circuit_simulator_curve_fitting_mode(settingsJson["circuitSimulatorCurveFittingMode"]);
|
|
430
|
+
if (settingsJson.contains("circuitSimulatorFracpoleOptions")) OpenMagnetics::settings.set_circuit_simulator_fracpole_options(settingsJson["circuitSimulatorFracpoleOptions"].get<std::map<std::string, double>>());
|
|
431
|
+
if (settingsJson.contains("circuitSimulatorIncludeSaturation")) OpenMagnetics::settings.set_circuit_simulator_include_saturation(settingsJson["circuitSimulatorIncludeSaturation"]);
|
|
432
|
+
if (settingsJson.contains("circuitSimulatorIncludeMutualResistance")) OpenMagnetics::settings.set_circuit_simulator_include_mutual_resistance(settingsJson["circuitSimulatorIncludeMutualResistance"]);
|
|
433
|
+
if (settingsJson.contains("circuitSimulatorCoreLossTopology")) OpenMagnetics::settings.set_circuit_simulator_core_loss_topology(settingsJson["circuitSimulatorCoreLossTopology"]);
|
|
434
|
+
|
|
435
|
+
// Preferred manufacturers
|
|
436
|
+
if (settingsJson.contains("preferredCoreMaterialFerriteManufacturer")) OpenMagnetics::settings.set_preferred_core_material_ferrite_manufacturer(settingsJson["preferredCoreMaterialFerriteManufacturer"]);
|
|
437
|
+
if (settingsJson.contains("preferredCoreMaterialPowderManufacturer")) OpenMagnetics::settings.set_preferred_core_material_powder_manufacturer(settingsJson["preferredCoreMaterialPowderManufacturer"]);
|
|
438
|
+
if (settingsJson.contains("coreCrossReferencerAllowDifferentCoreMaterialType")) OpenMagnetics::settings.set_core_cross_referencer_allow_different_core_material_type(settingsJson["coreCrossReferencerAllowDifferentCoreMaterialType"]);
|
|
439
|
+
}
|
|
440
|
+
catch (const std::exception &exc) {
|
|
441
|
+
throw std::runtime_error("Exception: " + std::string{exc.what()});
|
|
442
|
+
}
|
|
443
|
+
}
|
|
444
|
+
|
|
445
|
+
void reset_settings() {
|
|
446
|
+
OpenMagnetics::settings.reset();
|
|
447
|
+
}
|
|
448
|
+
|
|
449
|
+
json get_default_models() {
|
|
450
|
+
try {
|
|
451
|
+
json models;
|
|
452
|
+
models["coreLosses"] = magic_enum::enum_name(OpenMagnetics::defaults.coreLossesModelDefault);
|
|
453
|
+
models["coreTemperature"] = magic_enum::enum_name(OpenMagnetics::defaults.coreTemperatureModelDefault);
|
|
454
|
+
models["reluctance"] = magic_enum::enum_name(OpenMagnetics::defaults.reluctanceModelDefault);
|
|
455
|
+
models["magneticFieldStrength"] = magic_enum::enum_name(OpenMagnetics::defaults.magneticFieldStrengthModelDefault);
|
|
456
|
+
models["magneticFieldStrengthFringingEffect"] = magic_enum::enum_name(OpenMagnetics::defaults.magneticFieldStrengthFringingEffectModelDefault);
|
|
457
|
+
return models;
|
|
458
|
+
}
|
|
459
|
+
catch (const std::exception &exc) {
|
|
460
|
+
json exception;
|
|
461
|
+
exception["data"] = "Exception: " + std::string{exc.what()};
|
|
462
|
+
return exception;
|
|
463
|
+
}
|
|
464
|
+
}
|
|
465
|
+
|
|
466
|
+
void register_settings_bindings(py::module& m) {
|
|
467
|
+
m.def("get_constants", &get_constants,
|
|
468
|
+
R"pbdoc(
|
|
469
|
+
Get physical and system constants used in calculations.
|
|
470
|
+
|
|
471
|
+
Returns a dictionary of constants including vacuum permeability,
|
|
472
|
+
vacuum permittivity, gap parameters, and display settings.
|
|
473
|
+
|
|
474
|
+
Returns:
|
|
475
|
+
Dictionary with constant names as keys and values.
|
|
476
|
+
)pbdoc");
|
|
477
|
+
|
|
478
|
+
m.def("get_defaults", &get_defaults,
|
|
479
|
+
R"pbdoc(
|
|
480
|
+
Get default values for various parameters and models.
|
|
481
|
+
|
|
482
|
+
Returns defaults for core losses models, temperature models,
|
|
483
|
+
reluctance models, and design thresholds.
|
|
484
|
+
|
|
485
|
+
Returns:
|
|
486
|
+
Dictionary with default parameter names and values.
|
|
487
|
+
)pbdoc");
|
|
488
|
+
|
|
489
|
+
m.def("get_settings", &get_settings,
|
|
490
|
+
R"pbdoc(
|
|
491
|
+
Get current library settings.
|
|
492
|
+
|
|
493
|
+
Returns all configurable settings including coil winding options,
|
|
494
|
+
painter/visualization settings, and magnetic field calculation options.
|
|
495
|
+
|
|
496
|
+
Returns:
|
|
497
|
+
JSON object with all current settings.
|
|
498
|
+
)pbdoc");
|
|
499
|
+
|
|
500
|
+
m.def("set_settings", &set_settings,
|
|
501
|
+
R"pbdoc(
|
|
502
|
+
Update library settings.
|
|
503
|
+
|
|
504
|
+
Configures coil winding options, visualization settings, and
|
|
505
|
+
calculation parameters.
|
|
506
|
+
|
|
507
|
+
Args:
|
|
508
|
+
settings_json: JSON object with settings to update.
|
|
509
|
+
Only included keys will be modified.
|
|
510
|
+
|
|
511
|
+
Common settings:
|
|
512
|
+
- coilAllowMarginTape: Allow margin tape in windings
|
|
513
|
+
- coilAllowInsulatedWire: Allow insulated wire
|
|
514
|
+
- useOnlyCoresInStock: Limit to in-stock cores
|
|
515
|
+
- painterNumberPointsX/Y: Field plot resolution
|
|
516
|
+
)pbdoc");
|
|
517
|
+
|
|
518
|
+
m.def("reset_settings", &reset_settings,
|
|
519
|
+
R"pbdoc(
|
|
520
|
+
Reset all settings to default values.
|
|
521
|
+
|
|
522
|
+
Restores all library settings to their initial defaults.
|
|
523
|
+
Useful for ensuring consistent behavior between tests.
|
|
524
|
+
)pbdoc");
|
|
525
|
+
|
|
526
|
+
m.def("get_default_models", &get_default_models,
|
|
527
|
+
R"pbdoc(
|
|
528
|
+
Get names of default calculation models.
|
|
529
|
+
|
|
530
|
+
Returns the default model selections for core losses,
|
|
531
|
+
temperature, reluctance, and magnetic field calculations.
|
|
532
|
+
|
|
533
|
+
Returns:
|
|
534
|
+
JSON object mapping model types to default model names.
|
|
535
|
+
)pbdoc");
|
|
536
|
+
}
|
|
537
|
+
|
|
538
|
+
} // namespace PyMKF
|
|
@@ -1,251 +0,0 @@
|
|
|
1
|
-
#include "settings.h"
|
|
2
|
-
|
|
3
|
-
namespace PyMKF {
|
|
4
|
-
|
|
5
|
-
py::dict get_constants() {
|
|
6
|
-
py::dict constantsMap;
|
|
7
|
-
constantsMap["residualGap"] = OpenMagnetics::constants.residualGap;
|
|
8
|
-
constantsMap["minimumNonResidualGap"] = OpenMagnetics::constants.minimumNonResidualGap;
|
|
9
|
-
constantsMap["vacuumPermeability"] = OpenMagnetics::constants.vacuumPermeability;
|
|
10
|
-
constantsMap["vacuumPermittivity"] = OpenMagnetics::constants.vacuumPermittivity;
|
|
11
|
-
constantsMap["spacerProtudingPercentage"] = OpenMagnetics::constants.spacerProtudingPercentage;
|
|
12
|
-
constantsMap["coilPainterScale"] = OpenMagnetics::constants.coilPainterScale;
|
|
13
|
-
constantsMap["minimumDistributedFringingFactor"] = OpenMagnetics::constants.minimumDistributedFringingFactor;
|
|
14
|
-
constantsMap["maximumDistributedFringingFactor"] = OpenMagnetics::constants.maximumDistributedFringingFactor;
|
|
15
|
-
constantsMap["initialGapLengthForSearching"] = OpenMagnetics::constants.initialGapLengthForSearching;
|
|
16
|
-
constantsMap["roshenMagneticFieldStrengthStep"] = OpenMagnetics::constants.roshenMagneticFieldStrengthStep;
|
|
17
|
-
constantsMap["foilToSectionMargin"] = OpenMagnetics::constants.foilToSectionMargin;
|
|
18
|
-
constantsMap["planarToSectionMargin"] = OpenMagnetics::constants.planarToSectionMargin;
|
|
19
|
-
return constantsMap;
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
py::dict get_defaults() {
|
|
23
|
-
py::dict defaultsMap;
|
|
24
|
-
json aux;
|
|
25
|
-
to_json(aux, OpenMagnetics::defaults.coreLossesModelDefault);
|
|
26
|
-
defaultsMap["coreLossesModelDefault"] = aux;
|
|
27
|
-
to_json(aux, OpenMagnetics::defaults.coreTemperatureModelDefault);
|
|
28
|
-
defaultsMap["coreTemperatureModelDefault"] = aux;
|
|
29
|
-
to_json(aux, OpenMagnetics::defaults.reluctanceModelDefault);
|
|
30
|
-
defaultsMap["reluctanceModelDefault"] = aux;
|
|
31
|
-
to_json(aux, OpenMagnetics::defaults.magneticFieldStrengthModelDefault);
|
|
32
|
-
defaultsMap["magneticFieldStrengthModelDefault"] = aux;
|
|
33
|
-
to_json(aux, OpenMagnetics::defaults.magneticFieldStrengthFringingEffectModelDefault);
|
|
34
|
-
defaultsMap["magneticFieldStrengthFringingEffectModelDefault"] = aux;
|
|
35
|
-
defaultsMap["maximumProportionMagneticFluxDensitySaturation"] = OpenMagnetics::defaults.maximumProportionMagneticFluxDensitySaturation;
|
|
36
|
-
defaultsMap["coreAdviserFrequencyReference"] = OpenMagnetics::defaults.coreAdviserFrequencyReference;
|
|
37
|
-
defaultsMap["coreAdviserMagneticFluxDensityReference"] = OpenMagnetics::defaults.coreAdviserMagneticFluxDensityReference;
|
|
38
|
-
defaultsMap["coreAdviserThresholdValidity"] = OpenMagnetics::defaults.coreAdviserThresholdValidity;
|
|
39
|
-
defaultsMap["coreAdviserMaximumCoreTemperature"] = OpenMagnetics::defaults.coreAdviserMaximumCoreTemperature;
|
|
40
|
-
defaultsMap["coreAdviserMaximumPercentagePowerCoreLosses"] = OpenMagnetics::defaults.coreAdviserMaximumPercentagePowerCoreLosses;
|
|
41
|
-
defaultsMap["coreAdviserMaximumMagneticsAfterFiltering"] = OpenMagnetics::defaults.coreAdviserMaximumMagneticsAfterFiltering;
|
|
42
|
-
defaultsMap["coreAdviserMaximumNumberStacks"] = OpenMagnetics::defaults.coreAdviserMaximumNumberStacks;
|
|
43
|
-
defaultsMap["maximumCurrentDensity"] = OpenMagnetics::defaults.maximumCurrentDensity;
|
|
44
|
-
defaultsMap["maximumEffectiveCurrentDensity"] = OpenMagnetics::defaults.maximumEffectiveCurrentDensity;
|
|
45
|
-
defaultsMap["maximumNumberParallels"] = OpenMagnetics::defaults.maximumNumberParallels;
|
|
46
|
-
defaultsMap["magneticFluxDensitySaturation"] = OpenMagnetics::defaults.magneticFluxDensitySaturation;
|
|
47
|
-
defaultsMap["magnetizingInductanceThresholdValidity"] = OpenMagnetics::defaults.magnetizingInductanceThresholdValidity;
|
|
48
|
-
defaultsMap["harmonicAmplitudeThreshold"] = OpenMagnetics::defaults.harmonicAmplitudeThreshold;
|
|
49
|
-
defaultsMap["ambientTemperature"] = OpenMagnetics::defaults.ambientTemperature;
|
|
50
|
-
defaultsMap["measurementFrequency"] = OpenMagnetics::defaults.measurementFrequency;
|
|
51
|
-
defaultsMap["magneticFieldMirroringDimension"] = OpenMagnetics::defaults.magneticFieldMirroringDimension;
|
|
52
|
-
defaultsMap["maximumCoilPattern"] = OpenMagnetics::defaults.maximumCoilPattern;
|
|
53
|
-
to_json(aux, OpenMagnetics::defaults.defaultRoundWindowSectionsOrientation);
|
|
54
|
-
defaultsMap["defaultRoundWindowSectionsOrientation"] = aux;
|
|
55
|
-
to_json(aux, OpenMagnetics::defaults.defaultRectangularWindowSectionsOrientation);
|
|
56
|
-
defaultsMap["defaultRectangularWindowSectionsOrientation"] = aux;
|
|
57
|
-
defaultsMap["defaultEnamelledInsulationMaterial"] = OpenMagnetics::defaults.defaultEnamelledInsulationMaterial;
|
|
58
|
-
defaultsMap["defaultInsulationMaterial"] = OpenMagnetics::defaults.defaultInsulationMaterial;
|
|
59
|
-
defaultsMap["defaultLayerInsulationMaterial"] = OpenMagnetics::defaults.defaultLayerInsulationMaterial;
|
|
60
|
-
defaultsMap["overlappingFactorSurroundingTurns"] = OpenMagnetics::defaults.overlappingFactorSurroundingTurns;
|
|
61
|
-
to_json(aux, OpenMagnetics::defaults.commonWireStandard);
|
|
62
|
-
defaultsMap["commonWireStandard"] = aux;
|
|
63
|
-
return defaultsMap;
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
json get_settings() {
|
|
67
|
-
try {
|
|
68
|
-
json settingsJson;
|
|
69
|
-
settingsJson["coilAllowMarginTape"] = OpenMagnetics::settings.get_coil_allow_margin_tape();
|
|
70
|
-
settingsJson["coilAllowInsulatedWire"] = OpenMagnetics::settings.get_coil_allow_insulated_wire();
|
|
71
|
-
settingsJson["coilFillSectionsWithMarginTape"] = OpenMagnetics::settings.get_coil_fill_sections_with_margin_tape();
|
|
72
|
-
settingsJson["coilWindEvenIfNotFit"] = OpenMagnetics::settings.get_coil_wind_even_if_not_fit();
|
|
73
|
-
settingsJson["coilDelimitAndCompact"] = OpenMagnetics::settings.get_coil_delimit_and_compact();
|
|
74
|
-
settingsJson["coilTryRewind"] = OpenMagnetics::settings.get_coil_try_rewind();
|
|
75
|
-
settingsJson["coilOnlyOneTurnPerLayerInContiguousRectangular"] = OpenMagnetics::settings.get_coil_only_one_turn_per_layer_in_contiguous_rectangular();
|
|
76
|
-
settingsJson["useOnlyCoresInStock"] = OpenMagnetics::settings.get_use_only_cores_in_stock();
|
|
77
|
-
settingsJson["coilMaximumLayersPlanar"] = OpenMagnetics::settings.get_coil_maximum_layers_planar();
|
|
78
|
-
|
|
79
|
-
settingsJson["painterNumberPointsX"] = OpenMagnetics::settings.get_painter_number_points_x();
|
|
80
|
-
settingsJson["painterNumberPointsY"] = OpenMagnetics::settings.get_painter_number_points_y();
|
|
81
|
-
settingsJson["painterMode"] = OpenMagnetics::settings.get_painter_mode();
|
|
82
|
-
settingsJson["painterLogarithmicScale"] = OpenMagnetics::settings.get_painter_logarithmic_scale();
|
|
83
|
-
settingsJson["painterIncludeFringing"] = OpenMagnetics::settings.get_painter_include_fringing();
|
|
84
|
-
if (OpenMagnetics::settings.get_painter_maximum_value_colorbar()) {
|
|
85
|
-
settingsJson["painterMaximumValueColorbar"] = OpenMagnetics::settings.get_painter_maximum_value_colorbar();
|
|
86
|
-
}
|
|
87
|
-
if (OpenMagnetics::settings.get_painter_minimum_value_colorbar()) {
|
|
88
|
-
settingsJson["painterMinimumValueColorbar"] = OpenMagnetics::settings.get_painter_minimum_value_colorbar();
|
|
89
|
-
}
|
|
90
|
-
settingsJson["painterColorLines"] = OpenMagnetics::settings.get_painter_color_lines();
|
|
91
|
-
settingsJson["painterColorText"] = OpenMagnetics::settings.get_painter_color_text();
|
|
92
|
-
settingsJson["painterColorFerrite"] = OpenMagnetics::settings.get_painter_color_ferrite();
|
|
93
|
-
settingsJson["painterColorBobbin"] = OpenMagnetics::settings.get_painter_color_bobbin();
|
|
94
|
-
settingsJson["painterColorCopper"] = OpenMagnetics::settings.get_painter_color_copper();
|
|
95
|
-
settingsJson["painterColorInsulation"] = OpenMagnetics::settings.get_painter_color_insulation();
|
|
96
|
-
settingsJson["painterColorMargin"] = OpenMagnetics::settings.get_painter_color_margin();
|
|
97
|
-
settingsJson["painterMirroringDimension"] = OpenMagnetics::settings.get_painter_mirroring_dimension();
|
|
98
|
-
settingsJson["magneticFieldNumberPointsX"] = OpenMagnetics::settings.get_magnetic_field_number_points_x();
|
|
99
|
-
settingsJson["magneticFieldNumberPointsY"] = OpenMagnetics::settings.get_magnetic_field_number_points_y();
|
|
100
|
-
settingsJson["magneticFieldIncludeFringing"] = OpenMagnetics::settings.get_magnetic_field_include_fringing();
|
|
101
|
-
settingsJson["magneticFieldMirroringDimension"] = OpenMagnetics::settings.get_magnetic_field_mirroring_dimension();
|
|
102
|
-
settingsJson["painterSimpleLitz"] = OpenMagnetics::settings.get_painter_simple_litz();
|
|
103
|
-
settingsJson["painterAdvancedLitz"] = OpenMagnetics::settings.get_painter_advanced_litz();
|
|
104
|
-
settingsJson["painterCciCoordinatesPath"] = OpenMagnetics::settings.get_painter_cci_coordinates_path();
|
|
105
|
-
return settingsJson;
|
|
106
|
-
}
|
|
107
|
-
catch (const std::exception &exc) {
|
|
108
|
-
json exception;
|
|
109
|
-
exception["data"] = "Exception: " + std::string{exc.what()};
|
|
110
|
-
return exception;
|
|
111
|
-
}
|
|
112
|
-
}
|
|
113
|
-
|
|
114
|
-
void set_settings(json settingsJson) {
|
|
115
|
-
try {
|
|
116
|
-
OpenMagnetics::settings.set_coil_allow_margin_tape(settingsJson["coilAllowMarginTape"]);
|
|
117
|
-
OpenMagnetics::settings.set_coil_allow_insulated_wire(settingsJson["coilAllowInsulatedWire"]);
|
|
118
|
-
OpenMagnetics::settings.set_coil_fill_sections_with_margin_tape(settingsJson["coilFillSectionsWithMarginTape"]);
|
|
119
|
-
OpenMagnetics::settings.set_coil_wind_even_if_not_fit(settingsJson["coilWindEvenIfNotFit"]);
|
|
120
|
-
OpenMagnetics::settings.set_coil_delimit_and_compact(settingsJson["coilDelimitAndCompact"]);
|
|
121
|
-
OpenMagnetics::settings.set_coil_try_rewind(settingsJson["coilTryRewind"]);
|
|
122
|
-
OpenMagnetics::settings.set_coil_only_one_turn_per_layer_in_contiguous_rectangular(settingsJson["coilOnlyOneTurnPerLayerInContiguousRectangular"]);
|
|
123
|
-
OpenMagnetics::settings.set_coil_maximum_layers_planar(settingsJson["coilMaximumLayersPlanar"]);
|
|
124
|
-
|
|
125
|
-
OpenMagnetics::settings.set_painter_mode(settingsJson["painterMode"]);
|
|
126
|
-
OpenMagnetics::settings.set_use_only_cores_in_stock(settingsJson["useOnlyCoresInStock"]);
|
|
127
|
-
OpenMagnetics::settings.set_painter_number_points_x(settingsJson["painterNumberPointsX"]);
|
|
128
|
-
OpenMagnetics::settings.set_painter_number_points_y(settingsJson["painterNumberPointsY"]);
|
|
129
|
-
OpenMagnetics::settings.set_painter_logarithmic_scale(settingsJson["painterLogarithmicScale"]);
|
|
130
|
-
OpenMagnetics::settings.set_painter_include_fringing(settingsJson["painterIncludeFringing"]);
|
|
131
|
-
if (settingsJson.contains("painterMaximumValueColorbar")) {
|
|
132
|
-
OpenMagnetics::settings.set_painter_maximum_value_colorbar(settingsJson["painterMaximumValueColorbar"]);
|
|
133
|
-
}
|
|
134
|
-
if (settingsJson.contains("painterMinimumValueColorbar")) {
|
|
135
|
-
OpenMagnetics::settings.set_painter_minimum_value_colorbar(settingsJson["painterMinimumValueColorbar"]);
|
|
136
|
-
}
|
|
137
|
-
OpenMagnetics::settings.set_painter_color_lines(settingsJson["painterColorLines"]);
|
|
138
|
-
OpenMagnetics::settings.set_painter_color_text(settingsJson["painterColorText"]);
|
|
139
|
-
OpenMagnetics::settings.set_painter_color_ferrite(settingsJson["painterColorFerrite"]);
|
|
140
|
-
OpenMagnetics::settings.set_painter_color_bobbin(settingsJson["painterColorBobbin"]);
|
|
141
|
-
OpenMagnetics::settings.set_painter_color_copper(settingsJson["painterColorCopper"]);
|
|
142
|
-
OpenMagnetics::settings.set_painter_color_insulation(settingsJson["painterColorInsulation"]);
|
|
143
|
-
OpenMagnetics::settings.set_painter_color_margin(settingsJson["painterColorMargin"]);
|
|
144
|
-
OpenMagnetics::settings.set_painter_mirroring_dimension(settingsJson["painterMirroringDimension"]);
|
|
145
|
-
OpenMagnetics::settings.set_magnetic_field_number_points_x(settingsJson["magneticFieldNumberPointsX"]);
|
|
146
|
-
OpenMagnetics::settings.set_magnetic_field_number_points_y(settingsJson["magneticFieldNumberPointsY"]);
|
|
147
|
-
OpenMagnetics::settings.set_magnetic_field_include_fringing(settingsJson["magneticFieldIncludeFringing"]);
|
|
148
|
-
OpenMagnetics::settings.set_magnetic_field_mirroring_dimension(settingsJson["magneticFieldMirroringDimension"]);
|
|
149
|
-
OpenMagnetics::settings.set_painter_simple_litz(settingsJson["painterSimpleLitz"]);
|
|
150
|
-
OpenMagnetics::settings.set_painter_advanced_litz(settingsJson["painterAdvancedLitz"]);
|
|
151
|
-
OpenMagnetics::settings.set_painter_cci_coordinates_path(settingsJson["painterCciCoordinatesPath"]);
|
|
152
|
-
}
|
|
153
|
-
catch (const std::exception &exc) {
|
|
154
|
-
throw std::runtime_error("Exception: " + std::string{exc.what()});
|
|
155
|
-
}
|
|
156
|
-
}
|
|
157
|
-
|
|
158
|
-
void reset_settings() {
|
|
159
|
-
OpenMagnetics::settings.reset();
|
|
160
|
-
}
|
|
161
|
-
|
|
162
|
-
json get_default_models() {
|
|
163
|
-
try {
|
|
164
|
-
json models;
|
|
165
|
-
models["coreLosses"] = magic_enum::enum_name(OpenMagnetics::defaults.coreLossesModelDefault);
|
|
166
|
-
models["coreTemperature"] = magic_enum::enum_name(OpenMagnetics::defaults.coreTemperatureModelDefault);
|
|
167
|
-
models["reluctance"] = magic_enum::enum_name(OpenMagnetics::defaults.reluctanceModelDefault);
|
|
168
|
-
models["magneticFieldStrength"] = magic_enum::enum_name(OpenMagnetics::defaults.magneticFieldStrengthModelDefault);
|
|
169
|
-
models["magneticFieldStrengthFringingEffect"] = magic_enum::enum_name(OpenMagnetics::defaults.magneticFieldStrengthFringingEffectModelDefault);
|
|
170
|
-
return models;
|
|
171
|
-
}
|
|
172
|
-
catch (const std::exception &exc) {
|
|
173
|
-
json exception;
|
|
174
|
-
exception["data"] = "Exception: " + std::string{exc.what()};
|
|
175
|
-
return exception;
|
|
176
|
-
}
|
|
177
|
-
}
|
|
178
|
-
|
|
179
|
-
void register_settings_bindings(py::module& m) {
|
|
180
|
-
m.def("get_constants", &get_constants,
|
|
181
|
-
R"pbdoc(
|
|
182
|
-
Get physical and system constants used in calculations.
|
|
183
|
-
|
|
184
|
-
Returns a dictionary of constants including vacuum permeability,
|
|
185
|
-
vacuum permittivity, gap parameters, and display settings.
|
|
186
|
-
|
|
187
|
-
Returns:
|
|
188
|
-
Dictionary with constant names as keys and values.
|
|
189
|
-
)pbdoc");
|
|
190
|
-
|
|
191
|
-
m.def("get_defaults", &get_defaults,
|
|
192
|
-
R"pbdoc(
|
|
193
|
-
Get default values for various parameters and models.
|
|
194
|
-
|
|
195
|
-
Returns defaults for core losses models, temperature models,
|
|
196
|
-
reluctance models, and design thresholds.
|
|
197
|
-
|
|
198
|
-
Returns:
|
|
199
|
-
Dictionary with default parameter names and values.
|
|
200
|
-
)pbdoc");
|
|
201
|
-
|
|
202
|
-
m.def("get_settings", &get_settings,
|
|
203
|
-
R"pbdoc(
|
|
204
|
-
Get current library settings.
|
|
205
|
-
|
|
206
|
-
Returns all configurable settings including coil winding options,
|
|
207
|
-
painter/visualization settings, and magnetic field calculation options.
|
|
208
|
-
|
|
209
|
-
Returns:
|
|
210
|
-
JSON object with all current settings.
|
|
211
|
-
)pbdoc");
|
|
212
|
-
|
|
213
|
-
m.def("set_settings", &set_settings,
|
|
214
|
-
R"pbdoc(
|
|
215
|
-
Update library settings.
|
|
216
|
-
|
|
217
|
-
Configures coil winding options, visualization settings, and
|
|
218
|
-
calculation parameters.
|
|
219
|
-
|
|
220
|
-
Args:
|
|
221
|
-
settings_json: JSON object with settings to update.
|
|
222
|
-
Only included keys will be modified.
|
|
223
|
-
|
|
224
|
-
Common settings:
|
|
225
|
-
- coilAllowMarginTape: Allow margin tape in windings
|
|
226
|
-
- coilAllowInsulatedWire: Allow insulated wire
|
|
227
|
-
- useOnlyCoresInStock: Limit to in-stock cores
|
|
228
|
-
- painterNumberPointsX/Y: Field plot resolution
|
|
229
|
-
)pbdoc");
|
|
230
|
-
|
|
231
|
-
m.def("reset_settings", &reset_settings,
|
|
232
|
-
R"pbdoc(
|
|
233
|
-
Reset all settings to default values.
|
|
234
|
-
|
|
235
|
-
Restores all library settings to their initial defaults.
|
|
236
|
-
Useful for ensuring consistent behavior between tests.
|
|
237
|
-
)pbdoc");
|
|
238
|
-
|
|
239
|
-
m.def("get_default_models", &get_default_models,
|
|
240
|
-
R"pbdoc(
|
|
241
|
-
Get names of default calculation models.
|
|
242
|
-
|
|
243
|
-
Returns the default model selections for core losses,
|
|
244
|
-
temperature, reluctance, and magnetic field calculations.
|
|
245
|
-
|
|
246
|
-
Returns:
|
|
247
|
-
JSON object mapping model types to default model names.
|
|
248
|
-
)pbdoc");
|
|
249
|
-
}
|
|
250
|
-
|
|
251
|
-
} // namespace PyMKF
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|