def modes_n_gain(inc_a_x): inc_a_y = inc_a_x # Use all specified parameters to create a waveguide object. wguide = objects.Struct(unitcell_x,inc_a_x,unitcell_y,inc_a_y,inc_shape, material_bkg=materials.materials_dict["Vacuum"], material_a=materials.materials_dict["SiO2_2016_Smith"], lc_bkg=1, lc_refine_1=400.0, lc_refine_2=50.0) sim_EM_pump = wguide.calc_EM_modes(num_modes_EM_pump, wl_nm, n_eff=n_eff) sim_EM_Stokes = mode_calcs.bkwd_Stokes_modes(sim_EM_pump) k_AC = np.real(sim_EM_pump.Eig_values[EM_ival_pump] - sim_EM_Stokes.Eig_values[EM_ival_Stokes]) shift_Hz = 4e9 sim_AC = wguide.calc_AC_modes(num_modes_AC, k_AC, EM_sim=sim_EM_pump, shift_Hz=shift_Hz) set_q_factor = 600. SBS_gain, SBS_gain_PE, SBS_gain_MB, linewidth_Hz, Q_factors, alpha = integration.gain_and_qs( sim_EM_pump, sim_EM_Stokes, sim_AC, k_AC, EM_ival_pump=EM_ival_pump, EM_ival_Stokes=EM_ival_Stokes, AC_ival=AC_ival)#, fixed_Q=set_q_factor) interp_values = plotting.gain_spectra(sim_AC, SBS_gain, SBS_gain_PE, SBS_gain_MB, linewidth_Hz, k_AC, EM_ival_pump, EM_ival_Stokes, AC_ival, freq_min, freq_max, num_interp_pts=num_interp_pts, save_fig=False, suffix_str='%i' %int(inc_a_x)) # Clear memory wguide = sim_EM_pump = sim_EM_Stokes = sim_AC = None SBS_gain = SBS_gain_PE = SBS_gain_MB = linewidth_Hz = Q_factors = alpha = None return interp_values
def ac_mode_freqs(coat_y): print('Commencing mode calculation for coat_y = %f'% coat_y) wguide = objects.Struct(unitcell_x,inc_a_x,unitcell_y,inc_a_y,inc_shape, slab_a_x=slab_a_x, slab_a_y=slab_a_y, inc_b_x=inc_b_x, coat_y=coat_y, material_bkg=materials.Vacuum, # background material_a=materials.As2S3_2017_Morrison, # slot material_b=materials.SiO2_2013_Laude, # slab material_c=materials.Si_2016_Smith, # walls of slot material_d=materials.SiO2_2013_Laude, # coating lc_bkg=5, lc2=2000.0, lc3=1000.0) # Expected effective index of fundamental guided mode. n_eff = wguide.material_a.n-0.1 # Calculate Electromagnetic modes. sim_EM_pump = wguide.calc_EM_modes(num_modes_EM_pump, wl_nm, n_eff=n_eff) sim_EM_Stokes = mode_calcs.bkwd_Stokes_modes(sim_EM_pump) k_AC = np.real(sim_EM_pump.Eig_values[EM_ival_pump] - sim_EM_Stokes.Eig_values[EM_ival_Stokes]) shift_Hz = 4e9 # Calculate Acoustic modes. sim_AC = wguide.calc_AC_modes(num_modes_AC, k_AC, EM_sim=sim_EM_pump, shift_Hz=shift_Hz) # plotting.plt_mode_fields(sim_AC, xlim_min=0.4, xlim_max=0.4, # ylim_min=0.7, ylim_max=0.0, EM_AC='AC', # prefix_str=prefix_str, suffix_str='_%i' %int(coat_y)) set_q_factor = 1000. SBS_gain, SBS_gain_PE, SBS_gain_MB, linewidth_Hz, Q_factors, alpha = integration.gain_and_qs( sim_EM_pump, sim_EM_Stokes, sim_AC, k_AC, EM_ival_pump=EM_ival_pump, EM_ival_Stokes=EM_ival_Stokes, AC_ival=AC_ival, fixed_Q=set_q_factor) # Construct the SBS gain spectrum, built from Lorentzian peaks of the individual modes. freq_min = 4 # np.real(sim_AC.Eig_values[0])*1e-9 - 2 # GHz freq_max = 14 # np.real(sim_AC.Eig_values[-1])*1e-9 + 2 # GHz plotting.gain_spectra(sim_AC, SBS_gain, SBS_gain_PE, SBS_gain_MB, linewidth_Hz, k_AC, EM_ival_pump, EM_ival_Stokes, AC_ival, freq_min=freq_min, freq_max=freq_max, prefix_str=prefix_str, suffix_str='_%i' %int(coat_y)) # Convert to GHz mode_freqs = sim_AC.Eig_values*1.e-9 # Clear memory wguide = sim_EM_pump = sim_EM_Stokes = sim_AC = None SBS_gain = SBS_gain_PE = SBS_gain_MB = linewidth_Hz = Q_factors = alpha = None print('Completed mode calculation for coating coat_y = %f'% coat_y) # Return the frequencies and simulated k_ac value in a list return mode_freqs
slab_a_x = 2000 slab_a_y = 100 num_modes_EM_pump = 20 num_modes_EM_Stokes = num_modes_EM_pump num_modes_AC = 40 EM_ival_pump = 0 EM_ival_Stokes = 0 AC_ival = 'All' prefix_str = 'tut_07-' wguide = objects.Struct(unitcell_x,inc_a_x,unitcell_y,inc_a_y,inc_shape, slab_a_x=slab_a_x, slab_a_y=slab_a_y, inc_b_x=inc_b_x, material_bkg=materials.Vacuum, # background material_a=materials.As2S3_2017_Morrison, # slot material_b=materials.SiO2_2013_Laude, # slab material_c=materials.Si_2016_Smith, # walls of slot lc_bkg=1, lc2=800.0, lc3=400.0) # Expected effective index of fundamental guided mode. n_eff = wguide.material_a.n-0.1 # Calculate Electromagnetic modes. sim_EM_pump = wguide.calc_EM_modes(num_modes_EM_pump, wl_nm, n_eff=n_eff) # np.savez('wguide_data', sim_EM_pump=sim_EM_pump) # npzfile = np.load('wguide_data.npz', allow_pickle=True) # sim_EM_pump = npzfile['sim_EM_pump'].tolist() sim_EM_Stokes = mode_calcs.bkwd_Stokes_modes(sim_EM_pump) # np.savez('wguide_data2', sim_EM_Stokes=sim_EM_Stokes)
num_modes_EM_pump = 20 num_modes_EM_Stokes = num_modes_EM_pump num_modes_AC = 20 EM_ival_pump = 0 EM_ival_Stokes = 0 AC_ival = 'All' prefix_str = 'tut_10-' # Use of a more refined mesh to produce field plots. wguide = objects.Struct(unitcell_x, inc_a_x, inc_shape=inc_shape, inc_b_x=inc_b_x, unitcell_y=unitcell_y, material_bkg=materials.materials_dict["Vacuum"], material_a=materials.materials_dict["Si_2016_Smith"], material_b=materials.materials_dict["SiO2_2016_Smith"], lc_bkg=1, lc_refine_1=100.0, lc_refine_2=5.0, plt_mesh=True) # Expected effective index of fundamental guided mode. n_eff = wguide.material_a.n - 0.1 new_calcs = True # Calculate Electromagnetic modes. if new_calcs: sim_EM_pump = wguide.calc_EM_modes(num_modes_EM_pump, wl_nm, n_eff) np.savez('wguide_data', sim_EM_pump=sim_EM_pump)
EM_ival_pump = 0 # The EM Stokes mode(s) for which to calculate interaction with AC modes. EM_ival_Stokes = 0 # The AC mode(s) for which to calculate interaction with EM modes. AC_ival = 'All' # Step 4 # Use specified parameters to create a waveguide object. # Note use of rough mesh for demonstration purposes, and use plt_mesh=True # to save the geometry and mesh as png files in backend/fortran/msh/ wguide = objects.Struct( unitcell_x, inc_a_x, unitcell_y, inc_a_y, inc_shape, material_bkg=materials.get_material("Vacuum"), material_a=materials.get_material("Si_2016_Smith"), lc_bkg=1, # in vacuum background lc_refine_1=600.0, # on cylinder surfaces lc_refine_2=300.0, # on cylinder center plt_mesh=False) # Explicitly remind ourselves what data we're using. print('\nUsing material data: ', wguide.material_a) # Step 5 # Estimate expected effective index of fundamental guided mode. n_eff = wguide.material_a.n - 0.1 # Calculate the Electromagnetic modes of the pump field. sim_EM_pump = wguide.calc_EM_modes(num_modes_EM_pump, wl_nm, n_eff)
# The AC mode(s) for which to calculate interaction with EM modes. AC_ival = 'All' # Output files are generated in a folder with the following prefix prefix_str = 'fsbs-josab-04-450x200nmSi' # Use all specified parameters to create a waveguide object wguide = objects.Struct( unitcell_x, inc_a_x, unitcell_y, inc_a_y, inc_shape, material_bkg=materials.get_material("Vacuum"), material_a=materials.get_material("Si_2021_Poulton"), lc_bkg= 0.05, # mesh coarseness in background, larger lc_bkg = coarser along horizontal outer edge lc_refine_1= 20.0, # mesh refinement factor near the interface of waveguide, larger = finer along horizontal interface lc_refine_2= 30.0, # mesh refinement factor near the origin/centre of waveguide plt_mesh= False, # creates png file of geometry and mesh in backend/fortran/msh/ check_mesh=False) # note requires x-windows configuration to work # Explicitly remind ourselves what data we're using. print('\nUsing %s material data from' % wguide.material_a.chemical) print('Author:', wguide.material_a.author) print('Year:', wguide.material_a.date) print('Ref:', wguide.material_a.doi)
# Number of acoustic modes to solve for. num_AC_modes = 20 # The EM pump mode(s) for which to calculate interaction with AC modes. # Can specify a mode number (zero has lowest propagation constant) or 'All'. EM_ival_pump = 0 # The EM Stokes mode(s) for which to calculate interaction with AC modes. EM_ival_Stokes = 0 # The AC mode(s) for which to calculate interaction with EM modes. AC_ival = 'All' # Use all specified parameters to create a waveguide object. wguide = objects.Struct(unitcell_x, inc_a_x, unitcell_y, inc_a_y, inc_shape, material_bkg=materials.get_material("Vacuum"), material_a=materials.get_material("Si_2016_Smith"), lc_bkg=1, lc_refine_1=1000.0, lc_refine_2=400.0) # Expected effective index of fundamental guided mode. n_eff = wguide.material_a.n - 0.1 # Calculate Electromagnetic Modes sim_EM_pump = wguide.calc_EM_modes(num_modes_EM_pump, wl_nm, n_eff=n_eff) sim_EM_Stokes = mode_calcs.bkwd_Stokes_modes(sim_EM_pump) k_AC = np.real(sim_EM_pump.Eig_values[0] - sim_EM_Stokes.Eig_values[0])
num_modes_EM_pump = 20 num_modes_EM_Stokes = num_modes_EM_pump num_modes_AC = 60 EM_ival_pump = 0 EM_ival_Stokes = 0 AC_ival = 'All' prefix_str = 'lit_04-no_pillar-' # Rotate crystal axis of Si from <100> to <110>, starting with same Si_2016_Smith data. Si_110 = copy.deepcopy(materials.Si_2016_Smith) # Si_110 = copy.deepcopy(materials.Si_2015_Van_Laer) Si_110.rotate_axis(np.pi/4,'z-axis', save_rotated_tensors=True) # Use all specified parameters to create a waveguide object. wguide = objects.Struct(unitcell_x,inc_a_x,unitcell_y,inc_a_y,inc_shape, material_bkg=materials.Vacuum, material_a=Si_110, symmetry_flag=False, lc_bkg=4, lc2=3000.0, lc3=2000.0) # Expected effective index of fundamental guided mode. n_eff = wguide.material_a.n-0.1 # Calculate Electromagnetic Modes sim_EM_pump = wguide.calc_EM_modes(num_modes_EM_pump, wl_nm, n_eff=n_eff) # np.savez('wguide_data', sim_EM_pump=sim_EM_pump) # npzfile = np.load('wguide_data.npz') # sim_EM_pump = npzfile['sim_EM_pump'].tolist() sim_EM_Stokes = mode_calcs.fwd_Stokes_modes(sim_EM_pump) # np.savez('wguide_data2', sim_EM_Stokes=sim_EM_Stokes) # npzfile = np.load('wguide_data2.npz') # sim_EM_Stokes = npzfile['sim_EM_Stokes'].tolist()
# Optical Parameters num_modes_EM_pump = 20 num_modes_EM_Stokes = num_modes_EM_pump num_modes_AC = 120 EM_ival_pump = 0 EM_ival_Stokes = 0 AC_ival = 'All' prefix_str = 'lit_01-' # Use all specified parameters to create a waveguide object. wguide = objects.Struct(unitcell_x, inc_a_x, unitcell_y, inc_a_y, inc_shape, material_bkg=materials.materials_dict["Vacuum"], material_a=materials.materials_dict["SiO2_2013_Laude"], lc_bkg=1, lc_refine_1=400.0, lc_refine_2=50.0) # Expected effective index of fundamental guided mode. n_eff = 1.3 # Calculate Electromagnetic modes. sim_EM_pump = wguide.calc_EM_modes(num_modes_EM_pump, wl_nm, n_eff=n_eff) sim_EM_Stokes = mode_calcs.bkwd_Stokes_modes(sim_EM_pump) plotting.plt_mode_fields(sim_EM_pump, xlim_min=0.4, xlim_max=0.4,
lc_list = [20,100,500,1000,1500,2000,2500] nu_lcs = len(lc_list) lc_bkg_list = 1*np.ones(nu_lcs) x_axis = lc_list conv_list = [] time_list = [] # Do not run in parallel, otherwise there are confusions reading the msh files! for i_lc, lc_ref in enumerate(lc_list): start = time.time() print("\n Running simulation", i_lc+1, "/", nu_lcs) lc3 = lc_ref/2 lc_bkg = lc_bkg_list[i_lc] wguide = objects.Struct(unitcell_x,inc_a_x,unitcell_y,inc_a_y,inc_shape, slab_a_x=slab_a_x, slab_a_y=slab_a_y, coat_x=coat_x, coat_y=coat_y, material_bkg=materials.Vacuum, material_a=materials.Al21GaAs, # waveguide material_b=materials.Sapphire, # slab material_c=materials.Sapphire, # coating lc_bkg=lc_bkg, lc2=lc_ref, lc3=lc3, lc4=lc_ref, force_mesh=True) # Expected effective index of fundamental guided mode. n_eff = wguide.material_a.n-0.1 # Calculate Electromagnetic modes. sim_EM_pump = wguide.calc_EM_modes(num_modes_EM_pump, wl_nm, n_eff) sim_EM_Stokes = mode_calcs.bkwd_Stokes_modes(sim_EM_pump) k_AC = np.real(sim_EM_pump.Eig_values[EM_ival_pump] - sim_EM_Stokes.Eig_values[EM_ival_Stokes]) # Calculate Acoustic modes. sim_AC = wguide.calc_AC_modes(num_modes_AC, k_AC, EM_sim=sim_EM_pump) # Calculate interaction integrals and SBS gain.
num_modes_EM_pump = 20 num_modes_EM_Stokes = num_modes_EM_pump num_modes_AC = 60 EM_ival_pump = 0 EM_ival_Stokes = 0 AC_ival = 'All' prefix_str = 'lit_05-' # Rotate crystal axis of Si from <100> to <110>, starting with same Si_2016_Smith data. Si_110 = copy.deepcopy(materials.materials_dict["Si_2016_Smith"]) Si_110.rotate_axis(np.pi/4,'y-axis', save_rotated_tensors=True) # Use all specified parameters to create a waveguide object. wguide = objects.Struct(unitcell_x,inc_a_x,unitcell_y,inc_a_y,inc_shape, material_bkg=materials.materials_dict["Vacuum"], material_a=Si_110, symmetry_flag=False, lc_bkg=1, lc_refine_1=1200.0, lc_refine_2=800.0) # Expected effective index of fundamental guided mode. n_eff = wguide.material_a.n-0.1 # Calculate Electromagnetic Modes sim_EM_pump = wguide.calc_EM_modes(num_modes_EM_pump, wl_nm, n_eff=n_eff) # np.savez('wguide_data', sim_EM_pump=sim_EM_pump) # npzfile = np.load('wguide_data.npz') # sim_EM_pump = npzfile['sim_EM_pump'].tolist() sim_EM_Stokes = mode_calcs.fwd_Stokes_modes(sim_EM_pump) # np.savez('wguide_data2', sim_EM_Stokes=sim_EM_Stokes) # npzfile = np.load('wguide_data2.npz') # sim_EM_Stokes = npzfile['sim_EM_Stokes'].tolist()
nu_lcs = 7 lc_bkg_list = 8*np.ones(nu_lcs) lc_list = [100,500,1000,1500,2000,2500,3000] x_axis = lc_list conv_list = [] time_list = [] # Do not run in parallel, otherwise there are confusions reading the msh files! for i_lc, lc_ref in enumerate(lc_list): start = time.time() print("\n Running simulation", i_lc+1, "/", nu_lcs) lc3 = lc_ref lc_bkg = lc_bkg_list[i_lc] wguide = objects.Struct(unitcell_x,inc_a_x,unitcell_y, inc_a_y,inc_shape, material_bkg=materials.Vacuum, material_a=materials.Si_2016_Smith, lc_bkg=lc_bkg, lc2=lc_ref, lc3=lc3, force_mesh=True) # Expected effective index of fundamental guided mode. n_eff = wguide.material_a.n-0.1 # Calculate Electromagnetic modes. sim_EM_pump = wguide.calc_EM_modes(num_modes_EM_pump, wl_nm, n_eff) sim_EM_Stokes = mode_calcs.bkwd_Stokes_modes(sim_EM_pump) k_AC = np.real(sim_EM_pump.Eig_values[EM_ival_pump] - sim_EM_Stokes.Eig_values[EM_ival_Stokes]) # Calculate Acoustic modes. sim_AC = wguide.calc_AC_modes(num_modes_AC, k_AC, EM_sim=sim_EM_pump) # Calculate interaction integrals and SBS gain. SBS_gain, SBS_gain_PE, SBS_gain_MB, linewidth_Hz, Q_factors, alpha = integration.gain_and_qs( sim_EM_pump, sim_EM_Stokes, sim_AC, k_AC, EM_ival_pump=EM_ival_pump, EM_ival_Stokes=EM_ival_Stokes, AC_ival=AC_ival)
# Number of acoustic modes to solve for. num_AC_modes = 20 # The EM pump mode(s) for which to calculate interaction with AC modes. # Can specify a mode number (zero has lowest propagation constant) or 'All'. EM_ival_pump = 0 # The EM Stokes mode(s) for which to calculate interaction with AC modes. EM_ival_Stokes = 0 # The AC mode(s) for which to calculate interaction with EM modes. AC_ival = 'All' # Use all specified parameters to create a waveguide object. wguide = objects.Struct(unitcell_x, inc_a_x, unitcell_y, inc_a_y, inc_shape, material_bkg=materials.Vacuum, material_a=materials.Si_2016_Smith, lc_bkg=1, lc2=1000.0, lc3=400.0) # Expected effective index of fundamental guided mode. n_eff = wguide.material_a.n - 0.1 # Calculate Electromagnetic Modes sim_EM_pump = wguide.calc_EM_modes(num_modes_EM_pump, wl_nm, n_eff=n_eff) sim_EM_Stokes = mode_calcs.bkwd_Stokes_modes(sim_EM_pump) k_AC = np.real(sim_EM_pump.Eig_values[0] - sim_EM_Stokes.Eig_values[0])
# The EM Stokes mode(s) for which to calculate interaction with AC modes. EM_ival_Stokes = 0 # The AC mode(s) for which to calculate interaction with EM modes. AC_ival = 'All' prefix_str = 'lit_09-' # Use specified parameters to create a waveguide object. # Note use of rough mesh for demonstration purposes. wguide = objects.Struct( unitcell_x, inc_a_x, unitcell_y, inc_a_y, inc_shape, slab_a_x=slab_a_x, slab_a_y=slab_a_y, material_bkg=materials.Vacuum, material_a=materials.As2S3_2017_Morrison, # waveguide material_b=materials.SiO2_2016_Smith, # slab lc_bkg=1, lc2=800.0, lc3=400.0) # Expected effective index of fundamental guided mode. n_eff = wguide.material_a.n - 0.1 # Calculate the Electromagnetic modes of the pump field. sim_EM_pump = wguide.calc_EM_modes(num_modes_EM_pump, wl_nm, n_eff) # # np.savez('wguide_data', sim_EM_pump=sim_EM_pump) # npzfile = np.load('wguide_data.npz') # sim_EM_pump = npzfile['sim_EM_pump'].tolist()
# The AC mode(s) for which to calculate interaction with EM modes. AC_ival = 'All' prefix_str = 'lit_09-' # Use specified parameters to create a waveguide object. # Note use of rough mesh for demonstration purposes. wguide = objects.Struct( unitcell_x, inc_a_x, unitcell_y, inc_a_y, inc_shape, slab_a_x=slab_a_x, slab_a_y=slab_a_y, coat_x=coat_x, coat_y=coat_y, material_bkg=materials.get_material("Vacuum"), material_a=materials.get_material("As2S3_2017_Morrison"), # waveguide material_b=materials.get_material("SiO2_2016_Smith"), # slab material_c=materials.get_material("SiO2_2016_Smith"), # coating lc_bkg=1, lc_refine_1=800.0, lc_refine_2=400.0) # Expected effective index of fundamental guided mode. n_eff = wguide.material_a.n - 0.1 # Calculate the Electromagnetic modes of the pump field. sim_EM_pump = wguide.calc_EM_modes(num_modes_EM_pump, wl_nm, n_eff) # # np.savez('wguide_data', sim_EM_pump=sim_EM_pump)
inc_a_y = 0.9 * inc_a_x inc_shape = 'rectangular' num_modes_EM_pump = 20 num_modes_EM_Stokes = num_modes_EM_pump num_modes_AC = 20 EM_ival_pump = 0 EM_ival_Stokes = 0 AC_ival = 'All' # Use of a more refined mesh to produce field plots. wguide = objects.Struct(unitcell_x, inc_a_x, unitcell_y, inc_a_y, inc_shape, material_bkg=materials.Vacuum, material_a=materials.Si_test_anisotropic, lc_bkg=1, lc2=1000.0, lc3=5.0) # Expected effective index of fundamental guided mode. n_eff = wguide.material_a.n - 0.1 # Calculate the Electromagnetic modes of the pump field. sim_EM_pump = wguide.calc_EM_modes(num_modes_EM_pump, wl_nm, n_eff) # Print the wavevectors of EM modes. print('\n k_z of EM modes \n', np.round(np.real(sim_EM_pump.Eig_values), 4)) # Calculate the Electromagnetic modes of the Stokes field. # For an idealised backward SBS simulation the Stokes modes are identical # to the pump modes but travel in the opposite direction.
# The EM Stokes mode(s) for which to calculate interaction with AC modes. EM_ival_Stokes = 0 # The AC mode(s) for which to calculate interaction with EM modes. AC_ival = 'All' # Si_110 = copy.deepcopy(materials.materials_dict["Si_2015_Van_Laer"]) Si_110 = copy.deepcopy(materials.get_material("Si_2016_Smith") Si_110.rotate_axis(np.pi/4,'y-axis', save_rotated_tensors=True) prefix_str = 'lit_07-' # Use specified parameters to create a waveguide object. # Note use of rough mesh for demonstration purposes. wguide = objects.Struct(unitcell_x,inc_a_x,unitcell_y,inc_a_y,inc_shape, slab_a_x=slab_a_x, slab_a_y=slab_a_y, material_bkg=materials.get_material("Vacuum"), material_a=Si_110, material_b=Si_110, symmetry_flag=False, lc_bkg=1, lc_refine_1=2000.0, lc_refine_2=1000.0) # Expected effective index of fundamental guided mode. n_eff = wguide.material_a.n-0.1 # Calculate Electromagnetic Modes sim_EM_pump = wguide.calc_EM_modes(num_modes_EM_pump, wl_nm, n_eff=n_eff) # np.savez('wguide_data', sim_EM_pump=sim_EM_pump) # npzfile = np.load('wguide_data.npz') # sim_EM_pump = npzfile['sim_EM_pump'].tolist() sim_EM_Stokes = mode_calcs.fwd_Stokes_modes(sim_EM_pump) plotting.plot_mode_fields(sim_EM_pump, xlim_min=0.4, xlim_max=0.4, ivals=[EM_ival_pump], ylim_min=0.3, ylim_max=0.3, EM_AC='EM_E', num_ticks=3,
EM_ival_Stokes = 1 # INTERMODE SBS TE0 to TE1 # The AC mode(s) for which to calculate interaction with EM modes. AC_ival = 'All' # Si_110 = copy.deepcopy(materials.Si_2015_Van_Laer) Si_110 = copy.deepcopy(materials.Si_2016_Smith) Si_110.rotate_axis(np.pi/4,'z-axis', save_rotated_tensors=True) prefix_str = 'lit_08-' # Use specified parameters to create a waveguide object. wguide = objects.Struct(unitcell_x,inc_a_x,unitcell_y,inc_a_y,inc_shape, slab_a_x=slab_a_x, slab_a_y=slab_a_y, slab_b_y=slab_b_y, coat_x=coat_x, coat_y=coat_y, coat2_x=coat2_x, coat2_y=coat2_y, material_bkg=materials.Vacuum, material_a=Si_110, #plt_mesh=True, material_b=Si_110, material_c=materials.Vacuum, material_d=materials.Vacuum, material_e=materials.Vacuum, symmetry_flag=False, lc_bkg=lc_bkg, lc2=lc2, lc3=lc3, lc4=lc4, lc5=lc5, lc6=lc6) # Expected effective index of fundamental guided mode. n_eff = wguide.material_a.n-0.1 # Calculate Electromagnetic Modes sim_EM_pump = wguide.calc_EM_modes(num_modes_EM_pump, wl_nm, n_eff=n_eff) # np.savez('wguide_data', sim_EM_pump=sim_EM_pump) # npzfile = np.load('wguide_data.npz') # sim_EM_pump = npzfile['sim_EM_pump'].tolist() sim_EM_Stokes = mode_calcs.fwd_Stokes_modes(sim_EM_pump) # np.savez('wguide_data2', sim_EM_Stokes=sim_EM_Stokes)
lc_bkg_list = 1 * np.ones(nu_lcs) x_axis = lc_list conv_list = [] time_list = [] # Do not run in parallel, otherwise there are confusions reading the msh files! for i_lc, lc_ref in enumerate(lc_list): start = time.time() print("\n Running simulation", i_lc + 1, "/", nu_lcs) lc_refine_2 = lc_ref / 2 lc_bkg = lc_bkg_list[i_lc] wguide = objects.Struct( unitcell_x, inc_a_x, unitcell_y, inc_a_y, inc_shape, material_bkg=materials.materials_dict["Vacuum"], material_a=materials.materials_dict["Si_2016_Smith"], lc_bkg=lc_bkg, lc_refine_1=lc_ref, lc_refine_2=lc_refine_2, force_mesh=True) # Expected effective index of fundamental guided mode. n_eff = wguide.material_a.n - 0.1 # Calculate Electromagnetic modes. sim_EM_pump = wguide.calc_EM_modes(num_modes_EM_pump, wl_nm, n_eff) sim_EM_Stokes = mode_calcs.bkwd_Stokes_modes(sim_EM_pump) k_AC = np.real(sim_EM_pump.Eig_values[EM_ival_pump] - sim_EM_Stokes.Eig_values[EM_ival_Stokes]) # Calculate Acoustic modes. sim_AC = wguide.calc_AC_modes(num_modes_AC, k_AC, EM_sim=sim_EM_pump)
num_modes_EM_pump = 20 num_modes_EM_Stokes = num_modes_EM_pump num_modes_AC = 20 EM_ival_pump = 0 EM_ival_Stokes = 0 AC_ival = 'All' prefix_str = 'tut_10-' # Use of a more refined mesh to produce field plots. wguide = objects.Struct(unitcell_x, inc_a_x, inc_shape=inc_shape, inc_b_x=inc_b_x, unitcell_y=unitcell_y, material_bkg=materials.Vacuum, material_a=materials.Si_2016_Smith, material_b=materials.SiO2_2016_Smith, lc_bkg=2, lc2=200.0, lc3=5.0, plt_mesh=False) # Expected effective index of fundamental guided mode. n_eff = wguide.material_a.n - 0.1 # Calculate Electromagnetic modes. sim_EM_pump = wguide.calc_EM_modes(num_modes_EM_pump, wl_nm, n_eff) # np.savez('wguide_data', sim_EM_pump=sim_EM_pump) # npzfile = np.load('wguide_data.npz') # sim_EM_pump = npzfile['sim_EM_pump'].tolist()
prefix_str = 'lit_10b-' #reuse_fields=True # use saved data reuse_fields=False # calculate from scratch Ge_110 = copy.deepcopy(materials.get_material("Ge_cubic_2014_Wolff")) print('Initial Ge_100:', Ge_110.full_str()) Ge_110.rotate_axis(np.pi/4., 'y-axis', save_rotated_tensors=True) print('Rotated Ge_110:', Ge_110.full_str()) # Use specified parameters to create a waveguide object. # Note use of rough mesh for demonstration purposes. wguide = objects.Struct(unitcell_x,inc_a_x,unitcell_y,inc_a_y,inc_shape, material_bkg=materials.get_material("Si3N4_2014_Wolff"), material_a=Ge_110, lc_bkg=1, lc_refine_1=50.0, lc_refine_2=50.0) # Expected effective index of fundamental guided mode. n_eff = wguide.material_a.n-0.1 # Calculate the Electromagnetic modes of the pump field. if not reuse_fields: sim_EM_pump = wguide.calc_EM_modes(num_modes_EM_pump, wl_nm, n_eff) np.savez('wguide_data', sim_EM_pump=sim_EM_pump) else: npzfile = np.load('wguide_data.npz', allow_pickle=True) sim_EM_pump = npzfile['sim_EM_pump'].tolist() sim_EM_pump.analyse_symmetries(PointGroup.C2V) sim_EM_pump.set_r0_offset(3.0e-6, -2.250e-6)
num_modes_EM_pump = 20 num_modes_EM_Stokes = num_modes_EM_pump # Number of acoustic modes to solve for. num_AC_modes = 20 # The EM pump mode(s) for which to calculate interaction with AC modes. # Can specify a mode number (zero has lowest propagation constant) or 'All'. EM_ival_pump = 0 # The EM Stokes mode(s) for which to calculate interaction with AC modes. EM_ival_Stokes = 0 # The AC mode(s) for which to calculate interaction with EM modes. AC_ival='All' # Use all specified parameters to create a waveguide object. wguide = objects.Struct(unitcell_x,inc_a_x,unitcell_y,inc_a_y,inc_shape, material_bkg=materials.materials_dict["Vacuum"], material_a=materials.materials_dict["Si_2016_Smith"], lc_bkg=1, lc_refine_1=1000.0, lc_refine_2=400.0, make_mesh_now = False, mesh_file='../backend/fortran/msh/4testing.mail') # Expected effective index of fundamental guided mode. n_eff = wguide.material_a.n-0.1 # Calculate Electromagnetic Modes sim_EM_pump = wguide.calc_EM_modes(num_modes_EM_pump, wl_nm, n_eff=n_eff) sim_EM_Stokes = mode_calcs.bkwd_Stokes_modes(sim_EM_pump) k_AC = np.real(sim_EM_pump.Eig_values[0] - sim_EM_Stokes.Eig_values[0]) # Calculate Acoustic Modes sim_AC_wguide = wguide.calc_AC_modes(num_AC_modes, k_AC=k_AC, EM_sim=sim_EM_pump)
EM_ival_pump = 0 # The EM Stokes mode(s) for which to calculate interaction with AC modes. EM_ival_Stokes = 1 # INTERMODE SBS TE0 to TE1 # The AC mode(s) for which to calculate interaction with EM modes. AC_ival = 'All' # Si_110 = copy.deepcopy(materials.get_material("Si_2015_Van_Laer") Si_110 = copy.deepcopy(materials.get_material("Si_2016_Smith") Si_110.rotate_axis(np.pi/4,'z-axis', save_rotated_tensors=True) prefix_str = 'fig16-' # Use specified parameters to create a waveguide object. wguide = objects.Struct(unitcell_x,inc_a_x,unitcell_y,inc_a_y,inc_shape, slab_a_x=slab_a_x, slab_a_y=slab_a_y, slab_b_y=slab_b_y, coat_x=coat_x, coat_y=coat_y, coat2_x=coat2_x, coat2_y=coat2_y, material_bkg=materials.get_material("Vacuum"), material_a=Si_110, #plt_mesh=True, material_b=Si_110, material_c=materials.get_material(["Vacuum"), material_d=materials.get_material(["Vacuum"), material_e=materials.get_material("Vacuum"), symmetry_flag=False, lc_bkg=lc_bkg, lc_refine_1=lc_refine_1, lc_refine_2=lc_refine_2, lc_refine_3=lc_refine_3, lc_refine_4=lc_refine_4, lc_refine_5=lc_refine_5) # Expected effective index of fundamental guided mode. n_eff = wguide.material_a.n-0.1 # Calculate Electromagnetic Modes print("starting EM pump modes") sim_EM_pump = wguide.calc_EM_modes(num_modes_EM_pump, wl_nm, n_eff=n_eff, debug=True) #np.savez('wguide_data', sim_EM_pump=sim_EM_pump) # npzfile = np.load('wguide_data.npz', allow_pickle=True) # sim_EM_pump = npzfile['sim_EM_pump'].tolist()
# The AC mode(s) for which to calculate interaction with EM modes. AC_ival = 'All' prefix_str = 'lit_09-' # Use specified parameters to create a waveguide object. # Note use of rough mesh for demonstration purposes. wguide = objects.Struct( unitcell_x, inc_a_x, unitcell_y, inc_a_y, inc_shape, slab_a_x=slab_a_x, slab_a_y=slab_a_y, coat_x=coat_x, coat_y=coat_y, material_bkg=materials.Vacuum, material_a=materials.As2S3_2017_Morrison, # waveguide material_b=materials.SiO2_2016_Smith, # slab material_c=materials.SiO2_2016_Smith, # coating lc_bkg=5, lc2=2000.0, lc3=1000.0) # Expected effective index of fundamental guided mode. n_eff = wguide.material_a.n - 0.1 # Calculate the Electromagnetic modes of the pump field. sim_EM_pump = wguide.calc_EM_modes(num_modes_EM_pump, wl_nm, n_eff) # # np.savez('wguide_data', sim_EM_pump=sim_EM_pump)
# The EM pump mode(s) for which to calculate interaction with AC modes. # Can specify a mode number (zero has lowest propagation constant) or 'All'. EM_ival_pump = 0 # The EM Stokes mode(s) for which to calculate interaction with AC modes. EM_ival_Stokes = 0 # The AC mode(s) for which to calculate interaction with EM modes. AC_ival = 'All' # Step 4 # Use specified parameters to create a waveguide object. # Note use of rough mesh for demonstration purposes, and use plt_mesh=True # to save the geometry and mesh as png files in backend/fortran/msh/ wguide = objects.Struct(unitcell_x,inc_a_x,unitcell_y,inc_a_y,inc_shape, material_bkg=materials.Vacuum, material_a=materials.Si_2016_Smith, lc_bkg=1, # in vacuum background lc2=600.0, # on cylinder surfaces lc3=300.0, # on cylinder center plt_mesh=False) # Explicitly remind ourselves what data we're using. print('\nUsing %s material data from' % wguide.material_a.chemical) print('Author:', wguide.material_a.author) print('Year:', wguide.material_a.date) print('Ref:', wguide.material_a.doi) # Step 5 # Expected effective index of fundamental guided mode. n_eff = wguide.material_a.n-0.1 # Calculate the Electromagnetic modes of the pump field.
prefix_str = 'lit_04-pillar-' # Rotate crystal axis of Si from <100> to <110>, starting with same Si_2016_Smith data. Si_110 = copy.deepcopy(materials.Si_2015_Van_Laer) Si_110.rotate_axis(np.pi / 4, 'y-axis', save_rotated_tensors=True) # Use all specified parameters to create a waveguide object. wguide = objects.Struct( unitcell_x, inc_a_x, unitcell_y, inc_a_y, inc_shape, slab_a_x=slab_a_x, slab_a_y=slab_a_y, pillar_x=pillar_x, pillar_y=pillar_y, material_bkg=materials.Vacuum, # background material_a=Si_110, # rib material_b=materials.SiO2_2015_Van_Laer, # slab material_c=materials.SiO2_2015_Van_Laer, # pillar lc_bkg=1, lc2=800.0, lc3=500.0) # Expected effective index of fundamental guided mode. n_eff = wguide.material_a.n - 0.1 # Calculate Electromagnetic Modes sim_EM_pump = wguide.calc_EM_modes(num_modes_EM_pump, wl_nm, n_eff) sim_EM_Stokes = mode_calcs.fwd_Stokes_modes(sim_EM_pump)
num_modes_AC = 60 EM_ival_pump = 0 EM_ival_Stokes = 0 AC_ival = 'All' prefix_str = 'lit_04-pillar-' # Rotate crystal axis of Si from <100> to <110>, starting with same Si_2016_Smith data. Si_110 = copy.deepcopy(materials.materials_dict["Si_2015_Van_Laer"]) Si_110.rotate_axis(np.pi/4,'y-axis', save_rotated_tensors=True) # Use all specified parameters to create a waveguide object. wguide = objects.Struct(unitcell_x,inc_a_x,unitcell_y,inc_a_y,inc_shape, slab_a_x=slab_a_x, slab_a_y=slab_a_y, pillar_x=pillar_x, pillar_y=pillar_y, material_bkg=materials.materials_dict["Vacuum"], # background material_a=Si_110, # rib material_b=materials.materials_dict["SiO2_2015_Van_Laer"], # slab material_c=materials.materials_dict["SiO2_2015_Van_Laer"], # pillar lc_bkg=1, lc_refine_1=800.0, lc_refine_2=500.0) # Expected effective index of fundamental guided mode. n_eff = wguide.material_a.n-0.1 # Calculate Electromagnetic Modes sim_EM_pump = wguide.calc_EM_modes(num_modes_EM_pump, wl_nm, n_eff) sim_EM_Stokes = mode_calcs.fwd_Stokes_modes(sim_EM_pump) plotting.plot_mode_fields(sim_EM_pump, ivals=[EM_ival_pump], xlim_min=0.4, xlim_max=0.4, ylim_min=0.4, ylim_max=0.2, EM_AC='EM_E', prefix_str=prefix_str, pdf_png='png')
EM_ival_pump = 0 EM_ival_Stokes = 0 AC_ival = 'All' if len(sys.argv)>1 and sys.argv[1]=='fast=1': # choose between faster or more accurate calculation prefix_str = 'ftut_11b-' refine_fac=1 else: prefix_str = 'tut_11b-' refine_fac=5 # Use of a more refined mesh to produce field plots. wguide = objects.Struct(unitcell_x,inc_a_x,inc_shape=inc_shape, inc_b_x=inc_b_x, unitcell_y=unitcell_y, material_bkg=materials.get_material("Vacuum"), material_a=materials.get_material("Si_2016_Smith"), material_b=materials.get_material("SiO2_2016_Smith"), lc_bkg=1, lc_refine_1=20.0*refine_fac, lc_refine_2=1.0*refine_fac, plt_mesh=False) # Expected effective index of fundamental guided mode. n_eff = wguide.material_a.n-0.1 new_calcs=True # Calculate Electromagnetic modes. if new_calcs: sim_EM_pump = wguide.calc_EM_modes(num_modes_EM_pump, wl_nm, n_eff) np.savez('wguide_data', sim_EM_pump=sim_EM_pump)
# Number of acoustic modes to solve for. num_AC_modes = 20 # The EM pump mode(s) for which to calculate interaction with AC modes. # Can specify a mode number (zero has lowest propagation constant) or 'All'. EM_ival_pump = 0 # The EM Stokes mode(s) for which to calculate interaction with AC modes. EM_ival_Stokes = 0 # The AC mode(s) for which to calculate interaction with EM modes. AC_ival = 'All' # Use all specified parameters to create a waveguide object. wguide = objects.Struct(unitcell_x, inc_a_x, unitcell_y, inc_a_y, inc_shape, material_bkg=materials.materials_dict["Vacuum"], material_a=materials.materials_dict["Si_2016_Smith"], lc_bkg=1, lc_refine_1=1000.0, lc_refine_2=400.0) # Expected effective index of fundamental guided mode. n_eff = wguide.material_a.n - 0.1 # Calculate Electromagnetic Modes sim_EM_pump = wguide.calc_EM_modes(num_modes_EM_pump, wl_nm, n_eff=n_eff) sim_EM_Stokes = mode_calcs.bkwd_Stokes_modes(sim_EM_pump) k_AC = np.real(sim_EM_pump.Eig_values[0] - sim_EM_Stokes.Eig_values[0])
1] == 'fast=1': # choose between faster or more accurate calculation print('\n\nCommencing NumBAT tutorial 9 - fast mode') prefix_str = 'ftut_09-' refine_fac = 1 else: print('\n\nCommencing NumBAT tutorial 9') prefix_str = 'tut_09-' refine_fac = 5 # Use of a more refined mesh to produce field plots. wguide = objects.Struct( unitcell_x, inc_a_x, unitcell_y, inc_a_y, inc_shape, material_bkg=materials.get_material("Vacuum"), material_a=materials.get_material("Si_test_anisotropic"), lc_bkg=1, lc_refine_1=200.0 * refine_fac, lc_refine_2=1.0 * refine_fac) # Expected effective index of fundamental guided mode. n_eff = wguide.material_a.n - 0.1 # Calculate the Electromagnetic modes of the pump field. sim_EM_pump = wguide.calc_EM_modes(num_modes_EM_pump, wl_nm, n_eff) # Display the wavevectors of EM modes. v_kz = sim_EM_pump.kz_EM_all() print('\n k_z of EM modes [1/m]:')