Contents
Pulsed DFG simulation
Simulation of DFG for plane wave pulses using the Split-step Fourier method. This script varies the pump power and runs the DFG simulation for each pump power.
clear all; close all; clc; tic;
Simulation paramenters
powersteps = 10; power = linspace(1,150e3,powersteps); setting.runSimulation = true; setting.plot = true;
Indepenent parameters
Param.t_FWHM = 7e-12 * sqrt(2); %FWHM of (E) pulse in time domain Param.t_steps = 2^11; %Steps of t-axis Param.t_0 = 11*Param.t_FWHM; %Span of t; -Param.t_0 : Param.t_0 Param.z_steps = 5000; %Steps of z-axis Param.z_0 = 40e-3; %Span of z; 0 : Param.z_0 Param.A_eff = pi*(50e-6)^2; %Area of beam Param.lambda_3 = 1064e-9; %Wavelength [m] of signal Param.lambda_1 = 1600e-9; %Wavelength [m] of idler Param.P.peak1 = 20e-6; %Peak power [W] of signal Param.P.peak2 = 0; %Peak power [W] of idler Param.Temp = 88; %Param.Temperature in degree Param.chi_eff = 22e-12; %m/V axis.t = linspace(-Param.t_0,Param.t_0,Param.t_steps); axis.z = linspace(0,Param.z_0,Param.z_steps );
Simulation
if(setting.runSimulation == true) Idler.I.depleted = zeros(powersteps,Param.z_steps,Param.t_steps); Signal.I.depleted = zeros(powersteps,Param.z_steps,Param.t_steps); Pump.I.depleted = zeros(powersteps,Param.z_steps,Param.t_steps); Idler.I.undepleted = zeros(powersteps,Param.z_steps,Param.t_steps); Signal.I.undepleted = zeros(powersteps,Param.z_steps,Param.t_steps); Pump.I.undepleted = zeros(powersteps,Param.z_steps,Param.t_steps); Signal.Energy.depleted = zeros(powersteps,Param.z_steps); Idler.Energy.depleted = zeros(powersteps,Param.z_steps); Pump.Energy.depleted = zeros(powersteps,Param.z_steps); Signal.Energy.undepleted = zeros(powersteps,Param.z_steps); Idler.Energy.undepleted = zeros(powersteps,Param.z_steps); Pump.Energy.undepleted = zeros(powersteps,Param.z_steps); Axis.t_ns = zeros(powersteps,Param.t_steps); Axis.z_mm = zeros(powersteps,Param.z_steps); % Initialize progressbar progressbar; for nn=1:powersteps [AX1, AX2, A, B, C, D, E, F] = SplitStepDFG(power(nn),Param.t_steps,Param.t_FWHM,true,false); Axis.t_ns(nn,:) = AX1; Axis.z_mm(nn,:) = AX2; Signal.I.depleted(nn,:,:) = A; Idler.I.depleted(nn,:,:) = B; Pump.I.depleted(nn,:,:) = C; Signal.Energy.depleted(nn,:) = D; Idler.Energy.depleted(nn,:) = E; Pump.Energy.depleted(nn,:) = F; % Update progressbar progressbar(nn/(1*powersteps)); [AX1, AX2, A, B, C, D, E, F] = SplitStepDFG(power(nn),Param.t_steps,Param.t_FWHM,false,false); Axis.t_ns(nn,:) = AX1; Axis.z_mm(nn,:) = AX2; Signal.I.undepleted(nn,:,:) = A; Idler.I.undepleted(nn,:,:) = B; Pump.I.undepleted(nn,:,:) = C; Signal.Energy.undepleted(nn,:) = D; Idler.Energy.undepleted(nn,:) = E; Pump.Energy.undepleted(nn,:) = F; % Update progressbar progressbar(nn/powersteps); disp(['I am ' sprintf('%0.1f',nn/powersteps*100) '% done']); end disp(['I am done. It took ' sprintf('%0.2f',toc) ' seconds']); %save(['Workspace-',datestr(now, 'yyyy-mm-dd--HH-MM-SS')]); end
I am 10.0% done I am 20.0% done I am 30.0% done I am 40.0% done I am 50.0% done I am 60.0% done I am 70.0% done I am 80.0% done I am 90.0% done I am 100.0% done I am done. It took 567.30 seconds
Plot
if(setting.plot == true) RUNpowerPlotWaterfall; RUNpowerPlotPropagation; end