bluemira.equilibria.solve

Picard iteration procedures for equilibria (and their infinite variations)

Classes

DudsonConvergence

FreeGS convergence criterion

JrelConvergence

FreeGS convergence criterion

JeonConvergence

TES convergence criterion

CunninghamConvergence

FIESTA convergence criterion

JsourceConvergence

Plasma current source convergence criterion.

PicardIterator

A Picard iterative solver.

Module Contents

class bluemira.equilibria.solve.DudsonConvergence(limit: float = PSI_REL_TOL)

Bases: ConvergenceCriterion

Inheritance diagram of bluemira.equilibria.solve.DudsonConvergence

FreeGS convergence criterion

Parameters:

limit (float) – The limit at which the convergence criterion is met.

__call__(psi_old: numpy.typing.NDArray[numpy.float64], psi: numpy.typing.NDArray[numpy.float64], i: int, *, print_status: bool = True) bool

Carry out convergence check.

Parameters:
  • psi_old (numpy.typing.NDArray[numpy.float64]) – The value from the previous iteration.

  • psi (numpy.typing.NDArray[numpy.float64]) – The value from the current iteration.

  • i (int) – The index of the iteration.

  • print_status (bool) – If True then prints the status of the convergence, by default True.

Return type:

True if the convergence criterion is met, else False.

class bluemira.equilibria.solve.JrelConvergence(limit: float = 0.01)

Bases: ConvergenceCriterion

Inheritance diagram of bluemira.equilibria.solve.JrelConvergence

FreeGS convergence criterion

Parameters:

limit (float) – The limit at which the convergence criterion is met.

flag_psi = False
__call__(j_old: numpy.typing.NDArray[numpy.float64], j_new: numpy.typing.NDArray[numpy.float64], i: int, *, print_status: bool = True) bool

Carry out convergence check.

Parameters:
  • j_old (numpy.typing.NDArray[numpy.float64]) – The value from the previous iteration.

  • j_new (numpy.typing.NDArray[numpy.float64]) – The value from the current iteration.

  • i (int) – The index of the iteration.

  • print_status (bool) – If True then prints the status of the convergence, by default True.

Return type:

True if the convergence criterion is met, else False.

class bluemira.equilibria.solve.JeonConvergence(limit: float = 0.0001)

Bases: ConvergenceCriterion

Inheritance diagram of bluemira.equilibria.solve.JeonConvergence

TES convergence criterion

Parameters:

limit (float) – The limit at which the convergence criterion is met.

__call__(psi_old: numpy.typing.NDArray[numpy.float64], psi: numpy.typing.NDArray[numpy.float64], i: int, *, print_status: bool = True) bool

Carry out convergence check.

Parameters:
  • psi_old (numpy.typing.NDArray[numpy.float64]) – The value from the previous iteration.

  • psi (numpy.typing.NDArray[numpy.float64]) – The value from the current iteration.

  • i (int) – The index of the iteration.

  • print_status (bool) – If True then prints the status of the convergence, by default True.

Return type:

True if the convergence criterion is met, else False.

class bluemira.equilibria.solve.CunninghamConvergence(limit: float = 1e-07)

Bases: ConvergenceCriterion

Inheritance diagram of bluemira.equilibria.solve.CunninghamConvergence

FIESTA convergence criterion

Parameters:

limit (float) – The limit at which the convergence criterion is met.

flag_psi = False
__call__(j_old: numpy.typing.NDArray[numpy.float64], j_new: numpy.typing.NDArray[numpy.float64], i: int, *, print_status: bool = True) bool

Carry out convergence check.

Parameters:
  • j_old (numpy.typing.NDArray[numpy.float64]) – The value from the previous iteration.

  • j_new (numpy.typing.NDArray[numpy.float64]) – The value from the current iteration.

  • i (int) – The index of the iteration.

  • print_status (bool) – If True then prints the status of the convergence, by default True.

Return type:

True if the convergence criterion is met, else False.

class bluemira.equilibria.solve.JsourceConvergence(limit: float = 0.0001)

Bases: ConvergenceCriterion

Inheritance diagram of bluemira.equilibria.solve.JsourceConvergence

Plasma current source convergence criterion.

Parameters:

limit (float) – The limit at which the convergence criterion is met.

flag_psi = False
__call__(j_old: numpy.typing.NDArray[numpy.float64], j_new: numpy.typing.NDArray[numpy.float64], i: int, *, print_status: bool = True) bool

Carry out convergence check.

Parameters:
  • j_old (numpy.typing.NDArray[numpy.float64]) – The value from the previous iteration.

  • j_new (numpy.typing.NDArray[numpy.float64]) – The value from the current iteration.

  • i (int) – The index of the iteration.

  • print_status (bool) – If True then prints the status of the convergence, by default True.

Return type:

True if the convergence criterion is met, else False.

class bluemira.equilibria.solve.PicardIterator(eq: bluemira.equilibria.equilibrium.Equilibrium, optimisation_problem: bluemira.equilibria.optimisation.problem.CoilsetOptimisationProblem, diagnostic_plotting: bluemira.equilibria.diagnostics.PicardDiagnosticOptions | None = None, convergence: ConvergenceCriterion | None = None, *, fixed_coils: bool = False, relaxation: float = 0, maxiter: int = 30, keep_history: bool = False, check_constraints: bool = False)

A Picard iterative solver.

Child classes must provide a __call__ method which carries out the iteration process(es)

Parameters:
  • eq (bluemira.equilibria.equilibrium.Equilibrium) – The equilibrium to solve for

  • optimisation_problem (bluemira.equilibria.optimisation.problem.CoilsetOptimisationProblem) – The optimisation problem to use when iterating

  • convergence (ConvergenceCriterion | None) – The convergence criterion to use (defaults to Dudson)

  • fixed_coils (bool) – Whether or not the coil positions are fixed

  • relaxation (float) – The relaxation parameter to use between iterations

  • maxiter (int) – The maximum number of iterations

  • diagnostic_plotting (bluemira.equilibria.diagnostics.PicardDiagnosticOptions | None) – PicardDiagnosticOptions - dataclass containing plot type or not plot option, whether or not to make a GIF, the path where figures will be saved and the plot name.

  • keep_history (bool)

  • check_constraints (bool)

eq
coilset
opt_prob
fixed_coils = False
keep_history = False
check_constraints = False
relaxation = 0
maxiter = 30
diagnostic_plotting
i = 0
_optimise_coilset()
property psi: numpy.typing.NDArray[numpy.float64]

Get the magnetic flux array.

Return type:

numpy.typing.NDArray[numpy.float64]

property j_tor: numpy.typing.NDArray[numpy.float64]

Get the toroidal current density array.

Return type:

numpy.typing.NDArray[numpy.float64]

__call__() bluemira.equilibria.optimisation.problem.base.CoilsetOptimiserResult

The iteration object call handle.

Returns:

The result

Return type:

bluemira.equilibria.optimisation.problem.base.CoilsetOptimiserResult

__iter__() collections.abc.Iterator

Make the class a Python iterator.

Return type:

The current instance as an iterator.

__next__()

Perform an iteration of the solver.

Raises:

StopIteration – if converged

iterate_once() bluemira.equilibria.optimisation.problem.base.CoilsetOptimiserResult

Perform a single iteration and handle convergence.

Returns:

The result

Raises:

StopIteration – if converged

Return type:

bluemira.equilibria.optimisation.problem.base.CoilsetOptimiserResult

check_converged(*, print_status: bool = True) bool

Check if the iterator has converged.

Parameters:

print_status (bool) – If True then prints the status of the convergence, by default True.

Return type:

True if the convergence criterion is met, else False.

_solve()

Solve for this iteration.

_initial_optimise_coilset(**kwargs)
_setup()

Initialise psi and toroidal current values.

_teardown()

Final clean-up for consistency between psi and jtor.

In the case of converged equilibria, slight (artificial) improvement in consistency. In the case of unconverged equilibria, gives a more reasonable understanding of the final state.