From 9ac9b8476ec958fd878a805937b1aff144bb319b Mon Sep 17 00:00:00 2001 From: Karthik Chandrashekara Date: Thu, 30 Jan 2025 22:50:50 +0100 Subject: [PATCH] New parameters, new analysis script to extract contrast and periodicity of the lattice. --- Dipolar-Gas-Simulator/+Plotter/plotLive2D.m | 2 +- .../+Scripts/analyzeGSWavefunction.m | 184 ++++++++++ Dipolar-Gas-Simulator/+Scripts/run_locally.m | 196 ++-------- .../+Scripts/run_on_cluster.m | 283 ++++++++------- .../run_on_cluster_adjusted_system_size.m | 339 ++++++++++++++++++ .../run_on_cluster_fixed_system_size.m.m | 297 +++++++++++++++ 6 files changed, 1011 insertions(+), 290 deletions(-) create mode 100644 Dipolar-Gas-Simulator/+Scripts/analyzeGSWavefunction.m create mode 100644 Dipolar-Gas-Simulator/+Scripts/run_on_cluster_adjusted_system_size.m create mode 100644 Dipolar-Gas-Simulator/+Scripts/run_on_cluster_fixed_system_size.m.m diff --git a/Dipolar-Gas-Simulator/+Plotter/plotLive2D.m b/Dipolar-Gas-Simulator/+Plotter/plotLive2D.m index 6be5442..f7c4335 100644 --- a/Dipolar-Gas-Simulator/+Plotter/plotLive2D.m +++ b/Dipolar-Gas-Simulator/+Plotter/plotLive2D.m @@ -25,7 +25,7 @@ function plotLive2D(psi, Params, Transf, Observ, vrun) set(plotxy, 'EdgeColor', 'none'); cbar1 = colorbar; cbar1.Label.Interpreter = 'latex'; - cbar1.Ticks = []; % Disable the ticks + % cbar1.Ticks = []; % Disable the ticks colormap(gca, 'parula') % clim(ax1,[0.00,0.3]); ylabel(cbar1,'$na_{dd}^2$','FontSize',16,'Rotation',270) diff --git a/Dipolar-Gas-Simulator/+Scripts/analyzeGSWavefunction.m b/Dipolar-Gas-Simulator/+Scripts/analyzeGSWavefunction.m new file mode 100644 index 0000000..d346d9f --- /dev/null +++ b/Dipolar-Gas-Simulator/+Scripts/analyzeGSWavefunction.m @@ -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 diff --git a/Dipolar-Gas-Simulator/+Scripts/run_locally.m b/Dipolar-Gas-Simulator/+Scripts/run_locally.m index 555e840..742281b 100644 --- a/Dipolar-Gas-Simulator/+Scripts/run_locally.m +++ b/Dipolar-Gas-Simulator/+Scripts/run_locally.m @@ -240,175 +240,33 @@ Plotter.visualizeGSWavefunction2D(SaveDirectory, JobNumber) % Atom Number = 1.00e+05 % System size = [10, 10] -%% 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 = 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 +SaveDirectory = './Results/Data_TiltingOfDipoles'; +JobNumber = 5; +Plotter.visualizeGSWavefunction2D(SaveDirectory, JobNumber) +%% Tilting of the dipoles +% Atom Number = 1.00e+05 +% System size = [5 * l_rot, 5 * l_rot] %% - Analysis -SaveDirectory = './Results/Data_TiltingOfDipoles'; -JobNumber = 4; +SaveDirectory = './Results/Data_TiltingOfDipoles/AdjustedSystemSize/Hz500'; +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) + +%% - 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) + + diff --git a/Dipolar-Gas-Simulator/+Scripts/run_on_cluster.m b/Dipolar-Gas-Simulator/+Scripts/run_on_cluster.m index 8e21375..8a5debf 100644 --- a/Dipolar-Gas-Simulator/+Scripts/run_on_cluster.m +++ b/Dipolar-Gas-Simulator/+Scripts/run_on_cluster.m @@ -1,11 +1,12 @@ %% Tilting of the dipoles % 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 + OptionsStruct = struct; -OptionsStruct.NumberOfAtoms = 1.00e+05; +OptionsStruct.NumberOfAtoms = 101250; OptionsStruct.DipolarPolarAngle = 0; OptionsStruct.DipolarAzimuthAngle = 0; OptionsStruct.ScatteringLength = 76.41; @@ -14,7 +15,7 @@ OptionsStruct.TrapFrequencies = [0, 0, 500]; OptionsStruct.TrapPotentialType = 'None'; OptionsStruct.NumberOfGridPoints = [128, 128]; -OptionsStruct.Dimensions = [10, 10]; +OptionsStruct.Dimensions = [9, 9]; OptionsStruct.TimeStepSize = 0.005; % in s OptionsStruct.MinimumTimeStepSize = 1E-5; % in s OptionsStruct.TimeCutOff = 2E6; % in s @@ -32,7 +33,7 @@ OptionsStruct.PlotLive = false; OptionsStruct.JobNumber = 1; OptionsStruct.RunOnGPU = true; OptionsStruct.SaveData = true; -OptionsStruct.SaveDirectory = './Results/Data_TiltingOfDipoles'; +OptionsStruct.SaveDirectory = './Results/Data_TiltingOfDipoles/AdjustedSystemSize/Hz500'; options = Helper.convertstruct2cell(OptionsStruct); clear OptionsStruct @@ -47,7 +48,7 @@ solver.Potential = pot.trap(); OptionsStruct = struct; -OptionsStruct.NumberOfAtoms = 1.00e+05; +OptionsStruct.NumberOfAtoms = 101250; OptionsStruct.DipolarPolarAngle = deg2rad(15); OptionsStruct.DipolarAzimuthAngle = 0; OptionsStruct.ScatteringLength = 77.45; @@ -56,7 +57,7 @@ OptionsStruct.TrapFrequencies = [0, 0, 500]; OptionsStruct.TrapPotentialType = 'None'; OptionsStruct.NumberOfGridPoints = [128, 128]; -OptionsStruct.Dimensions = [10, 10]; +OptionsStruct.Dimensions = [9, 9]; OptionsStruct.TimeStepSize = 0.005; % in s OptionsStruct.MinimumTimeStepSize = 1E-5; % in s OptionsStruct.TimeCutOff = 2E6; % in s @@ -74,7 +75,7 @@ OptionsStruct.PlotLive = false; OptionsStruct.JobNumber = 2; OptionsStruct.RunOnGPU = true; OptionsStruct.SaveData = true; -OptionsStruct.SaveDirectory = './Results/Data_TiltingOfDipoles'; +OptionsStruct.SaveDirectory = './Results/Data_TiltingOfDipoles/AdjustedSystemSize/Hz500'; options = Helper.convertstruct2cell(OptionsStruct); clear OptionsStruct @@ -85,20 +86,20 @@ solver.Potential = pot.trap(); %-% Run Solver %-% [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.NumberOfAtoms = 1.00e+05; -OptionsStruct.DipolarPolarAngle = deg2rad(25); +OptionsStruct.NumberOfAtoms = 61250; +OptionsStruct.DipolarPolarAngle = 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.NumberOfGridPoints = [128, 128]; -OptionsStruct.Dimensions = [10, 10]; +OptionsStruct.Dimensions = [7, 7]; OptionsStruct.TimeStepSize = 0.005; % in s OptionsStruct.MinimumTimeStepSize = 1E-5; % in s OptionsStruct.TimeCutOff = 2E6; % in s @@ -113,10 +114,10 @@ OptionsStruct.WidthUpperBound = 12; OptionsStruct.WidthCutoff = 5e-3; OptionsStruct.PlotLive = false; -OptionsStruct.JobNumber = 3; +OptionsStruct.JobNumber = 1; OptionsStruct.RunOnGPU = true; OptionsStruct.SaveData = true; -OptionsStruct.SaveDirectory = './Results/Data_TiltingOfDipoles'; +OptionsStruct.SaveDirectory = './Results/Data_TiltingOfDipoles/AdjustedSystemSize/Hz750'; options = Helper.convertstruct2cell(OptionsStruct); clear OptionsStruct @@ -127,122 +128,38 @@ solver.Potential = pot.trap(); %-% Run Solver %-% [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.NumberOfAtoms = 1.00e+05; -OptionsStruct.DipolarPolarAngle = deg2rad(45); +OptionsStruct.NumberOfAtoms = 61250; +OptionsStruct.DipolarPolarAngle = deg2rad(15); 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.NumberOfGridPoints = [128, 128]; -OptionsStruct.Dimensions = [10, 10]; +OptionsStruct.Dimensions = [7, 7]; 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'; -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.TimeCutOff = 2E6; % in s OptionsStruct.EnergyTolerance = 5E-10; OptionsStruct.ResidualTolerance = 1E-05; OptionsStruct.NoiseScaleFactor = 0.05; OptionsStruct.MaxIterations = 10; -OptionsStruct.VariationalWidth = 1; +OptionsStruct.VariationalWidth = 2; OptionsStruct.WidthLowerBound = 0.01; OptionsStruct.WidthUpperBound = 12; OptionsStruct.WidthCutoff = 5e-3; OptionsStruct.PlotLive = false; -OptionsStruct.JobNumber = 6; +OptionsStruct.JobNumber = 2; OptionsStruct.RunOnGPU = true; OptionsStruct.SaveData = true; -OptionsStruct.SaveDirectory = './Results/Data_TiltingOfDipoles'; +OptionsStruct.SaveDirectory = './Results/Data_TiltingOfDipoles/AdjustedSystemSize/Hz750'; options = Helper.convertstruct2cell(OptionsStruct); clear OptionsStruct @@ -253,38 +170,164 @@ solver.Potential = pot.trap(); %-% Run Solver %-% [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.NumberOfAtoms = 1.00e+05; -OptionsStruct.DipolarPolarAngle = deg2rad(85); +OptionsStruct.NumberOfAtoms = 45000; +OptionsStruct.DipolarPolarAngle = 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.NumberOfGridPoints = [128, 128]; -OptionsStruct.Dimensions = [10, 10]; -OptionsStruct.TimeStepSize = 0.001; % in s +OptionsStruct.Dimensions = [6, 6]; +OptionsStruct.TimeStepSize = 0.005; % 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.05; OptionsStruct.MaxIterations = 10; -OptionsStruct.VariationalWidth = 1; +OptionsStruct.VariationalWidth = 2; OptionsStruct.WidthLowerBound = 0.01; OptionsStruct.WidthUpperBound = 12; OptionsStruct.WidthCutoff = 5e-3; OptionsStruct.PlotLive = false; -OptionsStruct.JobNumber = 7; +OptionsStruct.JobNumber = 1; OptionsStruct.RunOnGPU = 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); clear OptionsStruct diff --git a/Dipolar-Gas-Simulator/+Scripts/run_on_cluster_adjusted_system_size.m b/Dipolar-Gas-Simulator/+Scripts/run_on_cluster_adjusted_system_size.m new file mode 100644 index 0000000..8a5debf --- /dev/null +++ b/Dipolar-Gas-Simulator/+Scripts/run_on_cluster_adjusted_system_size.m @@ -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(); \ No newline at end of file diff --git a/Dipolar-Gas-Simulator/+Scripts/run_on_cluster_fixed_system_size.m.m b/Dipolar-Gas-Simulator/+Scripts/run_on_cluster_fixed_system_size.m.m new file mode 100644 index 0000000..2642e25 --- /dev/null +++ b/Dipolar-Gas-Simulator/+Scripts/run_on_cluster_fixed_system_size.m.m @@ -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(); \ No newline at end of file