diff --git a/Dipolar-Gas-Simulator/+Plotter/plotLive2D.m b/Dipolar-Gas-Simulator/+Plotter/plotLive2D.m index 010da65..bce2779 100644 --- a/Dipolar-Gas-Simulator/+Plotter/plotLive2D.m +++ b/Dipolar-Gas-Simulator/+Plotter/plotLive2D.m @@ -1,4 +1,4 @@ -function plotLive2D(psi, Params, Transf, Observ, vrun) +function plotLive2D(psi, Params, VParams, Transf, Observ, vrun) set(0,'defaulttextInterpreter','latex') set(groot, 'defaultAxesTickLabelInterpreter','latex'); set(groot, 'defaultLegendInterpreter','latex'); @@ -69,8 +69,17 @@ function plotLive2D(psi, Params, Transf, Observ, vrun) % Plot variational width nexttile; % Equivalent to subplot('Position', [0.67, 0.05, 0.26, 0.4]); - xlabel('$\ell$', 'FontSize', 14) - ylabel('$E_{var}$', 'FontSize', 14) - title('Variational Energy', 'FontSize', 14); - grid on + if vrun < 2 + xlabel('$\ell$', 'FontSize', 14) + ylabel('$E_{var}$', 'FontSize', 14) + title('Variational Energy', 'FontSize', 14); + grid on + else + plot(VParams.ells,VParams.E_vs_iter,'LineStyle','none','Marker','o','MarkerSize',3,'Color','b','MarkerFaceColor','b') + xlabel('$\ell$', 'FontSize', 14) + ylabel('$E_{var}$', 'FontSize', 14) + title('Variational Energy', 'FontSize', 14); + grid on + end + end \ No newline at end of file diff --git a/Dipolar-Gas-Simulator/+Scripts/run_locally.m b/Dipolar-Gas-Simulator/+Scripts/run_locally.m index 0f4e278..b592a79 100644 --- a/Dipolar-Gas-Simulator/+Scripts/run_locally.m +++ b/Dipolar-Gas-Simulator/+Scripts/run_locally.m @@ -251,7 +251,7 @@ Plotter.visualizeGSWavefunction2D(SaveDirectory, JobNumber) %% - Analysis SaveDirectory = './Results/Data_TiltingOfDipoles/AdjustedSystemSize/Hz500'; -JobNumber = 2; +JobNumber = 1; % Plotter.visualizeGSWavefunction2D(SaveDirectory, JobNumber) [contrast, period_X, period_Y] = Scripts.analyzeGSWavefunction(SaveDirectory, JobNumber); @@ -275,20 +275,20 @@ Plotter.visualizeGSWavefunction2D(SaveDirectory, JobNumber) %% - Analysis SaveDirectory = './Results/Data_TiltingOfDipoles/TransitionAngle/Hz500'; -NumberOfJobs = 14; +NumberOfJobs = 16; [contrast_array, periodX_array, periodY_array] = Scripts.analyzeGSWavefunction_multipleruns(SaveDirectory, NumberOfJobs); %% - Analysis SaveDirectory = './Results/Data_TiltingOfDipoles/TransitionAngle/Hz750'; -NumberOfJobs = 14; +NumberOfJobs = 16; [contrast_array, periodX_array, periodY_array] = Scripts.analyzeGSWavefunction_multipleruns(SaveDirectory, NumberOfJobs); %% - Analysis SaveDirectory = './Results/Data_TiltingOfDipoles/TransitionAngle/Hz1000'; -NumberOfJobs = 14; +NumberOfJobs = 16; [contrast_array, periodX_array, periodY_array] = Scripts.analyzeGSWavefunction_multipleruns(SaveDirectory, NumberOfJobs); %% - Analysis SaveDirectory = './Results/Data_TiltingOfDipoles/TransitionAngle/Hz2000'; -NumberOfJobs = 14; +NumberOfJobs = 16; [contrast_array, periodX_array, periodY_array] = Scripts.analyzeGSWavefunction_multipleruns(SaveDirectory, NumberOfJobs); \ No newline at end of file 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 index a1d8233..9ace958 100644 --- a/Dipolar-Gas-Simulator/+Scripts/run_on_cluster_adjusted_system_size.m +++ b/Dipolar-Gas-Simulator/+Scripts/run_on_cluster_adjusted_system_size.m @@ -1,5 +1,5 @@ %% Tilting of the dipoles -% Atom Number = 1.00e+05 +% Atom Number = 1250 ppum % System size = [5 * l_rot, 5 * l_rot] %% v_z = 500, theta = 0: a_s = 76.41 diff --git a/Dipolar-Gas-Simulator/+Scripts/run_on_cluster_in_plane_trap.m b/Dipolar-Gas-Simulator/+Scripts/run_on_cluster_in_plane_trap.m new file mode 100644 index 0000000..6fd87a8 --- /dev/null +++ b/Dipolar-Gas-Simulator/+Scripts/run_on_cluster_in_plane_trap.m @@ -0,0 +1,184 @@ +%% Tilting of the dipoles +% Atom Number = 1250 ppum +% 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; + +vz = 500; +AspectRatio = 10; +OptionsStruct.TrapFrequencies = [vz/AspectRatio, vz/AspectRatio, 500]; +OptionsStruct.TrapPotentialType = 'Harmonic'; + +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 = 1.2; +OptionsStruct.WidthLowerBound = 0.01; +OptionsStruct.WidthUpperBound = 12; +OptionsStruct.WidthCutoff = 5e-3; + +OptionsStruct.PlotLive = true; +OptionsStruct.JobNumber = 1; +OptionsStruct.RunOnGPU = false; +OptionsStruct.SaveData = true; +OptionsStruct.SaveDirectory = './Results/Data_TiltingOfDipoles/HarmonicTrap/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; + +vz = 500; +AspectRatio = 10; +OptionsStruct.TrapFrequencies = [vz/AspectRatio, vz/AspectRatio, 500]; +OptionsStruct.TrapPotentialType = 'Harmonic'; + +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 = 1.2; +OptionsStruct.WidthLowerBound = 0.01; +OptionsStruct.WidthUpperBound = 12; +OptionsStruct.WidthCutoff = 5e-3; + +OptionsStruct.PlotLive = true; +OptionsStruct.JobNumber = 2; +OptionsStruct.RunOnGPU = false; +OptionsStruct.SaveData = true; +OptionsStruct.SaveDirectory = './Results/Data_TiltingOfDipoles/HarmonicTrap/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 = 0: a_s = 76.41 + +OptionsStruct = struct; + +OptionsStruct.NumberOfAtoms = 101250; +OptionsStruct.DipolarPolarAngle = 0; +OptionsStruct.DipolarAzimuthAngle = 0; +OptionsStruct.ScatteringLength = 76.41; + +vz = 500; +AspectRatio = 5; +OptionsStruct.TrapFrequencies = [vz/AspectRatio, vz/AspectRatio, 500]; +OptionsStruct.TrapPotentialType = 'Harmonic'; + +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 = 1.2; +OptionsStruct.WidthLowerBound = 0.01; +OptionsStruct.WidthUpperBound = 12; +OptionsStruct.WidthCutoff = 5e-3; + +OptionsStruct.PlotLive = true; +OptionsStruct.JobNumber = 3; +OptionsStruct.RunOnGPU = false; +OptionsStruct.SaveData = true; +OptionsStruct.SaveDirectory = './Results/Data_TiltingOfDipoles/HarmonicTrap/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; + +vz = 500; +AspectRatio = 5; +OptionsStruct.TrapFrequencies = [vz/AspectRatio, vz/AspectRatio, 500]; +OptionsStruct.TrapPotentialType = 'Harmonic'; + +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 = 1.2; +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/HarmonicTrap/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(); +%% - Analysis +SaveDirectory = './Results/Data_TiltingOfDipoles/HarmonicTrap/Hz500'; +JobNumber = 4; +% Plotter.visualizeGSWavefunction2D(SaveDirectory, JobNumber) +[contrast, period_X, period_Y] = Scripts.analyzeGSWavefunction(SaveDirectory, JobNumber); \ No newline at end of file diff --git a/Dipolar-Gas-Simulator/+Scripts/run_on_cluster_transition_angle.m b/Dipolar-Gas-Simulator/+Scripts/run_on_cluster_transition_angle.m index ff784b2..a508385 100644 --- a/Dipolar-Gas-Simulator/+Scripts/run_on_cluster_transition_angle.m +++ b/Dipolar-Gas-Simulator/+Scripts/run_on_cluster_transition_angle.m @@ -1,4 +1,5 @@ %% Tilting of the dipoles +% Atom Number = 1250 ppum % System size = [5 * l_rot, 5 * l_rot] theta_values = 1:1:14; diff --git a/Dipolar-Gas-Simulator/+VariationalSolver2D/@DipolarGas/propagateWavefunction.m b/Dipolar-Gas-Simulator/+VariationalSolver2D/@DipolarGas/propagateWavefunction.m index 7550ac6..6feadda 100644 --- a/Dipolar-Gas-Simulator/+VariationalSolver2D/@DipolarGas/propagateWavefunction.m +++ b/Dipolar-Gas-Simulator/+VariationalSolver2D/@DipolarGas/propagateWavefunction.m @@ -26,7 +26,7 @@ function [psi, Observ] = propagateWavefunction(this, psi, Params, VParams, Trans Observ.residual = [Observ.residual res]; if this.PlotLive - Plotter.plotLive2D(psi,Params,Transf,Observ,vrun) + Plotter.plotLive2D(psi,Params,VParams,Transf,Observ,vrun) drawnow end @@ -77,7 +77,7 @@ function [psi, Observ] = propagateWavefunction(this, psi, Params, VParams, Trans % Plotting if this.PlotLive - Plotter.plotLive2D(psi,Params,Transf,Observ,vrun) + Plotter.plotLive2D(psi,Params,VParams,Transf,Observ,vrun) drawnow end % diff --git a/Dipolar-Gas-Simulator/+VariationalSolver2D/@DipolarGas/run.m b/Dipolar-Gas-Simulator/+VariationalSolver2D/@DipolarGas/run.m index ddf301b..f8e7c57 100644 --- a/Dipolar-Gas-Simulator/+VariationalSolver2D/@DipolarGas/run.m +++ b/Dipolar-Gas-Simulator/+VariationalSolver2D/@DipolarGas/run.m @@ -80,18 +80,21 @@ function [Params, Transf, psi, V, VDk] = run(this) last_subplot_handle = subplots(end); % Grab the handle of the last subplot axes(last_subplot_handle); % Set the last subplot as the current axes plot(ells,E_vs_iter,'LineStyle','none','Marker','o','MarkerSize',3,'Color','b','MarkerFaceColor','b') + xlabel('$\ell$', 'FontSize', 14) + ylabel('$E_{var}$', 'FontSize', 14) + title('Variational Energy', 'FontSize', 14); + grid on drawnow end if relelldiff < Params.ellcutoff && relevardiff < Params.evarcutoff break end - + + VParams.ells = ells; + VParams.E_vs_iter = E_vs_iter; end - - VParams.ells = ells; - VParams.E_vs_iter = E_vs_iter; - + fprintf('\n') disp('Saving data...'); save(sprintf(strcat(this.SaveDirectory, '/Run_%03i/psi_gs.mat'),Params.njob),'psi','Observ','Transf','Params','VDk','V','VParams');