vmecpp 0.5.2__tar.gz → 0.5.4__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.
- {vmecpp-0.5.2 → vmecpp-0.5.4}/.clang-tidy +1 -1
- {vmecpp-0.5.2 → vmecpp-0.5.4}/CMakeLists.txt +30 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/PKG-INFO +19 -2
- {vmecpp-0.5.2 → vmecpp-0.5.4}/README.md +17 -1
- {vmecpp-0.5.2 → vmecpp-0.5.4}/benchmarks/test_benchmarks.py +13 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/environment.yml +1 -0
- vmecpp-0.5.4/flake.lock +27 -0
- vmecpp-0.5.4/flake.nix +95 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/pyproject.toml +1 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/__init__.py +27 -1
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/.bazelrc +3 -2
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/docker/tsan/Dockerfile +9 -6
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/docker/tsan/README.md +3 -12
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/makegrid/makegrid/makegrid.cc +2 -22
- vmecpp-0.5.4/src/vmecpp/cpp/third_party/fftx_codelets/BUILD.bazel +33 -0
- vmecpp-0.5.4/src/vmecpp/cpp/third_party/fftx_codelets/README.md +155 -0
- vmecpp-0.5.4/src/vmecpp/cpp/third_party/fftx_codelets/codegen/dftbatch-sizes.txt +83 -0
- vmecpp-0.5.4/src/vmecpp/cpp/third_party/fftx_codelets/codegen/fftx_prdftbat-frame.g +144 -0
- vmecpp-0.5.4/src/vmecpp/cpp/third_party/fftx_codelets/codegen/post_process.py +63 -0
- vmecpp-0.5.4/src/vmecpp/cpp/third_party/fftx_codelets/include/fftx_minimal.hpp +31 -0
- vmecpp-0.5.4/src/vmecpp/cpp/third_party/fftx_codelets/include/omega64.h +103 -0
- vmecpp-0.5.4/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_iprdftbat_cpu_srcs/fftx_iprdftbat_16_bat_120_APar_APar_CPU.cpp +104 -0
- vmecpp-0.5.4/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_iprdftbat_cpu_srcs/fftx_iprdftbat_16_bat_144_APar_APar_CPU.cpp +104 -0
- vmecpp-0.5.4/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_iprdftbat_cpu_srcs/fftx_iprdftbat_16_bat_168_APar_APar_CPU.cpp +104 -0
- vmecpp-0.5.4/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_iprdftbat_cpu_srcs/fftx_iprdftbat_16_bat_192_APar_APar_CPU.cpp +104 -0
- vmecpp-0.5.4/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_iprdftbat_cpu_srcs/fftx_iprdftbat_16_bat_216_APar_APar_CPU.cpp +104 -0
- vmecpp-0.5.4/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_iprdftbat_cpu_srcs/fftx_iprdftbat_16_bat_72_APar_APar_CPU.cpp +104 -0
- vmecpp-0.5.4/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_iprdftbat_cpu_srcs/fftx_iprdftbat_16_bat_96_APar_APar_CPU.cpp +104 -0
- vmecpp-0.5.4/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_iprdftbat_cpu_srcs/fftx_iprdftbat_20_bat_120_APar_APar_CPU.cpp +145 -0
- vmecpp-0.5.4/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_iprdftbat_cpu_srcs/fftx_iprdftbat_20_bat_144_APar_APar_CPU.cpp +145 -0
- vmecpp-0.5.4/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_iprdftbat_cpu_srcs/fftx_iprdftbat_20_bat_168_APar_APar_CPU.cpp +145 -0
- vmecpp-0.5.4/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_iprdftbat_cpu_srcs/fftx_iprdftbat_20_bat_192_APar_APar_CPU.cpp +145 -0
- vmecpp-0.5.4/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_iprdftbat_cpu_srcs/fftx_iprdftbat_20_bat_216_APar_APar_CPU.cpp +145 -0
- vmecpp-0.5.4/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_iprdftbat_cpu_srcs/fftx_iprdftbat_20_bat_72_APar_APar_CPU.cpp +145 -0
- vmecpp-0.5.4/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_iprdftbat_cpu_srcs/fftx_iprdftbat_20_bat_96_APar_APar_CPU.cpp +145 -0
- vmecpp-0.5.4/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_iprdftbat_cpu_srcs/fftx_iprdftbat_24_bat_120_APar_APar_CPU.cpp +168 -0
- vmecpp-0.5.4/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_iprdftbat_cpu_srcs/fftx_iprdftbat_24_bat_144_APar_APar_CPU.cpp +168 -0
- vmecpp-0.5.4/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_iprdftbat_cpu_srcs/fftx_iprdftbat_24_bat_168_APar_APar_CPU.cpp +168 -0
- vmecpp-0.5.4/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_iprdftbat_cpu_srcs/fftx_iprdftbat_24_bat_192_APar_APar_CPU.cpp +168 -0
- vmecpp-0.5.4/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_iprdftbat_cpu_srcs/fftx_iprdftbat_24_bat_216_APar_APar_CPU.cpp +168 -0
- vmecpp-0.5.4/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_iprdftbat_cpu_srcs/fftx_iprdftbat_24_bat_72_APar_APar_CPU.cpp +168 -0
- vmecpp-0.5.4/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_iprdftbat_cpu_srcs/fftx_iprdftbat_24_bat_96_APar_APar_CPU.cpp +168 -0
- vmecpp-0.5.4/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_iprdftbat_cpu_srcs/fftx_iprdftbat_28_bat_120_APar_APar_CPU.cpp +222 -0
- vmecpp-0.5.4/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_iprdftbat_cpu_srcs/fftx_iprdftbat_28_bat_144_APar_APar_CPU.cpp +222 -0
- vmecpp-0.5.4/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_iprdftbat_cpu_srcs/fftx_iprdftbat_28_bat_168_APar_APar_CPU.cpp +222 -0
- vmecpp-0.5.4/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_iprdftbat_cpu_srcs/fftx_iprdftbat_28_bat_192_APar_APar_CPU.cpp +222 -0
- vmecpp-0.5.4/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_iprdftbat_cpu_srcs/fftx_iprdftbat_28_bat_216_APar_APar_CPU.cpp +222 -0
- vmecpp-0.5.4/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_iprdftbat_cpu_srcs/fftx_iprdftbat_28_bat_72_APar_APar_CPU.cpp +222 -0
- vmecpp-0.5.4/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_iprdftbat_cpu_srcs/fftx_iprdftbat_28_bat_96_APar_APar_CPU.cpp +222 -0
- vmecpp-0.5.4/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_iprdftbat_cpu_srcs/fftx_iprdftbat_32_bat_120_APar_APar_CPU.cpp +207 -0
- vmecpp-0.5.4/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_iprdftbat_cpu_srcs/fftx_iprdftbat_32_bat_144_APar_APar_CPU.cpp +207 -0
- vmecpp-0.5.4/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_iprdftbat_cpu_srcs/fftx_iprdftbat_32_bat_168_APar_APar_CPU.cpp +207 -0
- vmecpp-0.5.4/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_iprdftbat_cpu_srcs/fftx_iprdftbat_32_bat_192_APar_APar_CPU.cpp +207 -0
- vmecpp-0.5.4/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_iprdftbat_cpu_srcs/fftx_iprdftbat_32_bat_216_APar_APar_CPU.cpp +207 -0
- vmecpp-0.5.4/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_iprdftbat_cpu_srcs/fftx_iprdftbat_32_bat_72_APar_APar_CPU.cpp +207 -0
- vmecpp-0.5.4/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_iprdftbat_cpu_srcs/fftx_iprdftbat_32_bat_96_APar_APar_CPU.cpp +207 -0
- vmecpp-0.5.4/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_iprdftbat_cpu_srcs/fftx_iprdftbat_36_bat_120_APar_APar_CPU.cpp +212 -0
- vmecpp-0.5.4/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_iprdftbat_cpu_srcs/fftx_iprdftbat_36_bat_144_APar_APar_CPU.cpp +212 -0
- vmecpp-0.5.4/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_iprdftbat_cpu_srcs/fftx_iprdftbat_36_bat_168_APar_APar_CPU.cpp +212 -0
- vmecpp-0.5.4/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_iprdftbat_cpu_srcs/fftx_iprdftbat_36_bat_192_APar_APar_CPU.cpp +212 -0
- vmecpp-0.5.4/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_iprdftbat_cpu_srcs/fftx_iprdftbat_36_bat_216_APar_APar_CPU.cpp +212 -0
- vmecpp-0.5.4/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_iprdftbat_cpu_srcs/fftx_iprdftbat_36_bat_72_APar_APar_CPU.cpp +212 -0
- vmecpp-0.5.4/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_iprdftbat_cpu_srcs/fftx_iprdftbat_36_bat_96_APar_APar_CPU.cpp +212 -0
- vmecpp-0.5.4/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_iprdftbat_cpu_srcs/fftx_iprdftbat_40_bat_120_APar_APar_CPU.cpp +211 -0
- vmecpp-0.5.4/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_iprdftbat_cpu_srcs/fftx_iprdftbat_40_bat_144_APar_APar_CPU.cpp +211 -0
- vmecpp-0.5.4/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_iprdftbat_cpu_srcs/fftx_iprdftbat_40_bat_168_APar_APar_CPU.cpp +211 -0
- vmecpp-0.5.4/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_iprdftbat_cpu_srcs/fftx_iprdftbat_40_bat_192_APar_APar_CPU.cpp +211 -0
- vmecpp-0.5.4/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_iprdftbat_cpu_srcs/fftx_iprdftbat_40_bat_216_APar_APar_CPU.cpp +211 -0
- vmecpp-0.5.4/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_iprdftbat_cpu_srcs/fftx_iprdftbat_40_bat_72_APar_APar_CPU.cpp +211 -0
- vmecpp-0.5.4/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_iprdftbat_cpu_srcs/fftx_iprdftbat_40_bat_96_APar_APar_CPU.cpp +211 -0
- vmecpp-0.5.4/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_iprdftbat_cpu_srcs/fftx_iprdftbat_cpu_decls.h +744 -0
- vmecpp-0.5.4/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_iprdftbat_cpu_srcs/fftx_iprdftbat_cpu_libentry.cpp +138 -0
- vmecpp-0.5.4/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_iprdftbat_cpu_srcs/fftx_iprdftbat_cpu_metadata.cpp +665 -0
- vmecpp-0.5.4/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_iprdftbat_cpu_srcs/fftx_iprdftbat_cpu_public.h +80 -0
- vmecpp-0.5.4/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_prdftbat_cpu_srcs/fftx_prdftbat_16_bat_120_APar_APar_CPU.cpp +106 -0
- vmecpp-0.5.4/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_prdftbat_cpu_srcs/fftx_prdftbat_16_bat_144_APar_APar_CPU.cpp +106 -0
- vmecpp-0.5.4/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_prdftbat_cpu_srcs/fftx_prdftbat_16_bat_168_APar_APar_CPU.cpp +106 -0
- vmecpp-0.5.4/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_prdftbat_cpu_srcs/fftx_prdftbat_16_bat_192_APar_APar_CPU.cpp +106 -0
- vmecpp-0.5.4/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_prdftbat_cpu_srcs/fftx_prdftbat_16_bat_216_APar_APar_CPU.cpp +106 -0
- vmecpp-0.5.4/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_prdftbat_cpu_srcs/fftx_prdftbat_16_bat_72_APar_APar_CPU.cpp +106 -0
- vmecpp-0.5.4/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_prdftbat_cpu_srcs/fftx_prdftbat_16_bat_96_APar_APar_CPU.cpp +106 -0
- vmecpp-0.5.4/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_prdftbat_cpu_srcs/fftx_prdftbat_20_bat_120_APar_APar_CPU.cpp +148 -0
- vmecpp-0.5.4/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_prdftbat_cpu_srcs/fftx_prdftbat_20_bat_144_APar_APar_CPU.cpp +148 -0
- vmecpp-0.5.4/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_prdftbat_cpu_srcs/fftx_prdftbat_20_bat_168_APar_APar_CPU.cpp +148 -0
- vmecpp-0.5.4/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_prdftbat_cpu_srcs/fftx_prdftbat_20_bat_192_APar_APar_CPU.cpp +148 -0
- vmecpp-0.5.4/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_prdftbat_cpu_srcs/fftx_prdftbat_20_bat_216_APar_APar_CPU.cpp +148 -0
- vmecpp-0.5.4/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_prdftbat_cpu_srcs/fftx_prdftbat_20_bat_72_APar_APar_CPU.cpp +148 -0
- vmecpp-0.5.4/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_prdftbat_cpu_srcs/fftx_prdftbat_20_bat_96_APar_APar_CPU.cpp +148 -0
- vmecpp-0.5.4/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_prdftbat_cpu_srcs/fftx_prdftbat_24_bat_120_APar_APar_CPU.cpp +143 -0
- vmecpp-0.5.4/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_prdftbat_cpu_srcs/fftx_prdftbat_24_bat_144_APar_APar_CPU.cpp +143 -0
- vmecpp-0.5.4/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_prdftbat_cpu_srcs/fftx_prdftbat_24_bat_168_APar_APar_CPU.cpp +143 -0
- vmecpp-0.5.4/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_prdftbat_cpu_srcs/fftx_prdftbat_24_bat_192_APar_APar_CPU.cpp +143 -0
- vmecpp-0.5.4/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_prdftbat_cpu_srcs/fftx_prdftbat_24_bat_216_APar_APar_CPU.cpp +143 -0
- vmecpp-0.5.4/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_prdftbat_cpu_srcs/fftx_prdftbat_24_bat_72_APar_APar_CPU.cpp +143 -0
- vmecpp-0.5.4/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_prdftbat_cpu_srcs/fftx_prdftbat_24_bat_96_APar_APar_CPU.cpp +143 -0
- vmecpp-0.5.4/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_prdftbat_cpu_srcs/fftx_prdftbat_28_bat_120_APar_APar_CPU.cpp +226 -0
- vmecpp-0.5.4/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_prdftbat_cpu_srcs/fftx_prdftbat_28_bat_144_APar_APar_CPU.cpp +226 -0
- vmecpp-0.5.4/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_prdftbat_cpu_srcs/fftx_prdftbat_28_bat_168_APar_APar_CPU.cpp +226 -0
- vmecpp-0.5.4/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_prdftbat_cpu_srcs/fftx_prdftbat_28_bat_192_APar_APar_CPU.cpp +226 -0
- vmecpp-0.5.4/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_prdftbat_cpu_srcs/fftx_prdftbat_28_bat_216_APar_APar_CPU.cpp +226 -0
- vmecpp-0.5.4/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_prdftbat_cpu_srcs/fftx_prdftbat_28_bat_72_APar_APar_CPU.cpp +226 -0
- vmecpp-0.5.4/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_prdftbat_cpu_srcs/fftx_prdftbat_28_bat_96_APar_APar_CPU.cpp +226 -0
- vmecpp-0.5.4/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_prdftbat_cpu_srcs/fftx_prdftbat_32_bat_120_APar_APar_CPU.cpp +176 -0
- vmecpp-0.5.4/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_prdftbat_cpu_srcs/fftx_prdftbat_32_bat_144_APar_APar_CPU.cpp +176 -0
- vmecpp-0.5.4/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_prdftbat_cpu_srcs/fftx_prdftbat_32_bat_168_APar_APar_CPU.cpp +176 -0
- vmecpp-0.5.4/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_prdftbat_cpu_srcs/fftx_prdftbat_32_bat_192_APar_APar_CPU.cpp +176 -0
- vmecpp-0.5.4/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_prdftbat_cpu_srcs/fftx_prdftbat_32_bat_216_APar_APar_CPU.cpp +176 -0
- vmecpp-0.5.4/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_prdftbat_cpu_srcs/fftx_prdftbat_32_bat_72_APar_APar_CPU.cpp +176 -0
- vmecpp-0.5.4/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_prdftbat_cpu_srcs/fftx_prdftbat_32_bat_96_APar_APar_CPU.cpp +176 -0
- vmecpp-0.5.4/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_prdftbat_cpu_srcs/fftx_prdftbat_36_bat_120_APar_APar_CPU.cpp +1179 -0
- vmecpp-0.5.4/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_prdftbat_cpu_srcs/fftx_prdftbat_36_bat_144_APar_APar_CPU.cpp +1179 -0
- vmecpp-0.5.4/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_prdftbat_cpu_srcs/fftx_prdftbat_36_bat_168_APar_APar_CPU.cpp +1179 -0
- vmecpp-0.5.4/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_prdftbat_cpu_srcs/fftx_prdftbat_36_bat_192_APar_APar_CPU.cpp +1179 -0
- vmecpp-0.5.4/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_prdftbat_cpu_srcs/fftx_prdftbat_36_bat_216_APar_APar_CPU.cpp +1179 -0
- vmecpp-0.5.4/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_prdftbat_cpu_srcs/fftx_prdftbat_36_bat_72_APar_APar_CPU.cpp +1179 -0
- vmecpp-0.5.4/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_prdftbat_cpu_srcs/fftx_prdftbat_36_bat_96_APar_APar_CPU.cpp +1179 -0
- vmecpp-0.5.4/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_prdftbat_cpu_srcs/fftx_prdftbat_40_bat_120_APar_APar_CPU.cpp +1644 -0
- vmecpp-0.5.4/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_prdftbat_cpu_srcs/fftx_prdftbat_40_bat_144_APar_APar_CPU.cpp +1644 -0
- vmecpp-0.5.4/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_prdftbat_cpu_srcs/fftx_prdftbat_40_bat_168_APar_APar_CPU.cpp +1644 -0
- vmecpp-0.5.4/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_prdftbat_cpu_srcs/fftx_prdftbat_40_bat_192_APar_APar_CPU.cpp +1644 -0
- vmecpp-0.5.4/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_prdftbat_cpu_srcs/fftx_prdftbat_40_bat_216_APar_APar_CPU.cpp +1644 -0
- vmecpp-0.5.4/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_prdftbat_cpu_srcs/fftx_prdftbat_40_bat_72_APar_APar_CPU.cpp +1644 -0
- vmecpp-0.5.4/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_prdftbat_cpu_srcs/fftx_prdftbat_40_bat_96_APar_APar_CPU.cpp +1644 -0
- vmecpp-0.5.4/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_prdftbat_cpu_srcs/fftx_prdftbat_cpu_decls.h +744 -0
- vmecpp-0.5.4/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_prdftbat_cpu_srcs/fftx_prdftbat_cpu_libentry.cpp +138 -0
- vmecpp-0.5.4/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_prdftbat_cpu_srcs/fftx_prdftbat_cpu_metadata.cpp +665 -0
- vmecpp-0.5.4/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_prdftbat_cpu_srcs/fftx_prdftbat_cpu_public.h +79 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/common/flow_control/flow_control.cc +9 -3
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/common/magnetic_configuration_lib/magnetic_configuration_lib.cc +16 -30
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/common/magnetic_configuration_lib/magnetic_configuration_lib.h +6 -2
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/common/magnetic_configuration_lib/magnetic_configuration_lib_test.cc +16 -4
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/common/magnetic_field_provider/magnetic_field_provider_lib.cc +44 -44
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/common/makegrid_lib/BUILD.bazel +1 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/common/makegrid_lib/makegrid_lib.cc +42 -6
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/common/makegrid_lib/makegrid_lib_test.cc +199 -94
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/common/util/util.cc +17 -42
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/common/vmec_indata/vmec_indata_test.cc +3 -6
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/free_boundary/laplace_solver/BUILD.bazel +13 -0
- vmecpp-0.5.4/src/vmecpp/cpp/vmecpp/free_boundary/laplace_solver/laplace_solver.cc +495 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/free_boundary/laplace_solver/laplace_solver.h +45 -20
- vmecpp-0.5.4/src/vmecpp/cpp/vmecpp/free_boundary/laplace_solver/laplace_solver_test.cc +268 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/free_boundary/nestor/nestor.cc +1 -2
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/free_boundary/singular_integrals/singular_integrals.cc +129 -21
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/free_boundary/singular_integrals/singular_integrals.h +6 -5
- vmecpp-0.5.4/src/vmecpp/cpp/vmecpp/free_boundary/singular_integrals/singular_integrals_test.cc +267 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/vmec/fourier_coefficients/fourier_coefficients.cc +1 -1
- vmecpp-0.5.4/src/vmecpp/cpp/vmecpp/vmec/ideal_mhd_model/BUILD.bazel +108 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/vmec/ideal_mhd_model/CMakeLists.txt +4 -0
- vmecpp-0.5.4/src/vmecpp/cpp/vmecpp/vmec/ideal_mhd_model/dft_toroidal.cc +353 -0
- vmecpp-0.5.4/src/vmecpp/cpp/vmecpp/vmec/ideal_mhd_model/dft_toroidal.h +37 -0
- vmecpp-0.5.4/src/vmecpp/cpp/vmecpp/vmec/ideal_mhd_model/fft_toroidal.cc +647 -0
- vmecpp-0.5.4/src/vmecpp/cpp/vmecpp/vmec/ideal_mhd_model/fft_toroidal.h +128 -0
- vmecpp-0.5.4/src/vmecpp/cpp/vmecpp/vmec/ideal_mhd_model/fft_toroidal_bench.cc +532 -0
- vmecpp-0.5.4/src/vmecpp/cpp/vmecpp/vmec/ideal_mhd_model/fft_toroidal_test.cc +279 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/vmec/ideal_mhd_model/ideal_mhd_model.cc +26 -338
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/vmec/ideal_mhd_model/ideal_mhd_model.h +11 -21
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/vmec/output_quantities/output_quantities.cc +178 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/vmec/output_quantities/output_quantities.h +12 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/vmec/pybind11/pybind_vmec.cc +7 -1
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/vmec/vmec/vmec.cc +6 -1
- vmecpp-0.5.2/src/vmecpp/cpp/vmecpp/free_boundary/laplace_solver/laplace_solver.cc +0 -416
- vmecpp-0.5.2/src/vmecpp/cpp/vmecpp/free_boundary/singular_integrals/singular_integrals_test.cc +0 -59
- vmecpp-0.5.2/src/vmecpp/cpp/vmecpp/vmec/ideal_mhd_model/BUILD.bazel +0 -27
- {vmecpp-0.5.2 → vmecpp-0.5.4}/.clang-format +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/.gitignore +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/.gitmodules +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/.pre-commit-config.yaml +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/AGENTS.md +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/CITATION.cff +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/CLAUDE.md +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/CODEOWNERS +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/LICENSE.txt +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/VMECPP_NAMING_GUIDE.md +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/docker/Dockerfile +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/docker/README.md +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/CMakeLists.txt +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/CMakeLists.txt +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/__main__.py +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/_free_boundary.py +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/_pydantic_numpy.py +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/_util.py +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/.bazelversion +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/.gitattributes +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/CMakeLists.txt +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/MODULE.bazel +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/MODULE.bazel.lock +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/WORKSPACE.bazel +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/docker/tsan/background_info.md +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/docker/tsan/llvm_toolchain/BUILD +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/docker/tsan/llvm_toolchain/cc_toolchain_config.bzl +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/makegrid/README.md +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/makegrid/example_inputs/makegrid_parameters.json +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/makegrid/makegrid/BUILD.bazel +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/third_party/hdf5/BUILD.bazel +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/third_party/netcdf4/BUILD.bazel +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/util/CMakeLists.txt +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/util/file_io/BUILD.bazel +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/util/file_io/CMakeLists.txt +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/util/file_io/file_io.cc +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/util/file_io/file_io.h +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/util/file_io/file_io_test.cc +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/util/hdf5_io/BUILD.bazel +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/util/hdf5_io/CMakeLists.txt +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/util/hdf5_io/hdf5_io.cc +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/util/hdf5_io/hdf5_io.h +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/util/json_io/BUILD.bazel +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/util/json_io/CMakeLists.txt +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/util/json_io/json_io.cc +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/util/json_io/json_io.h +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/util/json_io/json_io_test.cc +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/util/netcdf_io/BUILD.bazel +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/util/netcdf_io/CMakeLists.txt +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/util/netcdf_io/example_netcdf.nc +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/util/netcdf_io/netcdf_io.cc +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/util/netcdf_io/netcdf_io.h +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/util/netcdf_io/netcdf_io_test.cc +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/util/test_data/BUILD.bazel +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/util/test_data/empty.txt +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/util/test_data/lorem.txt +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/util/testing/BUILD.bazel +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/util/testing/CMakeLists.txt +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/util/testing/numerical_comparison_lib.cc +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/util/testing/numerical_comparison_lib.h +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/util/testing/numerical_comparison_test.cc +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/CMakeLists.txt +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/common/CMakeLists.txt +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/common/composed_types_definition/BUILD.bazel +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/common/composed_types_definition/CMakeLists.txt +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/common/composed_types_definition/composed_types.h +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/common/composed_types_lib/BUILD.bazel +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/common/composed_types_lib/CMakeLists.txt +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/common/composed_types_lib/composed_types_lib.cc +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/common/composed_types_lib/composed_types_lib.h +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/common/composed_types_lib/composed_types_lib_test.cc +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/common/flow_control/BUILD.bazel +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/common/flow_control/CMakeLists.txt +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/common/flow_control/flow_control.h +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/common/fourier_basis_fast_poloidal/BUILD.bazel +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/common/fourier_basis_fast_poloidal/CMakeLists.txt +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/common/fourier_basis_fast_poloidal/fourier_basis_fast_poloidal.cc +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/common/fourier_basis_fast_poloidal/fourier_basis_fast_poloidal.h +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/common/fourier_basis_fast_poloidal/fourier_basis_fast_poloidal_test.cc +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/common/fourier_basis_fast_toroidal/BUILD.bazel +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/common/fourier_basis_fast_toroidal/CMakeLists.txt +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/common/fourier_basis_fast_toroidal/fourier_basis_fast_toroidal.cc +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/common/fourier_basis_fast_toroidal/fourier_basis_fast_toroidal.h +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/common/fourier_basis_fast_toroidal/fourier_basis_fast_toroidal_test.cc +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/common/magnetic_configuration_definition/BUILD.bazel +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/common/magnetic_configuration_definition/CMakeLists.txt +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/common/magnetic_configuration_definition/magnetic_configuration.h +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/common/magnetic_configuration_lib/BUILD.bazel +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/common/magnetic_configuration_lib/CMakeLists.txt +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/common/magnetic_field_provider/BUILD.bazel +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/common/magnetic_field_provider/CMakeLists.txt +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/common/magnetic_field_provider/magnetic_field_provider_lib.h +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/common/magnetic_field_provider/magnetic_field_provider_lib_test.cc +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/common/makegrid_lib/CMakeLists.txt +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/common/makegrid_lib/create_reference_mgrid.sh +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/common/makegrid_lib/makegrid_lib.h +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/common/sizes/BUILD.bazel +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/common/sizes/CMakeLists.txt +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/common/sizes/sizes.cc +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/common/sizes/sizes.h +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/common/util/BUILD.bazel +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/common/util/CMakeLists.txt +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/common/util/util.h +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/common/util/util_test.cc +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/common/vmec_indata/BUILD.bazel +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/common/vmec_indata/CMakeLists.txt +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/common/vmec_indata/boundary_from_json.cc +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/common/vmec_indata/boundary_from_json.h +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/common/vmec_indata/vmec_indata.cc +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/common/vmec_indata/vmec_indata.h +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/free_boundary/CMakeLists.txt +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/free_boundary/external_magnetic_field/BUILD.bazel +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/free_boundary/external_magnetic_field/CMakeLists.txt +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/free_boundary/external_magnetic_field/external_magnetic_field.cc +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/free_boundary/external_magnetic_field/external_magnetic_field.h +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/free_boundary/free_boundary_base/BUILD.bazel +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/free_boundary/free_boundary_base/CMakeLists.txt +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/free_boundary/free_boundary_base/free_boundary_base.h +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/free_boundary/laplace_solver/CMakeLists.txt +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/free_boundary/mgrid_provider/BUILD.bazel +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/free_boundary/mgrid_provider/CMakeLists.txt +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/free_boundary/mgrid_provider/mgrid_provider.cc +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/free_boundary/mgrid_provider/mgrid_provider.h +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/free_boundary/nestor/BUILD.bazel +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/free_boundary/nestor/CMakeLists.txt +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/free_boundary/nestor/nestor.h +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/free_boundary/only_coils/BUILD.bazel +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/free_boundary/only_coils/CMakeLists.txt +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/free_boundary/only_coils/only_coils.cc +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/free_boundary/only_coils/only_coils.h +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/free_boundary/regularized_integrals/BUILD.bazel +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/free_boundary/regularized_integrals/CMakeLists.txt +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/free_boundary/regularized_integrals/regularized_integrals.cc +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/free_boundary/regularized_integrals/regularized_integrals.h +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/free_boundary/singular_integrals/BUILD.bazel +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/free_boundary/singular_integrals/CMakeLists.txt +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/free_boundary/surface_geometry/BUILD.bazel +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/free_boundary/surface_geometry/CMakeLists.txt +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/free_boundary/surface_geometry/surface_geometry.cc +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/free_boundary/surface_geometry/surface_geometry.h +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/free_boundary/surface_geometry/surface_geometry_test.cc +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/free_boundary/surface_geometry_mockup/BUILD.bazel +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/free_boundary/surface_geometry_mockup/lcfs.SurfaceRZFourier.csv +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/free_boundary/surface_geometry_mockup/surface_geometry_mockup.cc +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/free_boundary/surface_geometry_mockup/surface_geometry_mockup.h +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/free_boundary/tangential_partitioning/BUILD.bazel +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/free_boundary/tangential_partitioning/CMakeLists.txt +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/free_boundary/tangential_partitioning/tangential_partitioning.cc +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/free_boundary/tangential_partitioning/tangential_partitioning.h +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/simsopt_compat/README.md +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/simsopt_compat/__init__.py +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/simsopt_compat/_indata_to_surfacerzfourier.py +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/vmec/CMakeLists.txt +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/vmec/boundaries/BUILD.bazel +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/vmec/boundaries/CMakeLists.txt +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/vmec/boundaries/boundaries.cc +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/vmec/boundaries/boundaries.h +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/vmec/boundaries/guess_magnetic_axis.cc +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/vmec/boundaries/guess_magnetic_axis.h +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/vmec/fourier_coefficients/BUILD.bazel +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/vmec/fourier_coefficients/CMakeLists.txt +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/vmec/fourier_coefficients/fourier_coefficients.h +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/vmec/fourier_forces/BUILD.bazel +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/vmec/fourier_forces/CMakeLists.txt +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/vmec/fourier_forces/fourier_forces.cc +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/vmec/fourier_forces/fourier_forces.h +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/vmec/fourier_forces/fourier_forces_test.cc +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/vmec/fourier_geometry/BUILD.bazel +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/vmec/fourier_geometry/CMakeLists.txt +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/vmec/fourier_geometry/fourier_geometry.cc +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/vmec/fourier_geometry/fourier_geometry.h +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/vmec/fourier_velocity/BUILD.bazel +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/vmec/fourier_velocity/CMakeLists.txt +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/vmec/fourier_velocity/fourier_velocity.cc +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/vmec/fourier_velocity/fourier_velocity.h +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/vmec/handover_storage/BUILD.bazel +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/vmec/handover_storage/CMakeLists.txt +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/vmec/handover_storage/handover_storage.cc +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/vmec/handover_storage/handover_storage.h +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/vmec/ideal_mhd_model/dft_data.h +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/vmec/iteration_logger/BUILD.bazel +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/vmec/iteration_logger/CMakeLists.txt +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/vmec/iteration_logger/iteration_logger.cc +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/vmec/iteration_logger/iteration_logger.h +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/vmec/output_quantities/BUILD.bazel +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/vmec/output_quantities/CMakeLists.txt +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/vmec/output_quantities/output_quantities_io_test.cc +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/vmec/output_quantities/output_quantities_test.cc +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/vmec/output_quantities/test_helpers.h +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/vmec/profile_parameterization_data/BUILD.bazel +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/vmec/profile_parameterization_data/CMakeLists.txt +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/vmec/profile_parameterization_data/profile_parameterization_data.cc +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/vmec/profile_parameterization_data/profile_parameterization_data.h +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/vmec/pybind11/.gitignore +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/vmec/pybind11/BUILD.bazel +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/vmec/radial_partitioning/BUILD.bazel +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/vmec/radial_partitioning/CMakeLists.txt +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/vmec/radial_partitioning/radial_partitioning.cc +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/vmec/radial_partitioning/radial_partitioning.h +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/vmec/radial_partitioning/radial_partitioning_test.cc +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/vmec/radial_profiles/BUILD.bazel +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/vmec/radial_profiles/CMakeLists.txt +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/vmec/radial_profiles/radial_profiles.cc +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/vmec/radial_profiles/radial_profiles.h +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/vmec/thread_local_storage/BUILD.bazel +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/vmec/thread_local_storage/CMakeLists.txt +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/vmec/thread_local_storage/thread_local_storage.cc +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/vmec/thread_local_storage/thread_local_storage.h +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/vmec/vmec/BUILD.bazel +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/vmec/vmec/CMakeLists.txt +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/vmec/vmec/vmec.h +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/vmec/vmec/vmec_in_memory_mgrid_test.cc +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/vmec/vmec/vmec_test.cc +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/vmec/vmec_constants/BUILD.bazel +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/vmec/vmec_constants/CMakeLists.txt +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/vmec/vmec_constants/vmec_algorithm_constants.h +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/vmec/vmec_constants/vmec_constants.cc +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/vmec/vmec_constants/vmec_constants.h +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/vmec/vmec_standalone/BUILD.bazel +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/vmec/vmec_standalone/vmec_standalone.cc +0 -0
- {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/simsopt_compat.py +0 -0
|
@@ -34,7 +34,7 @@ CheckOptions:
|
|
|
34
34
|
- { key: readability-identifier-naming.StructCase, value: CamelCase }
|
|
35
35
|
- { key: readability-identifier-naming.TemplateParameterCase, value: CamelCase }
|
|
36
36
|
- { key: readability-identifier-naming.FunctionCase, value: aNy_CasE }
|
|
37
|
-
- { key: readability-identifier-naming.VariableCase, value: lower_case }
|
|
37
|
+
# - { key: readability-identifier-naming.VariableCase, value: lower_case }
|
|
38
38
|
- { key: readability-identifier-naming.ClassMemberCase, value: lower_case }
|
|
39
39
|
- { key: readability-identifier-naming.ClassMemberSuffix, value: _ }
|
|
40
40
|
- { key: readability-identifier-naming.PrivateMemberSuffix, value: _ }
|
|
@@ -113,12 +113,42 @@ target_link_libraries(vmecpp_core PRIVATE ${HDF5_CXX_LIBRARIES} ${HDF5_LIBRARIES
|
|
|
113
113
|
target_link_libraries(vmecpp_core PRIVATE ${netCDF_LIBRARIES})
|
|
114
114
|
target_link_libraries(vmecpp_core PRIVATE nlohmann_json::nlohmann_json)
|
|
115
115
|
target_link_libraries(vmecpp_core PRIVATE LAPACK::LAPACK)
|
|
116
|
+
|
|
117
|
+
# FFTX (SPIRAL-generated batched IPRDFT/PRDFT) for the toroidal FFT hot path.
|
|
118
|
+
# The codelets are vendored under src/vmecpp/cpp/third_party/fftx_codelets/;
|
|
119
|
+
# see that directory's README.md for what they cover and how to regenerate.
|
|
120
|
+
# Pass -DVMECPP_USE_FFTX=OFF to fall back to the partial-DFT path.
|
|
121
|
+
option(VMECPP_USE_FFTX "Use FFTX/SPIRAL kernels for toroidal transforms" ON)
|
|
122
|
+
if(VMECPP_USE_FFTX)
|
|
123
|
+
set(_fftx_dir "${PROJECT_SOURCE_DIR}/src/vmecpp/cpp/third_party/fftx_codelets")
|
|
124
|
+
file(GLOB _fftx_iprdft_srcs CONFIGURE_DEPENDS
|
|
125
|
+
"${_fftx_dir}/lib_fftx_iprdftbat_cpu_srcs/*.cpp")
|
|
126
|
+
file(GLOB _fftx_prdft_srcs CONFIGURE_DEPENDS
|
|
127
|
+
"${_fftx_dir}/lib_fftx_prdftbat_cpu_srcs/*.cpp")
|
|
128
|
+
add_library(fftx_codelets STATIC ${_fftx_iprdft_srcs} ${_fftx_prdft_srcs})
|
|
129
|
+
target_include_directories(fftx_codelets PUBLIC
|
|
130
|
+
"${_fftx_dir}" # for <include/omega64.h>
|
|
131
|
+
"${_fftx_dir}/include" # for fftx_minimal.hpp
|
|
132
|
+
"${_fftx_dir}/lib_fftx_iprdftbat_cpu_srcs"
|
|
133
|
+
"${_fftx_dir}/lib_fftx_prdftbat_cpu_srcs")
|
|
134
|
+
# Match vmecpp's release flags; codelets are >30k lines and benefit from -O3.
|
|
135
|
+
target_compile_options(fftx_codelets PRIVATE -fPIC)
|
|
136
|
+
target_link_libraries(vmecpp_core PRIVATE fftx_codelets)
|
|
137
|
+
target_compile_definitions(vmecpp_core PUBLIC VMECPP_USE_FFTX)
|
|
138
|
+
list(LENGTH _fftx_iprdft_srcs _n_iprdft)
|
|
139
|
+
list(LENGTH _fftx_prdft_srcs _n_prdft)
|
|
140
|
+
message(STATUS "FFTX vendored codelets: ${_n_iprdft} iprdft + ${_n_prdft} prdft sources")
|
|
141
|
+
endif()
|
|
116
142
|
target_link_libraries(vmecpp_core PRIVATE absl::algorithm absl::base absl::synchronization absl::strings absl::str_format absl::log absl::string_view absl::check absl::status absl::statusor)
|
|
117
143
|
|
|
118
144
|
if(OpenMP_CXX_FOUND)
|
|
119
145
|
target_link_libraries(vmecpp_core PRIVATE OpenMP::OpenMP_CXX)
|
|
120
146
|
endif()
|
|
121
147
|
|
|
148
|
+
# We multithread at the outer loop level, not for the individual Eigen operations
|
|
149
|
+
# https://libeigen.gitlab.io/eigen/docs-3.3/TopicMultiThreading.html
|
|
150
|
+
target_compile_definitions(vmecpp_core PRIVATE EIGEN_DONT_PARALLELIZE)
|
|
151
|
+
|
|
122
152
|
|
|
123
153
|
# Now also add the vmec_standalone executable.
|
|
124
154
|
add_executable(vmec_standalone ${PROJECT_SOURCE_DIR}/src/vmecpp/cpp/vmecpp/vmec/vmec_standalone/vmec_standalone.cc)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: vmecpp
|
|
3
|
-
Version: 0.5.
|
|
3
|
+
Version: 0.5.4
|
|
4
4
|
Summary: Proxima Fusion's reimplementation of the Variational Moments Equilibrium Code (VMEC), a free-boundary ideal-MHD equilibrium solver for stellarators and Tokamaks.
|
|
5
5
|
Author-Email: Jonathan Schilling <jons@proximafusion.com>, Enrico Guiraud <eguiraud@proximafusion.com>, Philipp Jurasic <jurasic@proximafusion.com>
|
|
6
6
|
License-Expression: MIT
|
|
@@ -21,6 +21,7 @@ Requires-Python: <3.14,>=3.10
|
|
|
21
21
|
Requires-Dist: netCDF4
|
|
22
22
|
Requires-Dist: numpy
|
|
23
23
|
Requires-Dist: pydantic>=2.11
|
|
24
|
+
Requires-Dist: pydantic<2.13
|
|
24
25
|
Requires-Dist: jaxtyping>=0.2.6
|
|
25
26
|
Requires-Dist: jax!=0.5.2
|
|
26
27
|
Requires-Dist: jax!=0.5.1
|
|
@@ -96,6 +97,7 @@ See [below](#differences-with-respect-to-parvmecvmec2000) for more details.
|
|
|
96
97
|
- [Arch](#arch-linux)
|
|
97
98
|
- [Fedora](#fedora)
|
|
98
99
|
- [MacOS](#macos)
|
|
100
|
+
- [With Nix](#with-nix)
|
|
99
101
|
- [As part of a conda environment](#as-part-of-a-conda-environment)
|
|
100
102
|
- [C++ build from source](#c-build-from-source)
|
|
101
103
|
- [Hot restart](#hot-restart)
|
|
@@ -260,6 +262,20 @@ export HDF5_ROOT=$(brew --prefix hdf5)
|
|
|
260
262
|
python3.10 -m pip install git+https://github.com/proximafusion/vmecpp
|
|
261
263
|
```
|
|
262
264
|
|
|
265
|
+
### With Nix (Community support)
|
|
266
|
+
|
|
267
|
+
For a Linux development shell with the latest supported Python version:
|
|
268
|
+
|
|
269
|
+
```shell
|
|
270
|
+
nix develop
|
|
271
|
+
python --version
|
|
272
|
+
python -m pip install -e .[test]
|
|
273
|
+
```
|
|
274
|
+
|
|
275
|
+
The shell provides Python 3.13 together with the native build dependencies needed
|
|
276
|
+
to build and test VMEC++, including CMake, GCC, GFortran, HDF5, NetCDF, LAPACK,
|
|
277
|
+
OpenMPI, and Git LFS.
|
|
278
|
+
|
|
263
279
|
### As part of a conda environment
|
|
264
280
|
|
|
265
281
|
VMEC++ is currently not packaged for conda, but all its dependencies are and VMEC++
|
|
@@ -341,6 +357,7 @@ VMEC++:
|
|
|
341
357
|
- allows hot-restarting a run from a previous converged state (see [Hot restart](#hot-restart))
|
|
342
358
|
- supports inputs in the classic INDATA format as well as simpler-to-parse JSON files; it is also simple to construct input objects programmatically in Python
|
|
343
359
|
- employs the same parallelization strategy as Fortran VMEC, but VMEC++ leverages OpenMP for a multi-thread implementation rather than Fortran VMEC's MPI parallelization: as a consequence it cannot parallelize over multiple nodes
|
|
360
|
+
- Uses FFT kernels optimized for small mode numbers [generated using FFTX](github.com/spiral-software/fftx) instead of DFT for supported resolutions. They give a 10-20% speedup relative to the DFT counterparts.
|
|
344
361
|
- implements the iteration algorithm of Fortran VMEC 8.52, which sometimes has different convergence behavior from (PAR)VMEC 9.0: some configurations might converge with VMEC++ and not with (PAR)VMEC 9.0, and vice versa
|
|
345
362
|
|
|
346
363
|
### Limitations with respect to the Fortran implementations
|
|
@@ -372,7 +389,7 @@ VMEC++:
|
|
|
372
389
|
* `xnpot` - not declared yet
|
|
373
390
|
- 2D preconditioning using block-tridiagonal solver ([`BCYCLIC`](https://www.sciencedirect.com/science/article/abs/pii/S0021999110002536)) is not implemented;
|
|
374
391
|
neither are the associated input fields `precon_type` and `prec2d_threshold`
|
|
375
|
-
- VMEC++ only computes the output quantities if the run converged
|
|
392
|
+
- VMEC++ only computes the output quantities if the run converged (can be overridden via `return_outputs_even_if_not_converged` input)
|
|
376
393
|
- The Fortran version falls back to fixed-boundary computation if the `mgrid` file cannot be found; VMEC++ (gracefully) errors out instead.
|
|
377
394
|
- The Fortran version accepts both the full path or filename of the input file as well as the "extension", i.e., the part after `input.`; VMEC++ only supports a valid filename or full path to an existing input file.
|
|
378
395
|
|
|
@@ -55,6 +55,7 @@ See [below](#differences-with-respect-to-parvmecvmec2000) for more details.
|
|
|
55
55
|
- [Arch](#arch-linux)
|
|
56
56
|
- [Fedora](#fedora)
|
|
57
57
|
- [MacOS](#macos)
|
|
58
|
+
- [With Nix](#with-nix)
|
|
58
59
|
- [As part of a conda environment](#as-part-of-a-conda-environment)
|
|
59
60
|
- [C++ build from source](#c-build-from-source)
|
|
60
61
|
- [Hot restart](#hot-restart)
|
|
@@ -219,6 +220,20 @@ export HDF5_ROOT=$(brew --prefix hdf5)
|
|
|
219
220
|
python3.10 -m pip install git+https://github.com/proximafusion/vmecpp
|
|
220
221
|
```
|
|
221
222
|
|
|
223
|
+
### With Nix (Community support)
|
|
224
|
+
|
|
225
|
+
For a Linux development shell with the latest supported Python version:
|
|
226
|
+
|
|
227
|
+
```shell
|
|
228
|
+
nix develop
|
|
229
|
+
python --version
|
|
230
|
+
python -m pip install -e .[test]
|
|
231
|
+
```
|
|
232
|
+
|
|
233
|
+
The shell provides Python 3.13 together with the native build dependencies needed
|
|
234
|
+
to build and test VMEC++, including CMake, GCC, GFortran, HDF5, NetCDF, LAPACK,
|
|
235
|
+
OpenMPI, and Git LFS.
|
|
236
|
+
|
|
222
237
|
### As part of a conda environment
|
|
223
238
|
|
|
224
239
|
VMEC++ is currently not packaged for conda, but all its dependencies are and VMEC++
|
|
@@ -300,6 +315,7 @@ VMEC++:
|
|
|
300
315
|
- allows hot-restarting a run from a previous converged state (see [Hot restart](#hot-restart))
|
|
301
316
|
- supports inputs in the classic INDATA format as well as simpler-to-parse JSON files; it is also simple to construct input objects programmatically in Python
|
|
302
317
|
- employs the same parallelization strategy as Fortran VMEC, but VMEC++ leverages OpenMP for a multi-thread implementation rather than Fortran VMEC's MPI parallelization: as a consequence it cannot parallelize over multiple nodes
|
|
318
|
+
- Uses FFT kernels optimized for small mode numbers [generated using FFTX](github.com/spiral-software/fftx) instead of DFT for supported resolutions. They give a 10-20% speedup relative to the DFT counterparts.
|
|
303
319
|
- implements the iteration algorithm of Fortran VMEC 8.52, which sometimes has different convergence behavior from (PAR)VMEC 9.0: some configurations might converge with VMEC++ and not with (PAR)VMEC 9.0, and vice versa
|
|
304
320
|
|
|
305
321
|
### Limitations with respect to the Fortran implementations
|
|
@@ -331,7 +347,7 @@ VMEC++:
|
|
|
331
347
|
* `xnpot` - not declared yet
|
|
332
348
|
- 2D preconditioning using block-tridiagonal solver ([`BCYCLIC`](https://www.sciencedirect.com/science/article/abs/pii/S0021999110002536)) is not implemented;
|
|
333
349
|
neither are the associated input fields `precon_type` and `prec2d_threshold`
|
|
334
|
-
- VMEC++ only computes the output quantities if the run converged
|
|
350
|
+
- VMEC++ only computes the output quantities if the run converged (can be overridden via `return_outputs_even_if_not_converged` input)
|
|
335
351
|
- The Fortran version falls back to fixed-boundary computation if the `mgrid` file cannot be found; VMEC++ (gracefully) errors out instead.
|
|
336
352
|
- The Fortran version accepts both the full path or filename of the input file as well as the "extension", i.e., the part after `input.`; VMEC++ only supports a valid filename or full path to an existing input file.
|
|
337
353
|
|
|
@@ -127,6 +127,19 @@ def test_bench_fixed_boundary_cma(benchmark, cma_input):
|
|
|
127
127
|
assert result.wout.volume == pytest.approx(0.5014, rel=1e-3)
|
|
128
128
|
|
|
129
129
|
|
|
130
|
+
def test_bench_fixed_boundary_cma_6x8(benchmark, cma_input):
|
|
131
|
+
"""Benchmark CMA equilibrium (stellarator, ntor=6, mpol=8)."""
|
|
132
|
+
cma_input_6x8 = cma_input.model_copy(update={"mpol": 8})
|
|
133
|
+
result = benchmark.pedantic(
|
|
134
|
+
vmecpp.run,
|
|
135
|
+
args=(cma_input_6x8,),
|
|
136
|
+
kwargs={"max_threads": 2},
|
|
137
|
+
rounds=3,
|
|
138
|
+
warmup_rounds=0,
|
|
139
|
+
)
|
|
140
|
+
assert result.wout.volume == pytest.approx(0.5014, rel=1e-3)
|
|
141
|
+
|
|
142
|
+
|
|
130
143
|
# ---------------------------------------------------------------------------
|
|
131
144
|
# Free-boundary benchmarks
|
|
132
145
|
# ---------------------------------------------------------------------------
|
vmecpp-0.5.4/flake.lock
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
{
|
|
2
|
+
"nodes": {
|
|
3
|
+
"nixpkgs": {
|
|
4
|
+
"locked": {
|
|
5
|
+
"lastModified": 1751274312,
|
|
6
|
+
"narHash": "sha256-/bVBlRpECLVzjV19t5KMdMFWSwKLtb5RyXdjz3LJT+g=",
|
|
7
|
+
"owner": "NixOS",
|
|
8
|
+
"repo": "nixpkgs",
|
|
9
|
+
"rev": "50ab793786d9de88ee30ec4e4c24fb4236fc2674",
|
|
10
|
+
"type": "github"
|
|
11
|
+
},
|
|
12
|
+
"original": {
|
|
13
|
+
"owner": "NixOS",
|
|
14
|
+
"ref": "nixos-24.11",
|
|
15
|
+
"repo": "nixpkgs",
|
|
16
|
+
"type": "github"
|
|
17
|
+
}
|
|
18
|
+
},
|
|
19
|
+
"root": {
|
|
20
|
+
"inputs": {
|
|
21
|
+
"nixpkgs": "nixpkgs"
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
},
|
|
25
|
+
"root": "root",
|
|
26
|
+
"version": 7
|
|
27
|
+
}
|
vmecpp-0.5.4/flake.nix
ADDED
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
{
|
|
2
|
+
description = "Nix development shell for vmecpp";
|
|
3
|
+
|
|
4
|
+
inputs = {
|
|
5
|
+
nixpkgs.url = "github:NixOS/nixpkgs/nixos-24.11";
|
|
6
|
+
};
|
|
7
|
+
|
|
8
|
+
outputs = { nixpkgs, ... }:
|
|
9
|
+
let
|
|
10
|
+
lib = nixpkgs.lib;
|
|
11
|
+
supportedSystems = [
|
|
12
|
+
"x86_64-linux"
|
|
13
|
+
"aarch64-linux"
|
|
14
|
+
];
|
|
15
|
+
forAllSystems = lib.genAttrs supportedSystems;
|
|
16
|
+
in
|
|
17
|
+
{
|
|
18
|
+
devShells = forAllSystems (
|
|
19
|
+
system:
|
|
20
|
+
let
|
|
21
|
+
pkgs = import nixpkgs { inherit system; };
|
|
22
|
+
python = pkgs.python313;
|
|
23
|
+
hdf5 = pkgs.hdf5-fortran;
|
|
24
|
+
hdf5Merged = pkgs.symlinkJoin {
|
|
25
|
+
name = "hdf5-merged";
|
|
26
|
+
paths = [
|
|
27
|
+
hdf5
|
|
28
|
+
hdf5.dev
|
|
29
|
+
hdf5.bin
|
|
30
|
+
];
|
|
31
|
+
postBuild = ''
|
|
32
|
+
rm "$out/lib/cmake/hdf5-config.cmake"
|
|
33
|
+
sed \
|
|
34
|
+
-e 's|"''${CMAKE_CURRENT_LIST_DIR}/\.\./\.\./\.\./[^"]*"|"'"$out"'"|' \
|
|
35
|
+
-e 's|''${PACKAGE_PREFIX_DIR}//nix/store/[a-z0-9]*-hdf5-cpp-fortran-[^/]*/|''${PACKAGE_PREFIX_DIR}/|g' \
|
|
36
|
+
-e 's|"//nix/store/[a-z0-9]*-hdf5-cpp-fortran-[^/]*/|"'"$out"'/|g' \
|
|
37
|
+
"${hdf5.dev}/lib/cmake/hdf5-config.cmake" \
|
|
38
|
+
> "$out/lib/cmake/hdf5-config.cmake"
|
|
39
|
+
|
|
40
|
+
for f in "$out"/lib/cmake/hdf5-targets*.cmake; do
|
|
41
|
+
rm "$f"
|
|
42
|
+
sed \
|
|
43
|
+
-e 's|${hdf5}|'"$out"'|g' \
|
|
44
|
+
-e 's|${hdf5.dev}|'"$out"'|g' \
|
|
45
|
+
"${hdf5.dev}/lib/cmake/$(basename "$f")" \
|
|
46
|
+
> "$f"
|
|
47
|
+
done
|
|
48
|
+
'';
|
|
49
|
+
};
|
|
50
|
+
in
|
|
51
|
+
{
|
|
52
|
+
default = pkgs.mkShell {
|
|
53
|
+
packages = with pkgs; [
|
|
54
|
+
python
|
|
55
|
+
cmake
|
|
56
|
+
ninja
|
|
57
|
+
gcc
|
|
58
|
+
gfortran
|
|
59
|
+
pkg-config
|
|
60
|
+
hdf5Merged
|
|
61
|
+
netcdf
|
|
62
|
+
netcdffortran
|
|
63
|
+
blis
|
|
64
|
+
lapack-reference
|
|
65
|
+
nodejs
|
|
66
|
+
openmpi
|
|
67
|
+
git
|
|
68
|
+
git-lfs
|
|
69
|
+
];
|
|
70
|
+
|
|
71
|
+
shellHook = ''
|
|
72
|
+
export CC=${pkgs.gcc}/bin/gcc
|
|
73
|
+
export CXX=${pkgs.gcc}/bin/g++
|
|
74
|
+
export FC=${pkgs.gfortran}/bin/gfortran
|
|
75
|
+
export CMAKE_GENERATOR=Ninja
|
|
76
|
+
export HDF5_DIR=${hdf5Merged}/lib/cmake
|
|
77
|
+
export CMAKE_ARGS="-DHDF5_DIR=${hdf5Merged}/lib/cmake -DCMAKE_DISABLE_FIND_PACKAGE_netCDF=TRUE -DBLAS_LIBRARIES=${pkgs.blis}/lib/libblas.so -DLAPACK_LIBRARIES=${pkgs.lapack-reference}/lib/liblapack.so"
|
|
78
|
+
export LD_LIBRARY_PATH=${lib.makeLibraryPath [
|
|
79
|
+
pkgs.stdenv.cc.cc
|
|
80
|
+
pkgs.blis
|
|
81
|
+
pkgs.lapack-reference
|
|
82
|
+
]}:''${LD_LIBRARY_PATH:-}
|
|
83
|
+
vmecpp_pip_constraints="''${TMPDIR:-/tmp}/vmecpp-pip-constraints.txt"
|
|
84
|
+
cat > "$vmecpp_pip_constraints" <<EOF
|
|
85
|
+
pydantic<2.13
|
|
86
|
+
EOF
|
|
87
|
+
export PIP_CONSTRAINT="$vmecpp_pip_constraints"
|
|
88
|
+
export PIP_BUILD_CONSTRAINT="$vmecpp_pip_constraints"
|
|
89
|
+
export SKIP="pyright"
|
|
90
|
+
'';
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
);
|
|
94
|
+
};
|
|
95
|
+
}
|
|
@@ -31,6 +31,7 @@ dependencies = [
|
|
|
31
31
|
"netCDF4",
|
|
32
32
|
"numpy",
|
|
33
33
|
"pydantic>=2.11", # Introduced support for by_alias validation
|
|
34
|
+
"pydantic<2.13", # Breaking change currently under investigation
|
|
34
35
|
"jaxtyping>=0.2.6",
|
|
35
36
|
"jax!=0.5.2", # To prevent a circular import bug in jax on arch Linux
|
|
36
37
|
"jax!=0.5.1", # To prevent a circular import bug in jax on arch Linux
|
|
@@ -679,6 +679,8 @@ class VmecWOut(BaseModelWithNumpy):
|
|
|
679
679
|
"bsubvmns",
|
|
680
680
|
"bsupumns",
|
|
681
681
|
"bsupvmns",
|
|
682
|
+
"currumns",
|
|
683
|
+
"currvmns",
|
|
682
684
|
]
|
|
683
685
|
"""If quantities are not exactly the same in C++ WoutFileContents and this class,
|
|
684
686
|
add them to this list and implement the conversion logic in _to_cpp_wout and
|
|
@@ -969,6 +971,18 @@ class VmecWOut(BaseModelWithNumpy):
|
|
|
969
971
|
r"""Fourier coefficients (cos) of the contravariant magnetic field component
|
|
970
972
|
:math:`B^{\phi}` on the half-grid."""
|
|
971
973
|
|
|
974
|
+
# Defaulted for backwards compatibility with old wout files
|
|
975
|
+
currumnc: jt.Float[np.ndarray, "mn_mode_nyq n_surfaces"] = pydantic.Field(
|
|
976
|
+
default_factory=lambda: np.array([])
|
|
977
|
+
)
|
|
978
|
+
r"""Fourier coefficients (cos) of :math:`\sqrt{g} J^{\theta}` on the full-grid."""
|
|
979
|
+
|
|
980
|
+
# Defaulted for backwards compatibility with old wout files
|
|
981
|
+
currvmnc: jt.Float[np.ndarray, "mn_mode_nyq n_surfaces"] = pydantic.Field(
|
|
982
|
+
default_factory=lambda: np.array([])
|
|
983
|
+
)
|
|
984
|
+
r"""Fourier coefficients (cos) of :math:`\sqrt{g} J^{\zeta}` on the full-grid."""
|
|
985
|
+
|
|
972
986
|
rmnc: jt.Float[np.ndarray, "mn_mode n_surfaces"]
|
|
973
987
|
"""Fourier coefficients (cos) for ``R`` of the geometry of the flux surfaces on the
|
|
974
988
|
full- grid."""
|
|
@@ -1038,6 +1052,14 @@ class VmecWOut(BaseModelWithNumpy):
|
|
|
1038
1052
|
r"""Fourier coefficients (sin) of the contravariant magnetic field component
|
|
1039
1053
|
:math:`B^{\phi}` on the half-grid; non-stellarator-symmetric."""
|
|
1040
1054
|
|
|
1055
|
+
currumns: jt.Float[np.ndarray, "mn_mode_nyq n_surfaces"] | None = None
|
|
1056
|
+
r"""Fourier coefficients (sin) of :math:`\sqrt{g} J^{\theta}` on the full-grid; non-
|
|
1057
|
+
stellarator-symmetric."""
|
|
1058
|
+
|
|
1059
|
+
currvmns: jt.Float[np.ndarray, "mn_mode_nyq n_surfaces"] | None = None
|
|
1060
|
+
r"""Fourier coefficients (sin) of :math:`\sqrt{g} J^{\zeta}` on the full-grid; non-
|
|
1061
|
+
stellarator-symmetric."""
|
|
1062
|
+
|
|
1041
1063
|
pcurr_type: ProfileType
|
|
1042
1064
|
"""Parametrization of toroidal current profile (copied from input)."""
|
|
1043
1065
|
|
|
@@ -1186,7 +1208,7 @@ class VmecWOut(BaseModelWithNumpy):
|
|
|
1186
1208
|
"""Mercier stability criterion contribution due to geodesic curvature."""
|
|
1187
1209
|
|
|
1188
1210
|
niter: int
|
|
1189
|
-
"""
|
|
1211
|
+
"""Number of force-balance iterations taken to converge."""
|
|
1190
1212
|
|
|
1191
1213
|
beta_vol: jt.Float[np.ndarray, "n_surfaces"]
|
|
1192
1214
|
"""Flux-surface averaged plasma beta on half-grid."""
|
|
@@ -1409,6 +1431,8 @@ class VmecWOut(BaseModelWithNumpy):
|
|
|
1409
1431
|
attrs["bsubvmns"] = cpp_wout.bsubvmns
|
|
1410
1432
|
attrs["bsupumns"] = cpp_wout.bsupumns
|
|
1411
1433
|
attrs["bsupvmns"] = cpp_wout.bsupvmns
|
|
1434
|
+
attrs["currumns"] = cpp_wout.currumns
|
|
1435
|
+
attrs["currvmns"] = cpp_wout.currvmns
|
|
1412
1436
|
attrs["gmns"] = cpp_wout.gmns
|
|
1413
1437
|
|
|
1414
1438
|
return VmecWOut(**attrs)
|
|
@@ -1438,6 +1462,8 @@ class VmecWOut(BaseModelWithNumpy):
|
|
|
1438
1462
|
"bsubvmns",
|
|
1439
1463
|
"bsupumns",
|
|
1440
1464
|
"bsupvmns",
|
|
1465
|
+
"currumns",
|
|
1466
|
+
"currvmns",
|
|
1441
1467
|
]:
|
|
1442
1468
|
value = getattr(self, field)
|
|
1443
1469
|
if value is not None:
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
# general compilation options
|
|
2
|
-
build --cxxopt="-std=c++20" --copt="-fdiagnostics-color=always"
|
|
2
|
+
build --cxxopt="-std=c++20" --copt="-fdiagnostics-color=always" --copt="-DEIGEN_DONT_PARALLELIZE"
|
|
3
3
|
|
|
4
4
|
# workaround for a Bazel 7 issue with rules_foreign_cc: https://github.com/bazelbuild/rules_foreign_cc/issues/1129
|
|
5
5
|
build --sandbox_add_mount_pair=/tmp
|
|
@@ -23,7 +23,8 @@ build:tsan_archer_in_docker --crosstool_top=//docker/tsan/llvm_toolchain:clang_s
|
|
|
23
23
|
--cpu=k8 \
|
|
24
24
|
--host_crosstool_top=@bazel_tools//tools/cpp:toolchain \
|
|
25
25
|
--copt="-O3" --copt="-fopenmp" --copt="-fsanitize=thread" --copt="-g" --strip=never \
|
|
26
|
-
--linkopt="-fopenmp" --linkopt="-fsanitize=thread" --linkopt="-L/usr/local/lib" --linkopt="-L/usr/local/lib/x86_64-unknown-linux-gnu"
|
|
26
|
+
--linkopt="-fopenmp" --linkopt="-fsanitize=thread" --linkopt="-L/usr/local/lib" --linkopt="-L/usr/local/lib/x86_64-unknown-linux-gnu" --linkopt="-larcher" \
|
|
27
|
+
--test_env=LD_LIBRARY_PATH=/usr/local/lib/x86_64-unknown-linux-gnu \
|
|
27
28
|
--test_env=ARCHER_OPTIONS="verbose=1" --test_env=TSAN_OPTIONS="ignore_noninstrumented_modules=1"
|
|
28
29
|
|
|
29
30
|
# We observe CPU overloads when having too many OpenMP threads in parallel on the CI machines.
|
|
@@ -9,8 +9,9 @@ RUN apt-get install -y git
|
|
|
9
9
|
# Setup the LLVM sources in /llvm.
|
|
10
10
|
WORKDIR /llvm
|
|
11
11
|
|
|
12
|
-
#
|
|
13
|
-
|
|
12
|
+
# Pin to llvmorg-18.1.8 so the installed clang is version 18, matching the
|
|
13
|
+
# hardcoded include path /usr/local/lib/clang/18/include in the Bazel toolchain.
|
|
14
|
+
RUN git clone --depth 1 --branch llvmorg-18.1.8 https://github.com/llvm/llvm-project.git
|
|
14
15
|
|
|
15
16
|
# Install more packages.
|
|
16
17
|
# Split up to allow caching of above step of cloning the llvm repo.
|
|
@@ -21,19 +22,21 @@ RUN apt-get install -y \
|
|
|
21
22
|
ninja-build
|
|
22
23
|
|
|
23
24
|
# Build clang and libomp with TSan/Archer support.
|
|
25
|
+
# install-clang installs the compiler to /usr/local/bin/clang (required by the
|
|
26
|
+
# Bazel toolchain config). install-runtimes installs libarcher and libomp with
|
|
27
|
+
# TSan support to /usr/local/lib.
|
|
24
28
|
RUN cd llvm-project && \
|
|
25
29
|
mkdir build && \
|
|
26
30
|
cmake -G Ninja -S llvm -B build \
|
|
27
31
|
-DCMAKE_BUILD_TYPE=Release \
|
|
32
|
+
-DCMAKE_INSTALL_PREFIX=/usr/local \
|
|
28
33
|
-DLLVM_TARGETS_TO_BUILD="X86" \
|
|
29
34
|
-DLLVM_ENABLE_PROJECTS="clang" \
|
|
30
35
|
-DLLVM_ENABLE_RUNTIMES="compiler-rt;libcxx;libcxxabi;libunwind;openmp" && \
|
|
31
|
-
ninja -C build runtimes
|
|
32
|
-
ninja -C build install \
|
|
33
|
-
install-runtimes
|
|
36
|
+
ninja -C build install-clang install-runtimes
|
|
34
37
|
|
|
35
38
|
# Install Bazel to be able to compile projects in the bind-mounted repo.
|
|
36
|
-
RUN apt-get install -y curl && curl -L "https://github.com/bazelbuild/bazelisk/releases/download/v1.
|
|
39
|
+
RUN apt-get install -y curl && curl -L "https://github.com/bazelbuild/bazelisk/releases/download/v1.24.1/bazelisk-linux-amd64" --output "/usr/bin/bazel" \
|
|
37
40
|
&& chmod a+x "/usr/bin/bazel"
|
|
38
41
|
|
|
39
42
|
# Install packages required for building VMEC++.
|
|
@@ -38,16 +38,7 @@ support for being able to check OpenMP-parallelized C/C++ code.
|
|
|
38
38
|
bazel clean --expunge
|
|
39
39
|
```
|
|
40
40
|
|
|
41
|
-
5.
|
|
42
|
-
the `libarcher.so` library in the docker container:
|
|
43
|
-
|
|
44
|
-
```bash
|
|
45
|
-
export LD_LIBRARY_PATH=/usr/local/lib/x86_64-unknown-linux-gnu
|
|
46
|
-
```
|
|
47
|
-
|
|
48
|
-
TODO(jons): fix this - should not be needed (?)
|
|
49
|
-
|
|
50
|
-
6. Run the unit tests for VMEC++ under TSan/Archer:
|
|
41
|
+
5. Run the unit tests for VMEC++ under TSan/Archer:
|
|
51
42
|
|
|
52
43
|
```bash
|
|
53
44
|
bazel test --config=tsan_archer_in_docker --test_output=streamed --nocache_test_results -- //vmecpp/... -//vmecpp/vmec/pybind11/...
|
|
@@ -56,7 +47,7 @@ support for being able to check OpenMP-parallelized C/C++ code.
|
|
|
56
47
|
`pybind11` is disabled for now, as it does not compile yet with the new
|
|
57
48
|
`clang`.
|
|
58
49
|
|
|
59
|
-
|
|
50
|
+
6. Run example cases using the TSan-enabled executable:
|
|
60
51
|
|
|
61
52
|
```bash
|
|
62
53
|
export ARCHER_OPTIONS="verbose=1"
|
|
@@ -69,7 +60,7 @@ support for being able to check OpenMP-parallelized C/C++ code.
|
|
|
69
60
|
bazel-bin/vmecpp/vmec/vmec_standalone/vmec_standalone vmecpp/example_inputs/w7x_ref_167_12_12.json
|
|
70
61
|
```
|
|
71
62
|
|
|
72
|
-
|
|
63
|
+
7. Clean up the Bazel cache after the TSan/Archer work is done:
|
|
73
64
|
|
|
74
65
|
```bash
|
|
75
66
|
docker> exit
|
|
@@ -54,25 +54,6 @@ int main(int argc, char** argv) {
|
|
|
54
54
|
const MagneticConfiguration& magnetic_configuration =
|
|
55
55
|
*maybe_magnetic_configuration;
|
|
56
56
|
|
|
57
|
-
// make first internal copy to be able to
|
|
58
|
-
// migrate num_windings into circuit currents
|
|
59
|
-
MagneticConfiguration m_magnetic_configuration = magnetic_configuration;
|
|
60
|
-
|
|
61
|
-
// Normalized mode actually means in MAKEGRID-speak
|
|
62
|
-
// that the data from the 4-th column in the `coils.` file is divided out,
|
|
63
|
-
// and that is parsed here into the number of windings in each Coil.
|
|
64
|
-
// Hence, need to:
|
|
65
|
-
// a) make sure that num_windings is the same
|
|
66
|
-
// for all Coils in a given SerialCircuit
|
|
67
|
-
// b) "migrate" the num_windings factor into
|
|
68
|
-
// the circuit current, so that
|
|
69
|
-
// num_windings can be 1
|
|
70
|
-
// c) set the number of windings to 1.0
|
|
71
|
-
// if normalize_by_currents is true
|
|
72
|
-
if (makegrid_parameters.normalize_by_currents) {
|
|
73
|
-
CHECK_OK(NumWindingsToCircuitCurrents(m_magnetic_configuration));
|
|
74
|
-
}
|
|
75
|
-
|
|
76
57
|
absl::StatusOr<Eigen::VectorXd> maybe_circuit_currents =
|
|
77
58
|
GetCircuitCurrents(magnetic_configuration);
|
|
78
59
|
CHECK_OK(maybe_circuit_currents);
|
|
@@ -81,14 +62,13 @@ int main(int argc, char** argv) {
|
|
|
81
62
|
// compute the magnetic field cache and the vector potential cache
|
|
82
63
|
absl::StatusOr<MagneticFieldResponseTable> maybe_magnetic_response_table =
|
|
83
64
|
ComputeMagneticFieldResponseTable(makegrid_parameters,
|
|
84
|
-
|
|
65
|
+
magnetic_configuration);
|
|
85
66
|
CHECK_OK(maybe_magnetic_response_table);
|
|
86
67
|
const MagneticFieldResponseTable& magnetic_response_table =
|
|
87
68
|
*maybe_magnetic_response_table;
|
|
88
69
|
|
|
89
70
|
absl::StatusOr<MakegridCachedVectorPotential> maybe_vector_potential_cache =
|
|
90
|
-
ComputeVectorPotentialCache(makegrid_parameters,
|
|
91
|
-
m_magnetic_configuration);
|
|
71
|
+
ComputeVectorPotentialCache(makegrid_parameters, magnetic_configuration);
|
|
92
72
|
CHECK_OK(maybe_vector_potential_cache);
|
|
93
73
|
const MakegridCachedVectorPotential& vector_potential_cache =
|
|
94
74
|
*maybe_vector_potential_cache;
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# SPDX-FileCopyrightText: 2024-present Proxima Fusion GmbH <info@proximafusion.com>
|
|
2
|
+
#
|
|
3
|
+
# SPDX-License-Identifier: MIT
|
|
4
|
+
#
|
|
5
|
+
# Vendored FFTX/SPIRAL codelets for vmecpp's toroidal FFT path.
|
|
6
|
+
# See README.md for what shapes are covered and how to regenerate.
|
|
7
|
+
|
|
8
|
+
cc_library(
|
|
9
|
+
name = "fftx_codelets",
|
|
10
|
+
srcs = glob([
|
|
11
|
+
"lib_fftx_iprdftbat_cpu_srcs/*.cpp",
|
|
12
|
+
"lib_fftx_prdftbat_cpu_srcs/*.cpp",
|
|
13
|
+
]),
|
|
14
|
+
hdrs = glob([
|
|
15
|
+
"lib_fftx_iprdftbat_cpu_srcs/*.h",
|
|
16
|
+
"lib_fftx_prdftbat_cpu_srcs/*.h",
|
|
17
|
+
"include/*.h",
|
|
18
|
+
"include/*.hpp",
|
|
19
|
+
]),
|
|
20
|
+
includes = [
|
|
21
|
+
# SPIRAL kernels include <include/omega64.h>; this directory ends up on
|
|
22
|
+
# the search path so that resolves to "include/omega64.h" relative to
|
|
23
|
+
# the package root.
|
|
24
|
+
".",
|
|
25
|
+
# Direct includes for fftx_minimal.hpp and the kernel public/decls
|
|
26
|
+
# headers. Bazel adds the package-relative paths via "includes" so
|
|
27
|
+
# `#include "fftx_minimal.hpp"` works without a leading directory.
|
|
28
|
+
"include",
|
|
29
|
+
"lib_fftx_iprdftbat_cpu_srcs",
|
|
30
|
+
"lib_fftx_prdftbat_cpu_srcs",
|
|
31
|
+
],
|
|
32
|
+
visibility = ["//visibility:public"],
|
|
33
|
+
)
|