All Projects → bendudson → freegs

bendudson / freegs

Licence: LGPL-3.0 license
Free boundary Grad-Shafranov solver

Programming Languages

python
139335 projects - #7 most used programming language
Jupyter Notebook
11667 projects

Projects that are alternatives of or similar to freegs

Aurora
Modern toolbox for impurity transport, neutrals and radiation modeling in magnetically-confined plasmas
Stars: ✭ 18 (-61.7%)
Mutual labels:  tokamak
ASALI
Do you work with chemical reactors? Are you curious about them? ASALI is the open-source code that you are looking for. Chemical reactor models, transport/thermodynamic properties of gases, equilibrium calculations. ASALI couples all these features with an user friendly graphical interface. Modeling catalytic reactors has never been so easy.
Stars: ✭ 38 (-19.15%)
Mutual labels:  equilibrium
frontless
Frontless Swift - replaces Javascript with Swift for convenient and reactive web experiences.
Stars: ✭ 16 (-65.96%)
Mutual labels:  tokamak
simsopt
Simons Stellarator Optimizer Code
Stars: ✭ 28 (-40.43%)
Mutual labels:  plasma-physics
piclas
PICLas is a parallel, three-dimensional PIC-DSMC solver developed cooperatively by the Institute of Space Systems, Institute of Aerodynamics and Gas Dynamics at the University of Stuttgart and the spin-off boltzplatz. PICLas is a flexible particle-based plasma simulation suite.
Stars: ✭ 34 (-27.66%)
Mutual labels:  plasma-physics

FreeGS: Free boundary Grad-Shafranov solver

License py3comp Build Status codecov

NOTICE: This is no longer the main FreeGS repository The official repository has moved to https://github.com/freegs-plasma/freegs.

This Python module calculates plasma equilibria for tokamak fusion experiments, by solving the Grad-Shafranov equation with free boundaries. Given a set of coils, plasma profiles and shape, FreeGS finds the currents in the coils which produce a steady-state solution in force balance.

Note This is a work in progress, and probably contains bugs. There is a feature wishlist in issues, suggestions and contributions welcome!

Installing

FreeGS is available on PyPI

$ pip install --user freegs

or clone/download this repository and run setup:

$ git clone https://github.com/bendudson/freegs.git
$ cd freegs
$ python setup.py install --user

Documentation

The manual is in the docs subdirectory, and hosted here on readthedocs.

Testing

Unit tests use pytest so after installing, run with:

$ pytest

The tests are in the src/ subdirectory.

A convergence test is described in the manual. To run:

$ python test-convergence.py

Examples

The Jupyter notebooks contain examples wuth additional notes

  • MAST-example.ipynb

There are also some Python scripts to run short tests and examples

$ python 01-freeboundary.py

This solves a free boundary problem, specifying the desired location of two X-points. Writes the equilibrium to a G-EQDSK file "lsn.geqdsk"

$ python 02-read-geqdsk.py

Reads in the file "lsn.geqdsk", inferring the coil currents from the plasma boundary and profiles in the G-EQDSK file.

$ python 03-mast.py

Calculates a double-null (CDND) equilibrium for MAST from scratch. Writes solution to G-EQDSK file "mast.geqdsk"

$ python 04-read-mast-geqdsk.py

Reads the file "mast.geqdsk", inferring the coil currents.

$ python 05-fixed-boundary.py 

This example solves a fixed boundary problem, in which the square edges of the domain are fixed. The plasma pressure on axis and plasma current are fixed.

$ python 06-xpoints.py

This demonstrates the coil current control code, finding X-points, and marking core region These routines are used inside the free boundary solver

Files

The "freegs" module consists of the following files:

  • boundary.py - Operators for applying boundary conditions to plasma psi
  • control.py - Routines for controlling coil currents based on constraints
  • critical.py - Finds critical points (O- and X-points)
  • equilibrium.py - Represents the plasma equilibrium state
  • gradshafranov.py - Greens functions and operators for the Grad-Shafranov equation
  • jtor.py - Routines for calculating toroidal current density (profiles)
  • machine.py - Represents the coils and power supply circuits
  • multigrid.py - The multigrid solver for the linear elliptic operator
  • picard.py - Nonlinear solver, iterating the profiles and constraints
  • plotting.py - Plotting routines using matplotlib

License

Copyright 2016-2021 Ben Dudson, University of York, and other contributors.
Email: [email protected]

This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Lesser General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU Lesser General Public License for more details.

You should have received a copy of the GNU Lesser General Public License
along with this program.  If not, see <http://www.gnu.org/licenses/>.

References

Versions

0.6.1 11th February 2021

  • Fixes for HDF5 reading and writing
  • Fix Numpy deprecations
  • Catch errors in optimisation measures, making that more robust
  • Fix core mask in geqdsk file reading
  • Flake8 fixes
  • Move to Github actions

0.6.0 29th January 2021

  • Improve separatrix finding (Pablo Rodriguez-Fernandez)
  • Update MAST-U machine description (James Harrison)
  • Updated documentation
  • Add tests for critical point finding
  • Black format all library code
  • Fix wall intersection calculation in optimisation
  • Fix factor of pi in effectiveElongation (Chris Winnard)
  • Miscellaneous fixes and tidying (Chris Winnard)
  • Fix psi_bndry test in critical.core_mask
  • Fix comments in Greens functions (James Morris)

0.5.0 25th March 2020

  • More tests, thanks to @ZedThree.
  • Added more flexible coil types, thanks to Chris Marsden. Includes support for shaped coils, multi-strand coils, and up-down mirrored coils.
  • Basic support for reading and writing AEQDSK files
  • Added h5py to requirements, fixes for latest NumPy

0.4.0 10th November 2019

  • Add optimisation with Differential Evolution
  • More unit testing, documentation

0.3.0 28th July 2019

  • Add 4th-order solver for potential
  • Add convergence test

0.2.0 12th March 2019

  • Add field line tracer, freegs.fieldtracer
  • Add Equilibrium.Btor toroidal field calculation
  • Add Equilibrium.plasmaVolume
  • Fix rlim, zlim saved into GEQDSK files
Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].