Ejemplo n.º 1
0
def modes_n_gain(wguide):
    print('Commencing mode calculation for width a_x = %f' % wguide.inc_a_x)
    # Expected effective index of fundamental guided mode.
    n_eff = (wguide.material_a.n - 0.1) * wguide.inc_a_x / known_geo
    # 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)
    ## Clear memory
    #sim_EM_pump = sim_EM_Stokes = sim_AC = None

    print('Completed mode calculation for width a_x = %f' % wguide.inc_a_x)
    return [
        sim_EM_pump, sim_AC, SBS_gain, SBS_gain_PE, SBS_gain_MB, linewidth_Hz,
        k_AC
    ]
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
Ejemplo n.º 4
0
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)

# Calculate interaction integrals and SBS gain for PE and MB effects combined,
# as well as just for PE, and just for MB. Also calculate acoustic loss alpha.
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_wguide,
    k_AC,
    EM_ival_pump=EM_ival_pump,
    EM_ival_Stokes=EM_ival_Stokes,
    AC_ival=AC_ival)
# Mask negligible gain values to improve clarity of print out.
threshold = 1e-9
threshold_indices = abs(SBS_gain_PE) < threshold
SBS_gain_PE[threshold_indices] = 0
threshold_indices = abs(SBS_gain_MB) < threshold
SBS_gain_MB[threshold_indices] = 0
threshold_indices = abs(SBS_gain) < threshold
SBS_gain[threshold_indices] = 0
masked_PE = SBS_gain_PE[EM_ival_pump, EM_ival_Stokes, :]
masked_MB = SBS_gain_MB[EM_ival_pump, EM_ival_Stokes, :]
masked = SBS_gain[EM_ival_pump, EM_ival_Stokes, :]