Example #1
0
    def testGMRES(self):
        # Parameter input ----------------------------
        vacuum_wavelength = 550
        beam_polar_angle = np.pi * 7 / 8
        beam_azimuthal_angle = np.pi * 1 / 3
        beam_polarization = 0
        beam_amplitude = 1
        beam_neff_array = np.linspace(0, 2, 501, endpoint=False)
        beam_waist = 1000
        beam_focal_point = [200, 200, 200]
        #neff_waypoints = [0, 0.5, 0.8 - 0.01j, 2 - 0.01j, 2.5, 5]
        #neff_discr = 1e-2
        # --------------------------------------------

        #coord.set_default_k_parallel(vacuum_wavelength, neff_waypoints, neff_discr)

        # initialize particle object
        sphere1 = part.Sphere(position=[100, 100, 150], refractive_index=2.4 + 0.0j, radius=110, l_max=4, m_max=4)
        sphere2 = part.Sphere(position=[-100, -100, 250], refractive_index=1.9 + 0.0j, radius=120, l_max=3, m_max=3)
        sphere3 = part.Sphere(position=[-200, 100, 300], refractive_index=1.7 + 0.0j, radius=90, l_max=3, m_max=3)
        particle_list = [sphere1, sphere2, sphere3]

        # initialize layer system object
        lay_sys = lay.LayerSystem([0, 400, 0], [2, 1.4, 2])

        # initialize initial field object
        init_fld = init.GaussianBeam(vacuum_wavelength=vacuum_wavelength, polar_angle=beam_polar_angle,
                                     azimuthal_angle=beam_azimuthal_angle, polarization=beam_polarization,
                                     amplitude=beam_amplitude, reference_point=beam_focal_point, beam_waist=beam_waist,
                                     k_parallel_array=beam_neff_array * flds.angular_frequency(vacuum_wavelength))

        # initialize simulation object
        simulation_lu = simul.Simulation(layer_system=lay_sys, particle_list=particle_list, initial_field=init_fld,
                                         solver_type='LU', log_to_terminal='nose2' not in sys.modules.keys())  # suppress output if called by nose
        simulation_lu.run()
        coefficients_lu = particle_list[0].scattered_field.coefficients

        simulation_gmres = simul.Simulation(layer_system=lay_sys, particle_list=particle_list, initial_field=init_fld,
                                            solver_type='gmres', solver_tolerance=1e-5,
                                            log_to_terminal=(
                                                not sys.argv[0].endswith('nose2')))  # suppress output if called by nose
        simulation_gmres.run()
        coefficients_gmres = particle_list[0].scattered_field.coefficients

        np.testing.assert_allclose(np.linalg.norm(coefficients_lu), np.linalg.norm(coefficients_gmres), rtol=1e-5)
Example #2
0
# initialize particle object
part1 = part.Sphere(position=[100,100,150], refractive_index=2.4+0.0j, radius=120, l_max=lmax)
part2 = part.Sphere(position=[-100,-100,250], refractive_index=1.9+0.1j, radius=120, l_max=lmax)

# initialize layer system object
lay_sys1 = lay.LayerSystem([0, 400, 0], [1.5, 1.7, 1])
lay_sys2 = lay.LayerSystem([0, 200, 200, 0], [1.5, 1.7, 1.7, 1])

# initialize initial field object
plane_wave = init.PlaneWave(vacuum_wavelength=vacuum_wavelength, polar_angle=plane_wave_polar_angle,
                            azimuthal_angle=plane_wave_azimuthal_angle, polarization=plane_wave_polarization,
                            amplitude=plane_wave_amplitude, reference_point=[0, 0, 400])

# initialize simulation object
simulation1 = simul.Simulation(layer_system=lay_sys1, particle_list=[part1,part2], initial_field=plane_wave,
                               log_to_terminal=(not sys.argv[0].endswith('nose2')))  # suppress output if called by nose
simulation1.run()

simulation2 = simul.Simulation(layer_system=lay_sys2, particle_list=[part1,part2], initial_field=plane_wave,
                               log_to_terminal=(not sys.argv[0].endswith('nose2')))  # suppress output if called by nose
simulation2.run()

ff = farf.scattered_far_field(vacuum_wavelength=vacuum_wavelength, particle_list=simulation1.particle_list,
                            layer_system=simulation1.layer_system)


def test_equivalent_layer_systems():
    relerr = (np.linalg.norm(simulation1.linear_system.coupling_matrix.linear_operator.A
                             - simulation2.linear_system.coupling_matrix.linear_operator.A)
              / np.linalg.norm(simulation1.linear_system.coupling_matrix.linear_operator.A))
    print(relerr)
Example #3
0
particle_list = [sphere1, sphere2, sphere3]

# initialize layer system object
lay_sys = lay.LayerSystem([0, 400, 0], [2, 1.3, 2])

# initialize initial field object
init_fld = init.PlaneWave(vacuum_wavelength=vacuum_wavelength,
                          polar_angle=plane_wave_polar_angle,
                          azimuthal_angle=plane_wave_azimuthal_angle,
                          polarization=plane_wave_polarization,
                          amplitude=plane_wave_amplitude,
                          reference_point=[0, 0, 400])

# initialize simulation object
simulation = simul.Simulation(layer_system=lay_sys,
                              particle_list=particle_list,
                              initial_field=init_fld,
                              log_to_terminal=False)
simulation.run()

scs = sf.scattering_cross_section(initial_field=simulation.initial_field,
                                  particle_list=simulation.particle_list,
                                  layer_system=simulation.layer_system)

ecs = sf.extinction_cross_section(initial_field=simulation.initial_field,
                                  particle_list=simulation.particle_list,
                                  layer_system=simulation.layer_system)


def test_optical_theorem():
    relerr = abs((sum(scs.integral()) - ecs['top'] - ecs['bottom']) /
                 sum(scs.integral()))
Example #4
0
                       l_max=lmax)

four_particles = [sphere, cylinder, prolate, oblate]

# layer system
three_layers = lay.LayerSystem(thicknesses=[0, 500, 0],
                               refractive_indices=[1 + 6j, 2, 1.5])

# dipole source
dipole = init.DipoleSource(vacuum_wavelength=vacuum_wavelength,
                           dipole_moment=[1, 0, 0],
                           position=[0, 0, 250])

# run simulation
simulation = simul.Simulation(layer_system=three_layers,
                              particle_list=four_particles,
                              initial_field=dipole)
simulation.run()

# near field
scat_fld_exp = sf.scattered_field_piecewise_expansion(vacuum_wavelength,
                                                      four_particles,
                                                      three_layers)

# field along probing line ----------------------------------------------------
x_line = np.arange(-1500, 1501, 10)
y_line = x_line - x_line
z_line = y_line + 750
e_scat = scat_fld_exp.electric_field(x=x_line, y=y_line, z=z_line)

e_init = simulation.initial_field.electric_field(x=x_line,
Example #5
0
                           polar_angle=0,
                           azimuthal_angle=0,
                           polarization=0,
                           amplitude=1,
                           reference_point=rD)
planewave2 = init.PlaneWave(vacuum_wavelength=ld,
                            polar_angle=polar_angle,
                            azimuthal_angle=azimuthal_angle,
                            polarization=0,
                            amplitude=1,
                            reference_point=rD2)

# run simulation
simulation = simul.Simulation(
    layer_system=lay_sys,
    particle_list=part_list,
    initial_field=planewave,
    log_to_terminal=(not sys.argv[0].endswith('nose2')
                     ))  # suppress output if called by nose
simulation2 = simul.Simulation(
    layer_system=lay_sys,
    particle_list=part_list2,
    initial_field=planewave2,
    log_to_terminal=(not sys.argv[0].endswith('nose2')
                     ))  # suppress output if called by nose
simulation.run()
simulation2.run()
scattered_ff = scf.scattered_far_field(ld, simulation.particle_list,
                                       simulation.layer_system)
scattered_ff_2 = scf.scattered_far_field(ld, simulation2.particle_list,
                                         simulation2.layer_system)
# initialize layer system objects
lay_sys_air = lay.LayerSystem([0, 0], [n_air, n_air])
lay_sys_water = lay.LayerSystem([0, 0], [n_water, n_water])

# initialize initial field object
init_fld = init.PlaneWave(vacuum_wavelength=vacuum_wavelength,
                          polar_angle=0,
                          azimuthal_angle=0,
                          polarization=0,
                          amplitude=1,
                          reference_point=[0, 0, 0])

# simulation of dielectric sphere
simulation_diel = sim.Simulation(
    layer_system=lay_sys_air,
    particle_list=[diel_sphere],
    initial_field=init_fld,
    log_to_terminal=(not sys.argv[0].endswith('nose2')))

simulation_diel.run()

intfld_diel = ifld.internal_field_piecewise_expansion(
    vacuum_wavelength=vacuum_wavelength,
    particle_list=[diel_sphere],
    layer_system=lay_sys_air)
E_diel = np.array(intfld_diel.electric_field(x, y, z))

# simulation of metallic sphere
simulation_metal = sim.Simulation(
    layer_system=lay_sys_water,
    particle_list=[metal_sphere],
Example #7
0
w12 = direct_coupling_block(vacuum_wavelength, sphere1, sphere2, lay_sys)

phi13 = np.arctan2(sphere1.position[1] - sphere3.position[1], sphere1.position[0] - sphere3.position[0])
rho13 = np.sqrt(sum([(sphere1.position[i]-sphere3.position[i])**2 for i in range(3)])) 
sz13 = sphere1.position[2] + sphere3.position[2]
dz13 = sphere1.position[2] - sphere3.position[2]
wr13 = layer_mediated_coupling_block(vacuum_wavelength, sphere1, sphere3, lay_sys)
w13 = direct_coupling_block(vacuum_wavelength, sphere1, sphere3, lay_sys)
 
# initialize initial field object
init_fld = init.PlaneWave(vacuum_wavelength=vacuum_wavelength, polar_angle=polar_angle,azimuthal_angle=azimuthal_angle, 
                          polarization=polarization, amplitude=amplitude)

# initialize simulation object
simulation_direct = simul.Simulation(layer_system=lay_sys, particle_list=particle_list, initial_field=init_fld,
                                     solver_type='LU', store_coupling_matrix=True,
                                     log_to_terminal=(not sys.argv[0].endswith('nose2')))  # suppress output if called by nose

simulation_direct.run()
coefficients_direct = particle_list[0].scattered_field.coefficients

cu.enable_gpu()
simulation_lookup_linear_gpu = simul.Simulation(layer_system=lay_sys, particle_list=particle_list, 
                                                initial_field=init_fld, solver_type='gmres', store_coupling_matrix=False,
                                                coupling_matrix_lookup_resolution=lookup_resol, 
                                                coupling_matrix_interpolator_kind='linear',
                                                log_to_terminal=(not sys.argv[0].endswith('nose2')))  # suppress output if called by nose
simulation_lookup_linear_gpu.run()
coefficients_lookup_linear_gpu = particle_list[0].scattered_field.coefficients

simulation_lookup_cubic_gpu = simul.Simulation(layer_system=lay_sys, particle_list=particle_list, 
Example #8
0
# initialize layer system object
lay_sys = lay.LayerSystem(
    [0, 0], [substrate_refractive_index, surrounding_medium_refractive_index])

# initialize initial field object
init_fld = init.PlaneWave(vacuum_wavelength=vacuum_wavelength,
                          polar_angle=plane_wave_polar_angle,
                          azimuthal_angle=plane_wave_azimuthal_angle,
                          polarization=plane_wave_polarization,
                          amplitude=plane_wave_amplitude,
                          reference_point=[0, 0, 0])

# simulation
simulation = sim.Simulation(layer_system=lay_sys,
                            particle_list=particle_list,
                            initial_field=init_fld)

simulation.run()


def test_versus_prototype():
    b0 = -0.2586209 + 0.8111274j
    assert abs(
        (particle_list[0].scattered_field.coefficients[0] - b0) / b0) < 1e-4
    b10 = -1.5103858e-04 - 4.1782795e-04j
    assert abs(
        (particle_list[0].scattered_field.coefficients[10] - b10) / b10) < 1e-4
    b21 = -0.0795316 + 0.0194518j
    assert abs(
        (particle_list[0].scattered_field.coefficients[21] - b21) / b21) < 1e-4
planewave = init.PlaneWave(vacuum_wavelength=ld,
                           polar_angle=0,
                           azimuthal_angle=0,
                           polarization=0,
                           amplitude=1,
                           reference_point=rD)
planewave2 = init.PlaneWave(vacuum_wavelength=ld,
                            polar_angle=polar_angle,
                            azimuthal_angle=azimuthal_angle,
                            polarization=0,
                            amplitude=1,
                            reference_point=rD2)

# run simulation
simulation = simul.Simulation(layer_system=lay_sys,
                              particle_list=part_list,
                              initial_field=planewave)
simulation2 = simul.Simulation(layer_system=lay_sys,
                               particle_list=part_list2,
                               initial_field=planewave2)
simulation.run()
simulation2.run()
scattered_ff = scf.scattered_far_field(ld, simulation.particle_list,
                                       simulation.layer_system)
scattered_ff_2 = scf.scattered_far_field(ld, simulation2.particle_list,
                                         simulation2.layer_system)


def test_t_matrix_rotation():
    err = (sum(scattered_ff.integral()) -
           sum(scattered_ff_2.integral())) / sum(scattered_ff.integral())
# initialize layer system object
lay_sys = lay.LayerSystem([0, 400, 0], [2, 1.3, 2])

# initialize dipole object
dipole = init.DipoleSource(vacuum_wavelength=ld,
                           dipole_moment=D,
                           position=rD,
                           k_parallel_array=k_parallel_array)

# run simulation
simulation = simul.Simulation(
    layer_system=lay_sys,
    particle_list=part_list,
    initial_field=dipole,
    log_to_terminal=(not sys.argv[0].endswith('nose2')
                     ),  # suppress output if called by nose
    neff_waypoints=waypoints,
    neff_resolution=neff_discr,
    k_parallel=k_parallel_array)

simulation.set_default_contours()

simulation.run()

power_hom = dipole.dissipated_power_homogeneous_background(
    layer_system=simulation.layer_system)
power = dipole.dissipated_power(particle_list=simulation.particle_list,
                                layer_system=simulation.layer_system)
power2 = dipole.dissipated_power_alternative(
    particle_list=simulation.particle_list,
Example #11
0
    def testElectricField(self):
        try:
            import pycuda.autoinit
        except ImportError:
            self.skipTest('PyCUDA is not available')

        ld = 550
        rD = [100, -100, 100]
        D = [1e7, 2e7, 3e7]
        #waypoints = [0, 0.8, 0.8 - 0.1j, 2.1 - 0.1j, 2.1, 4]
        #neff_discr = 2e-2

        #coord.set_default_k_parallel(vacuum_wavelength=ld, neff_waypoints=waypoints, neff_resolution=neff_discr)

        # initialize particle object
        sphere1 = part.Sphere(position=[200, 200, 300],
                              refractive_index=2.4 + 0.0j,
                              radius=110,
                              l_max=3,
                              m_max=3)
        sphere2 = part.Sphere(position=[-200, -200, 300],
                              refractive_index=2.4 + 0.0j,
                              radius=120,
                              l_max=3,
                              m_max=3)
        sphere3 = part.Sphere(position=[-200, 200, 300],
                              refractive_index=2.5 + 0.0j,
                              radius=90,
                              l_max=3,
                              m_max=3)
        part_list = [sphere1, sphere2, sphere3]

        # initialize layer system object
        lay_sys = lay.LayerSystem([0, 400, 0], [1 + 6j, 2.3, 1.5])

        # initialize dipole object
        dipole = init.DipoleSource(vacuum_wavelength=ld,
                                   dipole_moment=D,
                                   position=rD)

        # run simulation
        simulation = simul.Simulation(
            layer_system=lay_sys,
            particle_list=part_list,
            initial_field=dipole,
            log_to_terminal='nose2'
            not in sys.modules.keys())  # suppress output if called by nose
        simulation.run()

        xarr = np.array([-300, 400, -100, 200])
        yarr = np.array([200, -100, 400, 300])
        zarr = np.array([-50, 200, 600, 700])

        scat_fld_exp = sf.scattered_field_piecewise_expansion(
            ld, part_list, lay_sys)
        e_x_scat_cpu, e_y_scat_cpu, e_z_scat_cpu = scat_fld_exp.electric_field(
            xarr, yarr, zarr)
        e_x_init_cpu, e_y_init_cpu, e_z_init_cpu = simulation.initial_field.electric_field(
            xarr, yarr, zarr, lay_sys)

        cu.enable_gpu()
        scat_fld_exp = sf.scattered_field_piecewise_expansion(
            ld, part_list, lay_sys)
        e_x_scat_gpu, e_y_scat_gpu, e_z_scat_gpu = scat_fld_exp.electric_field(
            xarr, yarr, zarr)
        e_x_init_gpu, e_y_init_gpu, e_z_init_gpu = simulation.initial_field.electric_field(
            xarr, yarr, zarr, lay_sys)

        np.testing.assert_allclose(np.linalg.norm(e_x_scat_cpu),
                                   np.linalg.norm(e_x_scat_gpu),
                                   rtol=1e-5)
        np.testing.assert_allclose(np.linalg.norm(e_y_scat_cpu),
                                   np.linalg.norm(e_y_scat_gpu),
                                   rtol=1e-5)
        np.testing.assert_allclose(np.linalg.norm(e_z_scat_cpu),
                                   np.linalg.norm(e_z_scat_gpu),
                                   rtol=1e-5)
        np.testing.assert_allclose(np.linalg.norm(e_x_init_cpu),
                                   np.linalg.norm(e_x_init_gpu),
                                   rtol=1e-5)
        np.testing.assert_allclose(np.linalg.norm(e_y_init_cpu),
                                   np.linalg.norm(e_y_init_gpu),
                                   rtol=1e-5)
        np.testing.assert_allclose(np.linalg.norm(e_z_init_cpu),
                                   np.linalg.norm(e_z_init_gpu),
                                   rtol=1e-5)
Example #12
0
dipole3 = init.DipoleSource(vacuum_wavelength=ld,
                            dipole_moment=D3,
                            position=rD3)

dipole_collection = init.DipoleCollection(
    vacuum_wavelength=ld,
    compute_swe_by_pwe=False,
    compute_dissipated_power_by_pwe=False)
dipole_collection.append(dipole1)
dipole_collection.append(dipole2)
dipole_collection.append(dipole3)

# run simulation
simulation = simul.Simulation(layer_system=lay_sys,
                              particle_list=part_list,
                              initial_field=dipole_collection,
                              log_to_terminal=False)

simulation.run()

# evaluate power
power_list = simulation.initial_field.dissipated_power(
    particle_list=simulation.particle_list,
    layer_system=simulation.layer_system)

power = sum(power_list)
ff_tup = sf.total_far_field(simulation.initial_field, simulation.particle_list,
                            simulation.layer_system)


def test_energy_conservation():
Example #13
0
sphere1 = part.Sphere(position=[100, 100, 150], refractive_index=2.4 + 0.0j, radius=110, l_max=4, m_max=4)
sphere2 = part.Sphere(position=[-100, -100, 250], refractive_index=1.9 + 0.0j, radius=120, l_max=3, m_max=3)
sphere3 = part.Sphere(position=[-200, 100, 300], refractive_index=1.7 + 0.0j, radius=90, l_max=3, m_max=3)
particle_list = [sphere1, sphere2, sphere3]

# initialize layer system object
lay_sys = lay.LayerSystem([0, 400, 0], [2, 1.4, 2])

# initialize initial field object
init_fld = init.GaussianBeam(vacuum_wavelength=vacuum_wavelength, polar_angle=beam_polar_angle,
                             azimuthal_angle=beam_azimuthal_angle, polarization=beam_polarization,
                             amplitude=beam_amplitude, reference_point=beam_focal_point, beam_waist=beam_waist,
                             k_parallel_array=beam_neff_array*coord.angular_frequency(vacuum_wavelength))

# initialize simulation object
simulation_lu = simul.Simulation(layer_system=lay_sys, particle_list=particle_list, initial_field=init_fld,
                                 solver_type='LU')
simulation_lu.run()
coefficients_lu = particle_list[0].scattered_field.coefficients

simulation_gmres = simul.Simulation(layer_system=lay_sys, particle_list=particle_list, initial_field=init_fld,
                                    solver_type='gmres', solver_tolerance=1e-5)
simulation_gmres.run()
coefficients_gmres = particle_list[0].scattered_field.coefficients

def test_result():
    relerr = np.linalg.norm(coefficients_lu - coefficients_gmres) / np.linalg.norm(coefficients_lu)
    print('relative error: ', relerr)
    assert  relerr < 1e-5
    
if __name__ == '__main__':
    test_result()
Example #14
0
spheroid2 = part.Spheroid(position=[0, 0, 200], polar_angle=polar_angle, azimuthal_angle=azimuthal_angle, 
                          refractive_index=2.4, semi_axis_c=100, semi_axis_a=50, l_max=8, m_max=8)
part_list = [spheroid1]
part_list2 = [spheroid2]

# initialize layer system object
lay_sys = lay.LayerSystem([0, 800, 0], [1, 1, 1])

# initialize plane wave objects
planewave = init.PlaneWave(vacuum_wavelength=ld, polar_angle=0, azimuthal_angle=0, polarization=0, amplitude=1,
                           reference_point=rD)
planewave2 = init.PlaneWave(vacuum_wavelength=ld, polar_angle=polar_angle, azimuthal_angle=azimuthal_angle, 
                            polarization=0, amplitude=1, reference_point=rD2)

# run simulation
simulation = simul.Simulation(layer_system=lay_sys, particle_list=part_list, initial_field=planewave, log_to_terminal=False)
simulation2 = simul.Simulation(layer_system=lay_sys, particle_list=part_list2, initial_field=planewave2, log_to_terminal=False)
simulation.run()
simulation2.run()
scattered_ff = scf.scattered_far_field(ld, simulation.particle_list, simulation.layer_system)
scattered_ff_2 = scf.scattered_far_field(ld, simulation2.particle_list, simulation2.layer_system)


def test_t_matrix_rotation():
    err = (sum(scattered_ff.integral()) - sum(scattered_ff_2.integral())) / sum(scattered_ff.integral())
    print('error t_matrix_rotation', err)
    assert err < 1e-4


if __name__ == '__main__':
    test_rotation()
# initialize initial field object
init_fld = init.GaussianBeam(vacuum_wavelength=vacuum_wavelength,
                             polar_angle=beam_polar_angle,
                             azimuthal_angle=beam_azimuthal_angle,
                             polarization=beam_polarization,
                             amplitude=beam_amplitude,
                             reference_point=beam_focal_point,
                             beam_waist=beam_waist,
                             k_parallel_array=beam_neff_array *
                             coord.angular_frequency(vacuum_wavelength))

# initialize simulation object
simulation_direct = simul.Simulation(layer_system=lay_sys,
                                     particle_list=particle_list,
                                     initial_field=init_fld,
                                     solver_type='LU',
                                     store_coupling_matrix=True,
                                     log_to_terminal=False)
simulation_direct.run()
coefficients_direct = particle_list[0].scattered_field.coefficients

cu.enable_gpu()
simulation_lookup_linear_gpu = simul.Simulation(
    layer_system=lay_sys,
    particle_list=particle_list,
    initial_field=init_fld,
    solver_type='gmres',
    store_coupling_matrix=False,
    coupling_matrix_lookup_resolution=lookup_resol,
    coupling_matrix_interpolator_kind='linear',
    log_to_terminal=False)
Example #16
0
dipole3 = init.DipoleSource(vacuum_wavelength=ld,
                            dipole_moment=D3,
                            position=rD3)

dipole_collection = init.DipoleCollection(
    vacuum_wavelength=ld,
    compute_swe_by_pwe=False,
    compute_dissipated_power_by_pwe=False)
dipole_collection.append(dipole1)
dipole_collection.append(dipole2)
dipole_collection.append(dipole3)

# run simulation
simulation = simul.Simulation(
    layer_system=lay_sys,
    particle_list=part_list,
    initial_field=dipole_collection,
    log_to_terminal=(not sys.argv[0].endswith('nose2')
                     ))  # suppress output if called by nose

simulation.run()

# evaluate power
power_list = simulation.initial_field.dissipated_power(
    particle_list=simulation.particle_list,
    layer_system=simulation.layer_system)

power = sum(power_list)
ff_tup = farf.total_far_field(simulation.initial_field,
                              simulation.particle_list,
                              simulation.layer_system)
lay_sys = lay.LayerSystem(
    [0, 0], [substrate_refractive_index, surrounding_medium_refractive_index])

# initialize initial field object
init_fld = init.PlaneWave(vacuum_wavelength=vacuum_wavelength,
                          polar_angle=plane_wave_polar_angle,
                          azimuthal_angle=plane_wave_azimuthal_angle,
                          polarization=plane_wave_polarization,
                          amplitude=plane_wave_amplitude,
                          reference_point=[0, 0, 0])

# simulation
simulation = sim.Simulation(
    layer_system=lay_sys,
    particle_list=particle_list,
    initial_field=init_fld,
    log_to_terminal=(not sys.argv[0].endswith('nose2')
                     ),  # suppress output if called by nose
    neff_waypoints=neff_waypoints,
    neff_resolution=neff_discr)

simulation.run()


def test_versus_prototype():
    b0 = -0.2586209 + 0.8111274j
    assert abs(
        (particle_list[0].scattered_field.coefficients[0] - b0) / b0) < 1e-4
    b10 = -1.5103858e-04 - 4.1782795e-04j
    assert abs(
        (particle_list[0].scattered_field.coefficients[10] - b10) / b10) < 1e-4
    b21 = -0.0795316 + 0.0194518j
Example #18
0
nS = 1.5
RS = 100
# --------------------------------------------

coord.set_default_k_parallel(vacuum_wavelength=ld,
                             neff_waypoints=waypoints,
                             neff_resolution=neff_discr)
dipole = init.DipoleSource(vacuum_wavelength=ld, dipole_moment=D, position=rD)
laysys = lay.LayerSystem(thicknesses=thick, refractive_indices=n)
particle = smuthi.particles.Sphere(position=rS,
                                   l_max=3,
                                   m_max=3,
                                   refractive_index=nS,
                                   radius=RS)
simulation = simul.Simulation(layer_system=laysys,
                              particle_list=[particle],
                              initial_field=dipole,
                              log_to_terminal=False)

aI = dipole.spherical_wave_expansion(particle, laysys)


def test_SWE_coefficients_against_prototype():
    aI0 = -0.042563330382109 - 1.073039889335632j
    err0 = abs((aI.coefficients[0] - aI0) / aI0)

    aI10 = 0.496704638004303 + 0.908744692802429j
    err10 = abs((aI.coefficients[10] - aI10) / aI10)

    aI20 = 1.209331750869751 - 2.165398836135864j
    err20 = abs((aI.coefficients[20] - aI20) / aI20)
# initialize layer system object
lay_sys1 = lay.LayerSystem([0, 400, 0], [1.5, 1.7, 1])
lay_sys2 = lay.LayerSystem([0, 200, 200, 0], [1.5, 1.7, 1.7, 1])

# initialize initial field object
plane_wave = init.PlaneWave(vacuum_wavelength=vacuum_wavelength,
                            polar_angle=plane_wave_polar_angle,
                            azimuthal_angle=plane_wave_azimuthal_angle,
                            polarization=plane_wave_polarization,
                            amplitude=plane_wave_amplitude,
                            reference_point=[0, 0, 400])

# initialize simulation object
simulation1 = simul.Simulation(layer_system=lay_sys1,
                               particle_list=[part1, part2],
                               initial_field=plane_wave)
simulation1.run()

simulation2 = simul.Simulation(layer_system=lay_sys2,
                               particle_list=[part1, part2],
                               initial_field=plane_wave)
simulation2.run()

ff = sf.scattered_far_field(vacuum_wavelength=vacuum_wavelength,
                            particle_list=simulation1.particle_list,
                            layer_system=simulation1.layer_system)


def test_equivalent_layer_systems():
    relerr = (np.linalg.norm(
nS = 1.5
RS = 100
# --------------------------------------------

coord.set_default_k_parallel(vacuum_wavelength=ld,
                             neff_waypoints=waypoints,
                             neff_resolution=neff_discr)
dipole = init.DipoleSource(vacuum_wavelength=ld, dipole_moment=D, position=rD)
laysys = lay.LayerSystem(thicknesses=thick, refractive_indices=n)
particle = smuthi.particles.Sphere(position=rS,
                                   l_max=3,
                                   m_max=3,
                                   refractive_index=nS,
                                   radius=RS)
simulation = simul.Simulation(layer_system=laysys,
                              particle_list=[particle],
                              initial_field=dipole)

aI = dipole.spherical_wave_expansion(particle, laysys)


def test_SWE_coefficients_against_prototype():
    aI0 = -0.042563330382109 - 1.073039889335632j
    err0 = abs((aI.coefficients[0] - aI0) / aI0)

    aI10 = 0.496704638004303 + 0.908744692802429j
    err10 = abs((aI.coefficients[10] - aI10) / aI10)

    aI20 = 1.209331750869751 - 2.165398836135864j
    err20 = abs((aI.coefficients[20] - aI20) / aI20)
Example #21
0
# initialize particle object
part1 = part.Sphere(position=[100,100,150], refractive_index=2.4+0.0j, radius=120, l_max=lmax)
part2 = part.Sphere(position=[-100,-100,250], refractive_index=1.9+0.1j, radius=120, l_max=lmax)

# initialize layer system object
lay_sys1 = lay.LayerSystem([0, 400, 0], [1.5, 1.7, 1])
lay_sys2 = lay.LayerSystem([0, 200, 200, 0], [1.5, 1.7, 1.7, 1])

# initialize initial field object
plane_wave = init.PlaneWave(vacuum_wavelength=vacuum_wavelength, polar_angle=plane_wave_polar_angle,
                            azimuthal_angle=plane_wave_azimuthal_angle, polarization=plane_wave_polarization,
                            amplitude=plane_wave_amplitude, reference_point=[0, 0, 400])

# initialize simulation object
simulation1 = simul.Simulation(layer_system=lay_sys1, particle_list=[part1,part2], initial_field=plane_wave, log_to_terminal=False)
simulation1.run()

simulation2 = simul.Simulation(layer_system=lay_sys2, particle_list=[part1,part2], initial_field=plane_wave, log_to_terminal=False)
simulation2.run()

ff = sf.scattered_far_field(vacuum_wavelength=vacuum_wavelength, particle_list=simulation1.particle_list,
                            layer_system=simulation1.layer_system)


def test_equivalent_layer_systems():
    relerr = (np.linalg.norm(simulation1.linear_system.coupling_matrix.linear_operator.A
                             - simulation2.linear_system.coupling_matrix.linear_operator.A)
              / np.linalg.norm(simulation1.linear_system.coupling_matrix.linear_operator.A))
    print(relerr)
    assert relerr < 1e-3