added a notebook to verify the full symmetric phase masks and propagation. A comparison between ASM and FDTD is made. The comparison is ideal in the sense that phase masks are implemented assuming unitary transmission. Although not realistic in practice, it is good to compare the results obtained from the two methods. Next steps will require simulating the phase mask as a true metasurface made of nano-pillars.

This commit is contained in:
Edoardo Vergerio
2026-08-24 17:27:50 +02:00
parent 7a37ba4f0e
commit d928584554
12 changed files with 1505 additions and 7 deletions
+5 -5
View File
@@ -456,8 +456,8 @@ print("Input field integrated intensity: %.4e" % input_field_intensity)
#make a plot and save the input field #make a plot and save the input field
make_2Dplot_of(input_field_2d, choose_quantity="amplitude", save_name="input_field_amplitude", plot_zoom_x=zoom_x, plot_zoom_y=zoom_y) make_2Dplot_of(input_field_2d, choose_quantity="amplitude", save_name="input_field_amplitude", plot_zoom_x=zoom_x, plot_zoom_y=zoom_y)
make_2Dplot_of(input_field_2d, choose_quantity="phase", save_name="input_field_phase", plot_zoom_x=zoom_x, plot_zoom_y=zoom_y) make_2Dplot_of(input_field_2d, choose_quantity="phase", save_name="input_field_phase", plot_zoom_x=zoom_x, plot_zoom_y=zoom_y)
make_2Dplot_of(input_field_before_MS1.reshape((Nx, Ny)), choose_quantity="amplitude", save_name="input_field_before_MS1_amplitude", plot_zoom_x=full_view_x, plot_zoom_y=full_view_y) make_2Dplot_of(input_field_before_MS1.reshape((Nx, Ny)), choose_quantity="amplitude", save_name="input_field_before_MS1_amplitude", plot_zoom_x=zoom_x, plot_zoom_y=zoom_y)
make_2Dplot_of(input_field_before_MS1.reshape((Nx, Ny)), choose_quantity="phase", save_name="input_field_before_MS1_phase", plot_zoom_x=full_view_x, plot_zoom_y=full_view_y) make_2Dplot_of(input_field_before_MS1.reshape((Nx, Ny)), choose_quantity="phase", save_name="input_field_before_MS1_phase", plot_zoom_x=zoom_x, plot_zoom_y=zoom_y)
########################### ###########################
########################### ###########################
@@ -468,8 +468,8 @@ target_Efield_2d = fiber_mode_pattern / np.sqrt(np.sum(np.abs(fiber_mode_pattern
target_Efield = target_Efield_2d.flatten() #normalized target field (intensity = 1) target_Efield = target_Efield_2d.flatten() #normalized target field (intensity = 1)
# Plot: Target field # Plot: Target field
make_polarPlot_of(target_Efield_2d, choose_quantity="amplitude", save_name="target_field_1_amplitude_polar", plot_zoom_r=zoom_output_fiber_radius) make_2Dplot_of(target_Efield_2d, choose_quantity="amplitude", save_name="target_field_1_amplitude_polar", plot_zoom_x=zoom_x, plot_zoom_y=zoom_y)
make_polarPlot_of(target_Efield_2d, choose_quantity="phase", save_name="target_field_1_phase_polar", plot_zoom_r=zoom_output_fiber_radius) make_2Dplot_of(target_Efield_2d, choose_quantity="phase", save_name="target_field_1_phase_polar", plot_zoom_x=zoom_x, plot_zoom_y=zoom_y)
########################### ###########################
########################### ###########################
@@ -687,7 +687,7 @@ if __name__ == "__main__":
#save the output field for later use #save the output field for later use
save_output_field = True save_output_field = True
if save_output_field: if save_output_field:
np.save(f"{save_folder}/intermediate_field_0.npy", intermediate_fields[0].reshape((Nx, Ny))) np.save(f"{save_folder}/intermediate_field_1.npy", intermediate_fields[0].reshape((Nx, Ny)))
np.save(f"{save_folder}/optimized_output_field.npy", output_field.reshape((Nx, Ny))) np.save(f"{save_folder}/optimized_output_field.npy", output_field.reshape((Nx, Ny)))
# Plot results in individual PDF figures # Plot results in individual PDF figures
File diff suppressed because one or more lines are too long
+2 -2
View File
@@ -35,8 +35,8 @@ unit_cell_pitch = P
h = 0.9 #pillar height [um] h = 0.9 #pillar height [um]
#propgation distances #propgation distances
d0 = 535 #[um] d0 = 353 #[um]
d1 = 415 #[um] d1 = 218 #[um]
d2 = d0 #[um] d2 = d0 #[um]
Nx = 1025 #pixels per dimension Nx = 1025 #pixels per dimension