Added residual tolerance.
This commit is contained in:
parent
cafe7eeb86
commit
fd5fcf6c8d
@ -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
|
@ -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)
|
||||
Plotter.visualizeWavefunction(psi,Params,Transf)
|
||||
%% - Plot GS wavefunction
|
||||
Plotter.visualizeGSWavefunction(Params.njob)
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user