Calculations/ODT-Calculator/+Potentials/generateModulatedSingleGaussianBeamPotential.m

38 lines
1.4 KiB
Mathematica
Raw Normal View History

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