From fd5fcf6c8de69e7f0ae86d46e6040933450feb3e Mon Sep 17 00:00:00 2001 From: Karthik Chandrashekara Date: Thu, 20 Jun 2024 12:16:42 +0200 Subject: [PATCH] Added residual tolerance. --- .../+Plotter/visualizeGSWavefunction.m | 65 ++++++++++++++----- Dipolar-Gas-Simulator/+Scripts/run_locally.m | 5 +- .../+Scripts/run_on_cluster.m | 3 +- .../+Simulator/@DipolarGas/DipolarGas.m | 4 ++ .../+Simulator/@DipolarGas/setupParameters.m | 6 +- .../bwhpc_matlab_gpe_sim_cpu.slurm | 2 +- .../bwhpc_matlab_gpe_sim_gpu.slurm | 2 +- 7 files changed, 65 insertions(+), 22 deletions(-) diff --git a/Dipolar-Gas-Simulator/+Plotter/visualizeGSWavefunction.m b/Dipolar-Gas-Simulator/+Plotter/visualizeGSWavefunction.m index bd09afc..8071c95 100644 --- a/Dipolar-Gas-Simulator/+Plotter/visualizeGSWavefunction.m +++ b/Dipolar-Gas-Simulator/+Plotter/visualizeGSWavefunction.m @@ -6,11 +6,21 @@ function visualizeGSWavefunction(run_index) Data = load(sprintf(horzcat(folder_path, '/Run_%03i/psi_gs.mat'),run_index),'psi','Params','Transf','Observ'); - psi = Data.psi; Params = Data.Params; Transf = Data.Transf; Observ = Data.Observ; + 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 + format long x = Transf.x*Params.l0*1e6; y = Transf.y*Params.l0*1e6; @@ -18,8 +28,12 @@ function visualizeGSWavefunction(run_index) dx = x(2)-x(1); dy = y(2)-y(1); dz = z(2)-z(1); %Plotting - - subplot(2,3,1) + figure('Position', [100, 100, 1600, 900]); + clf + + % Subplot 1 + % subplot(2,3,1) + subplot('Position', [0.05, 0.55, 0.28, 0.4]) n = abs(psi).^2; nxz = squeeze(trapz(n*dy,2)); nyz = squeeze(trapz(n*dx,1)); @@ -27,27 +41,46 @@ function visualizeGSWavefunction(run_index) plotxz = pcolor(x,z,nxz'); set(plotxz, 'EdgeColor', 'none'); - xlabel('$x$ [$\mu$m]'); ylabel('$z$ [$\mu$m]'); - - subplot(2,3,2) + colorbar + xlabel('$x$ [$\mu$m]', 'FontSize', 14); ylabel('$z$ [$\mu$m]', 'FontSize', 14); + title('$|\Psi_{zx}|^2$', 'FontSize', 14); + + % Subplot 2 + % subplot(2,3,2) + subplot('Position', [0.36, 0.55, 0.28, 0.4]) plotyz = pcolor(y,z,nyz'); set(plotyz, 'EdgeColor', 'none'); - xlabel('$y$ [$\mu$m]'); ylabel('$z$ [$\mu$m]'); - - subplot(2,3,3) + colorbar + xlabel('$y$ [$\mu$m]', 'FontSize', 14); ylabel('$z$ [$\mu$m]', 'FontSize', 14); + title('$|\Psi_{zy}|^2$', 'FontSize', 14); + + % Subplot 3 + % subplot(2,3,3) + subplot('Position', [0.67, 0.55, 0.28, 0.4]); plotxy = pcolor(x,y,nxy'); set(plotxy, 'EdgeColor', 'none'); - xlabel('$x$ [$\mu$m]'); ylabel('$y$ [$\mu$m]'); + colorbar + xlabel('$x$ [$\mu$m]', 'FontSize', 14); ylabel('$y$ [$\mu$m]', 'FontSize', 14); + title('$ |\Psi_{xy}|^2$', 'FontSize', 14); - subplot(2,3,4) + % Subplot 4 + % subplot(2,3,4) + subplot('Position', [0.05, 0.05, 0.26, 0.4]); plot(-log10(Observ.residual),'-b') - ylabel('$-\mathrm{log}_{10}(r)$'); xlabel('steps'); + ylabel('$-\mathrm{log}_{10}(r)$', 'FontSize', 14); xlabel('Time steps', 'FontSize', 14); + title('Residual', 'FontSize', 14); - subplot(2,3,5) + % Subplot 5 + % subplot(2, 3, 5); + subplot('Position', [0.36, 0.05, 0.26, 0.4]); plot(Observ.EVec,'-b') - ylabel('$E$'); xlabel('steps'); + ylabel('$E$', 'FontSize', 14); xlabel('Time steps', 'FontSize', 14); + title('Total Energy', 'FontSize', 14); - subplot(2,3,6) + % Subplot 6 + % subplot(2, 3, 6); + subplot('Position', [0.67, 0.05, 0.26, 0.4]); plot(Observ.mucVec,'-b') - ylabel('$\mu$'); xlabel('steps'); + ylabel('$\mu$', 'FontSize', 14); xlabel('Time steps', 'FontSize', 14); + title('Chemical Potential', 'FontSize', 14); 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 42e8975..c93045a 100644 --- a/Dipolar-Gas-Simulator/+Scripts/run_locally.m +++ b/Dipolar-Gas-Simulator/+Scripts/run_locally.m @@ -23,6 +23,7 @@ OptionsStruct.SimulationMode = 'ImaginaryTimeEvolution'; % 'ImaginaryTi OptionsStruct.TimeStepSize = 50E-6; % in s OptionsStruct.NumberOfTimeSteps = 200; % in s OptionsStruct.EnergyTolerance = 5E-10; +OptionsStruct.ResidualTolerance = 1E-05; OptionsStruct.JobNumber = 1; OptionsStruct.SaveData = true; @@ -42,4 +43,6 @@ Plotter.visualizeSpace(Transf) %% - Plot trap potential Plotter.visualizeTrapPotential(V,Params,Transf) %% - Plot initial wavefunction -Plotter.visualizeWavefunction(psi,Params,Transf) \ No newline at end of file +Plotter.visualizeWavefunction(psi,Params,Transf) +%% - Plot GS wavefunction +Plotter.visualizeGSWavefunction(Params.njob) \ No newline at end of file diff --git a/Dipolar-Gas-Simulator/+Scripts/run_on_cluster.m b/Dipolar-Gas-Simulator/+Scripts/run_on_cluster.m index 0a2c04d..2b4150e 100644 --- a/Dipolar-Gas-Simulator/+Scripts/run_on_cluster.m +++ b/Dipolar-Gas-Simulator/+Scripts/run_on_cluster.m @@ -16,13 +16,14 @@ OptionsStruct.TrapDepth = 5; OptionsStruct.BoxSize = 15; OptionsStruct.TrapPotentialType = 'Harmonic'; -OptionsStruct.NumberOfGridPoints = [128, 256, 128]; +OptionsStruct.NumberOfGridPoints = [256, 512, 256]; OptionsStruct.Dimensions = [50, 120, 150]; OptionsStruct.CutoffType = 'Cylindrical'; OptionsStruct.SimulationMode = 'ImaginaryTimeEvolution'; % 'ImaginaryTimeEvolution' | 'RealTimeEvolution' OptionsStruct.TimeStepSize = 500E-6; % in s OptionsStruct.NumberOfTimeSteps = 2E6; % in s OptionsStruct.EnergyTolerance = 5E-10; +OptionsStruct.ResidualTolerance = 1E-05; OptionsStruct.JobNumber = 1; OptionsStruct.RunOnGPU = true; diff --git a/Dipolar-Gas-Simulator/+Simulator/@DipolarGas/DipolarGas.m b/Dipolar-Gas-Simulator/+Simulator/@DipolarGas/DipolarGas.m index ea531f5..26b9cc8 100644 --- a/Dipolar-Gas-Simulator/+Simulator/@DipolarGas/DipolarGas.m +++ b/Dipolar-Gas-Simulator/+Simulator/@DipolarGas/DipolarGas.m @@ -14,6 +14,7 @@ classdef DipolarGas < handle & matlab.mixin.Copyable TimeStepSize; NumberOfTimeSteps; EnergyTolerance; + ResidualTolerance; MinimumTimeStepSize; Calculator; @@ -59,6 +60,8 @@ classdef DipolarGas < handle & matlab.mixin.Copyable @(x) assert(isnumeric(x) && isscalar(x) && (x > 0))); addParameter(p, 'EnergyTolerance', 1e-10,... @(x) assert(isnumeric(x) && isscalar(x) && (x > 0))); + addParameter(p, 'ResidualTolerance', 1e-10,... + @(x) assert(isnumeric(x) && isscalar(x) && (x > 0))); addParameter(p, 'MinimumTimeStepSize', 1e-6,... @(x) assert(isnumeric(x) && isscalar(x) && (x > 0))); addParameter(p, 'JobNumber', 1,... @@ -86,6 +89,7 @@ classdef DipolarGas < handle & matlab.mixin.Copyable this.TimeStepSize = p.Results.TimeStepSize; this.NumberOfTimeSteps = p.Results.NumberOfTimeSteps; this.EnergyTolerance = p.Results.EnergyTolerance; + this.ResidualTolerance = p.Results.ResidualTolerance; this.MinimumTimeStepSize = p.Results.MinimumTimeStepSize; this.JobNumber = p.Results.JobNumber; diff --git a/Dipolar-Gas-Simulator/+Simulator/@DipolarGas/setupParameters.m b/Dipolar-Gas-Simulator/+Simulator/@DipolarGas/setupParameters.m index c7c7e25..7ca2dff 100644 --- a/Dipolar-Gas-Simulator/+Simulator/@DipolarGas/setupParameters.m +++ b/Dipolar-Gas-Simulator/+Simulator/@DipolarGas/setupParameters.m @@ -45,10 +45,12 @@ function [Params] = setupParameters(this) Params.gamma_S = 7.5*10^(-3); % gamma for the stochastic GPE Params.muchem = 12.64*Params.wz/w0; % fixing the chemical potential for the stochastic GPE - Params.Etol = this.EnergyTolerance; % Tolerances + % Tolerances + Params.Etol = this.EnergyTolerance; + Params.rtol = this.ResidualTolerance; Params.sim_time_cut_off = this.NumberOfTimeSteps; % sometimes the imaginary time gets a little stuck % even though the solution is good, this just stops it going on forever - Params.mindt = this.MinimumTimeStepSize; % Minimum size for a time step using adaptive dt + Params.mindt = this.MinimumTimeStepSize; % Minimum size for a time step using adaptive dt Params.njob = this.JobNumber; diff --git a/Dipolar-Gas-Simulator/bwhpc_matlab_gpe_sim_cpu.slurm b/Dipolar-Gas-Simulator/bwhpc_matlab_gpe_sim_cpu.slurm index bad4a54..2d3aded 100644 --- a/Dipolar-Gas-Simulator/bwhpc_matlab_gpe_sim_cpu.slurm +++ b/Dipolar-Gas-Simulator/bwhpc_matlab_gpe_sim_cpu.slurm @@ -8,7 +8,7 @@ #SBATCH --cpus-per-task=10 #SBATCH --mem=24G # Estimated wallclock time for job -#SBATCH --time=15:00:00 +#SBATCH --time=12:00:00 #SBATCH --job-name=simulation #SBATCH --error=simulation.err #SBATCH --output=simulation.out diff --git a/Dipolar-Gas-Simulator/bwhpc_matlab_gpe_sim_gpu.slurm b/Dipolar-Gas-Simulator/bwhpc_matlab_gpe_sim_gpu.slurm index 156502f..902b020 100644 --- a/Dipolar-Gas-Simulator/bwhpc_matlab_gpe_sim_gpu.slurm +++ b/Dipolar-Gas-Simulator/bwhpc_matlab_gpe_sim_gpu.slurm @@ -8,7 +8,7 @@ #SBATCH --gres=gpu:4 #SBATCH --mem=24G # Estimated wallclock time for job -#SBATCH --time=15:00:00 +#SBATCH --time=12:00:00 #SBATCH --job-name=simulation #SBATCH --error=simulation.err #SBATCH --output=simulation.out