38 lines
1.4 KiB
Matlab
38 lines
1.4 KiB
Matlab
function U = generateModulatedSingleGaussianBeamPotential(positions, waists, P, options)
|
|
|
|
alpha = options.Polarizability;
|
|
wavelength = options.Wavelength;
|
|
mod_amp = options.ModulationAmplitude;
|
|
|
|
% Define constants
|
|
eps0 = 8.854187817e-12; % Permittivity of free space (F/m)
|
|
c = 299792458; % Speed of light in vacuum (m/s)
|
|
a0 = 5.29177210903e-11; % Bohr radius (m)
|
|
|
|
% Modulation amplitude
|
|
mod_amp = mod_amp * waists(1);
|
|
|
|
% Number of points in positions
|
|
n_points = length(positions(1, :));
|
|
|
|
% Calculate modulation function
|
|
[dx, x_mod] = Helpers.calculateModulationFunction(mod_amp, n_points, 'arccos');
|
|
|
|
% Calculate amplitude A
|
|
A = 2 * P ./ (pi * Calculator.calculateWaist(positions(2, :), waists(1), wavelength) .* Calculator.calculateWaist(positions(2, :), waists(2), wavelength));
|
|
|
|
% U_tilde constant term (same as before)
|
|
U_tilde = (1 / (2 * eps0 * c)) * alpha * (4 * pi * eps0 * a0^3);
|
|
|
|
% Initialize dU matrix
|
|
dU = zeros(2 * n_points, n_points);
|
|
|
|
% Compute dU values for each modulated x position
|
|
for i = 1:length(x_mod)
|
|
dU = [dU; exp(-2 * ((x_mod(i) - positions(1, :)) ./ Calculator.calculateWaist(positions(2, :), waists(1), wavelength)).^2)];
|
|
end
|
|
|
|
% Calculate the potential U using the trapezoidal rule for numerical integration
|
|
U = - U_tilde * A .* (1 / (2 * mod_amp)) .* trapz(dx, dU, 1); % Integration along the first dimension (axis=0)
|
|
end
|