Skip to content

v0.12.0

Compare
Choose a tag to compare
@f0uriest f0uriest released this 18 Jul 03:11
· 1947 commits to master since this release
87592bc

New Features

  • Coil optimization is now possible in DESC using various filamentary coils. This includes
    a number of new objectives:
    • desc.objectives.QuadraticFlux
    • desc.objectives.ToroidalFlux
    • desc.objectives.CoilLength
    • desc.objectives.CoilCurvature
    • desc.objectives.CoilTorsion
    • desc.objectives.CoilCurrentLength
    • desc.objectives.CoilSetMinDistance
    • desc.objectives.PlasmaCoilSetMinDistance
    • desc.objectives.FixCoilCurrent
    • desc.objectives.FixSumCoilCurrent
  • Add Normal Field Error "B*n" as a plot quantity to desc.plotting.{plot_2d, plot_3d}.
  • New function desc.plotting.poincare_plot for creating Poincare plots by tracing
    field lines from coils or other external fields.
  • New profile type desc.profiles.TwoPowerProfile.
  • Add desc.geometry.FourierRZCurve.from_values method to fit curve with data.
  • Add desc.geometry.FourierRZToroidalSurface.from_shape_parameters method for generating a surface
    with specified elongation, triangularity, squareness, etc.
  • New class desc.magnetic_fields.MagneticFieldFromUser for user defined B(R,phi,Z).
  • All vector variables are now computed in toroidal (R,phi,Z) coordinates by default.
    Cartesian (X,Y,Z) coordinates can be requested with the compute keyword basis='xyz'.
  • Add method desc.coils.CoilSet.is_self_intersecting, which checks if any coils
    intersect each other in the coilset.

Minor changes

  • Improved heuristic initial guess for Equilibrium.map_coordinates.
  • Add documentation for default grid and target/bounds for objectives.
  • Add documentation for compute function keyword arguments.
  • Loading a coilset from a MAKEGRID file will now return a nested MixedCoilSet if there
    are coil groups present in the MAKEGRID file.
  • Users must now pass in spacing/weights to custom Grids (the previous defaults were
    often wrong, leading to incorrect results)
  • The normal and center parameters of a FourierPlanarCurve can now be specified
    in either cartesian or cylindrical coordinates, as determined by the basis parameter.
  • Misc small changes to reduce compile time and memory consumption (more coming soon!)
  • Linear constraint factorization has been refactored to improve efficiency and reduce
    floating point error.
  • desc.objectives.{GenericObjective, ObjectiveFromUser} can now work with other objects
    besides an Equilibrium (such as surfaces, curves, etc.)
  • Improve warning for missing attributes when loading desc objects.

Bug Fixes

  • Several small fixes to ensure things that should be ints are ints
  • Fix incorrect toroidal components of surface basis vectors.
  • Fix a regression in performance in evaluating Zernike polynomials.
  • Fix errors in Equilibrium.map_coordinates for prescribed current equilibria.
  • Fix definition of b0 in VMEC output.
  • Fix a bug where calling Equilibrium.compute(..., data=data) would lead to excessive
    recalculation and potentially wrong results.
  • Fixes a bug causing NaN in reverse mode AD for Omnigenity objective.
  • Fix a bug where "A(z)" would be zero if the grid doesn't contain nodes at rho=1.

New Contributors

Full Changelog: v0.11.1...v0.12.0