FUSE.jl
FUSE (FUsion Synthesis Engine) is an open-source framework for the integrated design of Fusion Power Plants (FPP). Originally developed by General Atomics, FUSE is now publicly available under the Apache 2.0 license.
π’ 2024 Code Camp π’
- Date: Dec 9th - 13th
- Location: In person @ General Atomics
- Agenda: here
- Seats: All out! Join us on Discord to know of upcoming events!
Resources
Here are some key resources for getting started with FUSE:
- π Online documentation
- π€ Overview presentation
- π Preprint publication
- π Discord community
- ποΈ Weekly devs meeting minutes
Objectives
FUSE aims to achieve the following objectives:
- β‘ Provide a highly efficient, modular framework that tightly couples models across different domains.
- 𧩠Integrate plasma physics, engineering, control, balance of plant, and costing systems.
- π€ Leverage machine learning to overcome the typical fidelity/speed tradeoff in simulations.
- β±οΈ Support both stationary and time-dependent simulations.
- π» Harness parallelism and high-performance computing (HPC) for large-scale studies.
- π― Perform multi-objective constrained optimization to explore design tradeoffs.
- π Enable comprehensive sensitivity analysis and uncertainty quantification.
Basic Concepts
FUSE is entirely written in Julia and is structured around the following core concepts:
- π Data storage: All data is stored in the
dd
structure, which follows the ITER IMAS ontology. - π§ Actors: The core components of FUSE simulations are physics and engineering actors.
- πΉοΈ Control: Actor functionality is governed by
act
parameters. - π Initialization: The data structure can be initialized from 0D
ini
parameters. - π§ Use cases: FUSE includes templates for various machines (e.g., FPP, ITER, ARC).
- π Workflows: Self-contained studies and optimizations are conducted via workflows, typically involving multiple FUSE simulations.
- π Interoperability: FUSE interfaces with existing modeling tools like OMFIT/OMAS and the IMAS ecosystem.
A diagram illustrating these concepts is provided below:
Usage Example
Hereβs a simple example of setting up and running a FUSE simulation in Julia:
using FUSE
# Obtain `ini` and `act` parameters for a specific use case
ini, act = FUSE.case_parameters(:FPP)
# Initialize the `dd` structure from 0D `ini` parameters
dd = FUSE.init(ini, act)
# Run a stationary plasma actor simulation
FUSE.ActorStationaryPlasma(dd, act)
# Get an overview of the simulation results
FUSE.digest(dd)
Make sure to take a look at the introductory tutorial and examples.
Installation
FUSE and its related packages are available through the FuseRegistry. To install:
Add the FuseRegistry and General registries, then install FUSE:
using Pkg
Pkg.Registry.add(RegistrySpec(url="https://github.com/ProjectTorreyPines/FuseRegistry.jl.git"))
Pkg.Registry.add("General")
Pkg.add("FUSE")
Citation
Please cite this work as follows:
@article{meneghini2024fuse,
author = {Meneghini, O. and Slendebroek, T. and Lyons, B.C. and McLaughlin, K. and McClenaghan, J. and Stagner, L. and Harvey, J. and Neiser, T.F. and Ghiozzi, A. and Dose, G. and Guterl, J. and Zalzali, A. and Cote, T. and Shi, N. and Weisberg, D. and Smith, S.P. and Grierson, B.A. and Candy, J.},
doi = {10.48550/arXiv.2409.05894},
journal = {arXiv},
title = {{FUSE (Fusion Synthesis Engine): A Next Generation Framework for Integrated Design of Fusion Pilot Plants}},
year = {2024}
}
Last update on 2024-11-21T02:32:10.024