A comprehensive Julia package for stellarator fusion reactor physics analysis, featuring 3D magnetic field calculations, neoclassical transport modeling, optimization algorithms, and comparison with tokamak performance.
- 3D Magnetic Field Calculations: Complete stellarator magnetic field modeling with Fourier harmonics
- Neoclassical Transport: Stellarator-specific transport coefficient calculations
- Boozer Coordinates: Advanced coordinate system for stellarator analysis
- Magnetic Surface Analysis: Calculation of magnetic surfaces and safety factors
- Quasi-Symmetry Optimisation: Minimize magnetic field asymmetry
- Quasi-Isodynamicity Optimisation: Optimise for isodynamic magnetic fields
- Magnetic Well Optimisation: Maximize magnetic well depth for stability
- Transport Optimisation: Minimize neoclassical transport
- Performance Metrics: Direct comparison of stellarator vs tokamak performance
- Transport Analysis: Side-by-side transport coefficient comparison
- Stability Analysis: Comparison of stability properties and beta limits
- Confinement Scaling: Analysis of confinement time scaling laws
- Magnetic Field Lines: Interactive 3D field line tracing
- Plasma Surfaces: 3D visualisation of magnetic surfaces
- Transport Profiles: 2D and 3D transport coefficient visualisation
- Optimisation Results: Real-time optimisation progress visualisation
- Clone the repository:
git clone <repository-url>
cd "Stellarator Physics"
- Start Julia and activate the environment:
julia> using Pkg
julia> Pkg.activate(".")
julia> Pkg.instantiate()
- Load the package:
julia> using StellaratorPhysics
using StellaratorPhysics
# Create a stellarator configuration
Rβ = 1.0 # Major radius [m]
a = 0.2 # Minor radius [m]
N = 5 # Number of field periods
Bβ = 1.0 # Reference magnetic field [T]
stellarator_bfield = MagneticField3D(Rβ, a, N, Bβ)
# Set up plasma parameters
T_e = 1000.0 # Electron temperature [eV]
T_i = 1000.0 # Ion temperature [eV]
n_e = 1e20 # Electron density [m^-3]
n_i = 1e20 # Ion density [m^-3]
transport = NeoclassicalTransport(stellarator_bfield, T_e, T_i, n_e, n_i)
# Calculate transport coefficients
s = 0.5 # Normalized radius
coeffs = calculate_transport_coefficients(transport, s)
# Create 3D visualization
plot_3d = plot_plasma_surfaces(stellarator_bfield, [0.2, 0.4, 0.6, 0.8])
Run the comprehensive example:
include("examples/stellarator_analysis_example.jl")
This example demonstrates:
- 3D magnetic field calculations
- Neoclassical transport analysis
- Stellarator optimization
- Comparison with tokamak performance
- 3D visualization
# Calculate magnetic field at a point
R, Ο, Z = 1.2, 0.0, 0.1
B_R, B_Ο, B_Z = calculate_magnetic_field(stellarator_bfield, R, Ο, Z)
# Trace a field line
field_line = trace_field_line(stellarator_bfield, R, Ο, Z, 10.0)
# Find magnetic surface
surface = find_magnetic_surface(stellarator_bfield, 0.5)
# Calculate transport coefficients
coeffs = calculate_transport_coefficients(transport, 0.5)
# Calculate bootstrap current
j_bs = bootstrap_current(transport, 0.5)
# Calculate radial electric field
E_r = radial_electric_field(transport, 0.5)
# Optimise for quasi-symmetry
result, optimal_harmonics = optimize_quasi_symmetry(stellarator_bfield, 1000)
# Multi-objective optimization
weights = Dict(
"quasi_symmetry" => 0.4,
"magnetic_well" => 0.3,
"transport" => 0.3
)
result = multi_objective_optimization(stellarator_bfield, weights, 1000)
# Create tokamak field
tokamak_bfield = create_tokamak_field(Rβ, a, 1.0, 2.0, Bβ)
tokamak_transport = NeoclassicalTransport(tokamak_bfield, T_e, T_i, n_e, n_i)
# Compare performance
comparison = TokamakComparison(stellarator_bfield, tokamak_bfield,
stellarator_transport, tokamak_transport)
results = comprehensive_comparison(comparison, 0.5)
StellaratorPhysics/
βββ src/
β βββ StellaratorPhysics.jl # Main module
β βββ MagneticField3D.jl # 3D magnetic field calculations
β βββ NeoclassicalTransport.jl # Transport modeling
β βββ StellaratorOptimization.jl # Optimisation algorithms
β βββ TokamakComparison.jl # Tokamak comparison
β βββ Visualization3D.jl # 3D visualization
β βββ utils.jl # Utility functions
βββ examples/
β βββ stellarator_analysis_example.jl
βββ Project.toml
βββ README.md
- Julia 1.8+: Required for optimal performance
- Plots.jl: For 2D plotting and visualization
- PlotlyJS.jl: For interactive 3D visualization
- Optim.jl: For optimization algorithms
- NLopt.jl: For advanced optimization
- DifferentialEquations.jl: For field line tracing
- ForwardDiff.jl: For automatic differentiation
- SpecialFunctions.jl: For special mathematical functions
Stellarators are toroidal fusion devices that use 3D magnetic field configurations to confine plasma, unlike tokamaks which rely on axisymmetric fields and plasma current. Key advantages include:
- Steady-state operation: No need for plasma current drive
- Reduced MHD instabilities: 3D field provides additional stability
- Flexible design: Can optimize for various physics objectives
Neoclassical transport in stellarators differs from tokamaks due to:
- 3D magnetic field geometry: Affects particle orbits and transport
- Magnetic field ripple: Creates additional transport channels
- Quasi-symmetry: Can reduce transport to tokamak-like levels
- Quasi-Symmetry: Minimize magnetic field asymmetry to reduce transport
- Quasi-Isodynamicity: Optimise for isodynamic magnetic fields
- Magnetic Well: Maximize magnetic well depth for stability
- Transport: Minimize neoclassical transport coefficients
Contributions are welcome! Please see the contributing guidelines for details on:
- Code style and formatting
- Testing requirements
- Documentation standards
- Pull request process
This project is licensed under the MIT License - see the LICENSE file for details.
If you use this package in your research, please cite:
@software{stellarator_physics,
title={Stellarator Physics Analysis Package},
author={Stellarator Research Team},
year={2024},
url={https://github.com/your-repo/stellarator-physics}
}
- Based on stellarator physics theory and VMEC code
- Inspired by the work of the stellarator research community
- Built with the Julia scientific computing ecosystem
For questions, issues, or contributions:
- Open an issue on GitHub
- Contact the development team
- Check the documentation and examples
Note: This package is designed for research and educational purposes. For production fusion reactor design, consult with fusion physics experts and use validated codes.