Physics and Engineering Actors

Physics and engineering actors are the fundamental building blocks of FUSE simulations:

  • Actors operate exclusively on IMAS.dd data
  • Actors functionality is controlled via act parameters
  • Actors can be combined into other actors

Fidelity hierarchy is enabled by concept of generic Vs specific actors

  • Generic actors define physics/component
  • Specific actors implement a specific model for that physics/component
  • For example:
    ActorEquilibrium  <--  generic
    ├─ ActorSolovev   <--  specific
    └─ ActorCHEASE    <--  specific
  • act.[ActorGeneric].model selects specific actor being used
  • All specific actors will expect data and fill the same enties in dd
    • IMAS.jl expressions are key to make this work seamlessly
  • Where possible actors should make use of generic actors and not hardcode use of specific actors

Balance plant (3 actors)

BalanceOfPlant

FUSE.ActorBalanceOfPlantMethod
ActorBalanceOfPlant(dd::IMAS.dd, act::ParametersAllActors; kw...)

Balance of plant actor that estimates the net electrical power output by comparing the balance of plant electrical needs with the electricity generated from the thermal cycle.

Note

Stores data in dd.balance_of_plant

source
ActorBalanceOfPlant
└─ do_plot

ThermalPlant

FUSE.ActorThermalPlantMethod
ActorThermalPlant(dd::IMAS.dd, act::ParametersAllActors; kw...)
Note

Provides a common interface to run different thermal plant actors

source
ActorThermalPlant
├─ model
├─ fixed_plant_efficiency
├─ do_plot
└─ verbose

PowerNeeds

FUSE.ActorPowerNeedsMethod
ActorPowerNeeds(dd::IMAS.dd, act::ParametersAllActors; kw...)

Power needs actor that calculates the needed power to operate the plant

  • model = :thermal_power_fraction simply assumes that the power to balance a plant is a fraction of the gross electrical power generated by the thermal cycle.
  • model = :EU_DEMO subdivides the power plant electrical needs to [:cryostat, :tritium_handling, :pumping] using EU-DEMO numbers.
  • model = :FUSE subdivides power plant needs into subsystems and calculates their power needs.
Note

Stores data in dd.balance_of_plant.power_electric_plant_operation

source
ActorPowerNeeds
├─ model
├─ thermal_power_fraction
└─ do_plot

Build (5 actors)

CXbuild

FUSE.ActorCXbuildMethod
ActorCXbuild(dd::IMAS.dd, act::ParametersAllActors; kw...)

Generates the 2D cross section of the tokamak build

Note

Manipulates data in dd.build

source
ActorCXbuild
├─ rebuild_wall
├─ n_points
├─ divertor_size
└─ do_plot

HFSsizing

FUSE.ActorHFSsizingMethod
ActorHFSsizing(dd::IMAS.dd, act::ParametersAllActors; kw...)

Actor that resizes the High Field Side of the tokamak radial build

  • takes into account the OH maximum allowed superconductor current/Field
  • takes into account the stresses on the center stack
Note

Manipulates radial build information in dd.build.layer

source
ActorHFSsizing
├─ error_on_technology
├─ error_on_performance
├─ do_plot
└─ verbose

FluxSwing

FUSE.ActorFluxSwingMethod
ActorFluxSwing(dd::IMAS.dd, act::ParametersAllActors; kw...)

Depending on operate_oh_at_j_crit

  • true => Evaluate the OH current limits, and evaluate flattop duration from that.
  • false => Evaluate what are the currents needed for a given flattop duration. This may or may not exceed the OH current limits.

OH flux consumption based on:

  • rampup estimate based on Ejima coefficient
  • flattop consumption
  • vertical field from PF coils
Note

Stores data in dd.build.flux_swing, dd.build.tf, and dd.build.oh

source
ActorFluxSwing
└─ operate_oh_at_j_crit

LFSsizing

FUSE.ActorLFSsizingMethod
ActorLFSsizing(dd::IMAS.dd, act::ParametersAllActors; kw...)

Actor that resizes the Low Field Side of the tokamak radial build

  • Places TF outer leg at radius required to meet the dd.build.tf.ripple requirement
  • Other low-field side layers are scaled proportionally
Note

Manipulates radial build information in dd.build.layer

source
ActorLFSsizing
├─ maintenance
├─ tor_modularity
├─ pol_modularity
├─ do_plot
└─ verbose

Stresses

FUSE.ActorStressesMethod
ActorStresses(dd::IMAS.dd, act::ParametersAllActors; kw...)

Estimates mechanical stresses on the center stack

Note

Stores data in dd.solid_mechanics

source
ActorStresses
├─ do_plot
└─ n_points

Compound (3 actors)

DynamicPlasma

ActorDynamicPlasma
├─ Δt  [s]
├─ Nt
├─ evolve_transport
├─ evolve_pedestal
├─ evolve_hcd
├─ evolve_current
├─ evolve_equilibrium
├─ evolve_pf_active
├─ ip_controller
├─ time_derivatives_sources
└─ verbose

StationaryPlasma

FUSE.ActorStationaryPlasmaMethod
ActorStationaryPlasma(dd::IMAS.dd, act::ParametersAllActors; kw...)

Compound actor that runs the following actors in succesion:

  • ActorCurrent
  • ActorHCD
  • ActorCoreTransport
  • ActorEquilibrium
Note

Stores data in dd.equilibrium, dd.core_profiles, dd.core_sources, dd.core_transport

source
ActorStationaryPlasma
├─ max_iter
├─ convergence_error
├─ do_plot
└─ verbose

WholeFacility

FUSE.ActorWholeFacilityMethod
ActorWholeFacility(dd::IMAS.dd, act::ParametersAllActors; kw...)

Compound actor that runs all the physics, engineering and costing actors needed to model the whole plant:

  • ActorStationaryPlasma
  • ActorStabilityLimits
  • ActorHFSsizing
  • ActorLFSsizing
  • ActorCXbuild
  • ActorFluxSwing
  • ActorStresses
  • ActorPFdesign
  • ActorPFactive
  • ActorPassiveStructures
  • ActorVerticalStability
  • ActorNeutronics
  • ActorBlanket
  • ActorDivertors
  • ActorBalanceOfPlant
  • ActorCosting
Note

Stores data in dd

source
ActorWholeFacility
├─ update_plasma
└─ update_build

Costing (3 actors)

Costing

FUSE.ActorCostingMethod
ActorCosting(dd::IMAS.dd, act::ParametersAllActors; kw...)

Estimates the cost of building, operating, and recommission the fusion power plant.

Note

Stores data in dd.costing

source
ActorCosting
├─ model
├─ construction_start_year  [year]
├─ future_inflation_rate
├─ plant_lifetime  [year]
├─ availability
├─ production_increase
└─ learning_rate

CostingARIES

FUSE.ActorCostingARIESMethod
ActorCostingARIES(dd::IMAS.dd, act::ParametersAllActors; kw...)

Estimates costing based on ARIES cost account documentation https://cer.ucsd.edu/_files/publications/UCSD-CER-13-01.pdf

Note

Stores data in dd.costing

source
ActorCostingARIES
├─ land_space  [acres]
├─ building_volume  [m³]
├─ interest_rate
├─ indirect_cost_rate
├─ escalation_fraction
└─ blanket_lifetime  [year]

CostingSheffield

FUSE.ActorCostingSheffieldMethod
ActorCostingSheffield(dd::IMAS.dd, act::ParametersAllActors; kw...)

Estimates costing based on Sheffield and Milora, FS&T 70 (2016)

Note

Stores data in dd.costing

source
ActorCostingSheffield
├─ construction_lead_time  [year]
├─ fixed_charge_rate
├─ capitalize_blanket
├─ capitalize_divertor
├─ divertor_fluence_lifetime  [MW*yr/m²]
└─ blanket_fluence_lifetime  [MW*yr/m²]

Current (3 actors)

Current

FUSE.ActorCurrentMethod
ActorCurrent(dd::IMAS.dd, act::ParametersAllActors; kw...)

Provides a common interface to run multiple ohmic current evolution actors

  • Sets the j_ohmic, j_tor, j_total under dd.core_profiles.profiles_1d[]
  • Sets j_parallel in dd.equilibrium.time_slice[].profiles_1d
  • Updates bootstrap and ohmic parallel current and heating sources in dd.core_sources
source
ActorCurrent
├─ model
├─ allow_floating_plasma_current
├─ ip_from
└─ vloop_from

QED

FUSE.ActorQEDMethod
ActorQED(dd::IMAS.dd, act::ParametersAllActors; kw...)

Evolves the plasma current using the QED current diffusion solver.

Note

This actor operates at "dd.global_time", any time advance must be done outside of the actor

IMAS.new_timeslice!(dd, dd.global_time + Δt)
dd.global_time += Δt
ActorQED(dd, act)
Note

Stores data in dd.core_profiles.profiles_1d[].j_ohmic

source
ActorQED
├─ Δt  [s]
├─ Nt
├─ solve_for
├─ allow_floating_plasma_current
├─ ip_from
└─ vloop_from

SteadyStateCurrent

FUSE.ActorSteadyStateCurrentMethod
ActorSteadyStateCurrent(dd::IMAS.dd, act::ParametersAllActors; kw...)

Evolves the ohmic current to steady state using the conductivity from dd.core_profiles

Note

Stores data in dd.core_profiles.profiles_1d[].j_ohmic

source
ActorSteadyStateCurrent
├─ allow_floating_plasma_current
└─ ip_from

Divertors (1 actors)

Divertors

FUSE.ActorDivertorsMethod
ActorDivertors(dd::IMAS.dd, act::ParametersAllActors; kw...)

Evaluates divertor loading and deposited power

Note

Stores data in dd.divertors

source
ActorDivertors
├─ heat_flux_model
├─ impurities
├─ impurities_fraction
├─ heat_spread_factor
├─ thermal_power_extraction_efficiency
└─ verbose

Equilibrium (4 actors)

CHEASE

FUSE.ActorCHEASEMethod
ActorCHEASE(dd::IMAS.dd, act::ParametersAllActors; kw...)

Runs the Fixed boundary equilibrium solver CHEASE

source
ActorCHEASE
├─ free_boundary
├─ clear_workdir
├─ rescale_eq_to_ip
└─ ip_from

Equilibrium

FUSE.ActorEquilibriumMethod
ActorEquilibrium(dd::IMAS.dd, act::ParametersAllActors; kw...)

Provides a common interface to run different equilibrium actors

source
ActorEquilibrium
├─ model
├─ symmetrize
├─ j_p_from
├─ ip_from
├─ vacuum_r0_b0_from
└─ do_plot

TEQUILA

FUSE.ActorTEQUILAMethod
ActorTEQUILA(dd::IMAS.dd, act::ParametersAllActors; kw...)

Runs the Fixed boundary equilibrium solver TEQUILA

source
ActorTEQUILA
├─ free_boundary
├─ number_of_radial_grid_points
├─ number_of_fourier_modes
├─ number_of_MXH_harmonics
├─ number_of_iterations
├─ relax
├─ tolerance
├─ ip_from
├─ fixed_grid
├─ do_plot
├─ debug
├─ R  [m]
└─ Z  [m]

Solovev

FUSE.ActorSolovevMethod
ActorSolovev(dd::IMAS.dd, act::ParametersAllActors; kw...)

Solovev equilibrium actor, based on: “One size fits all” analytic solutions to the Grad–Shafranov equation Phys. Plasmas 17, 032502 (2010); https://doi.org/10.1063/1.3328818

source
ActorSolovev
├─ ngrid
├─ qstar
├─ alpha
├─ ip_from
└─ verbose

Hcd (5 actors)

HCD

FUSE.ActorHCDMethod
ActorHCD(dd::IMAS.dd, act::ParametersAllActors; kw...)

Provides a common interface to run HCD actors

source
ActorHCD
├─ ec_model
├─ ic_model
├─ lh_model
├─ nb_model
└─ pellet_model

SimpleEC

FUSE.ActorSimpleECMethod
ActorSimpleEC(dd::IMAS.dd, act::ParametersAllActors; kw...)

Estimates the EC electron energy deposition and current drive as a gaussian.

NOTE: Current drive efficiency from GASC, based on "G. Tonon 'Current Drive Efficiency Requirements for an Attractive Steady-State Reactor'"

Note

Reads data in dd.ec_launchers, dd.pulse_schedule and stores data in dd.core_sources

source
ActorSimpleEC
└─ ηcd_scale

SimpleIC

FUSE.ActorSimpleICMethod
ActorSimpleIC(dd::IMAS.dd, act::ParametersAllActors; kw...)

Estimates the ion-cyclotron electron/ion energy deposition and current drive as a gaussian.

NOTE: Current drive efficiency from GASC, based on "G. Tonon 'Current Drive Efficiency Requirements for an Attractive Steady-State Reactor'"

Note

Reads data in dd.ic_antennas, dd.pulse_schedule and stores data in dd.core_sources

source
ActorSimpleIC
└─ ηcd_scale

SimpleLH

FUSE.ActorSimpleLHMethod
ActorSimpleLH(dd::IMAS.dd, act::ParametersAllActors; kw...)

Estimates the Lower-hybrid electron energy deposition and current drive as a gaussian.

NOTE: Current drive efficiency from GASC, based on "G. Tonon 'Current Drive Efficiency Requirements for an Attractive Steady-State Reactor'"

Note

Reads data in dd.lh_antennas, dd.pulse_schedule and stores data in dd.core_sources

source
ActorSimpleLH
└─ ηcd_scale

SimplePellet

FUSE.ActorSimplePelletMethod
ActorSimplePellet(dd::IMAS.dd, act::ParametersAllActors; kw...)

Estimates the Pellet particle deposition

Note

Reads data in dd.pellet_launchers, dd.pulse_schedule and stores data in dd.core_sources

source
ActorSimplePellet

Nuclear (2 actors)

Blanket

FUSE.ActorBlanketMethod
ActorBlanket(dd::IMAS.dd, act::ParametersAllActors; kw...)

Evaluates blankets tritium breeding ratio (TBR), heat deposition, and neutron leakage

Note

Stores data in dd.blanket

source
ActorBlanket
├─ minimum_first_wall_thickness  [m]
├─ blanket_multiplier
├─ thermal_power_extraction_efficiency
└─ verbose

Neutronics

FUSE.ActorNeutronicsMethod
ActorNeutronics(dd::IMAS.dd, act::ParametersAllActors; kw...)

Estimates the neutron wall loading

Note

Stores data in dd.neutronics

source
ActorNeutronics
├─ N
└─ do_plot

Pedestal (3 actors)

Pedestal

FUSE.ActorPedestalMethod
ActorPedestal(dd::IMAS.dd, act::ParametersAllActors; kw...)

Evaluates the pedestal boundary condition (height and width)

source
ActorPedestal
├─ rho_nml
├─ rho_ped
├─ density_match
├─ model
├─ ip_from
├─ βn_from
├─ ne_from
├─ zeff_ped_from
└─ do_plot

EPED

FUSE.ActorEPEDMethod
ActorEPED(dd::IMAS.dd, act::ParametersAllActors; kw...)

Evaluates the pedestal boundary condition (height and width)

source
ActorEPED
├─ rho_nml
├─ rho_ped
├─ T_ratio_pedestal
├─ ped_factor
├─ only_powerlaw
├─ ip_from
├─ βn_from
├─ ne_ped_from
├─ zeff_ped_from
└─ warn_nn_train_bounds

WPED

FUSE.ActorWPEDMethod
ActorWPED(dd::IMAS.dd, act::ParametersAllActors; kw...)

Finds the temperature profile at the edge to match the pedtocorefraction of stored energy set in par.pedtocorefraction

source
ActorWPED
├─ ped_to_core_fraction
├─ rho_ped
├─ ne_ped_from
├─ zeff_ped_from
└─ do_plot

Pf (3 actors)

PFdesign

FUSE.ActorPFdesignMethod
ActorPFdesign(dd::IMAS.dd, act::ParametersAllActors; kw...)

Optimize PF coil locations to achieve desired equilibrium

Note

Manupulates data in dd.pf_active

source
ActorPFdesign
├─ symmetric
├─ update_equilibrium
├─ model
├─ do_plot
└─ verbose

PFactive

FUSE.ActorPFactiveMethod
ActorPFactive(dd::IMAS.dd, act::ParametersAllActors; kw...)

Finds the optimal coil currents to match the equilibrium boundary shape

Note

Manupulates data in dd.pf_active

source
ActorPFactive
├─ green_model
├─ update_equilibrium
└─ do_plot

PassiveStructures

ActorPassiveStructures
├─ wall_precision
├─ min_n_segments
└─ do_plot

Stability (2 actors)

VerticalStability

ActorVerticalStability
├─ model
└─ do_plot

StabilityLimits

ActorStabilityLimits
├─ models
└─ raise_on_breach

Transport (7 actors)

CoreTransport

FUSE.ActorCoreTransportMethod
ActorCoreTransport(dd::IMAS.dd, act::ParametersAllActors; kw...)

Provides a common interface to run multiple core transport actors

source
ActorCoreTransport
├─ model
└─ do_plot

EPEDprofiles

FUSE.ActorEPEDprofilesMethod
ActorEPEDprofiles(dd::IMAS.dd, act::ParametersAllActors; kw...)

Updates pedestal height and width and blends with core profiles that are defined by shaping factors.

Does not change on-axis values of plasma profiles.

source
ActorEPEDprofiles
├─ T_shaping
├─ ne_shaping
├─ T_ratio_pedestal
└─ T_ratio_core

FluxCalculator

FUSE.ActorFluxCalculatorMethod
ActorFluxCalculator(dd::IMAS.dd, act::ParametersAllActors; kw...)

Provides a common interface to run multiple transport model actors

source
ActorFluxCalculator
├─ rho_transport
├─ turbulence_model
└─ neoclassical_model

FluxMatcher

FUSE.ActorFluxMatcherMethod
ActorFluxMatcher(dd::IMAS.dd, act::ParametersAllActors; kw...)

Evalutes the transport fluxes and source fluxes and minimizes the flux_match error

source
ActorFluxMatcher
├─ rho_transport
├─ evolve_Ti
├─ evolve_Te
├─ evolve_densities
├─ evolve_rotation
├─ evolve_pedestal
├─ find_widths
├─ max_iterations
├─ optimizer_algorithm
├─ step_size
├─ Δt  [s]
├─ save_input_tglf_folder
├─ relax
├─ norms
├─ do_plot
└─ verbose

Neoclassical

FUSE.ActorNeoclassicalMethod
ActorNeoclassical(dd::IMAS.dd, act::ParametersAllActors; kw...)

Evaluates the neoclassical transport fluxes

source
ActorNeoclassical
├─ model
└─ rho_transport

QLGYRO

FUSE.ActorQLGYROMethod
ActorQLGYRO(dd::IMAS.dd, act::ParametersAllActors; kw...)

Evaluates the QLGYRO predicted turbulence

source
ActorQLGYRO
├─ model
├─ ky
├─ nky
├─ cpu_per_ky
├─ kygrid_model
├─ sat_rule
├─ n_field
├─ delta_t
├─ max_time
├─ rho_transport
└─ lump_ions

TGLF

FUSE.ActorTGLFMethod
ActorTGLF(dd::IMAS.dd, act::ParametersAllActors; kw...)

Evaluates the TGLF predicted turbulence

source
ActorTGLF
├─ model
├─ sat_rule
├─ electromagnetic
├─ tglfnn_model
├─ rho_transport
├─ warn_nn_train_bounds
├─ custom_input_files
└─ lump_ions

Wall loading (2 actors)

CoreRadHeatFlux

FUSE.ActorCoreRadHeatFluxMethod
ActorCoreRadHeatFlux(dd::IMAS.dd, act::ParametersAllActors; kw...)

Computes the heat flux on the wall due to the core radiation

source
ActorCoreRadHeatFlux
├─ N
├─ r  [m]
├─ q  [W m⁻²]
├─ levels
├─ merge_wall
├─ step  [m]
└─ do_plot

ParticleHeatFlux

FUSE.ActorParticleHeatFluxMethod
ActorParticleHeatFlux(dd::IMAS.dd, act::ParametersAllActors; kw...)

Computes the heat flux on the wall due to the charged particles

source
ActorParticleHeatFlux
├─ r  [m]
├─ q  [W m⁻²]
├─ levels
├─ merge_wall
├─ step  [m]
└─ do_plot