From 51b4d70e68c06e5ff1315e9c2b136f76f0b75ff7 Mon Sep 17 00:00:00 2001
From: Antoine Hoffmann <antoine.hoffmann@epfl.ch>
Date: Fri, 31 Mar 2023 15:13:39 +0200
Subject: [PATCH] add compile results low mem and changed exclusion

---
 .gitignore                                    |  10 +-
 matlab/load/compile_results_3D.m              |  37 +++++
 matlab/load/compile_results_low_mem.m         | 148 ++++++++++++++++++
 .../kobayashi_2015_linear_results.m           |  19 +++
 4 files changed, 209 insertions(+), 5 deletions(-)
 create mode 100644 matlab/load/compile_results_3D.m
 create mode 100644 matlab/load/compile_results_low_mem.m
 create mode 100644 testcases/matlab_testscripts/kobayashi_2015_linear_results.m

diff --git a/.gitignore b/.gitignore
index f2c5b1fc..e43fa292 100644
--- a/.gitignore
+++ b/.gitignore
@@ -40,9 +40,9 @@ local/
 Gallery/
 .vscode/settings.json
 *figure*
-*results*
-out*
+results*
+out*
 !scripts/*
-*.avi
-gyacomo
-gyacomo_dbg
+*.avi
+gyacomo
+gyacomo_dbg
diff --git a/matlab/load/compile_results_3D.m b/matlab/load/compile_results_3D.m
new file mode 100644
index 00000000..e00ddecf
--- /dev/null
+++ b/matlab/load/compile_results_3D.m
@@ -0,0 +1,37 @@
+function [field, Ts3D] = compile_results_3D(DIRECTORY,JOBNUMMIN,JOBNUMMAX,fieldname)
+CONTINUE = 1;
+JOBNUM   = JOBNUMMIN; JOBFOUND = 0;
+% field
+field    = [];
+Ts3D    = [];
+ii = 1;
+while(CONTINUE)
+    filename = sprintf([DIRECTORY,'outputs_%.2d.h5'],JOBNUM);
+    % Check presence and jobnummax
+    if (exist(filename, 'file') == 2 && JOBNUM <= JOBNUMMAX)
+        %test if it is corrupted or currently running
+        try
+            openable = ~isempty(h5read(filename,'/data/var3d/time'));
+        catch
+            openable = 0;
+        end
+        if openable
+        % load field %%
+        [ F, T, ~] = load_3D_data(filename, fieldname);
+        field  = cat(4,field,F);
+        Ts3D  = cat(1,Ts3D,T);
+        ii = ii + 1;
+        JOBFOUND = JOBFOUND + 1;
+        end
+    elseif (JOBNUM > JOBNUMMAX)
+        CONTINUE = 0;
+    end
+    JOBNUM   = JOBNUM + 1;
+end
+
+if(JOBFOUND == 0)
+    disp('no results found, please verify the paths');
+    return;
+end
+
+end
\ No newline at end of file
diff --git a/matlab/load/compile_results_low_mem.m b/matlab/load/compile_results_low_mem.m
new file mode 100644
index 00000000..c86518e8
--- /dev/null
+++ b/matlab/load/compile_results_low_mem.m
@@ -0,0 +1,148 @@
+function [DATA] = compile_results_low_mem(DATA,DIRECTORY,JOBNUMMIN,JOBNUMMAX)
+CONTINUE = 1;
+JOBNUM   = JOBNUMMIN; JOBFOUND = 0;
+DATA.TJOB_SE  = []; % Start and end times of jobs
+DATA.NU_EVOL  = []; % evolution of parameter nu between jobs
+DATA.CO_EVOL  = []; % evolution of CO
+DATA.MUx_EVOL  = []; % evolution of parameter mu between jobs
+DATA.MUy_EVOL  = []; % evolution of parameter mu between jobs
+DATA.MUz_EVOL  = []; % evolution of parameter mu between jobs
+DATA.K_N_EVOL = []; %
+DATA.K_T_EVOL = []; %
+DATA.L_EVOL   = []; % 
+DATA.DT_EVOL  = []; %
+% Low memoery cost data
+HFLUXI_   = [];
+HFLUXE_   = [];
+GGAMMAI_ = [];
+PGAMMAI_ = [];
+Ts0D_    = [];
+DATA.outfilenames = {};
+ii = 1;
+while(CONTINUE)
+    filename = sprintf([DIRECTORY,'outputs_%.2d.h5'],JOBNUM);
+    % Check presence and jobnummax
+    if (exist(filename, 'file') == 2 && JOBNUM <= JOBNUMMAX)
+        DATA.outfilenames{ii} = filename;
+        %test if it is corrupted or currently running
+        try
+            openable = ~isempty(h5read(filename,'/data/var3d/time'));
+        catch
+            openable = 0;
+        end
+        if openable
+            %% load results %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+            disp(sprintf('Loading ID %.2d (%s)',JOBNUM,filename));
+            % Loading from output file
+            CPUTIME   = h5readatt(filename,'/data/input','cpu_time');
+            DT_SIM    = h5readatt(filename,'/data/input/basic','dt');
+            [Pe, Je, Pi, Ji, kx, ky, z] = load_grid_data(filename);
+            W_GAMMA   = strcmp(h5readatt(filename,'/data/input/diag_par','write_gamma'),'y');
+            W_HF      = strcmp(h5readatt(filename,'/data/input/diag_par','write_hf'   ),'y');
+            KIN_E     = strcmp(h5readatt(filename,'/data/input/model',     'ADIAB_E' ),'n');
+
+            if W_GAMMA
+                [ GGAMMA_RI, Ts0D, ~] = load_0D_data(filename, 'gflux_xi');
+                PGAMMA_RI            = load_0D_data(filename, 'pflux_xi');
+                GGAMMAI_ = cat(1,GGAMMAI_,GGAMMA_RI); clear GGAMMA_RI
+                PGAMMAI_ = cat(1,PGAMMAI_,PGAMMA_RI); clear PGAMMA_RI
+            end
+
+            if W_HF
+                [ HFLUX_XI, Ts0D, ~] = load_0D_data(filename, 'hflux_xi');
+                HFLUXI_ = cat(1,HFLUXI_,HFLUX_XI); clear HFLUX_XI
+            end
+
+            Ts0D_   = cat(1,Ts0D_,Ts0D);
+
+            % Evolution of simulation parameters
+            load_params
+            DATA.TJOB_SE   = [DATA.TJOB_SE   Ts0D(1)     Ts0D(end)];
+            DATA.NU_EVOL   = [DATA.NU_EVOL   DATA.NU     DATA.NU];
+            DATA.CO_EVOL   = [DATA.CO_EVOL   DATA.CO     DATA.CO];
+            DATA.MUx_EVOL  = [DATA.MUx_EVOL  DATA.MUx    DATA.MUx];
+            DATA.MUy_EVOL  = [DATA.MUy_EVOL  DATA.MUy    DATA.MUy];
+            DATA.MUz_EVOL  = [DATA.MUz_EVOL  DATA.MUz    DATA.MUz];
+            DATA.K_N_EVOL  = [DATA.K_N_EVOL DATA.K_N   DATA.K_N];
+            DATA.K_T_EVOL  = [DATA.K_T_EVOL DATA.K_T   DATA.K_T];
+            DATA.L_EVOL    = [DATA.L_EVOL    DATA.L      DATA.L];
+            DATA.DT_EVOL   = [DATA.DT_EVOL   DATA.DT_SIM DATA.DT_SIM];
+
+            ii = ii + 1;
+            JOBFOUND = JOBFOUND + 1;
+            LASTJOB  = JOBNUM;
+        end
+    elseif (JOBNUM > JOBNUMMAX)
+        CONTINUE = 0;
+        disp(['found ',num2str(JOBFOUND),' results']);
+    end
+    JOBNUM   = JOBNUM + 1;
+end
+
+if(JOBFOUND == 0)
+    disp('no results found, please verify the paths');
+    return;
+else
+    %% Build grids
+
+    Nky = numel(ky); 
+    if Nky > 1
+        dky = ky(2); 
+        Ly = 2*pi/dky;   
+    else
+        dky = 0;
+        Ly  = 0;   
+    end
+    [~,iky0] = min(abs(ky)); 
+    Ny = 2*Nky-1;  
+    y  = linspace(-Ly/2,Ly/2,Ny+1); y = y(1:end-1);
+
+    Nkx = numel(kx);
+    if Nkx > 1
+        dkx = kx(2);
+        Lx = 2*pi/dkx;
+    else
+        dkx = 0;
+        Lx  = 0;
+    end    
+    [~,ikx0] = min(abs(kx));
+    Nx = Nkx;      
+    x  = linspace(-Lx/2,Lx/2,Nx+1); x = x(1:end-1);
+
+    Nz = numel(z);
+
+    [KX,KY] = meshgrid(kx,ky);
+    KPERP2 = KX.^2+KY.^2;
+    %% Add everything in output structure
+    % scaling
+    DATA.scale = 1;%(1/Nx/Ny)^2;
+    % Fields
+    DATA.GGAMMA_RI = GGAMMAI_; DATA.PGAMMA_RI = PGAMMAI_; DATA.HFLUX_X = HFLUXI_;
+    if(KIN_E)
+    DATA.HFLUX_XE = HFLUXE_;
+    end
+    DATA.Ts0D = Ts0D_;
+    DATA.KIN_E=KIN_E;
+    % grids
+    DATA.Pe = Pe; DATA.Pi = Pi; 
+    DATA.Je = Je; DATA.Ji = Ji; 
+    DATA.kx = kx; DATA.ky = ky; DATA.z = z; DATA.Npol = -z(1)/pi;
+    DATA.x  = x;  DATA.y  = y;
+    DATA.ikx0 = ikx0; DATA.iky0 = iky0;
+    DATA.Nx = Nx; DATA.Ny = Ny; DATA.Nz = Nz; DATA.Nkx = Nkx; DATA.Nky = Nky; 
+    DATA.Pmaxe = numel(Pe); DATA.Pmaxi = numel(Pi); DATA.Jmaxe = numel(Je); DATA.Jmaxi = numel(Ji);
+    DATA.dir      = DIRECTORY;
+    DATA.localdir = DIRECTORY;
+    DATA.param_title=['$\nu_{',DATA.CONAME,'}=$', num2str(DATA.NU), ...
+        ', $\kappa_{Ni}=$',num2str(DATA.K_N),', $\kappa_{Ti}=$',num2str(DATA.K_T),...
+        ', $L=',num2str(DATA.L),'$, $N=',...
+        num2str(DATA.Nx),'$, $(P,J)=(',num2str(DATA.Pi(end)),',',...
+        num2str(DATA.Ji(end)),')$,',' $\mu_{hd}=$(',num2str(DATA.MUx),...
+        ',',num2str(DATA.MUy),')'];
+    DATA.paramshort = [num2str(DATA.Pmaxi),'x',num2str(DATA.Jmaxi),'x',...
+        num2str(DATA.Nkx),'x',num2str(DATA.Nky),'x',num2str(DATA.Nz)];
+    JOBNUM = LASTJOB;
+
+    filename = sprintf([DIRECTORY,'outputs_%.2d.h5'],JOBNUM);
+end
+end
\ No newline at end of file
diff --git a/testcases/matlab_testscripts/kobayashi_2015_linear_results.m b/testcases/matlab_testscripts/kobayashi_2015_linear_results.m
new file mode 100644
index 00000000..82f33912
--- /dev/null
+++ b/testcases/matlab_testscripts/kobayashi_2015_linear_results.m
@@ -0,0 +1,19 @@
+% results for blue triangles in Kobayashi 2015
+% x_ = [0.06 0.4 0.6];
+% y_ = [0.0 0.1 0.0];
+% plot(x_,y_,'^b','DisplayName','Kobayashi et al. 2015');
+
+
+% results for red squares in Kobayashi 2015
+% x_ = [0.065 0.15 0.35];
+% y_ = [0.0   0.15 0.0];
+% plot(x_,y_,'sr','DisplayName','Kobayashi et al. 2015');
+
+
+% results for green triangles in Kobayashi 2015
+x_ = [0.06  0.5  1.8];
+y_ = [0.0   0.2  0.0];
+plot(x_,y_,'dg','DisplayName','Kobayashi et al. 2015');
+
+
+
-- 
GitLab