modified update function to include variables that were previously not included but that should also be updated at every distance change.

This commit is contained in:
2026-07-29 16:29:00 +02:00
parent 41c02ad0b0
commit 361af92eed
+19 -10
View File
@@ -25,6 +25,7 @@ from smt.design_space import (
DesignSpace, DesignSpace,
) )
############################## ##############################
#physics and simulation domain #physics and simulation domain
wavelength = 1.55e-6 wavelength = 1.55e-6
@@ -80,6 +81,15 @@ fft_operator = pyfftw.FFTW(fft_input_array, fft_output_array, axes=(0,1), direct
ifft_operator = pyfftw.FFTW(ifft_input_array, ifft_output_array, axes=(0,1), direction='FFTW_BACKWARD', threads=n_cpu, flags=('FFTW_MEASURE','FFTW_DESTROY_INPUT',)) ifft_operator = pyfftw.FFTW(ifft_input_array, ifft_output_array, axes=(0,1), direction='FFTW_BACKWARD', threads=n_cpu, flags=('FFTW_MEASURE','FFTW_DESTROY_INPUT',))
############################## ##############################
##############################
#Plot zoom parameters [um]
zoom_x = 60
zoom_y = 60
zoom_core_diameter = 2 * 6
full_view_x = size_x * 1e6 / 2
full_view_y = size_y * 1e6 / 2
##############################
############################## ##############################
#setting up spatial frequencies #setting up spatial frequencies
ks = 2 * np.pi / sampling_period ks = 2 * np.pi / sampling_period
@@ -104,15 +114,6 @@ P_1_dagger_nat = np.fft.ifftshift(P_1).T.conj()
P_2_dagger_nat = np.fft.ifftshift(P_2).T.conj() P_2_dagger_nat = np.fft.ifftshift(P_2).T.conj()
############################## ##############################
##############################
#Plot zoom parameters [um]
zoom_x = 60
zoom_y = 60
zoom_core_diameter = 2 * 6
full_view_x = size_x * 1e6 / 2
full_view_y = size_y * 1e6 / 2
##############################
def update_phase_factors(): def update_phase_factors():
print("Updating phase factors using d=",d) print("Updating phase factors using d=",d)
phase_factor_0[:,:] = k0 * d[0] * np.sqrt(1 - (wavelength * nu_parallel) ** 2 + 0*1j) phase_factor_0[:,:] = k0 * d[0] * np.sqrt(1 - (wavelength * nu_parallel) ** 2 + 0*1j)
@@ -125,6 +126,11 @@ def update_phase_factors():
P_2[:,:] = np.exp(1j * phase_factor_2) P_2[:,:] = np.exp(1j * phase_factor_2)
P_2_nat[:,:] = np.fft.ifftshift(P_2) P_2_nat[:,:] = np.fft.ifftshift(P_2)
P_1_dagger[:] = P_1.T.conj()
P_2_dagger[:] = P_2.T.conj()
P_1_dagger_nat[:] = np.fft.ifftshift(P_1).T.conj()
P_2_dagger_nat[:] = np.fft.ifftshift(P_2).T.conj()
def update_input_fields(): def update_input_fields():
input_field_1[:] = propagate_source(source_field_1) input_field_1[:] = propagate_source(source_field_1)
input_field_1_2d[:] = input_field_1.reshape((Nx, Ny)) #reshape to 2D for plotting input_field_1_2d[:] = input_field_1.reshape((Nx, Ny)) #reshape to 2D for plotting
@@ -588,7 +594,7 @@ def obj_fun(epigraph_and_weights, grad):
opt_history.append(epigraph) opt_history.append(epigraph)
#make a 1d plot of the optimization history together with the objective values #make a 1d plot of the optimization history together with the objective values
#make_1Dplot_of(x_axis=[np.arange(len(obj_values1)), np.arange(len(obj_values2)), np.arange(len(opt_history))], y_axis=[obj_values1, obj_values2, opt_history], legend_labels=["ob1","ob2","t"], save_name="optimization_history", plot_zoom_x=len(opt_history)) make_1Dplot_of(x_axis=[np.arange(len(obj_values1)), np.arange(len(obj_values2)), np.arange(len(opt_history))], y_axis=[obj_values1, obj_values2, opt_history], legend_labels=["ob1","ob2","t"], save_name="optimization_history", plot_zoom_x=len(opt_history))
return epigraph return epigraph
@@ -771,4 +777,7 @@ if __name__ == "__main__":
#if the results folder does not exist, create it #if the results folder does not exist, create it
if not os.path.exists('results'): if not os.path.exists('results'):
os.makedirs('results') os.makedirs('results')
run_ego() run_ego()