New parameters, new analysis script to extract contrast and periodicity of the lattice.

This commit is contained in:
Karthik 2025-01-30 22:50:50 +01:00
parent 1d3cc0f70b
commit 9ac9b8476e
6 changed files with 1011 additions and 290 deletions

View File

@ -25,7 +25,7 @@ function plotLive2D(psi, Params, Transf, Observ, vrun)
set(plotxy, 'EdgeColor', 'none'); set(plotxy, 'EdgeColor', 'none');
cbar1 = colorbar; cbar1 = colorbar;
cbar1.Label.Interpreter = 'latex'; cbar1.Label.Interpreter = 'latex';
cbar1.Ticks = []; % Disable the ticks % cbar1.Ticks = []; % Disable the ticks
colormap(gca, 'parula') colormap(gca, 'parula')
% clim(ax1,[0.00,0.3]); % clim(ax1,[0.00,0.3]);
ylabel(cbar1,'$na_{dd}^2$','FontSize',16,'Rotation',270) ylabel(cbar1,'$na_{dd}^2$','FontSize',16,'Rotation',270)

View File

@ -0,0 +1,184 @@
function [contrast, periodX, periodY] = analyzeGSWavefunction(folder_path, run_index)
set(0,'defaulttextInterpreter','latex')
set(groot, 'defaultAxesTickLabelInterpreter','latex'); set(groot, 'defaultLegendInterpreter','latex');
% Load data
Data = load(sprintf(horzcat(folder_path, '/Run_%03i/psi_gs.mat'),run_index),'psi','Transf','Observ','Params','VParams');
Transf = Data.Transf;
Observ = Data.Observ;
Params = Data.Params;
VParams = Data.VParams;
if isgpuarray(Data.psi)
psi = gather(Data.psi);
else
psi = Data.psi;
end
if isgpuarray(Data.Observ.residual)
Observ.residual = gather(Data.Observ.residual);
else
Observ.residual = Data.Observ.residual;
end
% Set long format for output
format long
% Coordinates in micrometers
x = Transf.x * Params.l0;
y = Transf.y * Params.l0;
% Compute probability density |psi|^2
nxy = abs(psi).^2;
nxyScaled = nxy*(Params.add*10^6)^2;
%------------------ Calculate contrast ------------------ %
% Find unique maximum intensity values
uniqueMaxValues = unique(nxyScaled(nxyScaled == max(nxyScaled(:))));
if length(uniqueMaxValues) > 1
maxIntensity = median(uniqueMaxValues); % Choose the median of max values
else
maxIntensity = uniqueMaxValues; % If only one, take the unique value
end
% Find unique minimum intensity values
uniqueMinValues = unique(nxyScaled(nxyScaled == min(nxyScaled(:))));
if length(uniqueMinValues) > 1
minIntensity = median(uniqueMinValues); % Choose the median of min values
else
minIntensity = uniqueMinValues; % If only one, take the unique value
end
contrast = (maxIntensity - minIntensity) / (maxIntensity + minIntensity);
%------------------ Lattice Properties ------------------ %
% Apply 2D Fourier Transform
fftResult = fft2(double(nxyScaled));
fftMagnitude = abs(fftshift(fftResult)); % Shift zero frequency to center
% Get the size of the image
[Ny, Nx] = size(nxyScaled);
% Set the DC component to zero (ignore it)
fftMagnitude(Ny/2 + 1, Nx/2 + 1) = 0; % Assuming fftshift was used
% Calculate the sampling intervals (real-space distance)
dx = mean(diff(x)); % Sampling interval in the X direction
dy = mean(diff(y)); % Sampling interval in the Y direction
% Calculate wavenumber increment (frequency axes)
dkx = 1 / (Nx * dx); % Increment in the X direction (in micrometers^-1)
dky = 1 / (Ny * dy); % Increment in the Y direction (in micrometers^-1)
% Create the wavenumber axes
kx = (-Nx/2:Nx/2-1) * dkx; % Wavenumber axis in X (micrometers^-1)
ky = (-Ny/2:Ny/2-1) * dky; % Wavenumber axis in Y (micrometers^-1)
[G1, G2, reciprocalAngle, periodX, periodY] = extractLatticeProperties(fftMagnitude', kx, ky);
G1 = G1 * Params.l0;
G2 = G2 * Params.l0;
periodX = periodX/Params.l0;
periodY = periodY/Params.l0;
%------------------ Plotting ------------------ %
figure('Position', [100, 100, 1600, 800]);
clf
t = tiledlayout(1, 2, 'TileSpacing', 'compact', 'Padding', 'compact'); % 2x3 grid
% Plot |psi(x,y)|^2 (density in x and y plane)
nexttile; % Equivalent to subplot('Position', [0.05, 0.55, 0.28, 0.4]);
plotxy = pcolor(x/Params.l0,y/Params.l0,nxyScaled');
set(plotxy, 'EdgeColor', 'none');
cbar1 = colorbar;
cbar1.Label.Interpreter = 'latex';
colormap(gca, 'parula')
% clim(ax1,[0.00,0.3]);
ylabel(cbar1,'$na_{dd}^2$','FontSize',16,'Rotation',270)
xlabel('$x$ ($\mu$m)', 'Interpreter', 'latex', 'FontSize', 14)
ylabel('$y$ ($\mu$m)', 'Interpreter', 'latex', 'FontSize', 14)
title(['$|\Psi(x,y)|^2$ - Contrast: ', num2str(contrast, '%.3f'), '; Period X = ', num2str(periodX, '%.2f'), '$ \mu$m', '; Period Y = ', num2str(periodY, '%.2f'), '$ \mu$m'], 'Interpreter', 'latex', 'FontSize', 14)
% Plot 2-D FFT
nexttile; % Equivalent to subplot('Position', [0.05, 0.55, 0.28, 0.4]);
plotxy = pcolor(kx*Params.l0,ky*Params.l0,fftMagnitude');
set(plotxy, 'EdgeColor', 'none');
cbar1 = colorbar;
cbar1.Label.Interpreter = 'latex';
colormap(gca, 'parula')
% Overlay the reciprocal lattice vectors
hold on;
quiver(0, 0, G1(1), G1(2), 0, 'r', 'LineWidth', 2, 'MaxHeadSize', 1); % G1 vector
quiver(0, 0, G2(1), G2(2), 0, 'b', 'LineWidth', 2, 'MaxHeadSize', 1); % G2 vector
% Display the angle between the vectors
angleDeg = rad2deg(reciprocalAngle); % Convert the angle to degrees
midX = (G1(1) + G2(1)) / 2;
midY = (G1(2) + G2(2)) / 2;
% Add the angle text annotation to the plot
text(midX, midY, sprintf('Angle = %.2f deg', angleDeg), 'Color', 'white', 'FontSize', 16, 'FontWeight', 'bold');
hold off;
xlabel('$k_x l_o$', 'Interpreter', 'latex', 'FontSize', 14)
ylabel('$k_y l_o$', 'Interpreter', 'latex', 'FontSize', 14)
title('$\mathcal{F}\{|\Psi(x,y)|^2\}$', 'Interpreter', 'latex', 'FontSize', 16);
end
function [G1, G2, reciprocalAngle, periodX, periodY] = extractLatticeProperties(fftMagnitude, kx, ky)
% Define the index ranges for the positive side (first quadrant)
posX = kx > 0; % Positive kx
posY = ky > 0; % Positive ky
% Restrict the FFT magnitude to only the positive quadrant (kx > 0, ky > 0)
fftMagnitudePos = fftMagnitude(posY, posX);
% Find peaks in the Fourier domain using findpeaks
[peaks, peakIdx] = findpeaks(fftMagnitudePos(:)); % Find all peaks in the positive quadrant
[~, sortIdx] = sort(peaks, 'descend'); % Sort peaks in descending order
% Select the two largest distinct peaks
peakIdx1 = peakIdx(sortIdx(1)); % Index of the largest peak
peakIdx2 = peakIdx(sortIdx(2)); % Index of the second largest peak
% Convert peak indices to subscripts in the original FFT size
[peakY1, peakX1] = ind2sub(size(fftMagnitudePos), peakIdx1);
[peakY2, peakX2] = ind2sub(size(fftMagnitudePos), peakIdx2);
% Convert these subscripts back to the full FFT index space
peakY1 = find(posY, 1, 'first') + peakY1 - 1;
peakX1 = find(posX, 1, 'first') + peakX1 - 1;
peakY2 = find(posY, 1, 'first') + peakY2 - 1;
peakX2 = find(posX, 1, 'first') + peakX2 - 1;
% Extract the wavenumbers corresponding to the peaks
kx1 = kx(peakX1); ky1 = ky(peakY1);
kx2 = kx(peakX2); ky2 = ky(peakY2);
% Reciprocal lattice vectors
G1 = [kx1, ky1]; % Reciprocal lattice vector 1
G2 = [kx2, ky2]; % Reciprocal lattice vector 2
% Calculate the angle between the reciprocal lattice vectors using dot product
dotProduct = dot(G1, G2); % Dot product of G1 and G2
magnitudeG1 = norm(G1); % Magnitude of G1
magnitudeG2 = norm(G2); % Magnitude of G2
% Angle between the reciprocal lattice vectors (in radians)
reciprocalAngle = acos(dotProduct / (magnitudeG1 * magnitudeG2));
% Correct periodicity calculations (swap kx and ky for periodicity)
periodX = 1 / abs(kx1); % Periodicity along x-axis (use kx1)
periodY = 1 / abs(ky1); % Periodicity along y-axis (use ky1)
end

View File

@ -240,175 +240,33 @@ Plotter.visualizeGSWavefunction2D(SaveDirectory, JobNumber)
% Atom Number = 1.00e+05 % Atom Number = 1.00e+05
% System size = [10, 10] % System size = [10, 10]
%% v_z = 500, theta = 45: a_s = 85.17 % - Analysis
SaveDirectory = './Results/Data_TiltingOfDipoles';
OptionsStruct = struct; JobNumber = 5;
Plotter.visualizeGSWavefunction2D(SaveDirectory, JobNumber)
OptionsStruct.NumberOfAtoms = 1.00e+05; %% Tilting of the dipoles
OptionsStruct.DipolarPolarAngle = deg2rad(45); % Atom Number = 1.00e+05
OptionsStruct.DipolarAzimuthAngle = 0; % System size = [5 * l_rot, 5 * l_rot]
OptionsStruct.ScatteringLength = 75.00;
OptionsStruct.TrapFrequencies = [0, 0, 500];
OptionsStruct.TrapPotentialType = 'None';
OptionsStruct.NumberOfGridPoints = [128, 128];
OptionsStruct.Dimensions = [10, 10];
OptionsStruct.TimeStepSize = 0.005; % in s
OptionsStruct.MinimumTimeStepSize = 1E-5; % in s
OptionsStruct.TimeCutOff = 5E5; % in s
OptionsStruct.EnergyTolerance = 5E-10;
OptionsStruct.ResidualTolerance = 1E-05;
OptionsStruct.NoiseScaleFactor = 0.15;
OptionsStruct.MaxIterations = 10;
OptionsStruct.VariationalWidth = 1;
OptionsStruct.WidthLowerBound = 0.01;
OptionsStruct.WidthUpperBound = 12;
OptionsStruct.WidthCutoff = 5e-3;
OptionsStruct.PlotLive = true;
OptionsStruct.JobNumber = 4;
OptionsStruct.RunOnGPU = false;
OptionsStruct.SaveData = true;
OptionsStruct.SaveDirectory = './Results/Data_TiltingOfDipoles';
options = Helper.convertstruct2cell(OptionsStruct);
clear OptionsStruct
solver = VariationalSolver2D.DipolarGas(options{:});
pot = VariationalSolver2D.Potentials(options{:});
solver.Potential = pot.trap();
%-% Run Solver %-%
[Params, Transf, psi, V, VDk] = solver.run();
%% v_z = 500, theta = 65: a_s = 93.41
OptionsStruct = struct;
OptionsStruct.NumberOfAtoms = 1.00e+05;
OptionsStruct.DipolarPolarAngle = deg2rad(65);
OptionsStruct.DipolarAzimuthAngle = 0;
OptionsStruct.ScatteringLength = 81.00;
OptionsStruct.TrapFrequencies = [0, 0, 500];
OptionsStruct.TrapPotentialType = 'None';
OptionsStruct.NumberOfGridPoints = [128, 128];
OptionsStruct.Dimensions = [10, 10];
OptionsStruct.TimeStepSize = 0.0025; % in s
OptionsStruct.MinimumTimeStepSize = 1E-5; % in s
OptionsStruct.TimeCutOff = 5E5; % in s
OptionsStruct.EnergyTolerance = 5E-10;
OptionsStruct.ResidualTolerance = 1E-05;
OptionsStruct.NoiseScaleFactor = 0.15;
OptionsStruct.MaxIterations = 10;
OptionsStruct.VariationalWidth = 1;
OptionsStruct.WidthLowerBound = 0.01;
OptionsStruct.WidthUpperBound = 12;
OptionsStruct.WidthCutoff = 5e-3;
OptionsStruct.PlotLive = true;
OptionsStruct.JobNumber = 5;
OptionsStruct.RunOnGPU = false;
OptionsStruct.SaveData = true;
OptionsStruct.SaveDirectory = './Results/Data_TiltingOfDipoles';
options = Helper.convertstruct2cell(OptionsStruct);
clear OptionsStruct
solver = VariationalSolver2D.DipolarGas(options{:});
pot = VariationalSolver2D.Potentials(options{:});
solver.Potential = pot.trap();
%-% Run Solver %-%
[Params, Transf, psi, V, VDk] = solver.run();
%% v_z = 500, theta = 75: a_s = 98.11
OptionsStruct = struct;
OptionsStruct.NumberOfAtoms = 1.00e+05;
OptionsStruct.DipolarPolarAngle = deg2rad(75);
OptionsStruct.DipolarAzimuthAngle = 0;
OptionsStruct.ScatteringLength = 85.00;
OptionsStruct.TrapFrequencies = [0, 0, 500];
OptionsStruct.TrapPotentialType = 'None';
OptionsStruct.NumberOfGridPoints = [128, 128];
OptionsStruct.Dimensions = [10, 10];
OptionsStruct.TimeStepSize = 0.001; % in s
OptionsStruct.MinimumTimeStepSize = 1E-5; % in s
OptionsStruct.TimeCutOff = 5E5; % in s
OptionsStruct.EnergyTolerance = 5E-10;
OptionsStruct.ResidualTolerance = 1E-05;
OptionsStruct.NoiseScaleFactor = 0.05;
OptionsStruct.MaxIterations = 10;
OptionsStruct.VariationalWidth = 1;
OptionsStruct.WidthLowerBound = 0.01;
OptionsStruct.WidthUpperBound = 12;
OptionsStruct.WidthCutoff = 5e-3;
OptionsStruct.PlotLive = true;
OptionsStruct.JobNumber = 6;
OptionsStruct.RunOnGPU = false;
OptionsStruct.SaveData = true;
OptionsStruct.SaveDirectory = './Results/Data_TiltingOfDipoles';
options = Helper.convertstruct2cell(OptionsStruct);
clear OptionsStruct
solver = VariationalSolver2D.DipolarGas(options{:});
pot = VariationalSolver2D.Potentials(options{:});
solver.Potential = pot.trap();
%-% Run Solver %-%
[Params, Transf, psi, V, VDk] = solver.run();
%% v_z = 500, theta = 85: a_s = 102.56
OptionsStruct = struct;
OptionsStruct.NumberOfAtoms = 1.00e+05;
OptionsStruct.DipolarPolarAngle = deg2rad(85);
OptionsStruct.DipolarAzimuthAngle = 0;
OptionsStruct.ScatteringLength = 90.00;
OptionsStruct.TrapFrequencies = [0, 0, 500];
OptionsStruct.TrapPotentialType = 'None';
OptionsStruct.NumberOfGridPoints = [128, 128];
OptionsStruct.Dimensions = [10, 10];
OptionsStruct.TimeStepSize = 0.001; % in s
OptionsStruct.MinimumTimeStepSize = 1E-5; % in s
OptionsStruct.TimeCutOff = 5E5; % in s
OptionsStruct.EnergyTolerance = 5E-10;
OptionsStruct.ResidualTolerance = 1E-05;
OptionsStruct.NoiseScaleFactor = 0.05;
OptionsStruct.MaxIterations = 10;
OptionsStruct.VariationalWidth = 1;
OptionsStruct.WidthLowerBound = 0.01;
OptionsStruct.WidthUpperBound = 12;
OptionsStruct.WidthCutoff = 5e-3;
OptionsStruct.PlotLive = true;
OptionsStruct.JobNumber = 7;
OptionsStruct.RunOnGPU = false;
OptionsStruct.SaveData = true;
OptionsStruct.SaveDirectory = './Results/Data_TiltingOfDipoles';
options = Helper.convertstruct2cell(OptionsStruct);
clear OptionsStruct
solver = VariationalSolver2D.DipolarGas(options{:});
pot = VariationalSolver2D.Potentials(options{:});
solver.Potential = pot.trap();
%-% Run Solver %-%
[Params, Transf, psi, V, VDk] = solver.run();
%% - Analysis %% - Analysis
SaveDirectory = './Results/Data_TiltingOfDipoles'; SaveDirectory = './Results/Data_TiltingOfDipoles/AdjustedSystemSize/Hz500';
JobNumber = 4; JobNumber = 1;
% Plotter.visualizeGSWavefunction2D(SaveDirectory, JobNumber)
[contrast, periodicity] = Scripts.analyzeGSWavefunction(SaveDirectory, JobNumber);
%% - Analysis
SaveDirectory = './Results/Data_TiltingOfDipoles/AdjustedSystemSize/Hz750';
JobNumber = 1;
Plotter.visualizeGSWavefunction2D(SaveDirectory, JobNumber) Plotter.visualizeGSWavefunction2D(SaveDirectory, JobNumber)
%% - Analysis
SaveDirectory = './Results/Data_TiltingOfDipoles/AdjustedSystemSize/Hz1000';
JobNumber = 1;
Plotter.visualizeGSWavefunction2D(SaveDirectory, JobNumber)
%% - Analysis
SaveDirectory = './Results/Data_TiltingOfDipoles/AdjustedSystemSize/Hz2000';
JobNumber = 1;
Plotter.visualizeGSWavefunction2D(SaveDirectory, JobNumber)

View File

@ -1,11 +1,12 @@
%% Tilting of the dipoles %% Tilting of the dipoles
% Atom Number = 1.00e+05 % Atom Number = 1.00e+05
% System size = [10, 10] % System size = [5 * l_rot, 5 * l_rot]
%% v_z = 500, theta = 0: a_s = 76.41 %% v_z = 500, theta = 0: a_s = 76.41
OptionsStruct = struct; OptionsStruct = struct;
OptionsStruct.NumberOfAtoms = 1.00e+05; OptionsStruct.NumberOfAtoms = 101250;
OptionsStruct.DipolarPolarAngle = 0; OptionsStruct.DipolarPolarAngle = 0;
OptionsStruct.DipolarAzimuthAngle = 0; OptionsStruct.DipolarAzimuthAngle = 0;
OptionsStruct.ScatteringLength = 76.41; OptionsStruct.ScatteringLength = 76.41;
@ -14,7 +15,7 @@ OptionsStruct.TrapFrequencies = [0, 0, 500];
OptionsStruct.TrapPotentialType = 'None'; OptionsStruct.TrapPotentialType = 'None';
OptionsStruct.NumberOfGridPoints = [128, 128]; OptionsStruct.NumberOfGridPoints = [128, 128];
OptionsStruct.Dimensions = [10, 10]; OptionsStruct.Dimensions = [9, 9];
OptionsStruct.TimeStepSize = 0.005; % in s OptionsStruct.TimeStepSize = 0.005; % in s
OptionsStruct.MinimumTimeStepSize = 1E-5; % in s OptionsStruct.MinimumTimeStepSize = 1E-5; % in s
OptionsStruct.TimeCutOff = 2E6; % in s OptionsStruct.TimeCutOff = 2E6; % in s
@ -32,7 +33,7 @@ OptionsStruct.PlotLive = false;
OptionsStruct.JobNumber = 1; OptionsStruct.JobNumber = 1;
OptionsStruct.RunOnGPU = true; OptionsStruct.RunOnGPU = true;
OptionsStruct.SaveData = true; OptionsStruct.SaveData = true;
OptionsStruct.SaveDirectory = './Results/Data_TiltingOfDipoles'; OptionsStruct.SaveDirectory = './Results/Data_TiltingOfDipoles/AdjustedSystemSize/Hz500';
options = Helper.convertstruct2cell(OptionsStruct); options = Helper.convertstruct2cell(OptionsStruct);
clear OptionsStruct clear OptionsStruct
@ -47,7 +48,7 @@ solver.Potential = pot.trap();
OptionsStruct = struct; OptionsStruct = struct;
OptionsStruct.NumberOfAtoms = 1.00e+05; OptionsStruct.NumberOfAtoms = 101250;
OptionsStruct.DipolarPolarAngle = deg2rad(15); OptionsStruct.DipolarPolarAngle = deg2rad(15);
OptionsStruct.DipolarAzimuthAngle = 0; OptionsStruct.DipolarAzimuthAngle = 0;
OptionsStruct.ScatteringLength = 77.45; OptionsStruct.ScatteringLength = 77.45;
@ -56,7 +57,7 @@ OptionsStruct.TrapFrequencies = [0, 0, 500];
OptionsStruct.TrapPotentialType = 'None'; OptionsStruct.TrapPotentialType = 'None';
OptionsStruct.NumberOfGridPoints = [128, 128]; OptionsStruct.NumberOfGridPoints = [128, 128];
OptionsStruct.Dimensions = [10, 10]; OptionsStruct.Dimensions = [9, 9];
OptionsStruct.TimeStepSize = 0.005; % in s OptionsStruct.TimeStepSize = 0.005; % in s
OptionsStruct.MinimumTimeStepSize = 1E-5; % in s OptionsStruct.MinimumTimeStepSize = 1E-5; % in s
OptionsStruct.TimeCutOff = 2E6; % in s OptionsStruct.TimeCutOff = 2E6; % in s
@ -74,7 +75,7 @@ OptionsStruct.PlotLive = false;
OptionsStruct.JobNumber = 2; OptionsStruct.JobNumber = 2;
OptionsStruct.RunOnGPU = true; OptionsStruct.RunOnGPU = true;
OptionsStruct.SaveData = true; OptionsStruct.SaveData = true;
OptionsStruct.SaveDirectory = './Results/Data_TiltingOfDipoles'; OptionsStruct.SaveDirectory = './Results/Data_TiltingOfDipoles/AdjustedSystemSize/Hz500';
options = Helper.convertstruct2cell(OptionsStruct); options = Helper.convertstruct2cell(OptionsStruct);
clear OptionsStruct clear OptionsStruct
@ -85,20 +86,20 @@ solver.Potential = pot.trap();
%-% Run Solver %-% %-% Run Solver %-%
[Params, Transf, psi, V, VDk] = solver.run(); [Params, Transf, psi, V, VDk] = solver.run();
%% v_z = 500, theta = 25: a_s = 79.29 %% v_z = 750, theta = 0: a_s = 70.5
OptionsStruct = struct; OptionsStruct = struct;
OptionsStruct.NumberOfAtoms = 1.00e+05; OptionsStruct.NumberOfAtoms = 61250;
OptionsStruct.DipolarPolarAngle = deg2rad(25); OptionsStruct.DipolarPolarAngle = 0;
OptionsStruct.DipolarAzimuthAngle = 0; OptionsStruct.DipolarAzimuthAngle = 0;
OptionsStruct.ScatteringLength = 79.29; OptionsStruct.ScatteringLength = 70.5;
OptionsStruct.TrapFrequencies = [0, 0, 500]; OptionsStruct.TrapFrequencies = [0, 0, 750];
OptionsStruct.TrapPotentialType = 'None'; OptionsStruct.TrapPotentialType = 'None';
OptionsStruct.NumberOfGridPoints = [128, 128]; OptionsStruct.NumberOfGridPoints = [128, 128];
OptionsStruct.Dimensions = [10, 10]; OptionsStruct.Dimensions = [7, 7];
OptionsStruct.TimeStepSize = 0.005; % in s OptionsStruct.TimeStepSize = 0.005; % in s
OptionsStruct.MinimumTimeStepSize = 1E-5; % in s OptionsStruct.MinimumTimeStepSize = 1E-5; % in s
OptionsStruct.TimeCutOff = 2E6; % in s OptionsStruct.TimeCutOff = 2E6; % in s
@ -113,10 +114,10 @@ OptionsStruct.WidthUpperBound = 12;
OptionsStruct.WidthCutoff = 5e-3; OptionsStruct.WidthCutoff = 5e-3;
OptionsStruct.PlotLive = false; OptionsStruct.PlotLive = false;
OptionsStruct.JobNumber = 3; OptionsStruct.JobNumber = 1;
OptionsStruct.RunOnGPU = true; OptionsStruct.RunOnGPU = true;
OptionsStruct.SaveData = true; OptionsStruct.SaveData = true;
OptionsStruct.SaveDirectory = './Results/Data_TiltingOfDipoles'; OptionsStruct.SaveDirectory = './Results/Data_TiltingOfDipoles/AdjustedSystemSize/Hz750';
options = Helper.convertstruct2cell(OptionsStruct); options = Helper.convertstruct2cell(OptionsStruct);
clear OptionsStruct clear OptionsStruct
@ -127,122 +128,38 @@ solver.Potential = pot.trap();
%-% Run Solver %-% %-% Run Solver %-%
[Params, Transf, psi, V, VDk] = solver.run(); [Params, Transf, psi, V, VDk] = solver.run();
%% v_z = 500, theta = 45: a_s = 85.17 %% v_z = 750, theta = 15: a_s = 72.5
OptionsStruct = struct; OptionsStruct = struct;
OptionsStruct.NumberOfAtoms = 1.00e+05; OptionsStruct.NumberOfAtoms = 61250;
OptionsStruct.DipolarPolarAngle = deg2rad(45); OptionsStruct.DipolarPolarAngle = deg2rad(15);
OptionsStruct.DipolarAzimuthAngle = 0; OptionsStruct.DipolarAzimuthAngle = 0;
OptionsStruct.ScatteringLength = 75.00; OptionsStruct.ScatteringLength = 72.5;
OptionsStruct.TrapFrequencies = [0, 0, 500]; OptionsStruct.TrapFrequencies = [0, 0, 750];
OptionsStruct.TrapPotentialType = 'None'; OptionsStruct.TrapPotentialType = 'None';
OptionsStruct.NumberOfGridPoints = [128, 128]; OptionsStruct.NumberOfGridPoints = [128, 128];
OptionsStruct.Dimensions = [10, 10]; OptionsStruct.Dimensions = [7, 7];
OptionsStruct.TimeStepSize = 0.005; % in s OptionsStruct.TimeStepSize = 0.005; % in s
OptionsStruct.MinimumTimeStepSize = 1E-5; % in s OptionsStruct.MinimumTimeStepSize = 1E-5; % in s
OptionsStruct.TimeCutOff = 5E5; % in s OptionsStruct.TimeCutOff = 2E6; % in s
OptionsStruct.EnergyTolerance = 5E-10;
OptionsStruct.ResidualTolerance = 1E-05;
OptionsStruct.NoiseScaleFactor = 0.15;
OptionsStruct.MaxIterations = 10;
OptionsStruct.VariationalWidth = 1;
OptionsStruct.WidthLowerBound = 0.01;
OptionsStruct.WidthUpperBound = 12;
OptionsStruct.WidthCutoff = 5e-3;
OptionsStruct.PlotLive = false;
OptionsStruct.JobNumber = 4;
OptionsStruct.RunOnGPU = true;
OptionsStruct.SaveData = true;
OptionsStruct.SaveDirectory = './Results/Data_TiltingOfDipoles';
options = Helper.convertstruct2cell(OptionsStruct);
clear OptionsStruct
solver = VariationalSolver2D.DipolarGas(options{:});
pot = VariationalSolver2D.Potentials(options{:});
solver.Potential = pot.trap();
%-% Run Solver %-%
[Params, Transf, psi, V, VDk] = solver.run();
%% v_z = 500, theta = 65: a_s = 93.41
OptionsStruct = struct;
OptionsStruct.NumberOfAtoms = 1.00e+05;
OptionsStruct.DipolarPolarAngle = deg2rad(65);
OptionsStruct.DipolarAzimuthAngle = 0;
OptionsStruct.ScatteringLength = 81.00;
OptionsStruct.TrapFrequencies = [0, 0, 500];
OptionsStruct.TrapPotentialType = 'None';
OptionsStruct.NumberOfGridPoints = [128, 128];
OptionsStruct.Dimensions = [10, 10];
OptionsStruct.TimeStepSize = 0.0025; % in s
OptionsStruct.MinimumTimeStepSize = 1E-5; % in s
OptionsStruct.TimeCutOff = 5E5; % in s
OptionsStruct.EnergyTolerance = 5E-10;
OptionsStruct.ResidualTolerance = 1E-05;
OptionsStruct.NoiseScaleFactor = 0.15;
OptionsStruct.MaxIterations = 10;
OptionsStruct.VariationalWidth = 1;
OptionsStruct.WidthLowerBound = 0.01;
OptionsStruct.WidthUpperBound = 12;
OptionsStruct.WidthCutoff = 5e-3;
OptionsStruct.PlotLive = false;
OptionsStruct.JobNumber = 5;
OptionsStruct.RunOnGPU = true;
OptionsStruct.SaveData = true;
OptionsStruct.SaveDirectory = './Results/Data_TiltingOfDipoles';
options = Helper.convertstruct2cell(OptionsStruct);
clear OptionsStruct
solver = VariationalSolver2D.DipolarGas(options{:});
pot = VariationalSolver2D.Potentials(options{:});
solver.Potential = pot.trap();
%-% Run Solver %-%
[Params, Transf, psi, V, VDk] = solver.run();
%% v_z = 500, theta = 75: a_s = 98.11
OptionsStruct = struct;
OptionsStruct.NumberOfAtoms = 1.00e+05;
OptionsStruct.DipolarPolarAngle = deg2rad(75);
OptionsStruct.DipolarAzimuthAngle = 0;
OptionsStruct.ScatteringLength = 85.00;
OptionsStruct.TrapFrequencies = [0, 0, 500];
OptionsStruct.TrapPotentialType = 'None';
OptionsStruct.NumberOfGridPoints = [128, 128];
OptionsStruct.Dimensions = [10, 10];
OptionsStruct.TimeStepSize = 0.001; % in s
OptionsStruct.MinimumTimeStepSize = 1E-5; % in s
OptionsStruct.TimeCutOff = 5E5; % in s
OptionsStruct.EnergyTolerance = 5E-10; OptionsStruct.EnergyTolerance = 5E-10;
OptionsStruct.ResidualTolerance = 1E-05; OptionsStruct.ResidualTolerance = 1E-05;
OptionsStruct.NoiseScaleFactor = 0.05; OptionsStruct.NoiseScaleFactor = 0.05;
OptionsStruct.MaxIterations = 10; OptionsStruct.MaxIterations = 10;
OptionsStruct.VariationalWidth = 1; OptionsStruct.VariationalWidth = 2;
OptionsStruct.WidthLowerBound = 0.01; OptionsStruct.WidthLowerBound = 0.01;
OptionsStruct.WidthUpperBound = 12; OptionsStruct.WidthUpperBound = 12;
OptionsStruct.WidthCutoff = 5e-3; OptionsStruct.WidthCutoff = 5e-3;
OptionsStruct.PlotLive = false; OptionsStruct.PlotLive = false;
OptionsStruct.JobNumber = 6; OptionsStruct.JobNumber = 2;
OptionsStruct.RunOnGPU = true; OptionsStruct.RunOnGPU = true;
OptionsStruct.SaveData = true; OptionsStruct.SaveData = true;
OptionsStruct.SaveDirectory = './Results/Data_TiltingOfDipoles'; OptionsStruct.SaveDirectory = './Results/Data_TiltingOfDipoles/AdjustedSystemSize/Hz750';
options = Helper.convertstruct2cell(OptionsStruct); options = Helper.convertstruct2cell(OptionsStruct);
clear OptionsStruct clear OptionsStruct
@ -253,38 +170,164 @@ solver.Potential = pot.trap();
%-% Run Solver %-% %-% Run Solver %-%
[Params, Transf, psi, V, VDk] = solver.run(); [Params, Transf, psi, V, VDk] = solver.run();
%% v_z = 500, theta = 85: a_s = 102.56 %% v_z = 1000, theta = 0: a_s = 65.95
OptionsStruct = struct; OptionsStruct = struct;
OptionsStruct.NumberOfAtoms = 1.00e+05; OptionsStruct.NumberOfAtoms = 45000;
OptionsStruct.DipolarPolarAngle = deg2rad(85); OptionsStruct.DipolarPolarAngle = 0;
OptionsStruct.DipolarAzimuthAngle = 0; OptionsStruct.DipolarAzimuthAngle = 0;
OptionsStruct.ScatteringLength = 90.00; OptionsStruct.ScatteringLength = 65.95;
OptionsStruct.TrapFrequencies = [0, 0, 500]; OptionsStruct.TrapFrequencies = [0, 0, 1000];
OptionsStruct.TrapPotentialType = 'None'; OptionsStruct.TrapPotentialType = 'None';
OptionsStruct.NumberOfGridPoints = [128, 128]; OptionsStruct.NumberOfGridPoints = [128, 128];
OptionsStruct.Dimensions = [10, 10]; OptionsStruct.Dimensions = [6, 6];
OptionsStruct.TimeStepSize = 0.001; % in s OptionsStruct.TimeStepSize = 0.005; % in s
OptionsStruct.MinimumTimeStepSize = 1E-5; % in s OptionsStruct.MinimumTimeStepSize = 1E-5; % in s
OptionsStruct.TimeCutOff = 5E5; % in s OptionsStruct.TimeCutOff = 2E6; % in s
OptionsStruct.EnergyTolerance = 5E-10; OptionsStruct.EnergyTolerance = 5E-10;
OptionsStruct.ResidualTolerance = 1E-05; OptionsStruct.ResidualTolerance = 1E-05;
OptionsStruct.NoiseScaleFactor = 0.05; OptionsStruct.NoiseScaleFactor = 0.05;
OptionsStruct.MaxIterations = 10; OptionsStruct.MaxIterations = 10;
OptionsStruct.VariationalWidth = 1; OptionsStruct.VariationalWidth = 2;
OptionsStruct.WidthLowerBound = 0.01; OptionsStruct.WidthLowerBound = 0.01;
OptionsStruct.WidthUpperBound = 12; OptionsStruct.WidthUpperBound = 12;
OptionsStruct.WidthCutoff = 5e-3; OptionsStruct.WidthCutoff = 5e-3;
OptionsStruct.PlotLive = false; OptionsStruct.PlotLive = false;
OptionsStruct.JobNumber = 7; OptionsStruct.JobNumber = 1;
OptionsStruct.RunOnGPU = true; OptionsStruct.RunOnGPU = true;
OptionsStruct.SaveData = true; OptionsStruct.SaveData = true;
OptionsStruct.SaveDirectory = './Results/Data_TiltingOfDipoles'; OptionsStruct.SaveDirectory = './Results/Data_TiltingOfDipoles/AdjustedSystemSize/Hz1000';
options = Helper.convertstruct2cell(OptionsStruct);
clear OptionsStruct
solver = VariationalSolver2D.DipolarGas(options{:});
pot = VariationalSolver2D.Potentials(options{:});
solver.Potential = pot.trap();
%-% Run Solver %-%
[Params, Transf, psi, V, VDk] = solver.run();
%% v_z = 1000, theta = 15: a_s = 67.25
OptionsStruct = struct;
OptionsStruct.NumberOfAtoms = 45000;
OptionsStruct.DipolarPolarAngle = deg2rad(15);
OptionsStruct.DipolarAzimuthAngle = 0;
OptionsStruct.ScatteringLength = 67.25;
OptionsStruct.TrapFrequencies = [0, 0, 1000];
OptionsStruct.TrapPotentialType = 'None';
OptionsStruct.NumberOfGridPoints = [128, 128];
OptionsStruct.Dimensions = [6, 6];
OptionsStruct.TimeStepSize = 0.005; % in s
OptionsStruct.MinimumTimeStepSize = 1E-5; % in s
OptionsStruct.TimeCutOff = 2E6; % in s
OptionsStruct.EnergyTolerance = 5E-10;
OptionsStruct.ResidualTolerance = 1E-05;
OptionsStruct.NoiseScaleFactor = 0.05;
OptionsStruct.MaxIterations = 10;
OptionsStruct.VariationalWidth = 2;
OptionsStruct.WidthLowerBound = 0.01;
OptionsStruct.WidthUpperBound = 12;
OptionsStruct.WidthCutoff = 5e-3;
OptionsStruct.PlotLive = false;
OptionsStruct.JobNumber = 2;
OptionsStruct.RunOnGPU = true;
OptionsStruct.SaveData = true;
OptionsStruct.SaveDirectory = './Results/Data_TiltingOfDipoles/AdjustedSystemSize/Hz1000';
options = Helper.convertstruct2cell(OptionsStruct);
clear OptionsStruct
solver = VariationalSolver2D.DipolarGas(options{:});
pot = VariationalSolver2D.Potentials(options{:});
solver.Potential = pot.trap();
%-% Run Solver %-%
[Params, Transf, psi, V, VDk] = solver.run();
%% v_z = 2000, theta = 0: a_s = 54.90
OptionsStruct = struct;
OptionsStruct.NumberOfAtoms = 31250;
OptionsStruct.DipolarPolarAngle = 0;
OptionsStruct.DipolarAzimuthAngle = 0;
OptionsStruct.ScatteringLength = 54.90;
OptionsStruct.TrapFrequencies = [0, 0, 2000];
OptionsStruct.TrapPotentialType = 'None';
OptionsStruct.NumberOfGridPoints = [128, 128];
OptionsStruct.Dimensions = [5, 5];
OptionsStruct.TimeStepSize = 0.005; % in s
OptionsStruct.MinimumTimeStepSize = 1E-5; % in s
OptionsStruct.TimeCutOff = 2E6; % in s
OptionsStruct.EnergyTolerance = 5E-10;
OptionsStruct.ResidualTolerance = 1E-05;
OptionsStruct.NoiseScaleFactor = 0.05;
OptionsStruct.MaxIterations = 10;
OptionsStruct.VariationalWidth = 2;
OptionsStruct.WidthLowerBound = 0.01;
OptionsStruct.WidthUpperBound = 12;
OptionsStruct.WidthCutoff = 5e-3;
OptionsStruct.PlotLive = false;
OptionsStruct.JobNumber = 1;
OptionsStruct.RunOnGPU = true;
OptionsStruct.SaveData = true;
OptionsStruct.SaveDirectory = './Results/Data_TiltingOfDipoles/AdjustedSystemSize/Hz2000';
options = Helper.convertstruct2cell(OptionsStruct);
clear OptionsStruct
solver = VariationalSolver2D.DipolarGas(options{:});
pot = VariationalSolver2D.Potentials(options{:});
solver.Potential = pot.trap();
%-% Run Solver %-%
[Params, Transf, psi, V, VDk] = solver.run();
%% v_z = 2000, theta = 15: a_s = 55.5
OptionsStruct = struct;
OptionsStruct.NumberOfAtoms = 31250;
OptionsStruct.DipolarPolarAngle = deg2rad(15);
OptionsStruct.DipolarAzimuthAngle = 0;
OptionsStruct.ScatteringLength = 55.5;
OptionsStruct.TrapFrequencies = [0, 0, 2000];
OptionsStruct.TrapPotentialType = 'None';
OptionsStruct.NumberOfGridPoints = [128, 128];
OptionsStruct.Dimensions = [5, 5];
OptionsStruct.TimeStepSize = 0.005; % in s
OptionsStruct.MinimumTimeStepSize = 1E-5; % in s
OptionsStruct.TimeCutOff = 2E6; % in s
OptionsStruct.EnergyTolerance = 5E-10;
OptionsStruct.ResidualTolerance = 1E-05;
OptionsStruct.NoiseScaleFactor = 0.05;
OptionsStruct.MaxIterations = 10;
OptionsStruct.VariationalWidth = 2;
OptionsStruct.WidthLowerBound = 0.01;
OptionsStruct.WidthUpperBound = 12;
OptionsStruct.WidthCutoff = 5e-3;
OptionsStruct.PlotLive = false;
OptionsStruct.JobNumber = 2;
OptionsStruct.RunOnGPU = true;
OptionsStruct.SaveData = true;
OptionsStruct.SaveDirectory = './Results/Data_TiltingOfDipoles/AdjustedSystemSize/Hz2000';
options = Helper.convertstruct2cell(OptionsStruct); options = Helper.convertstruct2cell(OptionsStruct);
clear OptionsStruct clear OptionsStruct

View File

@ -0,0 +1,339 @@
%% Tilting of the dipoles
% Atom Number = 1.00e+05
% System size = [5 * l_rot, 5 * l_rot]
%% v_z = 500, theta = 0: a_s = 76.41
OptionsStruct = struct;
OptionsStruct.NumberOfAtoms = 101250;
OptionsStruct.DipolarPolarAngle = 0;
OptionsStruct.DipolarAzimuthAngle = 0;
OptionsStruct.ScatteringLength = 76.41;
OptionsStruct.TrapFrequencies = [0, 0, 500];
OptionsStruct.TrapPotentialType = 'None';
OptionsStruct.NumberOfGridPoints = [128, 128];
OptionsStruct.Dimensions = [9, 9];
OptionsStruct.TimeStepSize = 0.005; % in s
OptionsStruct.MinimumTimeStepSize = 1E-5; % in s
OptionsStruct.TimeCutOff = 2E6; % in s
OptionsStruct.EnergyTolerance = 5E-10;
OptionsStruct.ResidualTolerance = 1E-05;
OptionsStruct.NoiseScaleFactor = 0.05;
OptionsStruct.MaxIterations = 10;
OptionsStruct.VariationalWidth = 2;
OptionsStruct.WidthLowerBound = 0.01;
OptionsStruct.WidthUpperBound = 12;
OptionsStruct.WidthCutoff = 5e-3;
OptionsStruct.PlotLive = false;
OptionsStruct.JobNumber = 1;
OptionsStruct.RunOnGPU = true;
OptionsStruct.SaveData = true;
OptionsStruct.SaveDirectory = './Results/Data_TiltingOfDipoles/AdjustedSystemSize/Hz500';
options = Helper.convertstruct2cell(OptionsStruct);
clear OptionsStruct
solver = VariationalSolver2D.DipolarGas(options{:});
pot = VariationalSolver2D.Potentials(options{:});
solver.Potential = pot.trap();
%-% Run Solver %-%
[Params, Transf, psi, V, VDk] = solver.run();
%% v_z = 500, theta = 15: a_s = 77.45
OptionsStruct = struct;
OptionsStruct.NumberOfAtoms = 101250;
OptionsStruct.DipolarPolarAngle = deg2rad(15);
OptionsStruct.DipolarAzimuthAngle = 0;
OptionsStruct.ScatteringLength = 77.45;
OptionsStruct.TrapFrequencies = [0, 0, 500];
OptionsStruct.TrapPotentialType = 'None';
OptionsStruct.NumberOfGridPoints = [128, 128];
OptionsStruct.Dimensions = [9, 9];
OptionsStruct.TimeStepSize = 0.005; % in s
OptionsStruct.MinimumTimeStepSize = 1E-5; % in s
OptionsStruct.TimeCutOff = 2E6; % in s
OptionsStruct.EnergyTolerance = 5E-10;
OptionsStruct.ResidualTolerance = 1E-05;
OptionsStruct.NoiseScaleFactor = 0.05;
OptionsStruct.MaxIterations = 10;
OptionsStruct.VariationalWidth = 2;
OptionsStruct.WidthLowerBound = 0.01;
OptionsStruct.WidthUpperBound = 12;
OptionsStruct.WidthCutoff = 5e-3;
OptionsStruct.PlotLive = false;
OptionsStruct.JobNumber = 2;
OptionsStruct.RunOnGPU = true;
OptionsStruct.SaveData = true;
OptionsStruct.SaveDirectory = './Results/Data_TiltingOfDipoles/AdjustedSystemSize/Hz500';
options = Helper.convertstruct2cell(OptionsStruct);
clear OptionsStruct
solver = VariationalSolver2D.DipolarGas(options{:});
pot = VariationalSolver2D.Potentials(options{:});
solver.Potential = pot.trap();
%-% Run Solver %-%
[Params, Transf, psi, V, VDk] = solver.run();
%% v_z = 750, theta = 0: a_s = 70.5
OptionsStruct = struct;
OptionsStruct.NumberOfAtoms = 61250;
OptionsStruct.DipolarPolarAngle = 0;
OptionsStruct.DipolarAzimuthAngle = 0;
OptionsStruct.ScatteringLength = 70.5;
OptionsStruct.TrapFrequencies = [0, 0, 750];
OptionsStruct.TrapPotentialType = 'None';
OptionsStruct.NumberOfGridPoints = [128, 128];
OptionsStruct.Dimensions = [7, 7];
OptionsStruct.TimeStepSize = 0.005; % in s
OptionsStruct.MinimumTimeStepSize = 1E-5; % in s
OptionsStruct.TimeCutOff = 2E6; % in s
OptionsStruct.EnergyTolerance = 5E-10;
OptionsStruct.ResidualTolerance = 1E-05;
OptionsStruct.NoiseScaleFactor = 0.05;
OptionsStruct.MaxIterations = 10;
OptionsStruct.VariationalWidth = 2;
OptionsStruct.WidthLowerBound = 0.01;
OptionsStruct.WidthUpperBound = 12;
OptionsStruct.WidthCutoff = 5e-3;
OptionsStruct.PlotLive = false;
OptionsStruct.JobNumber = 1;
OptionsStruct.RunOnGPU = true;
OptionsStruct.SaveData = true;
OptionsStruct.SaveDirectory = './Results/Data_TiltingOfDipoles/AdjustedSystemSize/Hz750';
options = Helper.convertstruct2cell(OptionsStruct);
clear OptionsStruct
solver = VariationalSolver2D.DipolarGas(options{:});
pot = VariationalSolver2D.Potentials(options{:});
solver.Potential = pot.trap();
%-% Run Solver %-%
[Params, Transf, psi, V, VDk] = solver.run();
%% v_z = 750, theta = 15: a_s = 72.5
OptionsStruct = struct;
OptionsStruct.NumberOfAtoms = 61250;
OptionsStruct.DipolarPolarAngle = deg2rad(15);
OptionsStruct.DipolarAzimuthAngle = 0;
OptionsStruct.ScatteringLength = 72.5;
OptionsStruct.TrapFrequencies = [0, 0, 750];
OptionsStruct.TrapPotentialType = 'None';
OptionsStruct.NumberOfGridPoints = [128, 128];
OptionsStruct.Dimensions = [7, 7];
OptionsStruct.TimeStepSize = 0.005; % in s
OptionsStruct.MinimumTimeStepSize = 1E-5; % in s
OptionsStruct.TimeCutOff = 2E6; % in s
OptionsStruct.EnergyTolerance = 5E-10;
OptionsStruct.ResidualTolerance = 1E-05;
OptionsStruct.NoiseScaleFactor = 0.05;
OptionsStruct.MaxIterations = 10;
OptionsStruct.VariationalWidth = 2;
OptionsStruct.WidthLowerBound = 0.01;
OptionsStruct.WidthUpperBound = 12;
OptionsStruct.WidthCutoff = 5e-3;
OptionsStruct.PlotLive = false;
OptionsStruct.JobNumber = 2;
OptionsStruct.RunOnGPU = true;
OptionsStruct.SaveData = true;
OptionsStruct.SaveDirectory = './Results/Data_TiltingOfDipoles/AdjustedSystemSize/Hz750';
options = Helper.convertstruct2cell(OptionsStruct);
clear OptionsStruct
solver = VariationalSolver2D.DipolarGas(options{:});
pot = VariationalSolver2D.Potentials(options{:});
solver.Potential = pot.trap();
%-% Run Solver %-%
[Params, Transf, psi, V, VDk] = solver.run();
%% v_z = 1000, theta = 0: a_s = 65.95
OptionsStruct = struct;
OptionsStruct.NumberOfAtoms = 45000;
OptionsStruct.DipolarPolarAngle = 0;
OptionsStruct.DipolarAzimuthAngle = 0;
OptionsStruct.ScatteringLength = 65.95;
OptionsStruct.TrapFrequencies = [0, 0, 1000];
OptionsStruct.TrapPotentialType = 'None';
OptionsStruct.NumberOfGridPoints = [128, 128];
OptionsStruct.Dimensions = [6, 6];
OptionsStruct.TimeStepSize = 0.005; % in s
OptionsStruct.MinimumTimeStepSize = 1E-5; % in s
OptionsStruct.TimeCutOff = 2E6; % in s
OptionsStruct.EnergyTolerance = 5E-10;
OptionsStruct.ResidualTolerance = 1E-05;
OptionsStruct.NoiseScaleFactor = 0.05;
OptionsStruct.MaxIterations = 10;
OptionsStruct.VariationalWidth = 2;
OptionsStruct.WidthLowerBound = 0.01;
OptionsStruct.WidthUpperBound = 12;
OptionsStruct.WidthCutoff = 5e-3;
OptionsStruct.PlotLive = false;
OptionsStruct.JobNumber = 1;
OptionsStruct.RunOnGPU = true;
OptionsStruct.SaveData = true;
OptionsStruct.SaveDirectory = './Results/Data_TiltingOfDipoles/AdjustedSystemSize/Hz1000';
options = Helper.convertstruct2cell(OptionsStruct);
clear OptionsStruct
solver = VariationalSolver2D.DipolarGas(options{:});
pot = VariationalSolver2D.Potentials(options{:});
solver.Potential = pot.trap();
%-% Run Solver %-%
[Params, Transf, psi, V, VDk] = solver.run();
%% v_z = 1000, theta = 15: a_s = 67.25
OptionsStruct = struct;
OptionsStruct.NumberOfAtoms = 45000;
OptionsStruct.DipolarPolarAngle = deg2rad(15);
OptionsStruct.DipolarAzimuthAngle = 0;
OptionsStruct.ScatteringLength = 67.25;
OptionsStruct.TrapFrequencies = [0, 0, 1000];
OptionsStruct.TrapPotentialType = 'None';
OptionsStruct.NumberOfGridPoints = [128, 128];
OptionsStruct.Dimensions = [6, 6];
OptionsStruct.TimeStepSize = 0.005; % in s
OptionsStruct.MinimumTimeStepSize = 1E-5; % in s
OptionsStruct.TimeCutOff = 2E6; % in s
OptionsStruct.EnergyTolerance = 5E-10;
OptionsStruct.ResidualTolerance = 1E-05;
OptionsStruct.NoiseScaleFactor = 0.05;
OptionsStruct.MaxIterations = 10;
OptionsStruct.VariationalWidth = 2;
OptionsStruct.WidthLowerBound = 0.01;
OptionsStruct.WidthUpperBound = 12;
OptionsStruct.WidthCutoff = 5e-3;
OptionsStruct.PlotLive = false;
OptionsStruct.JobNumber = 2;
OptionsStruct.RunOnGPU = true;
OptionsStruct.SaveData = true;
OptionsStruct.SaveDirectory = './Results/Data_TiltingOfDipoles/AdjustedSystemSize/Hz1000';
options = Helper.convertstruct2cell(OptionsStruct);
clear OptionsStruct
solver = VariationalSolver2D.DipolarGas(options{:});
pot = VariationalSolver2D.Potentials(options{:});
solver.Potential = pot.trap();
%-% Run Solver %-%
[Params, Transf, psi, V, VDk] = solver.run();
%% v_z = 2000, theta = 0: a_s = 54.90
OptionsStruct = struct;
OptionsStruct.NumberOfAtoms = 31250;
OptionsStruct.DipolarPolarAngle = 0;
OptionsStruct.DipolarAzimuthAngle = 0;
OptionsStruct.ScatteringLength = 54.90;
OptionsStruct.TrapFrequencies = [0, 0, 2000];
OptionsStruct.TrapPotentialType = 'None';
OptionsStruct.NumberOfGridPoints = [128, 128];
OptionsStruct.Dimensions = [5, 5];
OptionsStruct.TimeStepSize = 0.005; % in s
OptionsStruct.MinimumTimeStepSize = 1E-5; % in s
OptionsStruct.TimeCutOff = 2E6; % in s
OptionsStruct.EnergyTolerance = 5E-10;
OptionsStruct.ResidualTolerance = 1E-05;
OptionsStruct.NoiseScaleFactor = 0.05;
OptionsStruct.MaxIterations = 10;
OptionsStruct.VariationalWidth = 2;
OptionsStruct.WidthLowerBound = 0.01;
OptionsStruct.WidthUpperBound = 12;
OptionsStruct.WidthCutoff = 5e-3;
OptionsStruct.PlotLive = false;
OptionsStruct.JobNumber = 1;
OptionsStruct.RunOnGPU = true;
OptionsStruct.SaveData = true;
OptionsStruct.SaveDirectory = './Results/Data_TiltingOfDipoles/AdjustedSystemSize/Hz2000';
options = Helper.convertstruct2cell(OptionsStruct);
clear OptionsStruct
solver = VariationalSolver2D.DipolarGas(options{:});
pot = VariationalSolver2D.Potentials(options{:});
solver.Potential = pot.trap();
%-% Run Solver %-%
[Params, Transf, psi, V, VDk] = solver.run();
%% v_z = 2000, theta = 15: a_s = 55.5
OptionsStruct = struct;
OptionsStruct.NumberOfAtoms = 31250;
OptionsStruct.DipolarPolarAngle = deg2rad(15);
OptionsStruct.DipolarAzimuthAngle = 0;
OptionsStruct.ScatteringLength = 55.5;
OptionsStruct.TrapFrequencies = [0, 0, 2000];
OptionsStruct.TrapPotentialType = 'None';
OptionsStruct.NumberOfGridPoints = [128, 128];
OptionsStruct.Dimensions = [5, 5];
OptionsStruct.TimeStepSize = 0.005; % in s
OptionsStruct.MinimumTimeStepSize = 1E-5; % in s
OptionsStruct.TimeCutOff = 2E6; % in s
OptionsStruct.EnergyTolerance = 5E-10;
OptionsStruct.ResidualTolerance = 1E-05;
OptionsStruct.NoiseScaleFactor = 0.05;
OptionsStruct.MaxIterations = 10;
OptionsStruct.VariationalWidth = 2;
OptionsStruct.WidthLowerBound = 0.01;
OptionsStruct.WidthUpperBound = 12;
OptionsStruct.WidthCutoff = 5e-3;
OptionsStruct.PlotLive = false;
OptionsStruct.JobNumber = 2;
OptionsStruct.RunOnGPU = true;
OptionsStruct.SaveData = true;
OptionsStruct.SaveDirectory = './Results/Data_TiltingOfDipoles/AdjustedSystemSize/Hz2000';
options = Helper.convertstruct2cell(OptionsStruct);
clear OptionsStruct
solver = VariationalSolver2D.DipolarGas(options{:});
pot = VariationalSolver2D.Potentials(options{:});
solver.Potential = pot.trap();
%-% Run Solver %-%
[Params, Transf, psi, V, VDk] = solver.run();

View File

@ -0,0 +1,297 @@
%% Tilting of the dipoles
% Atom Number = 1.00e+05
% System size = [10, 10]
%% v_z = 500, theta = 0: a_s = 76.41
OptionsStruct = struct;
OptionsStruct.NumberOfAtoms = 1.00e+05;
OptionsStruct.DipolarPolarAngle = 0;
OptionsStruct.DipolarAzimuthAngle = 0;
OptionsStruct.ScatteringLength = 76.41;
OptionsStruct.TrapFrequencies = [0, 0, 500];
OptionsStruct.TrapPotentialType = 'None';
OptionsStruct.NumberOfGridPoints = [128, 128];
OptionsStruct.Dimensions = [10, 10];
OptionsStruct.TimeStepSize = 0.005; % in s
OptionsStruct.MinimumTimeStepSize = 1E-5; % in s
OptionsStruct.TimeCutOff = 2E6; % in s
OptionsStruct.EnergyTolerance = 5E-10;
OptionsStruct.ResidualTolerance = 1E-05;
OptionsStruct.NoiseScaleFactor = 0.05;
OptionsStruct.MaxIterations = 10;
OptionsStruct.VariationalWidth = 2;
OptionsStruct.WidthLowerBound = 0.01;
OptionsStruct.WidthUpperBound = 12;
OptionsStruct.WidthCutoff = 5e-3;
OptionsStruct.PlotLive = false;
OptionsStruct.JobNumber = 1;
OptionsStruct.RunOnGPU = true;
OptionsStruct.SaveData = true;
OptionsStruct.SaveDirectory = './Results/Data_TiltingOfDipoles/SystemSize100squm/Hz500';
options = Helper.convertstruct2cell(OptionsStruct);
clear OptionsStruct
solver = VariationalSolver2D.DipolarGas(options{:});
pot = VariationalSolver2D.Potentials(options{:});
solver.Potential = pot.trap();
%-% Run Solver %-%
[Params, Transf, psi, V, VDk] = solver.run();
%% v_z = 500, theta = 15: a_s = 77.45
OptionsStruct = struct;
OptionsStruct.NumberOfAtoms = 1.00e+05;
OptionsStruct.DipolarPolarAngle = deg2rad(15);
OptionsStruct.DipolarAzimuthAngle = 0;
OptionsStruct.ScatteringLength = 77.45;
OptionsStruct.TrapFrequencies = [0, 0, 500];
OptionsStruct.TrapPotentialType = 'None';
OptionsStruct.NumberOfGridPoints = [128, 128];
OptionsStruct.Dimensions = [10, 10];
OptionsStruct.TimeStepSize = 0.005; % in s
OptionsStruct.MinimumTimeStepSize = 1E-5; % in s
OptionsStruct.TimeCutOff = 2E6; % in s
OptionsStruct.EnergyTolerance = 5E-10;
OptionsStruct.ResidualTolerance = 1E-05;
OptionsStruct.NoiseScaleFactor = 0.05;
OptionsStruct.MaxIterations = 10;
OptionsStruct.VariationalWidth = 2;
OptionsStruct.WidthLowerBound = 0.01;
OptionsStruct.WidthUpperBound = 12;
OptionsStruct.WidthCutoff = 5e-3;
OptionsStruct.PlotLive = false;
OptionsStruct.JobNumber = 2;
OptionsStruct.RunOnGPU = true;
OptionsStruct.SaveData = true;
OptionsStruct.SaveDirectory = './Results/Data_TiltingOfDipoles/SystemSize100squm/Hz500';
options = Helper.convertstruct2cell(OptionsStruct);
clear OptionsStruct
solver = VariationalSolver2D.DipolarGas(options{:});
pot = VariationalSolver2D.Potentials(options{:});
solver.Potential = pot.trap();
%-% Run Solver %-%
[Params, Transf, psi, V, VDk] = solver.run();
%% v_z = 500, theta = 25: a_s = 79.29
OptionsStruct = struct;
OptionsStruct.NumberOfAtoms = 1.00e+05;
OptionsStruct.DipolarPolarAngle = deg2rad(25);
OptionsStruct.DipolarAzimuthAngle = 0;
OptionsStruct.ScatteringLength = 79.29;
OptionsStruct.TrapFrequencies = [0, 0, 500];
OptionsStruct.TrapPotentialType = 'None';
OptionsStruct.NumberOfGridPoints = [128, 128];
OptionsStruct.Dimensions = [10, 10];
OptionsStruct.TimeStepSize = 0.005; % in s
OptionsStruct.MinimumTimeStepSize = 1E-5; % in s
OptionsStruct.TimeCutOff = 2E6; % in s
OptionsStruct.EnergyTolerance = 5E-10;
OptionsStruct.ResidualTolerance = 1E-05;
OptionsStruct.NoiseScaleFactor = 0.05;
OptionsStruct.MaxIterations = 10;
OptionsStruct.VariationalWidth = 2;
OptionsStruct.WidthLowerBound = 0.01;
OptionsStruct.WidthUpperBound = 12;
OptionsStruct.WidthCutoff = 5e-3;
OptionsStruct.PlotLive = false;
OptionsStruct.JobNumber = 3;
OptionsStruct.RunOnGPU = true;
OptionsStruct.SaveData = true;
OptionsStruct.SaveDirectory = './Results/Data_TiltingOfDipoles/SystemSize100squm/Hz500';
options = Helper.convertstruct2cell(OptionsStruct);
clear OptionsStruct
solver = VariationalSolver2D.DipolarGas(options{:});
pot = VariationalSolver2D.Potentials(options{:});
solver.Potential = pot.trap();
%-% Run Solver %-%
[Params, Transf, psi, V, VDk] = solver.run();
%% v_z = 500, theta = 45: a_s = 85.17
OptionsStruct = struct;
OptionsStruct.NumberOfAtoms = 1.00e+05;
OptionsStruct.DipolarPolarAngle = deg2rad(45);
OptionsStruct.DipolarAzimuthAngle = 0;
OptionsStruct.ScatteringLength = 75.00;
OptionsStruct.TrapFrequencies = [0, 0, 500];
OptionsStruct.TrapPotentialType = 'None';
OptionsStruct.NumberOfGridPoints = [128, 128];
OptionsStruct.Dimensions = [10, 10];
OptionsStruct.TimeStepSize = 0.005; % in s
OptionsStruct.MinimumTimeStepSize = 1E-5; % in s
OptionsStruct.TimeCutOff = 5E5; % in s
OptionsStruct.EnergyTolerance = 5E-10;
OptionsStruct.ResidualTolerance = 1E-05;
OptionsStruct.NoiseScaleFactor = 0.15;
OptionsStruct.MaxIterations = 10;
OptionsStruct.VariationalWidth = 1;
OptionsStruct.WidthLowerBound = 0.01;
OptionsStruct.WidthUpperBound = 12;
OptionsStruct.WidthCutoff = 5e-3;
OptionsStruct.PlotLive = false;
OptionsStruct.JobNumber = 4;
OptionsStruct.RunOnGPU = true;
OptionsStruct.SaveData = true;
OptionsStruct.SaveDirectory = './Results/Data_TiltingOfDipoles/SystemSize100squm/Hz500';
options = Helper.convertstruct2cell(OptionsStruct);
clear OptionsStruct
solver = VariationalSolver2D.DipolarGas(options{:});
pot = VariationalSolver2D.Potentials(options{:});
solver.Potential = pot.trap();
%-% Run Solver %-%
[Params, Transf, psi, V, VDk] = solver.run();
%% v_z = 500, theta = 65: a_s = 93.41
OptionsStruct = struct;
OptionsStruct.NumberOfAtoms = 1.00e+05;
OptionsStruct.DipolarPolarAngle = deg2rad(65);
OptionsStruct.DipolarAzimuthAngle = 0;
OptionsStruct.ScatteringLength = 81.00;
OptionsStruct.TrapFrequencies = [0, 0, 500];
OptionsStruct.TrapPotentialType = 'None';
OptionsStruct.NumberOfGridPoints = [128, 128];
OptionsStruct.Dimensions = [10, 10];
OptionsStruct.TimeStepSize = 0.0025; % in s
OptionsStruct.MinimumTimeStepSize = 1E-5; % in s
OptionsStruct.TimeCutOff = 5E5; % in s
OptionsStruct.EnergyTolerance = 5E-10;
OptionsStruct.ResidualTolerance = 1E-05;
OptionsStruct.NoiseScaleFactor = 0.15;
OptionsStruct.MaxIterations = 10;
OptionsStruct.VariationalWidth = 1;
OptionsStruct.WidthLowerBound = 0.01;
OptionsStruct.WidthUpperBound = 12;
OptionsStruct.WidthCutoff = 5e-3;
OptionsStruct.PlotLive = false;
OptionsStruct.JobNumber = 5;
OptionsStruct.RunOnGPU = true;
OptionsStruct.SaveData = true;
OptionsStruct.SaveDirectory = './Results/Data_TiltingOfDipoles/SystemSize100squm/Hz500';
options = Helper.convertstruct2cell(OptionsStruct);
clear OptionsStruct
solver = VariationalSolver2D.DipolarGas(options{:});
pot = VariationalSolver2D.Potentials(options{:});
solver.Potential = pot.trap();
%-% Run Solver %-%
[Params, Transf, psi, V, VDk] = solver.run();
%% v_z = 500, theta = 75: a_s = 98.11
OptionsStruct = struct;
OptionsStruct.NumberOfAtoms = 1.00e+05;
OptionsStruct.DipolarPolarAngle = deg2rad(75);
OptionsStruct.DipolarAzimuthAngle = 0;
OptionsStruct.ScatteringLength = 85.00;
OptionsStruct.TrapFrequencies = [0, 0, 500];
OptionsStruct.TrapPotentialType = 'None';
OptionsStruct.NumberOfGridPoints = [128, 128];
OptionsStruct.Dimensions = [10, 10];
OptionsStruct.TimeStepSize = 0.001; % in s
OptionsStruct.MinimumTimeStepSize = 1E-5; % in s
OptionsStruct.TimeCutOff = 5E5; % in s
OptionsStruct.EnergyTolerance = 5E-10;
OptionsStruct.ResidualTolerance = 1E-05;
OptionsStruct.NoiseScaleFactor = 0.05;
OptionsStruct.MaxIterations = 10;
OptionsStruct.VariationalWidth = 1;
OptionsStruct.WidthLowerBound = 0.01;
OptionsStruct.WidthUpperBound = 12;
OptionsStruct.WidthCutoff = 5e-3;
OptionsStruct.PlotLive = false;
OptionsStruct.JobNumber = 6;
OptionsStruct.RunOnGPU = true;
OptionsStruct.SaveData = true;
OptionsStruct.SaveDirectory = './Results/Data_TiltingOfDipoles/SystemSize100squm/Hz500';
options = Helper.convertstruct2cell(OptionsStruct);
clear OptionsStruct
solver = VariationalSolver2D.DipolarGas(options{:});
pot = VariationalSolver2D.Potentials(options{:});
solver.Potential = pot.trap();
%-% Run Solver %-%
[Params, Transf, psi, V, VDk] = solver.run();
%% v_z = 500, theta = 85: a_s = 102.56
OptionsStruct = struct;
OptionsStruct.NumberOfAtoms = 1.00e+05;
OptionsStruct.DipolarPolarAngle = deg2rad(85);
OptionsStruct.DipolarAzimuthAngle = 0;
OptionsStruct.ScatteringLength = 90.00;
OptionsStruct.TrapFrequencies = [0, 0, 500];
OptionsStruct.TrapPotentialType = 'None';
OptionsStruct.NumberOfGridPoints = [128, 128];
OptionsStruct.Dimensions = [10, 10];
OptionsStruct.TimeStepSize = 0.001; % in s
OptionsStruct.MinimumTimeStepSize = 1E-5; % in s
OptionsStruct.TimeCutOff = 5E5; % in s
OptionsStruct.EnergyTolerance = 5E-10;
OptionsStruct.ResidualTolerance = 1E-05;
OptionsStruct.NoiseScaleFactor = 0.05;
OptionsStruct.MaxIterations = 10;
OptionsStruct.VariationalWidth = 1;
OptionsStruct.WidthLowerBound = 0.01;
OptionsStruct.WidthUpperBound = 12;
OptionsStruct.WidthCutoff = 5e-3;
OptionsStruct.PlotLive = false;
OptionsStruct.JobNumber = 7;
OptionsStruct.RunOnGPU = true;
OptionsStruct.SaveData = true;
OptionsStruct.SaveDirectory = './Results/Data_TiltingOfDipoles/SystemSize100squm/Hz500';
options = Helper.convertstruct2cell(OptionsStruct);
clear OptionsStruct
solver = VariationalSolver2D.DipolarGas(options{:});
pot = VariationalSolver2D.Potentials(options{:});
solver.Potential = pot.trap();
%-% Run Solver %-%
[Params, Transf, psi, V, VDk] = solver.run();