ProjectTorreyPines / FUSE.jl

FUsion Synthesis Engine
https://fuse.help
Apache License 2.0
33 stars 2 forks source link

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 πŸ“’

Resources

Here are some key resources for getting started with FUSE:

Objectives

FUSE aims to achieve the following objectives:

Basic Concepts

FUSE is entirely written in Julia and is structured around the following core concepts:

  1. πŸ“‚ Data storage: All data is stored in the dd structure, which follows the ITER IMAS ontology.
  2. 🧠 Actors: The core components of FUSE simulations are physics and engineering actors.
  3. πŸ•ΉοΈ Control: Actor functionality is governed by act parameters.
  4. πŸš€ Initialization: The data structure can be initialized from 0D ini parameters.
  5. πŸ”§ Use cases: FUSE includes templates for various machines (e.g., FPP, ITER, ARC).
  6. πŸ”„ Workflows: Self-contained studies and optimizations are conducted via workflows, typically involving multiple FUSE simulations.
  7. 🌍 Interoperability: FUSE interfaces with existing modeling tools like OMFIT/OMAS and the IMAS ecosystem.

A diagram illustrating these concepts is provided below:
FUSE Diagram

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:

  1. Install Julia

  2. 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}
}