radia 1.0.10__tar.gz → 1.1.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.
- radia-1.1.1/LICENSE +93 -0
- {radia-1.0.10/src/radia.egg-info → radia-1.1.1}/PKG-INFO +31 -10
- {radia-1.0.10 → radia-1.1.1}/README.md +27 -8
- {radia-1.0.10 → radia-1.1.1}/docs/API_REFERENCE.md +138 -20
- radia-1.1.1/docs/EXAMPLES_REVIEW.md +423 -0
- radia-1.1.1/docs/HMATRIX_BENCHMARKS_RESULTS.md +219 -0
- radia-1.1.1/docs/HMATRIX_ENHANCEMENT_PROPOSAL_2025.md +600 -0
- radia-1.1.1/docs/HMATRIX_IMPLEMENTATION_HISTORY.md +377 -0
- radia-1.1.1/docs/HMATRIX_MATVEC_OPTIMIZATION.md +214 -0
- radia-1.1.1/docs/HMATRIX_PERFORMANCE_IMPROVEMENT.md +261 -0
- radia-1.1.1/docs/HMATRIX_SERIALIZATION.md +358 -0
- radia-1.1.1/docs/HMATRIX_USER_GUIDE.md +559 -0
- radia-1.1.1/docs/MATERIAL_API_IMPLEMENTATION.md +290 -0
- radia-1.1.1/docs/ML_PARAMETER_TUNING.md +328 -0
- radia-1.1.1/docs/PHASE3_PERFORMANCE_ISSUE.md +225 -0
- radia-1.1.1/docs/PYPI_RELEASE_v1.0.10.md +177 -0
- radia-1.1.1/docs/RELEASE_NOTES_v1.0.10.md +260 -0
- {radia-1.0.10 → radia-1.1.1}/examples/H-matrix/benchmark_solver.py +3 -1
- {radia-1.0.10 → radia-1.1.1}/examples/NGSolve_Integration/demo_field_types.py +193 -193
- {radia-1.0.10 → radia-1.1.1}/examples/NGSolve_Integration/export_radia_geometry.py +77 -77
- {radia-1.0.10 → radia-1.1.1}/examples/NGSolve_Integration/visualize_field.py +263 -263
- radia-1.1.1/examples/README.md +504 -0
- {radia-1.0.10/examples/NGSolve_Integration/rad.ObjBckgCF → radia-1.1.1/examples/background_fields}/Cubit2Nastran.py +59 -59
- {radia-1.0.10/examples/NGSolve_Integration/rad.ObjBckgCF → radia-1.1.1/examples/background_fields}/README.md +434 -312
- radia-1.1.1/examples/background_fields/permeability_comparison.py +278 -0
- radia-1.1.1/examples/background_fields/quadrupole_analytical.py +218 -0
- radia-1.1.1/examples/background_fields/sphere_in_quadrupole.py +244 -0
- {radia-1.0.10/examples/NGSolve_Integration/rad.ObjBckgCF → radia-1.1.1/examples/background_fields}/sphere_nastran_analysis.py +529 -529
- {radia-1.0.10 → radia-1.1.1}/examples/complex_coil_geometry/README.md +2 -1
- {radia-1.0.10 → radia-1.1.1}/examples/complex_coil_geometry/coil_model.py +17 -0
- {radia-1.0.10 → radia-1.1.1}/examples/complex_coil_geometry/field_map.py +17 -0
- {radia-1.0.10 → radia-1.1.1}/examples/electromagnet/racetrack_coil_model.py +17 -0
- {radia-1.0.10 → radia-1.1.1}/examples/electromagnet/yoke_model.py +19 -2
- {radia-1.0.10 → radia-1.1.1}/examples/simple_problems/CONVERSION_NOTES.md +186 -186
- {radia-1.0.10 → radia-1.1.1}/examples/simple_problems/README.md +130 -126
- radia-1.0.10/examples/simple_problems/case1.py → radia-1.1.1/examples/simple_problems/arc_current_dual_magnets.py +19 -0
- radia-1.0.10/examples/simple_problems/case0.py → radia-1.1.1/examples/simple_problems/arc_current_with_magnet.py +19 -0
- radia-1.0.10/examples/simple_problems/case2.py → radia-1.1.1/examples/simple_problems/chamfered_pole_piece.py +19 -0
- radia-1.0.10/tests/test_magpylib_comparison.py → radia-1.1.1/examples/simple_problems/compare_magpylib.py +42 -34
- radia-1.0.10/examples/simple_problems/case3.py → radia-1.1.1/examples/simple_problems/cubic_polyhedron_magnet.py +19 -0
- radia-1.0.10/examples/simple_problems/test_update_hmatrix_magnetization.py → radia-1.1.1/examples/simple_problems/hmatrix_update_magnetization.py +26 -4
- {radia-1.0.10 → radia-1.1.1}/examples/smco_magnet_array/smco_array.py +1 -1
- radia-1.1.1/examples/solver_benchmarks/BENCHMARK_RESULTS.md +213 -0
- {radia-1.0.10/examples/H-matrix → radia-1.1.1/examples/solver_benchmarks}/HMATRIX_FIELD_DESIGN.md +1 -0
- radia-1.1.1/examples/solver_benchmarks/PHASE2B_REEVALUATION.md +179 -0
- radia-1.1.1/examples/solver_benchmarks/README.md +313 -0
- radia-1.1.1/examples/solver_benchmarks/SCALING_RESULTS.md +233 -0
- {radia-1.0.10/examples/H-matrix → radia-1.1.1/examples/solver_benchmarks}/benchmark_field_evaluation.py +31 -12
- radia-1.1.1/examples/solver_benchmarks/benchmark_hmatrix_scaling_exact.py +312 -0
- radia-1.1.1/examples/solver_benchmarks/benchmark_large_scale_comparison.py +532 -0
- {radia-1.0.10/examples/solver_time_evaluation → radia-1.1.1/examples/solver_benchmarks}/benchmark_linear_material.py +2 -2
- {radia-1.0.10/examples/H-matrix → radia-1.1.1/examples/solver_benchmarks}/benchmark_parallel_construction.py +3 -1
- radia-1.1.1/examples/solver_benchmarks/benchmark_solver.py +248 -0
- radia-1.1.1/examples/solver_benchmarks/benchmark_solver_comparison.py +425 -0
- radia-1.1.1/examples/solver_benchmarks/benchmark_solver_scaling_extended.py +277 -0
- radia-1.1.1/examples/solver_benchmarks/run_all_hmatrix_benchmarks.py +114 -0
- {radia-1.0.10/examples/H-matrix → radia-1.1.1/examples/solver_benchmarks}/verify_field_accuracy.py +34 -10
- {radia-1.0.10 → radia-1.1.1}/pyproject.toml +122 -120
- {radia-1.0.10 → radia-1.1.1}/setup.py +118 -117
- radia-1.1.1/src/python/__init__.py +2 -0
- radia-1.1.1/src/python/rad_ngsolve.pyd +0 -0
- {radia-1.0.10 → radia-1.1.1/src/radia.egg-info}/PKG-INFO +31 -10
- {radia-1.0.10 → radia-1.1.1}/src/radia.egg-info/SOURCES.txt +62 -30
- {radia-1.0.10 → radia-1.1.1}/tests/benchmark_hmatrix.py +2 -1
- radia-1.1.1/tests/hmatrix/test_phase2a_final.py +136 -0
- radia-1.1.1/tests/hmatrix/test_phase2a_hmatrix_reuse.py +181 -0
- radia-1.1.1/tests/hmatrix/test_phase2a_with_field.py +125 -0
- radia-1.1.1/tests/hmatrix/test_phase2b_geometry_detection.py +182 -0
- radia-1.1.1/tests/hmatrix/test_phase3_magnetization_update.py +207 -0
- radia-1.1.1/tests/hmatrix/test_phase3b_large_problem.py +243 -0
- radia-1.1.1/tests/hmatrix/test_phase3b_serialization.py +223 -0
- radia-1.1.1/tests/hmatrix/test_phase3b_solver_cache.py +235 -0
- radia-1.1.1/tests/hmatrix/test_serialize_step1_build.py +43 -0
- radia-1.1.1/tests/hmatrix/test_serialize_step2_load.py +44 -0
- radia-1.1.1/tests/hmatrix/test_verify_field_simple.py +93 -0
- {radia-1.0.10 → radia-1.1.1}/tests/test_group_operations.py +7 -6
- {radia-1.0.10 → radia-1.1.1}/tests/test_materials.py +14 -13
- radia-1.1.1/tests/test_new_material_api.py +96 -0
- radia-1.1.1/tests/test_objbckg_simple.py +56 -0
- radia-1.1.1/tests/test_objbckgcf_alone.py +71 -0
- {radia-1.0.10 → radia-1.1.1}/tests/test_rad_ngsolve.py +8 -6
- {radia-1.0.10 → radia-1.1.1}/tests/test_radhmat.py +2 -1
- {radia-1.0.10 → radia-1.1.1}/tests/test_serialization.py +3 -2
- {radia-1.0.10 → radia-1.1.1}/tests/test_transformations.py +2 -1
- {radia-1.0.10 → radia-1.1.1}/tests/test_type_cast.py +3 -2
- radia-1.0.10/LICENSE +0 -564
- radia-1.0.10/docs/CLAUDE.md +0 -52
- radia-1.0.10/examples/H-matrix/BENCHMARK_RESULTS.md +0 -330
- radia-1.0.10/examples/H-matrix/README.md +0 -118
- radia-1.0.10/examples/solver_benchmarks/README.md +0 -36
- radia-1.0.10/examples/solver_time_evaluation/README.md +0 -208
- radia-1.0.10/examples/solver_time_evaluation/benchmark_lu_vs_gs.py +0 -291
- radia-1.0.10/examples/test_hmatrix_accuracy.py +0 -148
- radia-1.0.10/examples/test_hmatrix_cube_nonlinear.py +0 -209
- radia-1.0.10/examples/test_hmatrix_parallel.py +0 -144
- radia-1.0.10/src/python/__init__.py +0 -2
- radia-1.0.10/src/python/rad_ngsolve.pyd +0 -0
- {radia-1.0.10 → radia-1.1.1}/COPYRIGHT.txt +0 -0
- {radia-1.0.10 → radia-1.1.1}/MANIFEST.in +0 -0
- {radia-1.0.10 → radia-1.1.1}/README_BUILD.md +0 -0
- {radia-1.0.10 → radia-1.1.1}/docs/API_EXTENSIONS.md +0 -0
- {radia-1.0.10 → radia-1.1.1}/docs/CF_BACKGROUND_FIELD_IMPLEMENTATION.md +0 -0
- {radia-1.0.10 → radia-1.1.1}/docs/DIRECTORY_STRUCTURE.md +0 -0
- {radia-1.0.10 → radia-1.1.1}/docs/NGSOLVE_CF_BACKGROUND_FIELD_DESIGN.md +0 -0
- {radia-1.0.10 → radia-1.1.1}/docs/NGSOLVE_DLL_ISSUE.md +0 -0
- {radia-1.0.10 → radia-1.1.1}/docs/NGSOLVE_INTEGRATION.md +0 -0
- {radia-1.0.10 → radia-1.1.1}/docs/NGSOLVE_PYTHON_SOLUTION.md +0 -0
- {radia-1.0.10 → radia-1.1.1}/docs/NGSOLVE_USAGE_GUIDE.md +0 -0
- {radia-1.0.10 → radia-1.1.1}/docs/OPENMP_PERFORMANCE_REPORT.md +0 -0
- {radia-1.0.10 → radia-1.1.1}/docs/TAB_CONVERSION_REPORT.md +0 -0
- {radia-1.0.10 → radia-1.1.1}/docs/hmatrix_field_design.md +0 -0
- {radia-1.0.10 → radia-1.1.1}/docs/scripts/README.md +0 -0
- {radia-1.0.10 → radia-1.1.1}/examples/NGSolve_Integration/HMATRIX_ANALYSIS.md +0 -0
- {radia-1.0.10 → radia-1.1.1}/examples/NGSolve_Integration/HMATRIX_FIELD_EVALUATION_ISSUE.md +0 -0
- {radia-1.0.10 → radia-1.1.1}/examples/NGSolve_Integration/H_MATRIX_PARALLEL_OPTIMIZATION.md +0 -0
- {radia-1.0.10 → radia-1.1.1}/examples/NGSolve_Integration/NGBEM_ANALYSIS.md +0 -0
- {radia-1.0.10 → radia-1.1.1}/examples/NGSolve_Integration/NGSOLVE_SET_VS_INTERPOLATE.md +0 -0
- {radia-1.0.10 → radia-1.1.1}/examples/NGSolve_Integration/PROPOSAL_VECTORIZED_API.md +0 -0
- {radia-1.0.10 → radia-1.1.1}/examples/NGSolve_Integration/README.md +0 -0
- {radia-1.0.10 → radia-1.1.1}/examples/NGSolve_Integration/SET_VS_INTERPOLATE_SIMPLE.md +0 -0
- {radia-1.0.10 → radia-1.1.1}/examples/NGSolve_Integration/SOLVER_OPTIMIZATION_PROPOSAL.md +0 -0
- {radia-1.0.10 → radia-1.1.1}/examples/NGSolve_Integration/benchmark_gridfunction_set.py +0 -0
- {radia-1.0.10 → radia-1.1.1}/examples/NGSolve_Integration/debug_field_values.py +0 -0
- {radia-1.0.10 → radia-1.1.1}/examples/NGSolve_Integration/radia_field.pvsm +0 -0
- {radia-1.0.10 → radia-1.1.1}/examples/NGSolve_Integration/test_batch_evaluation.py +0 -0
- {radia-1.0.10 → radia-1.1.1}/examples/NGSolve_Integration/test_batch_fld.py +0 -0
- {radia-1.0.10 → radia-1.1.1}/examples/NGSolve_Integration/test_coordinate_transform.py +0 -0
- {radia-1.0.10 → radia-1.1.1}/examples/NGSolve_Integration/test_mesh_convergence.py +0 -0
- {radia-1.0.10 → radia-1.1.1}/examples/NGSolve_Integration/test_set_vs_interpolate.py +0 -0
- {radia-1.0.10 → radia-1.1.1}/examples/NGSolve_Integration/verify_curl_A_equals_B.py +0 -0
- {radia-1.0.10/examples/NGSolve_Integration/rad.ObjBckgCF → radia-1.1.1/examples/background_fields}/sphere_nastran_field_mu.pvsm +0 -0
- {radia-1.0.10/examples/NGSolve_Integration/rad.ObjBckgCF → radia-1.1.1/examples/background_fields}/sphere_nastran_geometry.vtk +0 -0
- {radia-1.0.10 → radia-1.1.1}/examples/complex_coil_geometry/coil_geometry.vtk +0 -0
- {radia-1.0.10 → radia-1.1.1}/examples/complex_coil_geometry/complex_coil.pvsm +0 -0
- {radia-1.0.10 → radia-1.1.1}/examples/complex_coil_geometry/field_map.vtk +0 -0
- {radia-1.0.10 → radia-1.1.1}/examples/complex_coil_geometry/visualize_coils.py +0 -0
- {radia-1.0.10 → radia-1.1.1}/examples/electromagnet/README.md +0 -0
- {radia-1.0.10 → radia-1.1.1}/examples/electromagnet/electromagnet.pvsm +0 -0
- {radia-1.0.10 → radia-1.1.1}/examples/electromagnet/electromagnet.vtk +0 -0
- {radia-1.0.10 → radia-1.1.1}/examples/electromagnet/field_distribution.vtk +0 -0
- {radia-1.0.10 → radia-1.1.1}/examples/electromagnet/magnet.py +0 -0
- {radia-1.0.10 → radia-1.1.1}/examples/smco_magnet_array/README.md +0 -0
- {radia-1.0.10 → radia-1.1.1}/examples/smco_magnet_array/smbo.pvsm +0 -0
- {radia-1.0.10 → radia-1.1.1}/examples/smco_magnet_array/smco_array.vtk +0 -0
- {radia-1.0.10 → radia-1.1.1}/examples/smco_magnet_array/smco_field_distribution.vtk +0 -0
- {radia-1.0.10/examples/H-matrix → radia-1.1.1/examples/solver_benchmarks}/HMATRIX_FIELD_DESIGN_SIMPLIFIED.md +0 -0
- {radia-1.0.10 → radia-1.1.1}/examples/solver_benchmarks/benchmark_hmatrix_field.py +0 -0
- {radia-1.0.10/examples/solver_time_evaluation → radia-1.1.1/examples/solver_benchmarks}/benchmark_matrix_construction.py +0 -0
- {radia-1.0.10/examples/solver_time_evaluation → radia-1.1.1/examples/solver_benchmarks}/benchmark_solver_scaling.py +0 -0
- {radia-1.0.10/examples/H-matrix → radia-1.1.1/examples/solver_benchmarks}/plot_benchmark_results.py +0 -0
- {radia-1.0.10/examples/H-matrix → radia-1.1.1/examples/solver_benchmarks}/run_all_benchmarks.py +0 -0
- {radia-1.0.10 → radia-1.1.1}/setup.cfg +0 -0
- {radia-1.0.10 → radia-1.1.1}/src/python/nastran_reader.py +0 -0
- {radia-1.0.10 → radia-1.1.1}/src/python/radia.pyd +0 -0
- {radia-1.0.10 → radia-1.1.1}/src/python/radia_coil_builder.py +0 -0
- {radia-1.0.10 → radia-1.1.1}/src/python/radia_ngsolve_field.py +0 -0
- {radia-1.0.10 → radia-1.1.1}/src/python/radia_pyvista_viewer.py +0 -0
- {radia-1.0.10 → radia-1.1.1}/src/python/radia_vtk_export.py +0 -0
- {radia-1.0.10 → radia-1.1.1}/src/radia.egg-info/dependency_links.txt +0 -0
- {radia-1.0.10 → radia-1.1.1}/src/radia.egg-info/not-zip-safe +0 -0
- {radia-1.0.10 → radia-1.1.1}/src/radia.egg-info/requires.txt +0 -0
- {radia-1.0.10 → radia-1.1.1}/src/radia.egg-info/top_level.txt +0 -0
- {radia-1.0.10 → radia-1.1.1}/tests/README.md +0 -0
- {radia-1.0.10 → radia-1.1.1}/tests/__init__.py +0 -0
- {radia-1.0.10 → radia-1.1.1}/tests/benchmarks/benchmark_correct.py +0 -0
- {radia-1.0.10 → radia-1.1.1}/tests/benchmarks/benchmark_heavy.py +0 -0
- {radia-1.0.10 → radia-1.1.1}/tests/benchmarks/benchmark_openmp.py +0 -0
- {radia-1.0.10 → radia-1.1.1}/tests/benchmarks/benchmark_threads.py +0 -0
- {radia-1.0.10 → radia-1.1.1}/tests/conftest.py +0 -0
- {radia-1.0.10 → radia-1.1.1}/tests/test_advanced.py +0 -0
- {radia-1.0.10 → radia-1.1.1}/tests/test_parallel_performance.py +0 -0
- {radia-1.0.10 → radia-1.1.1}/tests/test_radia.py +0 -0
- {radia-1.0.10 → radia-1.1.1}/tests/test_simple.py +0 -0
- {radia-1.0.10 → radia-1.1.1}/tests/test_square_coil_analytical.py +0 -0
- {radia-1.0.10 → radia-1.1.1}/tests/test_utils.py +0 -0
- {radia-1.0.10 → radia-1.1.1}/tests/test_vector_potential.py +0 -0
radia-1.1.1/LICENSE
ADDED
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
RADIA SOFTWARE LICENSE
|
|
2
|
+
======================
|
|
3
|
+
|
|
4
|
+
This software contains multiple components with different licenses:
|
|
5
|
+
|
|
6
|
+
1. RADIA Core (BSD-style License)
|
|
7
|
+
2. HACApK_LH-Cimplm Library (MIT License)
|
|
8
|
+
|
|
9
|
+
All licenses are permissive open-source licenses allowing redistribution
|
|
10
|
+
and modification.
|
|
11
|
+
|
|
12
|
+
================================================================================
|
|
13
|
+
PART 1: RADIA CORE
|
|
14
|
+
================================================================================
|
|
15
|
+
|
|
16
|
+
Copyright © 1997 - 2018, European Synchrotron Radiation Facility
|
|
17
|
+
|
|
18
|
+
The RADIA software is distributed subject to the following license conditions:
|
|
19
|
+
|
|
20
|
+
Redistribution and use in source and binary forms, with or without
|
|
21
|
+
modification, are permitted provided that the following conditions are met:
|
|
22
|
+
|
|
23
|
+
1. Redistributions of source code must retain the above copyright notice,
|
|
24
|
+
this list of conditions and the following disclaimer.
|
|
25
|
+
|
|
26
|
+
2. Redistributions in binary form must reproduce the above copyright notice,
|
|
27
|
+
this list of conditions and the following disclaimer in the documentation
|
|
28
|
+
and/or other materials provided with the distribution.
|
|
29
|
+
|
|
30
|
+
DISCLAIMER: THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS "AS IS"
|
|
31
|
+
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
32
|
+
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
33
|
+
ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR
|
|
34
|
+
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
35
|
+
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
|
36
|
+
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
|
37
|
+
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
|
38
|
+
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
39
|
+
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
40
|
+
|
|
41
|
+
The views and conclusions contained in the software and documentation are
|
|
42
|
+
those of the authors and should not be interpreted as representing official
|
|
43
|
+
policies, either expressed or implied, of the RADIA project.
|
|
44
|
+
|
|
45
|
+
================================================================================
|
|
46
|
+
PART 2: HACApK_LH-Cimplm (H-matrix Library)
|
|
47
|
+
================================================================================
|
|
48
|
+
|
|
49
|
+
Software Name : HACApK
|
|
50
|
+
Version : 1.3.0
|
|
51
|
+
Location: src/ext/HACApK_LH-Cimplm/
|
|
52
|
+
|
|
53
|
+
Copyright (c) 2015 Akihiro Ida and Takeshi Iwashita
|
|
54
|
+
|
|
55
|
+
MIT License
|
|
56
|
+
|
|
57
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
58
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
59
|
+
in the Software without restriction, including without limitation the rights
|
|
60
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
61
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
62
|
+
furnished to do so, subject to the following conditions:
|
|
63
|
+
|
|
64
|
+
The above copyright notice and this permission notice shall be included in all
|
|
65
|
+
copies or substantial portions of the Software.
|
|
66
|
+
|
|
67
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
68
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
69
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
70
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
71
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
72
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
73
|
+
SOFTWARE.
|
|
74
|
+
|
|
75
|
+
ppOpen-HPC project:
|
|
76
|
+
Open Source Infrastructure for Development and Execution of Large-Scale
|
|
77
|
+
Scientific Applications on Post-Peta-Scale Supercomputers with Automatic
|
|
78
|
+
Tuning (AT).
|
|
79
|
+
|
|
80
|
+
Sponsorship:
|
|
81
|
+
Japan Science and Technology Agency (JST), Basic Research Programs: CREST,
|
|
82
|
+
Development of System Software Technologies for post-Peta Scale High
|
|
83
|
+
Performance Computing.
|
|
84
|
+
|
|
85
|
+
================================================================================
|
|
86
|
+
ADDITIONAL COMPONENTS
|
|
87
|
+
================================================================================
|
|
88
|
+
|
|
89
|
+
This software may include additional third-party libraries and components,
|
|
90
|
+
each governed by their respective licenses. Please refer to the individual
|
|
91
|
+
component directories for specific license information.
|
|
92
|
+
|
|
93
|
+
================================================================================
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: radia
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.1.1
|
|
4
4
|
Summary: Radia 3D Magnetostatics with NGSolve Integration and OpenMP Parallelization
|
|
5
5
|
Home-page: https://github.com/ksugahar/Radia_NGSolve
|
|
6
6
|
Author: Pascal Elleaume
|
|
7
7
|
Author-email: Oleg Chubar <chubar@bnl.gov>
|
|
8
8
|
Maintainer: Radia Development Team
|
|
9
|
-
License:
|
|
9
|
+
License: BSD-style AND MIT
|
|
10
10
|
Project-URL: Homepage, https://github.com/ksugahar/Radia_NGSolve
|
|
11
11
|
Project-URL: Documentation, https://github.com/ksugahar/Radia_NGSolve/blob/master/README.md
|
|
12
12
|
Project-URL: Repository, https://github.com/ksugahar/Radia_NGSolve
|
|
@@ -16,6 +16,8 @@ Project-URL: ESRF Radia Page, https://www.esrf.fr/Accelerators/Groups/InsertionD
|
|
|
16
16
|
Keywords: magnetostatics,magnetic field,radia,ngsolve,fem,synchrotron
|
|
17
17
|
Classifier: Development Status :: 5 - Production/Stable
|
|
18
18
|
Classifier: Intended Audience :: Science/Research
|
|
19
|
+
Classifier: License :: OSI Approved :: BSD License
|
|
20
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
19
21
|
Classifier: Programming Language :: Python :: 3.12
|
|
20
22
|
Classifier: Programming Language :: C++
|
|
21
23
|
Classifier: Topic :: Scientific/Engineering :: Physics
|
|
@@ -59,6 +61,7 @@ This repository adds NGSolve integration and performance improvements while main
|
|
|
59
61
|
|
|
60
62
|
## Key Features
|
|
61
63
|
|
|
64
|
+
- ✓ **H-matrix acceleration** - Fast hierarchical matrix solver using [HACApK](https://github.com/Post-Peta-Crest/ppOpenHPC/tree/MATH/HACApK)
|
|
62
65
|
- ✓ OpenMP parallel field computation
|
|
63
66
|
- ✓ NGSolve C++ CoefficientFunction integration
|
|
64
67
|
- ✓ VTK export functionality (`rad.ObjDrwVTK`)
|
|
@@ -150,7 +153,7 @@ import rad_ngsolve
|
|
|
150
153
|
|
|
151
154
|
# Create Radia magnet
|
|
152
155
|
magnet = rad.ObjRecMag([0,0,0], [20,20,20], [0,0,1.2]) # mm units
|
|
153
|
-
rad.MatApl(magnet, rad.
|
|
156
|
+
rad.MatApl(magnet, rad.MatPM(1.2, 900000, [0,0,1])) # NdFeB permanent magnet
|
|
154
157
|
rad.Solve(magnet, 0.0001, 10000)
|
|
155
158
|
|
|
156
159
|
# Create NGSolve CoefficientFunction for different field types
|
|
@@ -256,7 +259,10 @@ See [tests/README.md](tests/README.md) for detailed testing documentation.
|
|
|
256
259
|
|
|
257
260
|
```python
|
|
258
261
|
import sys
|
|
259
|
-
|
|
262
|
+
import os
|
|
263
|
+
|
|
264
|
+
# Add src/python to path (adjust path as needed for your installation)
|
|
265
|
+
sys.path.insert(0, os.path.join(os.path.dirname(__file__), 'src', 'python'))
|
|
260
266
|
|
|
261
267
|
from radia_pyvista_viewer import view_radia_object
|
|
262
268
|
|
|
@@ -268,7 +274,10 @@ view_radia_object(mag)
|
|
|
268
274
|
|
|
269
275
|
```python
|
|
270
276
|
import sys
|
|
271
|
-
|
|
277
|
+
import os
|
|
278
|
+
|
|
279
|
+
# Add src/python to path (adjust path as needed for your installation)
|
|
280
|
+
sys.path.insert(0, os.path.join(os.path.dirname(__file__), 'src', 'python'))
|
|
272
281
|
|
|
273
282
|
from radia_vtk_export import export_geometry_to_vtk
|
|
274
283
|
|
|
@@ -301,6 +310,7 @@ export_geometry_to_vtk(mag, 'geometry.vtk')
|
|
|
301
310
|
- Python 2.7, 3.6, 3.7, 3.8 support
|
|
302
311
|
|
|
303
312
|
### Added Features
|
|
313
|
+
- **H-matrix acceleration** - Hierarchical matrix solver using [HACApK library](https://github.com/Post-Peta-Crest/ppOpenHPC/tree/MATH/HACApK) (9-50x speedup for large problems)
|
|
304
314
|
- OpenMP parallelization (2.7x speedup)
|
|
305
315
|
- NGSolve C++ CoefficientFunction integration
|
|
306
316
|
- PyVista viewer support
|
|
@@ -311,15 +321,26 @@ export_geometry_to_vtk(mag, 'geometry.vtk')
|
|
|
311
321
|
|
|
312
322
|
## License
|
|
313
323
|
|
|
314
|
-
This project
|
|
324
|
+
This project contains multiple components with different open-source licenses:
|
|
325
|
+
|
|
326
|
+
### RADIA Core
|
|
327
|
+
Licensed under a **BSD-style license** by the European Synchrotron Radiation Facility (ESRF).
|
|
328
|
+
- Copyright © 1997-2018, European Synchrotron Radiation Facility
|
|
329
|
+
- Permits redistribution and modification with attribution
|
|
315
330
|
|
|
316
|
-
|
|
331
|
+
### HACApK_LH-Cimplm (H-matrix Library)
|
|
332
|
+
Licensed under the **MIT License**.
|
|
333
|
+
- Copyright © 2015, Akihiro Ida and Takeshi Iwashita
|
|
334
|
+
- Location: `src/ext/HACApK_LH-Cimplm/`
|
|
335
|
+
- ppOpen-HPC project
|
|
317
336
|
|
|
318
|
-
Both licenses are
|
|
337
|
+
Both licenses are permissive open-source licenses that allow free use, modification,
|
|
338
|
+
and redistribution.
|
|
319
339
|
|
|
320
340
|
See:
|
|
321
|
-
- `LICENSE` - Complete license text
|
|
322
|
-
- `COPYRIGHT.txt` - Original RADIA
|
|
341
|
+
- `LICENSE` - Complete license text for both components
|
|
342
|
+
- `COPYRIGHT.txt` - Original RADIA BSD-style license
|
|
343
|
+
- `src/ext/HACApK_LH-Cimplm/LICENSE` - HACApK MIT license
|
|
323
344
|
|
|
324
345
|
## Credits
|
|
325
346
|
|
|
@@ -19,6 +19,7 @@ This repository adds NGSolve integration and performance improvements while main
|
|
|
19
19
|
|
|
20
20
|
## Key Features
|
|
21
21
|
|
|
22
|
+
- ✓ **H-matrix acceleration** - Fast hierarchical matrix solver using [HACApK](https://github.com/Post-Peta-Crest/ppOpenHPC/tree/MATH/HACApK)
|
|
22
23
|
- ✓ OpenMP parallel field computation
|
|
23
24
|
- ✓ NGSolve C++ CoefficientFunction integration
|
|
24
25
|
- ✓ VTK export functionality (`rad.ObjDrwVTK`)
|
|
@@ -110,7 +111,7 @@ import rad_ngsolve
|
|
|
110
111
|
|
|
111
112
|
# Create Radia magnet
|
|
112
113
|
magnet = rad.ObjRecMag([0,0,0], [20,20,20], [0,0,1.2]) # mm units
|
|
113
|
-
rad.MatApl(magnet, rad.
|
|
114
|
+
rad.MatApl(magnet, rad.MatPM(1.2, 900000, [0,0,1])) # NdFeB permanent magnet
|
|
114
115
|
rad.Solve(magnet, 0.0001, 10000)
|
|
115
116
|
|
|
116
117
|
# Create NGSolve CoefficientFunction for different field types
|
|
@@ -216,7 +217,10 @@ See [tests/README.md](tests/README.md) for detailed testing documentation.
|
|
|
216
217
|
|
|
217
218
|
```python
|
|
218
219
|
import sys
|
|
219
|
-
|
|
220
|
+
import os
|
|
221
|
+
|
|
222
|
+
# Add src/python to path (adjust path as needed for your installation)
|
|
223
|
+
sys.path.insert(0, os.path.join(os.path.dirname(__file__), 'src', 'python'))
|
|
220
224
|
|
|
221
225
|
from radia_pyvista_viewer import view_radia_object
|
|
222
226
|
|
|
@@ -228,7 +232,10 @@ view_radia_object(mag)
|
|
|
228
232
|
|
|
229
233
|
```python
|
|
230
234
|
import sys
|
|
231
|
-
|
|
235
|
+
import os
|
|
236
|
+
|
|
237
|
+
# Add src/python to path (adjust path as needed for your installation)
|
|
238
|
+
sys.path.insert(0, os.path.join(os.path.dirname(__file__), 'src', 'python'))
|
|
232
239
|
|
|
233
240
|
from radia_vtk_export import export_geometry_to_vtk
|
|
234
241
|
|
|
@@ -261,6 +268,7 @@ export_geometry_to_vtk(mag, 'geometry.vtk')
|
|
|
261
268
|
- Python 2.7, 3.6, 3.7, 3.8 support
|
|
262
269
|
|
|
263
270
|
### Added Features
|
|
271
|
+
- **H-matrix acceleration** - Hierarchical matrix solver using [HACApK library](https://github.com/Post-Peta-Crest/ppOpenHPC/tree/MATH/HACApK) (9-50x speedup for large problems)
|
|
264
272
|
- OpenMP parallelization (2.7x speedup)
|
|
265
273
|
- NGSolve C++ CoefficientFunction integration
|
|
266
274
|
- PyVista viewer support
|
|
@@ -271,15 +279,26 @@ export_geometry_to_vtk(mag, 'geometry.vtk')
|
|
|
271
279
|
|
|
272
280
|
## License
|
|
273
281
|
|
|
274
|
-
This project
|
|
282
|
+
This project contains multiple components with different open-source licenses:
|
|
283
|
+
|
|
284
|
+
### RADIA Core
|
|
285
|
+
Licensed under a **BSD-style license** by the European Synchrotron Radiation Facility (ESRF).
|
|
286
|
+
- Copyright © 1997-2018, European Synchrotron Radiation Facility
|
|
287
|
+
- Permits redistribution and modification with attribution
|
|
275
288
|
|
|
276
|
-
|
|
289
|
+
### HACApK_LH-Cimplm (H-matrix Library)
|
|
290
|
+
Licensed under the **MIT License**.
|
|
291
|
+
- Copyright © 2015, Akihiro Ida and Takeshi Iwashita
|
|
292
|
+
- Location: `src/ext/HACApK_LH-Cimplm/`
|
|
293
|
+
- ppOpen-HPC project
|
|
277
294
|
|
|
278
|
-
Both licenses are
|
|
295
|
+
Both licenses are permissive open-source licenses that allow free use, modification,
|
|
296
|
+
and redistribution.
|
|
279
297
|
|
|
280
298
|
See:
|
|
281
|
-
- `LICENSE` - Complete license text
|
|
282
|
-
- `COPYRIGHT.txt` - Original RADIA
|
|
299
|
+
- `LICENSE` - Complete license text for both components
|
|
300
|
+
- `COPYRIGHT.txt` - Original RADIA BSD-style license
|
|
301
|
+
- `src/ext/HACApK_LH-Cimplm/LICENSE` - HACApK MIT license
|
|
283
302
|
|
|
284
303
|
## Credits
|
|
285
304
|
|
|
@@ -251,29 +251,137 @@ pieces = rad.ObjDivMag(magnet, [[3,1.5], [3,1.5], [3,1.5]])
|
|
|
251
251
|
|
|
252
252
|
## Materials
|
|
253
253
|
|
|
254
|
-
### MatLin
|
|
254
|
+
### MatLin - Isotropic Linear Material ⭐ NEW API
|
|
255
|
+
|
|
255
256
|
```python
|
|
256
|
-
material = rad.MatLin(
|
|
257
|
+
material = rad.MatLin(ksi)
|
|
257
258
|
```
|
|
258
|
-
|
|
259
|
+
|
|
260
|
+
Creates an **isotropic** linear magnetic material.
|
|
259
261
|
|
|
260
262
|
**Parameters**:
|
|
261
|
-
- `
|
|
262
|
-
-
|
|
263
|
-
- Scalar: Easy axis set by object's magnetization direction
|
|
264
|
-
- Vector: Easy axis set explicitly
|
|
263
|
+
- `ksi` (float): Magnetic susceptibility (dimensionless)
|
|
264
|
+
- Relative permeability: μᵣ = 1 + ksi
|
|
265
265
|
|
|
266
266
|
**Example**:
|
|
267
267
|
```python
|
|
268
|
-
#
|
|
269
|
-
mat = rad.MatLin(
|
|
268
|
+
# Soft iron (μᵣ ≈ 1000)
|
|
269
|
+
mat = rad.MatLin(999)
|
|
270
|
+
block = rad.ObjRecMag([0,0,0], [10,10,10], [0,0,0])
|
|
271
|
+
rad.MatApl(block, mat)
|
|
272
|
+
rad.Solve(block, 0.0001, 1000)
|
|
273
|
+
```
|
|
274
|
+
|
|
275
|
+
**⚠️ Note**: MatLin is for magnetic materials that respond to external fields (soft iron, transformer cores, etc.). For permanent magnets, use `MatPM` instead.
|
|
276
|
+
|
|
277
|
+
---
|
|
278
|
+
|
|
279
|
+
### MatLin - Anisotropic Linear Material ⭐ NEW API
|
|
270
280
|
|
|
271
|
-
|
|
272
|
-
|
|
281
|
+
```python
|
|
282
|
+
material = rad.MatLin([ksi_par, ksi_perp], [ex, ey, ez])
|
|
283
|
+
```
|
|
284
|
+
|
|
285
|
+
Creates an **anisotropic** linear magnetic material.
|
|
286
|
+
|
|
287
|
+
**Parameters**:
|
|
288
|
+
- `[ksi_par, ksi_perp]`: Susceptibilities parallel/perpendicular to easy axis
|
|
289
|
+
- `[ex, ey, ez]`: Easy magnetization axis direction
|
|
290
|
+
|
|
291
|
+
**Example**:
|
|
292
|
+
```python
|
|
293
|
+
mat = rad.MatLin([1000, 10], [0, 0, 1]) # Easy axis: Z
|
|
294
|
+
rad.MatApl(block, mat)
|
|
273
295
|
```
|
|
274
296
|
|
|
275
297
|
---
|
|
276
298
|
|
|
299
|
+
**⚠️ Note**: MatLin is for magnetic materials that respond to external fields. For permanent magnets, use `MatPM` instead.
|
|
300
|
+
|
|
301
|
+
### MatPM - Permanent Magnet with Demagnetization ⭐ NEW
|
|
302
|
+
|
|
303
|
+
```python
|
|
304
|
+
material = rad.MatPM(Br, Hc, [mx, my, mz])
|
|
305
|
+
```
|
|
306
|
+
|
|
307
|
+
Creates a permanent magnet material with linear demagnetization curve.
|
|
308
|
+
|
|
309
|
+
**Parameters**:
|
|
310
|
+
- `Br` (float): Residual flux density [Tesla]
|
|
311
|
+
- `Hc` (float): Coercivity [A/m]
|
|
312
|
+
- `[mx, my, mz]`: Easy magnetization axis direction
|
|
313
|
+
|
|
314
|
+
**B-H Relationship**:
|
|
315
|
+
```
|
|
316
|
+
B = Br + μ₀ · μᵣₑc · H
|
|
317
|
+
μᵣₑc = Br / (μ₀ · Hc)
|
|
318
|
+
```
|
|
319
|
+
|
|
320
|
+
**Typical Values**:
|
|
321
|
+
| Material | Br [T] | Hc [kA/m] |
|
|
322
|
+
|----------|--------|-----------|
|
|
323
|
+
| NdFeB N52 | 1.43 | 876 |
|
|
324
|
+
| NdFeB N42 | 1.32 | 876 |
|
|
325
|
+
| SmCo | 1.10 | 800 |
|
|
326
|
+
| Ferrite | 0.40 | 240 |
|
|
327
|
+
|
|
328
|
+
**Example**:
|
|
329
|
+
```python
|
|
330
|
+
# NdFeB N52 magnet
|
|
331
|
+
mat = rad.MatPM(1.43, 876000, [0, 0, 1]) # Br=1.43T, Hc=876kA/m
|
|
332
|
+
magnet = rad.ObjRecMag([0,0,0], [20,20,10], [0,0,0])
|
|
333
|
+
rad.MatApl(magnet, mat)
|
|
334
|
+
rad.Solve(magnet, 0.0001, 1000)
|
|
335
|
+
```
|
|
336
|
+
|
|
337
|
+
---
|
|
338
|
+
|
|
339
|
+
### MatLin - Legacy API ⚠️ DEPRECATED
|
|
340
|
+
|
|
341
|
+
```python
|
|
342
|
+
material = rad.MatLin([ksi_parallel, ksi_perpendicular], mr)
|
|
343
|
+
```
|
|
344
|
+
Creates a linear anisotropic magnetic material.
|
|
345
|
+
|
|
346
|
+
**Usage**: For magnetic materials that respond to external fields. **NOT for permanent magnets** (which have fixed magnetization and don't need material properties).
|
|
347
|
+
|
|
348
|
+
**Parameters**:
|
|
349
|
+
- `[ksi_parallel, ksi_perpendicular]`: Susceptibilities parallel/perpendicular to easy magnetization axis
|
|
350
|
+
- `mr`: Remanent magnetization - defines the easy magnetization axis (must be non-zero)
|
|
351
|
+
- **Scalar form**: `mr` = magnitude only (A/m)
|
|
352
|
+
- Easy axis direction taken from object's initial magnetization vector
|
|
353
|
+
- **Vector form**: `[mrx, mry, mrz]` = remanent magnetization vector (A/m)
|
|
354
|
+
- Easy axis direction explicitly defined by this vector
|
|
355
|
+
|
|
356
|
+
**Physical Meaning**:
|
|
357
|
+
- `mr` (remanent magnetization) defines the **easy magnetization axis** (direction of parallel susceptibility)
|
|
358
|
+
- Susceptibility parallel (ksi_parallel): Material response along easy axis
|
|
359
|
+
- Susceptibility perpendicular (ksi_perpendicular): Material response perpendicular to easy axis
|
|
360
|
+
|
|
361
|
+
**Examples**:
|
|
362
|
+
```python
|
|
363
|
+
# Form 1: Scalar mr - easy axis from object's magnetization
|
|
364
|
+
obj = rad.ObjRecMag([0,0,0], [10,10,10], [0,0,1]) # Initial M in z-direction
|
|
365
|
+
mat = rad.MatLin([0.06, 0.17], 100) # Easy axis = z (from object), |Mr| = 100 A/m
|
|
366
|
+
rad.MatApl(obj, mat)
|
|
367
|
+
|
|
368
|
+
# Form 2: Vector mr - easy axis explicitly defined
|
|
369
|
+
mat = rad.MatLin([0.06, 0.17], [0, 0, 100]) # Easy axis in z, |Mr| = 100 A/m
|
|
370
|
+
rad.MatApl(obj, mat) # Applied to any object
|
|
371
|
+
|
|
372
|
+
# Isotropic linear material (equal susceptibilities in all directions)
|
|
373
|
+
mat = rad.MatLin([1000, 1000], [0, 0, 100]) # Mr still needed as reference
|
|
374
|
+
```
|
|
375
|
+
|
|
376
|
+
**Important Notes**:
|
|
377
|
+
- Permanent magnets: Use `rad.ObjRecMag([x,y,z], [dx,dy,dz], [mx,my,mz])` only - no material needed
|
|
378
|
+
- Magnetic materials: Use MatLin or MatSatIsoFrm for materials responding to fields
|
|
379
|
+
- `mr` must be non-zero (either as scalar magnitude or vector)
|
|
380
|
+
|
|
381
|
+
**⚠️ DEPRECATED**: Use the new `MatLin(ksi)`, `MatLin([ksi_par, ksi_perp], [ex,ey,ez])`, `MatPM()`, or `MatPMLinear()` APIs instead.
|
|
382
|
+
|
|
383
|
+
---
|
|
384
|
+
|
|
277
385
|
### MatSatIsoFrm
|
|
278
386
|
```python
|
|
279
387
|
material = rad.MatSatIsoFrm([ksi1,ms1], [ksi2,ms2], [ksi3,ms3])
|
|
@@ -324,30 +432,40 @@ Creates nonlinear anisotropic material with separate parallel/perpendicular char
|
|
|
324
432
|
|
|
325
433
|
### Common Material Configuration Examples
|
|
326
434
|
|
|
327
|
-
Below are typical material parameters for common magnetic materials.
|
|
435
|
+
Below are typical material parameters for common magnetic materials. Use **`MatPM`** for permanent magnets or **`MatSatIsoFrm`** for soft magnetic materials. For linear magnetic materials (non-permanent), use **`MatLin`**.
|
|
436
|
+
|
|
437
|
+
#### Permanent Magnet Materials
|
|
328
438
|
|
|
329
|
-
|
|
439
|
+
**Important**: For permanent magnets, use **`MatPM`** (NEW API) or create objects with fixed magnetization using `ObjRecMag` directly.
|
|
330
440
|
|
|
331
|
-
**NdFeB** (Neodymium-Iron-Boron):
|
|
441
|
+
**NdFeB N52** (Neodymium-Iron-Boron):
|
|
332
442
|
```python
|
|
333
|
-
|
|
443
|
+
# Method 1: Using MatPM (recommended for materials with demagnetization)
|
|
444
|
+
mat = rad.MatPM(1.43, 876000, [0, 0, 1]) # Br=1.43T, Hc=876kA/m, easy axis=Z
|
|
445
|
+
magnet = rad.ObjRecMag([0,0,0], [20,20,10], [0,0,0])
|
|
446
|
+
rad.MatApl(magnet, mat)
|
|
447
|
+
|
|
448
|
+
# Method 2: Fixed magnetization (for simple permanent magnets)
|
|
449
|
+
magnet = rad.ObjRecMag([0,0,0], [20,20,10], [0,0,1.2]) # M=1.2T, no material needed
|
|
334
450
|
```
|
|
335
451
|
|
|
336
|
-
**
|
|
452
|
+
**NdFeB N42**:
|
|
337
453
|
```python
|
|
338
|
-
mat = rad.
|
|
454
|
+
mat = rad.MatPM(1.32, 876000, [0, 0, 1]) # Br=1.32T, Hc=876kA/m
|
|
339
455
|
```
|
|
340
456
|
|
|
341
|
-
**
|
|
457
|
+
**SmCo** (Samarium-Cobalt):
|
|
342
458
|
```python
|
|
343
|
-
mat = rad.
|
|
459
|
+
mat = rad.MatPM(1.10, 800000, [0, 0, 1]) # Br=1.10T, Hc=800kA/m
|
|
344
460
|
```
|
|
345
461
|
|
|
346
462
|
**Ferrite**:
|
|
347
463
|
```python
|
|
348
|
-
mat = rad.
|
|
464
|
+
mat = rad.MatPM(0.40, 240000, [0, 0, 1]) # Br=0.40T, Hc=240kA/m
|
|
349
465
|
```
|
|
350
466
|
|
|
467
|
+
**⚠️ IMPORTANT**: Do NOT use `MatLin` for permanent magnets. `MatLin` is only for linear magnetic materials that respond to external fields (soft iron, transformer cores, etc.).
|
|
468
|
+
|
|
351
469
|
#### Soft Magnetic Materials (Nonlinear Isotropic)
|
|
352
470
|
|
|
353
471
|
**Xc06** (Low Carbon Steel, C<0.06%):
|