예제 #1
0
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)
예제 #2
0
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()