radia 1.3.13__tar.gz → 1.3.14__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.3.13/src/radia.egg-info → radia-1.3.14}/PKG-INFO +1 -1
- {radia-1.3.13 → radia-1.3.14}/docs/API_EXTENSIONS.md +32 -45
- {radia-1.3.13 → radia-1.3.14}/docs/HMATRIX_SERIALIZATION.md +14 -1
- {radia-1.3.13 → radia-1.3.14}/docs/HMATRIX_USER_GUIDE.md +15 -2
- {radia-1.3.13 → radia-1.3.14}/docs/HYBRID_DOF_SOLVER_DESIGN.md +11 -0
- {radia-1.3.13 → radia-1.3.14}/docs/ML_PARAMETER_TUNING.md +12 -1
- radia-1.3.14/docs/README.md +110 -0
- radia-1.3.14/docs/SOLVER_METHODS.md +207 -0
- radia-1.3.14/docs/SUPPORTED_ELEMENTS.md +199 -0
- {radia-1.3.13 → radia-1.3.14}/examples/README.md +20 -46
- {radia-1.3.13 → radia-1.3.14}/pyproject.toml +1 -1
- {radia-1.3.13 → radia-1.3.14}/setup.py +2 -1
- radia-1.3.14/src/radia/__init__.py +34 -0
- radia-1.3.14/src/radia/libopenblas.dll +0 -0
- {radia-1.3.13 → radia-1.3.14/src/radia.egg-info}/PKG-INFO +1 -1
- {radia-1.3.13 → radia-1.3.14}/src/radia.egg-info/SOURCES.txt +2 -0
- radia-1.3.13/docs/README.md +0 -67
- radia-1.3.13/docs/SOLVER_METHODS.md +0 -225
- radia-1.3.13/src/radia/__init__.py +0 -18
- {radia-1.3.13 → radia-1.3.14}/COPYRIGHT.txt +0 -0
- {radia-1.3.13 → radia-1.3.14}/LICENSE +0 -0
- {radia-1.3.13 → radia-1.3.14}/MANIFEST.in +0 -0
- {radia-1.3.13 → radia-1.3.14}/README.md +0 -0
- {radia-1.3.13 → radia-1.3.14}/docs/API_REFERENCE.md +0 -0
- {radia-1.3.13 → radia-1.3.14}/docs/CF_BACKGROUND_FIELD_IMPLEMENTATION.md +0 -0
- {radia-1.3.13 → radia-1.3.14}/docs/HMATRIX_EVALUATION.md +0 -0
- {radia-1.3.13 → radia-1.3.14}/docs/MATERIAL_API_IMPLEMENTATION.md +0 -0
- {radia-1.3.13 → radia-1.3.14}/docs/MESH_MSC_API_DESIGN.md +0 -0
- {radia-1.3.13 → radia-1.3.14}/docs/MMM_MSC_IMPLEMENTATION.md +0 -0
- {radia-1.3.13 → radia-1.3.14}/docs/NGSOLVE_CF_BACKGROUND_FIELD_DESIGN.md +0 -0
- {radia-1.3.13 → radia-1.3.14}/docs/NGSOLVE_INTEGRATION.md +0 -0
- {radia-1.3.13 → radia-1.3.14}/docs/NGSOLVE_USAGE_GUIDE.md +0 -0
- {radia-1.3.13 → radia-1.3.14}/docs/scripts/README.md +0 -0
- {radia-1.3.13 → radia-1.3.14}/examples/background_fields/README.md +0 -0
- {radia-1.3.13 → radia-1.3.14}/examples/background_fields/cubit_to_nastran.py +0 -0
- {radia-1.3.13 → radia-1.3.14}/examples/background_fields/permeability_comparison.py +0 -0
- {radia-1.3.13 → radia-1.3.14}/examples/background_fields/quadrupole_analytical.py +0 -0
- {radia-1.3.13 → radia-1.3.14}/examples/background_fields/quadrupole_analytical.vtk.vtk +0 -0
- {radia-1.3.13 → radia-1.3.14}/examples/background_fields/sphere_in_quadrupole.py +0 -0
- {radia-1.3.13 → radia-1.3.14}/examples/background_fields/sphere_nastran_analysis.py +0 -0
- {radia-1.3.13 → radia-1.3.14}/examples/background_fields/sphere_nastran_field_mu.pvsm +0 -0
- {radia-1.3.13 → radia-1.3.14}/examples/background_fields/sphere_nastran_geometry.vtk +0 -0
- {radia-1.3.13 → radia-1.3.14}/examples/complex_coil_geometry/README.md +0 -0
- {radia-1.3.13 → radia-1.3.14}/examples/complex_coil_geometry/coil_geometry.vtk +0 -0
- {radia-1.3.13 → radia-1.3.14}/examples/complex_coil_geometry/coil_model.py +0 -0
- {radia-1.3.13 → radia-1.3.14}/examples/complex_coil_geometry/complex_coil.pvsm +0 -0
- {radia-1.3.13 → radia-1.3.14}/examples/complex_coil_geometry/field_map.py +0 -0
- {radia-1.3.13 → radia-1.3.14}/examples/complex_coil_geometry/field_map.vtk +0 -0
- {radia-1.3.13 → radia-1.3.14}/examples/complex_coil_geometry/visualize_coils.py +0 -0
- {radia-1.3.13 → radia-1.3.14}/examples/cube_uniform_field/README.md +0 -0
- {radia-1.3.13 → radia-1.3.14}/examples/cube_uniform_field/linear/README.md +0 -0
- {radia-1.3.13 → radia-1.3.14}/examples/cube_uniform_field/linear/README_CUBE_BENCHMARK.md +0 -0
- {radia-1.3.13 → radia-1.3.14}/examples/cube_uniform_field/linear/benchmark_bicgstab_dense.py +0 -0
- {radia-1.3.13 → radia-1.3.14}/examples/cube_uniform_field/linear/benchmark_external_field.py +0 -0
- {radia-1.3.13 → radia-1.3.14}/examples/cube_uniform_field/linear/benchmark_high_mu.py +0 -0
- {radia-1.3.13 → radia-1.3.14}/examples/cube_uniform_field/linear/benchmark_mesh_convergence.py +0 -0
- {radia-1.3.13 → radia-1.3.14}/examples/cube_uniform_field/linear/benchmark_solver_methods.py +0 -0
- {radia-1.3.13 → radia-1.3.14}/examples/cube_uniform_field/linear/benchmark_tetra_vs_hex.py +0 -0
- {radia-1.3.13 → radia-1.3.14}/examples/cube_uniform_field/linear/benchmark_tetra_vs_ngsolve.py +0 -0
- {radia-1.3.13 → radia-1.3.14}/examples/cube_uniform_field/linear/compare_external_field.py +0 -0
- {radia-1.3.13 → radia-1.3.14}/examples/cube_uniform_field/linear/cube_benchmark_external_field.py +0 -0
- {radia-1.3.13 → radia-1.3.14}/examples/cube_uniform_field/linear/cube_benchmark_radia.vtk +0 -0
- {radia-1.3.13 → radia-1.3.14}/examples/cube_uniform_field/linear/evaluate_perturbation_field.py +0 -0
- {radia-1.3.13 → radia-1.3.14}/examples/cube_uniform_field/linear/precision_evaluation.py +0 -0
- {radia-1.3.13 → radia-1.3.14}/examples/cube_uniform_field/linear/test_method9_fine_mesh.py +0 -0
- {radia-1.3.13 → radia-1.3.14}/examples/cube_uniform_field/linear/test_method9_high_mu.py +0 -0
- {radia-1.3.13 → radia-1.3.14}/examples/cube_uniform_field/nonlinear/README.md +0 -0
- {radia-1.3.13 → radia-1.3.14}/examples/cube_uniform_field/nonlinear/benchmark_bicgstab_hex.py +0 -0
- {radia-1.3.13 → radia-1.3.14}/examples/cube_uniform_field/nonlinear/benchmark_conditions.py +0 -0
- {radia-1.3.13 → radia-1.3.14}/examples/cube_uniform_field/nonlinear/benchmark_element_types.py +0 -0
- {radia-1.3.13 → radia-1.3.14}/examples/cube_uniform_field/nonlinear/benchmark_hexa_unified.py +0 -0
- {radia-1.3.13 → radia-1.3.14}/examples/cube_uniform_field/nonlinear/benchmark_hexahedron_msc.py +0 -0
- {radia-1.3.13 → radia-1.3.14}/examples/cube_uniform_field/nonlinear/benchmark_nonlinear_tetra_vs_hex.py +0 -0
- {radia-1.3.13 → radia-1.3.14}/examples/cube_uniform_field/nonlinear/benchmark_solver_methods.py +0 -0
- {radia-1.3.13 → radia-1.3.14}/examples/cube_uniform_field/nonlinear/benchmark_tetra_netgen.py +0 -0
- {radia-1.3.13 → radia-1.3.14}/examples/cube_uniform_field/nonlinear/benchmark_tetra_unified.py +0 -0
- {radia-1.3.13 → radia-1.3.14}/examples/cube_uniform_field/nonlinear/compare_radia_elfmagic_field.py +0 -0
- {radia-1.3.13 → radia-1.3.14}/examples/cube_uniform_field/nonlinear/compare_tetra_methods.py +0 -0
- {radia-1.3.13 → radia-1.3.14}/examples/electromagnet/README.md +0 -0
- {radia-1.3.13 → radia-1.3.14}/examples/electromagnet/Radia_model.vtk +0 -0
- {radia-1.3.13 → radia-1.3.14}/examples/electromagnet/York.vtk +0 -0
- {radia-1.3.13 → radia-1.3.14}/examples/electromagnet/field_distribution.vtk +0 -0
- {radia-1.3.13 → radia-1.3.14}/examples/electromagnet/main_simulation_workflow.py +0 -0
- {radia-1.3.13 → radia-1.3.14}/examples/electromagnet/visualize_paraview.py +0 -0
- {radia-1.3.13 → radia-1.3.14}/examples/electromagnet/york_cubit_mesh.py +0 -0
- {radia-1.3.13 → radia-1.3.14}/examples/magpylib_integration/README.md +0 -0
- {radia-1.3.13 → radia-1.3.14}/examples/magpylib_integration/cylinder_magnet_examples.py +0 -0
- {radia-1.3.13 → radia-1.3.14}/examples/magpylib_integration/demo_magpylib_integration.py +0 -0
- {radia-1.3.13 → radia-1.3.14}/examples/magpylib_integration/sphere_in_halbach_cylinder.py +0 -0
- {radia-1.3.13 → radia-1.3.14}/examples/ngsolve_integration/README.md +0 -0
- {radia-1.3.13 → radia-1.3.14}/examples/ngsolve_integration/benchmark_gridfunction_set.py +0 -0
- {radia-1.3.13 → radia-1.3.14}/examples/ngsolve_integration/demo_basic_field.py +0 -0
- {radia-1.3.13 → radia-1.3.14}/examples/ngsolve_integration/demo_batch_evaluation.py +0 -0
- {radia-1.3.13 → radia-1.3.14}/examples/ngsolve_integration/demo_coordinate_transform.py +0 -0
- {radia-1.3.13 → radia-1.3.14}/examples/ngsolve_integration/demo_field_types.py +0 -0
- {radia-1.3.13 → radia-1.3.14}/examples/ngsolve_integration/demo_hdiv_projection.py +0 -0
- {radia-1.3.13 → radia-1.3.14}/examples/ngsolve_integration/mesh_magnetization_import/RADIA_TETRA_ROOT_CAUSE.md +0 -0
- {radia-1.3.13 → radia-1.3.14}/examples/ngsolve_integration/mesh_magnetization_import/README.md +0 -0
- {radia-1.3.13 → radia-1.3.14}/examples/ngsolve_integration/mesh_magnetization_import/compare_radia_ngsolve_cube.py +0 -0
- {radia-1.3.13 → radia-1.3.14}/examples/ngsolve_integration/mesh_magnetization_import/cube_hex.vtk +0 -0
- {radia-1.3.13 → radia-1.3.14}/examples/ngsolve_integration/mesh_magnetization_import/demo_tetrahedral_methods_comparison.py +0 -0
- {radia-1.3.13 → radia-1.3.14}/examples/ngsolve_integration/mesh_magnetization_import/ngsolve_cube_graded_mesh.vtk +0 -0
- {radia-1.3.13 → radia-1.3.14}/examples/ngsolve_integration/mesh_magnetization_import/ngsolve_cube_uniform_field.py +0 -0
- {radia-1.3.13 → radia-1.3.14}/examples/ngsolve_integration/mesh_magnetization_import/ngsolve_tet_mesh.vtk +0 -0
- {radia-1.3.13 → radia-1.3.14}/examples/ngsolve_integration/mesh_magnetization_import/sphere_domain_graded_mesh.vtk +0 -0
- {radia-1.3.13 → radia-1.3.14}/examples/ngsolve_integration/test_batch_evaluation.py +0 -0
- {radia-1.3.13 → radia-1.3.14}/examples/ngsolve_integration/test_unit_conversion.py +0 -0
- {radia-1.3.13 → radia-1.3.14}/examples/ngsolve_integration/verify_curl_A_equals_B.py +0 -0
- {radia-1.3.13 → radia-1.3.14}/examples/ngsolve_integration/visualize_field.py +0 -0
- {radia-1.3.13 → radia-1.3.14}/examples/simple_problems/CONVERSION_NOTES.md +0 -0
- {radia-1.3.13 → radia-1.3.14}/examples/simple_problems/README.md +0 -0
- {radia-1.3.13 → radia-1.3.14}/examples/simple_problems/arc_current_dual_magnets.py +0 -0
- {radia-1.3.13 → radia-1.3.14}/examples/simple_problems/arc_current_with_magnet.py +0 -0
- {radia-1.3.13 → radia-1.3.14}/examples/simple_problems/chamfered_pole_piece.py +0 -0
- {radia-1.3.13 → radia-1.3.14}/examples/simple_problems/compare_magpylib.py +0 -0
- {radia-1.3.13 → radia-1.3.14}/examples/simple_problems/cubic_polyhedron_magnet.py +0 -0
- {radia-1.3.13 → radia-1.3.14}/examples/smco_magnet_array/README.md +0 -0
- {radia-1.3.13 → radia-1.3.14}/examples/smco_magnet_array/smbo.pvsm +0 -0
- {radia-1.3.13 → radia-1.3.14}/examples/smco_magnet_array/smco_array.py +0 -0
- {radia-1.3.13 → radia-1.3.14}/examples/smco_magnet_array/smco_array.vtk +0 -0
- {radia-1.3.13 → radia-1.3.14}/examples/smco_magnet_array/smco_field_distribution.vtk +0 -0
- {radia-1.3.13 → radia-1.3.14}/examples/solver_benchmarks/BENCHMARK_RESULTS.md +0 -0
- {radia-1.3.13 → radia-1.3.14}/examples/solver_benchmarks/README.md +0 -0
- {radia-1.3.13 → radia-1.3.14}/examples/solver_benchmarks/benchmark_field_evaluation.py +0 -0
- {radia-1.3.13 → radia-1.3.14}/examples/solver_benchmarks/benchmark_large_scale_comparison.py +0 -0
- {radia-1.3.13 → radia-1.3.14}/examples/solver_benchmarks/benchmark_linear_material.py +0 -0
- {radia-1.3.13 → radia-1.3.14}/examples/solver_benchmarks/benchmark_lu_vs_hmatrix.py +0 -0
- {radia-1.3.13 → radia-1.3.14}/examples/solver_benchmarks/benchmark_matrix_construction.py +0 -0
- {radia-1.3.13 → radia-1.3.14}/examples/solver_benchmarks/benchmark_parallel_construction.py +0 -0
- {radia-1.3.13 → radia-1.3.14}/examples/solver_benchmarks/benchmark_solver.py +0 -0
- {radia-1.3.13 → radia-1.3.14}/examples/solver_benchmarks/benchmark_solver_comparison.py +0 -0
- {radia-1.3.13 → radia-1.3.14}/examples/solver_benchmarks/benchmark_solver_methods.py +0 -0
- {radia-1.3.13 → radia-1.3.14}/examples/solver_benchmarks/benchmark_solver_scaling.py +0 -0
- {radia-1.3.13 → radia-1.3.14}/examples/solver_benchmarks/benchmark_solver_scaling_extended.py +0 -0
- {radia-1.3.13 → radia-1.3.14}/examples/solver_benchmarks/plot_benchmark_results.py +0 -0
- {radia-1.3.13 → radia-1.3.14}/examples/solver_benchmarks/run_all_benchmarks.py +0 -0
- {radia-1.3.13 → radia-1.3.14}/examples/solver_benchmarks/verify_field_accuracy.py +0 -0
- {radia-1.3.13 → radia-1.3.14}/setup.cfg +0 -0
- {radia-1.3.13 → radia-1.3.14}/src/radia/nastran_mesh_import.py +0 -0
- {radia-1.3.13 → radia-1.3.14}/src/radia/netgen_mesh_import.py +0 -0
- {radia-1.3.13 → radia-1.3.14}/src/radia/rad_ngsolve_fast.py +0 -0
- {radia-1.3.13 → radia-1.3.14}/src/radia/radia.pyd +0 -0
- {radia-1.3.13 → radia-1.3.14}/src/radia/radia_coil_builder.py +0 -0
- {radia-1.3.13 → radia-1.3.14}/src/radia/radia_field_cached.py +0 -0
- {radia-1.3.13 → radia-1.3.14}/src/radia/radia_ngsolve.pyd +0 -0
- {radia-1.3.13 → radia-1.3.14}/src/radia/radia_ngsolve_field.py +0 -0
- {radia-1.3.13 → radia-1.3.14}/src/radia/radia_ngsolve_utils.py +0 -0
- {radia-1.3.13 → radia-1.3.14}/src/radia/radia_pyvista_viewer.py +0 -0
- {radia-1.3.13 → radia-1.3.14}/src/radia/radia_vtk_export.py +0 -0
- {radia-1.3.13 → radia-1.3.14}/src/radia.egg-info/dependency_links.txt +0 -0
- {radia-1.3.13 → radia-1.3.14}/src/radia.egg-info/not-zip-safe +0 -0
- {radia-1.3.13 → radia-1.3.14}/src/radia.egg-info/requires.txt +0 -0
- {radia-1.3.13 → radia-1.3.14}/src/radia.egg-info/top_level.txt +0 -0
- {radia-1.3.13 → radia-1.3.14}/tests/README.md +0 -0
- {radia-1.3.13 → radia-1.3.14}/tests/__init__.py +0 -0
- {radia-1.3.13 → radia-1.3.14}/tests/benchmarks/benchmark_correct.py +0 -0
- {radia-1.3.13 → radia-1.3.14}/tests/benchmarks/benchmark_heavy.py +0 -0
- {radia-1.3.13 → radia-1.3.14}/tests/benchmarks/benchmark_openmp.py +0 -0
- {radia-1.3.13 → radia-1.3.14}/tests/benchmarks/benchmark_threads.py +0 -0
- {radia-1.3.13 → radia-1.3.14}/tests/conftest.py +0 -0
- {radia-1.3.13 → radia-1.3.14}/tests/profile_batch_performance.py +0 -0
- {radia-1.3.13 → radia-1.3.14}/tests/test_advanced.py +0 -0
- {radia-1.3.13 → radia-1.3.14}/tests/test_all_spaces.py +0 -0
- {radia-1.3.13 → radia-1.3.14}/tests/test_background_field_debug.py +0 -0
- {radia-1.3.13 → radia-1.3.14}/tests/test_batch_evaluation.py +0 -0
- {radia-1.3.13 → radia-1.3.14}/tests/test_cf_direct.py +0 -0
- {radia-1.3.13 → radia-1.3.14}/tests/test_convergence_hdiv.py +0 -0
- {radia-1.3.13 → radia-1.3.14}/tests/test_curlA_equals_B.py +0 -0
- {radia-1.3.13 → radia-1.3.14}/tests/test_curl_A_detailed.py +0 -0
- {radia-1.3.13 → radia-1.3.14}/tests/test_far_field_accuracy.py +0 -0
- {radia-1.3.13 → radia-1.3.14}/tests/test_fast_preparecache.py +0 -0
- {radia-1.3.13 → radia-1.3.14}/tests/test_fast_simple.py +0 -0
- {radia-1.3.13 → radia-1.3.14}/tests/test_group_operations.py +0 -0
- {radia-1.3.13 → radia-1.3.14}/tests/test_hcurl_vs_hdiv.py +0 -0
- {radia-1.3.13 → radia-1.3.14}/tests/test_l2_norm_debug.py +0 -0
- {radia-1.3.13 → radia-1.3.14}/tests/test_magpylib_comparison.py +0 -0
- {radia-1.3.13 → radia-1.3.14}/tests/test_materials.py +0 -0
- {radia-1.3.13 → radia-1.3.14}/tests/test_memory_allocation_tracking.py +0 -0
- {radia-1.3.13 → radia-1.3.14}/tests/test_mesh_import.py +0 -0
- {radia-1.3.13 → radia-1.3.14}/tests/test_minimal_cached.py +0 -0
- {radia-1.3.13 → radia-1.3.14}/tests/test_moving_magnet_memory.py +0 -0
- {radia-1.3.13 → radia-1.3.14}/tests/test_moving_magnet_memory_diagnosis.py +0 -0
- {radia-1.3.13 → radia-1.3.14}/tests/test_new_material_api.py +0 -0
- {radia-1.3.13 → radia-1.3.14}/tests/test_ngsolve_integration.py +0 -0
- {radia-1.3.13 → radia-1.3.14}/tests/test_objbckg_simple.py +0 -0
- {radia-1.3.13 → radia-1.3.14}/tests/test_objbckgcf_alone.py +0 -0
- {radia-1.3.13 → radia-1.3.14}/tests/test_order1.py +0 -0
- {radia-1.3.13 → radia-1.3.14}/tests/test_parallel_performance.py +0 -0
- {radia-1.3.13 → radia-1.3.14}/tests/test_preparecache_performance.py +0 -0
- {radia-1.3.13 → radia-1.3.14}/tests/test_process_memory.py +0 -0
- {radia-1.3.13 → radia-1.3.14}/tests/test_python_cached_field.py +0 -0
- {radia-1.3.13 → radia-1.3.14}/tests/test_python_cached_simple.py +0 -0
- {radia-1.3.13 → radia-1.3.14}/tests/test_rad_ngsolve.py +0 -0
- {radia-1.3.13 → radia-1.3.14}/tests/test_rad_ngsolve_diagnostic.py +0 -0
- {radia-1.3.13 → radia-1.3.14}/tests/test_rad_ngsolve_function.py +0 -0
- {radia-1.3.13 → radia-1.3.14}/tests/test_radhmat.py +0 -0
- {radia-1.3.13 → radia-1.3.14}/tests/test_radia.py +0 -0
- {radia-1.3.13 → radia-1.3.14}/tests/test_radia_core_memory.py +0 -0
- {radia-1.3.13 → radia-1.3.14}/tests/test_radia_field_computation_memory.py +0 -0
- {radia-1.3.13 → radia-1.3.14}/tests/test_radia_ngsolve_longrun.py +0 -0
- {radia-1.3.13 → radia-1.3.14}/tests/test_radia_ngsolve_memory_leak.py +0 -0
- {radia-1.3.13 → radia-1.3.14}/tests/test_radia_ngsolve_with_cache.py +0 -0
- {radia-1.3.13 → radia-1.3.14}/tests/test_radia_only_memory.py +0 -0
- {radia-1.3.13 → radia-1.3.14}/tests/test_serialization.py +0 -0
- {radia-1.3.13 → radia-1.3.14}/tests/test_set_vs_interpolate.py +0 -0
- {radia-1.3.13 → radia-1.3.14}/tests/test_simple.py +0 -0
- {radia-1.3.13 → radia-1.3.14}/tests/test_simple_fld_leak.py +0 -0
- {radia-1.3.13 → radia-1.3.14}/tests/test_square_coil_analytical.py +0 -0
- {radia-1.3.13 → radia-1.3.14}/tests/test_tetrahedral_solver.py +0 -0
- {radia-1.3.13 → radia-1.3.14}/tests/test_transformations.py +0 -0
- {radia-1.3.13 → radia-1.3.14}/tests/test_type_cast.py +0 -0
- {radia-1.3.13 → radia-1.3.14}/tests/test_unit_conversion_verify.py +0 -0
- {radia-1.3.13 → radia-1.3.14}/tests/test_utils.py +0 -0
- {radia-1.3.13 → radia-1.3.14}/tests/test_vector_potential.py +0 -0
- {radia-1.3.13 → radia-1.3.14}/tests/test_without_B_projection.py +0 -0
- {radia-1.3.13 → radia-1.3.14}/tests/test_without_gridfunction.py +0 -0
- {radia-1.3.13 → radia-1.3.14}/tests/verify_curl_A_equals_B.py +0 -0
|
@@ -4,9 +4,18 @@ This document describes custom extensions to the original ESRF Radia API.
|
|
|
4
4
|
|
|
5
5
|
**Original Documentation**: https://www.esrf.fr/home/Accelerators/instrumentation--equipment/Software/Radia/Documentation/ReferenceGuide.html
|
|
6
6
|
|
|
7
|
-
**Date**: 2025-11
|
|
7
|
+
**Date**: 2025-12-11
|
|
8
|
+
**Version**: 1.3.13
|
|
8
9
|
**Status**: Active development
|
|
9
10
|
|
|
11
|
+
> **Note (v1.3.13):** The solver architecture was significantly updated in v1.3.13:
|
|
12
|
+
> - **Recommended API**: Use `rad.Solve()` for all new code
|
|
13
|
+
> - **Deprecated API**: `RlxPre()`, `RlxMan()`, `SetRelaxSubInterval()` are legacy
|
|
14
|
+
> - **Solver Methods**: LU (Method 0) and BiCGSTAB (Method 1) replaced original Gauss-Seidel
|
|
15
|
+
> - **H-matrix**: Under research, NOT available in v1.3.13
|
|
16
|
+
>
|
|
17
|
+
> See [SOLVER_METHODS.md](SOLVER_METHODS.md) for current solver documentation.
|
|
18
|
+
|
|
10
19
|
---
|
|
11
20
|
|
|
12
21
|
## Table of Contents
|
|
@@ -367,53 +376,24 @@ See detailed benchmark results in [`examples/solver_benchmarks/README.md`](../ex
|
|
|
367
376
|
|
|
368
377
|
## Performance Features
|
|
369
378
|
|
|
370
|
-
### SolverHMatrixDisable/Enable
|
|
371
|
-
|
|
372
|
-
**Purpose**: Control H-matrix (hierarchical matrix) acceleration for field computation.
|
|
373
|
-
|
|
374
|
-
**Syntax**:
|
|
375
|
-
```python
|
|
376
|
-
rad.SolverHMatrixDisable() # Disable H-matrix (use dense matrix)
|
|
377
|
-
rad.SolverHMatrixEnable() # Enable H-matrix (default)
|
|
378
|
-
```
|
|
379
|
-
|
|
380
|
-
**Parameters**: None
|
|
379
|
+
### SolverHMatrixDisable/Enable (DEPRECATED)
|
|
381
380
|
|
|
382
|
-
**
|
|
383
|
-
|
|
384
|
-
|
|
381
|
+
> **NOT AVAILABLE in v1.3.13**
|
|
382
|
+
>
|
|
383
|
+
> H-matrix acceleration was evaluated and found to provide **NO benefit for typical Radia use cases**
|
|
384
|
+
> (single compact objects). These APIs are not available in the current release.
|
|
385
|
+
>
|
|
386
|
+
> See [HMATRIX_EVALUATION.md](HMATRIX_EVALUATION.md) for evaluation results.
|
|
385
387
|
|
|
386
|
-
|
|
387
|
-
- Small problems (N < 1000)
|
|
388
|
-
- Benchmarking and testing
|
|
389
|
-
- Debugging solver behavior
|
|
390
|
-
- When H-matrix overhead exceeds benefit
|
|
388
|
+
~~**Purpose**: Control H-matrix (hierarchical matrix) acceleration for field computation.~~
|
|
391
389
|
|
|
392
|
-
|
|
393
|
-
- Large problems (N > 1000)
|
|
394
|
-
- Production runs
|
|
395
|
-
- When memory is limited
|
|
396
|
-
- Long-range field computations
|
|
397
|
-
|
|
398
|
-
**Usage Example**:
|
|
390
|
+
~~**Syntax**:~~
|
|
399
391
|
```python
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
#
|
|
403
|
-
rad.SolverHMatrixDisable()
|
|
404
|
-
|
|
405
|
-
intrc = rad.RlxPre(obj, obj)
|
|
406
|
-
rad.RlxMan(intrc, 4, 100, 1.0)
|
|
407
|
-
|
|
408
|
-
# For production - re-enable H-matrix
|
|
409
|
-
rad.SolverHMatrixEnable()
|
|
392
|
+
# NOT AVAILABLE in v1.3.13
|
|
393
|
+
# rad.SolverHMatrixDisable()
|
|
394
|
+
# rad.SolverHMatrixEnable()
|
|
410
395
|
```
|
|
411
396
|
|
|
412
|
-
**Notes**:
|
|
413
|
-
- H-matrix is enabled by default
|
|
414
|
-
- Setting persists for entire session until changed
|
|
415
|
-
- Does not affect existing interaction matrices (only new ones)
|
|
416
|
-
|
|
417
397
|
---
|
|
418
398
|
|
|
419
399
|
### SolverTetraMethod
|
|
@@ -517,9 +497,16 @@ rad.SolverTetraMethod(1)
|
|
|
517
497
|
- Added `ObjBckgCF()` for arbitrary background fields
|
|
518
498
|
- Improved NGSolve integration
|
|
519
499
|
|
|
500
|
+
### v1.3.13 (2025-12-11)
|
|
501
|
+
- **Major solver refactoring**: Replaced Implicit SS (Gauss-Seidel) with BiCGSTAB
|
|
502
|
+
- Added `rad.Solve()` as recommended API
|
|
503
|
+
- Deprecated `RlxPre()`, `RlxMan()`, `SetRelaxSubInterval()` (still available for legacy)
|
|
504
|
+
- H-matrix APIs removed (under research)
|
|
505
|
+
- Added OpenBLAS and OpenMP optimizations
|
|
506
|
+
|
|
520
507
|
### v1.0.5 (2025-10-30)
|
|
521
|
-
- Added `SolverHMatrixDisable/Enable()` controls
|
|
522
|
-
- Performance improvements for H-matrix
|
|
508
|
+
- Added `SolverHMatrixDisable/Enable()` controls (REMOVED in v1.3.13)
|
|
509
|
+
- Performance improvements for H-matrix (REMOVED in v1.3.13)
|
|
523
510
|
|
|
524
511
|
---
|
|
525
512
|
|
|
@@ -773,6 +760,6 @@ See [`examples/ngsolve_integration/README.md`](../examples/ngsolve_integration/R
|
|
|
773
760
|
|
|
774
761
|
---
|
|
775
762
|
|
|
776
|
-
**Last Updated**: 2025-11
|
|
763
|
+
**Last Updated**: 2025-12-11
|
|
777
764
|
**Maintained By**: Radia Development Team
|
|
778
765
|
**License**: LGPL-2.1 (modifications), BSD-style (original RADIA from ESRF)
|
|
@@ -1,8 +1,21 @@
|
|
|
1
1
|
# Full H-Matrix Serialization (v1.1.0)
|
|
2
2
|
|
|
3
|
+
> **ARCHIVED DOCUMENT (2025-12-11)**
|
|
4
|
+
>
|
|
5
|
+
> **This document is archived.** H-matrix acceleration was evaluated and found to provide
|
|
6
|
+
> **NO benefit for typical Radia use cases** (single compact objects).
|
|
7
|
+
>
|
|
8
|
+
> See [HMATRIX_EVALUATION.md](HMATRIX_EVALUATION.md) for the evaluation results.
|
|
9
|
+
>
|
|
10
|
+
> The H-matrix serialization feature described below is **NOT available** in v1.3.13+.
|
|
11
|
+
|
|
12
|
+
---
|
|
13
|
+
|
|
3
14
|
## Overview
|
|
4
15
|
|
|
5
|
-
Radia v1.1.0 introduces full H-matrix serialization to disk, providing **instant startup** for repeated simulations with the same geometry. This feature saves the complete H-matrix structure to disk and reloads it on subsequent runs, eliminating the need to rebuild the interaction matrix
|
|
16
|
+
~~Radia v1.1.0 introduces full H-matrix serialization to disk, providing **instant startup** for repeated simulations with the same geometry. This feature saves the complete H-matrix structure to disk and reloads it on subsequent runs, eliminating the need to rebuild the interaction matrix.~~
|
|
17
|
+
|
|
18
|
+
**Status:** H-matrix serialization is NOT available in current releases.
|
|
6
19
|
|
|
7
20
|
**Key Benefits:**
|
|
8
21
|
- **~10x speedup** for solver initialization across program restarts
|
|
@@ -1,11 +1,24 @@
|
|
|
1
1
|
# H-Matrix Acceleration User Guide
|
|
2
2
|
|
|
3
|
-
**
|
|
3
|
+
> **ARCHIVED DOCUMENT (2025-12-11)**
|
|
4
|
+
>
|
|
5
|
+
> **This document is archived.** H-matrix acceleration was evaluated and found to provide
|
|
6
|
+
> **NO benefit for typical Radia use cases** (single compact objects).
|
|
7
|
+
>
|
|
8
|
+
> See [HMATRIX_EVALUATION.md](HMATRIX_EVALUATION.md) for the evaluation results.
|
|
9
|
+
>
|
|
10
|
+
> The H-matrix APIs described below are **NOT available** in v1.3.13+.
|
|
11
|
+
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
**Version:** 1.0.10 (Archived)
|
|
4
15
|
**Date:** 2025-11-13
|
|
5
16
|
|
|
6
17
|
## Overview
|
|
7
18
|
|
|
8
|
-
This guide explains how to use Radia's H-matrix acceleration feature for faster magnetostatic simulations. H-matrix provides up to **350x speedup** for large problems and iterative workflows
|
|
19
|
+
~~This guide explains how to use Radia's H-matrix acceleration feature for faster magnetostatic simulations. H-matrix provides up to **350x speedup** for large problems and iterative workflows.~~
|
|
20
|
+
|
|
21
|
+
**Status:** H-matrix is NOT recommended and NOT available in current releases.
|
|
9
22
|
|
|
10
23
|
## Table of Contents
|
|
11
24
|
|
|
@@ -1,5 +1,16 @@
|
|
|
1
1
|
# Hybrid Variable DOF Solver Design
|
|
2
2
|
|
|
3
|
+
> **FUTURE DEVELOPMENT DOCUMENT (2025-12-11)**
|
|
4
|
+
>
|
|
5
|
+
> **This document describes a PROPOSED feature that is NOT YET IMPLEMENTED.**
|
|
6
|
+
>
|
|
7
|
+
> The current Radia implementation uses **3 DOF per element** for all element types
|
|
8
|
+
> (rectangular blocks, tetrahedral MSC, and hexahedral MSC).
|
|
9
|
+
>
|
|
10
|
+
> The 6-DOF MSC hexahedra described below are **NOT currently available**.
|
|
11
|
+
|
|
12
|
+
---
|
|
13
|
+
|
|
3
14
|
## Overview
|
|
4
15
|
|
|
5
16
|
This document describes the design for extending `radTInteraction` and the LU/BiCGSTAB solvers to support **variable degrees of freedom (DOF)** per element, enabling **hybrid analysis** with:
|
|
@@ -1,7 +1,18 @@
|
|
|
1
1
|
# ML Parameter Tuning for H-Matrix
|
|
2
2
|
|
|
3
|
+
> **ARCHIVED DOCUMENT (2025-12-11)**
|
|
4
|
+
>
|
|
5
|
+
> **This document is archived.** H-matrix acceleration was evaluated and found to provide
|
|
6
|
+
> **NO benefit for typical Radia use cases** (single compact objects).
|
|
7
|
+
>
|
|
8
|
+
> See [HMATRIX_EVALUATION.md](HMATRIX_EVALUATION.md) for the evaluation results.
|
|
9
|
+
>
|
|
10
|
+
> The ML parameter tuning described below is **NOT applicable** in v1.3.13+.
|
|
11
|
+
|
|
12
|
+
---
|
|
13
|
+
|
|
3
14
|
**Date:** 2025-11-13
|
|
4
|
-
**Status:**
|
|
15
|
+
**Status:** ARCHIVED
|
|
5
16
|
|
|
6
17
|
## Overview
|
|
7
18
|
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
# Radia Documentation
|
|
2
|
+
|
|
3
|
+
**Version:** 1.3.13
|
|
4
|
+
**Date:** 2025-12-11
|
|
5
|
+
|
|
6
|
+
This folder contains the official documentation for Radia.
|
|
7
|
+
|
|
8
|
+
## Documentation Organization
|
|
9
|
+
|
|
10
|
+
### Essential Documentation
|
|
11
|
+
|
|
12
|
+
#### Getting Started
|
|
13
|
+
- [SUPPORTED_ELEMENTS.md](SUPPORTED_ELEMENTS.md) - **Supported magnetic element types** (tet, hex, rectangular)
|
|
14
|
+
- [SOLVER_METHODS.md](SOLVER_METHODS.md) - Solver methods (LU, BiCGSTAB)
|
|
15
|
+
- [API_REFERENCE.md](API_REFERENCE.md) - Complete Python API reference
|
|
16
|
+
|
|
17
|
+
#### NGSolve Integration
|
|
18
|
+
- [NGSOLVE_USAGE_GUIDE.md](NGSOLVE_USAGE_GUIDE.md) - How to use Radia with NGSolve
|
|
19
|
+
- [NGSOLVE_INTEGRATION.md](NGSOLVE_INTEGRATION.md) - Integration overview
|
|
20
|
+
|
|
21
|
+
#### Mesh Import
|
|
22
|
+
- [MESH_MSC_API_DESIGN.md](MESH_MSC_API_DESIGN.md) - Mesh import API design
|
|
23
|
+
- [MMM_MSC_IMPLEMENTATION.md](MMM_MSC_IMPLEMENTATION.md) - MMM/MSC implementation details
|
|
24
|
+
|
|
25
|
+
### Technical Documentation
|
|
26
|
+
|
|
27
|
+
#### Implementation Details
|
|
28
|
+
- [MATERIAL_API_IMPLEMENTATION.md](MATERIAL_API_IMPLEMENTATION.md) - Material property implementation
|
|
29
|
+
- [CF_BACKGROUND_FIELD_IMPLEMENTATION.md](CF_BACKGROUND_FIELD_IMPLEMENTATION.md) - Background field implementation
|
|
30
|
+
- [NGSOLVE_CF_BACKGROUND_FIELD_DESIGN.md](NGSOLVE_CF_BACKGROUND_FIELD_DESIGN.md) - NGSolve CoefficientFunction design
|
|
31
|
+
- [API_EXTENSIONS.md](API_EXTENSIONS.md) - Extended features and new APIs
|
|
32
|
+
|
|
33
|
+
#### H-Matrix Evaluation (Research)
|
|
34
|
+
- [HMATRIX_EVALUATION.md](HMATRIX_EVALUATION.md) - **H-matrix evaluation results** (NOT recommended for typical use)
|
|
35
|
+
|
|
36
|
+
**Note:** H-matrix acceleration was evaluated and found to provide no benefit for typical Radia use cases (single compact objects). The following docs are archived for reference:
|
|
37
|
+
- [HMATRIX_USER_GUIDE.md](HMATRIX_USER_GUIDE.md) - (Archived) User guide
|
|
38
|
+
- [HMATRIX_SERIALIZATION.md](HMATRIX_SERIALIZATION.md) - (Archived) Disk cache feature
|
|
39
|
+
|
|
40
|
+
## Quick Start
|
|
41
|
+
|
|
42
|
+
### 1. Supported Element Types
|
|
43
|
+
|
|
44
|
+
Radia currently supports:
|
|
45
|
+
|
|
46
|
+
| Element Type | API | Status |
|
|
47
|
+
|--------------|-----|--------|
|
|
48
|
+
| Axis-aligned rectangular | `rad.ObjRecMag()` + `rad.ObjDivMag()` | **Supported** |
|
|
49
|
+
| Tetrahedron (4-face MSC) | `rad.ObjPolyhdr()` with `TETRA_FACES` | **Supported** |
|
|
50
|
+
| Hexahedron (6-face MSC) | `rad.ObjPolyhdr()` with `HEX_FACES` | **Supported** |
|
|
51
|
+
| General polyhedra (>6 faces) | - | **Not Supported** |
|
|
52
|
+
|
|
53
|
+
See [SUPPORTED_ELEMENTS.md](SUPPORTED_ELEMENTS.md) for details.
|
|
54
|
+
|
|
55
|
+
### 2. Solver Methods
|
|
56
|
+
|
|
57
|
+
| Method | Name | Best For |
|
|
58
|
+
|--------|------|----------|
|
|
59
|
+
| LU Direct | `'lu'` or `0` | Small problems (N < 500) |
|
|
60
|
+
| BiCGSTAB | `'bicgstab'` or `1` | General purpose (default) |
|
|
61
|
+
|
|
62
|
+
See [SOLVER_METHODS.md](SOLVER_METHODS.md) for details.
|
|
63
|
+
|
|
64
|
+
### 3. Basic Example
|
|
65
|
+
|
|
66
|
+
```python
|
|
67
|
+
import radia as rad
|
|
68
|
+
rad.FldUnits('m')
|
|
69
|
+
|
|
70
|
+
# Create soft iron cube
|
|
71
|
+
cube = rad.ObjRecMag([0, 0, 0], [0.1, 0.1, 0.1], [0, 0, 0])
|
|
72
|
+
rad.ObjDivMag(cube, [5, 5, 5]) # 125 elements
|
|
73
|
+
|
|
74
|
+
# Apply material
|
|
75
|
+
mat = rad.MatLin(999.0) # mu_r = 1000
|
|
76
|
+
rad.MatApl(cube, mat)
|
|
77
|
+
|
|
78
|
+
# External field
|
|
79
|
+
ext = rad.ObjBckg([0, 0, 1.0]) # 1 T
|
|
80
|
+
grp = rad.ObjCnt([cube, ext])
|
|
81
|
+
|
|
82
|
+
# Solve
|
|
83
|
+
rad.Solve(grp, 0.0001, 1000)
|
|
84
|
+
|
|
85
|
+
# Get field
|
|
86
|
+
B = rad.Fld(grp, 'b', [0, 0, 0])
|
|
87
|
+
print(f"B at center: {B}")
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
## Additional Resources
|
|
91
|
+
|
|
92
|
+
### Examples
|
|
93
|
+
Working code examples are in [../examples/](../examples/):
|
|
94
|
+
- [simple_problems/](../examples/simple_problems/) - Basic examples
|
|
95
|
+
- [solver_benchmarks/](../examples/solver_benchmarks/) - Performance benchmarks
|
|
96
|
+
- [ngsolve_integration/](../examples/ngsolve_integration/) - NGSolve integration examples
|
|
97
|
+
- [cube_uniform_field/](../examples/cube_uniform_field/) - Cube in uniform field benchmarks
|
|
98
|
+
|
|
99
|
+
### Tests
|
|
100
|
+
Automated tests are in [../tests/](../tests/).
|
|
101
|
+
|
|
102
|
+
## See Also
|
|
103
|
+
|
|
104
|
+
- [Main README](../README.md) - Project overview and installation
|
|
105
|
+
- [CHANGELOG](../CHANGELOG.md) - Version history
|
|
106
|
+
|
|
107
|
+
---
|
|
108
|
+
|
|
109
|
+
**Last Updated:** 2025-12-11
|
|
110
|
+
**Project:** Radia Magnetic Field Computation
|
|
@@ -0,0 +1,207 @@
|
|
|
1
|
+
# Radia Solver Methods
|
|
2
|
+
|
|
3
|
+
**Version:** 1.3.13
|
|
4
|
+
**Date:** 2025-12-11
|
|
5
|
+
|
|
6
|
+
This document describes the available solver methods in Radia.
|
|
7
|
+
|
|
8
|
+
## Available Methods
|
|
9
|
+
|
|
10
|
+
| Method | Name | Complexity | Best For |
|
|
11
|
+
|--------|------|------------|----------|
|
|
12
|
+
| **LU Direct** | `'lu'` or `'direct'` or `0` | O(N^3) | Small problems (N < 500), guaranteed convergence |
|
|
13
|
+
| **BiCGSTAB** (Default) | `'bicgstab'` or `'iterative'` or `1` | O(N^2 * k) | General purpose, large problems |
|
|
14
|
+
|
|
15
|
+
**Note:** Both solvers support linear and nonlinear materials. They use pure Newton-Raphson iteration for nonlinear convergence.
|
|
16
|
+
|
|
17
|
+
## Solver Architecture (v1.3.13)
|
|
18
|
+
|
|
19
|
+
### Historical Background
|
|
20
|
+
|
|
21
|
+
- **Original Radia**: Used Implicit SS (Successive Substitution / Gauss-Seidel) method
|
|
22
|
+
- Slow convergence for high-permeability nonlinear materials
|
|
23
|
+
- Could require hundreds of iterations
|
|
24
|
+
|
|
25
|
+
- **Current Radia (v1.3.13+)**: Replaced with modern solvers
|
|
26
|
+
- **BiCGSTAB** iterative solver for better convergence
|
|
27
|
+
- **LU direct** solver for guaranteed convergence
|
|
28
|
+
- Both use pure Newton-Raphson iteration (no Gauss-Seidel M(H) correction)
|
|
29
|
+
|
|
30
|
+
### Performance (v1.3.13)
|
|
31
|
+
|
|
32
|
+
After OpenBLAS and OpenMP optimization:
|
|
33
|
+
|
|
34
|
+
| N_elem | LU Time | BiCGSTAB Time | Notes |
|
|
35
|
+
|--------|---------|---------------|-------|
|
|
36
|
+
| 104 | 0.13s | 0.13s | Linear material |
|
|
37
|
+
| 200 | 0.44s | 0.43s | Linear material |
|
|
38
|
+
| 390 | 1.72s | 1.71s | Linear material |
|
|
39
|
+
|
|
40
|
+
**Comparison with ELF_MAGIC (nonlinear material):**
|
|
41
|
+
- BiCGSTAB: **0.4x-0.6x** ratio (Radia is faster)
|
|
42
|
+
- LU: 7-11x ratio (more iterations in Radia due to stricter tolerance)
|
|
43
|
+
|
|
44
|
+
## Usage
|
|
45
|
+
|
|
46
|
+
### Basic Usage
|
|
47
|
+
|
|
48
|
+
```python
|
|
49
|
+
import radia as rad
|
|
50
|
+
|
|
51
|
+
# Create geometry
|
|
52
|
+
cube = rad.ObjRecMag([0, 0, 0], [40, 40, 40], [0, 0, 0])
|
|
53
|
+
rad.ObjDivMag(cube, [5, 5, 5])
|
|
54
|
+
mat = rad.MatLin(999.0) # mu_r = 1000
|
|
55
|
+
rad.MatApl(cube, mat)
|
|
56
|
+
|
|
57
|
+
# Apply external field
|
|
58
|
+
ext_field = rad.ObjBckg([0, 0, 1.0]) # 1 T in SI
|
|
59
|
+
grp = rad.ObjCnt([cube, ext_field])
|
|
60
|
+
|
|
61
|
+
# Solve using default method (BiCGSTAB)
|
|
62
|
+
res = rad.Solve(grp, 0.0001, 1000)
|
|
63
|
+
|
|
64
|
+
# Or specify method by name
|
|
65
|
+
res = rad.Solve(grp, 0.0001, 1000, 'bicgstab') # BiCGSTAB (default)
|
|
66
|
+
res = rad.Solve(grp, 0.0001, 1000, 'lu') # LU decomposition
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
### Method Selection Guide
|
|
70
|
+
|
|
71
|
+
```
|
|
72
|
+
Problem size?
|
|
73
|
+
|-- N < 500 --> Either method (LU is more robust)
|
|
74
|
+
|-- N >= 500 --> 'bicgstab' (faster)
|
|
75
|
+
|
|
76
|
+
Material type?
|
|
77
|
+
|-- Linear (MatLin) --> Any solver works
|
|
78
|
+
|-- Nonlinear (MatSatIso, etc.) --> Any solver works
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
## LU Direct Solver (Method 0)
|
|
82
|
+
|
|
83
|
+
Direct solver using LU decomposition with LAPACK `dgesv`.
|
|
84
|
+
|
|
85
|
+
**Pros:**
|
|
86
|
+
- Exact solution per nonlinear iteration
|
|
87
|
+
- Always converges (no divergence risk)
|
|
88
|
+
- Stable for all materials
|
|
89
|
+
|
|
90
|
+
**Cons:**
|
|
91
|
+
- O(N^3) time complexity
|
|
92
|
+
- O(N^2) memory usage
|
|
93
|
+
|
|
94
|
+
**Best for:** Small problems (N < 500), validation/debugging
|
|
95
|
+
|
|
96
|
+
```python
|
|
97
|
+
res = rad.Solve(grp, 0.0001, 100, 'lu') # By name
|
|
98
|
+
res = rad.Solve(grp, 0.0001, 100, 0) # By number
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
## BiCGSTAB Solver (Method 1, Default)
|
|
102
|
+
|
|
103
|
+
BiCGSTAB (Biconjugate Gradient Stabilized) iterative solver with Jacobi preconditioning.
|
|
104
|
+
|
|
105
|
+
**Pros:**
|
|
106
|
+
- O(N^2 * k) time complexity (k = iterations)
|
|
107
|
+
- Fast for medium to large problems
|
|
108
|
+
- Good convergence with preconditioning
|
|
109
|
+
|
|
110
|
+
**Cons:**
|
|
111
|
+
- May not converge for ill-conditioned problems
|
|
112
|
+
|
|
113
|
+
**Best for:** General magnetostatic problems, tetrahedral/hexahedral meshes
|
|
114
|
+
|
|
115
|
+
```python
|
|
116
|
+
res = rad.Solve(grp, 0.0001, 1000) # Default (BiCGSTAB)
|
|
117
|
+
res = rad.Solve(grp, 0.0001, 1000, 'bicgstab') # By name
|
|
118
|
+
res = rad.Solve(grp, 0.0001, 1000, 1) # By number
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
## Convergence Tolerance
|
|
122
|
+
|
|
123
|
+
The `PrecOnMagnetiz` parameter controls convergence:
|
|
124
|
+
|
|
125
|
+
```python
|
|
126
|
+
rad.Solve(grp, tol, max_iter, method)
|
|
127
|
+
# ^^^
|
|
128
|
+
# Relative tolerance: ||dM||/||M||
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
**Comparison with ELF_MAGIC:**
|
|
132
|
+
- ELF default: `0.01` (1%)
|
|
133
|
+
- Radia benchmark: `0.0001` (0.01%)
|
|
134
|
+
|
|
135
|
+
**Recommendation:** Use `0.01` for typical applications, `0.0001` for high precision.
|
|
136
|
+
|
|
137
|
+
## H-Matrix Acceleration
|
|
138
|
+
|
|
139
|
+
**Status:** Under research (not available in v1.3.13)
|
|
140
|
+
|
|
141
|
+
H-matrix (HACApK) acceleration was evaluated but found to provide **no benefit for typical Radia use cases** (single compact objects). This is because:
|
|
142
|
+
|
|
143
|
+
1. All elements are spatially close together
|
|
144
|
+
2. No blocks satisfy the admissibility criterion
|
|
145
|
+
3. All blocks remain dense (no compression benefit)
|
|
146
|
+
|
|
147
|
+
See [HMATRIX_EVALUATION.md](HMATRIX_EVALUATION.md) for details.
|
|
148
|
+
|
|
149
|
+
**Future:** H-matrix may be beneficial for:
|
|
150
|
+
- Multiple well-separated magnetic objects
|
|
151
|
+
- Large-scale problems with distributed geometry
|
|
152
|
+
|
|
153
|
+
## Technical Details
|
|
154
|
+
|
|
155
|
+
### System Equation
|
|
156
|
+
|
|
157
|
+
The MMM (Magnetic Moment Method) system equation:
|
|
158
|
+
|
|
159
|
+
```
|
|
160
|
+
(1/chi - N) * M = H_ext
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
Where:
|
|
164
|
+
- `chi`: Magnetic susceptibility tensor
|
|
165
|
+
- `N`: Interaction matrix (demagnetization coefficients)
|
|
166
|
+
- `M`: Magnetization vector
|
|
167
|
+
- `H_ext`: External field
|
|
168
|
+
|
|
169
|
+
### Nonlinear Iteration
|
|
170
|
+
|
|
171
|
+
For nonlinear materials, outer Newton-Raphson iteration:
|
|
172
|
+
|
|
173
|
+
1. Compute `chi(H)` from current field estimate
|
|
174
|
+
2. Solve linear system with current `chi`
|
|
175
|
+
3. Update magnetization: `M_new = solution`
|
|
176
|
+
4. Check convergence: `||M_new - M_old|| / ||M_new|| < tol`
|
|
177
|
+
5. Repeat until converged
|
|
178
|
+
|
|
179
|
+
### BLAS/LAPACK Optimization (v1.3.13)
|
|
180
|
+
|
|
181
|
+
- `cblas_ddot`, `cblas_dnrm2`, `cblas_daxpy`: Vector operations
|
|
182
|
+
- `cblas_dgemv`: Matrix-vector product
|
|
183
|
+
- `dgesv_`: LU decomposition with partial pivoting
|
|
184
|
+
|
|
185
|
+
### OpenMP Parallelization (v1.3.13)
|
|
186
|
+
|
|
187
|
+
- Interaction matrix O(N^2) construction is parallelized
|
|
188
|
+
- Speedup: Up to 240x for large problems
|
|
189
|
+
|
|
190
|
+
## Migration Notes
|
|
191
|
+
|
|
192
|
+
### From v1.3.6 or earlier
|
|
193
|
+
|
|
194
|
+
| Old Method | New Method | Notes |
|
|
195
|
+
|------------|------------|-------|
|
|
196
|
+
| `8` (Newton) | Removed | Use `0` (LU) or `1` (BiCGSTAB) |
|
|
197
|
+
| `9` (LU) | `0` or `'lu'` | Same functionality |
|
|
198
|
+
| `10` (BiCGSTAB) | `1` or `'bicgstab'` | Same functionality |
|
|
199
|
+
|
|
200
|
+
### From v1.3.12 (Implicit SS removal)
|
|
201
|
+
|
|
202
|
+
Method 2 (Implicit SS / Gauss-Seidel) was removed due to slow convergence for nonlinear materials. Use BiCGSTAB (Method 1) instead.
|
|
203
|
+
|
|
204
|
+
---
|
|
205
|
+
|
|
206
|
+
**Last Updated:** 2025-12-11
|
|
207
|
+
**Project:** Radia Magnetic Field Computation
|