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.
- {vmecpp-0.7.2 → vmecpp-0.7.4}/AGENTS.md +42 -0
- vmecpp-0.7.4/CMakeLists.txt +453 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/PKG-INFO +11 -27
- {vmecpp-0.7.2 → vmecpp-0.7.4}/README.md +9 -26
- {vmecpp-0.7.2 → vmecpp-0.7.4}/benchmarks/test_benchmarks.py +1 -15
- {vmecpp-0.7.2 → vmecpp-0.7.4}/docker/Dockerfile +0 -1
- {vmecpp-0.7.2 → vmecpp-0.7.4}/environment.yml +0 -1
- {vmecpp-0.7.2 → vmecpp-0.7.4}/pyproject.toml +8 -4
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/__init__.py +179 -54
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/__main__.py +1 -1
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/_free_boundary.py +8 -5
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/_pydantic_numpy.py +20 -2
- vmecpp-0.7.4/src/vmecpp/_qs.py +180 -0
- vmecpp-0.7.4/src/vmecpp/_rescale.py +97 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/_util.py +13 -11
- vmecpp-0.7.4/src/vmecpp/autodiff.py +465 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/docker/tsan/Dockerfile +1 -2
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/util/hdf5_io/BUILD.bazel +10 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/util/hdf5_io/hdf5_io.cc +22 -3
- vmecpp-0.7.4/src/vmecpp/cpp/util/hdf5_io/hdf5_io_test.cc +54 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/common/enzyme/local_force_hessian_test.cc +60 -175
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/common/fourier_basis/fourier_basis.cc +75 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/common/fourier_basis/fourier_basis.h +46 -0
- {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
- {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
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/common/magnetic_field_provider/BUILD.bazel +1 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/common/magnetic_field_provider/magnetic_field_provider_lib.cc +395 -295
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/common/magnetic_field_provider/magnetic_field_provider_lib.h +19 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/common/magnetic_field_provider/magnetic_field_provider_lib_test.cc +252 -44
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/common/makegrid_lib/BUILD.bazel +1 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/common/makegrid_lib/makegrid_lib.cc +168 -187
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/common/makegrid_lib/makegrid_lib_test.cc +467 -52
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/common/sizes/sizes.cc +2 -3
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/common/util/util.cc +6 -2
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/common/util/util.h +40 -3
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/common/vmec_indata/BUILD.bazel +2 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/common/vmec_indata/vmec_indata.cc +141 -46
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/common/vmec_indata/vmec_indata.h +5 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/common/vmec_indata/vmec_indata_test.cc +131 -3
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/free_boundary/external_magnetic_field/BUILD.bazel +1 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/free_boundary/external_magnetic_field/external_magnetic_field.cc +9 -5
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/free_boundary/external_magnetic_field/external_magnetic_field.h +5 -2
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/free_boundary/free_boundary_base/BUILD.bazel +1 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/free_boundary/free_boundary_base/free_boundary_base.h +3 -1
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/free_boundary/laplace_solver/BUILD.bazel +0 -4
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/free_boundary/laplace_solver/laplace_solver.cc +90 -111
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/free_boundary/laplace_solver/laplace_solver.h +20 -4
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/free_boundary/laplace_solver/laplace_solver_bench.cc +15 -14
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/free_boundary/laplace_solver/laplace_solver_test.cc +8 -4
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/free_boundary/mgrid_provider/BUILD.bazel +1 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/free_boundary/mgrid_provider/mgrid_provider.cc +141 -91
- vmecpp-0.7.4/src/vmecpp/cpp/vmecpp/free_boundary/mgrid_provider/mgrid_provider.h +104 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/free_boundary/nestor/BUILD.bazel +14 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/free_boundary/nestor/nestor.cc +21 -19
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/free_boundary/nestor/nestor.h +7 -3
- vmecpp-0.7.4/src/vmecpp/cpp/vmecpp/free_boundary/nestor/nestor_test.cc +158 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/free_boundary/only_coils/only_coils.cc +15 -17
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/free_boundary/only_coils/only_coils.h +6 -2
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/free_boundary/regularized_integrals/regularized_integrals.cc +13 -10
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/free_boundary/singular_integrals/singular_integrals.cc +35 -24
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/free_boundary/singular_integrals/singular_integrals_test.cc +143 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/free_boundary/tangential_partitioning/tangential_partitioning.cc +2 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/free_boundary/tangential_partitioning/tangential_partitioning.h +1 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/vmec/CMakeLists.txt +1 -0
- vmecpp-0.7.4/src/vmecpp/cpp/vmecpp/vmec/boundaries/BUILD.bazel +66 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/vmec/boundaries/boundaries.cc +89 -13
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/vmec/boundaries/boundaries.h +10 -0
- vmecpp-0.7.4/src/vmecpp/cpp/vmecpp/vmec/boundaries/boundaries_test.cc +113 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/vmec/boundaries/guess_magnetic_axis.cc +57 -33
- vmecpp-0.7.4/src/vmecpp/cpp/vmecpp/vmec/boundaries/guess_magnetic_axis_test.cc +191 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/vmec/fourier_coefficients/fourier_coefficients.cc +11 -6
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/vmec/fourier_coefficients/fourier_coefficients.h +4 -1
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/vmec/fourier_geometry/BUILD.bazel +2 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/vmec/fourier_geometry/fourier_geometry.cc +170 -78
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/vmec/fourier_geometry/fourier_geometry.h +23 -14
- vmecpp-0.7.4/src/vmecpp/cpp/vmecpp/vmec/geometry/BUILD.bazel +37 -0
- vmecpp-0.7.4/src/vmecpp/cpp/vmecpp/vmec/geometry/CMakeLists.txt +7 -0
- vmecpp-0.7.4/src/vmecpp/cpp/vmecpp/vmec/geometry/geometry.cc +259 -0
- vmecpp-0.7.4/src/vmecpp/cpp/vmecpp/vmec/geometry/geometry.h +64 -0
- vmecpp-0.7.4/src/vmecpp/cpp/vmecpp/vmec/geometry/geometry_test.cc +84 -0
- vmecpp-0.7.4/src/vmecpp/cpp/vmecpp/vmec/geometry/vmec_geometry.cc +137 -0
- vmecpp-0.7.4/src/vmecpp/cpp/vmecpp/vmec/geometry/vmec_geometry.h +30 -0
- vmecpp-0.7.4/src/vmecpp/cpp/vmecpp/vmec/geometry/vmec_geometry_test.cc +133 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/vmec/handover_storage/BUILD.bazel +1 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/vmec/handover_storage/handover_storage.cc +3 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/vmec/handover_storage/handover_storage.h +28 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/vmec/ideal_mhd_model/BUILD.bazel +2 -1
- vmecpp-0.7.4/src/vmecpp/cpp/vmecpp/vmec/ideal_mhd_model/constraint_force_kernel.h +210 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/vmec/ideal_mhd_model/dft_toroidal.cc +13 -9
- vmecpp-0.7.4/src/vmecpp/cpp/vmecpp/vmec/ideal_mhd_model/exact_force_jvp.cc +28 -0
- vmecpp-0.7.4/src/vmecpp/cpp/vmecpp/vmec/ideal_mhd_model/exact_force_jvp.h +23 -0
- vmecpp-0.7.4/src/vmecpp/cpp/vmecpp/vmec/ideal_mhd_model/exact_force_vjp.cc +30 -0
- vmecpp-0.7.4/src/vmecpp/cpp/vmecpp/vmec/ideal_mhd_model/exact_force_vjp.h +26 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/vmec/ideal_mhd_model/fft_toroidal.cc +1 -3
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/vmec/ideal_mhd_model/ideal_mhd_model.cc +1140 -405
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/vmec/ideal_mhd_model/ideal_mhd_model.h +118 -3
- vmecpp-0.7.4/src/vmecpp/cpp/vmecpp/vmec/ideal_mhd_model/local_force_composition.h +339 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/vmec/output_quantities/BUILD.bazel +15 -1
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/vmec/output_quantities/output_quantities.cc +345 -393
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/vmec/output_quantities/output_quantities.h +62 -10
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/vmec/output_quantities/output_quantities_bench.cc +2 -2
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/vmec/output_quantities/output_quantities_test.cc +267 -9
- vmecpp-0.7.4/src/vmecpp/cpp/vmecpp/vmec/output_quantities/test_helpers.h +461 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/vmec/profile_parameterization_data/BUILD.bazel +1 -1
- vmecpp-0.7.4/src/vmecpp/cpp/vmecpp/vmec/profile_parameterization_data/profile_parameterization_data.cc +170 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/vmec/profile_parameterization_data/profile_parameterization_data.h +14 -2
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/vmec/pybind11/BUILD.bazel +2 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/vmec/pybind11/pybind_vmec.cc +279 -4
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/vmec/radial_profiles/BUILD.bazel +1 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/vmec/radial_profiles/radial_profiles.cc +107 -182
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/vmec/radial_profiles/radial_profiles.h +7 -4
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/vmec/radial_profiles/radial_profiles_test.cc +223 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/vmec/vmec/BUILD.bazel +8 -1
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/vmec/vmec/vmec.cc +111 -67
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/vmec/vmec/vmec.h +9 -2
- vmecpp-0.7.4/src/vmecpp/cpp/vmecpp/vmec/vmec/vmec_in_memory_mgrid_test.cc +358 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/vmec/vmec/vmec_test.cc +504 -16
- vmecpp-0.7.4/src/vmecpp/geometry.py +260 -0
- vmecpp-0.7.4/src/vmecpp/qs.py +177 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/simsopt_compat.py +8 -1
- vmecpp-0.7.2/CMakeLists.txt +0 -210
- vmecpp-0.7.2/src/vmecpp/cpp/vmecpp/free_boundary/mgrid_provider/mgrid_provider.h +0 -75
- vmecpp-0.7.2/src/vmecpp/cpp/vmecpp/vmec/boundaries/BUILD.bazel +0 -27
- vmecpp-0.7.2/src/vmecpp/cpp/vmecpp/vmec/ideal_mhd_model/constraint_force_kernel.h +0 -68
- vmecpp-0.7.2/src/vmecpp/cpp/vmecpp/vmec/output_quantities/test_helpers.h +0 -128
- vmecpp-0.7.2/src/vmecpp/cpp/vmecpp/vmec/profile_parameterization_data/profile_parameterization_data.cc +0 -28
- vmecpp-0.7.2/src/vmecpp/cpp/vmecpp/vmec/vmec/vmec_in_memory_mgrid_test.cc +0 -133
- {vmecpp-0.7.2 → vmecpp-0.7.4}/.clang-format +0 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/.clang-tidy +0 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/.gitignore +0 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/.gitmodules +0 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/.pre-commit-config.yaml +0 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/CITATION.cff +0 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/CLAUDE.md +0 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/CODEOWNERS +0 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/LICENSE.txt +0 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/VMECPP_NAMING_GUIDE.md +0 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/benchmarks/to_seconds_json.py +0 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/docker/README.md +0 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/flake.lock +0 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/flake.nix +0 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/CMakeLists.txt +0 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/CMakeLists.txt +0 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/_continuation.py +0 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/_iteration.py +0 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/.bazelrc +0 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/.bazelversion +0 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/.gitattributes +0 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/CMakeLists.txt +0 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/MODULE.bazel +0 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/MODULE.bazel.lock +0 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/docker/tsan/README.md +0 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/docker/tsan/background_info.md +0 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/docker/tsan/llvm_toolchain/BUILD +0 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/docker/tsan/llvm_toolchain/cc_toolchain_config.bzl +0 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/makegrid/README.md +0 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/makegrid/example_inputs/makegrid_parameters.json +0 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/makegrid/makegrid/BUILD.bazel +0 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/makegrid/makegrid/makegrid.cc +0 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/third_party/BUILD.bazel +0 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/third_party/fftx_codelets/BUILD.bazel +0 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/third_party/fftx_codelets/README.md +0 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/third_party/fftx_codelets/codegen/dftbatch-sizes.txt +0 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/third_party/fftx_codelets/codegen/fftx_prdftbat-frame.g +0 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/third_party/fftx_codelets/codegen/post_process.py +0 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/third_party/fftx_codelets/include/fftx_minimal.hpp +0 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/third_party/fftx_codelets/include/omega64.h +0 -0
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/third_party/hdf5/BUILD.bazel +0 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/third_party/netcdf4/BUILD.bazel +0 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/third_party/non_module_deps.bzl +0 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/util/CMakeLists.txt +0 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/util/file_io/BUILD.bazel +0 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/util/file_io/CMakeLists.txt +0 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/util/file_io/file_io.cc +0 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/util/file_io/file_io.h +0 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/util/file_io/file_io_test.cc +0 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/util/hdf5_io/CMakeLists.txt +0 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/util/hdf5_io/hdf5_io.h +0 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/util/json_io/BUILD.bazel +0 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/util/json_io/CMakeLists.txt +0 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/util/json_io/json_io.cc +0 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/util/json_io/json_io.h +0 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/util/json_io/json_io_test.cc +0 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/util/netcdf_io/BUILD.bazel +0 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/util/netcdf_io/CMakeLists.txt +0 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/util/netcdf_io/example_netcdf.nc +0 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/util/netcdf_io/netcdf_io.cc +0 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/util/netcdf_io/netcdf_io.h +0 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/util/netcdf_io/netcdf_io_test.cc +0 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/util/test_data/BUILD.bazel +0 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/util/test_data/empty.txt +0 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/util/test_data/lorem.txt +0 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/util/testing/BUILD.bazel +0 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/util/testing/CMakeLists.txt +0 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/util/testing/numerical_comparison_lib.cc +0 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/util/testing/numerical_comparison_lib.h +0 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/util/testing/numerical_comparison_test.cc +0 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/CMakeLists.txt +0 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/common/CMakeLists.txt +0 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/common/composed_types_definition/BUILD.bazel +0 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/common/composed_types_definition/CMakeLists.txt +0 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/common/composed_types_definition/composed_types.h +0 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/common/composed_types_lib/BUILD.bazel +0 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/common/composed_types_lib/CMakeLists.txt +0 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/common/composed_types_lib/composed_types_lib.cc +0 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/common/composed_types_lib/composed_types_lib.h +0 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/common/composed_types_lib/composed_types_lib_test.cc +0 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/common/enzyme/BUILD.bazel +0 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/common/enzyme/enzyme.h +0 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/common/enzyme/enzyme_smoke_test.cc +0 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/common/enzyme/jacobian_kernel_autodiff_test.cc +0 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/common/flow_control/BUILD.bazel +0 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/common/flow_control/CMakeLists.txt +0 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/common/flow_control/flow_control.cc +0 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/common/flow_control/flow_control.h +0 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/common/fourier_basis/BUILD.bazel +0 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/common/fourier_basis/CMakeLists.txt +0 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/common/fourier_basis_fast_poloidal/BUILD.bazel +0 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/common/fourier_basis_fast_poloidal/CMakeLists.txt +0 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/common/fourier_basis_fast_poloidal/fourier_basis_fast_poloidal.h +0 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/common/fourier_basis_fast_toroidal/BUILD.bazel +0 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/common/fourier_basis_fast_toroidal/CMakeLists.txt +0 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/common/fourier_basis_fast_toroidal/fourier_basis_fast_toroidal.h +0 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/common/magnetic_configuration_definition/BUILD.bazel +0 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/common/magnetic_configuration_definition/CMakeLists.txt +0 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/common/magnetic_configuration_definition/magnetic_configuration.h +0 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/common/magnetic_configuration_lib/BUILD.bazel +0 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/common/magnetic_configuration_lib/CMakeLists.txt +0 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/common/magnetic_configuration_lib/magnetic_configuration_lib.cc +0 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/common/magnetic_configuration_lib/magnetic_configuration_lib.h +0 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/common/magnetic_configuration_lib/magnetic_configuration_lib_test.cc +0 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/common/magnetic_field_provider/CMakeLists.txt +0 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/common/makegrid_lib/CMakeLists.txt +0 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/common/makegrid_lib/create_reference_mgrid.sh +0 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/common/makegrid_lib/makegrid_lib.h +0 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/common/sizes/BUILD.bazel +0 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/common/sizes/CMakeLists.txt +0 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/common/sizes/sizes.h +0 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/common/util/BUILD.bazel +0 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/common/util/CMakeLists.txt +0 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/common/util/util_test.cc +0 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/common/vmec_indata/CMakeLists.txt +0 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/common/vmec_indata/boundary_from_json.cc +0 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/common/vmec_indata/boundary_from_json.h +0 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/free_boundary/CMakeLists.txt +0 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/free_boundary/external_magnetic_field/CMakeLists.txt +0 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/free_boundary/free_boundary_base/CMakeLists.txt +0 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/free_boundary/laplace_solver/CMakeLists.txt +0 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/free_boundary/mgrid_provider/CMakeLists.txt +0 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/free_boundary/nestor/CMakeLists.txt +0 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/free_boundary/only_coils/BUILD.bazel +0 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/free_boundary/only_coils/CMakeLists.txt +0 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/free_boundary/regularized_integrals/BUILD.bazel +0 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/free_boundary/regularized_integrals/CMakeLists.txt +0 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/free_boundary/regularized_integrals/regularized_integrals.h +0 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/free_boundary/singular_integrals/BUILD.bazel +0 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/free_boundary/singular_integrals/CMakeLists.txt +0 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/free_boundary/singular_integrals/singular_integrals.h +0 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/free_boundary/surface_geometry/BUILD.bazel +0 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/free_boundary/surface_geometry/CMakeLists.txt +0 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/free_boundary/surface_geometry/lcfs_asym.SurfaceRZFourier.csv +0 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/free_boundary/surface_geometry/surface_geometry.cc +0 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/free_boundary/surface_geometry/surface_geometry.h +0 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/free_boundary/surface_geometry/surface_geometry_test.cc +0 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/free_boundary/surface_geometry_mockup/BUILD.bazel +0 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/free_boundary/surface_geometry_mockup/lcfs.SurfaceRZFourier.csv +0 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/free_boundary/surface_geometry_mockup/surface_geometry_mockup.cc +0 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/free_boundary/surface_geometry_mockup/surface_geometry_mockup.h +0 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/free_boundary/tangential_partitioning/BUILD.bazel +0 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/free_boundary/tangential_partitioning/CMakeLists.txt +0 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/simsopt_compat/README.md +0 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/simsopt_compat/__init__.py +0 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/simsopt_compat/_indata_to_surfacerzfourier.py +0 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/vmec/boundaries/CMakeLists.txt +0 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/vmec/boundaries/guess_magnetic_axis.h +0 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/vmec/fourier_coefficients/BUILD.bazel +0 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/vmec/fourier_coefficients/CMakeLists.txt +0 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/vmec/fourier_forces/BUILD.bazel +0 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/vmec/fourier_forces/CMakeLists.txt +0 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/vmec/fourier_forces/fourier_forces.cc +0 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/vmec/fourier_forces/fourier_forces.h +0 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/vmec/fourier_forces/fourier_forces_test.cc +0 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/vmec/fourier_geometry/CMakeLists.txt +0 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/vmec/fourier_velocity/BUILD.bazel +0 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/vmec/fourier_velocity/CMakeLists.txt +0 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/vmec/fourier_velocity/fourier_velocity.cc +0 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/vmec/fourier_velocity/fourier_velocity.h +0 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/vmec/handover_storage/CMakeLists.txt +0 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/vmec/ideal_mhd_model/AGENTS.md +0 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/vmec/ideal_mhd_model/CLAUDE.md +0 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/vmec/ideal_mhd_model/CMakeLists.txt +0 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/vmec/ideal_mhd_model/bco_kernel.h +0 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/vmec/ideal_mhd_model/bcontra_kernel.h +0 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/vmec/ideal_mhd_model/dealias_constraint_force_bench.cc +0 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/vmec/ideal_mhd_model/dft_data.h +0 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/vmec/ideal_mhd_model/dft_toroidal.h +0 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/vmec/ideal_mhd_model/fft_toroidal.h +0 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/vmec/ideal_mhd_model/fft_toroidal_bench.cc +0 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/vmec/ideal_mhd_model/fft_toroidal_test.cc +0 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/vmec/ideal_mhd_model/jacobian_kernel.h +0 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/vmec/ideal_mhd_model/lambda_force_kernel.h +0 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/vmec/ideal_mhd_model/metric_kernel.h +0 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/vmec/ideal_mhd_model/mhdforce_kernel.h +0 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/vmec/ideal_mhd_model/pressure_kernel.h +0 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/vmec/iteration_logger/BUILD.bazel +0 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/vmec/iteration_logger/CMakeLists.txt +0 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/vmec/iteration_logger/iteration_logger.cc +0 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/vmec/iteration_logger/iteration_logger.h +0 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/vmec/output_quantities/CMakeLists.txt +0 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/vmec/output_quantities/output_quantities_io_test.cc +0 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/vmec/profile_parameterization_data/CMakeLists.txt +0 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/vmec/pybind11/.gitignore +0 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/vmec/radial_partitioning/BUILD.bazel +0 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/vmec/radial_partitioning/CMakeLists.txt +0 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/vmec/radial_partitioning/radial_partitioning.cc +0 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/vmec/radial_partitioning/radial_partitioning.h +0 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/vmec/radial_partitioning/radial_partitioning_test.cc +0 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/vmec/radial_profiles/CMakeLists.txt +0 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/vmec/thread_local_storage/BUILD.bazel +0 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/vmec/thread_local_storage/CMakeLists.txt +0 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/vmec/thread_local_storage/thread_local_storage.cc +0 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/vmec/thread_local_storage/thread_local_storage.h +0 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/vmec/vmec/AGENTS.md +0 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/vmec/vmec/CLAUDE.md +0 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/vmec/vmec/CMakeLists.txt +0 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/vmec/vmec/vmec_allocation_test.cc +0 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/vmec/vmec_constants/BUILD.bazel +0 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/vmec/vmec_constants/CMakeLists.txt +0 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/vmec/vmec_constants/vmec_algorithm_constants.h +0 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/vmec/vmec_constants/vmec_constants.cc +0 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/vmec/vmec_constants/vmec_constants.h +0 -0
- {vmecpp-0.7.2 → vmecpp-0.7.4}/src/vmecpp/cpp/vmecpp/vmec/vmec_standalone/BUILD.bazel +0 -0
- {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.
|
|
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
|
|
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
|
|
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
|
|
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,
|
|
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
|
-
- [
|
|
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
|
-
- [
|
|
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
|