bfieldtools.coil_optimize.optimize_streamfunctions

bfieldtools.coil_optimize.optimize_streamfunctions(mesh_conductor, bfield_specification, objective='minimum_inductive_energy', solver=None, solver_opts={}, problem=None, DPP=False)

Quadratic optimization of coil stream function according to a specified objective.

Utilizes CVXPY and a numerical iterative solver.

Parameters:
mesh_conductor: MeshConductor object

Contains Trimesh mesh as well as physical properties, e.g. inductance

bfield_specification: list

List in which element is a dictionary containing a coil specification. See notes for specification syntax.

objective: string or dict

if string, either ‘minimum_inductive_energy’ or ‘minimum_ohmic_power’ if tuple, should contain: (a, b), where a and b are floats describing the inductive and resitive weighting factors. The resistance matrix is scaled according to the largest singular value of the inductance matrix for consistent behavior across meshes.

solver: string

string specifying which solver CVXPY will use

solver_opt: dict

dict containing solver options CVXPY will pass to the solver

problem: CVXPY problem object

If passed, will use already existing problem (MUST BE SAME DIMENSIONS) to skip canonicalization time. Requires DPP to be True.

DPP: Boolean

If True, use disciplined parametric programming, which has slower canonicalization, but the problem can be re-used for other data with the same dimensions.

Returns:
s: vector

Vector with length len(mesh_conductor.mesh.vertices), containing the optimized current density values at each mesh vertex

problem: CVXPY problem object

CVXPY problem object containing data, formulation, solution, metric etc

Notes

Each specification is a dict, which contains
  • coupling: Coupling matrix (N_r, N_verts, 3)

  • target: (N_r, 3)

  • abs_error: float or (N_r, 3)

  • rel_error: float or (N_r, 3)

Either abs_error, rel_error or both must be present.