def force_gmmt(): wavelengths = np.linspace(400 * nm, 1000 * nm, 100) eps = meep_ext.get_eps(material)(wavelengths) Au = miepy.data_material(wavelengths, eps) # Au = miepy.constant_material(3.5**2) # Au = miepy.materials.Au() particles = [] for i in range(9): orientation = miepy.quaternion.from_spherical_coords(theta[i], phi[i]) particles.append( miepy.cylinder(position=[x[i], y[i], z[i]], radius=radius, height=height, material=Au, orientation=orientation)) F = np.zeros([3, 9, len(wavelengths)], dtype=float) for i, wavelength in enumerate(pbar(wavelengths)): sol = miepy.cluster(particles=particles, source=miepy.sources.plane_wave([1, 0]), wavelength=wavelength, lmax=4) F[..., i] = sol.force() # if i == 0: # miepy.visualize(sol) return dict(wavelengths=wavelengths, force=F)
def vis(): fig, ax = plt.subplots() norm = job.load(norm_sim) scat = job.load(scat_sim) ax.plot((1 / nm) / norm.frequency, scat.scattering / norm.incident * norm.area, 'o', color='C0', label='scattering (FDTD)') ax.plot((1 / nm) / norm.frequency, scat.absorption / norm.incident * norm.area, 'o', color='C1', label='absorption (FDTD)') ax.plot((1 / nm) / norm.frequency, (scat.scattering + scat.absorption) / norm.incident * norm.area, 'o', color='C2', label='extinction (FDTD)') wavelengths = np.linspace(400 * nm, 1000 * nm, 100) eps = meep_ext.get_eps(material)(wavelengths) Au = miepy.data_material(wavelengths, eps) # Au = miepy.constant_material(3.5**2) C, A, E = [np.zeros_like(wavelengths) for i in range(3)] particles = [] for i in range(9): orientation = miepy.quaternion.from_spherical_coords(theta[i], phi[i]) particles.append( miepy.cylinder(position=[x[i], y[i], z[i]], radius=radius, height=height, material=Au, orientation=orientation)) for i, wavelength in enumerate(pbar(wavelengths)): sol = miepy.cluster(particles=particles, source=miepy.sources.plane_wave([1, 0]), wavelength=wavelength, lmax=3) C[i], A[i], E[i] = sol.cross_sections() ax.axhline(0, linestyle='--', color='black') ax.plot(wavelengths / nm, C, color='C0', label='scattering (GMT)') ax.plot(wavelengths / nm, A, color='C1', label='absorption (GMT)') ax.plot(wavelengths / nm, E, color='C2', label='extinction (GMT)') ax.legend() ax.set(xlabel='wavelength (nm)', ylabel='cross-section') plt.show()