Latest working version.

This commit is contained in:
Karthik 2024-11-18 18:06:14 +01:00
parent 551c16dd84
commit d5523fd0d9
8 changed files with 50 additions and 32 deletions

View File

@ -23,7 +23,7 @@ function plotLive2D(psi, Params, Transf, Observ, vrun)
plotxy = pcolor(x,y,nxyScaled'); plotxy = pcolor(x,y,nxyScaled');
set(plotxy, 'EdgeColor', 'none'); set(plotxy, 'EdgeColor', 'none');
% shading interp; % Smooth shading % shading interp; % Smooth shading
clim(ax1); clim(ax1,[0.00,0.3]);
cbar1 = colorbar; cbar1 = colorbar;
cbar1.Label.Interpreter = 'latex'; cbar1.Label.Interpreter = 'latex';
ylabel(cbar1,'$na_{dd}^2$','FontSize',16,'Rotation',270) ylabel(cbar1,'$na_{dd}^2$','FontSize',16,'Rotation',270)

View File

@ -52,7 +52,7 @@ Plotter.visualizeGSWavefunction(Params.njob)
OptionsStruct = struct; OptionsStruct = struct;
OptionsStruct.NumberOfAtoms = 1E5; OptionsStruct.NumberOfAtoms = 1.6E8;
OptionsStruct.DipolarPolarAngle = 0; OptionsStruct.DipolarPolarAngle = 0;
OptionsStruct.DipolarAzimuthAngle = 0; OptionsStruct.DipolarAzimuthAngle = 0;
OptionsStruct.ScatteringLength = 102.2518; % Critical point: 102.515; Triangular phase: 98.0676; Stripe phase: 102.2518; Honeycomb phase: 102.6441 OptionsStruct.ScatteringLength = 102.2518; % Critical point: 102.515; Triangular phase: 98.0676; Stripe phase: 102.2518; Honeycomb phase: 102.6441
@ -60,18 +60,20 @@ OptionsStruct.ScatteringLength = 102.2518; % Critical point: 102.5
OptionsStruct.TrapFrequencies = [10, 10, 72.4]; OptionsStruct.TrapFrequencies = [10, 10, 72.4];
OptionsStruct.TrapPotentialType = 'None'; OptionsStruct.TrapPotentialType = 'None';
OptionsStruct.NumberOfGridPoints = [128, 128]; OptionsStruct.NumberOfGridPoints = [256, 256];
OptionsStruct.Dimensions = [6.972, 6.972]; % Critical point: 6.996; Triangular phase: 7.5; Stripe phase: 6.972; Honeycomb phase: 6.239 for both for Atom Number fixed to 1E5 OptionsStruct.Dimensions = [100, 100]; % Critical point: 6.996; Triangular phase: 7.5; Stripe phase: 6.972; Honeycomb phase: 6.239 for both for Atom Number fixed to 1E5
OptionsStruct.TimeStepSize = 5E-6; % in s OptionsStruct.TimeStepSize = 500E-6; % in s
OptionsStruct.TimeCutOff = 1E5; % in s OptionsStruct.MinimumTimeStepSize = 1E-5; % in s
OptionsStruct.TimeCutOff = 2E6; % in s
OptionsStruct.EnergyTolerance = 5E-10; OptionsStruct.EnergyTolerance = 5E-10;
OptionsStruct.ResidualTolerance = 1E-05; OptionsStruct.ResidualTolerance = 1E-04;
OptionsStruct.NoiseScaleFactor = 8;
OptionsStruct.MaxIterations = 20; OptionsStruct.MaxIterations = 20;
OptionsStruct.VariationalWidth = 4; OptionsStruct.VariationalWidth = 4;
OptionsStruct.WidthLowerBound = 0.2; OptionsStruct.WidthLowerBound = 0.2;
OptionsStruct.WidthUpperBound = 12; OptionsStruct.WidthUpperBound = 12;
OptionsStruct.WidthCutoff = 1e-4; OptionsStruct.WidthCutoff = 1e-2;
OptionsStruct.PlotLive = true; OptionsStruct.PlotLive = true;
OptionsStruct.JobNumber = 1; OptionsStruct.JobNumber = 1;
@ -90,6 +92,8 @@ solver.Potential = pot.trap();
%% - Plot numerical grid %% - Plot numerical grid
% Plotter.visualizeSpace2D(Transf) % Plotter.visualizeSpace2D(Transf)
%% - Plot trap potential
% Plotter.visualizeTrapPotential2D(solver.Potential,Params,Transf)
%% - Plot initial wavefunction %% - Plot initial wavefunction
Plotter.visualizeWavefunction2D(psi,Params,Transf) Plotter.visualizeWavefunction2D(psi,Params,Transf)
%% - Plot GS wavefunction %% - Plot GS wavefunction

View File

@ -2,21 +2,30 @@
OptionsStruct = struct; OptionsStruct = struct;
OptionsStruct.NumberOfAtoms = 1E5; OptionsStruct.NumberOfAtoms = 1.6E8;
OptionsStruct.DipolarPolarAngle = 0; OptionsStruct.DipolarPolarAngle = 0;
OptionsStruct.DipolarAzimuthAngle = 0; OptionsStruct.DipolarAzimuthAngle = 0;
OptionsStruct.ScatteringLength = 98.0676; % Critical point: 102.515; Triangular phase: 98.0676; Stripe phase: 102.2518; Honeycomb phase: 102.6441 OptionsStruct.ScatteringLength = 102.2518; % Critical point: 102.515; Triangular phase: 98.0676; Stripe phase: 102.2518; Honeycomb phase: 102.6441
OptionsStruct.TrapFrequencies = [10, 10, 72.4]; OptionsStruct.TrapFrequencies = [10, 10, 72.4];
OptionsStruct.TrapPotentialType = 'None'; OptionsStruct.TrapPotentialType = 'None';
OptionsStruct.NumberOfGridPoints = [128, 128]; OptionsStruct.NumberOfGridPoints = [256, 256];
OptionsStruct.Dimensions = [7.5, 7.5]; % Critical point: 6.996; Triangular phase: 7.5; Stripe phase: 6.972; Honeycomb phase: 6.239 for both for Atom Number fixed to 1E5 OptionsStruct.Dimensions = [100, 100]; % Critical point: 6.996; Triangular phase: 7.5; Stripe phase: 6.972; Honeycomb phase: 6.239 for both for Atom Number fixed to 1E5
OptionsStruct.TimeStepSize = 500E-6; % in s OptionsStruct.TimeStepSize = 500E-6; % in s
OptionsStruct.MinimumTimeStepSize = 1E-5; % in s
OptionsStruct.TimeCutOff = 2E6; % in s OptionsStruct.TimeCutOff = 2E6; % in s
OptionsStruct.EnergyTolerance = 5E-10; OptionsStruct.EnergyTolerance = 5E-10;
OptionsStruct.ResidualTolerance = 1E-04; OptionsStruct.ResidualTolerance = 1E-04;
OptionsStruct.NoiseScaleFactor = 8;
OptionsStruct.MaxIterations = 20;
OptionsStruct.VariationalWidth = 4;
OptionsStruct.WidthLowerBound = 0.2;
OptionsStruct.WidthUpperBound = 12;
OptionsStruct.WidthCutoff = 1e-2;
OptionsStruct.PlotLive = false;
OptionsStruct.JobNumber = 1; OptionsStruct.JobNumber = 1;
OptionsStruct.RunOnGPU = true; OptionsStruct.RunOnGPU = true;
OptionsStruct.SaveData = true; OptionsStruct.SaveData = true;

View File

@ -16,6 +16,7 @@ classdef DipolarGas < handle & matlab.mixin.Copyable
TimeCutOff; TimeCutOff;
EnergyTolerance; EnergyTolerance;
ResidualTolerance; ResidualTolerance;
NoiseScaleFactor;
MaxIterations; MaxIterations;
VariationalWidth; VariationalWidth;
@ -58,7 +59,7 @@ classdef DipolarGas < handle & matlab.mixin.Copyable
@(x) assert(isnumeric(x) && isvector(x) && all(x > 0))); @(x) assert(isnumeric(x) && isvector(x) && all(x > 0)));
addParameter(p, 'TimeStepSize', 5E-4,... addParameter(p, 'TimeStepSize', 5E-4,...
@(x) assert(isnumeric(x) && isscalar(x) && (x > 0))); @(x) assert(isnumeric(x) && isscalar(x) && (x > 0)));
addParameter(p, 'MinimumTimeStepSize', 1e-6,... addParameter(p, 'MinimumTimeStepSize', 1e-5,...
@(x) assert(isnumeric(x) && isscalar(x) && (x > 0))); @(x) assert(isnumeric(x) && isscalar(x) && (x > 0)));
addParameter(p, 'TimeCutOff', 2e6,... addParameter(p, 'TimeCutOff', 2e6,...
@(x) assert(isnumeric(x) && isscalar(x) && (x > 0))); @(x) assert(isnumeric(x) && isscalar(x) && (x > 0)));
@ -66,6 +67,8 @@ classdef DipolarGas < handle & matlab.mixin.Copyable
@(x) assert(isnumeric(x) && isscalar(x) && (x > 0))); @(x) assert(isnumeric(x) && isscalar(x) && (x > 0)));
addParameter(p, 'ResidualTolerance', 1e-10,... addParameter(p, 'ResidualTolerance', 1e-10,...
@(x) assert(isnumeric(x) && isscalar(x) && (x > 0))); @(x) assert(isnumeric(x) && isscalar(x) && (x > 0)));
addParameter(p, 'NoiseScaleFactor', 4,...
@(x) assert(isnumeric(x) && isscalar(x) && (x > 0)));
addParameter(p, 'MaxIterations', 20,... addParameter(p, 'MaxIterations', 20,...
@(x) assert(isnumeric(x) && isscalar(x) && (x > 0))); @(x) assert(isnumeric(x) && isscalar(x) && (x > 0)));
addParameter(p, 'VariationalWidth', 4,... addParameter(p, 'VariationalWidth', 4,...
@ -104,6 +107,7 @@ classdef DipolarGas < handle & matlab.mixin.Copyable
this.TimeCutOff = p.Results.TimeCutOff; this.TimeCutOff = p.Results.TimeCutOff;
this.EnergyTolerance = p.Results.EnergyTolerance; this.EnergyTolerance = p.Results.EnergyTolerance;
this.ResidualTolerance = p.Results.ResidualTolerance; this.ResidualTolerance = p.Results.ResidualTolerance;
this.NoiseScaleFactor = p.Results.NoiseScaleFactor;
this.MaxIterations = p.Results.MaxIterations; this.MaxIterations = p.Results.MaxIterations;
this.VariationalWidth = p.Results.VariationalWidth; this.VariationalWidth = p.Results.VariationalWidth;
@ -141,7 +145,7 @@ classdef DipolarGas < handle & matlab.mixin.Copyable
ret = this.TimeCutOff; ret = this.TimeCutOff;
end end
function set.NumberOfAtoms(this, val) function set.NumberOfAtoms(this, val)
assert(val <= 1E6, '!!Not time efficient to compute for atom numbers larger than 1,000,000!!'); assert(val <= 1E9, '!!Not time efficient to compute for atom numbers larger than 1,000,000,000!!');
this.NumberOfAtoms = val; this.NumberOfAtoms = val;
end end
function ret = get.NumberOfAtoms(this) function ret = get.NumberOfAtoms(this)

View File

@ -103,7 +103,6 @@ function [psi, Observ] = propagateWavefunction(this, psi, Params, VParams, Trans
AdaptIdx = 0; AdaptIdx = 0;
end end
end end
if any(isnan(psi(:))) if any(isnan(psi(:)))
disp('NaNs encountered!') disp('NaNs encountered!')
break break

View File

@ -45,7 +45,7 @@ function [Params, Transf, psi, V, VDk] = run(this)
r = normrnd(0,1,size(psi)); r = normrnd(0,1,size(psi));
theta = rand(size(psi)); theta = rand(size(psi));
noise = r.*exp(2*pi*1i*theta); noise = r.*exp(2*pi*1i*theta);
psi = psi + 0.25*noise; psi = psi + Params.nsf*noise;
% --- Run --- % --- Run ---
[psi, Observ] = this.propagateWavefunction(psi, Params, VParams, Transf, VDk, V, t_idx, Observ, nn); [psi, Observ] = this.propagateWavefunction(psi, Params, VParams, Transf, VDk, V, t_idx, Observ, nn);

View File

@ -6,7 +6,7 @@ function [Params] = setupParameters(this)
muB = CONSTANTS.BohrMagneton; % [J/T] muB = CONSTANTS.BohrMagneton; % [J/T]
a0 = CONSTANTS.BohrRadius; % [m] a0 = CONSTANTS.BohrRadius; % [m]
m0 = CONSTANTS.AtomicMassUnit; % [kg] m0 = CONSTANTS.AtomicMassUnit; % [kg]
w0 = 2*pi*61.6582; % Angular frequency unit [s^-1] w0 = 2*pi*61.6316; % Angular frequency unit [s^-1]
mu0factor = 0.3049584233607396; % =(m0/me)*pi*alpha^2 -- me=mass of electron, alpha=fine struct. const. mu0factor = 0.3049584233607396; % =(m0/me)*pi*alpha^2 -- me=mass of electron, alpha=fine struct. const.
% mu0=mu0factor *hbar^2*a0/(m0*muB^2) % mu0=mu0factor *hbar^2*a0/(m0*muB^2)
% Number of points in each direction % Number of points in each direction
@ -46,6 +46,8 @@ function [Params] = setupParameters(this)
% even though the solution is good, this just stops it going on forever % 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.nsf = this.NoiseScaleFactor;
Params.njob = this.JobNumber; Params.njob = this.JobNumber;
@ -70,7 +72,7 @@ function [Params] = setupParameters(this)
Params.add = mu0*Params.mu^2*Params.m/(12*pi*hbar^2); Params.add = mu0*Params.mu^2*Params.m/(12*pi*hbar^2);
% DDI strength % DDI strength
Params.gdd = 12*pi*Params.add/l0; %sometimes the 12 is a 4 --> depends on how Vdk (DDI) is defined Params.gdd = 4*pi*Params.add/l0; % sometimes the 12 is a 4 --> depends on how Vdk (DDI) is defined
% Trap gamma % Trap gamma
Params.gx = (Params.wx/w0)^2; Params.gx = (Params.wx/w0)^2;

View File

@ -6,8 +6,8 @@ function [psi] = setupWavefunction(~,Params,Transf)
ellx = sqrt(Params.hbar/(Params.m*Params.wx))/Params.l0; ellx = sqrt(Params.hbar/(Params.m*Params.wx))/Params.l0;
elly = sqrt(Params.hbar/(Params.m*Params.wy))/Params.l0; elly = sqrt(Params.hbar/(Params.m*Params.wy))/Params.l0;
Rx = 4*sqrt(2)*ellx; Rx = 6*sqrt(2)*ellx;
Ry = 4*sqrt(2)*elly; Ry = 6*sqrt(2)*elly;
X0 = 0.0*Transf.Xmax; X0 = 0.0*Transf.Xmax;
Y0 = 0.0*Transf.Ymax; Y0 = 0.0*Transf.Ymax;