From a0bebee66695cee269c7c8da59799e48dc68038e Mon Sep 17 00:00:00 2001
From: Antoine Hoffmann <antoine.hoffmann@epfl.ch>
Date: Thu, 9 Mar 2023 17:13:51 +0100
Subject: [PATCH] typos

---
 src/calculus_mod.F90                  |  94 +--
 src/control.F90                       |   5 +-
 src/diagnose.F90                      |  31 +-
 src/geometry_mod.F90                  |  18 +-
 src/grid_mod.F90                      |  30 +-
 src/inital.F90                        |   8 +-
 src/memory.F90                        |  52 +-
 src/miller_mod.F90                    |  14 +-
 src/numerics_mod.F90                  |  41 +-
 src/parallel_mod.F90                  |  34 +-
 src/processing_mod.F90                | 923 +++++++++++++-------------
 src/solve_EM_fields.F90               |   6 +-
 src/stepon.F90                        |   7 +-
 src/tesend.F90                        |   2 +-
 testcases/smallest_problem/fort.90    |   4 +-
 testcases/smallest_problem/fort_00.90 |   4 +-
 16 files changed, 638 insertions(+), 635 deletions(-)

diff --git a/src/calculus_mod.F90 b/src/calculus_mod.F90
index d30b3a8c..1ef419a8 100644
--- a/src/calculus_mod.F90
+++ b/src/calculus_mod.F90
@@ -20,25 +20,25 @@ MODULE calculus
 
 CONTAINS
 
-SUBROUTINE grad_z(target,local_Nz,Ngz,inv_deltaz,f,ddzf)
+SUBROUTINE grad_z(target,local_nz,Ngz,inv_deltaz,f,ddzf)
   implicit none
   ! Compute the periodic boundary condition 4 points centered finite differences
   ! formula among staggered grid or not.
   ! not staggered : the derivative results must be on the same grid as the field
   !     staggered : the derivative is computed from a grid to the other
-  INTEGER,  INTENT(IN) :: target, local_Nz, Ngz
+  INTEGER,  INTENT(IN) :: target, local_nz, Ngz
   REAL(dp), INTENT(IN) :: inv_deltaz
-  COMPLEX(dp),dimension(local_Nz+Ngz), INTENT(IN)  :: f
-  COMPLEX(dp),dimension(local_Nz),     INTENT(OUT) :: ddzf
+  COMPLEX(dp),dimension(local_nz+Ngz), INTENT(IN)  :: f
+  COMPLEX(dp),dimension(local_nz),     INTENT(OUT) :: ddzf
   INTEGER :: iz
   IF(Ngz .GT. 3) THEN ! Cannot apply four points stencil on less than four points grid
     SELECT CASE(TARGET)
     CASE(1)
-      CALL grad_z_o2e(local_Nz,Ngz,inv_deltaz,f,ddzf)
+      CALL grad_z_o2e(local_nz,Ngz,inv_deltaz,f,ddzf)
     CASE(2)
-      CALL grad_z_e2o(local_Nz,Ngz,inv_deltaz,f,ddzf)
+      CALL grad_z_e2o(local_nz,Ngz,inv_deltaz,f,ddzf)
     CASE DEFAULT ! No staggered grid -> usual centered finite differences
-      DO iz = 1,local_Nz
+      DO iz = 1,local_nz
        ddzf(iz) = dz_usu(-2)*f(iz  ) + dz_usu(-1)*f(iz+1) &
                  +dz_usu( 0)*f(iz+2) &
                  +dz_usu( 1)*f(iz+3) + dz_usu( 2)*f(iz+4)
@@ -49,30 +49,30 @@ SUBROUTINE grad_z(target,local_Nz,Ngz,inv_deltaz,f,ddzf)
     ddzf = 0._dp
   ENDIF
 CONTAINS
-  SUBROUTINE grad_z_o2e(local_Nz,Ngz,inv_deltaz,fo,ddzfe) ! Paruta 2018 eq (27)
+  SUBROUTINE grad_z_o2e(local_nz,Ngz,inv_deltaz,fo,ddzfe) ! Paruta 2018 eq (27)
     ! gives the gradient of a field from the odd grid to the even one
     implicit none
-    INTEGER,  INTENT(IN) :: local_Nz, Ngz
+    INTEGER,  INTENT(IN) :: local_nz, Ngz
     REAL(dp), INTENT(IN) :: inv_deltaz
-    COMPLEX(dp),dimension(local_Nz+Ngz), INTENT(IN)  :: fo
-    COMPLEX(dp),dimension(local_Nz),     INTENT(OUT) :: ddzfe !
+    COMPLEX(dp),dimension(local_nz+Ngz), INTENT(IN)  :: fo
+    COMPLEX(dp),dimension(local_nz),     INTENT(OUT) :: ddzfe !
     INTEGER :: iz
-    DO iz = 1,local_Nz
+    DO iz = 1,local_nz
      ddzfe(iz) = dz_o2e(-2)*fo(iz  ) + dz_o2e(-1)*fo(iz+1) &
                 +dz_o2e( 0)*fo(iz+2) + dz_o2e( 1)*fo(iz+3)
     ENDDO
     ddzfe(:) = ddzfe(:) * inv_deltaz
   END SUBROUTINE grad_z_o2e
 
-  SUBROUTINE grad_z_e2o(local_Nz,Ngz,inv_deltaz,fe,ddzfo) ! n2v for Paruta 2018 eq (28)
+  SUBROUTINE grad_z_e2o(local_nz,Ngz,inv_deltaz,fe,ddzfo) ! n2v for Paruta 2018 eq (28)
     ! gives the gradient of a field from the even grid to the odd one
     implicit none
-    INTEGER,  INTENT(IN) :: local_Nz, Ngz
+    INTEGER,  INTENT(IN) :: local_nz, Ngz
     REAL(dp), INTENT(IN) :: inv_deltaz
-    COMPLEX(dp),dimension(local_Nz+Ngz), INTENT(IN)  :: fe
-    COMPLEX(dp),dimension(local_Nz),     INTENT(OUT) :: ddzfo
+    COMPLEX(dp),dimension(local_nz+Ngz), INTENT(IN)  :: fe
+    COMPLEX(dp),dimension(local_nz),     INTENT(OUT) :: ddzfo
     INTEGER :: iz
-    DO iz = 1,local_Nz
+    DO iz = 1,local_nz
      ddzfo(iz) = dz_e2o(-1)*fe(iz+1) + dz_e2o(0)*fe(iz+2) &
                 +dz_e2o( 1)*fe(iz+3) + dz_e2o(2)*fe(iz+4)
     ENDDO
@@ -80,16 +80,16 @@ CONTAINS
   END SUBROUTINE grad_z_e2o
 END SUBROUTINE grad_z
 
-SUBROUTINE grad_z2(local_Nz,Ngz,inv_deltaz,f,ddz2f)
+SUBROUTINE grad_z2(local_nz,Ngz,inv_deltaz,f,ddz2f)
   ! Compute the second order fourth derivative for periodic boundary condition
   implicit none
-  INTEGER, INTENT(IN)  :: local_Nz, Ngz
+  INTEGER, INTENT(IN)  :: local_nz, Ngz
   REAL(dp), INTENT(IN) :: inv_deltaz
-  COMPLEX(dp),dimension(local_Nz+Ngz), INTENT(IN)  :: f
-  COMPLEX(dp),dimension(local_Nz),     INTENT(OUT) :: ddz2f
+  COMPLEX(dp),dimension(local_nz+Ngz), INTENT(IN)  :: f
+  COMPLEX(dp),dimension(local_nz),     INTENT(OUT) :: ddz2f
   INTEGER :: iz
   IF(Ngz .GT. 3) THEN ! Cannot apply four points stencil on less than four points grid
-      DO iz = 1,local_Nz
+      DO iz = 1,local_nz
        ddz2f(iz) = dz2_usu(-2)*f(iz  ) + dz2_usu(-1)*f(iz+1) &
                   +dz2_usu( 0)*f(iz+2)&
                   +dz2_usu( 1)*f(iz+3) + dz2_usu( 2)*f(iz+4)
@@ -101,16 +101,16 @@ SUBROUTINE grad_z2(local_Nz,Ngz,inv_deltaz,f,ddz2f)
 END SUBROUTINE grad_z2
 
 
-SUBROUTINE grad_z4(local_Nz,Ngz,inv_deltaz,f,ddz4f)
+SUBROUTINE grad_z4(local_nz,Ngz,inv_deltaz,f,ddz4f)
   ! Compute the second order fourth derivative for periodic boundary condition
   implicit none
-  INTEGER,  INTENT(IN) :: local_Nz, Ngz
+  INTEGER,  INTENT(IN) :: local_nz, Ngz
   REAL(dp), INTENT(IN) :: inv_deltaz
-  COMPLEX(dp),dimension(local_Nz+Ngz), INTENT(IN)  :: f
-  COMPLEX(dp),dimension(local_Nz),     INTENT(OUT) :: ddz4f
+  COMPLEX(dp),dimension(local_nz+Ngz), INTENT(IN)  :: f
+  COMPLEX(dp),dimension(local_nz),     INTENT(OUT) :: ddz4f
   INTEGER :: iz
   IF(Ngz .GT. 3) THEN ! Cannot apply four points stencil on less than four points grid
-      DO iz = 1,local_Nz
+      DO iz = 1,local_nz
        ddz4f(iz) = dz4_usu(-2)*f(iz  ) + dz4_usu(-1)*f(iz+1) &
                   +dz4_usu( 0)*f(iz+2)&
                   +dz4_usu( 1)*f(iz+3) + dz4_usu( 2)*f(iz+4)
@@ -122,47 +122,47 @@ SUBROUTINE grad_z4(local_Nz,Ngz,inv_deltaz,f,ddz4f)
 END SUBROUTINE grad_z4
 
 
-SUBROUTINE interp_z(target,local_Nz,Ngz,f_in,f_out)
+SUBROUTINE interp_z(target,local_nz,Ngz,f_in,f_out)
   ! Function meant to interpolate one field defined on a even/odd z into
   !  the other odd/even z grid.
   ! If Staggered Grid flag (SG) is false, returns identity
   implicit none
-  INTEGER, INTENT(IN) :: local_Nz, Ngz
+  INTEGER, INTENT(IN) :: local_nz, Ngz
   INTEGER, intent(in) :: target ! target grid : 0 for even grid, 1 for odd
-  COMPLEX(dp),dimension(local_Nz+Ngz), INTENT(IN)  :: f_in
-  COMPLEX(dp),dimension(local_Nz),     INTENT(OUT) :: f_out
+  COMPLEX(dp),dimension(local_nz+Ngz), INTENT(IN)  :: f_in
+  COMPLEX(dp),dimension(local_nz),     INTENT(OUT) :: f_out
   SELECT CASE(TARGET)
   CASE(1) ! output on even grid
-    CALL interp_o2e_z(local_Nz,Ngz,f_in,f_out)
+    CALL interp_o2e_z(local_nz,Ngz,f_in,f_out)
   CASE(2) ! output on odd grid
-    CALL interp_e2o_z(local_Nz,Ngz,f_in,f_out)
+    CALL interp_e2o_z(local_nz,Ngz,f_in,f_out)
   CASE DEFAULT ! No staggered grid -> usual centered finite differences
     f_out = f_in
   END SELECT
 CONTAINS
-  SUBROUTINE interp_o2e_z(local_Nz, Ngz,fo,fe)
+  SUBROUTINE interp_o2e_z(local_nz, Ngz,fo,fe)
    ! gives the value of a field from the odd grid to the even one
    implicit none
-   INTEGER, INTENT(IN) :: local_Nz, Ngz
-   COMPLEX(dp),dimension(local_Nz+Ngz), INTENT(IN)  :: fo
-   COMPLEX(dp),dimension(local_Nz),     INTENT(OUT) :: fe
+   INTEGER, INTENT(IN) :: local_nz, Ngz
+   COMPLEX(dp),dimension(local_nz+Ngz), INTENT(IN)  :: fo
+   COMPLEX(dp),dimension(local_nz),     INTENT(OUT) :: fe
    INTEGER :: iz
    ! 4th order interp
-   DO iz = 1,local_Nz
+   DO iz = 1,local_nz
      fe(iz) = iz_o2e(-2)*fo(iz )  + iz_o2e(-1)*fo(iz+1) &
             + iz_o2e( 0)*fo(iz+2) + iz_o2e( 1)*fo(iz+3)
    ENDDO
   END SUBROUTINE interp_o2e_z
 
-  SUBROUTINE interp_e2o_z(local_Nz, Ngz,fe,fo)
+  SUBROUTINE interp_e2o_z(local_nz, Ngz,fe,fo)
    ! gives the value of a field from the even grid to the odd one
    implicit none
-   INTEGER, INTENT(IN) :: local_Nz, Ngz
-   COMPLEX(dp),dimension(local_Nz+Ngz), INTENT(IN)  :: fe
-   COMPLEX(dp),dimension(local_Nz),     INTENT(OUT) :: fo
+   INTEGER, INTENT(IN) :: local_nz, Ngz
+   COMPLEX(dp),dimension(local_nz+Ngz), INTENT(IN)  :: fe
+   COMPLEX(dp),dimension(local_nz),     INTENT(OUT) :: fo
    INTEGER :: iz
    ! 4th order interp
-   DO iz = 1,local_Nz
+   DO iz = 1,local_nz
      fo(iz) = iz_e2o(-1)*fe(iz+1) + iz_e2o( 0)*fe(iz+2) &
             + iz_e2o( 1)*fe(iz+3) + iz_e2o( 2)*fe(iz+4)
    ENDDO
@@ -170,23 +170,23 @@ CONTAINS
 
 END SUBROUTINE interp_z
 
-SUBROUTINE simpson_rule_z(local_Nz,dz,f,intf)
+SUBROUTINE simpson_rule_z(local_nz,dz,f,intf)
  ! integrate f(z) over z using the simpon's rule. Assume periodic boundary conditions (f(ize+1) = f(izs))
  !from molix BJ Frei
  USE prec_const, ONLY: dp, onethird
  USE parallel,   ONLY: num_procs_z, rank_z, comm_z, manual_0D_bcast
  USE mpi
  implicit none
- INTEGER, INTENT(IN) :: local_Nz
+ INTEGER, INTENT(IN) :: local_nz
  REAL(dp),INTENT(IN) :: dz
- complex(dp),dimension(local_Nz), intent(in) :: f
+ complex(dp),dimension(local_nz), intent(in) :: f
  COMPLEX(dp), intent(out) :: intf
  COMPLEX(dp)              :: buffer, local_int
  INTEGER :: root, i_, iz, ierr
 
  ! Buil local sum using the weights of composite Simpson's rule
  local_int = 0._dp
- DO iz = 1,local_Nz
+ DO iz = 1,local_nz
    IF(MODULO(iz,2) .EQ. 1) THEN ! odd iz
      local_int = local_int + 2._dp*onethird*dz*f(iz)
    ELSE ! even iz
diff --git a/src/control.F90 b/src/control.F90
index 944daf4c..74e41c9d 100644
--- a/src/control.F90
+++ b/src/control.F90
@@ -61,6 +61,9 @@ SUBROUTINE control
   !              2.   Main loop
   DO
      CALL cpu_time(t0_step) ! Measuring time
+     
+     CALL tesend
+     IF( nlend ) EXIT ! exit do loop
 
      CALL increase_step
      CALL increase_cstep
@@ -68,8 +71,6 @@ SUBROUTINE control
 
      CALL increase_time
 
-     CALL tesend
-     IF( nlend ) EXIT ! exit do loop
 
      CALL diagnose(step)
 
diff --git a/src/diagnose.F90 b/src/diagnose.F90
index a98d5981..f1a7d8ee 100644
--- a/src/diagnose.F90
+++ b/src/diagnose.F90
@@ -1,9 +1,9 @@
 SUBROUTINE diagnose(kstep)
   !   Diagnostics, writing simulation state to disk
-  USE basic, ONLY: t0_diag,t1_diag,tc_diag, lu_in, finish, start, cstep, dt, time, tmax, display_h_min_s
+  USE basic,           ONLY: t0_diag,t1_diag,tc_diag, lu_in, finish, start, cstep, dt, time, tmax, display_h_min_s
   USE diagnostics_par, ONLY: input_fname
-  USE processing, ONLY: pflux_x, hflux_x
-  USE parallel,   ONLY: my_id
+  USE processing,      ONLY: pflux_x, hflux_x
+  USE parallel,        ONLY: my_id
   IMPLICIT NONE
   INTEGER, INTENT(in) :: kstep
   CALL cpu_time(t0_diag) ! Measuring time
@@ -24,7 +24,7 @@ SUBROUTINE diagnose(kstep)
   !! Specific diagnostic calls
   CALL diagnose_full(kstep)
   ! Terminal info
-  IF ((kstep .GT. 0) .AND. (MOD(cstep, INT(1.0/dt)) == 0) .AND. (my_id .EQ. 0)) THEN
+  IF ((kstep .GE. 0) .AND. (MOD(cstep, INT(1.0/dt)) == 0) .AND. (my_id .EQ. 0)) THEN
     WRITE(*,"(A,F6.0,A1,F6.0,A8,G10.2,A8,G10.2,A)")'|t/tmax = ', time,"/",tmax,'| Gxi = ',pflux_x(1),'| Qxi = ',hflux_x(1),'|'
   ENDIF
   CALL cpu_time(t1_diag); tc_diag = tc_diag + (t1_diag - t0_diag)
@@ -155,7 +155,7 @@ SUBROUTINE diagnose_full(kstep)
     CALL putarrnd(fidres, "/data/metric/Jacobian",    Jacobian(1+ngz/2:local_nz+ngz/2,:), (/1, 1, 1/))
     CALL putarrnd(fidres, "/data/metric/gradz_coeff", gradz_coeff(1+ngz/2:local_nz+ngz/2,:), (/1, 1, 1/))
     CALL putarrnd(fidres, "/data/metric/Ckxky",       Ckxky(1:local_nky,1:local_nkx,1+ngz/2:local_nz+ngz/2,:), (/1, 1, 3/))
-    CALL putarrnd(fidres, "/data/metric/kernel",    kernel(1,1+ngj/2:local_nj+ngj/2,1:local_nky,1:local_nkx,1+ngz/2:local_nz+ngz/2,:), (/1, 1, 2, 4/))
+    CALL putarrnd(fidres, "/data/metric/kernel",    kernel(1,1+ngj/2:local_nj+ngj/2,1:local_nky,1:local_nkx,1+ngz/2:local_nz+ngz/2,1), (/1, 1, 2, 4/))
     !  var0d group (gyro transport)
     IF (nsave_0d .GT. 0) THEN
      CALL creatg(fidres, "/data/var0d", "0d profiles")
@@ -225,13 +225,10 @@ SUBROUTINE diagnose_full(kstep)
       CALL attach(fidres,"/data/var5d/" , "frames", iframe5d)
     END IF
   ENDIF
-
-
   !_____________________________________________________________________________
   !                   2.   Periodic diagnostics
   !
   IF (kstep .GE. 0) THEN
-
      !                       2.1   0d history arrays
      IF (nsave_0d .GT. 0) THEN
         IF ( MOD(cstep, nsave_0d) == 0 ) THEN
@@ -248,15 +245,13 @@ SUBROUTINE diagnose_full(kstep)
         ENDIF
      ENDIF
      !                       2.4   5d profiles
-     IF (nsave_5d .GT. 0 .AND. cstep .GT. 0) THEN
+     IF (nsave_5d .GT. 0) THEN
         IF (MOD(cstep, nsave_5d) == 0) THEN
            CALL diagnose_5d
         END IF
      END IF
-
   !_____________________________________________________________________________
   !                   3.   Final diagnostics
-
   ELSEIF (kstep .EQ. -1) THEN
      CALL attach(fidres, "/data/input","cpu_time",finish-start)
 
@@ -446,8 +441,8 @@ SUBROUTINE diagnose_5d
   USE fields, ONLY: moments
   USE grid,   ONLY:total_np, total_nj, total_nky, total_nkx, total_nz, &
                    local_np, local_nj, local_nky, local_nkx, local_nz, &
-                   ngp, ngj, ngz
-  USE time_integration, ONLY: updatetlevel
+                   ngp, ngj, ngz, total_na
+  USE time_integration, ONLY: updatetlevel, ntimelevel
   USE diagnostics_par
   USE prec_const, ONLY: dp
   IMPLICIT NONE
@@ -470,19 +465,19 @@ SUBROUTINE diagnose_5d
     USE parallel, ONLY: gather_pjxyz, num_procs
     USE prec_const, ONLY: dp
     IMPLICIT NONE
-    COMPLEX(dp), DIMENSION(:,:,:,:,:,:,:), INTENT(IN) :: field
+    COMPLEX(dp), DIMENSION(total_na,local_np+ngp,local_nj+ngj,local_nky,local_nkx,local_nz+ngz,ntimelevel), INTENT(IN) :: field
     CHARACTER(*), INTENT(IN) :: text
-    COMPLEX(dp), DIMENSION(local_np,local_nj,local_nky,local_nkx,local_nz) :: field_sub
-    COMPLEX(dp), DIMENSION(total_np,total_nj,total_nky,total_nkx,total_nz) :: field_full
+    COMPLEX(dp), DIMENSION(total_na,local_np,local_nj,local_nky,local_nkx,local_nz) :: field_sub
+    COMPLEX(dp), DIMENSION(total_na,total_np,total_nj,total_nky,total_nkx,total_nz) :: field_full
     CHARACTER(LEN=50) :: dset_name
-    field_sub  = field(1,(1+ngp/2):(local_np+ngp/2),(1+ngj/2):(local_nj+ngj/2),&
+    field_sub  = field(1:total_na,(1+ngp/2):(local_np+ngp/2),(1+ngj/2):(local_nj+ngj/2),&
                           1:local_nky,1:local_nkx,  (1+ngz/2):(local_nz+ngz/2),updatetlevel)
     field_full = 0;
     WRITE(dset_name, "(A, '/', A, '/', i6.6)") "/data/var5d", TRIM(text), iframe5d
     IF (num_procs .EQ. 1) THEN
       CALL putarr(fidres, dset_name, field_sub, ionode=0)
     ELSEIF(GATHERV_OUTPUT) THEN ! output using one node (gatherv)
-      CALL gather_pjxyz(field_sub,field_full,local_np,total_np,total_nj,local_nky,total_nky,total_nkx,local_nz,total_nz)
+      CALL gather_pjxyz(field_sub,field_full,total_na,local_np,total_np,total_nj,local_nky,total_nky,total_nkx,local_nz,total_nz)
       CALL putarr(fidres, dset_name, field_full, ionode=0)
     ELSE
       CALL putarrnd(fidres, dset_name, field_sub,  (/1,3,5/))
diff --git a/src/geometry_mod.F90 b/src/geometry_mod.F90
index 0af30081..cb59aa62 100644
--- a/src/geometry_mod.F90
+++ b/src/geometry_mod.F90
@@ -100,7 +100,7 @@ CONTAINS
     ! evalute metrix, elementwo_third_kpmaxts, jacobian and gradient
     implicit none
     REAL(dp) :: kx,ky
-    COMPLEX(dp), DIMENSION(local_Nz+Ngz) :: integrant
+    COMPLEX(dp), DIMENSION(local_nz) :: integrant
     real(dp) :: G1,G2,G3,Cx,Cy
     INTEGER  :: eo,iz,iky,ikx
 
@@ -138,7 +138,7 @@ CONTAINS
     CALL set_kparray(gxx,gxy,gyy,hatB)
     DO eo = 1,Nzgrid
       ! Curvature operator (Frei et al. 2022 eq 2.15)
-      DO iz = 1,local_Nz+Ngz
+      DO iz = 1,local_nz+Ngz
         G1 = gxx(iz,eo)*gyy(iz,eo)-gxy(iz,eo)*gxy(iz,eo)
         G2 = gxx(iz,eo)*gyz(iz,eo)-gxy(iz,eo)*gxz(iz,eo)
         G3 = gxy(iz,eo)*gyz(iz,eo)-gyy(iz,eo)*gxz(iz,eo)
@@ -166,7 +166,7 @@ CONTAINS
     CALL set_ikx_zBC_map
     !
     ! Compute the inverse z integrated Jacobian (useful for flux averaging)
-    integrant = Jacobian(:,1) ! Convert into complex array
+    integrant = Jacobian(1+ngz/2:local_nz+ngz/2,1) ! Convert into complex array
     CALL simpson_rule_z(local_nz,deltaz,integrant,iInt_Jacobian)
     iInt_Jacobian = 1._dp/iInt_Jacobian ! reverse it
   END SUBROUTINE eval_magnetic_geometry
@@ -175,7 +175,7 @@ CONTAINS
   !
 
   SUBROUTINE eval_salpha_geometry
-    USE grid, ONLY : local_Nz,Ngz,zarray,Nzgrid
+    USE grid, ONLY : local_nz,Ngz,zarray,Nzgrid
   ! evaluate s-alpha geometry model
   implicit none
   REAL(dp) :: z
@@ -183,7 +183,7 @@ CONTAINS
   alpha_MHD = 0._dp
 
   DO eo = 1,Nzgrid
-   DO iz = 1,local_Nz+Ngz
+   DO iz = 1,local_nz+Ngz
     z = zarray(iz,eo)
 
     ! metric
@@ -228,14 +228,14 @@ CONTAINS
   !
 
   SUBROUTINE eval_zpinch_geometry
-  USE grid, ONLY : local_Nz,Ngz,zarray,Nzgrid
+  USE grid, ONLY : local_nz,Ngz,zarray,Nzgrid
   implicit none
   REAL(dp) :: z
   INTEGER  :: iz, eo
   alpha_MHD = 0._dp
 
   DO eo = 1,Nzgrid
-   DO iz = 1,local_Nz+Ngz
+   DO iz = 1,local_nz+Ngz
     z = zarray(iz,eo)
 
     ! metric
@@ -278,7 +278,7 @@ CONTAINS
     !--------------------------------------------------------------------------------
     ! NOT TESTED
   subroutine eval_1D_geometry
-    USE grid, ONLY : local_Nz,Ngz,zarray, Nzgrid
+    USE grid, ONLY : local_nz,Ngz,zarray, Nzgrid
     ! evaluate 1D perp geometry model
     implicit none
     REAL(dp) :: z
@@ -313,7 +313,7 @@ CONTAINS
    USE grid,       ONLY: local_nky,Nkx, contains_zmin,contains_zmax, Nexc
    USE prec_const, ONLY: imagu, pi
    IMPLICIT NONE
-   ! REAL :: shift
+   ! REAL(dp) :: shift
    INTEGER :: ikx,iky
    ALLOCATE(ikx_zBC_L(local_nky,Nkx))
    ALLOCATE(ikx_zBC_R(local_nky,Nkx))
diff --git a/src/grid_mod.F90 b/src/grid_mod.F90
index 75a2a524..5b5794fd 100644
--- a/src/grid_mod.F90
+++ b/src/grid_mod.F90
@@ -76,7 +76,7 @@ MODULE grid
   REAL(dp), PUBLIC, PROTECTED ::  local_kxmin, local_kxmax
   REAL(dp), DIMENSION(:), ALLOCATABLE, PUBLIC, PROTECTED ::  local_zmin,  local_zmax
   ! local z weights for computing simpson rule
-  INTEGER,  DIMENSION(:),   ALLOCATABLE, PUBLIC,PROTECTED :: zweights_SR
+  REAL(dp),  DIMENSION(:),   ALLOCATABLE, PUBLIC,PROTECTED :: zweights_SR
   ! Numerical diffusion scaling
   REAL(dp), PUBLIC, PROTECTED  ::  diff_p_coeff, diff_j_coeff
   REAL(dp), PUBLIC, PROTECTED  ::  diff_kx_coeff, diff_ky_coeff, diff_dz_coeff
@@ -381,7 +381,7 @@ CONTAINS
     CHARACTER(len=*), INTENT(IN) ::LINEARITY
     INTEGER, INTENT(IN)  :: N_HD
     INTEGER :: ikx, ikxo
-    REAL    :: Lx_adapted
+    REAL(dp):: Lx_adapted
     IF(shear .GT. 0) THEN
       IF(my_id.EQ.0) write(*,*) 'Magnetic shear detected: set up sheared kx grid..'
       ! mininal size of box in x to respect dkx = 2pi shear dky
@@ -424,7 +424,7 @@ CONTAINS
         local_kxmax = 0._dp
         DO ikx = ikxs,ikxe
           ikxo = ikx - local_nkx_offset
-          kxarray(ikxo) = deltakx*(MODULO(ikx-1,Nkx/2)-Nkx/2*FLOOR(2.*real(ikx-1)/real(Nkx)))
+          kxarray(ikxo) = deltakx*(MODULO(ikx-1,Nkx/2)-Nkx/2*FLOOR(2.*real(ikx-1,dp)/real(Nkx,dp)))
           if (ikx .EQ. Nx/2+1)     kxarray(ikxo) = -kxarray(ikxo)
           ! Finding kx=0
           IF (kxarray(ikxo) .EQ. 0) THEN
@@ -441,7 +441,7 @@ CONTAINS
         ! Build the full grids on process 0 to diagnose it without comm
         ! kx
         DO ikx = 1,Nkx
-            kxarray_full(ikx) = deltakx*(MODULO(ikx-1,Nkx/2)-Nkx/2*FLOOR(2.*real(ikx-1)/real(Nkx)))
+            kxarray_full(ikx) = deltakx*(MODULO(ikx-1,Nkx/2)-Nkx/2*FLOOR(2.*real(ikx-1,dp)/real(Nkx,dp)))
             IF (ikx .EQ. Nx/2+1) kxarray_full(ikx) = -kxarray_full(ikx)
         END DO
       ELSE ! Odd number of kx (-2 -1 0 1 2)
@@ -503,8 +503,8 @@ CONTAINS
     USE prec_const
     USE parallel, ONLY: num_procs_z, rank_z
     IMPLICIT NONE
-    REAL    :: grid_shift, Lz, zmax, zmin
-    INTEGER :: istart, iend, in, Npol, iz, ig, eo, izo
+    REAL(dp):: grid_shift, Lz, zmax, zmin
+    INTEGER :: istart, iend, in, Npol, iz, ig, eo
     total_nz = Nz
     ! Length of the flux tube (in ballooning angle)
     Lz         = 2_dp*pi*Npol
@@ -562,10 +562,9 @@ CONTAINS
     ! Local z array
     ALLOCATE(zarray(local_nz+Ngz,Nzgrid))
     !! interior point loop
-    DO iz = izs,ize
-      izo = iz - local_nz_offset
+    DO iz = 1,total_nz
       DO eo = 1,Nzgrid
-        zarray(izo,eo) = zarray_full(iz) + (eo-1)*grid_shift
+        zarray(iz+ngz/2,eo) = zarray_full(iz) + REAL(eo-1,dp)*grid_shift
       ENDDO
     ENDDO
     ALLOCATE(local_zmax(Nzgrid),local_zmin(Nzgrid))
@@ -573,16 +572,17 @@ CONTAINS
       ! Find local extrema
       local_zmax(eo) = zarray(local_nz+ngz/2,eo)
       local_zmin(eo) = zarray(1+ngz/2,eo)
+      print*, zarray
       ! Fill the ghosts
-      DO ig = 1,ngj/2
-        zarray(ig,eo)          = local_zmin(eo)-(ngz/2+(ig-1))*deltaz
-        zarray(local_nz+ig,eo) = local_zmax(eo)+ig*deltaz
+      DO ig = 1,ngz/2
+        zarray(ig,eo)          = local_zmin(eo)-REAL(ngz/2-(ig-1),dp)*deltaz
+        zarray(local_nz+ngz/2+ig,eo) = local_zmax(eo)+REAL(ig,dp)*deltaz
       ENDDO
       ! Set up the flags to know if the process contains the tip and/or the tail
       ! of the z domain (important for z-boundary condition)
-      IF(abs(local_zmin(eo) - (zmin+(eo-1)*grid_shift)) .LT. EPSILON(zmin)) &
+      IF(abs(local_zmin(eo) - (zmin+REAL(eo-1,dp)*grid_shift)) .LT. EPSILON(zmin)) &
         contains_zmin = .TRUE.
-      IF(abs(local_zmax(eo) - (zmax+(eo-1)*grid_shift)) .LT. EPSILON(zmax)) &
+      IF(abs(local_zmax(eo) - (zmax+REAL(eo-1,dp)*grid_shift)) .LT. EPSILON(zmax)) &
         contains_zmax = .TRUE.
     ENDDO
      IF(mod(Nz,2) .NE. 0 ) THEN
@@ -596,7 +596,7 @@ CONTAINS
     REAL(dp)    :: kx, ky
     CALL allocate_array( kparray, 1,local_nky, 1,local_nkx, 1,local_nz+Ngz, 1,2)
     DO eo = 1,Nzgrid
-      DO iz = 1,local_Nz+Ngz
+      DO iz = 1,local_nz+Ngz
         DO iky = 1,local_nky
           ky = kyarray(iky)
           DO ikx = 1,local_nkx
diff --git a/src/inital.F90 b/src/inital.F90
index f3bbe1b1..61d7e5f7 100644
--- a/src/inital.F90
+++ b/src/inital.F90
@@ -181,7 +181,7 @@ SUBROUTINE init_gyrodens
           DO iky=1,local_nky
             DO iz=1+ngz/2,local_nz+ngz/2
               CALL RANDOM_NUMBER(noise)
-              IF ( (parray(ip) .EQ. 1) .AND. (jarray(ij) .EQ. 1) ) THEN
+              IF ( (parray(ip) .EQ. 0) .AND. (jarray(ij) .EQ. 0) ) THEN
                 moments(ia,ip,ij,iky,ikx,iz,:) = (init_background + init_noiselvl*(noise-0.5_dp))
               ELSE
                 moments(ia,ip,ij,iky,ikx,iz,:) = 0._dp
@@ -196,8 +196,6 @@ SUBROUTINE init_gyrodens
         ENDIF
       END DO
     END DO
-    print*, SUM(moments)
-    stop
     ! Putting to zero modes that are not in the 2/3 Orszag rule
     IF (LINEARITY .NE. 'linear') THEN
       DO ikx=1,total_nkx
@@ -249,7 +247,7 @@ SUBROUTINE init_phi
       DO ikx=2,total_nkx/2
         phi(iky0,ikx,iz) = phi(iky0,total_nkx+2-ikx,iz)
       ENDDO
-    phi(iky0,ikx0,iz) = REAL(phi(iky0,ikx0,iz)) !origin must be real
+    phi(iky0,ikx0,iz) = REAL(phi(iky0,ikx0,iz),dp) !origin must be real
   END DO
   ENDIF
   !**** ensure no previous moments initialization
@@ -309,7 +307,7 @@ SUBROUTINE init_phi_ppj
         DO ikx=2,total_nkx/2
           phi(iky0,ikx,iz) = phi(iky0,total_nkx+2-ikx,iz)
         ENDDO
-        phi(iky0,ikx0,iz) = REAL(phi(iky0,ikx0,iz)) !origin must be real
+        phi(iky0,ikx0,iz) = REAL(phi(iky0,ikx0,iz),dp) !origin must be real
       END DO
     ENDIF
     !**** ensure no previous moments initialization
diff --git a/src/memory.F90 b/src/memory.F90
index 97cf7191..3ee7f91c 100644
--- a/src/memory.F90
+++ b/src/memory.F90
@@ -4,7 +4,7 @@ SUBROUTINE memory
   USE array
   USE basic, ONLY: allocate_array
   USE fields
-  USE grid, ONLY: local_Na, local_Np,Ngp ,local_Nj,Ngj, local_nky, local_nkx,local_Nz,Ngz, jmax, pmax
+  USE grid, ONLY: local_Na, local_Np,Ngp ,local_Nj,Ngj, local_nky, local_nkx,local_nz,Ngz, jmax, pmax
   USE collision
   USE time_integration, ONLY: ntimelevel
   USE prec_const
@@ -12,30 +12,30 @@ SUBROUTINE memory
   IMPLICIT NONE
 
   ! Electrostatic potential
-  CALL allocate_array(           phi, 1,local_nky, 1,local_nkx, 1,local_Nz+Ngz)
-  CALL allocate_array(           psi, 1,local_nky, 1,local_nkx, 1,local_Nz+Ngz)
-  CALL allocate_array(inv_poisson_op, 1,local_nky, 1,local_nkx, 1,local_Nz)
-  CALL allocate_array( inv_ampere_op, 1,local_nky, 1,local_nkx, 1,local_Nz)
-  CALL allocate_array(   inv_pol_ion, 1,local_nky, 1,local_nkx, 1,local_Nz)
-  ! CALL allocate_array(HF_phi_correction_operator, 1,local_nky, 1,local_nkx, 1,local_Nz)
+  CALL allocate_array(           phi, 1,local_nky, 1,local_nkx, 1,local_nz+Ngz)
+  CALL allocate_array(           psi, 1,local_nky, 1,local_nkx, 1,local_nz+Ngz)
+  CALL allocate_array(inv_poisson_op, 1,local_nky, 1,local_nkx, 1,local_nz)
+  CALL allocate_array( inv_ampere_op, 1,local_nky, 1,local_nkx, 1,local_nz)
+  CALL allocate_array(   inv_pol_ion, 1,local_nky, 1,local_nkx, 1,local_nz)
+  ! CALL allocate_array(HF_phi_correction_operator, 1,local_nky, 1,local_nkx, 1,local_nz)
 
   !Moments related arrays
-  CALL allocate_array(           dens, 1,local_Na, 1,local_nky, 1,local_nkx, 1,local_Nz)
-  CALL allocate_array(           upar, 1,local_Na, 1,local_nky, 1,local_nkx, 1,local_Nz)
-  CALL allocate_array(           uper, 1,local_Na, 1,local_nky, 1,local_nkx, 1,local_Nz)
-  CALL allocate_array(           Tpar, 1,local_Na, 1,local_nky, 1,local_nkx, 1,local_Nz)
-  CALL allocate_array(           Tper, 1,local_Na, 1,local_nky, 1,local_nkx, 1,local_Nz)
-  CALL allocate_array(           temp, 1,local_Na, 1,local_nky, 1,local_nkx, 1,local_Nz)
-  CALL allocate_array(         Kernel, 1,local_Na,                 1,local_Nj+Ngj, 1,local_nky, 1,local_nkx, 1,local_Nz+Ngz, 1,2)
-  CALL allocate_array(        moments, 1,local_Na, 1,local_Np+Ngp, 1,local_Nj+Ngj, 1,local_nky, 1,local_nkx, 1,local_Nz+Ngz, 1,ntimelevel )
-  CALL allocate_array(          Napjz, 1,local_Na, 1,local_Np,     1,local_Nj,                               1,local_Nz)
-  CALL allocate_array(    moments_rhs, 1,local_Na, 1,local_Np,     1,local_Nj,     1,local_nky, 1,local_nkx, 1,local_Nz,     1,ntimelevel )
-  CALL allocate_array( nadiab_moments, 1,local_Na, 1,local_Np+Ngp, 1,local_Nj+Ngj, 1,local_nky, 1,local_nkx, 1,local_Nz+Ngz)
-  CALL allocate_array(       ddz_napj, 1,local_Na, 1,local_Np+Ngp, 1,local_Nj+Ngj, 1,local_nky, 1,local_nkx, 1,local_Nz)
-  CALL allocate_array(     ddzND_Napj, 1,local_Na, 1,local_Np+Ngp, 1,local_Nj+Ngj, 1,local_nky, 1,local_nkx, 1,local_Nz)
-  CALL allocate_array(    interp_napj, 1,local_Na, 1,local_Np+Ngp, 1,local_Nj+Ngj, 1,local_nky, 1,local_nkx, 1,local_Nz)
-  CALL allocate_array(          Capj,  1,local_Na, 1,local_Np,     1,local_Nj,     1,local_nky, 1,local_nkx, 1,local_Nz)
-  CALL allocate_array(          Sapj,  1,local_Na, 1,local_Np,     1,local_Nj,     1,local_nky, 1,local_nkx, 1,local_Nz)
+  CALL allocate_array(           dens, 1,local_Na, 1,local_nky, 1,local_nkx, 1,local_nz)
+  CALL allocate_array(           upar, 1,local_Na, 1,local_nky, 1,local_nkx, 1,local_nz)
+  CALL allocate_array(           uper, 1,local_Na, 1,local_nky, 1,local_nkx, 1,local_nz)
+  CALL allocate_array(           Tpar, 1,local_Na, 1,local_nky, 1,local_nkx, 1,local_nz)
+  CALL allocate_array(           Tper, 1,local_Na, 1,local_nky, 1,local_nkx, 1,local_nz)
+  CALL allocate_array(           temp, 1,local_Na, 1,local_nky, 1,local_nkx, 1,local_nz)
+  CALL allocate_array(         Kernel, 1,local_Na,                 1,local_Nj+Ngj, 1,local_nky, 1,local_nkx, 1,local_nz+Ngz, 1,2)
+  CALL allocate_array(        moments, 1,local_Na, 1,local_Np+Ngp, 1,local_Nj+Ngj, 1,local_nky, 1,local_nkx, 1,local_nz+Ngz, 1,ntimelevel )
+  CALL allocate_array(          Napjz, 1,local_Na, 1,local_Np,     1,local_Nj,                               1,local_nz)
+  CALL allocate_array(    moments_rhs, 1,local_Na, 1,local_Np,     1,local_Nj,     1,local_nky, 1,local_nkx, 1,local_nz,     1,ntimelevel )
+  CALL allocate_array( nadiab_moments, 1,local_Na, 1,local_Np+Ngp, 1,local_Nj+Ngj, 1,local_nky, 1,local_nkx, 1,local_nz+Ngz)
+  CALL allocate_array(       ddz_napj, 1,local_Na, 1,local_Np+Ngp, 1,local_Nj+Ngj, 1,local_nky, 1,local_nkx, 1,local_nz)
+  CALL allocate_array(     ddzND_Napj, 1,local_Na, 1,local_Np+Ngp, 1,local_Nj+Ngj, 1,local_nky, 1,local_nkx, 1,local_nz)
+  CALL allocate_array(    interp_napj, 1,local_Na, 1,local_Np+Ngp, 1,local_Nj+Ngj, 1,local_nky, 1,local_nkx, 1,local_nz)
+  CALL allocate_array(          Capj,  1,local_Na, 1,local_Np,     1,local_Nj,     1,local_nky, 1,local_nkx, 1,local_nz)
+  CALL allocate_array(          Sapj,  1,local_Na, 1,local_Np,     1,local_Nj,     1,local_nky, 1,local_nkx, 1,local_nz)
   CALL allocate_array(     xnapj, 1,local_Na, 1,local_Np, 1,local_Nj)
   CALL allocate_array(   xnapp2j, 1,local_Na, 1,local_Np)
   CALL allocate_array(   xnapp1j, 1,local_Na, 1,local_Np)
@@ -67,9 +67,9 @@ SUBROUTINE memory
   !___________________ 2x5D ARRAYS __________________________
   !! Collision matrices
   IF (GK_CO) THEN !GK collision matrices (one for each kperp)
-    CALL allocate_array(  Cab_F, 1,Na, 1,Na, 1,(pmax+1)*(jmax+1), 1,(pmax+1)*(jmax+1), 1,local_nky, 1,local_nkx, 1,local_Nz)
-    CALL allocate_array(  Cab_T, 1,Na, 1,Na, 1,(pmax+1)*(jmax+1), 1,(pmax+1)*(jmax+1), 1,local_nky, 1,local_nkx, 1,local_Nz)
-    CALL allocate_array(  Caa,   1,Na,       1,(pmax+1)*(jmax+1), 1,(pmax+1)*(jmax+1), 1,local_nky, 1,local_nkx, 1,local_Nz)
+    CALL allocate_array(  Cab_F, 1,Na, 1,Na, 1,(pmax+1)*(jmax+1), 1,(pmax+1)*(jmax+1), 1,local_nky, 1,local_nkx, 1,local_nz)
+    CALL allocate_array(  Cab_T, 1,Na, 1,Na, 1,(pmax+1)*(jmax+1), 1,(pmax+1)*(jmax+1), 1,local_nky, 1,local_nkx, 1,local_nz)
+    CALL allocate_array(  Caa,   1,Na,       1,(pmax+1)*(jmax+1), 1,(pmax+1)*(jmax+1), 1,local_nky, 1,local_nkx, 1,local_nz)
   ELSE !DK collision matrix (same for every k)
       CALL allocate_array(  Cab_F, 1,Na, 1,Na, 1,(pmax+1)*(jmax+1), 1,(pmax+1)*(jmax+1), 1,1, 1,1, 1,1)
       CALL allocate_array(  Cab_T, 1,Na, 1,Na, 1,(pmax+1)*(jmax+1), 1,(pmax+1)*(jmax+1), 1,1, 1,1, 1,1)
diff --git a/src/miller_mod.F90 b/src/miller_mod.F90
index 688561e3..3ecce924 100644
--- a/src/miller_mod.F90
+++ b/src/miller_mod.F90
@@ -6,7 +6,7 @@ MODULE miller
   USE basic
   USE parallel, ONLY: my_id, num_procs_z, nbr_U, nbr_D, comm0
   ! use coordinates,only: gcoor, get_dzprimedz
-  USE grid, ONLY: local_Nky, local_Nkx, local_Nz, Ngz, kyarray, kxarray, zarray, Nz, local_nz_offset
+  USE grid, ONLY: local_Nky, local_Nkx, local_nz, Ngz, kyarray, kxarray, zarray, Nz, local_nz_offset
   ! use discretization
   USE lagrange_interpolation
   ! use par_in, only: beta, sign_Ip_CW, sign_Bt_CW, Npol
@@ -59,12 +59,12 @@ CONTAINS
     real(dp), INTENT(INOUT) :: edge_opt        ! alpha mhd
     real(dp), INTENT(INOUT) :: dpdx_pm_geom    ! amplitude mag. eq. pressure grad.
     real(dp), INTENT(INOUT) :: C_y, C_xy
-    real(dp), dimension(1:local_Nz+Ngz,1:2), INTENT(INOUT) :: &
+    real(dp), dimension(1:local_nz+Ngz,1:2), INTENT(INOUT) :: &
                                               gxx_,gyy_,gzz_,gxy_,gxz_,gyz_,&
                                               dBdx_,dBdy_,Bfield_,jacobian_,&
                                               dBdz_,R_hat_,Z_hat_,dxdR_,dxdZ_, &
                                               gradz_coeff_
-    real(dp), dimension(1:local_Nky,1:local_Nkx,1:local_Nz+Ngz,1:2), INTENT(INOUT) :: Ckxky_
+    real(dp), dimension(1:local_Nky,1:local_Nkx,1:local_nz+Ngz,1:2), INTENT(INOUT) :: Ckxky_
     INTEGER :: iz, ikx, iky, eo
     ! No parameter in gyacomo yet
     real(dp) :: sign_Ip_CW=1 ! current sign (only normal current)
@@ -477,7 +477,7 @@ CONTAINS
     call lag3interp(dxdZ_s,chi_s,np_s,dxdZ_out,chi_out,Nz)
     ! Fill the interior of the geom arrays with the results
     do eo=1,2
-      DO iz = 1,local_Nz
+      DO iz = 1,local_nz
         gxx_(iz+Ngz/2,eo)      = gxx_out(iz-local_nz_offset)
         gyy_(iz+Ngz/2,eo)      = gyy_out(iz-local_nz_offset)
         gxz_(iz+Ngz/2,eo)      = gxz_out(iz-local_nz_offset)
@@ -511,7 +511,7 @@ CONTAINS
     CALL update_ghosts_z(dxdZ_(:,eo))
 
     ! Curvature operator (Frei et al. 2022 eq 2.15)
-    DO iz = 1,local_Nz+Ngz
+    DO iz = 1,local_nz+Ngz
       G1 = gxy_(iz,eo)*gxy_(iz,eo)-gxx_(iz,eo)*gyy_(iz,eo)
       G2 = gxy_(iz,eo)*gxz_(iz,eo)-gxx_(iz,eo)*gyz_(iz,eo)
       G3 = gyy_(iz,eo)*gxz_(iz,eo)-gxy_(iz,eo)*gyz_(iz,eo)
@@ -536,10 +536,10 @@ CONTAINS
     SUBROUTINE update_ghosts_z(fz_)
       IMPLICIT NONE
       ! INTEGER,  INTENT(IN) :: nztot_
-      REAL(dp), DIMENSION(1:local_Nz+Ngz), INTENT(INOUT) :: fz_
+      REAL(dp), DIMENSION(1:local_nz+Ngz), INTENT(INOUT) :: fz_
       REAL(dp), DIMENSION(-2:2) :: buff
       INTEGER :: status(MPI_STATUS_SIZE), count, last, first
-      last = local_Nz+Ngz/2
+      last = local_nz+Ngz/2
       first= 1 + Ngz/2
       IF(Nz .GT. 1) THEN
         IF (num_procs_z .GT. 1) THEN
diff --git a/src/numerics_mod.F90 b/src/numerics_mod.F90
index 189ac0a9..ff0949bb 100644
--- a/src/numerics_mod.F90
+++ b/src/numerics_mod.F90
@@ -72,7 +72,8 @@ END SUBROUTINE build_dv4Hp_table
 SUBROUTINE evaluate_kernels
   USE basic
   USE array,   ONLY : kernel!, HF_phi_correction_operator
-  USE grid,    ONLY : local_Na, local_Nj,Ngj, local_nkx, local_nky, local_nz, Ngz, jarray, kparray
+  USE grid,    ONLY : local_Na, local_Nj,Ngj, local_nkx, local_nky, local_nz, Ngz, jarray, kparray,&
+                      nzgrid
   USE species, ONLY : sigma2_tau_o2
   USE prec_const, ONLY: dp
   IMPLICIT NONE
@@ -80,26 +81,26 @@ SUBROUTINE evaluate_kernels
   REAL(dp)   :: j_dp, y_, factj
 
 DO ia  = 1,local_Na
-  DO eo  = 1,2
-  DO ikx = 1,local_nkx
-  DO iky = 1,local_nky
-  DO iz  = 1,local_nz + Ngz
-    DO ij = 1, local_Nj + Ngj
-      j_int = jarray(ij)
-      j_dp  = REAL(j_int,dp)
-      y_    =  sigma2_tau_o2(ia) * kparray(iky,ikx,iz,eo)**2
-      IF(j_int .LT. 0) THEN
-        kernel(ia,ij,iky,ikx,iz,eo) = 0._dp
-      ELSE
-        factj = GAMMA(j_dp+1._dp)
-        kernel(ia,ij,iky,ikx,iz,eo) = y_**j_int*EXP(-y_)/factj
-      ENDIF
+  DO eo  = 1,nzgrid
+    DO ikx = 1,local_nkx
+      DO iky = 1,local_nky
+        DO iz  = 1,local_nz + Ngz
+          DO ij = 1, local_nj + Ngj
+            j_int = jarray(ij)
+            j_dp  = REAL(j_int,dp)
+            y_    =  sigma2_tau_o2(ia) * kparray(iky,ikx,iz,eo)**2
+            IF(j_int .LT. 0) THEN
+              kernel(ia,ij,iky,ikx,iz,eo) = 0._dp
+            ELSE
+              factj = GAMMA(j_dp+1._dp)
+              kernel(ia,ij,iky,ikx,iz,eo) = y_**j_int*EXP(-y_)/factj
+            ENDIF
+          ENDDO
+          ! IF (ijs .EQ. 1) & ! if ijs is 1, the ghost kernel has negative index
+            ! kernel(ia,ijgs,iky,ikx,iz,eo) = 0._dp
+        ENDDO
+      ENDDO
     ENDDO
-    ! IF (ijs .EQ. 1) & ! if ijs is 1, the ghost kernel has negative index
-      ! kernel(ia,ijgs,iky,ikx,iz,eo) = 0._dp
-  ENDDO
-  ENDDO
-  ENDDO
   ENDDO
   ! !! Correction term for the evaluation of the heat flux
   ! HF_phi_correction_operator(:,:,:) = &
diff --git a/src/parallel_mod.F90 b/src/parallel_mod.F90
index d90918ef..2cf09efa 100644
--- a/src/parallel_mod.F90
+++ b/src/parallel_mod.F90
@@ -276,39 +276,39 @@ CONTAINS
 
   !!!!! Gather a field in kinetic + spatial coordinates on rank 0 !!!!!
   !!!!! Gather a field in spatial coordinates on rank 0 !!!!!
-  SUBROUTINE gather_pjxyz(field_loc,field_tot,np_loc,np_tot,nj_tot,nky_loc,nky_tot,nkx_tot,nz_loc,nz_tot)
+  SUBROUTINE gather_pjxyz(field_loc,field_tot,na_tot,np_loc,np_tot,nj_tot,nky_loc,nky_tot,nkx_tot,nz_loc,nz_tot)
     IMPLICIT NONE
-    INTEGER, INTENT(IN) :: np_loc,np_tot,nj_tot,nky_loc,nky_tot,nkx_tot,nz_loc,nz_tot
-    COMPLEX(dp), DIMENSION(np_loc,nj_tot,nky_loc,nkx_tot,nz_loc), INTENT(IN)  :: field_loc
-    COMPLEX(dp), DIMENSION(np_tot,nj_tot,nky_tot,nkx_tot,nz_tot), INTENT(OUT) :: field_tot
-    COMPLEX(dp), DIMENSION(np_tot,nky_tot,nz_loc) :: buffer_pt_yt_zl ! full p,     full y, local    z
-    COMPLEX(dp), DIMENSION(np_tot,nky_tot,nz_tot) :: buffer_pt_yt_zt ! full p,     full y, full     z
-    COMPLEX(dp), DIMENSION(np_tot,nky_loc) :: buffer_pt_yl_zc     ! full p,    local y, constant z
-    COMPLEX(dp), DIMENSION(np_tot,nky_tot) :: buffer_pt_yt_zc     ! full p,     full y, constant z
-    COMPLEX(dp), DIMENSION(np_loc) :: buffer_pl_cy_zc     !local p, constant y, constant z
-    COMPLEX(dp), DIMENSION(np_tot)       :: buffer_pt_cy_zc     ! full p, constant y, constant z
+    INTEGER, INTENT(IN) :: na_tot,np_loc,np_tot,nj_tot,nky_loc,nky_tot,nkx_tot,nz_loc,nz_tot
+    COMPLEX(dp), DIMENSION(na_tot,np_loc,nj_tot,nky_loc,nkx_tot,nz_loc), INTENT(IN)  :: field_loc
+    COMPLEX(dp), DIMENSION(na_tot,np_tot,nj_tot,nky_tot,nkx_tot,nz_tot), INTENT(OUT) :: field_tot
+    COMPLEX(dp), DIMENSION(na_tot,np_tot,nky_tot,nz_loc) :: buffer_pt_yt_zl ! full p,     full y, local    z
+    COMPLEX(dp), DIMENSION(na_tot,np_tot,nky_tot,nz_tot) :: buffer_pt_yt_zt ! full p,     full y, full     z
+    COMPLEX(dp), DIMENSION(na_tot,np_tot,nky_loc) :: buffer_pt_yl_zc     ! full p,    local y, constant z
+    COMPLEX(dp), DIMENSION(na_tot,np_tot,nky_tot) :: buffer_pt_yt_zc     ! full p,     full y, constant z
+    COMPLEX(dp), DIMENSION(na_tot,np_loc)       :: buffer_pl_cy_zc     !local p, constant y, constant z
+    COMPLEX(dp), DIMENSION(na_tot,np_tot)       :: buffer_pt_cy_zc     ! full p, constant y, constant z
     INTEGER :: snd_p, snd_y, snd_z, root_p, root_z, root_ky, iy, ix, iz, ij
-    snd_p  = np_loc                ! Number of points to send along p (per z,y)
-    snd_y  = np_tot*nky_loc        ! Number of points to send along y (per z, full p)
-    snd_z  = np_tot*nky_tot*nz_loc ! Number of points to send along z (full y, full p)
+    snd_p  = na_tot*np_loc                ! Number of points to send along p (per z,y)
+    snd_y  = na_tot*np_tot*nky_loc        ! Number of points to send along y (per z, full p)
+    snd_z  = na_tot*np_tot*nky_tot*nz_loc ! Number of points to send along z (full y, full p)
     root_p = 0; root_z = 0; root_ky = 0
     j: DO ij = 1,nj_tot
       x: DO ix = 1,nkx_tot
         z: DO iz = 1,nz_loc
           y: DO iy = 1,nky_loc
             ! fill a buffer to contain a slice of p data at constant j, ky, kx and z
-            buffer_pl_cy_zc(1:np_loc) = field_loc(1:np_loc,ij,iy,ix,iz)
+            buffer_pl_cy_zc(1:na_tot,1:np_loc) = field_loc(1:na_tot,1:np_loc,ij,iy,ix,iz)
             CALL MPI_GATHERV(buffer_pl_cy_zc, snd_p,        MPI_DOUBLE_COMPLEX, &
                              buffer_pt_cy_zc, rcv_p, dsp_p, MPI_DOUBLE_COMPLEX, &
                              root_p, comm_p, ierr)
-            buffer_pt_yl_zc(1:np_tot,iy) = buffer_pt_cy_zc(1:np_tot)
+            buffer_pt_yl_zc(1:na_tot,1:np_tot,iy) = buffer_pt_cy_zc(1:na_tot,1:np_tot)
           ENDDO y
           ! send the full line on p contained by root_p
           IF(rank_p .EQ. 0) THEN
             CALL MPI_GATHERV(buffer_pt_yl_zc, snd_y,          MPI_DOUBLE_COMPLEX, &
                              buffer_pt_yt_zc, rcv_yp, dsp_yp, MPI_DOUBLE_COMPLEX, &
                              root_ky, comm_ky, ierr)
-            buffer_pt_yt_zl(1:np_tot,1:nky_tot,iz) = buffer_pt_yt_zc(1:np_tot,1:nky_tot)
+            buffer_pt_yt_zl(1:na_tot,1:np_tot,1:nky_tot,iz) = buffer_pt_yt_zc(1:na_tot,1:np_tot,1:nky_tot)
           ENDIF
         ENDDO z
         ! send the full line on y contained by root_kyas
@@ -319,7 +319,7 @@ CONTAINS
         ENDIF
         ! ID 0 (the one who ouptut) rebuild the whole array
         IF(my_id .EQ. 0) &
-          field_tot(1:np_tot,ij,1:nky_tot,ix,1:nz_tot) = buffer_pt_yt_zt(1:np_tot,1:nky_tot,1:nz_tot)
+          field_tot(1:na_tot,1:np_tot,ij,1:nky_tot,ix,1:nz_tot) = buffer_pt_yt_zt(1:na_tot,1:np_tot,1:nky_tot,1:nz_tot)
       ENDDO x
     ENDDO j
   END SUBROUTINE gather_pjxyz
diff --git a/src/processing_mod.F90 b/src/processing_mod.F90
index 001993a6..0f88cc6b 100644
--- a/src/processing_mod.F90
+++ b/src/processing_mod.F90
@@ -1,509 +1,516 @@
 MODULE processing
-  USE prec_const,  ONLY: dp, imagu, SQRT2, SQRT3
-  USE grid,        ONLY: &
-    local_na, local_np, local_nj, local_nky, local_nkx, local_nz, Ngz,Ngj,Ngp, &
-    parray,pmax,ip0, iodd, ieven,&
-    CONTAINSp0,ip1,CONTAINSp1,ip2,CONTAINSp2,ip3,CONTAINSp3,&
-    jarray,jmax,ij0, dmax,&
-    kyarray, AA_y,&
-    kxarray, AA_x,&
-    zarray, deltaz, ieven, iodd, inv_deltaz
-  USE fields,           ONLY: moments, phi, psi
-  USE array,            ONLY : kernel, nadiab_moments, &
-                               ddz_napj, ddzND_Napj, interp_napj,&
-                               dens, upar, uper, Tpar, Tper, temp
-  USE geometry,         ONLY: Jacobian, iInt_Jacobian
-  USE time_integration, ONLY: updatetlevel
-  USE calculus,         ONLY: simpson_rule_z, grad_z, grad_z2, grad_z4, interp_z
-  USE model,            ONLY: EM, CLOS, beta, HDz_h
-  USE species,          ONLY: tau,q_tau,q_o_sqrt_tau_sigma,sqrt_tau_o_sigma
-  USE basic,            ONLY: t0_process, t1_process, tc_process
-  USE parallel,         ONLY: num_procs_ky, rank_ky, comm_ky
-  USE mpi
-  implicit none
+   USE prec_const,  ONLY: dp, imagu, SQRT2, SQRT3
+   USE grid,        ONLY: &
+      local_na, local_np, local_nj, local_nky, local_nkx, local_nz, Ngz,Ngj,Ngp, &
+      parray,pmax,ip0, iodd, ieven,&
+      CONTAINSp0,ip1,CONTAINSp1,ip2,CONTAINSp2,ip3,CONTAINSp3,&
+      jarray,jmax,ij0, dmax,&
+      kyarray, AA_y,&
+      kxarray, AA_x,&
+      zarray, deltaz, ieven, iodd, inv_deltaz
+   USE fields,           ONLY: moments, phi, psi
+   USE array,            ONLY : kernel, nadiab_moments, &
+      ddz_napj, ddzND_Napj, interp_napj,&
+      dens, upar, uper, Tpar, Tper, temp
+   USE geometry,         ONLY: Jacobian, iInt_Jacobian
+   USE time_integration, ONLY: updatetlevel
+   USE calculus,         ONLY: simpson_rule_z, grad_z, grad_z2, grad_z4, interp_z
+   USE model,            ONLY: EM, CLOS, beta, HDz_h
+   USE species,          ONLY: tau,q_tau,q_o_sqrt_tau_sigma,sqrt_tau_o_sigma
+   USE basic,            ONLY: t0_process, t1_process, tc_process
+   USE parallel,         ONLY: num_procs_ky, rank_ky, comm_ky
+   USE mpi
+   implicit none
 
-  REAL(dp), PUBLIC, ALLOCATABLE, DIMENSION(:), PROTECTED :: pflux_x, gflux_x
-  REAL(dp), PUBLIC, ALLOCATABLE, DIMENSION(:), PROTECTED :: hflux_x
-  INTEGER :: ierr
-  PUBLIC :: init_process
-  PUBLIC :: compute_nadiab_moments_z_gradients_and_interp
-  PUBLIC :: compute_density, compute_upar, compute_uperp
-  PUBLIC :: compute_Tpar, compute_Tperp, compute_fluid_moments
-  PUBLIC :: compute_radial_transport
-  PUBLIC :: compute_radial_heatflux
-  PUBLIC :: compute_Napjz_spectrum
+   REAL(dp), PUBLIC, ALLOCATABLE, DIMENSION(:), PROTECTED :: pflux_x, gflux_x
+   REAL(dp), PUBLIC, ALLOCATABLE, DIMENSION(:), PROTECTED :: hflux_x
+   INTEGER :: ierr
+   PUBLIC :: init_process
+   PUBLIC :: compute_nadiab_moments_z_gradients_and_interp
+   PUBLIC :: compute_density, compute_upar, compute_uperp
+   PUBLIC :: compute_Tpar, compute_Tperp, compute_fluid_moments
+   PUBLIC :: compute_radial_transport
+   PUBLIC :: compute_radial_heatflux
+   PUBLIC :: compute_Napjz_spectrum
 CONTAINS
 
-SUBROUTINE init_process
-  USE grid,       ONLY: local_na
-  IMPLICIT NONE
-  ALLOCATE( pflux_x(local_na))
-  ALLOCATE( gflux_x(local_na))
-  ALLOCATE( hflux_x(local_na))
-END SUBROUTINE init_process
+   SUBROUTINE init_process
+      USE grid,       ONLY: local_na
+      IMPLICIT NONE
+      ALLOCATE( pflux_x(local_na))
+      ALLOCATE( gflux_x(local_na))
+      ALLOCATE( hflux_x(local_na))
+   END SUBROUTINE init_process
 
 ! 1D diagnostic to compute the average radial particle transport <n_a v_ExB_x>_xyz
-SUBROUTINE compute_radial_transport
-  IMPLICIT NONE
-  COMPLEX(dp) :: pflux_local, gflux_local, integral
-  REAL(dp)    :: buffer(2)
-  INTEGER     :: i_, root, iky, ikx, ia, iz, in
-  COMPLEX(dp), DIMENSION(local_nz+Ngz) :: integrant
-  DO ia = 1,local_na
-    pflux_local = 0._dp ! particle flux
-    gflux_local = 0._dp ! gyrocenter flux
-    integrant   = 0._dp ! auxiliary variable for z integration
-    !!---------- Gyro center flux (drift kinetic) ------------
-    ! Electrostatic part
-    IF(CONTAINSp0) THEN
-      DO iz = 1,local_nz+ngz ! we include ghost for integration
-        DO ikx = 1,local_nkx
-          DO iky = 1,local_nky
-            integrant(iz) = integrant(iz) &
-             +Jacobian(iz,ieven)*moments(ia,ip0,ij0,iky,ikx,iz,updatetlevel)&
-              *imagu*kyarray(iky)*CONJG(phi(iky,ikx,iz))
-          ENDDO
-        ENDDO
-      ENDDO
-    ENDIF
-    ! Electromagnetic part
-    IF( EM .AND. CONTAINSp1 ) THEN
-        DO iz = 1,local_nz+ngz
-          DO ikx = 1,local_nkx
-            DO iky = 1,local_nky
-              integrant(iz) = integrant(iz)&
-                -Jacobian(iz,iodd)*sqrt_tau_o_sigma(ia)*moments(ia,ip1,ij0,iky,ikx,iz,updatetlevel)&
-                 *imagu*kyarray(iky)*CONJG(psi(iky,ikx,iz))
-          ENDDO
-        ENDDO
-      ENDDO
-    ENDIF
-    ! Integrate over z
-    call simpson_rule_z(local_nz,deltaz,integrant,integral)
-    ! Get process local gyrocenter flux with a factor two to account for the negative ky modes
-    gflux_local = 2._dp*integral*iInt_Jacobian
-
-    !
-    integrant   = 0._dp ! reset auxiliary variable
-    !!---------- Particle flux (gyrokinetic) ------------
-    ! Electrostatic part
-    IF(CONTAINSp0) THEN
-      DO iz = 1,local_nz+ngz
-          DO ikx = 1,local_nkx
-            DO iky = 1,local_nky
-              DO in = 1+ngj/2, local_nj+ngj/2 ! only interior points
-                integrant(iz) = integrant(iz)+ &
-                  Jacobian(iz,ieven)*moments(ia,ip0,in,iky,ikx,iz,updatetlevel)&
-                  *imagu*kyarray(iky)*kernel(ia,in,iky,ikx,iz,ieven)*CONJG(phi(iky,ikx,iz))
-              ENDDO
+   SUBROUTINE compute_radial_transport
+      IMPLICIT NONE
+      COMPLEX(dp) :: pflux_local, gflux_local, integral
+      REAL(dp)    :: buffer(2)
+      INTEGER     :: i_, root, iky, ikx, ia, iz, in, izi
+      COMPLEX(dp), DIMENSION(local_nz) :: integrant
+      DO ia = 1,local_na
+         pflux_local = 0._dp ! particle flux
+         gflux_local = 0._dp ! gyrocenter flux
+         integrant   = 0._dp ! auxiliary variable for z integration
+         !!---------- Gyro center flux (drift kinetic) ------------
+         ! Electrostatic part
+         IF(CONTAINSp0) THEN
+            DO iz = 1,local_nz
+              izi = iz + ngz/2 !interior index for ghosted arrays
+               DO ikx = 1,local_nkx
+                  DO iky = 1,local_nky
+                     integrant(iz) = integrant(iz) &
+                        +Jacobian(izi,ieven)*moments(ia,ip0,ij0,iky,ikx,izi,updatetlevel)&
+                        *imagu*kyarray(iky)*CONJG(phi(iky,ikx,izi))
+                  ENDDO
+               ENDDO
             ENDDO
-        ENDDO
-      ENDDO
-    ENDIF
-    ! Electromagnetic part
-    IF( EM .AND. CONTAINSp1 ) THEN
-      DO iz = 1,local_nz+ngz
-        DO ikx = 1,local_nkx
-          DO iky = 1,local_nky
-            DO in = 1+ngj/2, local_nj+ngj/2 ! only interior points
-              integrant(iz) = integrant(iz) - &
-                Jacobian(iz,iodd)*sqrt_tau_o_sigma(ia)*moments(ia,ip1,in,iky,ikx,iz,updatetlevel)&
-                *imagu*kyarray(iky)*kernel(ia,in,iky,ikx,iz,iodd)*CONJG(psi(iky,ikx,iz))
+         ENDIF
+         ! Electromagnetic part
+         IF( EM .AND. CONTAINSp1 ) THEN
+            DO iz = 1,local_nz ! we take interior points only
+              izi = iz + ngz/2 !interior index for ghosted arrays
+              DO ikx = 1,local_nkx
+                  DO iky = 1,local_nky
+                     integrant(iz) = integrant(iz)&
+                        -Jacobian(izi,iodd)*sqrt_tau_o_sigma(ia)*moments(ia,ip1,ij0,iky,ikx,izi,updatetlevel)&
+                        *imagu*kyarray(iky)*CONJG(psi(iky,ikx,izi))
+                  ENDDO
+               ENDDO
             ENDDO
-          ENDDO
-        ENDDO
-      ENDDO
-    ENDIF
-    ! Integrate over z
-    call simpson_rule_z(local_nz,deltaz,integrant,integral)
-    ! Get process local particle flux with a factor two to account for the negative ky modes
-    pflux_local = 2._dp*integral*iInt_Jacobian
+         ENDIF
+         ! Integrate over z
+         call simpson_rule_z(local_nz,deltaz,integrant,integral)
+         ! Get process local gyrocenter flux with a factor two to account for the negative ky modes
+         gflux_local = 2._dp*integral*iInt_Jacobian
 
-    !!!!---------- Sum over all processes ----------
-    buffer(1) = REAL(gflux_local)
-    buffer(2) = REAL(pflux_local)
-    root = 0
-    !Gather manually among the rank_p=0 processes and perform the sum
-    gflux_x(ia) = 0
-    pflux_x(ia) = 0
-    IF (num_procs_ky .GT. 1) THEN
-        !! Everyone sends its local_sum to root = 0
-        IF (rank_ky .NE. root) THEN
-            CALL MPI_SEND(buffer, 2 , MPI_DOUBLE_PRECISION, root, 1234, comm_ky, ierr)
-        ELSE
-            ! Recieve from all the other processes
-            DO i_ = 0,num_procs_ky-1
-                IF (i_ .NE. rank_ky) &
-                    CALL MPI_RECV(buffer, 2 , MPI_DOUBLE_PRECISION, i_, 1234, comm_ky, MPI_STATUS_IGNORE, ierr)
-                    gflux_x(ia) = gflux_x(ia) + buffer(1)
-                    pflux_x(ia) = pflux_x(ia) + buffer(2)
+         !
+         integrant   = 0._dp ! reset auxiliary variable
+         !!---------- Particle flux (gyrokinetic) ------------
+         ! Electrostatic part
+         IF(CONTAINSp0) THEN
+            DO iz = 1,local_nz ! we take interior points only
+              izi = iz + ngz/2 !interior index for ghosted arrays
+               DO ikx = 1,local_nkx
+                  DO iky = 1,local_nky
+                     DO in = 1+ngj/2, local_nj+ngj/2 ! only interior points
+                        integrant(iz) = integrant(iz)+ &
+                           Jacobian(izi,ieven)*moments(ia,ip0,in,iky,ikx,izi,updatetlevel)&
+                           *imagu*kyarray(iky)*kernel(ia,in,iky,ikx,izi,ieven)*CONJG(phi(iky,ikx,izi))
+                     ENDDO
+                  ENDDO
+               ENDDO
             ENDDO
-        ENDIF
-    ELSE
-      gflux_x(ia) = gflux_local
-      pflux_x(ia) = pflux_local
-    ENDIF
-  ENDDO
-    ! if(my_id .eq. 0) write(*,*) 'pflux_ri = ',pflux_ri
-END SUBROUTINE compute_radial_transport
+         ENDIF
+         ! Electromagnetic part
+         IF( EM .AND. CONTAINSp1 ) THEN
+            DO iz = 1,local_nz ! we take interior points only
+              izi = iz + ngz/2 !interior index for ghosted arrays
+              DO ikx = 1,local_nkx
+                  DO iky = 1,local_nky
+                     DO in = 1+ngj/2, local_nj+ngj/2 ! only interior points
+                        integrant(iz) = integrant(iz) - &
+                           Jacobian(izi,iodd)*sqrt_tau_o_sigma(ia)*moments(ia,ip1,in,iky,ikx,izi,updatetlevel)&
+                           *imagu*kyarray(iky)*kernel(ia,in,iky,ikx,izi,iodd)*CONJG(psi(iky,ikx,izi))
+                     ENDDO
+                  ENDDO
+               ENDDO
+            ENDDO
+         ENDIF
+         ! Integrate over z
+         call simpson_rule_z(local_nz,deltaz,integrant,integral)
+         ! Get process local particle flux with a factor two to account for the negative ky modes
+         pflux_local = 2._dp*integral*iInt_Jacobian
 
-! 1D diagnostic to compute the average radial particle transport <T_i v_ExB_x>_xyz
-SUBROUTINE compute_radial_heatflux
-  IMPLICIT NONE
-  COMPLEX(dp) :: hflux_local, integral
-  REAL(dp)    :: buffer(2), n_dp
-  INTEGER     :: i_, root, in, ia, iky, ikx, iz
-  COMPLEX(dp), DIMENSION(local_nz+ngz) :: integrant        ! charge density q_a n_a
-  DO ia = 1,local_na
-  hflux_local = 0._dp ! heat flux
-  integrant   = 0._dp ! z integration auxiliary variable
-  !!----------------ELECTROSTATIC CONTRIBUTION---------------------------
-  IF(CONTAINSp0 .AND. CONTAINSp2) THEN
-    ! Loop to compute gamma_kx = sum_ky sum_j -i k_z Kernel_j Na00 * phi
-    DO iz  = 1,local_nz+ngz
-    DO ikx = 1,local_nkx
-    DO iky = 1,local_nky
-      DO in = 1+ngj/2, local_nj+ngj/2 ! only interior points
-        n_dp = jarray(in)
-        integrant(iz) = integrant(iz) &
-        +Jacobian(iz,ieven)*tau(ia)*imagu*kyarray(iky)*CONJG(phi(iky,ikx,iz))&
-         *kernel(ia,in,iky,ikx,iz,ieven)*(&
-                       0.5_dp*SQRT2*moments(ia,ip2,in  ,iky,ikx,iz,updatetlevel)&
-             +(2._dp*n_dp + 1.5_dp)*moments(ia,ip0,in  ,iky,ikx,iz,updatetlevel)&
-                      -(n_dp+1._dp)*moments(ia,ip0,in+1,iky,ikx,iz,updatetlevel)&
-                              -n_dp*moments(ia,ip0,in-1,iky,ikx,iz,updatetlevel))
-      ENDDO
-    ENDDO
-    ENDDO
-    ENDDO
-   ENDIF
-  IF(EM .AND. CONTAINSp1 .AND. CONTAINSp3) THEN
-    !!----------------ELECTROMAGNETIC CONTRIBUTION--------------------
-    DO iz  = 1,local_nz+ngz
-    DO ikx = 1,local_nkx
-    DO iky = 1,local_nky
-      DO in = 1+ngj/2, local_nj+ngj/2 ! only interior points
-        n_dp = jarray(in)
-        integrant(iz) = integrant(iz) &
-         +Jacobian(iz,iodd)*tau(ia)*sqrt_tau_o_sigma(ia)*imagu*kyarray(iky)*CONJG(psi(iky,ikx,iz))&
-           *kernel(ia,in,iky,ikx,iz,iodd)*(&
-                   0.5_dp*SQRT2*SQRT3*moments(ia,ip3,in  ,iky,ikx,iz,updatetlevel)&
-                              +1.5_dp*moments(ia,ip1,in  ,iky,ikx,iz,updatetlevel)&
-                  +(2._dp*n_dp+1._dp)*moments(ia,ip1,in  ,iky,ikx,iz,updatetlevel)&
-                        -(n_dp+1._dp)*moments(ia,ip1,in+1,iky,ikx,iz,updatetlevel)&
-                                -n_dp*moments(ia,ip1,in-1,iky,ikx,iz,updatetlevel))
+         !!!!---------- Sum over all processes ----------
+         buffer(1) = REAL(gflux_local,dp)
+         buffer(2) = REAL(pflux_local,dp)
+         root = 0
+         !Gather manually among the rank_p=0 processes and perform the sum
+         gflux_x(ia) = 0
+         pflux_x(ia) = 0
+         IF (num_procs_ky .GT. 1) THEN
+            !! Everyone sends its local_sum to root = 0
+            IF (rank_ky .NE. root) THEN
+               CALL MPI_SEND(buffer, 2 , MPI_DOUBLE_PRECISION, root, 1234, comm_ky, ierr)
+            ELSE
+               ! Recieve from all the other processes
+               DO i_ = 0,num_procs_ky-1
+                  IF (i_ .NE. rank_ky) &
+                     CALL MPI_RECV(buffer, 2 , MPI_DOUBLE_PRECISION, i_, 1234, comm_ky, MPI_STATUS_IGNORE, ierr)
+                  gflux_x(ia) = gflux_x(ia) + buffer(1)
+                  pflux_x(ia) = pflux_x(ia) + buffer(2)
+               ENDDO
+            ENDIF
+         ELSE
+            gflux_x(ia) = gflux_local
+            pflux_x(ia) = pflux_local
+         ENDIF
       ENDDO
-    ENDDO
-    ENDDO
-    ENDDO
-  ENDIF
-  ! Add polarisation contribution
-  ! integrant(iz) = integrant(iz) + tau_i*imagu*ky_&
-  ! *CONJG(phi(iky,ikx,iz))*phi(iky,ikx,iz) * HF_phi_correction_operator(iky,ikx,iz)
-  ! Integrate over z
-  call simpson_rule_z(local_nz,deltaz,integrant,integral)
-  ! Double it for taking into account the other half plane
-  hflux_local = 2._dp*integral*iInt_Jacobian
-  buffer(2)   = REAL(hflux_local)
-  root = 0
-  !Gather manually among the rank_p=0 processes and perform the sum
-  hflux_x(ia) = 0
-  IF (num_procs_ky .GT. 1) THEN
-      !! Everyone sends its local_sum to root = 0
-      IF (rank_ky .NE. root) THEN
-          CALL MPI_SEND(buffer, 2 , MPI_DOUBLE_PRECISION, root, 1234, comm_ky, ierr)
-      ELSE
-          ! Recieve from all the other processes
-          DO i_ = 0,num_procs_ky-1
-              IF (i_ .NE. rank_ky) &
-                  CALL MPI_RECV(buffer, 2 , MPI_DOUBLE_PRECISION, i_, 1234, comm_ky, MPI_STATUS_IGNORE, ierr)
+      ! if(my_id .eq. 0) write(*,*) 'pflux_ri = ',pflux_ri
+   END SUBROUTINE compute_radial_transport
+
+! 1D diagnostic to compute the average radial particle transport <T_i v_ExB_x>_xyz
+   SUBROUTINE compute_radial_heatflux
+      IMPLICIT NONE
+      COMPLEX(dp) :: hflux_local, integral
+      REAL(dp)    :: buffer(2), n_dp
+      INTEGER     :: i_, root, in, ia, iky, ikx, iz, izi
+      COMPLEX(dp), DIMENSION(local_nz) :: integrant        ! charge density q_a n_a
+      DO ia = 1,local_na
+         hflux_local = 0._dp ! heat flux
+         integrant   = 0._dp ! z integration auxiliary variable
+         !!----------------ELECTROSTATIC CONTRIBUTION---------------------------
+         IF(CONTAINSp0 .AND. CONTAINSp2) THEN
+            ! Loop to compute gamma_kx = sum_ky sum_j -i k_z Kernel_j Na00 * phi
+            DO iz = 1,local_nz ! we take interior points only
+              izi = iz + ngz/2 !interior index for ghosted arrays
+              DO ikx = 1,local_nkx
+                  DO iky = 1,local_nky
+                     DO in = 1+ngj/2, local_nj+ngj/2 ! only interior points
+                        n_dp = jarray(in)
+                        integrant(iz) = integrant(iz) &
+                           +Jacobian(izi,ieven)*tau(ia)*imagu*kyarray(iky)*CONJG(phi(iky,ikx,izi))&
+                           *kernel(ia,in,iky,ikx,izi,ieven)*(&
+                                     0.5_dp*SQRT2*moments(ia,ip2,in  ,iky,ikx,izi,updatetlevel)&
+                           +(2._dp*n_dp + 1.5_dp)*moments(ia,ip0,in  ,iky,ikx,izi,updatetlevel)&
+                                    -(n_dp+1._dp)*moments(ia,ip0,in+1,iky,ikx,izi,updatetlevel)&
+                                            -n_dp*moments(ia,ip0,in-1,iky,ikx,izi,updatetlevel))
+                     ENDDO
+                  ENDDO
+               ENDDO
+            ENDDO
+         ENDIF
+         IF(EM .AND. CONTAINSp1 .AND. CONTAINSp3) THEN
+            !!----------------ELECTROMAGNETIC CONTRIBUTION--------------------
+            DO iz  = 1,local_nz
+              izi = iz + ngz/2 !interior index for ghosted arrays
+               DO ikx = 1,local_nkx
+                  DO iky = 1,local_nky
+                     DO in = 1+ngj/2, local_nj+ngj/2 ! only interior points
+                        n_dp = jarray(in)
+                        integrant(iz) = integrant(iz) &
+                           +Jacobian(izi,iodd)*tau(ia)*sqrt_tau_o_sigma(ia)*imagu*kyarray(iky)*CONJG(psi(iky,ikx,izi))&
+                           *kernel(ia,in,iky,ikx,izi,iodd)*(&
+                           0.5_dp*SQRT2*SQRT3*moments(ia,ip3,in  ,iky,ikx,izi,updatetlevel)&
+                                      +1.5_dp*moments(ia,ip1,in  ,iky,ikx,izi,updatetlevel)&
+                          +(2._dp*n_dp+1._dp)*moments(ia,ip1,in  ,iky,ikx,izi,updatetlevel)&
+                                -(n_dp+1._dp)*moments(ia,ip1,in+1,iky,ikx,izi,updatetlevel)&
+                                        -n_dp*moments(ia,ip1,in-1,iky,ikx,izi,updatetlevel))
+                     ENDDO
+                  ENDDO
+               ENDDO
+            ENDDO
+         ENDIF
+         ! Add polarisation contribution
+         ! integrant(iz) = integrant(iz) + tau_i*imagu*ky_&
+         ! *CONJG(phi(iky,ikx,iz))*phi(iky,ikx,iz) * HF_phi_correction_operator(iky,ikx,iz)
+         ! Integrate over z
+         call simpson_rule_z(local_nz,deltaz,integrant,integral)
+         ! Double it for taking into account the other half plane
+         hflux_local = 2._dp*integral*iInt_Jacobian
+         buffer(2)   = REAL(hflux_local,dp)
+         root = 0
+         !Gather manually among the rank_p=0 processes and perform the sum
+         hflux_x(ia) = 0
+         IF (num_procs_ky .GT. 1) THEN
+            !! Everyone sends its local_sum to root = 0
+            IF (rank_ky .NE. root) THEN
+               CALL MPI_SEND(buffer, 2 , MPI_DOUBLE_PRECISION, root, 1234, comm_ky, ierr)
+            ELSE
+               ! Recieve from all the other processes
+               DO i_ = 0,num_procs_ky-1
+                  IF (i_ .NE. rank_ky) &
+                     CALL MPI_RECV(buffer, 2 , MPI_DOUBLE_PRECISION, i_, 1234, comm_ky, MPI_STATUS_IGNORE, ierr)
                   hflux_x(ia) = hflux_x(ia) + buffer(2)
-          ENDDO
-      ENDIF
-  ELSE
-    hflux_x(ia) = hflux_local
-  ENDIF
-  ENDDO
-END SUBROUTINE compute_radial_heatflux
+               ENDDO
+            ENDIF
+         ELSE
+            hflux_x(ia) = hflux_local
+         ENDIF
+      ENDDO
+   END SUBROUTINE compute_radial_heatflux
 
-SUBROUTINE compute_nadiab_moments_z_gradients_and_interp
-  ! evaluate the non-adiabatique ion moments
-  !
-  ! n_{pi} = N^{pj} + kernel(j) /tau_i phi delta_p0
-  !
-  IMPLICIT NONE
-  INTEGER :: eo, p_int, j_int, ia,ip,ij,iky,ikx,iz
-  COMPLEX(dp), DIMENSION(local_nz+ngz) :: f_in
-  COMPLEX(dp), DIMENSION(local_nz)     :: f_out
-  CALL cpu_time(t0_process)
+   SUBROUTINE compute_nadiab_moments_z_gradients_and_interp
+      ! evaluate the non-adiabatique ion moments
+      !
+      ! n_{pi} = N^{pj} + kernel(j) /tau_i phi delta_p0
+      !
+      IMPLICIT NONE
+      INTEGER :: eo, p_int, j_int, ia,ip,ij,iky,ikx,iz
+      COMPLEX(dp), DIMENSION(local_nz+ngz) :: f_in
+      COMPLEX(dp), DIMENSION(local_nz)     :: f_out
+      CALL cpu_time(t0_process)
 
-  !non adiab moments
-  DO iz=1,local_nz+ngz
-    DO ikx=1,local_nkx
-      DO iky=1,local_nky
-        DO ij=1,local_nj+ngj
-          DO ip=1,local_np+ngp
-            DO ia = 1,local_na
-              IF(parray(ip) .EQ. 0) THEN
-                nadiab_moments(ia,ip,ij,iky,ikx,iz) = moments(ia,ip,ij,iky,ikx,iz,updatetlevel) &
-                                  + q_tau(ia)*kernel(ia,ij,iky,ikx,iz,ieven)*phi(iky,ikx,iz)
-              ELSEIF( (parray(ip) .EQ. 1) .AND. (beta .GT. 0) ) THEN
-                nadiab_moments(ia,ip,ij,iky,ikx,iz) = moments(ia,ip,ij,iky,ikx,iz,updatetlevel) &
-                                  - q_o_sqrt_tau_sigma(ia)*kernel(ia,ij,iky,ikx,iz,ieven)*psi(iky,ikx,iz)
-              ELSE
-                nadiab_moments(ia,ip,ij,iky,ikx,iz) = moments(ia,ip,ij,iky,ikx,iz,updatetlevel)
-              ENDIF
+      !non adiab moments
+      DO iz=1,local_nz+ngz
+         DO ikx=1,local_nkx
+            DO iky=1,local_nky
+               DO ij=1,local_nj+ngj
+                  DO ip=1,local_np+ngp
+                     DO ia = 1,local_na
+                        IF(parray(ip) .EQ. 0) THEN
+                           nadiab_moments(ia,ip,ij,iky,ikx,iz) = moments(ia,ip,ij,iky,ikx,iz,updatetlevel) &
+                              + q_tau(ia)*kernel(ia,ij,iky,ikx,iz,ieven)*phi(iky,ikx,iz)
+                        ELSEIF( (parray(ip) .EQ. 1) .AND. (beta .GT. 0) ) THEN
+                           nadiab_moments(ia,ip,ij,iky,ikx,iz) = moments(ia,ip,ij,iky,ikx,iz,updatetlevel) &
+                              - q_o_sqrt_tau_sigma(ia)*kernel(ia,ij,iky,ikx,iz,ieven)*psi(iky,ikx,iz)
+                        ELSE
+                           nadiab_moments(ia,ip,ij,iky,ikx,iz) = moments(ia,ip,ij,iky,ikx,iz,updatetlevel)
+                        ENDIF
+                     ENDDO
+                  ENDDO
+               ENDDO
             ENDDO
-          ENDDO
-        ENDDO
+         ENDDO
       ENDDO
-    ENDDO
-  ENDDO
 
-  !! Ensure to kill the moments too high if closue option is set to 1
-  IF(CLOS .EQ. 1) THEN
-    DO ij=1,local_nj+ngj
-      j_int = jarray(ij)
-      DO ip=1,local_np+ngp
-        p_int = parray(ip)
-        DO ia = 1,local_na
-          IF(p_int+2*j_int .GT. dmax) &
-          nadiab_moments(ia,ip,ij,:,:,:) = 0._dp
-        ENDDO
-      ENDDO
-    ENDDO
-  ENDIF
+      !! Ensure to kill the moments too high if closue option is set to 1
+      IF(CLOS .EQ. 1) THEN
+         DO ij=1,local_nj+ngj
+            j_int = jarray(ij)
+            DO ip=1,local_np+ngp
+               p_int = parray(ip)
+               DO ia = 1,local_na
+                  IF(p_int+2*j_int .GT. dmax) &
+                     nadiab_moments(ia,ip,ij,:,:,:) = 0._dp
+               ENDDO
+            ENDDO
+         ENDDO
+      ENDIF
 
-   !------------- INTERP AND GRADIENTS ALONG Z ----------------------------------
-    DO ikx = 1,local_nkx
-      DO iky = 1,local_nky
-        DO ij = 1,local_nj+ngj
-          DO ip = 1,local_np+ngp
-            DO ia = 1,local_na
-              p_int = parray(ip)
-              eo    = MODULO(p_int,2)+1 ! Indicates if we are on even or odd z grid
-              ! Compute z first derivative
-              f_in = nadiab_moments(ia,ip,ij,iky,ikx,:)
-              CALL   grad_z(eo,local_nz,ngz,inv_deltaz,f_in,f_out)
-              ddz_napj(ia,ip,ij,iky,ikx,:) = f_out
-              ! Parallel numerical diffusion
-              IF (HDz_h) THEN
-                f_in = nadiab_moments(ia,ip,ij,iky,ikx,:)
-                CALL  grad_z4(local_nz,ngz,inv_deltaz,f_in,f_out)
-                ddzND_Napj(ia,ip,ij,iky,ikx,:) = f_out
-              ELSE
-                f_in = moments(ia,ip,ij,iky,ikx,:,updatetlevel)
-                CALL  grad_z4(local_nz,ngz,inv_deltaz,f_in,f_out)
-                ddzND_Napj(ia,ip,ij,iky,ikx,:) = f_out
-              ENDIF
-              ! Compute even odd grids interpolation
-              f_in = nadiab_moments(ia,ip,ij,iky,ikx,1:local_nz+ngz)
-              CALL interp_z(eo,local_nz,ngz,f_in,f_out)
-              interp_napj(ia,ip,ij,iky,ikx,1:local_nz) = f_out
+      !------------- INTERP AND GRADIENTS ALONG Z ----------------------------------
+      DO ikx = 1,local_nkx
+         DO iky = 1,local_nky
+            DO ij = 1,local_nj+ngj
+               DO ip = 1,local_np+ngp
+                  DO ia = 1,local_na
+                     p_int = parray(ip)
+                     eo    = MODULO(p_int,2)+1 ! Indicates if we are on even or odd z grid
+                     ! Compute z first derivative
+                     f_in = nadiab_moments(ia,ip,ij,iky,ikx,:)
+                     CALL   grad_z(eo,local_nz,ngz,inv_deltaz,f_in,f_out)
+                     ddz_napj(ia,ip,ij,iky,ikx,:) = f_out
+                     ! Parallel numerical diffusion
+                     IF (HDz_h) THEN
+                        f_in = nadiab_moments(ia,ip,ij,iky,ikx,:)
+                        CALL  grad_z4(local_nz,ngz,inv_deltaz,f_in,f_out)
+                        ddzND_Napj(ia,ip,ij,iky,ikx,:) = f_out
+                     ELSE
+                        f_in = moments(ia,ip,ij,iky,ikx,:,updatetlevel)
+                        CALL  grad_z4(local_nz,ngz,inv_deltaz,f_in,f_out)
+                        ddzND_Napj(ia,ip,ij,iky,ikx,:) = f_out
+                     ENDIF
+                     ! Compute even odd grids interpolation
+                     f_in = nadiab_moments(ia,ip,ij,iky,ikx,1:local_nz+ngz)
+                     CALL interp_z(eo,local_nz,ngz,f_in,f_out)
+                     interp_napj(ia,ip,ij,iky,ikx,1:local_nz) = f_out
+                  ENDDO
+               ENDDO
             ENDDO
-          ENDDO
-        ENDDO
+         ENDDO
       ENDDO
-    ENDDO
 
-    ! Phi parallel gradient (not implemented fully, should be negligible)
-    ! DO ikx = 1,local_nkx
-    !   DO iky = 1,local_nky
-    !     CALL grad_z(0,phi(iky,ikx,1:local_nz+ngz), ddz_phi(iky,ikx,1:local_nz))
-    !   ENDDO
-    ! ENDDO
+      ! Phi parallel gradient (not implemented fully, should be negligible)
+      ! DO ikx = 1,local_nkx
+      !   DO iky = 1,local_nky
+      !     CALL grad_z(0,phi(iky,ikx,1:local_nz+ngz), ddz_phi(iky,ikx,1:local_nz))
+      !   ENDDO
+      ! ENDDO
 
-  ! Execution time end
-  CALL cpu_time(t1_process)
-  tc_process = tc_process + (t1_process - t0_process)
-END SUBROUTINE compute_nadiab_moments_z_gradients_and_interp
+      ! Execution time end
+      CALL cpu_time(t1_process)
+      tc_process = tc_process + (t1_process - t0_process)
+   END SUBROUTINE compute_nadiab_moments_z_gradients_and_interp
 
-SUBROUTINE compute_Napjz_spectrum
-  USE fields, ONLY : moments
-  USE array,  ONLY : Napjz
-  USE time_integration, ONLY : updatetlevel
-  IMPLICIT NONE
-  REAL(dp), DIMENSION(local_np,local_nj,local_nz) :: local_sum,global_sum, buffer
-  INTEGER  :: i_, root, count, ia, ip, ij, iky, ikx, iz
-  root = 0
-  DO ia=1,local_na
-    ! z-moment spectrum
-    ! build local sum
-    local_sum = 0._dp
-    DO iz = 1,local_nz
-      DO ikx = 1,local_nkx
-        DO iky = 1,local_nky
-          DO ij = 1,local_nj
-            DO ip = 1,local_np
-              local_sum(ip,ij,iz)  = local_sum(ip,ij,iz)  + &
-              (moments(ia,ip+Ngp/2,ij+Ngj/2,iky,ikx,iz+Ngz/2,updatetlevel) &
-              * CONJG(moments(ia,ip+Ngp/2,ij+Ngj/2,iky,ikx,iz+Ngz/2,updatetlevel)))
+   SUBROUTINE compute_Napjz_spectrum
+      USE fields, ONLY : moments
+      USE array,  ONLY : Napjz
+      USE time_integration, ONLY : updatetlevel
+      IMPLICIT NONE
+      REAL(dp), DIMENSION(local_np,local_nj,local_nz) :: local_sum,global_sum, buffer
+      INTEGER  :: i_, root, count, ia, ip, ij, iky, ikx, iz
+      root = 0
+      DO ia=1,local_na
+         ! z-moment spectrum
+         ! build local sum
+         local_sum = 0._dp
+         DO iz = 1,local_nz
+            DO ikx = 1,local_nkx
+               DO iky = 1,local_nky
+                  DO ij = 1,local_nj
+                     DO ip = 1,local_np
+                        local_sum(ip,ij,iz)  = local_sum(ip,ij,iz)  + &
+                           (moments(ia,ip+Ngp/2,ij+Ngj/2,iky,ikx,iz+Ngz/2,updatetlevel) &
+                           * CONJG(moments(ia,ip+Ngp/2,ij+Ngj/2,iky,ikx,iz+Ngz/2,updatetlevel)))
+                     ENDDO
+                  ENDDO
+               ENDDO
             ENDDO
-          ENDDO
-        ENDDO
+         ENDDO
+         ! sum reduction
+         buffer     = local_sum
+         global_sum = 0._dp
+         count = local_np*local_nj*local_nz
+         IF (num_procs_ky .GT. 1) THEN
+            !! Everyone sends its local_sum to root = 0
+            IF (rank_ky .NE. root) THEN
+               CALL MPI_SEND(buffer, count , MPI_DOUBLE_PRECISION, root, 5678, comm_ky, ierr)
+            ELSE
+               ! Recieve from all the other processes
+               DO i_ = 0,num_procs_ky-1
+                  IF (i_ .NE. rank_ky) &
+                     CALL MPI_RECV(buffer, count , MPI_DOUBLE_PRECISION, i_, 5678, comm_ky, MPI_STATUS_IGNORE, ierr)
+                  global_sum = global_sum + buffer
+               ENDDO
+            ENDIF
+         ELSE
+            global_sum = local_sum
+         ENDIF
+         Napjz(ia,:,:,:) = global_sum
       ENDDO
-    ENDDO
-    ! sum reduction
-    buffer     = local_sum
-    global_sum = 0._dp
-    count = local_np*local_nj*local_nz
-    IF (num_procs_ky .GT. 1) THEN
-        !! Everyone sends its local_sum to root = 0
-        IF (rank_ky .NE. root) THEN
-            CALL MPI_SEND(buffer, count , MPI_DOUBLE_PRECISION, root, 5678, comm_ky, ierr)
-        ELSE
-            ! Recieve from all the other processes
-            DO i_ = 0,num_procs_ky-1
-                IF (i_ .NE. rank_ky) &
-                    CALL MPI_RECV(buffer, count , MPI_DOUBLE_PRECISION, i_, 5678, comm_ky, MPI_STATUS_IGNORE, ierr)
-                    global_sum = global_sum + buffer
-            ENDDO
-        ENDIF
-    ELSE
-      global_sum = local_sum
-    ENDIF
-    Napjz(ia,:,:,:) = global_sum
-  ENDDO
-END SUBROUTINE compute_Napjz_spectrum
+   END SUBROUTINE compute_Napjz_spectrum
 
 !_____________________________________________________________________________!
 !!!!! FLUID MOMENTS COMPUTATIONS !!!!!
 ! Compute the 2D particle density for electron and ions (sum over Laguerre)
-SUBROUTINE compute_density
-  IMPLICIT NONE
-  COMPLEX(dp) :: dens_
-  INTEGER :: ia, iz, iky, ikx, ij
-  DO ia=1,local_na
-    IF ( CONTAINSp0 ) THEN
-      ! Loop to compute dens_i = sum_j kernel_j Ni0j at each k
-      DO iz = 1,local_nz
-        DO iky = 1,local_nky
-          DO ikx = 1,local_nkx
-            dens_ = 0._dp
-            DO ij = 1, local_nj
-                dens_ = dens_ + kernel(ia,ij+ngj/2,iky,ikx,iz+ngz/2,ieven) * moments(ia,ip0,ij+ngj/2,iky,ikx,iz+ngz/2,updatetlevel)
+   SUBROUTINE compute_density
+      IMPLICIT NONE
+      COMPLEX(dp) :: dens_
+      INTEGER :: ia, iz, iky, ikx, ij
+      DO ia=1,local_na
+         IF ( CONTAINSp0 ) THEN
+            ! Loop to compute dens_i = sum_j kernel_j Ni0j at each k
+            DO iz = 1,local_nz
+               DO iky = 1,local_nky
+                  DO ikx = 1,local_nkx
+                     dens_ = 0._dp
+                     DO ij = 1, local_nj
+                        dens_ = dens_ + kernel(ia,ij+ngj/2,iky,ikx,iz+ngz/2,ieven) * moments(ia,ip0,ij+ngj/2,iky,ikx,iz+ngz/2,updatetlevel)
+                     ENDDO
+                     dens(ia,iky,ikx,iz) = dens_
+                  ENDDO
+               ENDDO
             ENDDO
-            dens(ia,iky,ikx,iz) = dens_
-          ENDDO
-        ENDDO
+         ENDIF
       ENDDO
-    ENDIF
-  ENDDO
-END SUBROUTINE compute_density
+   END SUBROUTINE compute_density
 
 ! Compute the 2D particle fluid perp velocity for electron and ions (sum over Laguerre)
-SUBROUTINE compute_uperp
-  IMPLICIT NONE
-  COMPLEX(dp) :: uperp_
-  INTEGER :: ia, iz, iky, ikx, ij
-  DO ia=1,local_na
-    IF ( CONTAINSp0 ) THEN
-        DO iz = 1,local_nz
-          DO iky = 1,local_nky
-            DO ikx = 1,local_nkx
-              uperp_ = 0._dp
-              DO ij = 1, local_nj
-                uperp_ = uperp_ + kernel(ia,ij+ngj/2,iky,ikx,iz+ngz/2,ieven) *&
-                 0.5_dp*(moments(ia,ip0,ij+ngj/2,iky,ikx,iz+ngz/2,updatetlevel) - moments(ia,ip0,ij-1+ngj/2,iky,ikx,iz+ngz/2,updatetlevel))
+   SUBROUTINE compute_uperp
+      IMPLICIT NONE
+      COMPLEX(dp) :: uperp_
+      INTEGER :: ia, iz, iky, ikx, ij
+      DO ia=1,local_na
+         IF ( CONTAINSp0 ) THEN
+            DO iz = 1,local_nz
+               DO iky = 1,local_nky
+                  DO ikx = 1,local_nkx
+                     uperp_ = 0._dp
+                     DO ij = 1, local_nj
+                        uperp_ = uperp_ + kernel(ia,ij+ngj/2,iky,ikx,iz+ngz/2,ieven) *&
+                           0.5_dp*(moments(ia,ip0,ij+ngj/2,iky,ikx,iz+ngz/2,updatetlevel)&
+                                  -moments(ia,ip0,ij-1+ngj/2,iky,ikx,iz+ngz/2,updatetlevel))
+                     ENDDO
+                     uper(ia,iky,ikx,iz) = uperp_
+                  ENDDO
                ENDDO
-              uper(ia,iky,ikx,iz) = uperp_
             ENDDO
-          ENDDO
-        ENDDO
-    ENDIF
-  ENDDO
-END SUBROUTINE compute_uperp
+         ENDIF
+      ENDDO
+   END SUBROUTINE compute_uperp
 
 ! Compute the 2D particle fluid par velocity for electron and ions (sum over Laguerre)
-SUBROUTINE compute_upar
-  IMPLICIT NONE
-  INTEGER :: ia, iz, iky, ikx, ij
-  COMPLEX(dp) :: upar_
-  DO ia=1,local_na
-    IF ( CONTAINSp1 ) THEN
-      DO iz = 1,local_nz
-        DO iky = 1,local_nky
-          DO ikx = 1,local_nkx
-            upar_ = 0._dp
-            DO ij = 1, local_nj
-              upar_ = upar_ + kernel(ia,ij+ngj/2,iky,ikx,iz+ngz/2,iodd)*moments(ia,ip1,ij+ngj/2,iky,ikx,iz+ngz/2,updatetlevel)
-             ENDDO
-            upar(ia,iky,ikx,iz) = upar_
-          ENDDO
-        ENDDO
+   SUBROUTINE compute_upar
+      IMPLICIT NONE
+      INTEGER :: ia, iz, iky, ikx, ij
+      COMPLEX(dp) :: upar_
+      DO ia=1,local_na
+         IF ( CONTAINSp1 ) THEN
+            DO iz = 1,local_nz
+               DO iky = 1,local_nky
+                  DO ikx = 1,local_nkx
+                     upar_ = 0._dp
+                     DO ij = 1, local_nj
+                        upar_ = upar_ + kernel(ia,ij+ngj/2,iky,ikx,iz+ngz/2,iodd)*moments(ia,ip1,ij+ngj/2,iky,ikx,iz+ngz/2,updatetlevel)
+                     ENDDO
+                     upar(ia,iky,ikx,iz) = upar_
+                  ENDDO
+               ENDDO
+            ENDDO
+         ENDIF
       ENDDO
-    ENDIF
-  ENDDO
-END SUBROUTINE compute_upar
+   END SUBROUTINE compute_upar
 
 ! Compute the 2D particle temperature for electron and ions (sum over Laguerre)
-SUBROUTINE compute_tperp
-  USE time_integration, ONLY : updatetlevel
-  IMPLICIT NONE
-  REAL(dp)    :: j_dp
-  COMPLEX(dp) :: Tperp_
-  INTEGER     :: ia, iz, iky, ikx, ij
-  DO ia=1,local_na
-    IF ( CONTAINSp0 .AND. CONTAINSp2 ) THEN
-        ! Loop to compute T = 1/3*(Tpar + 2Tperp)
-        DO iz = 1,local_nz
-          DO iky = 1,local_nky
-            DO ikx = 1,local_nkx
-              Tperp_ = 0._dp
-              DO ij = 1, local_nj
-                j_dp = REAL(ij-1,dp)
-                Tperp_ = Tperp_ + kernel(ia,ij,iky,ikx,iz,ieven)*&
-                    ((2_dp*j_dp+1)*moments(ia,ip0,ij  +ngj/2,iky,ikx,iz+ngz/2,updatetlevel)&
-                    -j_dp         *moments(ia,ip0,ij-1+ngj/2,iky,ikx,iz+ngz/2,updatetlevel)&
-                    -j_dp+1       *moments(ia,ip0,ij+1+ngj/2,iky,ikx,iz+ngz/2,updatetlevel))
-              ENDDO
-              Tper(ia,iky,ikx,iz) = Tperp_
+   SUBROUTINE compute_tperp
+      USE time_integration, ONLY : updatetlevel
+      IMPLICIT NONE
+      REAL(dp)    :: j_dp
+      COMPLEX(dp) :: Tperp_
+      INTEGER     :: ia, iz, iky, ikx, ij
+      DO ia=1,local_na
+         IF ( CONTAINSp0 .AND. CONTAINSp2 ) THEN
+            ! Loop to compute T = 1/3*(Tpar + 2Tperp)
+            DO iz = 1,local_nz
+               DO iky = 1,local_nky
+                  DO ikx = 1,local_nkx
+                     Tperp_ = 0._dp
+                     DO ij = 1, local_nj
+                        j_dp = jarray(ij+ngj/2)
+                        Tperp_ = Tperp_ + kernel(ia,ij+ngj/2,iky,ikx,iz+ngz/2,ieven)*&
+                           ((2_dp*j_dp+1)*moments(ia,ip0,ij  +ngj/2,iky,ikx,iz+ngz/2,updatetlevel)&
+                                    -j_dp*moments(ia,ip0,ij-1+ngj/2,iky,ikx,iz+ngz/2,updatetlevel)&
+                                -(j_dp+1)*moments(ia,ip0,ij+1+ngj/2,iky,ikx,iz+ngz/2,updatetlevel))
+                     ENDDO
+                     Tper(ia,iky,ikx,iz) = Tperp_
+                  ENDDO
+               ENDDO
             ENDDO
-          ENDDO
-        ENDDO
-    ENDIF
-  ENDDO
-END SUBROUTINE compute_Tperp
+         ENDIF
+      ENDDO
+   END SUBROUTINE compute_Tperp
 
 ! Compute the 2D particle temperature for electron and ions (sum over Laguerre)
-SUBROUTINE compute_Tpar
-  USE time_integration, ONLY : updatetlevel
-  IMPLICIT NONE
-  REAL(dp)    :: j_dp
-  COMPLEX(dp) :: Tpar_
-  INTEGER     :: ia, iz, iky, ikx, ij
+   SUBROUTINE compute_Tpar
+      USE time_integration, ONLY : updatetlevel
+      IMPLICIT NONE
+      REAL(dp)    :: j_dp
+      COMPLEX(dp) :: Tpar_
+      INTEGER     :: ia, iz, iky, ikx, ij
 
-  DO ia=1,local_na
-    IF ( CONTAINSp0 .AND. CONTAINSp0 ) THEN
-      ! Loop to compute T = 1/3*(Tpar + 2Tperp)
-      DO iz = 1,local_nz
-        DO iky = 1,local_nky
-          DO ikx = 1,local_nkx
-            Tpar_ = 0._dp
-            DO ij = 1, local_nj
-              j_dp = REAL(ij-1,dp)
-              Tpar_  = Tpar_ + kernel(ia,ij+ngj/2,iky,ikx,iz+ngz/2,ieven)*&
-               (SQRT2 * moments(ia,ip2,ij+ngj/2,iky,ikx,iz+ngz/2,updatetlevel) &
-                      + moments(ia,ip0,ij+ngj/2,iky,ikx,iz+ngz/2,updatetlevel))
+      DO ia=1,local_na
+         IF ( CONTAINSp0 .AND. CONTAINSp0 ) THEN
+            ! Loop to compute T = 1/3*(Tpar + 2Tperp)
+            DO iz = 1,local_nz
+               DO iky = 1,local_nky
+                  DO ikx = 1,local_nkx
+                     Tpar_ = 0._dp
+                     DO ij = 1, local_nj
+                        j_dp = REAL(ij-1,dp)
+                        Tpar_  = Tpar_ + kernel(ia,ij+ngj/2,iky,ikx,iz+ngz/2,ieven)*&
+                           (SQRT2 * moments(ia,ip2,ij+ngj/2,iky,ikx,iz+ngz/2,updatetlevel) &
+                                  + moments(ia,ip0,ij+ngj/2,iky,ikx,iz+ngz/2,updatetlevel))
+                     ENDDO
+                     Tpar(ia,iky,ikx,iz) = Tpar_
+                  ENDDO
+               ENDDO
             ENDDO
-            Tpar(ia,iky,ikx,iz) = Tpar_
-          ENDDO
-        ENDDO
+         ENDIF
       ENDDO
-    ENDIF
-  ENDDO
-END SUBROUTINE compute_Tpar
+   END SUBROUTINE compute_Tpar
 
 ! Compute the 2D particle fluid moments for electron and ions (sum over Laguerre)
-SUBROUTINE compute_fluid_moments
-  IMPLICIT NONE
-  CALL compute_density
-  CALL compute_upar
-  CALL compute_uperp
-  CALL compute_Tpar
-  CALL compute_Tperp
-  ! Temperature
-  temp = (Tpar - 2._dp * Tper)/3._dp - dens
-END SUBROUTINE compute_fluid_moments
+   SUBROUTINE compute_fluid_moments
+      IMPLICIT NONE
+      CALL compute_density
+      CALL compute_upar
+      CALL compute_uperp
+      CALL compute_Tpar
+      CALL compute_Tperp
+      ! Temperature
+      temp = (Tpar - 2._dp * Tper)/3._dp - dens
+   END SUBROUTINE compute_fluid_moments
 
 END MODULE processing
diff --git a/src/solve_EM_fields.F90 b/src/solve_EM_fields.F90
index 5e61c5dd..0b78a8dd 100644
--- a/src/solve_EM_fields.F90
+++ b/src/solve_EM_fields.F90
@@ -39,7 +39,7 @@ CONTAINS
         x:DO ikx = 1,local_nky
           y:DO iky = 1,local_nkx
             !!!!!!!!!!!!!!! Compute particle charge density q_a n_a for each evolved species
-            DO iz = 1,local_Nz
+            DO iz = 1,local_nz
               rho(iz) = 0._dp
               DO in=1,total_nj
                 DO ia = 1,local_na
@@ -59,7 +59,7 @@ CONTAINS
               IF(kyarray(iky).EQ.0._dp) THEN ! take ky=0 mode (y-average)
                 ! Prepare integrant for z-average
                 integrant(iz) = Jacobian(iz+ngz/2,ieven)*rho(iz)*inv_pol_ion(iky,ikx,iz)
-                call simpson_rule_z(local_Nz,deltaz,integrant,intf_) ! get the flux averaged phi
+                call simpson_rule_z(local_nz,deltaz,integrant,intf_) ! get the flux averaged phi
                 fsa_phi = intf_ * iInt_Jacobian !Normalize by 1/int(Jxyz)dz
               ENDIF
               rho(iz) = rho(iz) + fsa_phi
@@ -68,7 +68,7 @@ CONTAINS
             ! IF (ADIAB_I) THEN
             ! ENDIF
             !!!!!!!!!!!!!!! Inverting the poisson equation
-            DO iz = 1,local_Nz
+            DO iz = 1,local_nz
               phi(iky,ikx,iz+ngz/2) = inv_poisson_op(iky,ikx,iz)*rho(iz)
             ENDDO
           ENDDO y
diff --git a/src/stepon.F90 b/src/stepon.F90
index f8835396..b193d207 100644
--- a/src/stepon.F90
+++ b/src/stepon.F90
@@ -6,6 +6,7 @@ SUBROUTINE stepon
   USE ghosts,                ONLY: update_ghosts_moments, update_ghosts_EM
   use mpi,                   ONLY: MPI_COMM_WORLD
   USE time_integration,      ONLY: ntimelevel
+  USE prec_const,            ONLY: dp
   IMPLICIT NONE
 
   INTEGER :: num_step, ierr
@@ -140,7 +141,7 @@ SUBROUTINE stepon
                   moments(ia,ip,ij,iky0,ikx,iz,:) = CONJG(moments(ia,ip,ij,iky0,total_nkx+2-ikx,iz,:))
                 END DO
                 ! must be real at origin and top right
-                moments(ia,ip,ij, iky0,ikx0,iz,:) = REAL(moments(ia,ip,ij, iky0,ikx0,iz,:))
+                moments(ia,ip,ij, iky0,ikx0,iz,:) = REAL(moments(ia,ip,ij, iky0,ikx0,iz,:),dp)
           ENDDO a
           ENDDO p
           ENDDO j
@@ -150,13 +151,13 @@ SUBROUTINE stepon
             phi(iky0,ikx,:) = phi(iky0,total_nkx+2-ikx,:)
           END DO
           ! must be real at origin
-          phi(iky0,ikx0,:) = REAL(phi(iky0,ikx0,:))
+          phi(iky0,ikx0,:) = REAL(phi(iky0,ikx0,:),dp)
           ! Psi
           DO ikx=2,total_nkx/2 !symmetry at ky = 0
             psi(iky0,ikx,:) = psi(iky0,total_nkx+2-ikx,:)
           END DO
           ! must be real at origin
-          psi(iky0,ikx0,:) = REAL(psi(iky0,ikx0,:))
+          psi(iky0,ikx0,:) = REAL(psi(iky0,ikx0,:),dp)
         ENDIF
       END SUBROUTINE enforce_symmetry
 
diff --git a/src/tesend.F90 b/src/tesend.F90
index ebbdbf39..6d53392c 100644
--- a/src/tesend.F90
+++ b/src/tesend.F90
@@ -24,7 +24,7 @@ SUBROUTINE tesend
 
   !________________________________________________________________________________
   !                   2.  Test on NRUN
-  nlend = step .GT. nrun
+  nlend = step .GE. nrun
   IF ( nlend ) THEN
      CALL speak('NRUN steps done')
      RETURN
diff --git a/testcases/smallest_problem/fort.90 b/testcases/smallest_problem/fort.90
index 40604ef7..fdb25d1d 100644
--- a/testcases/smallest_problem/fort.90
+++ b/testcases/smallest_problem/fort.90
@@ -91,8 +91,8 @@
 &INITIAL_CON
   INIT_OPT         = 'mom00'
   ACT_ON_MODES     = 'donothing'
-  init_background  = 1.0
-  init_noiselvl    = 0.0
+  init_background  = 0.0
+  init_noiselvl    = 1.0
   iseed            = 42
 /
 &TIME_INTEGRATION_PAR
diff --git a/testcases/smallest_problem/fort_00.90 b/testcases/smallest_problem/fort_00.90
index 9ea911de..d37fc3f1 100644
--- a/testcases/smallest_problem/fort_00.90
+++ b/testcases/smallest_problem/fort_00.90
@@ -73,8 +73,8 @@
 &INITIAL_CON
   INIT_OPT    = 'mom00'
   ACT_ON_MODES       = 'donothing'
-  init_background  = 1.0
-  init_noiselvl = 0.0
+  init_background  = 0.0
+  init_noiselvl = 1.0
   iseed         = 42
 /
 &TIME_INTEGRATION_PAR
-- 
GitLab