loops.plot_loops() B_target = loops.magnetic_field(target_points) mlab.quiver3d(*target_points.T, *B_target.T) #%% # Lets also do the same coil optimization using regularized least-squares. # Now we can't specify inequality constraints (e.g. use error margins in the specification). from bfieldtools.coil_optimize import optimize_lsq coil.s2 = optimize_lsq( coil, [target_spec, stray_spec], objective="minimum_ohmic_power", reg=1e6 ) #%% # Plot the optimized stream function, then discretize it and plot coil windings and the resultant magnetic field coil.s2.plot() loops2 = coil.s2.discretize(N_contours=10) loops2.plot_loops() B_target = loops2.magnetic_field(target_points) mlab.quiver3d(*target_points.T, *B_target.T)
coil.set_sph_options(sph_radius=1.4) target_spec = { "coupling": coil.sph_couplings[1], "abs_error": 0.01, "target": target_blms, } #%% # Run QP solver import mosek coil.s2, prob = optimize_streamfunctions( coil, [target_spec], objective="minimum_ohmic_power", solver="MOSEK", solver_opts={"mosek_params": { mosek.iparam.num_threads: 8 }}, ) #%% # Plot coil windings f2 = coil.plot_mesh(opacity=0.2) loops2 = coil.s2.discretize(N_contours=6) loops2.plot_loops(figure=f2)
secondary_C = shield.B_coupling(target_points) @ shield.coupling total_C = coil.B_coupling(target_points) + secondary_C target_spec_w_shield = { "coupling": total_C, "rel_error": 0, "abs_error": target_abs_error, "target": target_field, } coil.s2, coil.prob2 = optimize_streamfunctions( coil, [target_spec_w_shield], objective="minimum_inductive_energy", solver="MOSEK", solver_opts={"mosek_params": { mosek.iparam.num_threads: 8 }}, ) #%% # Plot the newly designed coil windings and field at the target points loops = scalar_contour(coil.mesh, coil.s2.vert, N_contours=10) f = mlab.figure(None, bgcolor=(1, 1, 1), fgcolor=(0.5, 0.5, 0.5), size=(800, 800)) mlab.clf()