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.
Files changed (384) hide show
  1. {vmecpp-0.5.2 → vmecpp-0.5.4}/.clang-tidy +1 -1
  2. {vmecpp-0.5.2 → vmecpp-0.5.4}/CMakeLists.txt +30 -0
  3. {vmecpp-0.5.2 → vmecpp-0.5.4}/PKG-INFO +19 -2
  4. {vmecpp-0.5.2 → vmecpp-0.5.4}/README.md +17 -1
  5. {vmecpp-0.5.2 → vmecpp-0.5.4}/benchmarks/test_benchmarks.py +13 -0
  6. {vmecpp-0.5.2 → vmecpp-0.5.4}/environment.yml +1 -0
  7. vmecpp-0.5.4/flake.lock +27 -0
  8. vmecpp-0.5.4/flake.nix +95 -0
  9. {vmecpp-0.5.2 → vmecpp-0.5.4}/pyproject.toml +1 -0
  10. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/__init__.py +27 -1
  11. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/.bazelrc +3 -2
  12. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/docker/tsan/Dockerfile +9 -6
  13. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/docker/tsan/README.md +3 -12
  14. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/makegrid/makegrid/makegrid.cc +2 -22
  15. vmecpp-0.5.4/src/vmecpp/cpp/third_party/fftx_codelets/BUILD.bazel +33 -0
  16. vmecpp-0.5.4/src/vmecpp/cpp/third_party/fftx_codelets/README.md +155 -0
  17. vmecpp-0.5.4/src/vmecpp/cpp/third_party/fftx_codelets/codegen/dftbatch-sizes.txt +83 -0
  18. vmecpp-0.5.4/src/vmecpp/cpp/third_party/fftx_codelets/codegen/fftx_prdftbat-frame.g +144 -0
  19. vmecpp-0.5.4/src/vmecpp/cpp/third_party/fftx_codelets/codegen/post_process.py +63 -0
  20. vmecpp-0.5.4/src/vmecpp/cpp/third_party/fftx_codelets/include/fftx_minimal.hpp +31 -0
  21. vmecpp-0.5.4/src/vmecpp/cpp/third_party/fftx_codelets/include/omega64.h +103 -0
  22. 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
  23. 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
  24. 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
  25. 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
  26. 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
  27. 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
  28. 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
  29. 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
  30. 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
  31. 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
  32. 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
  33. 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
  34. 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
  35. 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
  36. 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
  37. 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
  38. 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
  39. 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
  40. 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
  41. 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
  42. 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
  43. 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
  44. 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
  45. 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
  46. 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
  47. 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
  48. 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
  49. 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
  50. 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
  51. 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
  52. 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
  53. 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
  54. 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
  55. 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
  56. 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
  57. 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
  58. 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
  59. 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
  60. 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
  61. 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
  62. 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
  63. 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
  64. 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
  65. 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
  66. 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
  67. 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
  68. 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
  69. 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
  70. 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
  71. vmecpp-0.5.4/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_iprdftbat_cpu_srcs/fftx_iprdftbat_cpu_decls.h +744 -0
  72. vmecpp-0.5.4/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_iprdftbat_cpu_srcs/fftx_iprdftbat_cpu_libentry.cpp +138 -0
  73. vmecpp-0.5.4/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_iprdftbat_cpu_srcs/fftx_iprdftbat_cpu_metadata.cpp +665 -0
  74. vmecpp-0.5.4/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_iprdftbat_cpu_srcs/fftx_iprdftbat_cpu_public.h +80 -0
  75. 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
  76. 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
  77. 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
  78. 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
  79. 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
  80. 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
  81. 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
  82. 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
  83. 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
  84. 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
  85. 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
  86. 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
  87. 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
  88. 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
  89. 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
  90. 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
  91. 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
  92. 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
  93. 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
  94. 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
  95. 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
  96. 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
  97. 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
  98. 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
  99. 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
  100. 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
  101. 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
  102. 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
  103. 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
  104. 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
  105. 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
  106. 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
  107. 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
  108. 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
  109. 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
  110. 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
  111. 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
  112. 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
  113. 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
  114. 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
  115. 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
  116. 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
  117. 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
  118. 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
  119. 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
  120. 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
  121. 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
  122. 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
  123. 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
  124. vmecpp-0.5.4/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_prdftbat_cpu_srcs/fftx_prdftbat_cpu_decls.h +744 -0
  125. vmecpp-0.5.4/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_prdftbat_cpu_srcs/fftx_prdftbat_cpu_libentry.cpp +138 -0
  126. vmecpp-0.5.4/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_prdftbat_cpu_srcs/fftx_prdftbat_cpu_metadata.cpp +665 -0
  127. vmecpp-0.5.4/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_prdftbat_cpu_srcs/fftx_prdftbat_cpu_public.h +79 -0
  128. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/common/flow_control/flow_control.cc +9 -3
  129. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/common/magnetic_configuration_lib/magnetic_configuration_lib.cc +16 -30
  130. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/common/magnetic_configuration_lib/magnetic_configuration_lib.h +6 -2
  131. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/common/magnetic_configuration_lib/magnetic_configuration_lib_test.cc +16 -4
  132. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/common/magnetic_field_provider/magnetic_field_provider_lib.cc +44 -44
  133. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/common/makegrid_lib/BUILD.bazel +1 -0
  134. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/common/makegrid_lib/makegrid_lib.cc +42 -6
  135. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/common/makegrid_lib/makegrid_lib_test.cc +199 -94
  136. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/common/util/util.cc +17 -42
  137. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/common/vmec_indata/vmec_indata_test.cc +3 -6
  138. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/free_boundary/laplace_solver/BUILD.bazel +13 -0
  139. vmecpp-0.5.4/src/vmecpp/cpp/vmecpp/free_boundary/laplace_solver/laplace_solver.cc +495 -0
  140. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/free_boundary/laplace_solver/laplace_solver.h +45 -20
  141. vmecpp-0.5.4/src/vmecpp/cpp/vmecpp/free_boundary/laplace_solver/laplace_solver_test.cc +268 -0
  142. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/free_boundary/nestor/nestor.cc +1 -2
  143. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/free_boundary/singular_integrals/singular_integrals.cc +129 -21
  144. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/free_boundary/singular_integrals/singular_integrals.h +6 -5
  145. vmecpp-0.5.4/src/vmecpp/cpp/vmecpp/free_boundary/singular_integrals/singular_integrals_test.cc +267 -0
  146. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/vmec/fourier_coefficients/fourier_coefficients.cc +1 -1
  147. vmecpp-0.5.4/src/vmecpp/cpp/vmecpp/vmec/ideal_mhd_model/BUILD.bazel +108 -0
  148. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/vmec/ideal_mhd_model/CMakeLists.txt +4 -0
  149. vmecpp-0.5.4/src/vmecpp/cpp/vmecpp/vmec/ideal_mhd_model/dft_toroidal.cc +353 -0
  150. vmecpp-0.5.4/src/vmecpp/cpp/vmecpp/vmec/ideal_mhd_model/dft_toroidal.h +37 -0
  151. vmecpp-0.5.4/src/vmecpp/cpp/vmecpp/vmec/ideal_mhd_model/fft_toroidal.cc +647 -0
  152. vmecpp-0.5.4/src/vmecpp/cpp/vmecpp/vmec/ideal_mhd_model/fft_toroidal.h +128 -0
  153. vmecpp-0.5.4/src/vmecpp/cpp/vmecpp/vmec/ideal_mhd_model/fft_toroidal_bench.cc +532 -0
  154. vmecpp-0.5.4/src/vmecpp/cpp/vmecpp/vmec/ideal_mhd_model/fft_toroidal_test.cc +279 -0
  155. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/vmec/ideal_mhd_model/ideal_mhd_model.cc +26 -338
  156. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/vmec/ideal_mhd_model/ideal_mhd_model.h +11 -21
  157. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/vmec/output_quantities/output_quantities.cc +178 -0
  158. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/vmec/output_quantities/output_quantities.h +12 -0
  159. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/vmec/pybind11/pybind_vmec.cc +7 -1
  160. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/vmec/vmec/vmec.cc +6 -1
  161. vmecpp-0.5.2/src/vmecpp/cpp/vmecpp/free_boundary/laplace_solver/laplace_solver.cc +0 -416
  162. vmecpp-0.5.2/src/vmecpp/cpp/vmecpp/free_boundary/singular_integrals/singular_integrals_test.cc +0 -59
  163. vmecpp-0.5.2/src/vmecpp/cpp/vmecpp/vmec/ideal_mhd_model/BUILD.bazel +0 -27
  164. {vmecpp-0.5.2 → vmecpp-0.5.4}/.clang-format +0 -0
  165. {vmecpp-0.5.2 → vmecpp-0.5.4}/.gitignore +0 -0
  166. {vmecpp-0.5.2 → vmecpp-0.5.4}/.gitmodules +0 -0
  167. {vmecpp-0.5.2 → vmecpp-0.5.4}/.pre-commit-config.yaml +0 -0
  168. {vmecpp-0.5.2 → vmecpp-0.5.4}/AGENTS.md +0 -0
  169. {vmecpp-0.5.2 → vmecpp-0.5.4}/CITATION.cff +0 -0
  170. {vmecpp-0.5.2 → vmecpp-0.5.4}/CLAUDE.md +0 -0
  171. {vmecpp-0.5.2 → vmecpp-0.5.4}/CODEOWNERS +0 -0
  172. {vmecpp-0.5.2 → vmecpp-0.5.4}/LICENSE.txt +0 -0
  173. {vmecpp-0.5.2 → vmecpp-0.5.4}/VMECPP_NAMING_GUIDE.md +0 -0
  174. {vmecpp-0.5.2 → vmecpp-0.5.4}/docker/Dockerfile +0 -0
  175. {vmecpp-0.5.2 → vmecpp-0.5.4}/docker/README.md +0 -0
  176. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/CMakeLists.txt +0 -0
  177. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/CMakeLists.txt +0 -0
  178. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/__main__.py +0 -0
  179. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/_free_boundary.py +0 -0
  180. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/_pydantic_numpy.py +0 -0
  181. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/_util.py +0 -0
  182. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/.bazelversion +0 -0
  183. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/.gitattributes +0 -0
  184. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/CMakeLists.txt +0 -0
  185. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/MODULE.bazel +0 -0
  186. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/MODULE.bazel.lock +0 -0
  187. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/WORKSPACE.bazel +0 -0
  188. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/docker/tsan/background_info.md +0 -0
  189. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/docker/tsan/llvm_toolchain/BUILD +0 -0
  190. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/docker/tsan/llvm_toolchain/cc_toolchain_config.bzl +0 -0
  191. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/makegrid/README.md +0 -0
  192. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/makegrid/example_inputs/makegrid_parameters.json +0 -0
  193. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/makegrid/makegrid/BUILD.bazel +0 -0
  194. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/third_party/hdf5/BUILD.bazel +0 -0
  195. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/third_party/netcdf4/BUILD.bazel +0 -0
  196. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/util/CMakeLists.txt +0 -0
  197. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/util/file_io/BUILD.bazel +0 -0
  198. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/util/file_io/CMakeLists.txt +0 -0
  199. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/util/file_io/file_io.cc +0 -0
  200. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/util/file_io/file_io.h +0 -0
  201. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/util/file_io/file_io_test.cc +0 -0
  202. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/util/hdf5_io/BUILD.bazel +0 -0
  203. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/util/hdf5_io/CMakeLists.txt +0 -0
  204. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/util/hdf5_io/hdf5_io.cc +0 -0
  205. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/util/hdf5_io/hdf5_io.h +0 -0
  206. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/util/json_io/BUILD.bazel +0 -0
  207. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/util/json_io/CMakeLists.txt +0 -0
  208. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/util/json_io/json_io.cc +0 -0
  209. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/util/json_io/json_io.h +0 -0
  210. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/util/json_io/json_io_test.cc +0 -0
  211. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/util/netcdf_io/BUILD.bazel +0 -0
  212. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/util/netcdf_io/CMakeLists.txt +0 -0
  213. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/util/netcdf_io/example_netcdf.nc +0 -0
  214. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/util/netcdf_io/netcdf_io.cc +0 -0
  215. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/util/netcdf_io/netcdf_io.h +0 -0
  216. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/util/netcdf_io/netcdf_io_test.cc +0 -0
  217. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/util/test_data/BUILD.bazel +0 -0
  218. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/util/test_data/empty.txt +0 -0
  219. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/util/test_data/lorem.txt +0 -0
  220. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/util/testing/BUILD.bazel +0 -0
  221. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/util/testing/CMakeLists.txt +0 -0
  222. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/util/testing/numerical_comparison_lib.cc +0 -0
  223. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/util/testing/numerical_comparison_lib.h +0 -0
  224. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/util/testing/numerical_comparison_test.cc +0 -0
  225. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/CMakeLists.txt +0 -0
  226. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/common/CMakeLists.txt +0 -0
  227. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/common/composed_types_definition/BUILD.bazel +0 -0
  228. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/common/composed_types_definition/CMakeLists.txt +0 -0
  229. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/common/composed_types_definition/composed_types.h +0 -0
  230. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/common/composed_types_lib/BUILD.bazel +0 -0
  231. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/common/composed_types_lib/CMakeLists.txt +0 -0
  232. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/common/composed_types_lib/composed_types_lib.cc +0 -0
  233. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/common/composed_types_lib/composed_types_lib.h +0 -0
  234. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/common/composed_types_lib/composed_types_lib_test.cc +0 -0
  235. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/common/flow_control/BUILD.bazel +0 -0
  236. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/common/flow_control/CMakeLists.txt +0 -0
  237. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/common/flow_control/flow_control.h +0 -0
  238. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/common/fourier_basis_fast_poloidal/BUILD.bazel +0 -0
  239. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/common/fourier_basis_fast_poloidal/CMakeLists.txt +0 -0
  240. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/common/fourier_basis_fast_poloidal/fourier_basis_fast_poloidal.cc +0 -0
  241. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/common/fourier_basis_fast_poloidal/fourier_basis_fast_poloidal.h +0 -0
  242. {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
  243. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/common/fourier_basis_fast_toroidal/BUILD.bazel +0 -0
  244. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/common/fourier_basis_fast_toroidal/CMakeLists.txt +0 -0
  245. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/common/fourier_basis_fast_toroidal/fourier_basis_fast_toroidal.cc +0 -0
  246. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/common/fourier_basis_fast_toroidal/fourier_basis_fast_toroidal.h +0 -0
  247. {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
  248. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/common/magnetic_configuration_definition/BUILD.bazel +0 -0
  249. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/common/magnetic_configuration_definition/CMakeLists.txt +0 -0
  250. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/common/magnetic_configuration_definition/magnetic_configuration.h +0 -0
  251. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/common/magnetic_configuration_lib/BUILD.bazel +0 -0
  252. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/common/magnetic_configuration_lib/CMakeLists.txt +0 -0
  253. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/common/magnetic_field_provider/BUILD.bazel +0 -0
  254. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/common/magnetic_field_provider/CMakeLists.txt +0 -0
  255. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/common/magnetic_field_provider/magnetic_field_provider_lib.h +0 -0
  256. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/common/magnetic_field_provider/magnetic_field_provider_lib_test.cc +0 -0
  257. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/common/makegrid_lib/CMakeLists.txt +0 -0
  258. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/common/makegrid_lib/create_reference_mgrid.sh +0 -0
  259. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/common/makegrid_lib/makegrid_lib.h +0 -0
  260. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/common/sizes/BUILD.bazel +0 -0
  261. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/common/sizes/CMakeLists.txt +0 -0
  262. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/common/sizes/sizes.cc +0 -0
  263. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/common/sizes/sizes.h +0 -0
  264. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/common/util/BUILD.bazel +0 -0
  265. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/common/util/CMakeLists.txt +0 -0
  266. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/common/util/util.h +0 -0
  267. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/common/util/util_test.cc +0 -0
  268. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/common/vmec_indata/BUILD.bazel +0 -0
  269. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/common/vmec_indata/CMakeLists.txt +0 -0
  270. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/common/vmec_indata/boundary_from_json.cc +0 -0
  271. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/common/vmec_indata/boundary_from_json.h +0 -0
  272. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/common/vmec_indata/vmec_indata.cc +0 -0
  273. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/common/vmec_indata/vmec_indata.h +0 -0
  274. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/free_boundary/CMakeLists.txt +0 -0
  275. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/free_boundary/external_magnetic_field/BUILD.bazel +0 -0
  276. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/free_boundary/external_magnetic_field/CMakeLists.txt +0 -0
  277. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/free_boundary/external_magnetic_field/external_magnetic_field.cc +0 -0
  278. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/free_boundary/external_magnetic_field/external_magnetic_field.h +0 -0
  279. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/free_boundary/free_boundary_base/BUILD.bazel +0 -0
  280. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/free_boundary/free_boundary_base/CMakeLists.txt +0 -0
  281. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/free_boundary/free_boundary_base/free_boundary_base.h +0 -0
  282. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/free_boundary/laplace_solver/CMakeLists.txt +0 -0
  283. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/free_boundary/mgrid_provider/BUILD.bazel +0 -0
  284. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/free_boundary/mgrid_provider/CMakeLists.txt +0 -0
  285. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/free_boundary/mgrid_provider/mgrid_provider.cc +0 -0
  286. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/free_boundary/mgrid_provider/mgrid_provider.h +0 -0
  287. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/free_boundary/nestor/BUILD.bazel +0 -0
  288. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/free_boundary/nestor/CMakeLists.txt +0 -0
  289. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/free_boundary/nestor/nestor.h +0 -0
  290. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/free_boundary/only_coils/BUILD.bazel +0 -0
  291. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/free_boundary/only_coils/CMakeLists.txt +0 -0
  292. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/free_boundary/only_coils/only_coils.cc +0 -0
  293. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/free_boundary/only_coils/only_coils.h +0 -0
  294. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/free_boundary/regularized_integrals/BUILD.bazel +0 -0
  295. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/free_boundary/regularized_integrals/CMakeLists.txt +0 -0
  296. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/free_boundary/regularized_integrals/regularized_integrals.cc +0 -0
  297. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/free_boundary/regularized_integrals/regularized_integrals.h +0 -0
  298. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/free_boundary/singular_integrals/BUILD.bazel +0 -0
  299. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/free_boundary/singular_integrals/CMakeLists.txt +0 -0
  300. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/free_boundary/surface_geometry/BUILD.bazel +0 -0
  301. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/free_boundary/surface_geometry/CMakeLists.txt +0 -0
  302. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/free_boundary/surface_geometry/surface_geometry.cc +0 -0
  303. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/free_boundary/surface_geometry/surface_geometry.h +0 -0
  304. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/free_boundary/surface_geometry/surface_geometry_test.cc +0 -0
  305. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/free_boundary/surface_geometry_mockup/BUILD.bazel +0 -0
  306. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/free_boundary/surface_geometry_mockup/lcfs.SurfaceRZFourier.csv +0 -0
  307. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/free_boundary/surface_geometry_mockup/surface_geometry_mockup.cc +0 -0
  308. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/free_boundary/surface_geometry_mockup/surface_geometry_mockup.h +0 -0
  309. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/free_boundary/tangential_partitioning/BUILD.bazel +0 -0
  310. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/free_boundary/tangential_partitioning/CMakeLists.txt +0 -0
  311. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/free_boundary/tangential_partitioning/tangential_partitioning.cc +0 -0
  312. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/free_boundary/tangential_partitioning/tangential_partitioning.h +0 -0
  313. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/simsopt_compat/README.md +0 -0
  314. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/simsopt_compat/__init__.py +0 -0
  315. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/simsopt_compat/_indata_to_surfacerzfourier.py +0 -0
  316. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/vmec/CMakeLists.txt +0 -0
  317. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/vmec/boundaries/BUILD.bazel +0 -0
  318. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/vmec/boundaries/CMakeLists.txt +0 -0
  319. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/vmec/boundaries/boundaries.cc +0 -0
  320. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/vmec/boundaries/boundaries.h +0 -0
  321. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/vmec/boundaries/guess_magnetic_axis.cc +0 -0
  322. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/vmec/boundaries/guess_magnetic_axis.h +0 -0
  323. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/vmec/fourier_coefficients/BUILD.bazel +0 -0
  324. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/vmec/fourier_coefficients/CMakeLists.txt +0 -0
  325. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/vmec/fourier_coefficients/fourier_coefficients.h +0 -0
  326. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/vmec/fourier_forces/BUILD.bazel +0 -0
  327. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/vmec/fourier_forces/CMakeLists.txt +0 -0
  328. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/vmec/fourier_forces/fourier_forces.cc +0 -0
  329. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/vmec/fourier_forces/fourier_forces.h +0 -0
  330. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/vmec/fourier_forces/fourier_forces_test.cc +0 -0
  331. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/vmec/fourier_geometry/BUILD.bazel +0 -0
  332. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/vmec/fourier_geometry/CMakeLists.txt +0 -0
  333. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/vmec/fourier_geometry/fourier_geometry.cc +0 -0
  334. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/vmec/fourier_geometry/fourier_geometry.h +0 -0
  335. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/vmec/fourier_velocity/BUILD.bazel +0 -0
  336. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/vmec/fourier_velocity/CMakeLists.txt +0 -0
  337. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/vmec/fourier_velocity/fourier_velocity.cc +0 -0
  338. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/vmec/fourier_velocity/fourier_velocity.h +0 -0
  339. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/vmec/handover_storage/BUILD.bazel +0 -0
  340. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/vmec/handover_storage/CMakeLists.txt +0 -0
  341. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/vmec/handover_storage/handover_storage.cc +0 -0
  342. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/vmec/handover_storage/handover_storage.h +0 -0
  343. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/vmec/ideal_mhd_model/dft_data.h +0 -0
  344. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/vmec/iteration_logger/BUILD.bazel +0 -0
  345. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/vmec/iteration_logger/CMakeLists.txt +0 -0
  346. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/vmec/iteration_logger/iteration_logger.cc +0 -0
  347. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/vmec/iteration_logger/iteration_logger.h +0 -0
  348. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/vmec/output_quantities/BUILD.bazel +0 -0
  349. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/vmec/output_quantities/CMakeLists.txt +0 -0
  350. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/vmec/output_quantities/output_quantities_io_test.cc +0 -0
  351. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/vmec/output_quantities/output_quantities_test.cc +0 -0
  352. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/vmec/output_quantities/test_helpers.h +0 -0
  353. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/vmec/profile_parameterization_data/BUILD.bazel +0 -0
  354. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/vmec/profile_parameterization_data/CMakeLists.txt +0 -0
  355. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/vmec/profile_parameterization_data/profile_parameterization_data.cc +0 -0
  356. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/vmec/profile_parameterization_data/profile_parameterization_data.h +0 -0
  357. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/vmec/pybind11/.gitignore +0 -0
  358. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/vmec/pybind11/BUILD.bazel +0 -0
  359. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/vmec/radial_partitioning/BUILD.bazel +0 -0
  360. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/vmec/radial_partitioning/CMakeLists.txt +0 -0
  361. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/vmec/radial_partitioning/radial_partitioning.cc +0 -0
  362. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/vmec/radial_partitioning/radial_partitioning.h +0 -0
  363. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/vmec/radial_partitioning/radial_partitioning_test.cc +0 -0
  364. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/vmec/radial_profiles/BUILD.bazel +0 -0
  365. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/vmec/radial_profiles/CMakeLists.txt +0 -0
  366. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/vmec/radial_profiles/radial_profiles.cc +0 -0
  367. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/vmec/radial_profiles/radial_profiles.h +0 -0
  368. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/vmec/thread_local_storage/BUILD.bazel +0 -0
  369. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/vmec/thread_local_storage/CMakeLists.txt +0 -0
  370. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/vmec/thread_local_storage/thread_local_storage.cc +0 -0
  371. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/vmec/thread_local_storage/thread_local_storage.h +0 -0
  372. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/vmec/vmec/BUILD.bazel +0 -0
  373. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/vmec/vmec/CMakeLists.txt +0 -0
  374. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/vmec/vmec/vmec.h +0 -0
  375. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/vmec/vmec/vmec_in_memory_mgrid_test.cc +0 -0
  376. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/vmec/vmec/vmec_test.cc +0 -0
  377. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/vmec/vmec_constants/BUILD.bazel +0 -0
  378. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/vmec/vmec_constants/CMakeLists.txt +0 -0
  379. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/vmec/vmec_constants/vmec_algorithm_constants.h +0 -0
  380. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/vmec/vmec_constants/vmec_constants.cc +0 -0
  381. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/vmec/vmec_constants/vmec_constants.h +0 -0
  382. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/vmec/vmec_standalone/BUILD.bazel +0 -0
  383. {vmecpp-0.5.2 → vmecpp-0.5.4}/src/vmecpp/cpp/vmecpp/vmec/vmec_standalone/vmec_standalone.cc +0 -0
  384. {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.2
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
  # ---------------------------------------------------------------------------
@@ -28,6 +28,7 @@ dependencies:
28
28
  - gfortran_impl_linux-64=14.2.0=hc73f493_1
29
29
  - gxx=14.2.0=h96c4ede_1
30
30
  - gxx_impl_linux-64=14.2.0=h2c03514_1
31
+ - fftw>=3.3
31
32
  - hdf4=4.2.15=h2a13503_7
32
33
  - hdf5=1.14.3=nompi_hdf9ad27_105
33
34
  - kernel-headers_linux-64=5.14.0=h8bc681e_0
@@ -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
- """Maximum number of force-balance iterations allowed."""
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" --linkopt="-larcher" \
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
- # Make a shallow clone of the LLVM repo.
13
- RUN git clone --depth 1 https://github.com/llvm/llvm-project.git
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.19.0/bazelisk-linux-amd64" --output "/usr/bin/bazel" \
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. Make sure the `LD_LIBRARY_PATH` environment variable is set to the location of
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
- 7. Run example cases using the TSan-enabled executable:
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
- 8. Clean up the Bazel cache after the TSan/Archer work is done:
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
- m_magnetic_configuration);
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
+ )