sphfield = sphtools.field(target_points, alm, blm, lmax) target_field = sphfield / np.max(sphfield[:, 0]) coil.plot_mesh(opacity=0.2) mlab.quiver3d(*target_points.T, *sphfield.T) target_spec = { "coupling": coil.B_coupling(target_points), "abs_error": 0.1, "target": target_field, } #%% # Run QP solver import mosek coil.s, prob = optimize_streamfunctions( coil, [target_spec], objective="minimum_inductive_energy", solver="MOSEK", solver_opts={"mosek_params": { mosek.iparam.num_threads: 8 }}, ) #%% # Plot coil windings and target points coil.s.discretize(N_contours=10).plot_loops()
"coupling": coil.B_coupling(stray_points), "abs_error": 0.01, "target": np.zeros((n_stray_points, 3)), } bfield_specification = [target_spec, stray_spec] #%% # Run QP solver import mosek coil.s, prob = optimize_streamfunctions( coil, [target_spec, stray_spec], objective=(0, 1), solver="MOSEK", solver_opts={"mosek_params": { mosek.iparam.num_threads: 8 }}, ) #%% # Plot coil windings and target points N_contours = 6 loops = scalar_contour(coil.mesh, coil.s.vert, N_contours=N_contours) if PLOT: f = mlab.figure(None, bgcolor=(1, 1, 1),
#%% # Specify spherical harmonic and calculate corresponding shielded field beta = np.zeros(Beta1.shape[0]) # beta[7] = 1 # Gradient beta[2] = 1 # Homogeneous # Minimum residual _lambda = 1e3 # Minimum energy # _lambda=1e-3 I1inner = np.linalg.solve(C.T @ C + M * ssmax / _lambda, C.T @ beta) I2inner = P @ I1inner coil.s = StreamFunction(I1inner, coil) shieldcoil.s = StreamFunction(I2inner, shieldcoil) #%% # Do a quick 3D plot f = mlab.figure(None, bgcolor=(1, 1, 1), fgcolor=(0.5, 0.5, 0.5), size=(800, 800)) coil.s.plot(figure=f, contours=20) shieldcoil.s.plot(figure=f, contours=20) #%% # Compute the field and scalar potential on an XY-plane
target_abs_error[:, 1:3] += 0.01 target_spec = { "coupling": coil.B_coupling(target_points), "rel_error": 0, "abs_error": target_abs_error, "target": target_field, } import mosek coil.s, coil.prob = optimize_streamfunctions( coil, [target_spec], objective="minimum_inductive_energy", solver="MOSEK", solver_opts={"mosek_params": { mosek.iparam.num_threads: 8 }}, ) #%% # Plot coil windings and target points loops = scalar_contour(coil.mesh, coil.s.vert, N_contours=10) f = mlab.figure(None, bgcolor=(1, 1, 1), fgcolor=(0.5, 0.5, 0.5), size=(800, 800)) mlab.clf()