vmecpp 0.7.2__tar.gz → 0.7.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 (439) hide show
  1. {vmecpp-0.7.2 → vmecpp-0.7.4}/AGENTS.md +42 -0
  2. vmecpp-0.7.4/CMakeLists.txt +453 -0
  3. {vmecpp-0.7.2 → vmecpp-0.7.4}/PKG-INFO +11 -27
  4. {vmecpp-0.7.2 → vmecpp-0.7.4}/README.md +9 -26
  5. {vmecpp-0.7.2 → vmecpp-0.7.4}/benchmarks/test_benchmarks.py +1 -15
  6. {vmecpp-0.7.2 → vmecpp-0.7.4}/docker/Dockerfile +0 -1
  7. {vmecpp-0.7.2 → vmecpp-0.7.4}/environment.yml +0 -1
  8. {vmecpp-0.7.2 → vmecpp-0.7.4}/pyproject.toml +8 -4
  9. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/__init__.py +179 -54
  10. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/__main__.py +1 -1
  11. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/_free_boundary.py +8 -5
  12. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/_pydantic_numpy.py +20 -2
  13. vmecpp-0.7.4/src/vmecpp/_qs.py +180 -0
  14. vmecpp-0.7.4/src/vmecpp/_rescale.py +97 -0
  15. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/_util.py +13 -11
  16. vmecpp-0.7.4/src/vmecpp/autodiff.py +465 -0
  17. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/docker/tsan/Dockerfile +1 -2
  18. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/util/hdf5_io/BUILD.bazel +10 -0
  19. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/util/hdf5_io/hdf5_io.cc +22 -3
  20. vmecpp-0.7.4/src/vmecpp/cpp/util/hdf5_io/hdf5_io_test.cc +54 -0
  21. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/common/enzyme/local_force_hessian_test.cc +60 -175
  22. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/common/fourier_basis/fourier_basis.cc +75 -0
  23. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/common/fourier_basis/fourier_basis.h +46 -0
  24. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/common/fourier_basis_fast_poloidal/fourier_basis_fast_poloidal_test.cc +134 -1
  25. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/common/fourier_basis_fast_toroidal/fourier_basis_fast_toroidal_test.cc +1 -1
  26. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/common/magnetic_field_provider/BUILD.bazel +1 -0
  27. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/common/magnetic_field_provider/magnetic_field_provider_lib.cc +395 -295
  28. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/common/magnetic_field_provider/magnetic_field_provider_lib.h +19 -0
  29. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/common/magnetic_field_provider/magnetic_field_provider_lib_test.cc +252 -44
  30. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/common/makegrid_lib/BUILD.bazel +1 -0
  31. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/common/makegrid_lib/makegrid_lib.cc +168 -187
  32. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/common/makegrid_lib/makegrid_lib_test.cc +467 -52
  33. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/common/sizes/sizes.cc +2 -3
  34. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/common/util/util.cc +6 -2
  35. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/common/util/util.h +40 -3
  36. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/common/vmec_indata/BUILD.bazel +2 -0
  37. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/common/vmec_indata/vmec_indata.cc +141 -46
  38. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/common/vmec_indata/vmec_indata.h +5 -0
  39. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/common/vmec_indata/vmec_indata_test.cc +131 -3
  40. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/free_boundary/external_magnetic_field/BUILD.bazel +1 -0
  41. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/free_boundary/external_magnetic_field/external_magnetic_field.cc +9 -5
  42. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/free_boundary/external_magnetic_field/external_magnetic_field.h +5 -2
  43. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/free_boundary/free_boundary_base/BUILD.bazel +1 -0
  44. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/free_boundary/free_boundary_base/free_boundary_base.h +3 -1
  45. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/free_boundary/laplace_solver/BUILD.bazel +0 -4
  46. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/free_boundary/laplace_solver/laplace_solver.cc +90 -111
  47. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/free_boundary/laplace_solver/laplace_solver.h +20 -4
  48. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/free_boundary/laplace_solver/laplace_solver_bench.cc +15 -14
  49. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/free_boundary/laplace_solver/laplace_solver_test.cc +8 -4
  50. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/free_boundary/mgrid_provider/BUILD.bazel +1 -0
  51. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/free_boundary/mgrid_provider/mgrid_provider.cc +141 -91
  52. vmecpp-0.7.4/src/vmecpp/cpp/vmecpp/free_boundary/mgrid_provider/mgrid_provider.h +104 -0
  53. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/free_boundary/nestor/BUILD.bazel +14 -0
  54. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/free_boundary/nestor/nestor.cc +21 -19
  55. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/free_boundary/nestor/nestor.h +7 -3
  56. vmecpp-0.7.4/src/vmecpp/cpp/vmecpp/free_boundary/nestor/nestor_test.cc +158 -0
  57. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/free_boundary/only_coils/only_coils.cc +15 -17
  58. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/free_boundary/only_coils/only_coils.h +6 -2
  59. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/free_boundary/regularized_integrals/regularized_integrals.cc +13 -10
  60. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/free_boundary/singular_integrals/singular_integrals.cc +35 -24
  61. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/free_boundary/singular_integrals/singular_integrals_test.cc +143 -0
  62. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/free_boundary/tangential_partitioning/tangential_partitioning.cc +2 -0
  63. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/free_boundary/tangential_partitioning/tangential_partitioning.h +1 -0
  64. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/vmec/CMakeLists.txt +1 -0
  65. vmecpp-0.7.4/src/vmecpp/cpp/vmecpp/vmec/boundaries/BUILD.bazel +66 -0
  66. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/vmec/boundaries/boundaries.cc +89 -13
  67. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/vmec/boundaries/boundaries.h +10 -0
  68. vmecpp-0.7.4/src/vmecpp/cpp/vmecpp/vmec/boundaries/boundaries_test.cc +113 -0
  69. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/vmec/boundaries/guess_magnetic_axis.cc +57 -33
  70. vmecpp-0.7.4/src/vmecpp/cpp/vmecpp/vmec/boundaries/guess_magnetic_axis_test.cc +191 -0
  71. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/vmec/fourier_coefficients/fourier_coefficients.cc +11 -6
  72. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/vmec/fourier_coefficients/fourier_coefficients.h +4 -1
  73. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/vmec/fourier_geometry/BUILD.bazel +2 -0
  74. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/vmec/fourier_geometry/fourier_geometry.cc +170 -78
  75. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/vmec/fourier_geometry/fourier_geometry.h +23 -14
  76. vmecpp-0.7.4/src/vmecpp/cpp/vmecpp/vmec/geometry/BUILD.bazel +37 -0
  77. vmecpp-0.7.4/src/vmecpp/cpp/vmecpp/vmec/geometry/CMakeLists.txt +7 -0
  78. vmecpp-0.7.4/src/vmecpp/cpp/vmecpp/vmec/geometry/geometry.cc +259 -0
  79. vmecpp-0.7.4/src/vmecpp/cpp/vmecpp/vmec/geometry/geometry.h +64 -0
  80. vmecpp-0.7.4/src/vmecpp/cpp/vmecpp/vmec/geometry/geometry_test.cc +84 -0
  81. vmecpp-0.7.4/src/vmecpp/cpp/vmecpp/vmec/geometry/vmec_geometry.cc +137 -0
  82. vmecpp-0.7.4/src/vmecpp/cpp/vmecpp/vmec/geometry/vmec_geometry.h +30 -0
  83. vmecpp-0.7.4/src/vmecpp/cpp/vmecpp/vmec/geometry/vmec_geometry_test.cc +133 -0
  84. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/vmec/handover_storage/BUILD.bazel +1 -0
  85. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/vmec/handover_storage/handover_storage.cc +3 -0
  86. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/vmec/handover_storage/handover_storage.h +28 -0
  87. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/vmec/ideal_mhd_model/BUILD.bazel +2 -1
  88. vmecpp-0.7.4/src/vmecpp/cpp/vmecpp/vmec/ideal_mhd_model/constraint_force_kernel.h +210 -0
  89. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/vmec/ideal_mhd_model/dft_toroidal.cc +13 -9
  90. vmecpp-0.7.4/src/vmecpp/cpp/vmecpp/vmec/ideal_mhd_model/exact_force_jvp.cc +28 -0
  91. vmecpp-0.7.4/src/vmecpp/cpp/vmecpp/vmec/ideal_mhd_model/exact_force_jvp.h +23 -0
  92. vmecpp-0.7.4/src/vmecpp/cpp/vmecpp/vmec/ideal_mhd_model/exact_force_vjp.cc +30 -0
  93. vmecpp-0.7.4/src/vmecpp/cpp/vmecpp/vmec/ideal_mhd_model/exact_force_vjp.h +26 -0
  94. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/vmec/ideal_mhd_model/fft_toroidal.cc +1 -3
  95. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/vmec/ideal_mhd_model/ideal_mhd_model.cc +1140 -405
  96. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/vmec/ideal_mhd_model/ideal_mhd_model.h +118 -3
  97. vmecpp-0.7.4/src/vmecpp/cpp/vmecpp/vmec/ideal_mhd_model/local_force_composition.h +339 -0
  98. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/vmec/output_quantities/BUILD.bazel +15 -1
  99. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/vmec/output_quantities/output_quantities.cc +345 -393
  100. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/vmec/output_quantities/output_quantities.h +62 -10
  101. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/vmec/output_quantities/output_quantities_bench.cc +2 -2
  102. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/vmec/output_quantities/output_quantities_test.cc +267 -9
  103. vmecpp-0.7.4/src/vmecpp/cpp/vmecpp/vmec/output_quantities/test_helpers.h +461 -0
  104. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/vmec/profile_parameterization_data/BUILD.bazel +1 -1
  105. vmecpp-0.7.4/src/vmecpp/cpp/vmecpp/vmec/profile_parameterization_data/profile_parameterization_data.cc +170 -0
  106. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/vmec/profile_parameterization_data/profile_parameterization_data.h +14 -2
  107. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/vmec/pybind11/BUILD.bazel +2 -0
  108. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/vmec/pybind11/pybind_vmec.cc +279 -4
  109. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/vmec/radial_profiles/BUILD.bazel +1 -0
  110. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/vmec/radial_profiles/radial_profiles.cc +107 -182
  111. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/vmec/radial_profiles/radial_profiles.h +7 -4
  112. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/vmec/radial_profiles/radial_profiles_test.cc +223 -0
  113. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/vmec/vmec/BUILD.bazel +8 -1
  114. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/vmec/vmec/vmec.cc +111 -67
  115. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/vmec/vmec/vmec.h +9 -2
  116. vmecpp-0.7.4/src/vmecpp/cpp/vmecpp/vmec/vmec/vmec_in_memory_mgrid_test.cc +358 -0
  117. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/vmec/vmec/vmec_test.cc +504 -16
  118. vmecpp-0.7.4/src/vmecpp/geometry.py +260 -0
  119. vmecpp-0.7.4/src/vmecpp/qs.py +177 -0
  120. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/simsopt_compat.py +8 -1
  121. vmecpp-0.7.2/CMakeLists.txt +0 -210
  122. vmecpp-0.7.2/src/vmecpp/cpp/vmecpp/free_boundary/mgrid_provider/mgrid_provider.h +0 -75
  123. vmecpp-0.7.2/src/vmecpp/cpp/vmecpp/vmec/boundaries/BUILD.bazel +0 -27
  124. vmecpp-0.7.2/src/vmecpp/cpp/vmecpp/vmec/ideal_mhd_model/constraint_force_kernel.h +0 -68
  125. vmecpp-0.7.2/src/vmecpp/cpp/vmecpp/vmec/output_quantities/test_helpers.h +0 -128
  126. vmecpp-0.7.2/src/vmecpp/cpp/vmecpp/vmec/profile_parameterization_data/profile_parameterization_data.cc +0 -28
  127. vmecpp-0.7.2/src/vmecpp/cpp/vmecpp/vmec/vmec/vmec_in_memory_mgrid_test.cc +0 -133
  128. {vmecpp-0.7.2 → vmecpp-0.7.4}/.clang-format +0 -0
  129. {vmecpp-0.7.2 → vmecpp-0.7.4}/.clang-tidy +0 -0
  130. {vmecpp-0.7.2 → vmecpp-0.7.4}/.gitignore +0 -0
  131. {vmecpp-0.7.2 → vmecpp-0.7.4}/.gitmodules +0 -0
  132. {vmecpp-0.7.2 → vmecpp-0.7.4}/.pre-commit-config.yaml +0 -0
  133. {vmecpp-0.7.2 → vmecpp-0.7.4}/CITATION.cff +0 -0
  134. {vmecpp-0.7.2 → vmecpp-0.7.4}/CLAUDE.md +0 -0
  135. {vmecpp-0.7.2 → vmecpp-0.7.4}/CODEOWNERS +0 -0
  136. {vmecpp-0.7.2 → vmecpp-0.7.4}/LICENSE.txt +0 -0
  137. {vmecpp-0.7.2 → vmecpp-0.7.4}/VMECPP_NAMING_GUIDE.md +0 -0
  138. {vmecpp-0.7.2 → vmecpp-0.7.4}/benchmarks/to_seconds_json.py +0 -0
  139. {vmecpp-0.7.2 → vmecpp-0.7.4}/docker/README.md +0 -0
  140. {vmecpp-0.7.2 → vmecpp-0.7.4}/flake.lock +0 -0
  141. {vmecpp-0.7.2 → vmecpp-0.7.4}/flake.nix +0 -0
  142. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/CMakeLists.txt +0 -0
  143. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/CMakeLists.txt +0 -0
  144. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/_continuation.py +0 -0
  145. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/_iteration.py +0 -0
  146. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/.bazelrc +0 -0
  147. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/.bazelversion +0 -0
  148. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/.gitattributes +0 -0
  149. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/CMakeLists.txt +0 -0
  150. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/MODULE.bazel +0 -0
  151. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/MODULE.bazel.lock +0 -0
  152. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/docker/tsan/README.md +0 -0
  153. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/docker/tsan/background_info.md +0 -0
  154. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/docker/tsan/llvm_toolchain/BUILD +0 -0
  155. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/docker/tsan/llvm_toolchain/cc_toolchain_config.bzl +0 -0
  156. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/makegrid/README.md +0 -0
  157. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/makegrid/example_inputs/makegrid_parameters.json +0 -0
  158. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/makegrid/makegrid/BUILD.bazel +0 -0
  159. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/makegrid/makegrid/makegrid.cc +0 -0
  160. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/third_party/BUILD.bazel +0 -0
  161. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/third_party/fftx_codelets/BUILD.bazel +0 -0
  162. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/third_party/fftx_codelets/README.md +0 -0
  163. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/third_party/fftx_codelets/codegen/dftbatch-sizes.txt +0 -0
  164. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/third_party/fftx_codelets/codegen/fftx_prdftbat-frame.g +0 -0
  165. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/third_party/fftx_codelets/codegen/post_process.py +0 -0
  166. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/third_party/fftx_codelets/include/fftx_minimal.hpp +0 -0
  167. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/third_party/fftx_codelets/include/omega64.h +0 -0
  168. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_iprdftbat_cpu_srcs/fftx_iprdftbat_16_bat_120_APar_APar_CPU.cpp +0 -0
  169. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_iprdftbat_cpu_srcs/fftx_iprdftbat_16_bat_144_APar_APar_CPU.cpp +0 -0
  170. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_iprdftbat_cpu_srcs/fftx_iprdftbat_16_bat_168_APar_APar_CPU.cpp +0 -0
  171. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_iprdftbat_cpu_srcs/fftx_iprdftbat_16_bat_192_APar_APar_CPU.cpp +0 -0
  172. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_iprdftbat_cpu_srcs/fftx_iprdftbat_16_bat_216_APar_APar_CPU.cpp +0 -0
  173. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_iprdftbat_cpu_srcs/fftx_iprdftbat_16_bat_72_APar_APar_CPU.cpp +0 -0
  174. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_iprdftbat_cpu_srcs/fftx_iprdftbat_16_bat_96_APar_APar_CPU.cpp +0 -0
  175. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_iprdftbat_cpu_srcs/fftx_iprdftbat_20_bat_120_APar_APar_CPU.cpp +0 -0
  176. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_iprdftbat_cpu_srcs/fftx_iprdftbat_20_bat_144_APar_APar_CPU.cpp +0 -0
  177. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_iprdftbat_cpu_srcs/fftx_iprdftbat_20_bat_168_APar_APar_CPU.cpp +0 -0
  178. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_iprdftbat_cpu_srcs/fftx_iprdftbat_20_bat_192_APar_APar_CPU.cpp +0 -0
  179. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_iprdftbat_cpu_srcs/fftx_iprdftbat_20_bat_216_APar_APar_CPU.cpp +0 -0
  180. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_iprdftbat_cpu_srcs/fftx_iprdftbat_20_bat_72_APar_APar_CPU.cpp +0 -0
  181. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_iprdftbat_cpu_srcs/fftx_iprdftbat_20_bat_96_APar_APar_CPU.cpp +0 -0
  182. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_iprdftbat_cpu_srcs/fftx_iprdftbat_24_bat_120_APar_APar_CPU.cpp +0 -0
  183. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_iprdftbat_cpu_srcs/fftx_iprdftbat_24_bat_144_APar_APar_CPU.cpp +0 -0
  184. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_iprdftbat_cpu_srcs/fftx_iprdftbat_24_bat_168_APar_APar_CPU.cpp +0 -0
  185. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_iprdftbat_cpu_srcs/fftx_iprdftbat_24_bat_192_APar_APar_CPU.cpp +0 -0
  186. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_iprdftbat_cpu_srcs/fftx_iprdftbat_24_bat_216_APar_APar_CPU.cpp +0 -0
  187. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_iprdftbat_cpu_srcs/fftx_iprdftbat_24_bat_72_APar_APar_CPU.cpp +0 -0
  188. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_iprdftbat_cpu_srcs/fftx_iprdftbat_24_bat_96_APar_APar_CPU.cpp +0 -0
  189. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_iprdftbat_cpu_srcs/fftx_iprdftbat_28_bat_120_APar_APar_CPU.cpp +0 -0
  190. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_iprdftbat_cpu_srcs/fftx_iprdftbat_28_bat_144_APar_APar_CPU.cpp +0 -0
  191. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_iprdftbat_cpu_srcs/fftx_iprdftbat_28_bat_168_APar_APar_CPU.cpp +0 -0
  192. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_iprdftbat_cpu_srcs/fftx_iprdftbat_28_bat_192_APar_APar_CPU.cpp +0 -0
  193. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_iprdftbat_cpu_srcs/fftx_iprdftbat_28_bat_216_APar_APar_CPU.cpp +0 -0
  194. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_iprdftbat_cpu_srcs/fftx_iprdftbat_28_bat_72_APar_APar_CPU.cpp +0 -0
  195. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_iprdftbat_cpu_srcs/fftx_iprdftbat_28_bat_96_APar_APar_CPU.cpp +0 -0
  196. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_iprdftbat_cpu_srcs/fftx_iprdftbat_32_bat_120_APar_APar_CPU.cpp +0 -0
  197. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_iprdftbat_cpu_srcs/fftx_iprdftbat_32_bat_144_APar_APar_CPU.cpp +0 -0
  198. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_iprdftbat_cpu_srcs/fftx_iprdftbat_32_bat_168_APar_APar_CPU.cpp +0 -0
  199. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_iprdftbat_cpu_srcs/fftx_iprdftbat_32_bat_192_APar_APar_CPU.cpp +0 -0
  200. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_iprdftbat_cpu_srcs/fftx_iprdftbat_32_bat_216_APar_APar_CPU.cpp +0 -0
  201. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_iprdftbat_cpu_srcs/fftx_iprdftbat_32_bat_72_APar_APar_CPU.cpp +0 -0
  202. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_iprdftbat_cpu_srcs/fftx_iprdftbat_32_bat_96_APar_APar_CPU.cpp +0 -0
  203. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_iprdftbat_cpu_srcs/fftx_iprdftbat_36_bat_120_APar_APar_CPU.cpp +0 -0
  204. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_iprdftbat_cpu_srcs/fftx_iprdftbat_36_bat_144_APar_APar_CPU.cpp +0 -0
  205. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_iprdftbat_cpu_srcs/fftx_iprdftbat_36_bat_168_APar_APar_CPU.cpp +0 -0
  206. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_iprdftbat_cpu_srcs/fftx_iprdftbat_36_bat_192_APar_APar_CPU.cpp +0 -0
  207. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_iprdftbat_cpu_srcs/fftx_iprdftbat_36_bat_216_APar_APar_CPU.cpp +0 -0
  208. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_iprdftbat_cpu_srcs/fftx_iprdftbat_36_bat_72_APar_APar_CPU.cpp +0 -0
  209. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_iprdftbat_cpu_srcs/fftx_iprdftbat_36_bat_96_APar_APar_CPU.cpp +0 -0
  210. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_iprdftbat_cpu_srcs/fftx_iprdftbat_40_bat_120_APar_APar_CPU.cpp +0 -0
  211. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_iprdftbat_cpu_srcs/fftx_iprdftbat_40_bat_144_APar_APar_CPU.cpp +0 -0
  212. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_iprdftbat_cpu_srcs/fftx_iprdftbat_40_bat_168_APar_APar_CPU.cpp +0 -0
  213. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_iprdftbat_cpu_srcs/fftx_iprdftbat_40_bat_192_APar_APar_CPU.cpp +0 -0
  214. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_iprdftbat_cpu_srcs/fftx_iprdftbat_40_bat_216_APar_APar_CPU.cpp +0 -0
  215. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_iprdftbat_cpu_srcs/fftx_iprdftbat_40_bat_72_APar_APar_CPU.cpp +0 -0
  216. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_iprdftbat_cpu_srcs/fftx_iprdftbat_40_bat_96_APar_APar_CPU.cpp +0 -0
  217. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_iprdftbat_cpu_srcs/fftx_iprdftbat_cpu_decls.h +0 -0
  218. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_iprdftbat_cpu_srcs/fftx_iprdftbat_cpu_libentry.cpp +0 -0
  219. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_iprdftbat_cpu_srcs/fftx_iprdftbat_cpu_metadata.cpp +0 -0
  220. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_iprdftbat_cpu_srcs/fftx_iprdftbat_cpu_public.h +0 -0
  221. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_prdftbat_cpu_srcs/fftx_prdftbat_16_bat_120_APar_APar_CPU.cpp +0 -0
  222. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_prdftbat_cpu_srcs/fftx_prdftbat_16_bat_144_APar_APar_CPU.cpp +0 -0
  223. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_prdftbat_cpu_srcs/fftx_prdftbat_16_bat_168_APar_APar_CPU.cpp +0 -0
  224. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_prdftbat_cpu_srcs/fftx_prdftbat_16_bat_192_APar_APar_CPU.cpp +0 -0
  225. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_prdftbat_cpu_srcs/fftx_prdftbat_16_bat_216_APar_APar_CPU.cpp +0 -0
  226. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_prdftbat_cpu_srcs/fftx_prdftbat_16_bat_72_APar_APar_CPU.cpp +0 -0
  227. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_prdftbat_cpu_srcs/fftx_prdftbat_16_bat_96_APar_APar_CPU.cpp +0 -0
  228. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_prdftbat_cpu_srcs/fftx_prdftbat_20_bat_120_APar_APar_CPU.cpp +0 -0
  229. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_prdftbat_cpu_srcs/fftx_prdftbat_20_bat_144_APar_APar_CPU.cpp +0 -0
  230. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_prdftbat_cpu_srcs/fftx_prdftbat_20_bat_168_APar_APar_CPU.cpp +0 -0
  231. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_prdftbat_cpu_srcs/fftx_prdftbat_20_bat_192_APar_APar_CPU.cpp +0 -0
  232. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_prdftbat_cpu_srcs/fftx_prdftbat_20_bat_216_APar_APar_CPU.cpp +0 -0
  233. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_prdftbat_cpu_srcs/fftx_prdftbat_20_bat_72_APar_APar_CPU.cpp +0 -0
  234. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_prdftbat_cpu_srcs/fftx_prdftbat_20_bat_96_APar_APar_CPU.cpp +0 -0
  235. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_prdftbat_cpu_srcs/fftx_prdftbat_24_bat_120_APar_APar_CPU.cpp +0 -0
  236. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_prdftbat_cpu_srcs/fftx_prdftbat_24_bat_144_APar_APar_CPU.cpp +0 -0
  237. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_prdftbat_cpu_srcs/fftx_prdftbat_24_bat_168_APar_APar_CPU.cpp +0 -0
  238. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_prdftbat_cpu_srcs/fftx_prdftbat_24_bat_192_APar_APar_CPU.cpp +0 -0
  239. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_prdftbat_cpu_srcs/fftx_prdftbat_24_bat_216_APar_APar_CPU.cpp +0 -0
  240. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_prdftbat_cpu_srcs/fftx_prdftbat_24_bat_72_APar_APar_CPU.cpp +0 -0
  241. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_prdftbat_cpu_srcs/fftx_prdftbat_24_bat_96_APar_APar_CPU.cpp +0 -0
  242. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_prdftbat_cpu_srcs/fftx_prdftbat_28_bat_120_APar_APar_CPU.cpp +0 -0
  243. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_prdftbat_cpu_srcs/fftx_prdftbat_28_bat_144_APar_APar_CPU.cpp +0 -0
  244. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_prdftbat_cpu_srcs/fftx_prdftbat_28_bat_168_APar_APar_CPU.cpp +0 -0
  245. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_prdftbat_cpu_srcs/fftx_prdftbat_28_bat_192_APar_APar_CPU.cpp +0 -0
  246. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_prdftbat_cpu_srcs/fftx_prdftbat_28_bat_216_APar_APar_CPU.cpp +0 -0
  247. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_prdftbat_cpu_srcs/fftx_prdftbat_28_bat_72_APar_APar_CPU.cpp +0 -0
  248. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_prdftbat_cpu_srcs/fftx_prdftbat_28_bat_96_APar_APar_CPU.cpp +0 -0
  249. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_prdftbat_cpu_srcs/fftx_prdftbat_32_bat_120_APar_APar_CPU.cpp +0 -0
  250. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_prdftbat_cpu_srcs/fftx_prdftbat_32_bat_144_APar_APar_CPU.cpp +0 -0
  251. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_prdftbat_cpu_srcs/fftx_prdftbat_32_bat_168_APar_APar_CPU.cpp +0 -0
  252. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_prdftbat_cpu_srcs/fftx_prdftbat_32_bat_192_APar_APar_CPU.cpp +0 -0
  253. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_prdftbat_cpu_srcs/fftx_prdftbat_32_bat_216_APar_APar_CPU.cpp +0 -0
  254. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_prdftbat_cpu_srcs/fftx_prdftbat_32_bat_72_APar_APar_CPU.cpp +0 -0
  255. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_prdftbat_cpu_srcs/fftx_prdftbat_32_bat_96_APar_APar_CPU.cpp +0 -0
  256. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_prdftbat_cpu_srcs/fftx_prdftbat_36_bat_120_APar_APar_CPU.cpp +0 -0
  257. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_prdftbat_cpu_srcs/fftx_prdftbat_36_bat_144_APar_APar_CPU.cpp +0 -0
  258. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_prdftbat_cpu_srcs/fftx_prdftbat_36_bat_168_APar_APar_CPU.cpp +0 -0
  259. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_prdftbat_cpu_srcs/fftx_prdftbat_36_bat_192_APar_APar_CPU.cpp +0 -0
  260. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_prdftbat_cpu_srcs/fftx_prdftbat_36_bat_216_APar_APar_CPU.cpp +0 -0
  261. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_prdftbat_cpu_srcs/fftx_prdftbat_36_bat_72_APar_APar_CPU.cpp +0 -0
  262. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_prdftbat_cpu_srcs/fftx_prdftbat_36_bat_96_APar_APar_CPU.cpp +0 -0
  263. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_prdftbat_cpu_srcs/fftx_prdftbat_40_bat_120_APar_APar_CPU.cpp +0 -0
  264. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_prdftbat_cpu_srcs/fftx_prdftbat_40_bat_144_APar_APar_CPU.cpp +0 -0
  265. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_prdftbat_cpu_srcs/fftx_prdftbat_40_bat_168_APar_APar_CPU.cpp +0 -0
  266. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_prdftbat_cpu_srcs/fftx_prdftbat_40_bat_192_APar_APar_CPU.cpp +0 -0
  267. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_prdftbat_cpu_srcs/fftx_prdftbat_40_bat_216_APar_APar_CPU.cpp +0 -0
  268. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_prdftbat_cpu_srcs/fftx_prdftbat_40_bat_72_APar_APar_CPU.cpp +0 -0
  269. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_prdftbat_cpu_srcs/fftx_prdftbat_40_bat_96_APar_APar_CPU.cpp +0 -0
  270. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_prdftbat_cpu_srcs/fftx_prdftbat_cpu_decls.h +0 -0
  271. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_prdftbat_cpu_srcs/fftx_prdftbat_cpu_libentry.cpp +0 -0
  272. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_prdftbat_cpu_srcs/fftx_prdftbat_cpu_metadata.cpp +0 -0
  273. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/third_party/fftx_codelets/lib_fftx_prdftbat_cpu_srcs/fftx_prdftbat_cpu_public.h +0 -0
  274. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/third_party/hdf5/BUILD.bazel +0 -0
  275. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/third_party/netcdf4/BUILD.bazel +0 -0
  276. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/third_party/non_module_deps.bzl +0 -0
  277. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/util/CMakeLists.txt +0 -0
  278. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/util/file_io/BUILD.bazel +0 -0
  279. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/util/file_io/CMakeLists.txt +0 -0
  280. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/util/file_io/file_io.cc +0 -0
  281. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/util/file_io/file_io.h +0 -0
  282. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/util/file_io/file_io_test.cc +0 -0
  283. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/util/hdf5_io/CMakeLists.txt +0 -0
  284. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/util/hdf5_io/hdf5_io.h +0 -0
  285. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/util/json_io/BUILD.bazel +0 -0
  286. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/util/json_io/CMakeLists.txt +0 -0
  287. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/util/json_io/json_io.cc +0 -0
  288. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/util/json_io/json_io.h +0 -0
  289. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/util/json_io/json_io_test.cc +0 -0
  290. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/util/netcdf_io/BUILD.bazel +0 -0
  291. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/util/netcdf_io/CMakeLists.txt +0 -0
  292. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/util/netcdf_io/example_netcdf.nc +0 -0
  293. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/util/netcdf_io/netcdf_io.cc +0 -0
  294. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/util/netcdf_io/netcdf_io.h +0 -0
  295. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/util/netcdf_io/netcdf_io_test.cc +0 -0
  296. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/util/test_data/BUILD.bazel +0 -0
  297. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/util/test_data/empty.txt +0 -0
  298. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/util/test_data/lorem.txt +0 -0
  299. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/util/testing/BUILD.bazel +0 -0
  300. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/util/testing/CMakeLists.txt +0 -0
  301. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/util/testing/numerical_comparison_lib.cc +0 -0
  302. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/util/testing/numerical_comparison_lib.h +0 -0
  303. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/util/testing/numerical_comparison_test.cc +0 -0
  304. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/CMakeLists.txt +0 -0
  305. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/common/CMakeLists.txt +0 -0
  306. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/common/composed_types_definition/BUILD.bazel +0 -0
  307. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/common/composed_types_definition/CMakeLists.txt +0 -0
  308. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/common/composed_types_definition/composed_types.h +0 -0
  309. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/common/composed_types_lib/BUILD.bazel +0 -0
  310. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/common/composed_types_lib/CMakeLists.txt +0 -0
  311. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/common/composed_types_lib/composed_types_lib.cc +0 -0
  312. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/common/composed_types_lib/composed_types_lib.h +0 -0
  313. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/common/composed_types_lib/composed_types_lib_test.cc +0 -0
  314. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/common/enzyme/BUILD.bazel +0 -0
  315. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/common/enzyme/enzyme.h +0 -0
  316. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/common/enzyme/enzyme_smoke_test.cc +0 -0
  317. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/common/enzyme/jacobian_kernel_autodiff_test.cc +0 -0
  318. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/common/flow_control/BUILD.bazel +0 -0
  319. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/common/flow_control/CMakeLists.txt +0 -0
  320. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/common/flow_control/flow_control.cc +0 -0
  321. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/common/flow_control/flow_control.h +0 -0
  322. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/common/fourier_basis/BUILD.bazel +0 -0
  323. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/common/fourier_basis/CMakeLists.txt +0 -0
  324. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/common/fourier_basis_fast_poloidal/BUILD.bazel +0 -0
  325. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/common/fourier_basis_fast_poloidal/CMakeLists.txt +0 -0
  326. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/common/fourier_basis_fast_poloidal/fourier_basis_fast_poloidal.h +0 -0
  327. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/common/fourier_basis_fast_toroidal/BUILD.bazel +0 -0
  328. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/common/fourier_basis_fast_toroidal/CMakeLists.txt +0 -0
  329. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/common/fourier_basis_fast_toroidal/fourier_basis_fast_toroidal.h +0 -0
  330. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/common/magnetic_configuration_definition/BUILD.bazel +0 -0
  331. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/common/magnetic_configuration_definition/CMakeLists.txt +0 -0
  332. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/common/magnetic_configuration_definition/magnetic_configuration.h +0 -0
  333. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/common/magnetic_configuration_lib/BUILD.bazel +0 -0
  334. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/common/magnetic_configuration_lib/CMakeLists.txt +0 -0
  335. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/common/magnetic_configuration_lib/magnetic_configuration_lib.cc +0 -0
  336. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/common/magnetic_configuration_lib/magnetic_configuration_lib.h +0 -0
  337. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/common/magnetic_configuration_lib/magnetic_configuration_lib_test.cc +0 -0
  338. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/common/magnetic_field_provider/CMakeLists.txt +0 -0
  339. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/common/makegrid_lib/CMakeLists.txt +0 -0
  340. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/common/makegrid_lib/create_reference_mgrid.sh +0 -0
  341. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/common/makegrid_lib/makegrid_lib.h +0 -0
  342. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/common/sizes/BUILD.bazel +0 -0
  343. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/common/sizes/CMakeLists.txt +0 -0
  344. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/common/sizes/sizes.h +0 -0
  345. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/common/util/BUILD.bazel +0 -0
  346. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/common/util/CMakeLists.txt +0 -0
  347. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/common/util/util_test.cc +0 -0
  348. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/common/vmec_indata/CMakeLists.txt +0 -0
  349. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/common/vmec_indata/boundary_from_json.cc +0 -0
  350. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/common/vmec_indata/boundary_from_json.h +0 -0
  351. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/free_boundary/CMakeLists.txt +0 -0
  352. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/free_boundary/external_magnetic_field/CMakeLists.txt +0 -0
  353. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/free_boundary/free_boundary_base/CMakeLists.txt +0 -0
  354. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/free_boundary/laplace_solver/CMakeLists.txt +0 -0
  355. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/free_boundary/mgrid_provider/CMakeLists.txt +0 -0
  356. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/free_boundary/nestor/CMakeLists.txt +0 -0
  357. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/free_boundary/only_coils/BUILD.bazel +0 -0
  358. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/free_boundary/only_coils/CMakeLists.txt +0 -0
  359. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/free_boundary/regularized_integrals/BUILD.bazel +0 -0
  360. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/free_boundary/regularized_integrals/CMakeLists.txt +0 -0
  361. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/free_boundary/regularized_integrals/regularized_integrals.h +0 -0
  362. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/free_boundary/singular_integrals/BUILD.bazel +0 -0
  363. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/free_boundary/singular_integrals/CMakeLists.txt +0 -0
  364. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/free_boundary/singular_integrals/singular_integrals.h +0 -0
  365. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/free_boundary/surface_geometry/BUILD.bazel +0 -0
  366. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/free_boundary/surface_geometry/CMakeLists.txt +0 -0
  367. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/free_boundary/surface_geometry/lcfs_asym.SurfaceRZFourier.csv +0 -0
  368. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/free_boundary/surface_geometry/surface_geometry.cc +0 -0
  369. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/free_boundary/surface_geometry/surface_geometry.h +0 -0
  370. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/free_boundary/surface_geometry/surface_geometry_test.cc +0 -0
  371. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/free_boundary/surface_geometry_mockup/BUILD.bazel +0 -0
  372. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/free_boundary/surface_geometry_mockup/lcfs.SurfaceRZFourier.csv +0 -0
  373. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/free_boundary/surface_geometry_mockup/surface_geometry_mockup.cc +0 -0
  374. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/free_boundary/surface_geometry_mockup/surface_geometry_mockup.h +0 -0
  375. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/free_boundary/tangential_partitioning/BUILD.bazel +0 -0
  376. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/free_boundary/tangential_partitioning/CMakeLists.txt +0 -0
  377. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/simsopt_compat/README.md +0 -0
  378. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/simsopt_compat/__init__.py +0 -0
  379. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/simsopt_compat/_indata_to_surfacerzfourier.py +0 -0
  380. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/vmec/boundaries/CMakeLists.txt +0 -0
  381. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/vmec/boundaries/guess_magnetic_axis.h +0 -0
  382. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/vmec/fourier_coefficients/BUILD.bazel +0 -0
  383. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/vmec/fourier_coefficients/CMakeLists.txt +0 -0
  384. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/vmec/fourier_forces/BUILD.bazel +0 -0
  385. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/vmec/fourier_forces/CMakeLists.txt +0 -0
  386. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/vmec/fourier_forces/fourier_forces.cc +0 -0
  387. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/vmec/fourier_forces/fourier_forces.h +0 -0
  388. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/vmec/fourier_forces/fourier_forces_test.cc +0 -0
  389. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/vmec/fourier_geometry/CMakeLists.txt +0 -0
  390. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/vmec/fourier_velocity/BUILD.bazel +0 -0
  391. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/vmec/fourier_velocity/CMakeLists.txt +0 -0
  392. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/vmec/fourier_velocity/fourier_velocity.cc +0 -0
  393. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/vmec/fourier_velocity/fourier_velocity.h +0 -0
  394. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/vmec/handover_storage/CMakeLists.txt +0 -0
  395. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/vmec/ideal_mhd_model/AGENTS.md +0 -0
  396. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/vmec/ideal_mhd_model/CLAUDE.md +0 -0
  397. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/vmec/ideal_mhd_model/CMakeLists.txt +0 -0
  398. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/vmec/ideal_mhd_model/bco_kernel.h +0 -0
  399. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/vmec/ideal_mhd_model/bcontra_kernel.h +0 -0
  400. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/vmec/ideal_mhd_model/dealias_constraint_force_bench.cc +0 -0
  401. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/vmec/ideal_mhd_model/dft_data.h +0 -0
  402. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/vmec/ideal_mhd_model/dft_toroidal.h +0 -0
  403. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/vmec/ideal_mhd_model/fft_toroidal.h +0 -0
  404. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/vmec/ideal_mhd_model/fft_toroidal_bench.cc +0 -0
  405. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/vmec/ideal_mhd_model/fft_toroidal_test.cc +0 -0
  406. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/vmec/ideal_mhd_model/jacobian_kernel.h +0 -0
  407. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/vmec/ideal_mhd_model/lambda_force_kernel.h +0 -0
  408. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/vmec/ideal_mhd_model/metric_kernel.h +0 -0
  409. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/vmec/ideal_mhd_model/mhdforce_kernel.h +0 -0
  410. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/vmec/ideal_mhd_model/pressure_kernel.h +0 -0
  411. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/vmec/iteration_logger/BUILD.bazel +0 -0
  412. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/vmec/iteration_logger/CMakeLists.txt +0 -0
  413. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/vmec/iteration_logger/iteration_logger.cc +0 -0
  414. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/vmec/iteration_logger/iteration_logger.h +0 -0
  415. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/vmec/output_quantities/CMakeLists.txt +0 -0
  416. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/vmec/output_quantities/output_quantities_io_test.cc +0 -0
  417. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/vmec/profile_parameterization_data/CMakeLists.txt +0 -0
  418. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/vmec/pybind11/.gitignore +0 -0
  419. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/vmec/radial_partitioning/BUILD.bazel +0 -0
  420. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/vmec/radial_partitioning/CMakeLists.txt +0 -0
  421. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/vmec/radial_partitioning/radial_partitioning.cc +0 -0
  422. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/vmec/radial_partitioning/radial_partitioning.h +0 -0
  423. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/vmec/radial_partitioning/radial_partitioning_test.cc +0 -0
  424. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/vmec/radial_profiles/CMakeLists.txt +0 -0
  425. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/vmec/thread_local_storage/BUILD.bazel +0 -0
  426. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/vmec/thread_local_storage/CMakeLists.txt +0 -0
  427. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/vmec/thread_local_storage/thread_local_storage.cc +0 -0
  428. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/vmec/thread_local_storage/thread_local_storage.h +0 -0
  429. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/vmec/vmec/AGENTS.md +0 -0
  430. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/vmec/vmec/CLAUDE.md +0 -0
  431. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/vmec/vmec/CMakeLists.txt +0 -0
  432. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/vmec/vmec/vmec_allocation_test.cc +0 -0
  433. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/vmec/vmec_constants/BUILD.bazel +0 -0
  434. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/vmec/vmec_constants/CMakeLists.txt +0 -0
  435. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/vmec/vmec_constants/vmec_algorithm_constants.h +0 -0
  436. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/vmec/vmec_constants/vmec_constants.cc +0 -0
  437. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/vmec/vmec_constants/vmec_constants.h +0 -0
  438. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/vmec/vmec_standalone/BUILD.bazel +0 -0
  439. {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/vmec/vmec_standalone/vmec_standalone.cc +0 -0
@@ -123,6 +123,48 @@ VMEC++ is a modern C++ reimplementation of the VMEC magnetohydrodynamic equilibr
123
123
 
124
124
  **Incremental development**: Make small, focused changes that can be validated independently
125
125
 
126
+ ## Contribution Principles
127
+
128
+ **Scope**:
129
+ - VMEC++ is an ideal-MHD equilibrium solver with minimal dependencies; optimization, coordinate transforms, profile self-consistency and stability diagnostics belong in downstream libraries or examples
130
+ - Build on the public API where possible; functionality that can live outside the solver does not go inside it
131
+ - Propose a new numerical method with measurements: iteration counts, runtime share, behavior across a range of configurations, and the failure modes it resolves
132
+ - Reuse validated components before writing new ones
133
+
134
+ **Validation**:
135
+ - VMEC++ reproduces VMEC 8.52; the reference files are educational_VMEC output, which reports `version_ = 8.52`, and PARVMEC 10.0 differs in documented conventions such as the full-grid `bsubsmns` and the `chipf` endpoints
136
+ - Keep historical behavior for compatibility; fix a confirmed bug of the original and mark the deviation in the tests
137
+ - Fix a Fortran-side bug in educational_VMEC first, with a test that fails before and passes after, then regenerate the reference files
138
+ - A symmetric equilibrium run through the asymmetric code paths must reproduce the symmetric result to machine precision (`tests/test_lasym.py`)
139
+ - Match tolerances to the numerics; compare Fourier coefficients directly, a scalar such as the volume is not a physics check
140
+ - Validate changes to the iteration on the force-residual progression, not on the converged state
141
+ - Axisymmetric cases alone do not establish correctness; include asymmetric, three-dimensional and high-beta cases.
142
+
143
+ **Tests**:
144
+ - Turn derived invariants into unit tests
145
+ - Keep coverage proportionate; simple, already verified logic is not tested separately
146
+
147
+ **Code**:
148
+ - Use Eigen types where the file uses Eigen; keep fixed-size locals on the stack
149
+ - Reuse existing logic rather than duplicating it
150
+
151
+ **Comments**:
152
+ - Describe the code as it is, briefly; history and rationale go in the pull request description
153
+
154
+ **Prose**:
155
+ - Comments and pull request descriptions do not pre-empt objections; they state what is and stop
156
+ - Comments carry the change or the measurement, without praise, deference, or defensive justification
157
+
158
+ **Configuration and errors**:
159
+ - Toggle features through fields of `VmecInput`, not environment variables
160
+ - Warn on transient conditions; error on a result that would be wrong at convergence (the zero-crash policy at the level of a single check)
161
+
162
+ **Process**:
163
+ - One concern per pull request; unrelated changes, including CI, go separately
164
+ - Address review comments before merge
165
+ - Back performance claims with local measurements; the benchmark job is part of review
166
+ - When an issue already has linked work, state why a different approach is taken
167
+
126
168
  ## Physics Domain Knowledge
127
169
 
128
170
  **Essential Reading for Fourier Operations**: `docs/fourier_basis_implementation.md` provides comprehensive coverage of DFT implementation, basis conversions, and mathematical foundations. Required reading before working with any Fourier-related code.
@@ -0,0 +1,453 @@
1
+ cmake_minimum_required(VERSION 3.15)
2
+ project(vmecpp C CXX)
3
+
4
+ set(CMAKE_CXX_STANDARD 20)
5
+ set(CMAKE_CXX_STANDARD_REQUIRED ON)
6
+
7
+ if(NOT CMAKE_BUILD_TYPE)
8
+ set(CMAKE_BUILD_TYPE Release)
9
+ endif()
10
+
11
+ set(CMAKE_CXX_FLAGS "-fPIC -Wall -Wextra")
12
+ set(CMAKE_CXX_FLAGS_DEBUG "-O0 -g")
13
+ set(CMAKE_CXX_FLAGS_RELEASE "-O3 -DNDEBUG -fno-math-errno")
14
+
15
+ # LTO: cross-TU inlining and dead-code elimination, ~1/3 smaller binaries.
16
+ include(CheckIPOSupported)
17
+ check_ipo_supported(RESULT VMECPP_IPO_SUPPORTED OUTPUT VMECPP_IPO_ERROR)
18
+ if(VMECPP_IPO_SUPPORTED)
19
+ set(CMAKE_INTERPROCEDURAL_OPTIMIZATION_RELEASE TRUE)
20
+ else()
21
+ message(STATUS "LTO unavailable, building without it: ${VMECPP_IPO_ERROR}")
22
+ endif()
23
+
24
+ # -march raises Eigen's EIGEN_MAX_ALIGN_BYTES from 16 to 32, which changes
25
+ # Eigen::aligned_allocator and is ABI-affecting. Pin it so cores built with
26
+ # different -march settings stay interchangeable.
27
+ add_compile_definitions(EIGEN_MAX_ALIGN_BYTES=32 EIGEN_MAX_STATIC_ALIGN_BYTES=32)
28
+
29
+ # use ccache if available
30
+ find_program(CCACHE_COMMAND NAMES ccache ccache-swig)
31
+ if(EXISTS ${CCACHE_COMMAND})
32
+ message(STATUS "Found ccache: ${CCACHE_COMMAND}")
33
+ set(CMAKE_CXX_COMPILER_LAUNCHER ${CCACHE_COMMAND})
34
+ else()
35
+ message(STATUS "Could NOT find ccache")
36
+ endif()
37
+
38
+ # First check if required libraries are installed locally
39
+ find_package(OpenMP REQUIRED)
40
+
41
+ # HDF5 and netCDF-C are built from source, as static libraries, rather than
42
+ # relying on whatever happens to be installed on the system. This is to
43
+ # ensure reproducibility and minimize binary size by turning off netcdf
44
+ # features we don't use. Versions must stay in sync with the Bazel build's
45
+ # src/vmecpp/cpp/third_party/non_module_deps.bzl.
46
+ include(ExternalProject)
47
+ set(_native_deps_prefix "${CMAKE_BINARY_DIR}/native-deps")
48
+ set(_native_deps_lib "${_native_deps_prefix}/lib")
49
+ set(_native_deps_include "${_native_deps_prefix}/include")
50
+ # INTERFACE_INCLUDE_DIRECTORIES below must exist already at generate time.
51
+ file(MAKE_DIRECTORY "${_native_deps_include}")
52
+
53
+ # HDF5 is built with zlib support (required by netCDF-4), but as a static
54
+ # lib it doesn't bundle zlib's own object code, so it must be linked in
55
+ # explicitly wherever hdf5_c is used.
56
+ find_package(ZLIB REQUIRED)
57
+
58
+ set(_native_deps_cmake_args
59
+ -DCMAKE_INSTALL_PREFIX=${_native_deps_prefix}
60
+ -DCMAKE_INSTALL_LIBDIR=lib
61
+ -DCMAKE_PREFIX_PATH=${_native_deps_prefix}
62
+ -DCMAKE_BUILD_TYPE=Release
63
+ -DCMAKE_MAKE_PROGRAM=${CMAKE_MAKE_PROGRAM}
64
+ -DBUILD_SHARED_LIBS=OFF
65
+ -DCMAKE_POSITION_INDEPENDENT_CODE=ON
66
+ -DBUILD_TESTING=OFF)
67
+
68
+ if(APPLE)
69
+ # CC=brew's gcc-14 (set by some CI jobs) chokes on Apple's SDK math.h for
70
+ # plain C. -D always wins over the CC/CXX env vars, unlike omitting it.
71
+ list(APPEND _native_deps_cmake_args
72
+ -DCMAKE_C_COMPILER=/usr/bin/cc
73
+ -DCMAKE_CXX_COMPILER=/usr/bin/c++)
74
+ endif()
75
+
76
+ ExternalProject_Add(hdf5_native
77
+ URL "https://github.com/HDFGroup/hdf5/archive/refs/tags/hdf5-1_14_3.tar.gz"
78
+ URL_HASH SHA256=df5ee33c74d5efb59738075ef96f4201588e1f1eeb233f047ac7fd1072dee1f6
79
+ CMAKE_ARGS
80
+ ${_native_deps_cmake_args}
81
+ -DHDF5_BUILD_CPP_LIB=ON
82
+ -DHDF5_ENABLE_Z_LIB_SUPPORT=ON
83
+ -DHDF5_ENABLE_SZIP_SUPPORT=OFF
84
+ -DHDF5_ENABLE_SZIP_ENCODING=OFF
85
+ -DHDF5_BUILD_EXAMPLES=OFF
86
+ -DHDF5_BUILD_TOOLS=OFF
87
+ BUILD_BYPRODUCTS
88
+ "${_native_deps_lib}/libhdf5.a"
89
+ "${_native_deps_lib}/libhdf5_cpp.a"
90
+ "${_native_deps_lib}/libhdf5_hl.a")
91
+
92
+ ExternalProject_Add(netcdf_native
93
+ DEPENDS hdf5_native
94
+ URL "https://github.com/Unidata/netcdf-c/archive/refs/tags/v4.9.3.tar.gz"
95
+ URL_HASH SHA256=990f46d49525d6ab5dc4249f8684c6deeaf54de6fec63a187e9fb382cc0ffdff
96
+ CMAKE_ARGS
97
+ ${_native_deps_cmake_args}
98
+ -DNETCDF_ENABLE_DAP=OFF
99
+ -DNETCDF_ENABLE_DAP2=OFF
100
+ -DNETCDF_ENABLE_DAP4=OFF
101
+ -DNETCDF_ENABLE_NCZARR=OFF
102
+ -DNETCDF_ENABLE_NCZARR_ZIP=OFF
103
+ -DNETCDF_ENABLE_TESTS=OFF
104
+ -DNETCDF_BUILD_UTILITIES=OFF
105
+ BUILD_BYPRODUCTS
106
+ "${_native_deps_lib}/libnetcdf.a")
107
+
108
+ # Imported targets pointing at the static libraries the ExternalProjects
109
+ # above install at build time
110
+ add_library(hdf5_c STATIC IMPORTED GLOBAL)
111
+ set_target_properties(hdf5_c PROPERTIES
112
+ IMPORTED_LOCATION "${_native_deps_lib}/libhdf5.a"
113
+ INTERFACE_INCLUDE_DIRECTORIES "${_native_deps_include}"
114
+ INTERFACE_LINK_LIBRARIES ZLIB::ZLIB)
115
+ add_dependencies(hdf5_c hdf5_native)
116
+
117
+ add_library(hdf5_hl STATIC IMPORTED GLOBAL)
118
+ set_target_properties(hdf5_hl PROPERTIES
119
+ IMPORTED_LOCATION "${_native_deps_lib}/libhdf5_hl.a"
120
+ INTERFACE_LINK_LIBRARIES hdf5_c)
121
+ add_dependencies(hdf5_hl hdf5_native)
122
+
123
+ add_library(hdf5_cpp STATIC IMPORTED GLOBAL)
124
+ set_target_properties(hdf5_cpp PROPERTIES
125
+ IMPORTED_LOCATION "${_native_deps_lib}/libhdf5_cpp.a"
126
+ INTERFACE_LINK_LIBRARIES hdf5_c)
127
+ add_dependencies(hdf5_cpp hdf5_native)
128
+
129
+ # netCDF's static lib references HDF5 HL symbols internally, so link it in
130
+ # too even though vmecpp's own code never calls it directly.
131
+ add_library(netcdf STATIC IMPORTED GLOBAL)
132
+ set_target_properties(netcdf PROPERTIES
133
+ IMPORTED_LOCATION "${_native_deps_lib}/libnetcdf.a"
134
+ INTERFACE_INCLUDE_DIRECTORIES "${_native_deps_include}"
135
+ INTERFACE_LINK_LIBRARIES "hdf5_hl;hdf5_c")
136
+ add_dependencies(netcdf netcdf_native)
137
+
138
+ add_library(vmecpp_hdf5_netcdf INTERFACE)
139
+ target_link_libraries(vmecpp_hdf5_netcdf INTERFACE netcdf hdf5_cpp hdf5_hl hdf5_c)
140
+
141
+ # Fetch all the remote dependencies
142
+ include(FetchContent)
143
+ if (CMAKE_VERSION VERSION_GREATER_EQUAL "3.24.0")
144
+ # Avoid warning about DOWNLOAD_EXTRACT_TIMESTAMP in CMake 3.24:
145
+ cmake_policy(SET CMP0135 NEW)
146
+ endif()
147
+ FetchContent_Declare(
148
+ eigen
149
+ GIT_REPOSITORY https://gitlab.com/libeigen/eigen.git
150
+ GIT_TAG tags/5.0.1
151
+ GIT_SHALLOW TRUE
152
+ )
153
+ FetchContent_MakeAvailable(eigen)
154
+ include_directories(${eigen_SOURCE_DIR})
155
+ # The only dense linear solve in this project (LaplaceSolver::DecomposeMatrix/
156
+ # SolveForPotential) uses Eigen::PartialPivLU, which is pure C++ with no
157
+ # external LAPACK/BLAS dependency as long as EIGEN_USE_LAPACKE/EIGEN_USE_BLAS/
158
+ # EIGEN_USE_MKL are never defined. Do not define those macros without
159
+ # reintroducing an explicit LAPACK/BLAS dependency here.
160
+
161
+ FetchContent_Declare(nlohmann_json URL https://github.com/nlohmann/json/releases/download/v3.11.3/json.tar.xz)
162
+ FetchContent_MakeAvailable(nlohmann_json)
163
+
164
+ FetchContent_Declare(
165
+ abseil-cpp
166
+ GIT_REPOSITORY https://github.com/abseil/abseil-cpp.git
167
+ # 20260107.1 LTS: older abseil fails to compile under Clang >= 21 (the
168
+ # Enzyme build) on absl::Nonnull SFINAE in absl/strings/ascii.cc.
169
+ GIT_TAG 255c84dadd029fd8ad25c5efb5933e47beaa00c7
170
+ GIT_SHALLOW TRUE
171
+ )
172
+ FetchContent_Declare(
173
+ indata2json
174
+ GIT_REPOSITORY https://github.com/jonathanschilling/indata2json.git
175
+ GIT_TAG f59e3ddd66486b63536f141a786d39c23d654c77
176
+ GIT_SHALLOW TRUE
177
+ )
178
+ FetchContent_Declare(
179
+ pybind11
180
+ GIT_REPOSITORY https://github.com/pybind/pybind11.git
181
+ GIT_TAG "v3.0.0"
182
+ GIT_SHALLOW TRUE
183
+ )
184
+ FetchContent_Declare(
185
+ abscab-cpp
186
+ GIT_REPOSITORY https://github.com/jonathanschilling/abscab-cpp.git
187
+ GIT_TAG 5cfa473b90aab06d7f70d986da0c46c46c1ebe9c
188
+ GIT_SHALLOW TRUE
189
+ )
190
+ FetchContent_MakeAvailable(abscab-cpp)
191
+ include_directories(${abscab-cpp_SOURCE_DIR})
192
+ set(abscab_sources "${abscab-cpp_SOURCE_DIR}/abscab/abscab.cc" "${abscab-cpp_SOURCE_DIR}/abscab/abscab.hh")
193
+
194
+ # Fix deprecation warning, abseil will change this default soon.
195
+ set(ABSL_PROPAGATE_CXX_STD "ON")
196
+ FetchContent_MakeAvailable(abseil-cpp indata2json)
197
+ include_directories(${abseil-cpp_SOURCE_DIR})
198
+
199
+ # Allow to retain include paths as used for Bazel build.
200
+ # This needs to be defined before add_subdirectory(src) is called,
201
+ # which starts including files that want to pull in header files
202
+ # specified relative to `${PROJECT_SOURCE_DIR}/src/vmecpp/cpp`.
203
+ include_directories(${PROJECT_SOURCE_DIR}/src/vmecpp/cpp)
204
+
205
+ # Assemble the VMEC++ source tree.
206
+ # Start out with ABSCAB sources - no need for a separate library for ABSCAB.
207
+ set(vmecpp_sources ${abscab_sources})
208
+ add_subdirectory(src)
209
+
210
+ # The computation core, built once per target ISA. Variants share one SONAME and
211
+ # are told apart by directory, so the loader can substitute them (see the
212
+ # glibc-hwcaps install rules below).
213
+ function(vmecpp_add_core target)
214
+ cmake_parse_arguments(CORE "" "HWCAPS_SUBDIR" "COMPILE_OPTIONS" ${ARGN})
215
+
216
+ add_library(${target} SHARED ${vmecpp_sources})
217
+ set_target_properties(${target} PROPERTIES OUTPUT_NAME vmecpp_core)
218
+ if(CORE_HWCAPS_SUBDIR)
219
+ set_target_properties(${target} PROPERTIES
220
+ LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/glibc-hwcaps/${CORE_HWCAPS_SUBDIR}")
221
+ endif()
222
+ target_compile_options(${target} PRIVATE ${CORE_COMPILE_OPTIONS})
223
+
224
+ target_link_libraries(${target} PUBLIC vmecpp_hdf5_netcdf)
225
+ target_link_libraries(${target} PUBLIC nlohmann_json::nlohmann_json)
226
+ target_link_libraries(${target} PUBLIC absl::algorithm absl::base
227
+ absl::synchronization absl::strings absl::str_format absl::log
228
+ absl::string_view absl::check absl::status absl::statusor)
229
+
230
+ if(VMECPP_USE_FFTX)
231
+ # Built per variant: the codelets must match the ISA of the core linking them.
232
+ add_library(${target}_fftx STATIC ${_fftx_iprdft_srcs} ${_fftx_prdft_srcs})
233
+ target_include_directories(${target}_fftx PUBLIC
234
+ "${_fftx_dir}" # for <include/omega64.h>
235
+ "${_fftx_dir}/include" # for fftx_minimal.hpp
236
+ "${_fftx_dir}/lib_fftx_iprdftbat_cpu_srcs"
237
+ "${_fftx_dir}/lib_fftx_prdftbat_cpu_srcs")
238
+ target_compile_options(${target}_fftx PRIVATE -fPIC ${CORE_COMPILE_OPTIONS})
239
+ target_link_libraries(${target} PRIVATE ${target}_fftx)
240
+ target_compile_definitions(${target} PUBLIC VMECPP_USE_FFTX)
241
+ endif()
242
+
243
+ if(OpenMP_CXX_FOUND)
244
+ target_link_libraries(${target} PUBLIC OpenMP::OpenMP_CXX)
245
+ endif()
246
+
247
+ # We multithread at the outer loop level, not for the individual Eigen operations
248
+ # https://libeigen.gitlab.io/eigen/docs-3.3/TopicMultiThreading.html
249
+ target_compile_definitions(${target} PRIVATE EIGEN_DONT_PARALLELIZE)
250
+ endfunction()
251
+
252
+ # FFTX (SPIRAL-generated batched IPRDFT/PRDFT) for the toroidal FFT hot path.
253
+ # The codelets are vendored under src/vmecpp/cpp/third_party/fftx_codelets/;
254
+ # see that directory's README.md for what they cover and how to regenerate.
255
+ # Pass -DVMECPP_USE_FFTX=OFF to fall back to the partial-DFT path.
256
+ option(VMECPP_USE_FFTX "Use FFTX/SPIRAL kernels for toroidal transforms" ON)
257
+ if(VMECPP_USE_FFTX)
258
+ set(_fftx_dir "${PROJECT_SOURCE_DIR}/src/vmecpp/cpp/third_party/fftx_codelets")
259
+ file(GLOB _fftx_iprdft_srcs CONFIGURE_DEPENDS
260
+ "${_fftx_dir}/lib_fftx_iprdftbat_cpu_srcs/*.cpp")
261
+ file(GLOB _fftx_prdft_srcs CONFIGURE_DEPENDS
262
+ "${_fftx_dir}/lib_fftx_prdftbat_cpu_srcs/*.cpp")
263
+ list(LENGTH _fftx_iprdft_srcs _n_iprdft)
264
+ list(LENGTH _fftx_prdft_srcs _n_prdft)
265
+ message(STATUS "FFTX vendored codelets: ${_n_iprdft} iprdft + ${_n_prdft} prdft sources")
266
+ endif()
267
+
268
+ vmecpp_add_core(vmecpp_core)
269
+
270
+ set(VMECPP_HWCAPS_DISPATCH_DEFAULT OFF)
271
+ if(CMAKE_SYSTEM_NAME STREQUAL "Linux" AND
272
+ CMAKE_SYSTEM_PROCESSOR MATCHES "^(x86_64|amd64|AMD64)$")
273
+ set(VMECPP_HWCAPS_DISPATCH_DEFAULT ON)
274
+ endif()
275
+ option(VMECPP_HWCAPS_DISPATCH
276
+ "Also build x86-64-v3 core variant selected at load time via glibc-hwcaps"
277
+ ${VMECPP_HWCAPS_DISPATCH_DEFAULT})
278
+ if(VMECPP_HWCAPS_DISPATCH)
279
+ if(NOT VMECPP_HWCAPS_DISPATCH_DEFAULT)
280
+ message(FATAL_ERROR
281
+ "VMECPP_HWCAPS_DISPATCH requires Linux on an x86-64 processor")
282
+ endif()
283
+ vmecpp_add_core(vmecpp_core_v3 HWCAPS_SUBDIR x86-64-v3
284
+ COMPILE_OPTIONS -march=x86-64-v3)
285
+ endif()
286
+
287
+
288
+ # Now also add the vmec_standalone executable.
289
+ add_executable(vmec_standalone ${PROJECT_SOURCE_DIR}/src/vmecpp/cpp/vmecpp/vmec/vmec_standalone/vmec_standalone.cc)
290
+ target_link_libraries(vmec_standalone vmecpp_core)
291
+ if(APPLE)
292
+ set(_vmecpp_loader_path "@loader_path")
293
+ else()
294
+ set(_vmecpp_loader_path "$ORIGIN")
295
+ endif()
296
+ set_target_properties(vmec_standalone PROPERTIES
297
+ BUILD_RPATH "${_vmecpp_loader_path}")
298
+
299
+ # Now add the pybind11 module for VMEC++.
300
+ FetchContent_MakeAvailable(pybind11)
301
+ set(vmecpp_pybind11_sources
302
+ ${PROJECT_SOURCE_DIR}/src/vmecpp/cpp/vmecpp/vmec/pybind11/pybind_vmec.cc
303
+ )
304
+ pybind11_add_module(_vmecpp ${vmecpp_pybind11_sources})
305
+ target_link_libraries(_vmecpp PRIVATE vmecpp_core)
306
+ # The VmecModel iteration bindings run the forward model inside a single-thread
307
+ # OpenMP parallel region, so the module itself must be compiled with OpenMP
308
+ # (matching the context Vmec::SolveEquilibrium provides for the omp single/barrier
309
+ # directives inside IdealMhdModel::update).
310
+ if(OpenMP_CXX_FOUND)
311
+ target_link_libraries(_vmecpp PRIVATE OpenMP::OpenMP_CXX)
312
+ endif()
313
+
314
+ set_target_properties(_vmecpp PROPERTIES
315
+ INSTALL_RPATH "${_vmecpp_loader_path}")
316
+ install(TARGETS _vmecpp LIBRARY DESTINATION vmecpp/cpp/.)
317
+ # glibc >= 2.33 prefers glibc-hwcaps/ subdirectories; older loaders ignore
318
+ # them and pick up the baseline next to the extension module.
319
+ install(TARGETS vmecpp_core LIBRARY DESTINATION vmecpp/cpp/.)
320
+ if(VMECPP_HWCAPS_DISPATCH)
321
+ install(TARGETS vmecpp_core_v3
322
+ LIBRARY DESTINATION vmecpp/cpp/glibc-hwcaps/x86-64-v3/.)
323
+ endif()
324
+ install(TARGETS indata2json DESTINATION vmecpp/cpp/third_party/indata2json/)
325
+
326
+ # Optional Enzyme automatic-differentiation target: exact autodiff (forward and
327
+ # reverse) of a real VMEC nonlinear kernel, the half-grid Jacobian. Enzyme
328
+ # (https://enzyme.mit.edu) differentiates LLVM IR via a Clang plugin, so it needs
329
+ # a Clang frontend and the matching ClangEnzyme plugin. OFF by default; the
330
+ # production build and all existing targets are unaffected. The AD-toolchain
331
+ # smoke test lives in bazel (//vmecpp/common/enzyme:enzyme_smoke_test, built with
332
+ # --config=enzyme). Enable this target with:
333
+ # -DVMECPP_ENABLE_ENZYME=ON -DVMECPP_ENZYME_PLUGIN=/path/to/ClangEnzyme-NN.so
334
+ option(VMECPP_ENABLE_ENZYME "Build Enzyme autodiff targets" OFF)
335
+ if(VMECPP_ENABLE_ENZYME)
336
+ if(NOT CMAKE_CXX_COMPILER_ID MATCHES "Clang|IntelLLVM")
337
+ message(FATAL_ERROR
338
+ "VMECPP_ENABLE_ENZYME requires a Clang-based compiler (got "
339
+ "${CMAKE_CXX_COMPILER_ID}); Enzyme attaches as a Clang plugin. "
340
+ "Intel oneAPI icx/icpx (IntelLLVM) is Clang-based and supported.")
341
+ endif()
342
+ set(VMECPP_ENZYME_PLUGIN "" CACHE FILEPATH "Path to ClangEnzyme-NN.so")
343
+ set(VMECPP_ENZYME_CORE_TARGETS vmecpp_core)
344
+ if(VMECPP_HWCAPS_DISPATCH)
345
+ list(APPEND VMECPP_ENZYME_CORE_TARGETS vmecpp_core_v3)
346
+ endif()
347
+ # The Enzyme pass is an LLVM-version-specific plugin. icx/icpx (IntelLLVM)
348
+ # cannot load a plugin built against a different upstream LLVM. Enzyme's output
349
+ # is an ordinary object file, though, so for such compilers the two Enzyme TUs
350
+ # can be precompiled with a matching ClangEnzyme and linked in, while the rest
351
+ # is built with icx.
352
+ set(VMECPP_ENZYME_JVP_OBJECT "" CACHE FILEPATH
353
+ "Prebuilt exact_force_jvp object (compiled with a matching ClangEnzyme)")
354
+ set(VMECPP_ENZYME_VJP_OBJECT "" CACHE FILEPATH
355
+ "Prebuilt exact_force_vjp object (compiled with a matching ClangEnzyme)")
356
+ # Backward-compatible name for the original JVP-only input. Keep its meaning
357
+ # explicit: the cotangent implementation must still be supplied separately.
358
+ set(VMECPP_ENZYME_OBJECT "" CACHE FILEPATH
359
+ "Deprecated JVP-only alias for VMECPP_ENZYME_JVP_OBJECT")
360
+ set(VMECPP_ENZYME_EFFECTIVE_JVP_OBJECT "${VMECPP_ENZYME_JVP_OBJECT}")
361
+ if(VMECPP_ENZYME_OBJECT)
362
+ if(VMECPP_ENZYME_JVP_OBJECT AND
363
+ NOT "${VMECPP_ENZYME_JVP_OBJECT}" STREQUAL "${VMECPP_ENZYME_OBJECT}")
364
+ message(FATAL_ERROR
365
+ "VMECPP_ENZYME_OBJECT and VMECPP_ENZYME_JVP_OBJECT name different "
366
+ "files; remove the deprecated VMECPP_ENZYME_OBJECT setting")
367
+ endif()
368
+ message(DEPRECATION
369
+ "VMECPP_ENZYME_OBJECT supplies only the JVP and is deprecated; use "
370
+ "VMECPP_ENZYME_JVP_OBJECT together with VMECPP_ENZYME_VJP_OBJECT")
371
+ set(VMECPP_ENZYME_EFFECTIVE_JVP_OBJECT "${VMECPP_ENZYME_OBJECT}")
372
+ endif()
373
+ if(VMECPP_ENZYME_EFFECTIVE_JVP_OBJECT OR VMECPP_ENZYME_VJP_OBJECT)
374
+ if(NOT VMECPP_ENZYME_EFFECTIVE_JVP_OBJECT)
375
+ message(FATAL_ERROR
376
+ "Prebuilt Enzyme mode requires VMECPP_ENZYME_JVP_OBJECT")
377
+ endif()
378
+ if(NOT VMECPP_ENZYME_VJP_OBJECT)
379
+ message(FATAL_ERROR
380
+ "Prebuilt Enzyme mode requires VMECPP_ENZYME_VJP_OBJECT; the "
381
+ "deprecated VMECPP_ENZYME_OBJECT supplies only the JVP")
382
+ endif()
383
+ foreach(VMECPP_ENZYME_PREBUILT_OBJECT
384
+ IN ITEMS "${VMECPP_ENZYME_EFFECTIVE_JVP_OBJECT}"
385
+ "${VMECPP_ENZYME_VJP_OBJECT}")
386
+ if(NOT EXISTS "${VMECPP_ENZYME_PREBUILT_OBJECT}")
387
+ message(FATAL_ERROR
388
+ "Prebuilt Enzyme object not found: ${VMECPP_ENZYME_PREBUILT_OBJECT}")
389
+ endif()
390
+ endforeach()
391
+ set(VMECPP_ENZYME_PREBUILT_OBJECTS
392
+ "${VMECPP_ENZYME_EFFECTIVE_JVP_OBJECT}"
393
+ "${VMECPP_ENZYME_VJP_OBJECT}")
394
+ message(STATUS
395
+ "Enzyme: linking prebuilt JVP object ${VMECPP_ENZYME_EFFECTIVE_JVP_OBJECT}")
396
+ message(STATUS
397
+ "Enzyme: linking prebuilt VJP object ${VMECPP_ENZYME_VJP_OBJECT}")
398
+ set_source_files_properties(${VMECPP_ENZYME_PREBUILT_OBJECTS} PROPERTIES
399
+ EXTERNAL_OBJECT TRUE GENERATED TRUE)
400
+ foreach(VMECPP_ENZYME_CORE_TARGET IN LISTS VMECPP_ENZYME_CORE_TARGETS)
401
+ target_sources(${VMECPP_ENZYME_CORE_TARGET} PRIVATE
402
+ ${VMECPP_ENZYME_PREBUILT_OBJECTS})
403
+ target_compile_definitions(${VMECPP_ENZYME_CORE_TARGET}
404
+ PUBLIC VMECPP_ENABLE_ENZYME)
405
+ endforeach()
406
+ else()
407
+ if(NOT VMECPP_ENZYME_PLUGIN OR NOT EXISTS "${VMECPP_ENZYME_PLUGIN}")
408
+ message(FATAL_ERROR
409
+ "VMECPP_ENABLE_ENZYME=ON requires "
410
+ "-DVMECPP_ENZYME_PLUGIN=/path/to/ClangEnzyme-NN.so "
411
+ "(or both VMECPP_ENZYME_JVP_OBJECT and VMECPP_ENZYME_VJP_OBJECT "
412
+ "for prebuilt objects)")
413
+ endif()
414
+ message(STATUS "Enzyme plugin: ${VMECPP_ENZYME_PLUGIN}")
415
+ enable_testing()
416
+ # Exact autodiff (forward and reverse) of a real VMEC nonlinear kernel: the
417
+ # half-grid Jacobian. Enzyme runs as an optimization-time pass, so it needs
418
+ # -O2 and the plugin attached.
419
+ add_executable(jacobian_kernel_autodiff_test
420
+ ${PROJECT_SOURCE_DIR}/src/vmecpp/cpp/vmecpp/common/enzyme/jacobian_kernel_autodiff_test.cc)
421
+ target_compile_options(jacobian_kernel_autodiff_test PRIVATE
422
+ -O2 -fplugin=${VMECPP_ENZYME_PLUGIN})
423
+ add_test(NAME jacobian_kernel_autodiff COMMAND jacobian_kernel_autodiff_test)
424
+ # Exact Hessian of the composed local force map (all six force-chain kernels):
425
+ # forward/reverse Jacobian vs finite differences, and JVP cost vs FD-HVP.
426
+ add_executable(local_force_hessian_test
427
+ ${PROJECT_SOURCE_DIR}/src/vmecpp/cpp/vmecpp/common/enzyme/local_force_hessian_test.cc
428
+ ${PROJECT_SOURCE_DIR}/src/vmecpp/cpp/vmecpp/vmec/ideal_mhd_model/exact_force_jvp.cc)
429
+ target_compile_options(local_force_hessian_test PRIVATE
430
+ -O2 -fplugin=${VMECPP_ENZYME_PLUGIN})
431
+ add_test(NAME local_force_hessian COMMAND local_force_hessian_test)
432
+
433
+ # Wire the exact force Hessian-vector product into the core library and the
434
+ # Python extension. Every runtime-selectable core variant must export these
435
+ # functions. The Enzyme translation units are compiled with the plugin; the
436
+ # rest of each core stays normally compiled.
437
+ foreach(VMECPP_ENZYME_CORE_TARGET IN LISTS VMECPP_ENZYME_CORE_TARGETS)
438
+ target_sources(${VMECPP_ENZYME_CORE_TARGET} PRIVATE
439
+ ${PROJECT_SOURCE_DIR}/src/vmecpp/cpp/vmecpp/vmec/ideal_mhd_model/exact_force_jvp.cc
440
+ ${PROJECT_SOURCE_DIR}/src/vmecpp/cpp/vmecpp/vmec/ideal_mhd_model/exact_force_vjp.cc)
441
+ target_compile_definitions(${VMECPP_ENZYME_CORE_TARGET}
442
+ PUBLIC VMECPP_ENABLE_ENZYME)
443
+ endforeach()
444
+ # Enzyme does not support the AVX mask intrinsics emitted for x86-64-v3.
445
+ # Compile these two translation units for the baseline ISA in every core;
446
+ # the rest of vmecpp_core_v3 remains optimized for x86-64-v3.
447
+ set_source_files_properties(
448
+ ${PROJECT_SOURCE_DIR}/src/vmecpp/cpp/vmecpp/vmec/ideal_mhd_model/exact_force_jvp.cc
449
+ ${PROJECT_SOURCE_DIR}/src/vmecpp/cpp/vmecpp/vmec/ideal_mhd_model/exact_force_vjp.cc
450
+ PROPERTIES COMPILE_OPTIONS
451
+ "-march=x86-64;-O2;-fplugin=${VMECPP_ENZYME_PLUGIN}")
452
+ endif()
453
+ endif()
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: vmecpp
3
- Version: 0.7.2
3
+ Version: 0.7.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 @@ Project-URL: Source, https://github.com/proximafusion/vmecpp
21
21
  Requires-Python: >=3.10
22
22
  Requires-Dist: netCDF4
23
23
  Requires-Dist: numpy
24
+ Requires-Dist: scipy
24
25
  Requires-Dist: pydantic>=2.11
25
26
  Requires-Dist: jaxtyping>=0.2.6
26
27
  Requires-Dist: jax!=0.5.2
@@ -193,7 +194,7 @@ Ubuntu 22.04 and 24.04, as well as Debian 12 are officially supported.
193
194
 
194
195
  1. Install required system packages:
195
196
  ```shell
196
- sudo apt-get install -y build-essential cmake gfortran libnetcdf-dev liblapack-dev libomp-dev libhdf5-dev python3-dev
197
+ sudo apt-get install -y build-essential cmake gfortran libnetcdf-dev libomp-dev libhdf5-dev python3-dev
197
198
  ```
198
199
 
199
200
  2. Install VMEC++ as a Python package (possibly after creating a dedicated virtual environment):
@@ -213,7 +214,7 @@ Otherwise the Ubuntu package `python-is-python3` provides the `python` alias.
213
214
  1. Install required system packages:
214
215
 
215
216
  ```shell
216
- pacman -Sy --noconfirm python-pip gcc gcc-fortran openmp hdf5 netcdf lapack
217
+ pacman -Sy --noconfirm python-pip gcc gcc-fortran openmp hdf5 netcdf
217
218
  ```
218
219
 
219
220
  2. Install VMEC++ as a Python package (possibly after creating a virtual environment):
@@ -229,7 +230,7 @@ python -m pip install git+https://github.com/proximafusion/vmecpp
229
230
  1. Install required system packages:
230
231
 
231
232
  ```shell
232
- dnf install -y python3.10-devel cmake g++ gfortran libomp-devel hdf5-devel netcdf-devel lapack-devel
233
+ dnf install -y python3.10-devel cmake g++ gfortran libomp-devel hdf5-devel netcdf-devel
233
234
  ```
234
235
 
235
236
  2. Install VMEC++ as a Python package (possibly after creating a virtual environment):
@@ -273,7 +274,7 @@ python -m pip install -e .[test]
273
274
  ```
274
275
 
275
276
  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
+ to build and test VMEC++, including CMake, GCC, GFortran, HDF5, NetCDF,
277
278
  OpenMPI, and Git LFS.
278
279
 
279
280
  ### As part of a conda environment
@@ -367,37 +368,20 @@ VMEC++:
367
368
  - reports issues via standard Python exceptions and has a zero crash policy
368
369
  - allows hot-restarting a run from a previous converged state (see [Hot restart](#hot-restart))
369
370
  - 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
370
- - 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
371
+ - 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, but can utilize shared caches between threads
372
+ - Reduces the force spikes between multi-grid stages in free-boundary, which should lead to faster and more robust free-boundary convergence (for details see https://github.com/proximafusion/vmecpp/releases/tag/v0.7.0)
373
+ - Stable recurrence for Neumann kernel integrals enables convergence of free-boundary solves at high mpol, ntor (see https://github.com/proximafusion/vmecpp/releases/tag/v0.5.3)
371
374
  - Uses FFT kernels optimized for small mode numbers [generated using FFTX](https://github.com/spiral-software/fftx) instead of DFT for supported resolutions. They give a 10-20% speedup relative to the DFT counterparts.
372
375
  - 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. One deliberate exception: at multigrid grid transitions, the rollback backup of the state vector is taken *after* the radial interpolation of the coarse-grid solution (matching PARVMEC/VMEC2000 since 2017-01-24, "SPH 012417"), not before it as in VMEC 8.52 -- with the 8.52 ordering, the first restart of a stage silently discards the interpolated state and the finer stages effectively re-solve from a cold start
373
376
 
374
377
  ### Limitations with respect to the Fortran implementations
375
- - non-stellarator-symmetric terms (`lasym == true`) are not supported yet
376
- - free-boundary works only for `ntor > 0` - axisymmetric (`ntor = 0`) free-boundary runs don't work yet
377
378
  - `lgiveup`/`fgiveup` logic for early termination of a multi-grid sequence is not implemented yet
378
379
  - `lbsubs` logic in computing outputs is not implemented yet
379
- - `lforbal` logic for non-variational forces near the magnetic axis is not implemented yet
380
380
  - `lrfp` flag is available for wout compatibility, but RFP-specific physics is not implemented yet - only stellarators/Tokamaks for now
381
381
  - several profile parameterizations are not fully implemented yet:
382
- * `gauss_trunc`
383
- * `two_power_gs`
384
- * `akima_spline`
385
- * `akima_spline_i`
386
- * `akima_spline_ip`
387
- * `cubic_spline`
388
- * `cubic_spline_i`
389
- * `cubic_spline_ip`
390
- * `pedestal`
391
- * `rational`
392
- * `nice_quadratic`
393
382
  * `sum_cossq_s`
394
383
  * `sum_cossq_sqrts`
395
384
  * `sum_cossq_s_free`
396
- - some (rarely used) free-boundary-related output quantities are not implemented yet:
397
- * `curlabel` - declared but not populated yet
398
- * `potvac` - declared but not populated yet
399
- * `xmpot` - not declared yet
400
- * `xnpot` - not declared yet
401
385
  - 2D preconditioning using block-tridiagonal solver ([`BCYCLIC`](https://www.sciencedirect.com/science/article/abs/pii/S0021999110002536)) is not implemented;
402
386
  neither are the associated input fields `precon_type` and `prec2d_threshold`
403
387
  - VMEC++ only computes the output quantities if the run converged (can be overridden via `return_outputs_even_if_not_converged` input)
@@ -410,12 +394,12 @@ Some of the things we are planning for VMEC++'s future:
410
394
  - [x] free-boundary hot-restart in Python
411
395
  - [X] open-sourcing the full VMEC++ test suite (including the Verification&Validation part that compares `wout` contents)
412
396
  - [x] open-sourcing the source code to reproduce VMEC++'s performance benchmarks
413
- - [ ] VMEC++ usable as a C++ bazel module
397
+ - [x] VMEC++ usable as a C++ bazel module
414
398
 
415
399
  Some items we do not plan to work on, but where community ownership is welcome:
416
400
  - [ ] packaging VMEC++ for platforms or package managers other than pip (e.g. conda, homebrew, ...)
417
401
  - [ ] native Windows support
418
- - [ ] ARM support
402
+ - [x] ARM support
419
403
  - [ ] 2D preconditioner using [`bcyclic_plus_plus`](https://code.ornl.gov/m4c/bcyclic_plus_plus)
420
404
 
421
405
  ## Related repositories