def make_eta_plot(etas): number_of_periods = 10 test_width = 1 * bohr_radius test_charge = 1 * electron_charge test_mass = 1 * electron_mass # potential_depth = 36.831335 * eV prefactor = ide.gaussian_prefactor_LEN(test_width, test_charge) tau_alpha = ide.gaussian_tau_alpha_LEN(test_width, test_mass) kernel = functools.partial(ide.gaussian_kernel_LEN, tau_alpha=tau_alpha) omega_alpha = 1 / (2 * tau_alpha) periods = np.linspace(0, 3, 500) * tau_alpha periods = periods[1:] def curve(periods, eta): results = [] for period in periods: kicks = make_sine_wave_kicks(number_of_periods, period, eta) results.append( dpm.recursive_kicks( kicks, abs_prefactor=np.abs(prefactor), kernel_func=kernel, bound_state_frequency=omega_alpha, )[-1]) return np.abs(results)**2 si.vis.xy_plot( f"bound_state_amplitude_vs_sine_period__eta__{etas}", periods, *[curve(periods, eta) for eta in etas], line_labels=[ fr"$\eta = {eta / time_field_unit:3f}$ a.u." for eta in etas ], x_label=r"Sine Wave Period $T$ ($ \tau_{\alpha} $)", x_unit=tau_alpha, y_label=r"$\left|\left\langle a | a \right\rangle\right|^2$", # vlines = [tau_alpha / 2, tau_alpha], vline_kwargs = [{'linestyle': ':', 'color': 'black'}, {'linestyle': ':', 'color': 'black'}], y_log_axis=True, y_log_pad=1, legend_kwargs={"loc": "upper right"}, # y_lower_limit = 1e-9, y_upper_limit = 1, **PLOT_KWARGS, )
time_initial=-pulse.pulse_width * 10, time_final=pulse.pulse_width * 10, time_step=0.1 * asec, electric_potential=pulse, electric_potential_dc_correction=True, ) specs = [ ide.IntegroDifferentialEquationSpecification( "gaussian", kernel=ide.gaussian_kernel_LEN, kernel_kwargs={ "tau_alpha": ide.gaussian_tau_alpha_LEN(test_width, test_mass) }, integral_prefactor=ide.gaussian_prefactor_LEN( test_width, test_charge), **shared_kwargs, ), ide.IntegroDifferentialEquationSpecification( "hydrogen", kernel=ide.hydrogen_kernel_LEN, kernel_kwargs={ "kernel_prefactor": ide.hydrogen_kernel_prefactor_LEN() }, integral_prefactor=ide.hydrogen_prefactor_LEN(test_charge), **shared_kwargs, ), ] results = si.utils.multi_map(run, specs, processes=2)
def make_eta_movie(): length = 30 etas = np.linspace(0.1, 1, 30 * length) * time_field_unit number_of_periods = 10 test_width = 1 * bohr_radius test_charge = 1 * electron_charge test_mass = 1 * electron_mass # potential_depth = 36.831335 * eV prefactor = ide.gaussian_prefactor_LEN(test_width, test_charge) tau_alpha = ide.gaussian_tau_alpha_LEN(test_width, test_mass) kernel = functools.partial(ide.gaussian_kernel_LEN, tau_alpha=tau_alpha) omega_alpha = 1 / (2 * tau_alpha) periods = np.linspace(0, 10, 500) * tau_alpha periods = periods[1:] def curve(periods, eta): results = [] for period in periods: kicks = make_sine_wave_kicks(number_of_periods, period, eta) results.append( dpm.recursive_kicks( kicks, abs_prefactor=np.abs(prefactor), kernel_func=kernel, bound_state_frequency=omega_alpha, )[-1]) return np.abs(results)**2 si.vis.xyt_plot( f"bound_state_amplitude_vs_sine_period__eta_scan", periods, etas, curve, x_label=r"Sine Wave Period $T$ ($ \tau_{\alpha} $)", x_unit=tau_alpha, y_label="Bound State Amplitude", t_fmt_string=r"$\eta = {} \; \mathrm{{a.u.}}$", t_unit=dpm.time_field_unit, vlines=[tau_alpha / 2, tau_alpha], vline_kwargs=[ { "linestyle": ":", "color": "black" }, { "linestyle": ":", "color": "black" }, ], y_log_axis=True, y_log_pad=1, y_lower_limit=1e-9, y_upper_limit=1, length=length, **PLOT_KWARGS, )
max_cos_kick = max(k.amplitude for k in cos_kicks) max_sin_kick = max(k.amplitude for k in sin_kicks) return max_cos_kick, max_sin_kick if __name__ == "__main__": with si.utils.LogManager("simulacra", "ionization", stdout_level=logging.DEBUG) as logger: delta_t = np.linspace(0, 500, 500) * asec omega_alpha = ion.HydrogenBoundState(1).energy / hbar eta = 0.2 * time_field_unit tau_alpha = ide.gaussian_tau_alpha_LEN(bohr_radius, electron_mass) B = ide.gaussian_prefactor_LEN(bohr_radius, electron_charge) cos_eta, sin_eta = get_cosine_and_sine_etas(pulse_width=200 * asec, fluence=0.001 * Jcm2) print(cos_eta / time_field_unit, sin_eta / time_field_unit) cos_beta = B * (cos_eta**2) sin_beta = B * (sin_eta**2) si.vis.xy_plot( "delta_t_scan", delta_t, np.ones_like(delta_t) * double_kick_no_interference(sin_beta), np.ones_like(delta_t) * single_kick(sin_beta), double_kick(sin_beta, delta_t, omega_alpha, tau_alpha),