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
- Physics and Engineering Actors
Balance plant (3 actors)
BalanceOfPlant
FUSE.ActorBalanceOfPlant
— MethodActorBalanceOfPlant(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.
Stores data in dd.balance_of_plant
ActorBalanceOfPlant
└─ do_plot
PowerNeeds
FUSE.ActorPowerNeeds
— MethodActorPowerNeeds(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.
Stores data in dd.balance_of_plant.power_electric_plant_operation
ActorPowerNeeds
├─ model
├─ thermal_power_fraction
└─ do_plot
ThermalPlant
FUSE.ActorThermalPlant
— MethodActorThermalPlant(dd::IMAS.dd, act::ParametersAllActors; kw...)
Stores data in dd.balance_of_plant
ActorThermalPlant
├─ model
├─ fixed_plant_efficiency
├─ do_plot
└─ verbose
Build (5 actors)
CXbuild
FUSE.ActorCXbuild
— MethodActorCXbuild(dd::IMAS.dd, act::ParametersAllActors; kw...)
Generates the 2D cross section of the tokamak build
Manipulates data in dd.build
ActorCXbuild
├─ rebuild_wall
├─ n_points
├─ divertor_size
└─ do_plot
HFSsizing
FUSE.ActorHFSsizing
— MethodActorHFSsizing(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
Manipulates radial build information in dd.build.layer
ActorHFSsizing
├─ error_on_technology
├─ error_on_performance
├─ do_plot
└─ verbose
FluxSwing
FUSE.ActorFluxSwing
— MethodActorFluxSwing(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
Stores data in dd.build.flux_swing
, dd.build.tf
, and dd.build.oh
ActorFluxSwing
└─ operate_oh_at_j_crit
LFSsizing
FUSE.ActorLFSsizing
— MethodActorLFSsizing(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
Manipulates radial build information in dd.build.layer
ActorLFSsizing
├─ maintenance
├─ tor_modularity
├─ pol_modularity
├─ do_plot
└─ verbose
Stresses
FUSE.ActorStresses
— MethodActorStresses(dd::IMAS.dd, act::ParametersAllActors; kw...)
Estimates mechanical stresses on the center stack
Stores data in dd.solid_mechanics
ActorStresses
├─ do_plot
└─ n_points
Compound (3 actors)
DynamicPlasma
FUSE.ActorDynamicPlasma
— MethodActorDynamicPlasma(dd::IMAS.dd, act::ParametersAllActors; kw...)
Compound evolves plasma in time
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.ActorStationaryPlasma
— MethodActorStationaryPlasma(dd::IMAS.dd, act::ParametersAllActors; kw...)
Compound actor that runs the following actors in succesion:
- ActorCurrent
- ActorHCD
- ActorCoreTransport
- ActorEquilibrium
Stores data in dd.equilibrium
, dd.core_profiles
, dd.core_sources
, dd.core_transport
ActorStationaryPlasma
├─ max_iter
├─ convergence_error
├─ do_plot
└─ verbose
WholeFacility
FUSE.ActorWholeFacility
— MethodActorWholeFacility(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
Stores data in dd
ActorWholeFacility
├─ update_plasma
└─ update_build
Costing (3 actors)
Costing
FUSE.ActorCosting
— MethodActorCosting(dd::IMAS.dd, act::ParametersAllActors; kw...)
Estimates the cost of building, operating, and recommission the fusion power plant.
Stores data in dd.costing
ActorCosting
├─ model
├─ construction_start_year [year]
├─ future_inflation_rate
├─ plant_lifetime [year]
├─ availability
├─ production_increase
└─ learning_rate
CostingARIES
FUSE.ActorCostingARIES
— MethodActorCostingARIES(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
Stores data in dd.costing
ActorCostingARIES
├─ land_space [acres]
├─ building_volume [m³]
├─ interest_rate
├─ indirect_cost_rate
├─ escalation_fraction
└─ blanket_lifetime [year]
CostingSheffield
FUSE.ActorCostingSheffield
— MethodActorCostingSheffield(dd::IMAS.dd, act::ParametersAllActors; kw...)
Estimates costing based on Sheffield and Milora, FS&T 70 (2016)
Stores data in dd.costing
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.ActorCurrent
— MethodActorCurrent(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
underdd.core_profiles.profiles_1d[]
- Sets
j_parallel
indd.equilibrium.time_slice[].profiles_1d
- Updates
bootstrap
andohmic
parallel current and heating sources indd.core_sources
ActorCurrent
├─ model
├─ allow_floating_plasma_current
├─ ip_from
└─ vloop_from
QED
FUSE.ActorQED
— MethodActorQED(dd::IMAS.dd, act::ParametersAllActors; kw...)
Evolves the plasma current using the QED current diffusion solver.
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)
Stores data in dd.core_profiles.profiles_1d[].j_ohmic
ActorQED
├─ Δt [s]
├─ Nt
├─ solve_for
├─ allow_floating_plasma_current
├─ ip_from
└─ vloop_from
SteadyStateCurrent
FUSE.ActorSteadyStateCurrent
— MethodActorSteadyStateCurrent(dd::IMAS.dd, act::ParametersAllActors; kw...)
Evolves the ohmic current to steady state using the conductivity from dd.core_profiles
Stores data in dd.core_profiles.profiles_1d[].j_ohmic
ActorSteadyStateCurrent
├─ allow_floating_plasma_current
└─ ip_from
Divertors (1 actors)
Divertors
FUSE.ActorDivertors
— MethodActorDivertors(dd::IMAS.dd, act::ParametersAllActors; kw...)
Evaluates divertor loading and deposited power
Stores data in dd.divertors
ActorDivertors
├─ heat_flux_model
├─ impurities
├─ impurities_fraction
├─ heat_spread_factor
├─ thermal_power_extraction_efficiency
└─ verbose
Equilibrium (4 actors)
CHEASE
FUSE.ActorCHEASE
— MethodActorCHEASE(dd::IMAS.dd, act::ParametersAllActors; kw...)
Runs the Fixed boundary equilibrium solver CHEASE
ActorCHEASE
├─ free_boundary
├─ clear_workdir
├─ rescale_eq_to_ip
└─ ip_from
Equilibrium
FUSE.ActorEquilibrium
— MethodActorEquilibrium(dd::IMAS.dd, act::ParametersAllActors; kw...)
Provides a common interface to run multiple equilibrium actors
ActorEquilibrium
├─ model
├─ symmetrize
├─ j_p_from
├─ ip_from
├─ vacuum_r0_b0_from
└─ do_plot
TEQUILA
FUSE.ActorTEQUILA
— MethodActorTEQUILA(dd::IMAS.dd, act::ParametersAllActors; kw...)
Runs the Fixed boundary equilibrium solver TEQUILA
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.ActorSolovev
— MethodActorSolovev(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
ActorSolovev
├─ ngrid
├─ qstar
├─ alpha
├─ ip_from
└─ verbose
Hcd (5 actors)
HCD
FUSE.ActorHCD
— MethodActorHCD(dd::IMAS.dd, act::ParametersAllActors; kw...)
Provides a common interface to run HCD actors
ActorHCD
├─ ec_model
├─ ic_model
├─ lh_model
├─ nb_model
└─ pellet_model
SimpleEC
FUSE.ActorSimpleEC
— MethodActorSimpleEC(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'"
Reads data in dd.ec_launchers
, dd.pulse_schedule
and stores data in dd.core_sources
ActorSimpleEC
└─ ηcd_scale
SimpleIC
FUSE.ActorSimpleIC
— MethodActorSimpleIC(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'"
Reads data in dd.ic_antennas
, dd.pulse_schedule
and stores data in dd.core_sources
ActorSimpleIC
└─ ηcd_scale
SimpleLH
FUSE.ActorSimpleLH
— MethodActorSimpleLH(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'"
Reads data in dd.lh_antennas
, dd.pulse_schedule
and stores data in dd.core_sources
ActorSimpleLH
└─ ηcd_scale
SimplePellet
FUSE.ActorSimplePellet
— MethodActorSimplePellet(dd::IMAS.dd, act::ParametersAllActors; kw...)
Estimates the Pellet particle deposition
Reads data in dd.pellet_launchers
, dd.pulse_schedule
and stores data in dd.core_sources
ActorSimplePellet
Nuclear (2 actors)
Blanket
FUSE.ActorBlanket
— MethodActorBlanket(dd::IMAS.dd, act::ParametersAllActors; kw...)
Evaluates blankets tritium breeding ratio (TBR), heat deposition, and neutron leakage
Stores data in dd.blanket
ActorBlanket
├─ minimum_first_wall_thickness [m]
├─ blanket_multiplier
├─ thermal_power_extraction_efficiency
└─ verbose
Neutronics
FUSE.ActorNeutronics
— MethodActorNeutronics(dd::IMAS.dd, act::ParametersAllActors; kw...)
Estimates the neutron wall loading
Stores data in dd.neutronics
ActorNeutronics
├─ N
└─ do_plot
Pedestal (3 actors)
Pedestal
FUSE.ActorPedestal
— MethodActorPedestal(dd::IMAS.dd, act::ParametersAllActors; kw...)
Evaluates the pedestal boundary condition (height and width)
ActorPedestal
├─ rho_nml
├─ rho_ped
├─ density_match
├─ model
├─ ip_from
├─ βn_from
├─ ne_from
├─ zeff_ped_from
└─ do_plot
EPED
FUSE.ActorEPED
— MethodActorEPED(dd::IMAS.dd, act::ParametersAllActors; kw...)
Evaluates the pedestal boundary condition (height and width)
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.ActorWPED
— MethodActorWPED(dd::IMAS.dd, act::ParametersAllActors; kw...)
Finds the temperature profile at the edge to match the pedtocorefraction of stored energy set in par.pedtocorefraction
ActorWPED
├─ ped_to_core_fraction
├─ rho_ped
├─ ne_ped_from
├─ zeff_ped_from
└─ do_plot
Pf (3 actors)
PFdesign
FUSE.ActorPFdesign
— MethodActorPFdesign(dd::IMAS.dd, act::ParametersAllActors; kw...)
Optimize PF coil locations to achieve desired equilibrium
Manupulates data in dd.pf_active
ActorPFdesign
├─ symmetric
├─ update_equilibrium
├─ model
├─ do_plot
└─ verbose
PFactive
FUSE.ActorPFactive
— MethodActorPFactive(dd::IMAS.dd, act::ParametersAllActors; kw...)
Finds the optimal coil currents to match the equilibrium boundary shape
Manupulates data in dd.pf_active
ActorPFactive
├─ green_model
├─ update_equilibrium
└─ do_plot
PassiveStructures
FUSE.ActorPassiveStructures
— MethodActorPassiveStructures(dd::IMAS.dd, act::ParametersAllActors; kw...)
Populates pf_passive
structures
ActorPassiveStructures
├─ wall_precision
├─ min_n_segments
└─ do_plot
Stability (2 actors)
VerticalStability
FUSE.ActorVerticalStability
— MethodActorVerticalStability(dd::IMAS.dd, act::ParametersAllActors; kw...)
Compute vertical stability metrics
ActorVerticalStability
├─ model
└─ do_plot
StabilityLimits
FUSE.ActorStabilityLimits
— MethodActorStabilityLimits(dd::IMAS.dd, act::ParametersAllActors; kw...)
Runs all the limit actors
ActorStabilityLimits
├─ models
└─ raise_on_breach
Transport (7 actors)
CoreTransport
FUSE.ActorCoreTransport
— MethodActorCoreTransport(dd::IMAS.dd, act::ParametersAllActors; kw...)
Provides a common interface to run multiple core transport actors
ActorCoreTransport
├─ model
└─ do_plot
EPEDprofiles
FUSE.ActorEPEDprofiles
— MethodActorEPEDprofiles(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.
ActorEPEDprofiles
├─ T_shaping
├─ ne_shaping
├─ T_ratio_pedestal
└─ T_ratio_core
FluxCalculator
FUSE.ActorFluxCalculator
— MethodActorFluxCalculator(dd::IMAS.dd, act::ParametersAllActors; kw...)
Provides a common interface to run multiple transport model actors
ActorFluxCalculator
├─ rho_transport
├─ turbulence_model
└─ neoclassical_model
FluxMatcher
FUSE.ActorFluxMatcher
— MethodActorFluxMatcher(dd::IMAS.dd, act::ParametersAllActors; kw...)
Evalutes the transport fluxes and source fluxes and minimizes the flux_match error
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.ActorNeoclassical
— MethodActorNeoclassical(dd::IMAS.dd, act::ParametersAllActors; kw...)
Evaluates the neoclassical transport fluxes
ActorNeoclassical
├─ model
└─ rho_transport
QLGYRO
FUSE.ActorQLGYRO
— MethodActorQLGYRO(dd::IMAS.dd, act::ParametersAllActors; kw...)
Evaluates the QLGYRO predicted turbulence
ActorQLGYRO
├─ model
├─ ky
├─ nky
├─ cpu_per_ky
├─ kygrid_model
├─ sat_rule
├─ n_field
├─ delta_t
├─ max_time
├─ rho_transport
└─ lump_ions
TGLF
FUSE.ActorTGLF
— MethodActorTGLF(dd::IMAS.dd, act::ParametersAllActors; kw...)
Evaluates the TGLF predicted turbulence
ActorTGLF
├─ model
├─ sat_rule
├─ electromagnetic
├─ tglfnn_model
├─ rho_transport
├─ warn_nn_train_bounds
├─ custom_input_files
└─ lump_ions
Wall loading (2 actors)
CoreRadHeatFlux
FUSE.ActorCoreRadHeatFlux
— MethodActorCoreRadHeatFlux(dd::IMAS.dd, act::ParametersAllActors; kw...)
Computes the heat flux on the wall due to the core radiation
ActorCoreRadHeatFlux
├─ N
├─ r [m]
├─ q [W m⁻²]
├─ levels
├─ merge_wall
├─ step [m]
└─ do_plot
ParticleHeatFlux
FUSE.ActorParticleHeatFlux
— MethodActorParticleHeatFlux(dd::IMAS.dd, act::ParametersAllActors; kw...)
Computes the heat flux on the wall due to the charged particles
ActorParticleHeatFlux
├─ r [m]
├─ q [W m⁻²]
├─ levels
├─ merge_wall
├─ step [m]
└─ do_plot