From 843bee0072643473c3765c123f8fc055949d6a9a Mon Sep 17 00:00:00 2001
From: Antoine Hoffmann <antoine.hoffmann@epfl.ch>
Date: Mon, 10 Oct 2022 11:12:12 +0200
Subject: [PATCH] fix some matlab scripts

---
 matlab/evolve_tracers.m                       | 18 +++++------
 matlab/extract_fig_data.m                     | 27 +++++++++++-----
 matlab/load/load_grid_data.m                  |  5 ++-
 .../plot_radial_transport_and_spacetime.m     |  8 +++--
 matlab/process_field.m                        | 31 ++++++++++++++++---
 5 files changed, 64 insertions(+), 25 deletions(-)

diff --git a/matlab/evolve_tracers.m b/matlab/evolve_tracers.m
index 952a87ad..a6a738ce 100644
--- a/matlab/evolve_tracers.m
+++ b/matlab/evolve_tracers.m
@@ -1,19 +1,19 @@
 % Options
-SHOW_FILM = 0;
-field2plot  ='Ni00';
+SHOW_FILM = 1;
+field2plot  ='phi';
 INIT     = 'lin';   % lin (for a line)/ round (for a small round)/ gauss for random
-U_TIME   = 200;     % >0 for frozen velocity at a given time, -1 for evolving field
+U_TIME   = 40;     % >0 for frozen velocity at a given time, -1 for evolving field
 Evolve_U = 1;       % 0 for frozen velocity at a given time, 1 for evolving field
-Tfin     = 200;
-dt_      = 0.1;
+Tfin     = 100;
+dt_      = 0.01;
 Nstep    = ceil(Tfin/dt_);
 % Init tracers
 Np      = 20; %number of tracers
 % color = tcolors;
 color = jet(Np);
 tcolors = distinguishable_colors(Np); %Their colors
-
-Na = 1/dt_; %length of trace
+dimmed  = 0; % to dimm the colormap in the background (infty = white, 0 normal color)
+Na = 10/dt_; %length of trace
 
 Traj_x = zeros(Np,Nstep);
 Traj_y = zeros(Np,Nstep);
@@ -224,8 +224,8 @@ while(t_<Tfin && it <= Nstep)
         end
         scale = max(max(abs(F2P))); % Scaling to normalize
         pclr = pcolor(XX_,YY_,F2P/scale); 
-        colormap(bluewhitered); caxis([-1 1]);
-        set(pclr, 'edgecolor','none'); hold on; caxis([-2,2]); shading interp
+        caxis([-1 1]); colormap(bluewhitered); colorbar;
+        set(pclr, 'edgecolor','none'); hold on; caxis([-1+dimmed,1+dimmed]); shading interp
         for ip = 1:Np
             ia0 = max(1,it-Na);
             plot(Traj_x(ip,ia0:it),Traj_y(ip,ia0:it),'.','Color',color(ip,:)); hold on
diff --git a/matlab/extract_fig_data.m b/matlab/extract_fig_data.m
index e7a98b9d..7cd704c8 100644
--- a/matlab/extract_fig_data.m
+++ b/matlab/extract_fig_data.m
@@ -1,3 +1,11 @@
+% tw = [500 1000];
+% tw = [1000 1500];
+% tw = [2000 3000];
+% tw = [3000 4000];
+% tw = [4000 4500];
+% tw = [4500 5000];
+tw = [0 6500];
+
 fig = gcf;
 axObjs = fig.Children;
 dataObjs = axObjs.Children;
@@ -7,18 +15,21 @@ for i = 1:numel(dataObjs)
     X_ = [X_ dataObjs(i).XData];
     Y_ = [Y_ dataObjs(i).YData];
 end
-n0 = 1;
-n1 = numel(X_);
-figure;
-mvm = @(x) movmean(x,1);
+% n0 = 1;
+% n1 = numel(X_);
+[~,n0] = min(abs(X_-tw(1)));
+[~,n1] = min(abs(X_-tw(2)));
+mvm = @(x) movmean(x,50);
 shift = X_(n0);
 % shift = 0;
-% plot(X_(n0:end),Y_(n0:end));
+
+figure;
+plot(X_(n0:end),Y_(n0:end));
 plot(mvm(X_(n0:n1)-shift),mvm(Y_(n0:n1))); hold on;
 
-t0 = ceil(numel(X_)*0.2); t1 = numel(X_);
-avg= mean(Y_(t0:t1)); dev = std(Y_(t0:t1));
-  disp(['AVG =',sprintf('%2.2f',avg),'+-',sprintf('%2.2f',dev)]);
+% t0 = ceil(numel(X_)*0.2); t1 = numel(X_);
+avg= mean(Y_(n0:n1)); dev = std(Y_(n0:n1));
+  disp(['AVG =',sprintf('%4.4f',avg),'+-',sprintf('%4.4f',dev)]);
 % 
 % n1 = n0+1; n2 = min(n1 + 50000,numel(Y_));
 % avg_ = mean(Y_(n1:n2));
diff --git a/matlab/load/load_grid_data.m b/matlab/load/load_grid_data.m
index be964241..940381ec 100644
--- a/matlab/load/load_grid_data.m
+++ b/matlab/load/load_grid_data.m
@@ -1,4 +1,4 @@
-function [ pe, je, pi, ji, kx, ky, z ] = load_grid_data_3D( filename )
+function [ pe, je, pi, ji, kx, ky, z ] = load_grid_data( filename )
 %LOAD_GRID_DATA stored in a hdf5 result file from HeLaZ
     pe    = h5read(filename,'/data/grid/coordp_e');
     je    = h5read(filename,'/data/grid/coordj_e');
@@ -7,4 +7,7 @@ function [ pe, je, pi, ji, kx, ky, z ] = load_grid_data_3D( filename )
     kx    = h5read(filename,'/data/grid/coordkx');
     ky    = h5read(filename,'/data/grid/coordky');
     z     = h5read(filename,'/data/grid/coordz');
+    if (numel(z) == 1) 
+        z = 0;
+    end
 end
\ No newline at end of file
diff --git a/matlab/plot/plot_radial_transport_and_spacetime.m b/matlab/plot/plot_radial_transport_and_spacetime.m
index de18d2d5..5ea5cbc5 100644
--- a/matlab/plot/plot_radial_transport_and_spacetime.m
+++ b/matlab/plot/plot_radial_transport_and_spacetime.m
@@ -10,8 +10,8 @@ function [FIGURE] = plot_radial_transport_and_spacetime(DATA, OPTIONS)
     Gx_infty_std = std (DATA.PGAMMA_RI(its0D:ite0D))*SCALE;
     Qx_infty_avg = mean(DATA.HFLUX_X(its0D:ite0D))*SCALE;
     Qx_infty_std = std (DATA.HFLUX_X(its0D:ite0D))*SCALE;
-    disp(['G_x=',sprintf('%2.2f',Gx_infty_avg),'+-',sprintf('%2.2f',Gx_infty_std)]);
-    disp(['Q_x=',sprintf('%2.2f',Qx_infty_avg),'+-',sprintf('%2.2f',Qx_infty_std)]);
+    disp(['G_x=',sprintf('%2.2e',Gx_infty_avg),'+-',sprintf('%2.2e',Gx_infty_std)]);
+%     disp(['Q_x=',sprintf('%2.2e',Qx_infty_avg),'+-',sprintf('%2.2e',Qx_infty_std)]);
     f_avg_z      = squeeze(mean(DATA.PHI(:,:,:,:),3));
     [~,ikzf] = max(squeeze(mean(abs(f_avg_z(1,:,its3D:ite3D)),3)));
     ikzf = min([ikzf,DATA.Nky]);
@@ -27,7 +27,7 @@ function [FIGURE] = plot_radial_transport_and_spacetime(DATA, OPTIONS)
     end
     Qx_avg    = mean(Qx_ee);
     Qx_err    =  std(Qx_ee);
-    disp(['Q_avg=',sprintf('%2.2f',Qx_avg),'+-',sprintf('%2.2f',Qx_err)]);
+%     disp(['Q_avg=',sprintf('%2.2e',Qx_avg),'+-',sprintf('%2.2e',Qx_err)]);
     %% computations
 
     % Compute Gamma from ifft matlab
@@ -78,7 +78,9 @@ mvm = @(x) movmean(x,OPTIONS.NMVA);
         plot(DATA.Ts0D(its0D:ite0D),ones(ite0D-its0D+1,1)*Qx_infty_avg, '-k',...
             'DisplayName',['$Q_{avg}=',sprintf('%2.2f',Qx_avg),'\pm',sprintf('%2.2f',Qx_err),'$']); legend('show');
         ylabel('$Q_x$')  
+        if(~isnan(Qx_infty_avg))
         ylim([0,5*abs(Qx_infty_avg)]); 
+        end
         xlim([DATA.Ts0D(1),DATA.Ts0D(end)]);
     grid on; set(gca,'xticklabel',[]); 
     title({DATA.param_title,...
diff --git a/matlab/process_field.m b/matlab/process_field.m
index ed7fe9e3..0804e892 100644
--- a/matlab/process_field.m
+++ b/matlab/process_field.m
@@ -52,8 +52,8 @@ Xmax_ = max(max(abs(X))); Ymax_ = max(max(abs(Y)));
 Lmin_ = min([Xmax_,Ymax_]);
 Rx    = Xmax_/Lmin_ * SCALE + (1-SCALE)*1.2; 
 Ry    = Ymax_/Lmin_ * SCALE + (1-SCALE)*1.2; 
-DIMENSIONS = [100, 100, 400*Rx, 400*Ry];
 ASPECT     = [Rx, Ry, 1];
+DIMENSIONS = [100, 100, OPTIONS.RESOLUTION*Rx, OPTIONS.RESOLUTION*Ry];
 % Polar grid
 POLARNAME = [];
 if POLARPLOT
@@ -64,7 +64,7 @@ if POLARPLOT
     Y = Y__;
     XNAME='X';
     YNAME='Z';
-    DIMENSIONS = [100, 100, 500, 500];
+    DIMENSIONS = [100, 100, OPTIONS.RESOLUTION, OPTIONS.RESOLUTION];
     ASPECT     = [1,1,1];
     sz = size(X);
     FIELD = zeros(sz(1),sz(2),Nt);
@@ -407,8 +407,8 @@ switch OPTIONS.NAME
         end 
    case 's_y'
         NAME     = 'sy';
-        [~, KX] = meshgrid(DATA.ky, DATA.kx);
-        vE      = zeros(DATA.Nx,DATA.Ny,DATA.Nz,numel(FRAMES));
+        [KX, ~] = meshgrid(DATA.kx, DATA.ky);
+        vE      = zeros(DATA.Ny,DATA.Nx,DATA.Nz,numel(FRAMES));
         for it = 1:numel(FRAMES)
             for iz = 1:DATA.Nz
             vE(:,:,iz,it)  = real(ifourier_GENE(KX.^2.*(DATA.PHI(:,:,iz,FRAMES(it)))));
@@ -428,6 +428,29 @@ switch OPTIONS.NAME
                 FIELD(:,:,it) = squeeze(compr(tmp));
             end   
         end 
+   case '\omega_z'
+        NAME     = 'vorticity';
+        [KX, KY] = meshgrid(DATA.kx, DATA.ky);
+        wE      = zeros(DATA.Ny,DATA.Nx,DATA.Nz,numel(FRAMES));
+        for it = 1:numel(FRAMES)
+            for iz = 1:DATA.Nz
+            wE(:,:,iz,it)  = real(ifourier_GENE(-(KX.^2+KY.^2).*(DATA.PHI(:,:,iz,FRAMES(it)))));
+            end
+        end
+        if REALP % plot in real space
+            for it = 1:numel(FRAMES)
+                FIELD(:,:,it) = squeeze(compr(wE(:,:,:,it)));
+            end
+        else % Plot spectrum
+            process = @(x) abs(fftshift(x,2));
+            tmp = zeros(DATA.Nky,DATA.Nkx,Nz);
+            for it = 1:FRAMES
+                for iz = 1:numel(DATA.z)
+                    tmp(:,:,iz) = squeeze(process(-(KX.^2+KY.^2).*(DATA.PHI(:,:,iz,FRAMES(it)))));
+                end
+                FIELD(:,:,it) = squeeze(compr(tmp));
+            end   
+        end 
     case '\Gamma_x'
         NAME     = 'Gx';
         [~, KY] = meshgrid(DATA.kx, DATA.ky);
-- 
GitLab