From 1856a26e92c0908ec2558371381084a1e90821e6 Mon Sep 17 00:00:00 2001 From: Karthik Date: Sat, 3 May 2025 12:27:34 +0200 Subject: [PATCH] Script to manually generate the phase diagram added --- .../+Scripts/createPhaseDiagram.m | 66 +++++++++++++++++++ Dipolar-Gas-Simulator/+Scripts/run_locally.m | 24 +++---- 2 files changed, 78 insertions(+), 12 deletions(-) create mode 100644 Dipolar-Gas-Simulator/+Scripts/createPhaseDiagram.m diff --git a/Dipolar-Gas-Simulator/+Scripts/createPhaseDiagram.m b/Dipolar-Gas-Simulator/+Scripts/createPhaseDiagram.m new file mode 100644 index 0000000..4a53c33 --- /dev/null +++ b/Dipolar-Gas-Simulator/+Scripts/createPhaseDiagram.m @@ -0,0 +1,66 @@ +function createPhaseDiagram() + % Define axis values + SCATTERING_LENGTH_RANGE = [79.0 80.0 81.0 82.0 83.0 84.0 85.0 86.0 87.0 88.0 89.0 90.0]; + NUM_ATOMS_LIST = [50000 60000 70000 80000]; + + M = zeros(12, 4); % Phase diagram matrix + + fig = figure('Name', 'Manual Phase Diagram Input', ... + 'NumberTitle', 'off', ... + 'KeyPressFcn', @keyCallback); + + hImg = imagesc(M); + set(gca, 'YDir', 'normal'); + colormap(parula); + colorbar; + axis equal tight; + xticks(1:4); + yticks(1:12); + xticklabels(string(NUM_ATOMS_LIST)); + yticklabels(string(SCATTERING_LENGTH_RANGE)); + xlabel('Number of Atoms'); + ylabel('Scattering Length (a0)'); + grid on; + title('Click a cell to label it. Press "q" to quit.'); + + set(fig, 'WindowButtonDownFcn', @clickCallback); + uiwait(fig); % Wait until user quits + + [filename, pathname] = uiputfile('phase_diagram_matrix.mat', 'Save Matrix As'); + if ischar(filename) + save(fullfile(pathname, filename), 'M', 'SCATTERING_LENGTH_RANGE', 'NUM_ATOMS_LIST'); + disp(['Matrix saved to ' fullfile(pathname, filename)]); + end + + function clickCallback(~, ~) + C = get(gca, 'CurrentPoint'); + col = round(C(1,1)); + row = round(C(1,2)); + if row >= 1 && row <= 12 && col >= 1 && col <= 4 + prompt = sprintf('Enter label for scattering length %.1f and N = %d:', ... + SCATTERING_LENGTH_RANGE(row), NUM_ATOMS_LIST(col)); + answer = inputdlg(prompt, 'Input Label', 1); + if ~isempty(answer) + val = str2double(answer{1}); + if ~isnan(val) + M(row, col) = val; + refreshDisplay(); + else + warndlg('Invalid input. Please enter a numeric value.', 'Invalid Input'); + end + end + end + end + + function keyCallback(~, event) + if strcmp(event.Key, 'q') + uiresume(fig); + close(fig); + end + end + + function refreshDisplay() + set(hImg, 'CData', M); + drawnow; + end +end diff --git a/Dipolar-Gas-Simulator/+Scripts/run_locally.m b/Dipolar-Gas-Simulator/+Scripts/run_locally.m index 19b5c9c..a2a9f9e 100644 --- a/Dipolar-Gas-Simulator/+Scripts/run_locally.m +++ b/Dipolar-Gas-Simulator/+Scripts/run_locally.m @@ -549,51 +549,51 @@ SaveDirectory = './Results/Data_3D/AnisotropicTrap/TiltedDipoles45'; JobNumber = 0; Plotter.visualizeGSWavefunction(SaveDirectory, JobNumber) %% -SaveDirectory = './Results/Data_3D/GradientDescent/aS_079_theta_000_phi_000_N_90000'; +SaveDirectory = './Results/Data_3D/GradientDescent/aS_079_theta_000_phi_000_N_50000'; JobNumber = 0; Plotter.visualizeGSWavefunction(SaveDirectory, JobNumber) %% -SaveDirectory = './Results/Data_3D/GradientDescent/aS_080_theta_000_phi_000_N_90000'; +SaveDirectory = './Results/Data_3D/GradientDescent/aS_080_theta_000_phi_000_N_50000'; JobNumber = 0; Plotter.visualizeGSWavefunction(SaveDirectory, JobNumber) %% -SaveDirectory = './Results/Data_3D/GradientDescent/aS_081_theta_000_phi_000_N_90000'; +SaveDirectory = './Results/Data_3D/GradientDescent/aS_081_theta_000_phi_000_N_50000'; JobNumber = 0; Plotter.visualizeGSWavefunction(SaveDirectory, JobNumber) %% -SaveDirectory = './Results/Data_3D/GradientDescent/aS_082_theta_000_phi_000_N_90000'; +SaveDirectory = './Results/Data_3D/GradientDescent/aS_082_theta_000_phi_000_N_60000'; JobNumber = 0; Plotter.visualizeGSWavefunction(SaveDirectory, JobNumber) %% -SaveDirectory = './Results/Data_3D/GradientDescent/aS_083_theta_000_phi_000_N_90000'; +SaveDirectory = './Results/Data_3D/GradientDescent/aS_083_theta_000_phi_000_N_60000'; JobNumber = 0; Plotter.visualizeGSWavefunction(SaveDirectory, JobNumber) %% -SaveDirectory = './Results/Data_3D/GradientDescent/aS_084_theta_000_phi_000_N_90000'; +SaveDirectory = './Results/Data_3D/GradientDescent/aS_084_theta_000_phi_000_N_70000'; JobNumber = 0; Plotter.visualizeGSWavefunction(SaveDirectory, JobNumber) %% -SaveDirectory = './Results/Data_3D/GradientDescent/aS_085_theta_000_phi_000_N_90000'; +SaveDirectory = './Results/Data_3D/GradientDescent/aS_085_theta_000_phi_000_N_70000'; JobNumber = 0; Plotter.visualizeGSWavefunction(SaveDirectory, JobNumber) %% -SaveDirectory = './Results/Data_3D/GradientDescent/aS_086_theta_000_phi_000_N_90000'; +SaveDirectory = './Results/Data_3D/GradientDescent/aS_086_theta_000_phi_000_N_80000'; JobNumber = 0; Plotter.visualizeGSWavefunction(SaveDirectory, JobNumber) %% -SaveDirectory = './Results/Data_3D/GradientDescent/aS_087_theta_000_phi_000_N_90000'; +SaveDirectory = './Results/Data_3D/GradientDescent/aS_087_theta_000_phi_000_N_100000'; JobNumber = 0; Plotter.visualizeGSWavefunction(SaveDirectory, JobNumber) %% -SaveDirectory = './Results/Data_3D/GradientDescent/aS_088_theta_000_phi_000_N_90000'; +SaveDirectory = './Results/Data_3D/GradientDescent/aS_089_theta_000_phi_000_N_105000'; JobNumber = 0; Plotter.visualizeGSWavefunction(SaveDirectory, JobNumber) %% -SaveDirectory = './Results/Data_3D/GradientDescent/aS_089_theta_000_phi_000_N_90000'; +SaveDirectory = './Results/Data_3D/GradientDescent/aS_084_theta_000_phi_000_N_65000'; JobNumber = 0; Plotter.visualizeGSWavefunction(SaveDirectory, JobNumber) %% -SaveDirectory = './Results/Data_3D/GradientDescent/aS_090_theta_000_phi_000_N_90000'; +SaveDirectory = './Results/Data_3D/GradientDescent/aS_090_theta_000_phi_000_N_70000'; JobNumber = 0; Plotter.visualizeGSWavefunction(SaveDirectory, JobNumber) %%