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)
Пример #2
0
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()