simsopt
is a framework for optimizing
stellarators.
The high-level routines of simsopt
are in python, with calls to C++
or fortran where needed for performance. Several types of components
are included:
- Interfaces to physics codes, e.g. for MHD equilibrium.
- Tools for defining objective functions and parameter spaces for optimization.
- Geometric objects that are important for stellarators - surfaces and curves - with several available parameterizations.
- Efficient implementations of the Biot-Savart law and other magnetic field representations, including derivatives.
- Tools for parallelized finite-difference gradient calculations.
The design of simsopt
is guided by several principles:
- Thorough unit testing, regression testing, and continuous integration.
- Extensibility: It should be possible to add new codes and terms to the objective function without editing modules that already work, i.e. the open-closed principle. This is because any edits to working code can potentially introduce bugs.
- Modularity: Physics modules that are not needed for your optimization problem do not need to be installed. For instance, to optimize SPEC equilibria, the VMEC module need not be installed.
- Flexibility: The components used to define an objective function can
be re-used for applications other than standard optimization. For
instance, a
simsopt
objective function is a standard python function that can be plotted, passed to optimization packages outside ofsimsopt
, etc.
simsopt
is fully open-source, and anyone is welcome to use it, make
suggestions, and contribute.
Several methods are available for installing simsopt
. One
recommended approach is to use pip:
pip install simsopt
For detailed installation instructions on some specific systems, see
the wiki.
Also, a Docker container is available with simsopt
and its components pre-installed, which
can be started using
docker run -it --rm hiddensymmetries/simsopt
More installation options, instructions for the Docker container, and other information can be found in the main simsopt documentation here.
Some of the physics modules with compiled code reside in separate repositories. These separate modules include
- VMEC, for MHD equilibrium.
- SPEC, for MHD equilibrium.
- booz_xform, for Boozer coordinates.
If you use simsopt
in your research, kindly cite the code using
this reference:
[1] M Landreman, B Medasani, F Wechsung, A Giuliani, R Jorge, and C Zhu, "SIMSOPT: A flexible framework for stellarator optimization", J. Open Source Software 6, 3525 (2021).
See also the simsopt publications page.
We gratefully acknowledge funding from the Simons Foundation's Hidden symmetries and fusion energy project.