Skip to content

Releases: itpplasma/libneo

v2026.04.13

13 Apr 12:57

Choose a tag to compare

Changes since v2025.11.25

Major features

Build / CI

  • Nix flake for reproducible builds (#273)
  • Automatic dependency fetching with ABI smoke tests (#206)
  • Switch to GitHub-hosted CI runners (#246)
  • Fix CI by mirroring map2disc to GitHub (MPCDF GitLab unreachable from Actions)
  • Coils: split filaments at zero-current separators (#245)

Cleanup

  • Remove JOREK field support from neo_field (#270)
  • Remove dead minpack dependency (#262)
  • Remove dead code: boozer.f90, solve_systems.f90, io.f90, gbpi_mod (#216, #218)

Bug fixes

  • Fix interval clamping at x=xmax boundary (#220)
  • Fix der2_rmix correctness (#228)
  • Fix missing OpenACC preprocessor guards (#221)
  • Fix boozer_coordinates_mod exports for SIMPLE v1.5.1 (#224)
  • Fix GCC16 OpenACC benchmark illegal memory access (#213)
  • Fix cyl_to_geoflux consistency with cached forward transform (#252)
  • Fix spl_per recursive (#251)
  • Fix chartmap derivative indexing (#180)

Testing

  • Improve test coverage with meaningful non-tautological tests (#233, #234)
  • Harden chartmap eval and odeint failure handling (#247)
  • Chartmap derivative consistency and boundary validation tests (#182, #188)

Full changelog: v2025.11.25...v2026.04.13

v2025.11.25

13 Apr 12:39

Choose a tag to compare

Changes since v2025.07.30

Features

  • ODE integrator: Context support for odeint_allroutines, trampoline elimination (#115, #120)
  • Batch splines: Batch construction and evaluation for multiple quantities (#123)
  • Coils: STELLOPT/MAKEGRID parser and tests, Aphi derivative fixes (#113, #124, #145), STELLOPT-to-biotsavart converter
  • VMEC: Cylindrical conversion utilities and tests (#125, #128, #129)
  • Geoflux coordinates: Add geoflux coordinate support (#131)
  • Simpson integration: Add Simpson integration utility (#132)
  • Vector potential: Anvac read/write, gauging routines, sign fix

Build / CI

  • Make OpenMP optional
  • Raise CMake minimum to 3.22 (#134)
  • Add test toggle option (#133)
  • Add automated test dashboard with PR support (#139)
  • CI: run Python tests, harden imports, simplify dependency installation
  • Remove coverage workflow (moved to Codacy)

Bug fixes

  • Fix field_eq reinit and restore Boozer tests (#143)
  • Fix coil Aphi derivatives (#145)
  • Fix ntor0 field reconstruction (#147)
  • Fix stretch_coords for arbitrary-size convexwall files (#112)
  • Fix off-by-one error in linspace
  • Fix sign error in gauged_Anvac_from_Bnvac
  • Fix flaky test_jorek_field with deterministic seeds (#140)

Refactoring

  • Standardize naming conventions for Nemov and vector potential routines
  • Decouple VMEC wrappers from canonical helpers (#129)
  • Unify test output directories (#142)

NEO-2 compatibility

Tagged in sync with NEO-2 v2025.11.25 for reproducible builds.

Full changelog: v2025.07.30...v2025.11.25

v1.0.0: VMEC refactor (#110)

27 Jul 12:54
f348421

Choose a tag to compare

### **PR Type**
Enhancement


___

### **Description**
• Refactored VMEC data processing code into modular structure with
multiple focused subroutines
• Created new module interfaces for MINPACK numerical optimization
library
• Enhanced VMEC allocation routines with proper error handling and
NetCDF file validation
• Added CMake build configuration for contrib libraries including RKF45
and MINPACK
• Improved code organization by wrapping standalone subroutines into
proper modules
• Fixed mathematical notation and cleaned up unused variables in MINPACK
code
• Added fallback logic for `rmajor` calculation and corrected `phi` sign
with TODO note


___



### **Changes walkthrough** 📝
<table><thead><tr><th></th><th align="left">Relevant
files</th></tr></thead><tbody><tr><td><strong>Enhancement</strong></td><td><details><summary>3
files</summary><table>
<tr>
  <td>
    <details>
<summary><strong>spline_vmec_data.f90</strong><dd><code>VMEC data
processing refactor into modular structure</code>&nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; </dd></summary>
<hr>

src/spline_vmec_data.f90

• Converted standalone subroutine to module structure with multiple
<br>subroutines<br> • Refactored large monolithic code into smaller,
focused <br>subroutines for better organization<br> • Added new
interpolation and <br>field computation subroutines for VMEC data
processing<br> • Improved code <br>modularity by separating spline
operations, coordinate <br>transformations, and field calculations


</details>


  </td>
<td><a
href="https://github.com/itpplasma/libneo/pull/110/files#diff-ef8e0074cf383180eacbfea58fb7676cb506d4f38698f4e2b2742604e24816fe">+927/-781</a></td>

</tr>

<tr>
  <td>
    <details>
<summary><strong>vmecinm_m.f90</strong><dd><code>Refactor VMEC
subroutines into module with sign fix</code>&nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; </dd></summary>
<hr>

src/vmecinm_m.f90

• Wrapped existing subroutines <code>vmecin</code> and
<code>stevvo</code> in a new module <br><code>vmecin_sub</code><br> •
Added local <code>pi</code> parameter definition and commented out
<br><code>math_constants</code> import<br> • Changed sign of
<code>phi</code> calculation from positive <br>to negative with TODO
comment<br> • Added fallback logic for <code>rmajor</code> when <br>it's
zero using <code>rmnc(1,0)</code><br> • Improved code formatting and
spacing <br>consistency


</details>


  </td>
<td><a
href="https://github.com/itpplasma/libneo/pull/110/files#diff-8a547c66f446eb4a986391409ebdda7d8256b373e5439cbe02bb94499907534b">+136/-131</a></td>

</tr>

<tr>
  <td>
    <details>
<summary><strong>minpack_interfaces.f90</strong><dd><code>Add MINPACK
library interface declarations module</code>&nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

src/contrib/minpack_interfaces.f90

• Created new module <code>minpack_interfaces</code> with explicit
interface <br>declarations<br> • Defined interfaces for various MINPACK
numerical <br>optimization routines<br> • Includes interfaces for
functions like <code>enorm</code>, <br><code>dogleg</code>,
<code>fdjac1</code>, <code>hybrd</code>, <code>lmder</code>, etc.<br> •
All interfaces use proper Fortran <br>intent declarations for parameters


</details>


  </td>
<td><a
href="https://github.com/itpplasma/libneo/pull/110/files#diff-e9bac5cedf472f1f00413329af7118ce0dab6ffcf2930fa0a354d6a1a5844a6b">+155/-0</a>&nbsp;
</td>

</tr>

</table></details></td></tr><tr><td><strong>Formatting</strong></td><td><details><summary>1
files</summary><table>
<tr>
  <td>
    <details>
<summary><strong>minpack.f90</strong><dd><code>Code cleanup and
documentation improvements in MINPACK</code>&nbsp; &nbsp; &nbsp;
</dd></summary>
<hr>

src/contrib/minpack.f90

• Updated mathematical notation in comments from Q' to Q^T for
<br>transpose operations<br> • Removed unused variable declarations
(<code>i</code>, <code>j</code>, <br><code>lwa</code>) to clean up
code<br> • Fixed comment typo changing "Powell's method" <br>to "Powell
method"<br> • Added missing newline at end of file


</details>


  </td>
<td><a
href="https://github.com/itpplasma/libneo/pull/110/files#diff-0719ba66b06eb6b9dde9fe08e43f7c3b00f1846bc3dfdb5562a9d8eb56cbbcb2">+41/-49</a>&nbsp;
</td>

</tr>
</table></details></td></tr><tr><td><strong>Error
handling</strong></td><td><details><summary>1 files</summary><table>
<tr>
  <td>
    <details>

<summary><strong>new_vmec_allocation_stuff.f90</strong><dd><code>Enhance
VMEC allocation with error handling module</code>&nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

src/new_vmec_allocation_stuff.f90

• Wrapped existing subroutines in new module
<code>vmec_alloc_sub</code><br> • Added <br>explicit NetCDF file
existence checking with error handling<br> • Replaced
<br><code>nc_open</code> with direct <code>nf90_open</code> call for
better error control<br> • Added <br>proper error messages and
<code>error stop</code> for missing files<br> • Improved code
<br>formatting and added more comments


</details>


  </td>
<td><a
href="https://github.com/itpplasma/libneo/pull/110/files#diff-5194824bccc4616b80fa97589af08fad69813ce65504859b6956fa644ca553ec">+39/-33</a>&nbsp;
</td>

</tr>
</table></details></td></tr><tr><td><strong>Configuration
changes</strong></td><td><details><summary>2 files</summary><table>
<tr>
  <td>
    <details>
<summary><strong>CMakeLists.txt</strong><dd><code>Add CMake build
configuration for contrib libraries</code>&nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; </dd></summary>
<hr>

src/contrib/CMakeLists.txt

• Created new CMake configuration for contrib directory<br> • Added
RKF45 <br>library build from external source with LGPL license<br> •
Configured <br>CONTRIB library with minpack interfaces and
implementation<br> • Added <br>compiler-specific warning suppressions
for legacy minpack code


</details>


  </td>
<td><a
href="https://github.com/itpplasma/libneo/pull/110/files#diff-184abe703a937b92a8a80a88db5b8bdbe6b57832a06fc1a92124f4bfd913a33d">+17/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td>
    <details>
<summary><strong>CMakeLists.txt</strong><dd><code>Include contrib
subdirectory in main build</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></summary>
<hr>

CMakeLists.txt

• Added `src/contrib` subdirectory to the build system


</details>


  </td>
<td><a
href="https://github.com/itpplasma/libneo/pull/110/files#diff-1e7de1ae2d059d21e1dd75d5812d5a34b0222cef273b7c3a2af62eb747f9d20a">+1/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>
</table></details></td></tr><tr><td><strong>Additional
files</strong></td><td><details><summary>1 files</summary><table>
<tr>
  <td><strong>CMakeSources.in</strong></td>
<td><a
href="https://github.com/itpplasma/libneo/pull/110/files#diff-57f249c75b1b84ad15fd6cf875a7960543824832ae3e9ac70336eb7038f6ff1a">+0/-6</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>
</table></details></td></tr></tr></tbody></table>

___

> <details> <summary> Need help?</summary><li>Type <code>/help how to
...</code> in the comments thread for any questions about Qodo Merge
usage.</li><li>Check out the <a
href="https://qodo-merge-docs.qodo.ai/usage-guide/">documentation</a>
for more information.</li></details>