コード例 #1
0
def sim(separation, monitor_size, unique_id):
    """perform scattering simulation"""
    monitor_size = np.asarray(monitor_size)
    cell_size = monitor_size + 2*pml_monitor_gap + 2*pml.thickness
    cell = meep.Vector3(*cell_size)

    p1 = meep.Vector3(-separation/2, 0, 0)
    p2 = meep.Vector3(separation/2, 0, 0)
    geometry = [meep.Sphere(center=p1,
                         radius=radius, 
                         material=gold),
                meep.Sphere(center=p2,
                         radius=radius, 
                         material=gold)]

    scat = meep.Simulation(cell_size=cell,
                        boundary_layers=[pml],
                        geometry=geometry,
                        default_material=medium,
                        resolution=resolution)
    scat.init_fields()
    source(scat)

    flux_box_absorb = meep_ext.add_flux_box(scat, fcen, 0, 1, [0,0,0], monitor_size)
    flux_box_scat   = meep_ext.add_flux_box(scat, fcen, 0, 1, [0,0,0], monitor_size)
    scat.load_minus_flux(norm_file_ext.format(unique_id), flux_box_scat)

    # scat.run(until_after_sources=8*um)
    scat.run(until_after_sources=meep.stop_when_fields_decayed(.5*um, polarization,
                pt=p2 - meep.Vector3(0,0,monitor_size[2]/2), decay_by=1e-4))

    return {'scattering': np.array(meep.get_fluxes(flux_box_scat)), 'absorption': -np.array(meep.get_fluxes(flux_box_absorb))}
コード例 #2
0
def scat_sim():
    """perform scattering simulation"""

    scat = meep.Simulation(cell_size=cell,
                           boundary_layers=[pml],
                           geometry=geometry,
                           default_material=medium,
                           resolution=resolution)
    scat.init_fields()
    source(scat)

    flux_box_absorb = meep_ext.add_flux_box(scat, fcen, df, nfreq, [0, 0, 0],
                                            monitor_size)
    flux_box_scat = meep_ext.add_flux_box(scat, fcen, df, nfreq, [0, 0, 0],
                                          monitor_size)
    scat.load_minus_flux(norm_file_ext, flux_box_scat)

    scat.run(until_after_sources=meep.stop_when_fields_decayed(
        .5 * um,
        decay,
        pt=meep.Vector3(0, 0, monitor_size[2] / 2),
        decay_by=1e-5))

    return {
        'scattering': np.array(meep.get_fluxes(flux_box_scat)),
        'absorption': -np.array(meep.get_fluxes(flux_box_absorb)),
        'frequency': np.array(meep.get_flux_freqs(flux_box_scat))
    }
コード例 #3
0
def norm_sim(monitor_size, unique_id):
    """perform normalization simulation with a given box size"""
    monitor_size = np.asarray(monitor_size)
    cell_size = monitor_size + 2 * pml_monitor_gap + 2 * pml.thickness
    cell = meep.Vector3(*cell_size)

    norm = meep.Simulation(cell_size=cell,
                           boundary_layers=[pml],
                           geometry=[],
                           resolution=resolution)
    norm.init_fields()
    source(norm)

    flux_inc = meep_ext.add_flux_plane(norm, fcen, 0, 1, [0, 0, 0],
                                       [2 * radius, 2 * radius, 0])
    flux_box_inc = meep_ext.add_flux_box(norm, fcen, 0, 1, [0, 0, 0],
                                         monitor_size)

    norm.run(until_after_sources=meep.stop_when_fields_decayed(
        .5 * um,
        meep.Ex,
        pt=meep.Vector3(0, 0, monitor_size[2] / 2),
        decay_by=1e-3))

    norm.save_flux(norm_file_ext.format(unique_id), flux_box_inc)

    return {
        'area': (2 * radius)**2,
        'norm': np.asarray(meep.get_fluxes(flux_inc))
    }
コード例 #4
0
def norm_sim():
    """perform normalization simulation"""
    norm = meep.Simulation(cell_size=cell,
                           boundary_layers=[pml],
                           geometry=[],
                           default_material=medium,
                           resolution=resolution)
    norm.init_fields()
    source(norm)

    flux_box_inc = meep_ext.add_flux_box(norm, fcen, df, nfreq, [0, 0, 0],
                                         monitor_size)
    flux_inc = meep_ext.add_flux_plane(norm, fcen, df, nfreq, [0, 0, 0],
                                       [box[0], box[1], 0])

    norm.run(until_after_sources=meep.stop_when_fields_decayed(
        .5 * um,
        decay,
        pt=meep.Vector3(0, 0, monitor_size[2] / 2),
        decay_by=1e-3))

    norm.save_flux(norm_file_ext, flux_box_inc)

    return {
        'frequency': np.array(meep.get_flux_freqs(flux_inc)),
        'area': box[0] * box[1],
        'incident': np.asarray(meep.get_fluxes(flux_inc))
    }