From 16e835a9888509c4104123ac31e86b82ece96406 Mon Sep 17 00:00:00 2001
From: Antoine Hoffmann <antoine.hoffmann@epfl.ch>
Date: Sat, 30 Sep 2023 11:29:50 +0200
Subject: [PATCH] script to load and analyze fast large scans

---
 wk/p3_geom_scan_analysis.m | 117 +++++++++++++++++++++++++++++++++++++
 1 file changed, 117 insertions(+)
 create mode 100644 wk/p3_geom_scan_analysis.m

diff --git a/wk/p3_geom_scan_analysis.m b/wk/p3_geom_scan_analysis.m
new file mode 100644
index 00000000..552319c3
--- /dev/null
+++ b/wk/p3_geom_scan_analysis.m
@@ -0,0 +1,117 @@
+% Get the current directory (wk)
+curdir  = pwd;
+% Get the scan directory
+if 0 % delta kappa scan
+    scandir = '/misc/gyacomo23_outputs/paper_3/DTT_rho85_geom_scan/P2_J1_delta_kappa_scan/';
+    % scandir = '/misc/gyacomo23_outputs/paper_3/DTT_rho85_geom_scan/P4_J2/';
+    % scandir = '/misc/gyacomo23_outputs/paper_3/DTT_rho85_geom_scan/P4_J2_delta_kappa_scan/';
+    pnam1 = '$\delta$'; attr1 = 'delta'; pref1 = 0.23;
+    pnam2 = '$\kappa$'; attr2 = 'kappa'; pref2 = 1.53;
+else % shear safety factor scan
+    scandir = '/misc/gyacomo23_outputs/paper_3/DTT_rho85_geom_scan/P2_J1_PT_sfact_shear_scan/';
+    % scandir = '/misc/gyacomo23_outputs/paper_3/DTT_rho85_geom_scan/P2_J1_NT_sfact_shear_scan/';
+    pnam1 = '$\hat s$'; attr1 = 'shear'; pref1 = 3.63;
+    pnam2 = '$q_0$';    attr2 = 'q0';    pref2 =-2.15;
+end
+% Get a list of all items in the current directory
+contents = dir(scandir);
+
+% give ref value and param names
+REFVAL= 0;
+
+
+% Iterate through the contents
+Qxavg = []; Qxerr = []; para1 = []; para2 = [];
+for i = 1:length(contents)
+    % Check if the item is a directory and not '.' or '..'
+    if contents(i).isdir && ~strcmp(contents(i).name, '.') && ~strcmp(contents(i).name, '..')
+        % Get and display the name of the subdirectory
+        sdubdir = [scandir,contents(i).name];
+        disp(['Subdirectory: ' contents(i).name]);
+        % Get parameters
+        param = read_namelist([sdubdir,'/fort_00.90']);
+        para1 = [para1 param.GEOMETRY.(attr1)];
+        para2 = [para2 param.GEOMETRY.(attr2)];        
+        % Now you are in the subdirectory. You can perform operations here.
+        [t_all, Pxi_all, Qxi_all, Pxe_all, Qxe_all] = read_flux_out_XX(sdubdir);
+        if(t_all(end) > 40)
+            [fullAvg,sliceAvg,sliceErr] = sliceAverage(Qxi_all+Qxe_all,3);
+            Qxavg = [Qxavg fullAvg];
+            Qxerr = [Qxerr mean(sliceErr)];
+        else
+            Qxavg = [Qxavg nan];
+            Qxerr = [Qxerr nan];
+        end
+    end
+end
+%% reshaping, sorting and plotting
+p1 = unique(para1);
+p2 = unique(para2);
+N1 = numel(p1);
+N2 = numel(p2);
+
+if para1(1) == para1(2)
+    sz = [N2 N1];
+    TRANSPOSE = 1;
+else
+    sz = [N1 N2];
+    TRANSPOSE = 0;
+end
+
+Zavg = reshape(Qxavg,sz);
+Zerr = reshape(Qxerr,sz);
+XX   = reshape(para1,sz);
+YY   = reshape(para2,sz);
+
+if TRANSPOSE
+    Zavg = Zavg';
+    Zerr = Zerr';
+    XX = XX';
+    YY = YY';
+end
+
+[~,idx1] = sort(XX(:,1));
+[~,idx2] = sort(YY(1,:));
+Zavg = Zavg(idx1,idx2);
+Zerr = Zerr(idx1,idx2);
+XX   = XX(idx1,idx2);
+YY   = YY(idx1,idx2);
+
+% compute the 
+if REFVAL
+    [~,iref1] = min(abs(XX(:,1)-pref1));
+    [~,iref2] = min(abs(YY(1,:)-pref2));
+    xref  = XX(iref1,iref2);
+    yref  = YY(iref1,iref2);
+    Qxref = Zavg(iref1,iref2);
+    Zavg = (Zavg-Qxref)/Qxref * 100;
+    Qxname = '$\langle (Q_{tot}-Q_{ref})/Q_{ref} \rangle_t[\%]$';
+    Qrefname = ['$Q_{ref}=$',num2str(Qxref)];
+else
+    Qxname = '$\langle Q_{tot} \rangle_t$';
+end
+
+% Figure
+figure
+subplot(1,2,1)
+% contourf(XX(:,1),YY(1,:),Zavg',13); hold on
+[xx_,yy_] = meshgrid(XX(:,1),YY(1,:));
+imagesc_custom(xx_,yy_,Zavg'); hold on
+if REFVAL
+    plot(xref,yref,'xk','MarkerSize',14,'DisplayName',Qrefname)
+end
+xlabel(pnam1); ylabel(pnam2);
+title(Qxname)
+colormap(bluewhitered); colorbar;
+subplot(1,2,2)
+for i = 1:N2
+    errorbar(XX(:,i),Zavg(:,i),Zerr(:,i),...
+        'DisplayName',[pnam2,'=',num2str(para2(1,i))]);
+    hold on;
+end
+if REFVAL
+    plot(xref,0,'xk','MarkerSize',14,'DisplayName',Qrefname)
+end
+grid on
+xlabel(pnam1); ylabel(Qxname);
+legend('show');
-- 
GitLab