bluemira.equilibria.run
Interface for building and loading equilibria and coilset designs
Classes
Abstract object for grouping of equilibria objects in a given state. |
|
Breakdown settings for PulsedCoilsetDesign |
|
Equilibrium settings for PulsedCoilsetDesign |
|
Position optimiser settings |
|
PulsedCoilsetDesign Parameters |
|
Abstract base class for the procedural design of a pulsed tokamak poloidal field |
|
Procedural design for a pulsed tokamak with a known, fixed PF coilset. |
|
Tool to adjust current bounds in sub-optimisation problems in accordance with |
|
Procedural design for a pulsed tokamak with no prescribed PF coil positions. |
Module Contents
- class bluemira.equilibria.run.Snapshot
Abstract object for grouping of equilibria objects in a given state.
- Parameters:
eq – The equilibrium at the snapshot
coilset – The coilset at the snapshot
opt_problem – The constraints at the snapshot
profiles – The profile at the snapshot
optimisation_result – The optimisation result
limiter – The limiter for the snapshot
tfcoil – The PF coil placement boundary
- coilset: bluemira.equilibria.coils.CoilSet
- constraints: bluemira.equilibria.optimisation.problem.CoilsetOptimisationProblem | None = None
- profiles: bluemira.equilibria.profiles.Profile | None = None
- optimisation_result: bluemira.equilibria.optimisation.problem.base.CoilsetOptimiserResult | None = None
- iterator: bluemira.equilibria.solve.PicardIterator | None = None
- limiter: bluemira.equilibria.limiter.Limiter | None = None
- tfcoil: bluemira.geometry.coordinates.Coordinates | None = None
- __post_init__()
Copy some variables on initialisation
- class bluemira.equilibria.run.BreakdownCOPConfig
Breakdown settings for PulsedCoilsetDesign
- problem: type[bluemira.equilibria.optimisation.problem.BreakdownCOP]
- strategy: type[bluemira.equilibria.optimisation.problem.BreakdownZoneStrategy]
- algorithm: bluemira.optimisation.AlgorithmType
- opt_conditions: dict[str, float | int]
- B_stray_con_tol: float = 1e-08
- n_B_stray_points: int = 20
- iter_max: int = 30
- make_opt_problem(breakdown, strategy, max_currents, constraints, B_stray_max)
Make breakdown optimisation problem
- Returns:
The breakdown problem
- class bluemira.equilibria.run.EQConfig
Equilibrium settings for PulsedCoilsetDesign
- convergence: bluemira.equilibria.solve.ConvergenceCriterion
- algorithm: bluemira.optimisation.AlgorithmType
- opt_conditions: dict[str, float | int]
- opt_parameters: dict[str, Any]
- coil_mesh_size: float = 0.3
- gamma: float = 1e-08
- relaxation: float = 0.1
- peak_PF_current_factor: float = 1.5
- diagnostic_plotting: bluemira.equilibria.diagnostics.PicardDiagnosticOptions
- o_point_fallback: bluemira.equilibria.profiles.OPointCalcOptions
- make_opt_problem(eq: bluemira.equilibria.equilibrium.Equilibrium, max_currents: numpy.typing.NDArray[numpy.float64], current_constraints: list[bluemira.equilibria.optimisation.constraints.UpdateableConstraint] | None, eq_constraints: list[bluemira.equilibria.optimisation.constraints.MagneticConstraint]) bluemira.equilibria.optimisation.problem.CoilsetOptimisationProblem
Make equilibria optimisation problem
- Returns:
The equilibria problem
- Raises:
EquilibriaError – Unimplemented setup for equilibria problem
- Parameters:
max_currents (numpy.typing.NDArray[numpy.float64])
current_constraints (list[bluemira.equilibria.optimisation.constraints.UpdateableConstraint] | None)
eq_constraints (list[bluemira.equilibria.optimisation.constraints.MagneticConstraint])
- Return type:
bluemira.equilibria.optimisation.problem.CoilsetOptimisationProblem
- class bluemira.equilibria.run.PositionConfig
Position optimiser settings
- problem: type[bluemira.equilibria.optimisation.problem.PulsedNestedPositionCOP]
- algorithm: bluemira.optimisation.AlgorithmType
- opt_conditions: dict[str, float | int]
- make_opt_problem(position_mapper, current_bounder, sub_opt_problems)
Make outer position optimisation problem
- Returns:
The position problem
- class bluemira.equilibria.run.PulsedCoilsetDesignFrame
Bases:
bluemira.base.parameter_frame.ParameterFramePulsedCoilsetDesign Parameters
- A: bluemira.base.parameter_frame.Parameter[float]
- B_premag_stray_max: bluemira.base.parameter_frame.Parameter[float]
- C_Ejima: bluemira.base.parameter_frame.Parameter[float]
- I_p: bluemira.base.parameter_frame.Parameter[float]
- l_i: bluemira.base.parameter_frame.Parameter[float]
- R_0: bluemira.base.parameter_frame.Parameter[float]
- tau_flattop: bluemira.base.parameter_frame.Parameter[float]
- tk_sol_ib: bluemira.base.parameter_frame.Parameter[float]
- v_burn: bluemira.base.parameter_frame.Parameter[float]
- class bluemira.equilibria.run.PulsedCoilsetDesign(params: bluemira.base.parameter_frame.ParameterFrame, coilset: bluemira.equilibria.coils.CoilSet, grid: bluemira.equilibria.grid.Grid, equilibrium_constraints: list[bluemira.equilibria.optimisation.constraints.MagneticConstraint], profiles: bluemira.equilibria.profiles.Profile, breakdown_settings: dict | BreakdownCOPConfig | None = None, equilibrium_settings: dict | EQConfig | None = None, current_opt_constraints: list[bluemira.equilibria.optimisation.constraints.UpdateableConstraint] | None = None, coil_constraints: list[bluemira.equilibria.optimisation.constraints.UpdateableConstraint] | None = None, limiter: bluemira.equilibria.limiter.Limiter | None = None)
Bases:
abc.ABCAbstract base class for the procedural design of a pulsed tokamak poloidal field coilset.
- Parameters:
params (bluemira.base.parameter_frame.ParameterFrame) – Parameter frame with which to perform the problem
coilset (bluemira.equilibria.coils.CoilSet) – PF coilset to use in the equilibrium design
grid (bluemira.equilibria.grid.Grid) – Grid to use in the equilibrium design
equilibrium_constraints (list[bluemira.equilibria.optimisation.constraints.MagneticConstraint]) – List of magnetic constraints to use for equilibria. Depending on the optimisation problem, these may be used in the objective function or constraints
profiles (bluemira.equilibria.profiles.Profile) – Plasma profile object to use when solving equilibria
breakdown_settings (dict | BreakdownCOPConfig | None) – Breakdown optimiser settings
equilibrium_settings (dict | EQConfig | None) – Settings for the solution of equilibria
current_opt_constraints (list[bluemira.equilibria.optimisation.constraints.UpdateableConstraint] | None) – List of current optimisation constraints for equilibria
coil_constraints (list[bluemira.equilibria.optimisation.constraints.UpdateableConstraint] | None) – List of coil current optimisation constraints for all snapshots (including breakdown)
limiter (bluemira.equilibria.limiter.Limiter | None) – Limiter to use when solving equilibria
- BREAKDOWN = 'Breakdown'
- EQ_REF = 'Reference'
- SOF = 'SOF'
- EOF = 'EOF'
- snapshots
- params
- coilset
- grid
- _current_opt_cons = None
- eq_constraints
- profiles
- property bd_config: BreakdownCOPConfig
Breakdown COP settings.
- Return type:
- _coil_cons = []
- limiter = None
- abstract optimise(*args, **kwargs) bluemira.equilibria.coils.CoilSet
Run pulsed coilset design optimisation.
- Return type:
bluemira.equilibria.coils.CoilSet
- take_snapshot(name: str, eq: bluemira.equilibria.equilibrium.MHDState, coilset: bluemira.equilibria.coils.CoilSet, problem: bluemira.equilibria.optimisation.problem.CoilsetOptimisationProblem, profiles: bluemira.equilibria.profiles.Profile | None = None, iterator: bluemira.equilibria.solve.PicardIterator | None = None)
Take a snapshot of the pulse.
- Parameters:
name (str)
coilset (bluemira.equilibria.coils.CoilSet)
problem (bluemira.equilibria.optimisation.problem.CoilsetOptimisationProblem)
profiles (bluemira.equilibria.profiles.Profile | None)
iterator (bluemira.equilibria.solve.PicardIterator | None)
- _get_psi_premag()
- run_premagnetisation(*, keep_history: bool = False, check_constraints: bool = False)
Run the breakdown optimisation problem.
- Raises:
EquilibriaError – Unable to relax breakdown for given coil sizes
- Parameters:
keep_history (bool)
check_constraints (bool)
- run_reference_equilibrium()
Run a reference equilibrium.
- calculate_sof_eof_fluxes(psi_premag: float | None = None) tuple[float, float]
Calculate the SOF and EOF plasma boundary fluxes.
- Returns:
SOF psi
EOF psi
- Parameters:
psi_premag (float | None)
- Return type:
tuple[float, float]
- _get_max_currents(coilset: bluemira.equilibria.coils.CoilSet) numpy.typing.NDArray[numpy.float64]
- Parameters:
coilset (bluemira.equilibria.coils.CoilSet)
- Return type:
numpy.typing.NDArray[numpy.float64]
- get_sof_eof_opt_problems(psi_sof: float, psi_eof: float) list[bluemira.equilibria.optimisation.problem.base.EqCoilsetOptimisationProblem]
- Returns:
Start of flat top and end of flat top optimisation problems.
- Parameters:
psi_sof (float)
psi_eof (float)
- Return type:
list[bluemira.equilibria.optimisation.problem.base.EqCoilsetOptimisationProblem]
- converge_equilibrium(eq: bluemira.equilibria.equilibrium.Equilibrium, problem: bluemira.equilibria.optimisation.problem.CoilsetOptimisationProblem)
Converge an equilibrium problem from a ‘frozen’ plasma optimised state.
- Returns:
The iterator
- Parameters:
problem (bluemira.equilibria.optimisation.problem.CoilsetOptimisationProblem)
- converge_and_snapshot(sub_opt_problems: collections.abc.Iterable[bluemira.equilibria.optimisation.problem.CoilsetOptimisationProblem], problem_names: collections.abc.Iterable[str] = (SOF, EOF))
Converge equilibrium optimisation problems and take snapshots.
- Parameters:
sub_opt_problems (collections.abc.Iterable[bluemira.equilibria.optimisation.problem.CoilsetOptimisationProblem])
problem_names (collections.abc.Iterable[str])
- plot()
Plot the pulsed equilibrium problem.
- Returns:
plot figure
- class bluemira.equilibria.run.FixedPulsedCoilsetDesign(params: bluemira.base.parameter_frame.ParameterFrame, coilset: bluemira.equilibria.coils.CoilSet, grid: bluemira.equilibria.grid.Grid, equilibrium_constraints: list[bluemira.equilibria.optimisation.constraints.MagneticConstraint], profiles: bluemira.equilibria.profiles.Profile, breakdown_settings: dict | BreakdownCOPConfig | None = None, equilibrium_settings: dict | EQConfig | None = None, current_opt_constraints: list[bluemira.equilibria.optimisation.constraints.UpdateableConstraint] | None = None, coil_constraints: list[bluemira.equilibria.optimisation.constraints.UpdateableConstraint] | None = None, limiter: bluemira.equilibria.limiter.Limiter | None = None)
Bases:
PulsedCoilsetDesignProcedural design for a pulsed tokamak with a known, fixed PF coilset.
- Parameters:
params (bluemira.base.parameter_frame.ParameterFrame)
coilset (bluemira.equilibria.coils.CoilSet)
equilibrium_constraints (list[bluemira.equilibria.optimisation.constraints.MagneticConstraint])
profiles (bluemira.equilibria.profiles.Profile)
breakdown_settings (dict | BreakdownCOPConfig | None)
equilibrium_settings (dict | EQConfig | None)
current_opt_constraints (list[bluemira.equilibria.optimisation.constraints.UpdateableConstraint] | None)
coil_constraints (list[bluemira.equilibria.optimisation.constraints.UpdateableConstraint] | None)
limiter (bluemira.equilibria.limiter.Limiter | None)
- optimise() bluemira.equilibria.coils.CoilSet
Run pulsed coilset design optimisation.
- Return type:
bluemira.equilibria.coils.CoilSet
- optimise_currents()
Optimise the coil currents at the start and end of the current flat-top.
- class bluemira.equilibria.run.MovingCurrentBoundStrategy(keep_out_zones: list[bluemira.geometry.face.BluemiraFace], pf_max_current: float, pf_current_density: float)
Tool to adjust current bounds in sub-optimisation problems in accordance with the KOZ and PF coil current density.
- Parameters:
keep_out_zones (list[bluemira.geometry.face.BluemiraFace])
pf_max_current (float)
pf_current_density (float)
- keep_out_zones
- pf_max_current
- pf_current_density
- get_max_currents(pos_map: dict[str, numpy.typing.NDArray[numpy.float64]], coil_names: list[str]) numpy.typing.NDArray[numpy.float64]
Get the maximum currents for the PF coils in accordance with the potential size and current density.
- Return type:
The vector of maximum currents
- Parameters:
pos_map (dict[str, numpy.typing.NDArray[numpy.float64]])
coil_names (list[str])
- class bluemira.equilibria.run.OptimisedPulsedCoilsetDesign(params: bluemira.base.parameter_frame.ParameterFrame, coilset: bluemira.equilibria.coils.CoilSet, position_mapper: bluemira.utilities.positioning.PositionMapper, grid: bluemira.equilibria.grid.Grid, equilibrium_constraints: list[bluemira.equilibria.optimisation.constraints.MagneticConstraint], profiles: bluemira.equilibria.profiles.Profile, breakdown_settings: dict | BreakdownCOPConfig | None = None, equilibrium_settings: dict | EQConfig | None = None, current_opt_constraints: list[bluemira.equilibria.optimisation.constraints.UpdateableConstraint] | None = None, coil_constraints: list[bluemira.equilibria.optimisation.constraints.UpdateableConstraint] | None = None, limiter: bluemira.equilibria.limiter.Limiter | None = None, current_bounder: MovingCurrentBoundStrategy | None = None, position_settings: dict | PositionConfig | None = None)
Bases:
PulsedCoilsetDesignProcedural design for a pulsed tokamak with no prescribed PF coil positions.
- Parameters:
params (bluemira.base.parameter_frame.ParameterFrame) – Parameter frame with which to perform the problem
coilset (bluemira.equilibria.coils.CoilSet) – PF coilset to use in the equilibrium design
position_mapper (bluemira.utilities.positioning.PositionMapper) – Normalised coil position mapping
grid (bluemira.equilibria.grid.Grid) – Grid to use in the equilibrium design
equilibrium_constraints (list[bluemira.equilibria.optimisation.constraints.MagneticConstraint]) – List of magnetic constraints to use for equilibria. Depending on the optimisation problem, these may be used in the objective function or constraints
profiles (bluemira.equilibria.profiles.Profile) – Plasma profile object to use when solving equilibria
breakdown_settings (dict | BreakdownCOPConfig | None) – Breakdown optimiser settings
equilibrium_settings (dict | EQConfig | None) – Settings for the solution of equilibria
current_opt_constraints (list[bluemira.equilibria.optimisation.constraints.UpdateableConstraint] | None) – List of current optimisation constraints for equilibria
coil_constraints (list[bluemira.equilibria.optimisation.constraints.UpdateableConstraint] | None) – List of coil current optimisation constraints for all snapshots (including breakdown)
limiter (bluemira.equilibria.limiter.Limiter | None) – Limiter to use when solving equilibria
current_bounder (MovingCurrentBoundStrategy | None)
position_settings (dict | PositionConfig | None)
- coilset
- position_mapper
- current_bounder = None
- property pos_config: PositionConfig
Position COP settings.
- Return type:
- _prepare_coilset(coilset: bluemira.equilibria.coils.CoilSet) bluemira.equilibria.coils.CoilSet
- Parameters:
coilset (bluemira.equilibria.coils.CoilSet)
- Return type:
bluemira.equilibria.coils.CoilSet
- optimise(*, verbose: bool = False, keep_history: bool = False, check_constraints: bool = False) bluemira.equilibria.coils.CoilSet
Optimise the coil positions for the start and end of the current flat-top.
- Parameters:
verbose (bool)
keep_history (bool)
check_constraints (bool)
- Return type:
bluemira.equilibria.coils.CoilSet
- _consolidate_coilset(coilset: bluemira.equilibria.coils.CoilSet, sub_opt_problems: collections.abc.Iterable[bluemira.equilibria.optimisation.problem.base.EqCoilsetOptimisationProblem]) bluemira.equilibria.coils.CoilSet
Set the current bounds on the current optimisation problems, fix coil sizes, and mesh.
- Parameters:
coilset (bluemira.equilibria.coils.CoilSet)
sub_opt_problems (collections.abc.Iterable[bluemira.equilibria.optimisation.problem.base.EqCoilsetOptimisationProblem])
- Return type:
bluemira.equilibria.coils.CoilSet