diff --git a/matlab/create_gif.m b/matlab/create_gif.m
index f83f2f2ff66f5094f68c2f767cf727825b7d1924..179a71e591aaea02bcd8b0c61eed05dfb84cf383 100644
--- a/matlab/create_gif.m
+++ b/matlab/create_gif.m
@@ -1,45 +1,34 @@
-function [ ] = create_gif(x, y, t, h, BASIC, GRID, MODEL, delay, GIFNAME, saturate)
 title1 = GIFNAME;
-FIGDIR = ['../results/', BASIC.SIMID,'/'];
+FIGDIR = ['../results/',BASIC.SIMID,'/'];
 if ~exist(FIGDIR, 'dir')
    mkdir(FIGDIR)
 end
 
-if     MODEL.CO == -1; CONAME = 'FC';
-elseif MODEL.CO == -2; CONAME = 'DC';
-elseif MODEL.CO ==  0; CONAME = 'LB'; end;
-
-GIFNAME = [GIFNAME,'_Pe_',num2str(GRID.pmaxe),'_Je_',num2str(GRID.jmaxe),...
-    '_Pi_',num2str(GRID.pmaxi),'_Ji_',num2str(GRID.jmaxi),...
-    '_etan_',num2str(MODEL.eta_n),'_etaB_',num2str(MODEL.eta_B),'_etaT_',...
-    num2str(MODEL.eta_T),'_nu_',num2str(MODEL.nu),'_',CONAME];
 GIFNAME = [FIGDIR, GIFNAME,'.gif'];
 
 % Set colormap boundaries
-hmax = max(max(max(h)));
-hmin = min(min(min(h)));
+hmax = max(max(max(FIELD)));
+hmin = min(min(min(FIELD)));
 
 flag = 0;
 if hmax == hmin 
     disp('Warning : h = hmin = hmax = const')
 else
-    % Setup figure frame
-    fig  = figure;
-    pcolor(x,y,h(:,:,1)); % to set up
+% Setup figure frame
+fig  = figure;
+    pcolor(X,Y,FIELD(:,:,1)); % to set up
     colormap jet
     colorbar
-    if not(flag) && saturate
-        caxis([hmin hmax])
-    end
     axis tight manual % this ensures that getframe() returns a consistent size
+    shading interp;
     hold on
-    
+  
     n      = 0;
-    nbytes = fprintf(2,'frame %d/%d',n,numel(h(1,1,:)));
-    for n = 1:numel(h(1,1,:)) % time loop
-        pclr = pcolor(x,y,h(:,:,n)); % frame plot
-        set(pclr, 'edgecolor','none')
-        title([title1,', $t \approx$', sprintf('%.3d',ceil(t(n)))])
+    nbytes = fprintf(2,'frame %d/%d',n,numel(FIELD(1,1,:)));
+    for n = 1:numel(FIELD(1,1,:)) % time loop
+        pclr = pcolor(X,Y,FIELD(:,:,n)); shading interp; % frame plot
+        set(pclr, 'edgecolor','none');
+        title([FIELDNAME,', $t \approx$', sprintf('%.3d',ceil(T(n)))]);
         drawnow 
         % Capture the plot as an image 
         frame = getframe(fig); 
@@ -49,17 +38,16 @@ else
         if n == 1 
           imwrite(imind,cm,GIFNAME,'gif', 'Loopcount',inf); 
         else 
-          imwrite(imind,cm,GIFNAME,'gif','WriteMode','append', 'DelayTime',delay); 
+          imwrite(imind,cm,GIFNAME,'gif','WriteMode','append', 'DelayTime',DELAY); 
         end 
         % terminal info
         while nbytes > 0
           fprintf('\b')
           nbytes = nbytes - 1;
         end
-        nbytes = fprintf(2,'frame %d/%d',n,numel(h(1,1,:)));
+        nbytes = fprintf(2,'frame %d/%d',n,numel(FIELD(1,1,:)));
     end
-
+    disp(' ')
     disp(['Gif saved @ : ',GIFNAME])
 end
-end
 
diff --git a/matlab/default_plots_options.m b/matlab/default_plots_options.m
index 9f4bfb3eace935347857a9a8e87dc086d0f4645e..ed53cc039f90ba647c6f2c417f7ad72e716e7578 100644
--- a/matlab/default_plots_options.m
+++ b/matlab/default_plots_options.m
@@ -6,15 +6,4 @@ set(0,'defaultAxesFontSize',16)
 set(0, 'DefaultLineLineWidth', 2.0);
 line_colors = [[0, 0.4470, 0.7410];[0.8500, 0.3250, 0.0980];[0.9290, 0.6940, 0.1250];...
     [0.4940, 0.1840, 0.5560];[0.4660, 0.6740, 0.1880];[0.3010, 0.7450, 0.9330];[0.6350, 0.0780, 0.1840]];
-line_styles = {'-','-.','--',':'};
-
-%Title management
-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),')$'];
\ No newline at end of file
+line_styles = {'-','-.','--',':'};
\ No newline at end of file
diff --git a/matlab/load_2D_data.m b/matlab/load_2D_data.m
index ebdc15385b2a1fd43689d6f6fd3374e5a45aa6d7..ddb42e1c7e35694fd3209bb4afcdcee065d3f16c 100644
--- a/matlab/load_2D_data.m
+++ b/matlab/load_2D_data.m
@@ -3,9 +3,14 @@ function [ data, kr, kz, time ] = load_2D_data( filename, variablename )
     time     = h5read(filename,'/data/var2d/time');
     kr       = h5read(filename,['/data/var2d/',variablename,'/coordkr']);
     kz       = h5read(filename,['/data/var2d/',variablename,'/coordkz']);
+
+    dt    = h5readatt(filename,'/data/input','dt');
+    nsave = h5readatt(filename,'/data/input','nsave_5d'); 
+    cstart= time(1)/dt/nsave;
+    
     data     = zeros(numel(kr),numel(kz),numel(time));
     for it = 1:numel(time)
-        tmp         = h5read(filename,['/data/var2d/',variablename,'/', num2str(it,'%06d')]);
+        tmp         = h5read(filename,['/data/var2d/',variablename,'/', num2str(cstart+it,'%06d')]);
         data(:,:,it) = tmp.real + 1i * tmp.imaginary;
     end
 
diff --git a/matlab/load_5D_data.m b/matlab/load_5D_data.m
index 6f51cc1c345abfbb15a239ae285b19ff01382071..34cb449f5b50e0fa88489eb1c47febbe14aef195 100644
--- a/matlab/load_5D_data.m
+++ b/matlab/load_5D_data.m
@@ -5,9 +5,15 @@ function [ data, p, j, kr, kz, time ] = load_5D_data( filename, variablename )
     j     = h5read(filename,['/data/var5d/',variablename,'/coordj']);
     kr    = h5read(filename,['/data/var5d/',variablename,'/coordkr']);
     kz    = h5read(filename,['/data/var5d/',variablename,'/coordkz']);
+
+    dt    = h5readatt(filename,'/data/input','dt');
+    nsave = h5readatt(filename,'/data/input','nsave_5d'); 
+    cstart= time(1)/dt/nsave;
+    
     data  = zeros(numel(p),numel(j),numel(kr),numel(kz),numel(time));
+    
     for it = 1:numel(time)
-        tmp          = h5read(filename,['/data/var5d/', variablename,'/', num2str(it,'%06d')]);
+        tmp          = h5read(filename,['/data/var5d/', variablename,'/', num2str(cstart+it,'%06d')]);
         data(:,:,:,:,it) = tmp.real + 1i * tmp.imaginary;
     end
 end
\ No newline at end of file
diff --git a/matlab/save_figure.m b/matlab/save_figure.m
index 4d569a630d44ec754f5830b2d46ebd26ff87b3da..9fae159ba479532926bd5f2df9f5bb50e17f1191 100644
--- a/matlab/save_figure.m
+++ b/matlab/save_figure.m
@@ -5,10 +5,6 @@ if ~exist(FIGDIR, 'dir')
    mkdir(FIGDIR)
 end
 
-FIGNAME = [FIGNAME,'_Pe_',num2str(GRID.pmaxe),'_Je_',num2str(GRID.jmaxe),...
-    '_Pi_',num2str(GRID.pmaxi),'_Ji_',num2str(GRID.jmaxi),...
-    '_etan_',num2str(MODEL.eta_n),'_etaB_',num2str(MODEL.eta_B),'_etaT_',...
-    num2str(MODEL.eta_T),'_nu_',num2str(MODEL.nu),'_',CONAME];
-FIGNAME = [FIGDIR, FIGNAME,'.fig'];
-savefig(fig,FIGNAME);
+FIGNAME = [FIGDIR, FIGNAME,FMT];
+saveas(fig,FIGNAME);
 disp(['Figure saved @ : ',FIGNAME])
\ No newline at end of file
diff --git a/matlab/write_fort90.m b/matlab/write_fort90.m
index b15369864ea9661be9b7161f40d49e42b42adbc7..2e818e7f0e97f58f2e247cb4c992d33c3990a268 100644
--- a/matlab/write_fort90.m
+++ b/matlab/write_fort90.m
@@ -2,24 +2,25 @@ function [INPUT] = write_fort90(OUTPUTS,GRID,MODEL,INITIAL,TIME_INTEGRATION,BASI
 % Write the input script "fort.90" with desired parameters
 INPUT = '../wk/fort.90';
 fid = fopen(INPUT,'wt');
+
 fprintf(fid,'&BASIC\n');
-fprintf(fid,['  nrun=', num2str(BASIC.nrun),'\n']);
-fprintf(fid,['  dt=', num2str(BASIC.dt),'\n']);
-fprintf(fid,['  tmax=', num2str(BASIC.tmax),'\n']);
+fprintf(fid,['  nrun   = ', num2str(BASIC.nrun),'\n']);
+fprintf(fid,['  dt     = ', num2str(BASIC.dt),'\n']);
+fprintf(fid,['  tmax   = ', num2str(BASIC.tmax),'\n']);
+fprintf(fid,['  RESTART = ', num2str(BASIC.RESTART),'\n']);
 fprintf(fid,'/\n');
+
 fprintf(fid,'&GRID\n');
 fprintf(fid,['  pmaxe =', num2str(GRID.pmaxe),'\n']);
 fprintf(fid,['  jmaxe = ', num2str(GRID.jmaxe),'\n']);
 fprintf(fid,['  pmaxi = ', num2str(GRID.pmaxi),'\n']);
 fprintf(fid,['  jmaxi = ', num2str(GRID.jmaxi),'\n']);
-fprintf(fid,['  nkr   = ', num2str(GRID.nkr),'\n']);
-fprintf(fid,['  krmin = ', num2str(GRID.krmin),'\n']);
-fprintf(fid,['  krmax = ', num2str(GRID.krmax),'\n']);
-fprintf(fid,['  nkz   = ', num2str(GRID.nkz),'\n']);
-fprintf(fid,['  kzmin = ', num2str(GRID.kzmin),'\n']);
-fprintf(fid,['  kzmax = ', num2str(GRID.kzmax),'\n']);
-fprintf(fid,['  Pad = ', num2str(GRID.Pad),'\n']);
+fprintf(fid,['  Nr   = ', num2str(GRID.Nr),'\n']);
+fprintf(fid,['  Lr = ', num2str(GRID.Lr),'\n']);
+fprintf(fid,['  Nz   = ', num2str(GRID.Nz),'\n']);
+fprintf(fid,['  Lz = ', num2str(GRID.Lz),'\n']);
 fprintf(fid,'/\n');
+
 fprintf(fid,'&OUTPUT_PAR\n');
 fprintf(fid,['  nsave_0d = ', num2str(OUTPUTS.nsave_0d),'\n']);
 fprintf(fid,['  nsave_1d = ', num2str(OUTPUTS.nsave_1d),'\n']);
@@ -32,11 +33,14 @@ fprintf(fid,['  write_non_lin     = ', OUTPUTS.write_non_lin,'\n']);
 fprintf(fid,['  write_doubleprecision = ', OUTPUTS.write_doubleprecision,'\n']);
 fprintf(fid,['  resfile0      = ', OUTPUTS.resfile0,'\n']);
 fprintf(fid,['  rstfile0      = ', OUTPUTS.rstfile0,'\n']);
+fprintf(fid,['  job2load      = ', num2str(OUTPUTS.job2load),'\n']);
 fprintf(fid,'/\n');
+
 fprintf(fid,'&MODEL_PAR\n');
 fprintf(fid,'  ! Collisionality\n');
 fprintf(fid,['  CO      = ', num2str(MODEL.CO),'\n']);
 fprintf(fid,['  NON_LIN = ', MODEL.NON_LIN,'\n']);
+fprintf(fid,['  mu      = ', num2str(MODEL.mu),'\n']);
 fprintf(fid,['  nu      = ', num2str(MODEL.nu),'\n']);
 fprintf(fid,['  tau_e   = ', num2str(MODEL.tau_e),'\n']);
 fprintf(fid,['  tau_i   = ', num2str(MODEL.tau_i),'\n']);
@@ -49,8 +53,8 @@ fprintf(fid,['  eta_T   = ', num2str(MODEL.eta_T),'\n']);
 fprintf(fid,['  eta_B   = ', num2str(MODEL.eta_B),'\n']);
 fprintf(fid,['  lambdaD = ', num2str(MODEL.lambdaD),'\n']);
 fprintf(fid,'/\n');
+
 fprintf(fid,'&INITIAL_CON\n');
-fprintf(fid,['  RESTART           =', INITIAL.RESTART,'\n']);
 fprintf(fid,['  only_Na00         =', INITIAL.only_Na00,'\n']);
 fprintf(fid,['  initback_moments  =', num2str(INITIAL.initback_moments),'\n']);
 fprintf(fid,['  initnoise_moments =', num2str(INITIAL.initnoise_moments),'\n']);
@@ -59,8 +63,10 @@ fprintf(fid,['  selfmat_file      =', INITIAL.selfmat_file,'\n']);
 fprintf(fid,['  eimat_file        =', INITIAL.eimat_file,'\n']);
 fprintf(fid,['  iemat_file        =', INITIAL.iemat_file,'\n']);
 fprintf(fid,'/\n');
+
 fprintf(fid,'&TIME_INTEGRATION_PAR\n');
 fprintf(fid,['  numerical_scheme=', TIME_INTEGRATION.numerical_scheme,'\n']);
 fprintf(fid,'/');
+
 fclose(fid);
 end
diff --git a/src/auxval.F90 b/src/auxval.F90
index 85ef9e9b833e10aaa2592ed654fcbd0b153f50c0..f0c451c91a5bf5d4feafe7ed7f8d3d930699a33d 100644
--- a/src/auxval.F90
+++ b/src/auxval.F90
@@ -11,6 +11,8 @@ subroutine auxval
   INTEGER :: irows,irowe, irow, icol
   WRITE(*,*) '=== Set auxiliary values ==='
 
+  call set_rgrid
+  call set_zgrid
   call set_krgrid
   call set_kzgrid
   call set_pj
diff --git a/src/compute_Sapj.F90 b/src/compute_Sapj.F90
index f6c2fd2f2a8e2c4e3c3823ae0a39a1a50468c0a0..8a38278967623d862f779540085c32f71398b7ff 100644
--- a/src/compute_Sapj.F90
+++ b/src/compute_Sapj.F90
@@ -1,6 +1,6 @@
-SUBROUTINE compute_Sapj(Sepj, Sipj)
+SUBROUTINE compute_Sapj
 
-  USE array, ONLY : dnjs
+  USE array, ONLY : dnjs, Sepj, Sipj
   USE basic
   USE fourier
   USE fields!, ONLY : phi, moments_e, moments_i
@@ -11,8 +11,8 @@ SUBROUTINE compute_Sapj(Sepj, Sipj)
   IMPLICIT NONE
 
   COMPLEX(dp), DIMENSION(Nkr,Nkz) :: F_, G_, CONV
-  COMPLEX(dp), DIMENSION(ips_e:ipe_e, ijs_e:ije_e, Nkr, Nkz) :: Sepj
-  COMPLEX(dp), DIMENSION(ips_i:ipe_i, ijs_i:ije_i, Nkr, Nkz) :: Sipj
+  ! COMPLEX(dp), DIMENSION(ips_e:ipe_e, ijs_e:ije_e, Nkr, Nkz) :: Sepj
+  ! COMPLEX(dp), DIMENSION(ips_i:ipe_i, ijs_i:ije_i, Nkr, Nkz) :: Sipj
   INTEGER :: in, is
   REAL(dp):: kr, kz, kernel, be_2, bi_2, factn
   REAL(dp):: sigmae2_taue_o2, sigmai2_taui_o2
@@ -34,7 +34,7 @@ SUBROUTINE compute_Sapj(Sepj, Sipj)
             kernel = be_2**(in-1)/factn * EXP(-be_2)
 
             ! First convolution term
-            F_(ikr,ikz) = (kz - kr)  * phi(ikr,ikz) * kernel
+            F_(ikr,ikz) = (kz - kr)  * phi(ikr,ikz) !* kernel
             ! Second convolution term
             G_(ikr,ikz) = 0._dp ! initialization of the sum
             DO is = 1, MIN( in+ij-1, jmaxe+1 ) ! sum truncation on number of moments
@@ -78,7 +78,7 @@ SUBROUTINE compute_Sapj(Sepj, Sipj)
             bi_2   = sigmai2_taui_o2 * (kr**2 + kz**2)
             kernel = bi_2**(in-1)/factn * EXP(-bi_2)
 
-            F_(ikr,ikz) = (kz - kr)  * phi(ikr,ikz) * kernel
+            F_(ikr,ikz) = (kz - kr)  * phi(ikr,ikz) !* kernel
 
             G_(ikr,ikz) = 0._dp ! initialization of the sum
             DO is = 1, MIN( in+ij-1, jmaxi+1 )
diff --git a/src/control.F90 b/src/control.F90
index 9218566ace85a08c12a50bc6b44fbe991107a22d..59abdcf2b463d48c30a37545635f32c7d0128f93 100644
--- a/src/control.F90
+++ b/src/control.F90
@@ -27,7 +27,7 @@ SUBROUTINE control
   CALL readinputs
   WRITE(*,'(a/)') '...input parameters read'
 
-  !                   1.4     Set auxiliary values (allocate arrays, set laplace operator, ...)
+  !                   1.4     Set auxiliary values (allocate arrays, set grid, ...)
   WRITE(*,*) 'Calculate auxval...'
   CALL auxval
   WRITE(*,'(a/)') '...auxval calculated'
diff --git a/src/diagnose.F90 b/src/diagnose.F90
index 47e9dacf784463330e3a5bc86bbc64c67e33a1a0..0c8a7dcb2cca0f8ad9bcadc2b38922f1fa49ac82 100644
--- a/src/diagnose.F90
+++ b/src/diagnose.F90
@@ -173,6 +173,11 @@ SUBROUTINE diagnose(kstep)
   !
   IF (kstep .GE. 0) THEN
 
+    ! Terminal info
+    IF (MOD(cstep, INT(1.0/dt)) == 0) THEN
+     WRITE(*,"(F4.0,A,F4.0)") time,"/",tmax
+    ENDIF
+
      !                       2.1   0d history arrays
      IF (nsave_0d .NE. 0) THEN
         IF ( MOD(cstep, nsave_0d) == 0 ) THEN
@@ -187,9 +192,6 @@ SUBROUTINE diagnose(kstep)
      IF (nsave_2d .NE. 0) THEN
         IF (MOD(cstep, nsave_2d) == 0) THEN
            CALL diagnose_2d
-           IF (MOD(cstep, nsave_2d*10) == 0) THEN
-            WRITE(*,"(F4.0,A,F4.0)") time,"/",tmax
-           ENDIF
         END IF
      END IF
 
@@ -360,7 +362,7 @@ SUBROUTINE checkpoint_save
   USE time_integration
   IMPLICIT NONE
 
-  WRITE(rstfile,'(a,a3)') TRIM(rstfile0),'.h5'
+  WRITE(rstfile,'(a,a1,i2.2,a3)') TRIM(rstfile0),'_',jobnum,'.h5'
 
   CALL creatf(rstfile, fidrst, real_prec='d')
   CALL creatg(fidrst, '/Basic', 'Basic data')
@@ -377,6 +379,6 @@ SUBROUTINE checkpoint_save
   CALL putarr(fidrst, '/Basic/moments_i', moments_i(ips_i:ipe_i,ijs_i:ije_i,&
                                                     ikrs:ikre,ikzs:ikze,1),ionode=0)
   CALL closef(fidrst)
-  WRITE(*,'(3x,a)') "Checkpoint file "//TRIM(rstfile)//" saved!"
+  WRITE(*,'(3x,a)') "Checkpoint file "//TRIM(rstfile)//" saved"
 
 END SUBROUTINE checkpoint_save
diff --git a/src/diagnostics_par_mod.F90 b/src/diagnostics_par_mod.F90
index a9005ea86262e395fdfc0b29823d84d19c40f7cb..074aa71a30a6a6c2863d8df1a4e7deb936b1e5a2 100644
--- a/src/diagnostics_par_mod.F90
+++ b/src/diagnostics_par_mod.F90
@@ -12,15 +12,16 @@ MODULE diagnostics_par
   LOGICAL, PUBLIC, PROTECTED :: write_doubleprecision=.FALSE.
 
   INTEGER, PUBLIC, PROTECTED :: nsave_0d , nsave_1d , nsave_2d , nsave_5d
-  INTEGER, PUBLIC, PROTECTED :: nsave_cp = 1e3
+  INTEGER, PUBLIC, PROTECTED :: nsave_cp = 1e4
 
   !  HDF5 file
-  CHARACTER(len=64), PUBLIC :: resfile0 = "results"   ! Head of main result file name
-  CHARACTER(len=64), PUBLIC :: resfile                ! Main result file
-  INTEGER, PUBLIC           :: fidres                 ! FID for resfile
-  CHARACTER(len=64), PUBLIC :: rstfile0 = "restart"   ! Head of restart file name
-  CHARACTER(len=64), PUBLIC :: rstfile                ! Full restart file
-  INTEGER, PUBLIC           :: fidrst                 ! FID for restart file
+  CHARACTER(len=128), PUBLIC :: resfile0 = "results"   ! Head of main result file name
+  CHARACTER(len=128), PUBLIC :: resfile                ! Main result file
+  INTEGER, PUBLIC            :: job2load               ! jobnum of the checkpoint to load
+  INTEGER, PUBLIC            :: fidres                 ! FID for resfile
+  CHARACTER(len=128), PUBLIC :: rstfile0 = "restart"   ! Head of restart file name
+  CHARACTER(len=128), PUBLIC :: rstfile                ! Full restart file
+  INTEGER, PUBLIC            :: fidrst                 ! FID for restart file
 
   PUBLIC :: output_par_readinputs, output_par_outputinputs
 
@@ -36,7 +37,7 @@ CONTAINS
 
     NAMELIST /OUTPUT_PAR/ nsave_0d , nsave_1d , nsave_2d , nsave_5d
     NAMELIST /OUTPUT_PAR/ write_Ni00, write_moments, write_phi, write_non_lin, write_doubleprecision
-    NAMELIST /OUTPUT_PAR/ resfile0, rstfile0
+    NAMELIST /OUTPUT_PAR/ resfile0, rstfile0, job2load
 
     READ(lu_in,output_par)
 
diff --git a/src/inital.F90 b/src/inital.F90
index 69312a55cbf39fd49bbcf3bdd7e00c2b2ffc626e..36d14818e3d51129094525272bf9442ef7ea8463 100644
--- a/src/inital.F90
+++ b/src/inital.F90
@@ -7,20 +7,27 @@ SUBROUTINE inital
   USE model, ONLY : CO, NON_LIN
   USE prec_const
   USE coeff
+  USE time_integration
   USE array, ONLY : Sepj,Sipj
 
   implicit none
+
+  CALL set_updatetlevel(1)
   !!!!!! Set the moments arrays Nepj, Nipj !!!!!!
+  write(*,*) 'Init moments'
   IF ( RESTART ) THEN
-    CALL init_moments
+    CALL load_cp
   ELSE
-    CALL load_moments
+    CALL init_moments
   ENDIF
   !!!!!! Set phi !!!!!!
+  write(*,*) 'Init phi'
   CALL poisson
   !!!!!! Set Sepj, Sipj and dnjs coeff table !!!!!!
   IF ( NON_LIN ) THEN;
-    CALL compute_Sapj(Sepj,Sipj)
+    write(*,*) 'Init Sapj'
+    CALL compute_Sapj
+    WRITE(*,*) 'Building Dnjs table'
     CALL build_dnjs_table
   ENDIF
   !!!!!! Load the full coulomb collision operator coefficients !!!!!!
@@ -38,20 +45,19 @@ SUBROUTINE init_moments
   USE basic
   USE grid
   USE fields
-  USE initial_par
-  USE time_integration
   USE prec_const
+  USE utility, ONLY: checkfield
+  USE initial_par
   IMPLICIT NONE
 
-  INTEGER, DIMENSION(12) :: iseedarr
   REAL(dp) :: noise
+  REAL(dp) :: kr, kz, sigma, gain
+  INTEGER, DIMENSION(12) :: iseedarr
 
   ! Seed random number generator
   iseedarr(:)=iseed
   CALL RANDOM_SEED(PUT=iseedarr)
 
-  CALL set_updatetlevel(1)
-
   IF ( only_Na00 ) THEN ! Spike initialization on density only
 
     DO ikr=ikrs,ikre
@@ -61,30 +67,42 @@ SUBROUTINE init_moments
       END DO
     END DO
 
-  ELSE ! Broad noise initialization
-
-    DO ikr=ikrs,ikre
-      DO ikz=ikzs,ikze
-        DO ip=ips_e,ipe_e
-          DO ij=ijs_e,ije_e
-            CALL RANDOM_NUMBER(noise)
-            moments_e( ip,ij,     ikr,    ikz, :) = initback_moments + initnoise_moments*(noise-0.5_dp)
-            moments_e( ip,ij, Nkz-ikz,    ikr, :) = moments_e( ip,ij,     ikr,    ikz, :) ! Symmetry
-            moments_e( ip,ij,     ikz,Nkr-ikr, :) = moments_e( ip,ij,     ikr,    ikz, :) ! Symmetry
-            moments_e( ip,ij, Nkz-ikz,Nkr-ikr, :) = moments_e( ip,ij,     ikr,    ikz, :) ! Symmetry
-          END DO
-        END DO
-        DO ip=ips_i,ipe_i
-          DO ij=ijs_i,ije_i
-            CALL RANDOM_NUMBER(noise)
-            moments_i( ip,ij,     ikr,    ikz, :) = initback_moments + initnoise_moments*(noise-0.5_dp)
-            moments_i( ip,ij, Nkz-ikz,    ikr, :) = moments_i( ip,ij,     ikr,    ikz, :) ! Symmetry
-            moments_i( ip,ij,     ikz,Nkr-ikr, :) = moments_i( ip,ij,     ikr,    ikz, :) ! Symmetry
-            moments_i( ip,ij, Nkz-ikz,Nkr-ikr, :) = moments_i( ip,ij,     ikr,    ikz, :) ! Symmetry
-          END DO
+  ELSE
+    sigma = 2._dp
+    gain  = 0.5_dp
+    !**** Gaussian initialization (Hakim 2017)
+    moments_i = 0; moments_e = 0;
+      DO ikr=ikrs,ikre
+        kr = krarray(ikr)
+        DO ikz=ikzs,ikze
+          kz = kzarray(ikz)
+          moments_i( 1,1, ikr,ikz, :) = gain*sigma/SQRT2 * EXP(-(kr**2+kz**2)*sigma**2/4._dp)
+          moments_e( 1,1, ikr,ikz, :) = gain*sigma/SQRT2 * EXP(-(kr**2+kz**2)*sigma**2/4._dp)
         END DO
       END DO
-    END DO
+    ! Broad noise initialization
+    ! DO ikr=ikrs,ikre
+    !   DO ikz=ikzs,ikze
+    !     DO ip=ips_e,ipe_e
+    !       DO ij=ijs_e,ije_e
+    !         CALL RANDOM_NUMBER(noise)
+    !         moments_e( ip,ij,     ikr,    ikz, :) = initback_moments + initnoise_moments*(noise-0.5_dp)
+    !         moments_e( ip,ij, Nkz-ikz,    ikr, :) = moments_e( ip,ij,     ikr,    ikz, :) ! Symmetry
+    !         moments_e( ip,ij,     ikz,Nkr-ikr, :) = moments_e( ip,ij,     ikr,    ikz, :) ! Symmetry
+    !         moments_e( ip,ij, Nkz-ikz,Nkr-ikr, :) = moments_e( ip,ij,     ikr,    ikz, :) ! Symmetry
+    !       END DO
+    !     END DO
+    !     DO ip=ips_i,ipe_i
+    !       DO ij=ijs_i,ije_i
+    !         CALL RANDOM_NUMBER(noise)
+    !         moments_i( ip,ij,     ikr,    ikz, :) = initback_moments + initnoise_moments*(noise-0.5_dp)
+    !         moments_i( ip,ij, Nkz-ikz,    ikr, :) = moments_i( ip,ij,     ikr,    ikz, :) ! Symmetry
+    !         moments_i( ip,ij,     ikz,Nkr-ikr, :) = moments_i( ip,ij,     ikr,    ikz, :) ! Symmetry
+    !         moments_i( ip,ij, Nkz-ikz,Nkr-ikr, :) = moments_i( ip,ij,     ikr,    ikz, :) ! Symmetry
+    !       END DO
+    !     END DO
+    !   END DO
+    ! END DO
   ENDIF
 END SUBROUTINE init_moments
 !******************************************************************************!
@@ -92,21 +110,36 @@ END SUBROUTINE init_moments
 !******************************************************************************!
 !!!!!!! Load moments from a previous save
 !******************************************************************************!
-SUBROUTINE load_moments
-!  USE basic
-!  USE initial_par
-!  USE fields, ONLY : moments_e, moments_i
-!  USE futils, ONLY : openf, getarr, closef
-!  IMPLICIT NONE
-!
-!  INTEGER :: fid
-!
-!  CALL openf(backup_file,fid, 'r', 'D');
-!  CALL getarr(fid, '/moments_e', moments_e) ! Nepj
-!  CALL getarr(fid, '/moments_i', moments_i) ! Nipj
-!  CALL getarr(fid, '/time', time) ! time
-!  CALL closef(fid)
-END SUBROUTINE
+SUBROUTINE load_cp
+  USE basic
+  USE futils,          ONLY: openf, closef, getarr, getatt
+  USE grid
+  USE fields
+  USE diagnostics_par
+  USE time_integration
+  IMPLICIT NONE
+
+  WRITE(rstfile,'(a,a1,i2.2,a3)') TRIM(rstfile0),'_',job2load,'.h5'
+
+  WRITE(*,'(3x,a)') "Resume from previous run"
+
+  CALL openf(rstfile, fidrst)
+  CALL getatt(fidrst, '/Basic', 'cstep', cstep)
+  CALL getatt(fidrst, '/Basic', 'time', time)
+  CALL getatt(fidrst, '/Basic', 'jobnum', jobnum)
+  jobnum = jobnum+1
+  CALL getatt(fidrst, '/Basic', 'iframe2d',iframe2d)
+  CALL getatt(fidrst, '/Basic', 'iframe5d',iframe5d)
+  iframe2d = iframe2d-1; iframe5d = iframe5d-1
+
+  ! Read state of system from restart file
+  CALL getarr(fidrst, '/Basic/moments_e', moments_e(ips_e:ipe_e,ijs_e:ije_e,ikrs:ikre,ikzs:ikze,1),ionode=0)
+  CALL getarr(fidrst, '/Basic/moments_i', moments_i(ips_i:ipe_i,ijs_i:ije_i,ikrs:ikre,ikzs:ikze,1),ionode=0)
+  CALL closef(fidrst)
+
+  WRITE(*,'(3x,a)') "Reading from restart file "//TRIM(rstfile)//" completed!"
+
+END SUBROUTINE load_cp
 !******************************************************************************!
 
 !******************************************************************************!
diff --git a/src/model_mod.F90 b/src/model_mod.F90
index 230afb3db09c53c284f144fffd1971f48129b9b5..9d6f3ff916578f8831d95a34f19b4941fdfde6f9 100644
--- a/src/model_mod.F90
+++ b/src/model_mod.F90
@@ -7,6 +7,7 @@ MODULE model
 
   INTEGER,  PUBLIC, PROTECTED ::      CO =  0         ! Collision Operator
   LOGICAL,  PUBLIC, PROTECTED :: NON_LIN =  .true.    ! To turn on non linear bracket term
+  REAL(dp), PUBLIC, PROTECTED ::      mu =  0._dp     ! Hyperdiffusivity coefficient (for num. stability)
   REAL(dp), PUBLIC, PROTECTED ::      nu =  1._dp     ! Collision frequency
   REAL(dp), PUBLIC, PROTECTED ::   tau_e =  1._dp     ! Temperature
   REAL(dp), PUBLIC, PROTECTED ::   tau_i =  1._dp     !
@@ -30,7 +31,7 @@ CONTAINS
     USE prec_const
     IMPLICIT NONE
 
-    NAMELIST /MODEL_PAR/ CO, NON_LIN, nu, tau_e, tau_i, sigma_e, sigma_i, &
+    NAMELIST /MODEL_PAR/ CO, NON_LIN, mu, nu, tau_e, tau_i, sigma_e, sigma_i, &
                          q_e, q_i, eta_n, eta_T, eta_B, lambdaD
 
     READ(lu_in,model_par)
diff --git a/src/moments_eq_rhs.F90 b/src/moments_eq_rhs.F90
index 0b85811c9caa211046a9e4aacc3ac040c2b726ea..4ad31556154b5b51710f205dbc09dc37665b9d19 100644
--- a/src/moments_eq_rhs.F90
+++ b/src/moments_eq_rhs.F90
@@ -7,6 +7,7 @@ SUBROUTINE moments_eq_rhs
   USE grid
   USE model
   USE prec_const
+  USE utility, ONLY : is_nan
   IMPLICIT NONE
 
   INTEGER     :: ip2, ij2 ! loops indices
@@ -20,8 +21,8 @@ SUBROUTINE moments_eq_rhs
   REAL(dp)    :: xCapj,   xCa20,   xCa01, xCa10 ! Coll. factors depending on the pj loop
   COMPLEX(dp) :: TNapj, TNapp2j, TNapm2j, TNapjp1, TNapjm1, Tphi
   COMPLEX(dp) :: TColl, TColl20, TColl01, TColl10 ! terms of the rhs
+  COMPLEX(dp) :: test_nan
   REAL(dp)    :: nu_e, nu_i, nu_ee, nu_ie ! Species collisional frequency
-!write(*,*) '----------------------------------------'
 
   !Precompute species dependant factors
   taue_qe_etaB    = tau_e/q_e * eta_B ! factor of the magnetic moment coupling
@@ -181,7 +182,11 @@ SUBROUTINE moments_eq_rhs
           IF ( (ip .EQ. 1) .OR. (ip .EQ. 3) ) THEN ! kronecker p0 or  p2
             kernelj    = b_e2**(ij-1) * exp(-b_e2)/factj
             kerneljp1  = kernelj * b_e2  /(ij_dp + 1._dp)
-            kerneljm1  = kernelj * ij_dp / b_e2
+            IF ( b_e2 .NE. 0 ) THEN
+              kerneljm1  = kernelj * ij_dp / b_e2
+            ELSE
+              kerneljm1 = 0.5_dp
+            ENDIF
             Tphi = (xphij*kernelj + xphijp1*kerneljp1 + xphijm1*kerneljm1) * phi(ikr,ikz)
           ELSE
             Tphi = 0._dp
@@ -192,10 +197,11 @@ SUBROUTINE moments_eq_rhs
               -imagu * kz * (TNapj + TNapp2j + TNapm2j + TNapjp1 + TNapjm1 - Tphi)&
                + TColl
 
-          ! Adding non linearity
+          ! Adding non linearity and Hyperdiffusivity
           IF ( NON_LIN ) THEN
             moments_rhs_e(ip,ij,ikr,ikz,updatetlevel) = &
-              moments_rhs_e(ip,ij,ikr,ikz,updatetlevel) - Sepj(ip,ij,ikr,ikz)
+              moments_rhs_e(ip,ij,ikr,ikz,updatetlevel) - Sepj(ip,ij,ikr,ikz) &
+              - mu*kperp2**2 * moments_rhs_e(ip,ij,ikr,ikz,updatetlevel)
           ENDIF
 
         END DO kzloope
@@ -352,7 +358,11 @@ SUBROUTINE moments_eq_rhs
           IF ( (ip .EQ. 1) .OR. (ip .EQ. 3) ) THEN ! kronecker p0 or p2
             kernelj    = b_i2**(ij-1) * exp(-b_i2)/factj
             kerneljp1  = kernelj * b_i2  /(ij_dp + 1._dp)
-            kerneljm1  = kernelj * ij_dp / b_i2
+            IF ( b_i2 .NE. 0 ) THEN
+              kerneljm1  = kernelj * ij_dp / b_i2
+            ELSE
+              kerneljm1 = 0.5_dp
+            ENDIF
             Tphi = (xphij*kernelj + xphijp1*kerneljp1 + xphijm1*kerneljm1) * phi(ikr,ikz)
           ELSE
             Tphi = 0._dp
@@ -363,10 +373,11 @@ SUBROUTINE moments_eq_rhs
               -imagu * kz * (TNapj + TNapp2j + TNapm2j + TNapjp1 + TNapjm1 - Tphi)&
                + TColl
 
-          ! Adding non linearity
+          ! Adding non linearity and Hyperdiffusivity
           IF ( NON_LIN ) THEN
            moments_rhs_i(ip,ij,ikr,ikz,updatetlevel) = &
-             moments_rhs_i(ip,ij,ikr,ikz,updatetlevel) - Sipj(ip,ij,ikr,ikz)
+             moments_rhs_i(ip,ij,ikr,ikz,updatetlevel) - Sipj(ip,ij,ikr,ikz)&
+             - mu*kperp2**2 * moments_rhs_i(ip,ij,ikr,ikz,updatetlevel)
           ENDIF
         END DO kzloopi
       END DO krloopi
diff --git a/src/poisson.F90 b/src/poisson.F90
index fd7f9030f1e7fe37db1b6c53f3fd6e4282e40842..d91fe1ffbd50a381517a5ab4bbd69bd84a19104d 100644
--- a/src/poisson.F90
+++ b/src/poisson.F90
@@ -42,8 +42,6 @@ SUBROUTINE poisson
       sum_kernel_mom_e = Kne*moments_e(1, 1, ikr, ikz, updatetlevel)
       sum_kernel2_e    = Kne**2
 
-!write(*,*) 'K0e = ', Kne
-
       ! loop over n only if the max polynomial degree is 1 or more
       if (jmaxe .GT. 0) then
         DO ine=2,jmaxe+1 ! ine = n+1
@@ -53,7 +51,6 @@ SUBROUTINE poisson
 
           sum_kernel_mom_e  = sum_kernel_mom_e  + Kne * moments_e(1, ine, ikr, ikz, updatetlevel)
           sum_kernel2_e     = sum_kernel2_e     + Kne**2 ! ... sum recursively ...
-!write(*,*) 'K',ine-1,'e = ', Kne
         END DO
       endif
 
@@ -65,8 +62,6 @@ SUBROUTINE poisson
       sum_kernel_mom_i = Kni*moments_i(1, 1, ikr, ikz, updatetlevel)
       sum_kernel2_i    = Kni**2
 
-!write(*,*) 'K0i = ', Kni
-
       ! loop over n only if the max polynomial degree is 1 or more
       if (jmaxi .GT. 0) then
         DO ini=2,jmaxi+1
@@ -76,7 +71,6 @@ SUBROUTINE poisson
 
           sum_kernel_mom_i  = sum_kernel_mom_i  + Kni * moments_i(1, ini, ikr, ikz, updatetlevel)
           sum_kernel2_i     = sum_kernel2_i     + Kni**2 ! ... sum recursively ...
-!write(*,*) 'K',ini-1,'i = ', Kni
         END DO
       endif
       !!! Assembling the poisson equation
@@ -85,12 +79,7 @@ SUBROUTINE poisson
                         + qi2_taui * (1._dp - sum_kernel2_i)
       gammaD_phi = q_e * sum_kernel_mom_e + q_i * sum_kernel_mom_i
 
-      IF ( (alphaD .EQ. 0._dp) .AND. (gammaD .EQ. 0._dp) ) THEN
-        write(*,*) "Warning : 0/0 occuring"
-        phi(ikr,ikz) = 0._dp
-      ELSE
-        phi(ikr, ikz) =  gammaD_phi/gammaD
-      ENDIF
+      phi(ikr, ikz) =  gammaD_phi/gammaD
 
     END DO
   END DO
diff --git a/wk/analysis.m b/wk/analysis.m
new file mode 100644
index 0000000000000000000000000000000000000000..229dbd1963c75a2511372d0cee086616720abb2c
--- /dev/null
+++ b/wk/analysis.m
@@ -0,0 +1,201 @@
+%% load results
+JOBNUM = 00;
+filename = [BASIC.SIMID,'_','%.2d.h5'];
+filename = sprintf(filename,JOBNUM); disp(['Analysing ',filename])
+[Nipj, p_, j_, kr, kz, Ts] = load_5D_data(filename, 'moments_i');
+Nepj                       = load_5D_data(filename, 'moments_e');
+Ni      = squeeze(Nipj(1,1,:,:,:));
+Ne      = squeeze(Nepj(1,1,:,:,:));
+PH      = load_2D_data(filename, 'phi');
+Ts      = Ts';
+Ns      = numel(Ts);
+dt      = mean(diff(Ts));
+if strcmp(OUTPUTS.write_non_lin,'.true.')
+    Sipj    = load_5D_data(filename, 'Sipj');
+    Sepj    = load_5D_data(filename, 'Sepj');
+    SNi      = squeeze(Sipj(1,1,:,:,:));
+    SNe      = squeeze(Sepj(1,1,:,:,:));
+end
+%% Build grids
+Nkr = numel(kr); Nkz = numel(kz);
+[KZ,KR] = meshgrid(kz,kr);
+Lkr = max(kr)-min(kr); Lkz = max(kz)-min(kz);
+dkr = Lkr/(Nkr-1); dkz = Lkz/(Nkz-1);
+Lk = max(Lkr,Lkz);
+
+dr = 2*pi/Lk; dz = 2*pi/Lk;
+Nr = max(Nkr,Nkz);         Nz = Nr;
+r = dr*(-Nr/2:(Nr/2-1)); Lr = max(r)-min(r);
+z = dz*(-Nz/2:(Nz/2-1)); Lz = max(z)-min(z);
+[YY,XX] = meshgrid(z,r);
+%% Analysis %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% IFFT
+ne   = zeros(Nr,Nz);
+ni     = zeros(Nr,Nz);
+phi    = zeros(Nr,Nz);
+
+for it = 1:numel(PH(1,1,:))
+    NE_ = Ne(:,:,it); NN_ = Ni(:,:,it); PH_ = PH(:,:,it);
+    F_          = (ifft2((NE_),Nr,Nz));
+    ne(:,:,it)= real(fftshift(F_));
+    F_          = (ifft2((NN_),Nr,Nz));
+    ni(:,:,it)  = real(fftshift(F_));
+    F_          = (ifft2((PH_),Nr,Nz));
+    phi(:,:,it) = real(fftshift(F_));
+end
+
+%% Post processing
+phi_ST_r = zeros(Nr,Ns);   % Space-Time diagram of ES potential
+ne_ST_r  = zeros(Nr,Ns);   % Space-Time diagram of density
+ni_ST_r  = zeros(Nr,Ns);   % Space-Time diagram of density
+phi_ST_z = zeros(Nz,Ns);   % Space-Time diagram of ES potential
+ne_ST_z  = zeros(Nz,Ns);   % Space-Time diagram of density
+ni_ST_z  = zeros(Nz,Ns);   % Space-Time diagram of density
+phi_00 = zeros(1,Ns);    % Time evolution of ES potential at origin
+ne_00  = zeros(1,Ns);    % Time evolution of density at origin
+ni_00  = zeros(1,Ns);    % Time evolution of density at origin
+[~,ir0] = min(abs(r)); [~,iz0] = min(abs(z));
+Ne_11  = zeros(1,Ns);    % Time evolution of F density at 1,1
+Ni_11  = zeros(1,Ns);    % Time evolution of F density at 1,1
+[~,ikr1] = min(abs(kr-round(1/dkr)*dkr)); [~,ikz1] = min(abs(kz-round(1/dkz)*dkz));
+Sni_norm= zeros(1,Ns);   % Time evolution of the amp of density nonlin term
+Sne_norm= zeros(1,Ns);   % Time evolution of the amp of vorti. nonlin term
+E_pot  = zeros(1,Ns);    % Potential energy n^2
+E_kin  = zeros(1,Ns);    % Kinetic energy grad(phi)^2
+ExB    = zeros(1,Ns);    % ExB drift intensity \propto |\grad \phi|
+CFL    = zeros(1,Ns);    % CFL time step
+Ddr = 1i*KR; Ddz = 1i*KZ; lapl   = Ddr.^2 + Ddz.^2; 
+for it = 1:numel(PH(1,1,:))
+    NE_ = Ne(:,:,it); NN_ = Ni(:,:,it); PH_ = PH(:,:,it);
+    phi_ST_r(:,it) = phi(:,iz0,it); phi_ST_z(:,it) = phi(ir0,:,it);
+    ne_ST_r  (:,it)= ne(:,iz0,it);  ne_ST_z  (:,it)= ne(ir0,:,it);
+    ni_ST_r  (:,it)= ni(:,iz0,it);  ni_ST_z  (:,it)= ni(ir0,:,it);
+    phi_00(it)   = phi(ir0,iz0,it);
+    ne_00(it)    = ne(ir0,iz0,it);
+    ni_00(it)    = ni(ir0,iz0,it);
+    Ne_11(it)    = Ne(ikr1,ikz1,it);
+    Ni_11(it)    = Ni(ikr1,ikz1,it);
+if strcmp(OUTPUTS.write_non_lin,'.true.')
+    Sni_norm(it) = sum(sum(abs(SNi(:,:,it))));
+    Sne_norm(it) = sum(sum(abs(SNe(:,:,it))));
+end
+    E_pot(it)   = pi/Lr/Lz*sum(sum(abs(NN_).^2))/Nkr/Nkr; % integrate through Parseval id
+    E_kin(it)   = pi/Lr/Lz*sum(sum(abs(Ddr.*PH_).^2+abs(Ddz.*PH_).^2))/Nkr/Nkr;
+    ExB(it)     = max(max(max(abs(phi(3:end,:,it)-phi(1:end-2,:,it))/(2*dr))),max(max(abs(phi(:,3:end,it)-phi(:,1:end-2,it))'/(2*dz))));
+end
+E_kin_KZ = mean(mean(abs(Ddr.*PH(:,:,it)).^2+abs(Ddz.*PH(:,:,it)).^2,3),1);
+E_kin_KR = mean(mean(abs(Ddr.*PH(:,:,it)).^2+abs(Ddz.*PH(:,:,it)).^2,3),2);
+dEdt     = diff(E_pot+E_kin)./diff(Ts);
+%% PLOTS
+%% Time evolutions
+fig = figure; FIGNAME = ['t_evolutions',sprintf('_%.2d',JOBNUM)];
+    subplot(221)
+        semilogy(Ts,abs(ne_00),'-','DisplayName','$n_e^{00}$'); hold on;
+        semilogy(Ts,abs(ni_00),'-','DisplayName','$n_i^{00}$');
+        grid on; xlabel('$t$'); ylabel('$|n_a(x=0,y=0)|$');
+    subplot(222)
+        semilogy(Ts,abs(Ni_11),'-','DisplayName','$\phi$')
+        grid on; xlabel('$t$'); ylabel('$|\tilde n(k_r\approx 1,k_z\approx 1)|$');
+    subplot(223)
+        semilogy(Ts,E_kin+E_pot,'-','DisplayName','$\sum|ik\tilde\phi_i|^2+\sum|\tilde n_i|^2$')
+        hold on;
+        grid on; xlabel('$t$'); ylabel('$E$'); legend('show');
+if strcmp(OUTPUTS.write_non_lin,'.true.')
+    subplot(224)
+        semilogy(Ts,Sne_norm,'-','DisplayName','$\sum|S_e^{00}|$'); 
+        hold on;
+        semilogy(Ts,Sni_norm,'-','DisplayName','$\sum|S_i^{00}|$');
+        grid on; xlabel('$t$'); ylabel('$S$'); legend('show');
+end
+FMT = '.fig'; save_figure
+
+%% Spectra energy
+fig = figure; FIGNAME = ['Energy_kin_KZ',sprintf('_%.2d',JOBNUM)];
+    semilogy(kr(floor(end/2)+1:end),E_kin_KR(floor(end/2)+1:end),'o','DisplayName','$\sum_y\langle|ik\tilde\phi_i|^2\rangle_t$')
+    hold on;
+    loglog(kz(floor(end/2)+1:end),E_kin_KZ(floor(end/2)+1:end),'o','DisplayName','$\sum_x\langle|ik\tilde\phi_i|^2\rangle_t$')
+    grid on; xlabel('$k$');  legend('show');
+FMT = '.fig'; save_figure
+
+%% CFL condition
+fig = figure; FIGNAME = ['CFL',sprintf('_%.2d',JOBNUM)];
+    semilogy(Ts,dz./ExB,'-','DisplayName','$|\nabla \phi|\Delta y$');
+    hold on;
+    plot(Ts,dt*ones(1,numel(Ts)),'--k','DisplayName','$\Delta t$');
+    grid on; xlabel('$t$'); ylabel('$\Delta t$'); legend('show');
+FMT = '.fig'; save_figure
+
+%% Space-Time diagrams at z = 0
+plt = @(x) real(x);
+fig = figure; FIGNAME = ['r_space_time_diag',sprintf('_%.2d',JOBNUM)];
+    [TY,TX] = meshgrid(Ts,z);
+subplot(221)% density
+    pclr = pcolor(TX,TY,(plt(ne_ST_r))); set(pclr, 'edgecolor','none'); colorbar;
+    xlabel('$r\,(z=0)$'); ylabel('$t$'); title('$n_e^{00}$');
+subplot(222)% density
+    pclr = pcolor(TX,TY,(plt(ni_ST_r))); set(pclr, 'edgecolor','none'); colorbar;
+    xlabel('$r\,(z=0)$'); ylabel('$t$'); title('$n_i^{00}$');
+subplot(223)% density
+    pclr = pcolor(TX,TY,(plt(phi_ST_r))); set(pclr, 'edgecolor','none'); colorbar;
+    xlabel('$r\,(z=0)$'); ylabel('$t$'); title('$\phi$');
+FMT = '.fig'; save_figure
+
+%% Space-Time diagrams at r = 0
+plt = @(x) real(x);
+fig = figure; FIGNAME = ['z_space_time_diag',sprintf('_%.2d',JOBNUM)];
+    [TY,TX] = meshgrid(Ts,r);
+subplot(221)% density
+    pclr = pcolor(TX,TY,(plt(ne_ST_z))); set(pclr, 'edgecolor','none'); colorbar;
+    xlabel('$z\,(r=0)$'); ylabel('$t$'); title('$n_e^{00}$');
+subplot(222)% density
+    pclr = pcolor(TX,TY,(plt(ni_ST_z))); set(pclr, 'edgecolor','none'); colorbar;
+    xlabel('$z\,(r=0)$'); ylabel('$t$'); title('$n_i^{00}$');
+subplot(223)% density
+    pclr = pcolor(TX,TY,(plt(phi_ST_z))); set(pclr, 'edgecolor','none'); colorbar;
+    xlabel('$z\,(r=0)$'); ylabel('$t$'); title('$\phi$');
+FMT = '.fig'; save_figure
+
+%% phi
+fig = figure; FIGNAME = ['phi_ST',sprintf('_%.2d',JOBNUM)];
+    [TY,TX] = meshgrid(Ts,z);
+    pclr = pcolor(TX,TY,(plt(phi_ST_r))); set(pclr, 'edgecolor','none'); colorbar;
+    xlabel('$x\,(y=0)$'); ylabel('$t$'); title('$\phi$');
+FMT = '.fig'; save_figure
+
+if 0
+%% Show frame
+it = min(1,numel(Ts));
+fig = figure; FIGNAME = ['frame',sprintf('_%.2d',SID)];
+    subplot(221); plt = @(x) fftshift((real(x)));
+        pclr = pcolor(fftshift(KR),fftshift(KZ),plt(PH(:,:,it))); set(pclr, 'edgecolor','none'); colorbar;
+        xlabel('$k_r$'); ylabel('$k_z$'); title(sprintf('t=%.3d',Ts(it))); legend('$\hat\phi$');
+    subplot(222); plt = @(x) fftshift(real(x));
+        pclr = pcolor(fftshift(KR),fftshift(KZ),plt(Ni(:,:,it))); set(pclr, 'edgecolor','none'); colorbar;
+        xlabel('$k_r$'); ylabel('$k_z$'); title(sprintf('t=%.3d',Ts(it))); legend('$\hat n_i^{00}$');
+    subplot(223); plt = @(x) fftshift(real(x));
+        pclr = pcolor(fftshift(KR),fftshift(KZ),plt(Ne(:,:,it))); set(pclr, 'edgecolor','none'); colorbar;
+        xlabel('$k_r$'); ylabel('$k_z$'); title(sprintf('t=%.3d',Ts(it))); legend('$\hat n_e^{00}$');
+if strcmp(OUTPUTS.write_non_lin,'.true.')
+    subplot(224); plt = @(x) fftshift(log10(abs(x)));
+        pclr = pcolor(fftshift(KR),fftshift(KZ),plt(SNi(:,:,it))); set(pclr, 'edgecolor','none'); colorbar;
+        xlabel('$k_r$'); ylabel('$k_z$');legend('$\hat S_i^{00}$');
+end
+FMT = '.fig'; save_figure
+end
+%%
+DELAY = 0.1; skip_ = 2;
+if 0
+%% GIFS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Density electron
+GIFNAME = ['ne',sprintf('_%.2d',JOBNUM)]; FIELDNAME = '$n_e^{00}$';
+FIELD = real(ne(:,:,1:skip_:end)); X = XX; Y = YY; T = Ts(1:skip_:end);
+create_gif
+%% Density ion
+GIFNAME = ['ni',sprintf('_%.2d',JOBNUM)]; FIELDNAME = '$n_i^{00}$';
+FIELD = real(ni(:,:,1:skip_:end)); X = XX; Y = YY; T = Ts(1:skip_:end);
+create_gif
+%% Phi
+GIFNAME = ['phi',sprintf('_%.2d',JOBNUM)]; FIELDNAME = '$\phi$';
+FIELD = real(phi(:,:,1:skip_:end)); X = XX; Y = YY; T = Ts(1:skip_:end);
+create_gif
+end
\ No newline at end of file
diff --git a/wk/fort.90 b/wk/fort.90
index b02202518128b93b13ec1009856e3020e899771f..c11d29567d34becbe94fc861c90d030b6a6efb84 100644
--- a/wk/fort.90
+++ b/wk/fort.90
@@ -1,16 +1,59 @@
 &BASIC
-  nrun=100000
-  dt=0.01
-  tmax=200
+  nrun   = 100000000
+  dt     = 0.001
+  tmax   = 200
+  RESTART = .true.
 /
 &GRID
-  pmaxe =5
-  jmaxe = 3
-  pmaxi = 5
-  jmaxi = 3
-  nkr   = 1
-  krmin = 0
-  krmax = 0
-  nkz   = 1
-  kzmin = 0.1
-  kzmax = 0.1
+  pmaxe =1
+  jmaxe = 0
+  pmaxi = 1
+  jmaxi = 0
+  Nr   = 64
+  Lr = 20
+  Nz   = 64
+  Lz = 20
+/
+&OUTPUT_PAR
+  nsave_0d = 0
+  nsave_1d = 0
+  nsave_2d = 1000
+  nsave_5d = 1000
+  write_Ni00    = .true.
+  write_moments = .true.
+  write_phi     = .true.
+  write_non_lin     = .true.
+  write_doubleprecision = .true.
+  resfile0      = 'SwoK_32x64_L_20_P_1_J_0_nB_0.5_nN_1_mu_1e-04_'
+  rstfile0      = '../checkpoint/cp_SwoK_32x64_L_20_P_1_J_0_nB_0.5_nN_1_mu_1e-04_'
+  job2load      = 0
+/
+&MODEL_PAR
+  ! Collisionality
+  CO      = 0
+  NON_LIN = .true.
+  mu      = 0.0001
+  nu      = 0
+  tau_e   = 1
+  tau_i   = 1
+  sigma_e = 0.023338
+  sigma_i = 1
+  q_e     = -1
+  q_i     = 1
+  eta_n   = 1
+  eta_T   = 0
+  eta_B   = 0.5
+  lambdaD = 0
+/
+&INITIAL_CON
+  only_Na00         =.false.
+  initback_moments  =0.0001
+  initnoise_moments =5e-05
+  iseed             =42
+  selfmat_file      ='../iCa/self_Coll_GKE_0_GKI_0_ESELF_1_ISELF_1_Pmaxe_1_Jmaxe_0_Pmaxi_1_Jmaxi_0_pamaxx_10.h5'
+  eimat_file        ='../iCa/ei_Coll_GKE_0_GKI_0_ETEST_1_EBACK_1_Pmaxe_1_Jmaxe_0_Pmaxi_1_Jmaxi_0_pamaxx_10_tau_1.0000_mu_0.0233.h5'
+  iemat_file        ='../iCa/ie_Coll_GKE_0_GKI_0_ITEST_1_IBACK_1_Pmaxe_1_Jmaxe_0_Pmaxi_1_Jmaxi_0_pamaxx_10_tau_1.0000_mu_0.0233.h5'
+/
+&TIME_INTEGRATION_PAR
+  numerical_scheme='RK4'
+/
\ No newline at end of file
diff --git a/wk/run.m b/wk/run.m
new file mode 100644
index 0000000000000000000000000000000000000000..47b7d4332aeb8434ccdecbadcc0cf562d4d2ca07
--- /dev/null
+++ b/wk/run.m
@@ -0,0 +1,5 @@
+%% Run HeLaZ
+EXEC  = ' ../bin/helaz ';
+RUN   = ['mpirun -np ' num2str(nproc)];
+CMD   = [RUN, EXEC, INPUT];
+system(CMD);
\ No newline at end of file
diff --git a/wk/setup.m b/wk/setup.m
new file mode 100644
index 0000000000000000000000000000000000000000..c1c45262f8e083a5cede87e93f9f2af168c30b41
--- /dev/null
+++ b/wk/setup.m
@@ -0,0 +1,113 @@
+clear all; close all;
+addpath(genpath('../matlab')) % ... add
+default_plots_options
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Set Up parameters
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% PHYSICAL PARAMETERS
+NU      = 0.0;    % Collision frequency
+TAU     = 1.0;    % e/i temperature ratio
+ETAB    = 0.5;    % Magnetic gradient
+ETAN    = 1.0;    % Density gradient
+ETAT    = 0.0;    % Temperature gradient
+MU      = 1e-4;   % Hyper diffusivity coefficient
+%% GRID PARAMETERS
+N       = 64;     % Frequency gridpoints
+L       = 20;     % Size of the squared frequency domain
+PMAXE   = 01;     % Highest electron Hermite polynomial degree
+JMAXE   = 00;     % Highest ''       Laguerre ''
+PMAXI   = 01;     % Highest ion      Hermite polynomial degree
+JMAXI   = 00;     % Highest ''       Laguerre ''
+%% TIME PARAMETERS 
+TMAX    = 200.0;    % Maximal time unit
+DT      = 1e-3;   % Time step
+SPS     = 1;     % Sampling per time unit
+RESTART = 1;      % To restart from last checkpoint
+JOB2LOAD= 0;
+%% OPTIONS
+SIMID   = 'SwoK';  % Name of the simulation
+NON_LIN = 1; % activate non-linearity 
+CO      = 0;
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%% ________________________________________________________________________
+% Naming and creating input file
+params   = ['P_',num2str(PMAXE),'_J_',num2str(JMAXE),...
+    '_nB_',num2str(ETAB),'_nN_',num2str(ETAN),'_mu_%0.0e_'];
+params   = sprintf(params,MU);
+if ~NON_LIN; params = ['lin_',params]; end;
+resolution = ['_',num2str(N/2),'x',num2str(N),'_'];
+gridname   = ['L_',num2str(L),'_'];
+BASIC.SIMID = [SIMID,resolution,gridname,params];
+BASIC.nrun       = 1e8;
+BASIC.dt         = DT;   
+BASIC.tmax       = TMAX;    %time normalized to 1/omega_pe
+if RESTART; BASIC.RESTART = '.true.'; else; BASIC.RESTART = '.false.';end;
+OUTPUTS.nsave_0d = 0;
+OUTPUTS.nsave_1d = 0;
+OUTPUTS.nsave_2d = floor(1.0/SPS/DT);
+OUTPUTS.nsave_5d = floor(1.0/SPS/DT);
+OUTPUTS.write_Ni00    = '.true.';
+OUTPUTS.write_moments = '.true.';
+OUTPUTS.write_phi     = '.true.';
+OUTPUTS.write_non_lin = '.true.';
+if NON_LIN == 0; OUTPUTS.write_non_lin = '.false.'; end;
+OUTPUTS.write_doubleprecision = '.true.';
+OUTPUTS.resfile0      = ['''',BASIC.SIMID,''''];
+OUTPUTS.rstfile0      = ['''','../checkpoint/cp_',BASIC.SIMID,''''];
+OUTPUTS.job2load      = JOB2LOAD;
+% Grid parameters
+GRID.pmaxe = PMAXE;  % Electron Hermite moments
+GRID.jmaxe = JMAXE;  % Electron Laguerre moments 
+GRID.pmaxi = PMAXI;  % Ion Hermite moments
+GRID.jmaxi = JMAXI;  % Ion Laguerre moments
+GRID.Nr    = N; % r grid resolution
+GRID.Lr    = L; % r length
+GRID.Nz    = N; % z ''
+GRID.Lz    = L; % z ''
+% Model parameters
+MODEL.CO      = CO;  % Collision operator (0 : L.Bernstein, -1 : Full Coulomb, -2 : Dougherty)
+if NON_LIN; MODEL.NON_LIN = '.true.'; else; MODEL.NON_LIN = '.false.';end;
+MODEL.mu      = MU;
+MODEL.nu      = NU; % hyper diffusive coefficient nu for HW
+% temperature ratio T_a/T_e
+MODEL.tau_e   = TAU;
+MODEL.tau_i   = TAU;
+% mass ratio sqrt(m_a/m_i)
+MODEL.sigma_e = 0.0233380;
+MODEL.sigma_i = 1.0;
+% charge q_a/e
+MODEL.q_e     =-1.0;
+MODEL.q_i     = 1.0;
+% gradients L_perp/L_x
+MODEL.eta_n   = ETAN;        % source term kappa for HW
+MODEL.eta_T   = ETAT;        % Temperature
+MODEL.eta_B   = ETAB;        % Magnetic
+MODEL.lambdaD = 0.0;
+% Time integration and intialization parameters
+TIME_INTEGRATION.numerical_scheme  = '''RK4''';
+INITIAL.only_Na00         = '.false.';
+INITIAL.initback_moments  = 1.0e-4;
+INITIAL.initnoise_moments = 5.0e-5;
+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'''];
+
+%% Compile and write input file
+INPUT = write_fort90(OUTPUTS,GRID,MODEL,INITIAL,TIME_INTEGRATION,BASIC);
+nproc = 1;
+MAKE  = 'cd ..; make; cd wk';
+system(MAKE);
+%%
+disp(['Set up ', BASIC.SIMID]);
\ No newline at end of file