From ef30a9806ed826a5a7ef5e04b8d892e0ca656c5a Mon Sep 17 00:00:00 2001
From: Antoine Cyril David Hoffmann <ahoffman@spcpc606.epfl.ch>
Date: Tue, 7 Jul 2020 10:12:20 +0200
Subject: [PATCH] Cleaned and refreshed

---
 wk/benchmark_kperp_scan.m  |  80 +++++++++++----------
 wk/benchmark_time_solver.m | 141 ++++++++++++++++---------------------
 wk/fort.90                 |  32 ++++-----
 3 files changed, 118 insertions(+), 135 deletions(-)

diff --git a/wk/benchmark_kperp_scan.m b/wk/benchmark_kperp_scan.m
index bdec0eb9..e14e54eb 100644
--- a/wk/benchmark_kperp_scan.m
+++ b/wk/benchmark_kperp_scan.m
@@ -12,19 +12,19 @@ OUTPUTS.write_phi     = '.true.';
 OUTPUTS.write_doubleprecision = '.true.';
 OUTPUTS.resfile0      = '''results''';
 %% Grid parameters
-GRID.pmaxe = 15;
-GRID.jmaxe = 6;
-GRID.pmaxi = 15;
-GRID.jmaxi = 6;
+GRID.pmaxe = 12;
+GRID.jmaxe = 7;
+GRID.pmaxi = 12;
+GRID.jmaxi = 7;
 GRID.nkr   = 1;
 GRID.krmin = 0.;
 GRID.krmax = 0.;
 GRID.nkz   = 20;
 GRID.kzmin = 0.1;
-GRID.kzmax = 1.5;
+GRID.kzmax = 2.0;
 %% Model parameters
 MODEL.CO      = -2;  % Collision operator (0 : L.Bernstein, -1 : Full Coulomb, -2 : Dougherty)
-MODEL.nu      = 0.1; % collisionality nu*L_perp/Cs0
+MODEL.nu      = 0.01; % collisionality nu*L_perp/Cs0
 % temperature ratio T_a/T_e
 MODEL.tau_e   = 1.0;
 MODEL.tau_i   = 1.0;
@@ -48,7 +48,18 @@ BASIC.tmax                = 100.0;
 INITIAL.initback_moments  = 0.01;
 INITIAL.initnoise_moments = 0.;
 INITIAL.iseed             = 42;
-
+INITIAL.selfmat_file = ...
+    ['''../iCa/self_Coll_GKE_0_GKI_0_ESELF_1_ISELF_1_Pmaxe_',num2str(GRID.pmaxe),...
+    '_Jmaxe_',num2str(GRID.jmaxe),'_Pmaxi_',num2str(GRID.pmaxi),'_Jmaxi_',...
+    num2str(GRID.jmaxi),'_pamaxx_10.h5'''];
+INITIAL.eimat_file = ...
+    ['''../iCa/ei_Coll_GKE_0_GKI_0_ETEST_1_EBACK_1_Pmaxe_',num2str(GRID.pmaxe),...
+    '_Jmaxe_',num2str(GRID.jmaxe),'_Pmaxi_',num2str(GRID.pmaxi),'_Jmaxi_',...
+    num2str(GRID.jmaxi),'_pamaxx_10_tau_1.0000_mu_0.0233.h5'''];
+INITIAL.iemat_file = ...
+    ['''../iCa/ie_Coll_GKE_0_GKI_0_ITEST_1_IBACK_1_Pmaxe_',num2str(GRID.pmaxe),...
+    '_Jmaxe_',num2str(GRID.jmaxe),'_Pmaxi_',num2str(GRID.pmaxi),'_Jmaxi_',...
+    num2str(GRID.jmaxi),'_pamaxx_10_tau_1.0000_mu_0.0233.h5'''];
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %% Write input file
 INPUT = write_fort90(OUTPUTS,GRID,MODEL,INITIAL,TIME_INTEGRATION,BASIC);
@@ -72,63 +83,58 @@ end
 %% Analysis and basic figures
 SAVEFIG = 1;
 filename = 'results_00.h5';
-
-if     MODEL.CO == -1; CONAME = 'FC';
-elseif MODEL.CO == -2; CONAME = 'DC';
-elseif MODEL.CO ==  0; CONAME = 'LB'; end;
-
-TITLE  = [];
-TITLE = [TITLE,'$\eta_n=',num2str(MODEL.eta_n),'$, '];
-TITLE = [TITLE,'$\eta_B=',num2str(MODEL.eta_B),'$, '];
-TITLE = [TITLE,'$\eta_T=',num2str(MODEL.eta_T),'$, '];
-TITLE = [TITLE,   '$\nu=',num2str(MODEL.nu),'$, '];
-TITLE = [TITLE, '$(P,J)=(',num2str(GRID.pmaxe),',',num2str(GRID.jmaxe),')$'];
+default_plots_options
 
 %% Growth rate analysis
-gammas = zeros(numel(kr),numel(kz));
-shifts = zeros(numel(kr),numel(kz));
-
 moment = 'Ni00';
 
 kr       = h5read(filename,['/data/var2d/' moment '/coordkr']);
 kz       = h5read(filename,['/data/var2d/' moment '/coordkz']);
-timeNi   = h5read(filename,'/data/var2d/time');
-Nipj     = zeros(numel(timeNi),numel(kr),numel(kz));
+timeNi   = squeeze(h5read(filename,'/data/var2d/time'));
+Ni00     = zeros(numel(kr),numel(kz),numel(timeNi));
 
 for it = 1:numel(timeNi)
     tmp          = h5read(filename,['/data/var2d/', moment,'/', num2str(it,'%06d')]);
-    Nipj(it,:,:) = tmp.real + 1i * tmp.imaginary; 
+    Ni00(:,:,it) = tmp.real + 1i * tmp.imaginary; 
 end
 
-% Linear fit of log(Napj)
-x1    = timeNi;
-itmin = ceil(0.5 * numel(timeNi)); %Take the second half of the time evolution
+% Amplitude ratio method
 ikr   = 1;
-
+gammas = zeros(numel(kr),numel(kz));
+Napj  = ones(numel(timeNi),(GRID.pmaxe+1)*(GRID.jmaxe+1)+(GRID.pmaxi+1)*(GRID.jmaxi+1));
 for ikz = 1:numel(kz)
-    fit = polyfit(x1(itmin:end),log(abs(Nipj(itmin:end,ikr,ikz))),1);
-    gammas(ikr,ikz) = fit(1);
-    shifts(ikr,ikz) = fit(2);
+   gammas(ikr,ikz) = LinearFit_s(squeeze(timeNi), squeeze(abs(Ni00(ikr,ikz,:))));
 end
 
 %% Plot
 fig = figure;
 
+X = kz*sqrt(1+MODEL.tau_i); % Convert to Ricci 2006 Normalization
+
+subplot(121) % growth rate
 %HeLaZ results
-X = kz*sqrt(1+MODEL.tau_i);
-Y = gammas(1,:);
-plot(X,Y,'-','DisplayName','HeLaZ')
+Y1 = gammas(1,:);
+plot(X,Y1,'-','DisplayName','HeLaZ')
 hold on
 
 %MOLI results
-X = kz*sqrt(1+MODEL.tau_i);
-Y = results.kperp.Maxgammas;
-plot(X,Y,'--','DisplayName','MOLI');
+Y2 = results.kperp.Maxgammas;
+plot(X,Y2,'--','DisplayName','MOLI');
 title(TITLE);
 grid on
 legend('show')
 xlabel('$k_\perp * (1+\tau)^{1/2}$')
 ylabel('$\gamma L_\perp/c_{s} $')
+
+subplot(122) % Error
+ERR = abs(gammas(1,:)' - results.kperp.Maxgammas);
+
+plot(X,ERR,'-','DisplayName','MOLI relative error');
+grid on
+legend('show')
+xlabel('$k_\perp * (1+\tau)^{1/2}$')
+ylabel('$\epsilon_\gamma $')
+
 if SAVEFIG; FIGNAME = 'g_vs_kz'; save_figure; end;
 
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\ No newline at end of file
diff --git a/wk/benchmark_time_solver.m b/wk/benchmark_time_solver.m
index a330b5f3..2eaaaa26 100644
--- a/wk/benchmark_time_solver.m
+++ b/wk/benchmark_time_solver.m
@@ -21,11 +21,11 @@ GRID.nkr   = 1;
 GRID.krmin = 0.;
 GRID.krmax = 0.;
 GRID.nkz   = 1;
-GRID.kzmin = 1.0;
-GRID.kzmax = 1.0;
+GRID.kzmin = 0.67;
+GRID.kzmax = 0.67;
 %% Model parameters
 MODEL.CO      = -2;  % Collision operator (0 : L.Bernstein, -1 : Full Coulomb, -2 : Dougherty)
-MODEL.nu      = 1.0; % collisionality nu*L_perp/Cs0
+MODEL.nu      = 0.01; % collisionality nu*L_perp/Cs0
 % temperature ratio T_a/T_e
 MODEL.tau_e   = 1.0;
 MODEL.tau_i   = 1.0;
@@ -36,16 +36,16 @@ MODEL.sigma_i = 1.0;
 MODEL.q_e     =-1.0;
 MODEL.q_i     = 1.0;
 % gradients L_perp/L_x
-MODEL.eta_n   = 0.0;        % Density
+MODEL.eta_n   = 1.0;        % Density
 MODEL.eta_T   = 0.0;        % Temperature
-MODEL.eta_B   = 0.0;        % Magnetic
+MODEL.eta_B   = 0.5;        % Magnetic
 % Debye length
 MODEL.lambdaD = 0.0;
 %% Time integration and intialization parameters
 TIME_INTEGRATION.numerical_scheme  = '''RK4''';
 BASIC.nrun                = 100000;
-BASIC.dt                  = 0.01;
-BASIC.tmax                = 5.0;
+BASIC.dt                  = 0.05;
+BASIC.tmax                = 100.0;
 INITIAL.initback_moments  = 0.01;
 INITIAL.initnoise_moments = 0.;
 INITIAL.iseed             = 42;
@@ -85,92 +85,46 @@ end
 default_plots_options
 SAVEFIG = 1;
 filename = 'results_00.h5';
-TITLE  = [];
-TITLE = [TITLE,'$\eta_n=',num2str(MODEL.eta_n),'$, '];
-TITLE = [TITLE,'$\eta_B=',num2str(MODEL.eta_B),'$, '];
-TITLE = [TITLE,'$\eta_T=',num2str(MODEL.eta_T),'$, '];
-TITLE = [TITLE,   '$\nu=',num2str(MODEL.nu),'$, '];
-TITLE = [TITLE, '$(P,J)=(',num2str(GRID.pmaxe),',',num2str(GRID.jmaxe),')$'];
-if     MODEL.CO == -1; CONAME = 'FC';
-elseif MODEL.CO == -2; CONAME = 'DC';
-elseif MODEL.CO ==  0; CONAME = 'LB'; end;
-
-bare = @(pp,jj) (GRID.jmaxe +1)*pp + jj+1;                      % electron 1D-index
-bari = @(pp,jj) bare(GRID.pmaxe, GRID.jmaxe)+(GRID.jmaxi +1)*pp + jj+1; % ion 1D-index
+default_plots_options
+TITLE  = [', $k_z=',num2str(GRID.kzmin)];
 
-%% Nepj
-% 
-% moment = 'moments_e';
-% 
-% kr       = h5read(filename,['/data/var5d/' moment '/coordkr']);
-% kz       = h5read(filename,['/data/var5d/' moment '/coordkz']);
-% time   = h5read(filename,'/data/var5d/time');
-% Nepj     = zeros(GRID.pmaxe+1, GRID.jmaxe+1,numel(kr),numel(kz),numel(time));
-% for it = 1:numel(time)
-%     tmp          = h5read(filename,['/data/var5d/', moment,'/', num2str(it,'%06d')]);
-%     Nepj(:,:,:,:,it) = tmp.real + 1i * tmp.imaginary; 
-% end
-% 
-% fig = figure;
-% 
-% %HeLaZ results
-% x1 = time;
-% y1 = x1;
-% ic = 1;
-% for ikr = 1:GRID.nkr
-%     for ikz = 1:GRID.nkz
-%         for ip = 0:1
-%             for ij = 0:1
-%                 for it = 1:numel(time)
-%                     y1(it) = abs(Nepj(ip+1,ij+1,ikr,ikz,it));
-%                 end
-%                 semilogy(x1,y1,'-','DisplayName',...
-%                     ['HeLaZ $N_e^{',num2str(ip),num2str(ij),'}$'],...
-%                     'color', line_colors(ic,:))
-%                 hold on
-%                 ic = ic + 1;
-%             end
-%         end
-%     end
-% end
-% 
-% %MOLI results
-% x2 = results.time;
-% y2 = x2;
-% ic = 1;
-% for ip = 0:1
-%     for ij = 0:1
-%         for it = 1:numel(x2)
-%             y2(it) = abs(results.Napj(it,bare(ip,ij)));
-%         end
-%         semilogy(x2,y2,'--','DisplayName',...
-%             ['MOLI $N_e^{',num2str(ip),num2str(ij),'}$'],...
-%             'color', line_colors(ic,:))
-%         hold on
-%         ic = ic + 1;
-%     end
-% end
-% 
-% title(TITLE);
-% grid on
-% legend('show')
-% xlabel('$t$')
-% ylabel(['$|N_e^{pj}|$'])
-% if SAVEFIG; FIGNAME = ['Nepj_kz_',num2str(GRID.kzmin)]; save_figure; end;
-% 
 %% Nipj
 
+% load HeLaZ data
+moment = 'Ni00';
+
+kr       = h5read(filename,['/data/var2d/' moment '/coordkr']);
+kz       = h5read(filename,['/data/var2d/' moment '/coordkz']);
+timeNi   = squeeze(h5read(filename,'/data/var2d/time'));
+Ni00     = zeros(numel(kr),numel(kz),numel(timeNi));
+
+for it = 1:numel(timeNi)
+    tmp          = h5read(filename,['/data/var2d/', moment,'/', num2str(it,'%06d')]);
+    Ni00(:,:,it) = tmp.real + 1i * tmp.imaginary; 
+end
+
 moment = 'moments_i';
 
 kr       = h5read(filename,['/data/var5d/' moment '/coordkr']);
 kz       = h5read(filename,['/data/var5d/' moment '/coordkz']);
 time   = h5read(filename,'/data/var5d/time');
-Nipj     = zeros(GRID.pmaxe+1, GRID.jmaxe+1,numel(kr),numel(kz),numel(time));
+Nipj     = zeros(GRID.pmaxi+1, GRID.jmaxi+1,numel(kr),numel(kz),numel(time));
 for it = 1:numel(time)
     tmp          = h5read(filename,['/data/var5d/', moment,'/', num2str(it,'%06d')]);
     Nipj(:,:,:,:,it) = tmp.real + 1i * tmp.imaginary; 
 end
 
+err_ = mean(abs(squeeze(Nipj(1,1,1,1,:))-squeeze((Ni00(1,1,:)))));
+disp(['2D 5D error :',num2str(err_)])
+% growth rate :
+gammaHeLaZ = LinearFit_s(squeeze(time),...
+    squeeze(abs(Nipj(1,1,1,1,:)))) ;
+gammaMOLI  = LinearFit(results.Napj,results.time,params,options);
+disp(['Growth rate HeLaZ : ',num2str(gammaHeLaZ)])
+disp(['Growth rate MOLI  : ',num2str( gammaMOLI)])
+disp(['Error : ',num2str( abs(gammaMOLI-gammaHeLaZ))])
+
+% Plot moments
 fig = figure;
 
 x1 = time;
@@ -284,11 +238,34 @@ plot(timephiMOLI,ERR2,'--','DisplayName','Imag')
 %title(TITLE);
 grid on
 xlabel('$t$')
-ylabel('$|e_\phi|$')
+ylabel('$e(\phi)$')
 legend('show')
 %if SAVEFIG; FIGNAME = ['err_phi_kz_',num2str(GRID.kzmin)]; save_figure; end;
 
+%% Growth rate fit quantity (Ni00)
+subplot(326);
+
+y1 = squeeze(abs(Nipj(1,1,1,1,:))); % HeLaZ
+y2 = squeeze(abs(results.Napj(:,bari(0,0))));
+ERR3  = abs(y2-y1);
+
+yyaxis left
+semilogy(x1,y1,'-','DisplayName','HeLaZ',...
+    'color', line_colors(1,:)); hold on;
+semilogy(x2,y2,'--','DisplayName','MOLI',...
+    'color', 'k')
+grid on
+xlabel('$t$')
+ylabel('$|N_i^{00}|$')
+legend('show')
+
+yyaxis right
+semilogy(x1, ERR3,'color', line_colors(2,:));
+grid on
+xlabel('$t$')
+ylabel('$e(N_i^{00})$')
+
+%% Finish and save
 suptitle(TITLE);
 if SAVEFIG; FIGNAME = ['kz_',num2str(GRID.kzmin)]; save_figure; end;
-
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\ No newline at end of file
diff --git a/wk/fort.90 b/wk/fort.90
index 3c697bf2..2017fc90 100644
--- a/wk/fort.90
+++ b/wk/fort.90
@@ -1,25 +1,25 @@
 &BASIC
   nrun=100000
-  dt=0.01
-  tmax=5    ! time normalized to 1/omega_pe
+  dt=0.05
+  tmax=100    ! time normalized to 1/omega_pe
 /
 &GRID
-  pmaxe =6    ! Electron Hermite moments 
-  jmaxe = 6     ! Electron Laguerre moments 
-  pmaxi = 6    ! Ion Hermite moments 
-  jmaxi = 6     ! Ion Laguerre moments
+  pmaxe =12    ! Electron Hermite moments 
+  jmaxe = 7     ! Electron Laguerre moments 
+  pmaxi = 12    ! Ion Hermite moments 
+  jmaxi = 7     ! Ion Laguerre moments
   nkr   = 1
   krmin = 0
   krmax = 0
-  nkz   = 1
-  kzmin = 1
-  kzmax = 1
+  nkz   = 20
+  kzmin = 0.1
+  kzmax = 2
 /
 &OUTPUT_PAR
   nsave_0d = 0
   nsave_1d = 0
   nsave_2d = 1
-  nsave_5d = 1
+  nsave_5d = 0
   write_Ni00    = .true.
   write_moments = .true.
   write_phi     = .true.
@@ -29,16 +29,16 @@
 &MODEL_PAR
   ! Collisionality
   CO      = -2       ! Collision operator (-1:Full Coulomb, 0: Dougherty)
-  nu      = 1       ! Normalized collision frequency normalized to plasma frequency
+  nu      = 0.01       ! Normalized collision frequency normalized to plasma frequency
   tau_e   = 1         ! T_e/T_e
   tau_i   = 1         ! T_i/T_e       temperature ratio
   sigma_e = 0.023338   ! sqrt(m_e/m_i) mass ratio
   sigma_i = 1         ! sqrt(m_i/m_i)
   q_e     = -1         ! Electrons charge
   q_i     = 1         ! Ions charge
-  eta_n   = 0         ! L_perp / L_n Density gradient
+  eta_n   = 1         ! L_perp / L_n Density gradient
   eta_T   = 0         ! L_perp / L_T Temperature gradient
-  eta_B   = 0         ! L_perp / L_B Magnetic gradient and curvature
+  eta_B   = 0.5         ! L_perp / L_B Magnetic gradient and curvature
   lambdaD = 0         ! Debye length
 /
 &INITIAL_CON
@@ -47,9 +47,9 @@
   ! Noise amplitude
   initnoise_moments=0
   iseed=42
-  selfmat_file='../iCa/self_Coll_GKE_0_GKI_0_ESELF_1_ISELF_1_Pmaxe_6_Jmaxe_6_Pmaxi_6_Jmaxi_6_pamaxx_10.h5'
-  eimat_file='../iCa/ei_Coll_GKE_0_GKI_0_ETEST_1_EBACK_1_Pmaxe_6_Jmaxe_6_Pmaxi_6_Jmaxi_6_pamaxx_10_tau_1.0000_mu_0.0233.h5'
-  iemat_file='../iCa/ie_Coll_GKE_0_GKI_0_ITEST_1_IBACK_1_Pmaxe_6_Jmaxe_6_Pmaxi_6_Jmaxi_6_pamaxx_10_tau_1.0000_mu_0.0233.h5'
+  selfmat_file='../iCa/self_Coll_GKE_0_GKI_0_ESELF_1_ISELF_1_Pmaxe_12_Jmaxe_7_Pmaxi_12_Jmaxi_7_pamaxx_10.h5'
+  eimat_file='../iCa/ei_Coll_GKE_0_GKI_0_ETEST_1_EBACK_1_Pmaxe_12_Jmaxe_7_Pmaxi_12_Jmaxi_7_pamaxx_10_tau_1.0000_mu_0.0233.h5'
+  iemat_file='../iCa/ie_Coll_GKE_0_GKI_0_ITEST_1_IBACK_1_Pmaxe_12_Jmaxe_7_Pmaxi_12_Jmaxi_7_pamaxx_10_tau_1.0000_mu_0.0233.h5'
 /
 &TIME_INTEGRATION_PAR
   numerical_scheme='RK4'
-- 
GitLab