bluemira.equilibria.solve
Picard iteration procedures for equilibria (and their infinite variations)
Classes
FreeGS convergence criterion |
|
FreeGS convergence criterion |
|
TES convergence criterion |
|
FIESTA convergence criterion |
|
Plasma current source convergence criterion. |
|
A Picard iterative solver. |
Module Contents
- class bluemira.equilibria.solve.DudsonConvergence(limit: float = PSI_REL_TOL)
Bases:
ConvergenceCriterionFreeGS 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:
ConvergenceCriterionFreeGS 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:
ConvergenceCriterionTES 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:
ConvergenceCriterionFIESTA 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:
ConvergenceCriterionPlasma 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.