diff --git a/src/collision_mod.F90 b/src/collision_mod.F90
index 85d69116b3b0a8a95034f986f1fa153fccc8c8f6..2fbfc1888cc1dcde92195f02ba3f6331a6efd5f7 100644
--- a/src/collision_mod.F90
+++ b/src/collision_mod.F90
@@ -27,7 +27,7 @@ CONTAINS
     COMPLEX(dp), INTENT(INOUT) :: TColl_
 
     COMPLEX(dp) :: n_,upar_,uperp_,Tpar_, Tperp_
-    COMPLEX(dp) :: Dpj, Ppj, T_, ibe_
+    COMPLEX(dp) :: Dpj, Ppj, T_, be_
     COMPLEX(dp) :: nadiab_moment_0j, nadiab_moment_0jp1, nadiab_moment_0jm1
     INTEGER     :: in_
     REAL(dp)    :: n_dp, j_dp, p_dp, be_2, q_e_tau_e
@@ -36,7 +36,7 @@ CONTAINS
     p_dp      = REAL(parray_e(ip_),dp)
     j_dp      = REAL(jarray_e(ij_),dp)
     be_2      = (krarray(ikr_)**2 + kzarray(ikz_)**2) * sigmae2_taue_o2
-    ibe_      = imagu*2._dp*SQRT(be_2)
+    be_       = SQRT(2._dp*be_2)
     q_e_tau_e = q_e/tau_e
 
     !** Assembling collison operator **
@@ -60,7 +60,7 @@ CONTAINS
           ! Density
           n_     = n_     + Kernel_e(in_,ikr_,ikz_) * nadiab_moment_0j
           ! Perpendicular velocity
-          uperp_ = uperp_ + ibe_*0.5_dp*Kernel_e(in_,ikr_,ikz_) * (nadiab_moment_0j - nadiab_moment_0jp1)
+          uperp_ = uperp_ + be_*0.5_dp*Kernel_e(in_,ikr_,ikz_) * (nadiab_moment_0j - nadiab_moment_0jp1)
           ! Parallel temperature
           Tpar_  = Tpar_  + Kernel_e(in_,ikr_,ikz_) * (SQRT2*moments_e(3,in_,ikr_,ikz_,updatetlevel) + nadiab_moment_0j)
           ! Perpendicular temperature
@@ -73,8 +73,7 @@ CONTAINS
       TColl_ = TColl_ + T_* 4._dp *  j_dp          * Kernel_e(ij_  ,ikr_,ikz_)
       TColl_ = TColl_ - T_* 2._dp * (j_dp + 1._dp) * Kernel_e(ij_+1,ikr_,ikz_)
       TColl_ = TColl_ - T_* 2._dp *  j_dp          * Kernel_e(ij_-1,ikr_,ikz_)
-      TColl_ = TColl_ + uperp_*ibe_*((j_dp + 1._dp)* Kernel_e(ij_  ,ikr_,ikz_) &
-                                   -j_dp         * Kernel_e(ij_-1,ikr_,ikz_))
+      TColl_ = TColl_ + uperp_*be_* (Kernel_e(ij_  ,ikr_,ikz_) - Kernel_e(ij_-1,ikr_,ikz_))
       !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
 
       !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Non zero term for p = 1 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
@@ -124,7 +123,7 @@ CONTAINS
     COMPLEX(dp), INTENT(INOUT) :: TColl_
 
     COMPLEX(dp) :: n_,upar_,uperp_,Tpar_, Tperp_
-    COMPLEX(dp) :: Dpj, Ppj, T_, ibi_
+    COMPLEX(dp) :: Dpj, Ppj, T_, bi_
     COMPLEX(dp) :: nadiab_moment_0j, nadiab_moment_0jp1, nadiab_moment_0jm1
     INTEGER     :: in_
     REAL(dp)    :: n_dp, j_dp, p_dp, bi_2, q_i_tau_i
@@ -133,7 +132,7 @@ CONTAINS
     p_dp      = REAL(parray_i(ip_),dp)
     j_dp      = REAL(jarray_i(ij_),dp)
     bi_2      =  (krarray(ikr_)**2 + kzarray(ikz_)**2) * sigmai2_taui_o2
-    ibi_      = imagu*2._dp*SQRT(bi_2)
+    bi_      = SQRT(2._dp*bi_2)
     q_i_tau_i = q_i/tau_i
 
     !** Assembling collison operator **
@@ -157,7 +156,7 @@ CONTAINS
           ! Density
           n_     = n_     + Kernel_i(in_,ikr_,ikz_) * nadiab_moment_0j
           ! Perpendicular velocity
-          uperp_ = uperp_ + ibi_*0.5_dp*Kernel_i(in_,ikr_,ikz_) * (nadiab_moment_0j -nadiab_moment_0jp1)
+          uperp_ = uperp_ + bi_*0.5_dp*Kernel_i(in_,ikr_,ikz_) * (nadiab_moment_0j -nadiab_moment_0jp1)
           ! Parallel temperature
           Tpar_  = Tpar_  + Kernel_i(in_,ikr_,ikz_) * (SQRT2*moments_i(3,in_,ikr_,ikz_,updatetlevel) + nadiab_moment_0j)
           ! Perpendicular temperature
@@ -170,8 +169,7 @@ CONTAINS
       TColl_ = TColl_ + T_* 4._dp *  j_dp          * Kernel_i(ij_  ,ikr_,ikz_)
       TColl_ = TColl_ - T_* 2._dp * (j_dp + 1._dp) * Kernel_i(ij_+1,ikr_,ikz_)
       TColl_ = TColl_ - T_* 2._dp *  j_dp          * Kernel_i(ij_-1,ikr_,ikz_)
-      TColl_ = TColl_ + uperp_*ibi_*((j_dp + 1._dp)* Kernel_i(ij_  ,ikr_,ikz_) &
-                                   -j_dp         * Kernel_i(ij_-1,ikr_,ikz_))
+      TColl_ = TColl_ + uperp_*bi_*( Kernel_i(ij_  ,ikr_,ikz_) - Kernel_i(ij_-1,ikr_,ikz_))
       !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
 
       !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Non zero term for p = 1 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
@@ -369,525 +367,264 @@ CONTAINS
 
   END SUBROUTINE apply_COSOlver_mat_i
 
-  !******************************************************************************!
-  !!!!!!! Load the collision matrix coefficient table from COSOlver results
-  !******************************************************************************!
-  SUBROUTINE load_COSOlver_mat ! Load a sub matrix from iCa files (works for pmaxa,jmaxa<=P_full,J_full)
-    use futils
-    use initial_par
-    IMPLICIT NONE
-    ! Indices for row and columns of the COSOlver matrix (4D compressed 2D matrices)
-    INTEGER :: irow_sub, irow_full, icol_sub, icol_full
-    INTEGER :: fid ! file indexation
-
-    INTEGER :: ip_e, ij_e, il_e, ik_e, ikps_C, ikpe_C                  ! indices for electrons loops
-    INTEGER :: pdime, jdime                                            ! dimensions of the COSOlver matrices
-    REAL(dp), DIMENSION(1) :: p_r, j_r
-    REAL(dp), DIMENSION(:,:),   ALLOCATABLE :: Ceepj_full, CeipjT_full ! To load the entire matrix
-    REAL(dp), DIMENSION(:,:),   ALLOCATABLE :: CeipjF_full             ! ''
-    REAL(dp), DIMENSION(:,:,:), ALLOCATABLE :: Ceepj__kp, CeipjT_kp    ! To store the coeff that will be used along kperp
-    REAL(dp), DIMENSION(:,:,:), ALLOCATABLE :: CeipjF_kp               ! ''
-    INTEGER :: ip_i, ij_i, il_i, ik_i                                  ! same for ions
-    INTEGER :: pdimi, jdimi                                            ! dimensions of the COSOlver matrices
-    REAL(dp), DIMENSION(:,:),   ALLOCATABLE :: Ciipj_full, CiepjT_full ! .
-    REAL(dp), DIMENSION(:,:),   ALLOCATABLE :: CiepjF_full             ! .
-    REAL(dp), DIMENSION(:,:,:), ALLOCATABLE :: Ciipj__kp, CiepjT_kp    ! .
-    REAL(dp), DIMENSION(:,:,:), ALLOCATABLE :: CiepjF_kp               ! .
-    INTEGER  :: NFLR
-
-    INTEGER  :: ikp_next, ikp_prev
-    REAL(dp) ::  kp_next,  kp_prev, kperp, zerotoone
-
-    CHARACTER(len=128) :: var_name, kperp_string
-
-    LOGICAL     :: CO_AA_ONLY = .false. ! Flag to remove ei ie collision
-
-    !! Some terminal info
-    IF (CO .EQ. 2) THEN
-      IF (my_id .EQ. 0) WRITE(*,*) '=== Load GK Sugama matrix ==='
-    ELSEIF(CO .EQ. 3) THEN
-      IF (my_id .EQ. 0) WRITE(*,*) '=== Load GK Full Coulomb matrix ==='
-    ELSEIF(CO .EQ. -2) THEN
-      IF (my_id .EQ. 0) WRITE(*,*) '=== Load DK Sugama matrix ==='
-    ELSEIF(CO .EQ. -3) THEN
-      IF (my_id .EQ. 0) WRITE(*,*) '=== Load DK Full Coulomb matrix ==='
-    ENDIF
-
-    IF (CO .GT. 0) THEN ! GK operator (k-dependant)
-      ikps_C = ikps; ikpe_C = ikpe
-    ELSEIF (CO .LT. 0) THEN ! DK operator (only one mat for every k)
-      ikps_C = 1; ikpe_C = 1
-    ENDIF
+    !******************************************************************************!
+    !!!!!!! Load the collision matrix coefficient table from COSOlver results
+    !******************************************************************************!
+    SUBROUTINE load_COSOlver_mat ! Load a sub matrix from iCa files (works for pmaxa,jmaxa<=P_full,J_full)
+      use futils
+      use initial_par
+      IMPLICIT NONE
+      ! Indices for row and columns of the COSOlver matrix (4D compressed 2D matrices)
+      INTEGER :: irow_sub, irow_full, icol_sub, icol_full
+      INTEGER :: fid ! file indexation
+
+      INTEGER :: ip_e, ij_e, il_e, ik_e, ikps_C, ikpe_C                  ! indices for electrons loops
+      REAL(dp), DIMENSION(2) :: dims_e
+      INTEGER :: pdime, jdime                                            ! dimensions of the COSOlver matrices
+      REAL(dp), DIMENSION(:,:),   ALLOCATABLE :: Ceepj_full, CeipjT_full ! To load the entire matrix
+      REAL(dp), DIMENSION(:,:),   ALLOCATABLE :: CeipjF_full             ! ''
+      REAL(dp), DIMENSION(:,:,:), ALLOCATABLE :: Ceepj__kp, CeipjT_kp    ! To store the coeff that will be used along kperp
+      REAL(dp), DIMENSION(:,:,:), ALLOCATABLE :: CeipjF_kp               ! ''
+      INTEGER :: ip_i, ij_i, il_i, ik_i                                  ! same for ions
+      INTEGER,  DIMENSION(2) :: dims_i
+      INTEGER :: pdimi, jdimi                                            ! dimensions of the COSOlver matrices
+      REAL(dp), DIMENSION(:,:),   ALLOCATABLE :: Ciipj_full, CiepjT_full ! .
+      REAL(dp), DIMENSION(:,:),   ALLOCATABLE :: CiepjF_full             ! .
+      REAL(dp), DIMENSION(:,:,:), ALLOCATABLE :: Ciipj__kp, CiepjT_kp    ! .
+      REAL(dp), DIMENSION(:,:,:), ALLOCATABLE :: CiepjF_kp               ! .
+      INTEGER  :: NFLR
+
+      REAL(dp), DIMENSION(:),     ALLOCATABLE :: kp_grid_mat             ! kperp grid of the matrices
+      INTEGER  :: ikp_next, ikp_prev, nkp_mat, ikp_mat
+      REAL(dp) ::  kp_next,  kp_prev, kperp_sim, kperp_mat, zerotoone
+
+      CHARACTER(len=128) :: var_name, kperp_string, ikp_string
+
+      LOGICAL     :: CO_AA_ONLY = .false. ! Flag to remove ei ie collision
+
+      !! Some terminal info
+      IF (CO .EQ. 2) THEN
+        IF (my_id .EQ. 0) WRITE(*,*) '=== Load GK Sugama matrix ==='
+      ELSEIF(CO .EQ. 3) THEN
+        IF (my_id .EQ. 0) WRITE(*,*) '=== Load GK Full Coulomb matrix ==='
+      ELSEIF(CO .EQ. -2) THEN
+        IF (my_id .EQ. 0) WRITE(*,*) '=== Load DK Sugama matrix ==='
+      ELSEIF(CO .EQ. -3) THEN
+        IF (my_id .EQ. 0) WRITE(*,*) '=== Load DK Full Coulomb matrix ==='
+      ENDIF
 
-    CALL allocate_array(  Ceepj__kp, 1,(pmaxe+1)*(jmaxe+1), 1,(pmaxe+1)*(jmaxe+1), ikps_C,ikpe_C)
-    CALL allocate_array(  CeipjT_kp, 1,(pmaxe+1)*(jmaxe+1), 1,(pmaxe+1)*(jmaxe+1), ikps_C,ikpe_C)
-    CALL allocate_array(  CeipjF_kp, 1,(pmaxe+1)*(jmaxe+1), 1,(pmaxe+1)*(jmaxe+1), ikps_C,ikpe_C)
-    CALL allocate_array(  Ciipj__kp, 1,(pmaxe+1)*(jmaxe+1), 1,(pmaxe+1)*(jmaxe+1), ikps_C,ikpe_C)
-    CALL allocate_array(  CiepjT_kp, 1,(pmaxe+1)*(jmaxe+1), 1,(pmaxe+1)*(jmaxe+1), ikps_C,ikpe_C)
-    CALL allocate_array(  CiepjF_kp, 1,(pmaxe+1)*(jmaxe+1), 1,(pmaxe+1)*(jmaxe+1), ikps_C,ikpe_C)
-
-    ! Opening the compiled cosolver matrices results
-    if(my_id.EQ.0)write(*,*) mat_file
-
-    CALL openf(mat_file,fid, 'r', 'D', mpicomm=comm_p);
-    CALL getarr(fid, '/Pmaxe', p_r) ! Get the dimension of the stored matrices
-    CALL getarr(fid, '/Jmaxe', j_r)
-    pdime = INT(p_r(1)); jdime = INT(j_r(1));
-    CALL getarr(fid, '/Pmaxi', p_r) ! Get the dimension of the stored matrices
-    CALL getarr(fid, '/Jmaxi', j_r)
-    pdimi = INT(p_r(1)); jdimi = INT(j_r(1));
-    IF ( ((pdime .LT. pmaxe) .OR. (jdime .LT. jmaxe)) .AND. (my_id .EQ. 0)) WRITE(*,*) '!! P,J Matrix too small !!'
-    IF ( ((pdimi .LT. pmaxi) .OR. (jdimi .LT. jmaxi)) .AND. (my_id .EQ. 0)) WRITE(*,*) '!! P,J Matrix too small !!'
-
-    DO ikp = ikps_C,ikpe_C ! Loop over everz kperp values
-      ! we put zeros if kp>2/3kpmax because thoses frequenvies are filtered through AA
-      IF(kparray(ikp) .GT. two_third_kpmax .AND. NON_LIN) THEN
-        CiepjT_kp(:,:,ikp) = 0._dp
-        CiepjF_kp(:,:,ikp) = 0._dp
-        CeipjT_kp(:,:,ikp) = 0._dp
-        CeipjF_kp(:,:,ikp) = 0._dp
-        Ceepj__kp(:,:,ikp) = 0._dp
-        Ciipj__kp(:,:,ikp) = 0._dp
+      ! Opening the compiled cosolver matrices results
+      if(my_id.EQ.0)write(*,*) mat_file
+      CALL openf(mat_file,fid, 'r', 'D', mpicomm=comm_p);
+
+      ! Get matrices dimensions (polynomials degrees and kperp grid)
+      CALL getarr(fid, '/dims_e', dims_e) ! Get the electron polynomial degrees
+      pdime = dims_e(1); jdime = dims_e(2);
+      CALL getarr(fid, '/dims_i', dims_i) ! Get the ion      polynomial degrees
+      pdimi = dims_i(1); jdimi = dims_i(2);
+      IF ( ((pdime .LT. pmaxe) .OR. (jdime .LT. jmaxe)) .AND. (my_id .EQ. 0)) WRITE(*,*) '!! Pe,Je Matrix too small !!'
+      IF ( ((pdimi .LT. pmaxi) .OR. (jdimi .LT. jmaxi)) .AND. (my_id .EQ. 0)) WRITE(*,*) '!! Pi,Ji Matrix too small !!'
+
+      CALL getsize(fid, '/coordkperp', nkp_mat) ! Get the dimension kperp grid of the matrices
+      CALL allocate_array(kp_grid_mat, 1,nkp_mat)
+      CALL getarr(fid, '/coordkperp', kp_grid_mat)
+      IF (NON_LIN) THEN ! check that we have enough kperps mat
+        IF ( (kp_grid_mat(nkp_mat) .LT. two_third_kpmax) .AND. (my_id .EQ. 0)) WRITE(*,*) '!! Matrix kperp grid too small !!'
       ELSE
-        ! Kperp value in string format
-        IF (CO .GT. 0) THEN
-          write(kperp_string,'(f6.4)') kparray(ikp)
+        IF ( (kp_grid_mat(nkp_mat) .LT. kp_max) .AND. (my_id .EQ. 0)) WRITE(*,*) '!! Matrix kperp grid too small !!'
+      ENDIF
+
+      IF (CO .GT. 0) THEN ! GK operator (k-dependant)
+        ikps_C = 1; ikpe_C = nkp_mat
+      ELSEIF (CO .LT. 0) THEN ! DK operator (only one mat for all k)
+        ikps_C = 1; ikpe_C = 1
+      ENDIF
+
+      CALL allocate_array(  Ceepj__kp, 1,(pmaxe+1)*(jmaxe+1), 1,(pmaxe+1)*(jmaxe+1), ikps_C,ikpe_C)
+      CALL allocate_array(  CeipjT_kp, 1,(pmaxe+1)*(jmaxe+1), 1,(pmaxe+1)*(jmaxe+1), ikps_C,ikpe_C)
+      CALL allocate_array(  CeipjF_kp, 1,(pmaxe+1)*(jmaxe+1), 1,(pmaxe+1)*(jmaxe+1), ikps_C,ikpe_C)
+      CALL allocate_array(  Ciipj__kp, 1,(pmaxe+1)*(jmaxe+1), 1,(pmaxe+1)*(jmaxe+1), ikps_C,ikpe_C)
+      CALL allocate_array(  CiepjT_kp, 1,(pmaxe+1)*(jmaxe+1), 1,(pmaxe+1)*(jmaxe+1), ikps_C,ikpe_C)
+      CALL allocate_array(  CiepjF_kp, 1,(pmaxe+1)*(jmaxe+1), 1,(pmaxe+1)*(jmaxe+1), ikps_C,ikpe_C)
+
+      DO ikp = ikps_C,ikpe_C ! Loop over everz kperp values
+        ! we put zeros if kp>2/3kpmax because thoses frequenvies are filtered through AA
+        IF(kp_grid_mat(ikp) .GT. two_third_kpmax .AND. NON_LIN) THEN
+          CiepjT_kp(:,:,ikp) = 0._dp
+          CiepjF_kp(:,:,ikp) = 0._dp
+          CeipjT_kp(:,:,ikp) = 0._dp
+          CeipjF_kp(:,:,ikp) = 0._dp
+          Ceepj__kp(:,:,ikp) = 0._dp
+          Ciipj__kp(:,:,ikp) = 0._dp
         ELSE
-          write(kperp_string,'(f6.4)') 0._dp
+          ! Kperp value in string format
+          IF (CO .GT. 0) THEN
+            write(ikp_string,'(i5.5)') ikp-1
+          ELSE
+            write(ikp_string,'(i5.5)') 0
+          ENDIF
+          !!!!!!!!!!!! Electron matrices !!!!!!!!!!!!
+          ! get the self electron colision matrix
+          ! Allocate space for storing full collision matrix
+          CALL allocate_array(  Ceepj_full, 1,(pdime+1)*(jdime+1), 1,(pdime+1)*(jdime+1))
+          ! Naming of the array to load (kperp dependant)
+          WRITE(var_name,'(a,a)') TRIM(ADJUSTL(ikp_string)),'/Caapj/Ceepj'
+          CALL getarr(fid, var_name, Ceepj_full) ! get array (moli format)
+          ! Fill sub array with the usefull polynmial degrees only
+          DO ip_e = 0,pmaxe ! Loop over rows
+          DO ij_e = 0,jmaxe
+                irow_sub  = (jmaxe +1)*ip_e + ij_e +1
+                irow_full = (jdime +1)*ip_e + ij_e +1
+                DO il_e = 0,pmaxe ! Loop over columns
+                DO ik_e = 0,jmaxe
+                      icol_sub  = (jmaxe +1)*il_e + ik_e +1
+                      icol_full = (jdime +1)*il_e + ik_e +1
+                      Ceepj__kp (irow_sub,icol_sub,ikp) = Ceepj_full (irow_full,icol_full)
+                ENDDO
+                ENDDO
+          ENDDO
+          ENDDO
+          DEALLOCATE(Ceepj_full)
+
+          ! Get test and field e-i collision matrices
+          CALL allocate_array( CeipjT_full, 1,(pdime+1)*(jdime+1), 1,(pdime+1)*(jdime+1))
+          CALL allocate_array( CeipjF_full, 1,(pdime+1)*(jdime+1), 1,(pdimi+1)*(jdimi+1))
+          WRITE(var_name,'(a,a)') TRIM(ADJUSTL(ikp_string)),'/Ceipj/CeipjT'
+          CALL getarr(fid, var_name, CeipjT_full)
+          WRITE(var_name,'(a,a)') TRIM(ADJUSTL(ikp_string)),'/Ceipj/CeipjF'
+          CALL getarr(fid, var_name, CeipjF_full)
+          ! Fill sub array with only usefull polynmials degree
+          DO ip_e = 0,pmaxe ! Loop over rows
+          DO ij_e = 0,jmaxe
+                irow_sub  = (jmaxe +1)*ip_e + ij_e +1
+                irow_full = (jdime +1)*ip_e + ij_e +1
+                DO il_e = 0,pmaxe ! Loop over columns
+                DO ik_e = 0,jmaxe
+                      icol_sub  = (jmaxe +1)*il_e + ik_e +1
+                      icol_full = (jdime +1)*il_e + ik_e +1
+                      CeipjT_kp(irow_sub,icol_sub,ikp) = CeipjT_full(irow_full,icol_full)
+                ENDDO
+                ENDDO
+                DO il_i = 0,pmaxi ! Loop over columns
+                DO ik_i = 0,jmaxi
+                      icol_sub  = (Jmaxi +1)*il_i + ik_i +1
+                      icol_full = (jdimi +1)*il_i + ik_i +1
+                      CeipjF_kp(irow_sub,icol_sub,ikp) = CeipjF_full(irow_full,icol_full)
+                ENDDO
+                ENDDO
+          ENDDO
+          ENDDO
+          DEALLOCATE(CeipjF_full)
+          DEALLOCATE(CeipjT_full)
+
+          !!!!!!!!!!!!!!! Ion matrices !!!!!!!!!!!!!!
+          ! get the self electron colision matrix
+          CALL allocate_array(  Ciipj_full, 1,(pdimi+1)*(jdimi+1), 1,(pdimi+1)*(jdimi+1))
+          WRITE(var_name,'(a,a,a)') TRIM(ADJUSTL(ikp_string)),'/Caapj/Ciipj'
+          CALL getarr(fid, var_name, Ciipj_full) ! get array (moli format)
+          ! Fill sub array with only usefull polynmials degree
+          DO ip_i = 0,Pmaxi ! Loop over rows
+          DO ij_i = 0,Jmaxi
+                irow_sub  = (Jmaxi +1)*ip_i + ij_i +1
+                irow_full = (jdimi +1)*ip_i + ij_i +1
+                DO il_i = 0,Pmaxi ! Loop over columns
+                DO ik_i = 0,Jmaxi
+                      icol_sub  = (Jmaxi +1)*il_i + ik_i +1
+                      icol_full = (jdimi +1)*il_i + ik_i +1
+                      Ciipj__kp (irow_sub,icol_sub,ikp) = Ciipj_full (irow_full,icol_full)
+                ENDDO
+                ENDDO
+          ENDDO
+          ENDDO
+          DEALLOCATE(Ciipj_full)
+
+          ! get the Test and Back field electron ion collision matrix
+          CALL allocate_array( CiepjT_full, 1,(pdimi+1)*(jdimi+1), 1,(pdimi+1)*(jdimi+1))
+          CALL allocate_array( CiepjF_full, 1,(pdimi+1)*(jdimi+1), 1,(pdime+1)*(jdime+1))
+          WRITE(var_name,'(a,a,a)') TRIM(ADJUSTL(ikp_string)),'/Ciepj/CiepjT'
+          CALL getarr(fid, var_name, CiepjT_full)
+          WRITE(var_name,'(a,a,a)') TRIM(ADJUSTL(ikp_string)),'/Ciepj/CiepjF'
+          CALL getarr(fid, var_name, CiepjF_full)
+          ! Fill sub array with only usefull polynmials degree
+          DO ip_i = 0,Pmaxi ! Loop over rows
+          DO ij_i = 0,Jmaxi
+                irow_sub  = (Jmaxi +1)*ip_i + ij_i +1
+                irow_full = (jdimi +1)*ip_i + ij_i +1
+                DO il_i = 0,Pmaxi ! Loop over columns
+                DO ik_i = 0,Jmaxi
+                      icol_sub  = (Jmaxi +1)*il_i + ik_i +1
+                      icol_full = (jdimi +1)*il_i + ik_i +1
+                      CiepjT_kp(irow_sub,icol_sub,ikp) = CiepjT_full(irow_full,icol_full)
+                ENDDO
+                ENDDO
+                DO il_e = 0,pmaxe ! Loop over columns
+                DO ik_e = 0,jmaxe
+                      icol_sub  = (jmaxe +1)*il_e + ik_e +1
+                      icol_full = (jdime +1)*il_e + ik_e +1
+                      CiepjF_kp(irow_sub,icol_sub,ikp) = CiepjF_full(irow_full,icol_full)
+                ENDDO
+                ENDDO
+          ENDDO
+          ENDDO
+          DEALLOCATE(CiepjF_full)
+          DEALLOCATE(CiepjT_full)
         ENDIF
-        !!!!!!!!!!!! Electron matrices !!!!!!!!!!!!
-        ! get the self electron colision matrix
-        ! Allocate space for storing full collision matrix
-        CALL allocate_array(  Ceepj_full, 1,(pdime+1)*(jdime+1), 1,(pdime+1)*(jdime+1))
-        ! Naming of the array to load (kperp dependant)
-        WRITE(var_name,'(a,a,a)') '/Caapj/',TRIM(ADJUSTL(kperp_string))
-        CALL getarr(fid, var_name, Ceepj_full) ! get array (moli format)
-        ! Fill sub array with the usefull polynmial degrees only
-        DO ip_e = 0,pmaxe ! Loop over rows
-        DO ij_e = 0,jmaxe
-              irow_sub  = (jmaxe +1)*ip_e + ij_e +1
-              irow_full = (jdime +1)*ip_e + ij_e +1
-              DO il_e = 0,pmaxe ! Loop over columns
-              DO ik_e = 0,jmaxe
-                    icol_sub  = (jmaxe +1)*il_e + ik_e +1
-                    icol_full = (jdime +1)*il_e + ik_e +1
-                    Ceepj__kp (irow_sub,icol_sub,ikp) = Ceepj_full (irow_full,icol_full)
-              ENDDO
-              ENDDO
-        ENDDO
-        ENDDO
-        DEALLOCATE(Ceepj_full)
-
-        ! Get test and field e-i collision matrices
-        CALL allocate_array( CeipjT_full, 1,(pdime+1)*(jdime+1), 1,(pdime+1)*(jdime+1))
-        CALL allocate_array( CeipjF_full, 1,(pdime+1)*(jdime+1), 1,(pdimi+1)*(jdimi+1))
-        WRITE(var_name,'(a,a,a)') '/CeipjT/',TRIM(ADJUSTL(kperp_string))
-        CALL getarr(fid, var_name, CeipjT_full)
-        WRITE(var_name,'(a,a,a)') '/CeipjF/',TRIM(ADJUSTL(kperp_string))
-        CALL getarr(fid, var_name, CeipjF_full)
-        ! Fill sub array with only usefull polynmials degree
-        DO ip_e = 0,pmaxe ! Loop over rows
-        DO ij_e = 0,jmaxe
-              irow_sub  = (jmaxe +1)*ip_e + ij_e +1
-              irow_full = (jdime +1)*ip_e + ij_e +1
-              DO il_e = 0,pmaxe ! Loop over columns
-              DO ik_e = 0,jmaxe
-                    icol_sub  = (jmaxe +1)*il_e + ik_e +1
-                    icol_full = (jdime +1)*il_e + ik_e +1
-                    CeipjT_kp(irow_sub,icol_sub,ikp) = CeipjT_full(irow_full,icol_full)
-              ENDDO
-              ENDDO
-              DO il_i = 0,pmaxi ! Loop over columns
-              DO ik_i = 0,jmaxi
-                    icol_sub  = (Jmaxi +1)*il_i + ik_i +1
-                    icol_full = (jdimi +1)*il_i + ik_i +1
-                    CeipjF_kp(irow_sub,icol_sub,ikp) = CeipjF_full(irow_full,icol_full)
-              ENDDO
-              ENDDO
-        ENDDO
-        ENDDO
-        DEALLOCATE(CeipjF_full)
-        DEALLOCATE(CeipjT_full)
-
-        !!!!!!!!!!!!!!! Ion matrices !!!!!!!!!!!!!!
-        ! get the self electron colision matrix
-        CALL allocate_array(  Ciipj_full, 1,(pdimi+1)*(jdimi+1), 1,(pdimi+1)*(jdimi+1))
-        WRITE(var_name,'(a,a,a)') '/Caapj/',TRIM(ADJUSTL(kperp_string))
-        CALL getarr(fid, var_name, Ciipj_full) ! get array (moli format)
-        ! Fill sub array with only usefull polynmials degree
-        DO ip_i = 0,Pmaxi ! Loop over rows
-        DO ij_i = 0,Jmaxi
-              irow_sub  = (Jmaxi +1)*ip_i + ij_i +1
-              irow_full = (jdimi +1)*ip_i + ij_i +1
-              DO il_i = 0,Pmaxi ! Loop over columns
-              DO ik_i = 0,Jmaxi
-                    icol_sub  = (Jmaxi +1)*il_i + ik_i +1
-                    icol_full = (jdimi +1)*il_i + ik_i +1
-                    Ciipj__kp (irow_sub,icol_sub,ikp) = Ciipj_full (irow_full,icol_full)
-              ENDDO
-              ENDDO
-        ENDDO
-        ENDDO
-        DEALLOCATE(Ciipj_full)
-
-        ! get the Test and Back field electron ion collision matrix
-        CALL allocate_array( CiepjT_full, 1,(pdimi+1)*(jdimi+1), 1,(pdimi+1)*(jdimi+1))
-        CALL allocate_array( CiepjF_full, 1,(pdimi+1)*(jdimi+1), 1,(pdime+1)*(jdime+1))
-        WRITE(var_name,'(a,a,a)') '/CiepjT/',TRIM(ADJUSTL(kperp_string))
-        CALL getarr(fid, var_name, CiepjT_full)
-        WRITE(var_name,'(a,a,a)') '/CiepjF/',TRIM(ADJUSTL(kperp_string))
-        CALL getarr(fid, var_name, CiepjF_full)
-        ! Fill sub array with only usefull polynmials degree
-        DO ip_i = 0,Pmaxi ! Loop over rows
-        DO ij_i = 0,Jmaxi
-              irow_sub  = (Jmaxi +1)*ip_i + ij_i +1
-              irow_full = (jdimi +1)*ip_i + ij_i +1
-              DO il_i = 0,Pmaxi ! Loop over columns
-              DO ik_i = 0,Jmaxi
-                    icol_sub  = (Jmaxi +1)*il_i + ik_i +1
-                    icol_full = (jdimi +1)*il_i + ik_i +1
-                    CiepjT_kp(irow_sub,icol_sub,ikp) = CiepjT_full(irow_full,icol_full)
-              ENDDO
-              ENDDO
-              DO il_e = 0,pmaxe ! Loop over columns
-              DO ik_e = 0,jmaxe
-                    icol_sub  = (jmaxe +1)*il_e + ik_e +1
-                    icol_full = (jdime +1)*il_e + ik_e +1
-                    CiepjF_kp(irow_sub,icol_sub,ikp) = CiepjF_full(irow_full,icol_full)
-              ENDDO
-              ENDDO
-        ENDDO
+      ENDDO
+      CALL closef(fid)
+
+      IF (CO .GT. 0) THEN ! Interpolation of the kperp matrix values on kr kz grid
+        IF (my_id .EQ. 0 ) WRITE(*,*) '...Interpolation from matrices kperp to simulation kr,kz...'
+        DO ikr = ikrs,ikre
+          DO ikz = ikzs,ikze
+            kperp_sim = SQRT(krarray(ikr)**2+kzarray(ikz)**2) ! current simulation kperp
+
+            ! Find the interval in kp grid mat where kperp_sim is contained
+            ! Loop over the whole kp mat grid to find the smallest kperp that is
+            ! larger than the current kperp_sim (brute force...)
+            DO ikp=1,nkp_mat
+              ikp_mat   = ikp ! the first indice of the interval (k0)
+              kperp_mat = kp_grid_mat(ikp)
+              IF(kperp_mat .GT. kperp_sim) EXIT
+            ENDDO
+            ! interval boundaries
+            ikp_prev  = ikp_mat - 1 !index of k0
+            ikp_next  = ikp_mat     !index of k1
+            ! write(*,*) kp_grid_mat(ikp_prev), '<', kperp_sim, '<', kp_grid_mat(ikp_next)
+
+            ! 0->1 variable for linear interp, i.e. zero2one = (k-k0)/(k1-k0)
+            zerotoone = (kperp_sim - kp_grid_mat(ikp_prev))/(kp_grid_mat(ikp_next) - kp_grid_mat(ikp_prev))
+
+            ! Linear interpolation between previous and next kperp matrix values
+            Ceepj (:,:,ikr,ikz) = (Ceepj__kp(:,:,ikp_next) - Ceepj__kp(:,:,ikp_prev))*zerotoone + Ceepj__kp(:,:,ikp_prev)
+            CeipjT(:,:,ikr,ikz) = (CeipjT_kp(:,:,ikp_next) - CeipjT_kp(:,:,ikp_prev))*zerotoone + CeipjT_kp(:,:,ikp_prev)
+            CeipjF(:,:,ikr,ikz) = (CeipjF_kp(:,:,ikp_next) - CeipjF_kp(:,:,ikp_prev))*zerotoone + CeipjF_kp(:,:,ikp_prev)
+            Ciipj (:,:,ikr,ikz) = (Ciipj__kp(:,:,ikp_next) - Ciipj__kp(:,:,ikp_prev))*zerotoone + Ciipj__kp(:,:,ikp_prev)
+            CiepjT(:,:,ikr,ikz) = (CiepjT_kp(:,:,ikp_next) - CiepjT_kp(:,:,ikp_prev))*zerotoone + CiepjT_kp(:,:,ikp_prev)
+            CiepjF(:,:,ikr,ikz) = (CiepjF_kp(:,:,ikp_next) - CiepjF_kp(:,:,ikp_prev))*zerotoone + CiepjF_kp(:,:,ikp_prev)
+          ENDDO
         ENDDO
-        DEALLOCATE(CiepjF_full)
-        DEALLOCATE(CiepjT_full)
+      ELSE ! DK -> No kperp dep, copy simply to final collision matrices
+        Ceepj (:,:,1,1) = Ceepj__kp (:,:,1)
+        CeipjT(:,:,1,1) = CeipjT_kp(:,:,1)
+        CeipjF(:,:,1,1) = CeipjF_kp(:,:,1)
+        Ciipj (:,:,1,1) = Ciipj__kp (:,:,1)
+        CiepjT(:,:,1,1) = CiepjT_kp(:,:,1)
+        CiepjF(:,:,1,1) = CiepjF_kp(:,:,1)
+      ENDIF
+      ! Deallocate auxiliary variables
+      DEALLOCATE (Ceepj__kp ); DEALLOCATE (CeipjT_kp); DEALLOCATE (CeipjF_kp)
+      DEALLOCATE (Ciipj__kp ); DEALLOCATE (CiepjT_kp); DEALLOCATE (CiepjF_kp)
+
+      IF( CO_AA_ONLY ) THEN
+        CeipjF = 0._dp;
+        CeipjT = 0._dp;
+        CiepjF = 0._dp;
+        CiepjT = 0._dp;
       ENDIF
-    ENDDO
-    CALL closef(fid)
-
-    IF (CO .GT. 0) THEN ! Interpolation of the kperp matrix values on kr kz grid
-      IF (my_id .EQ. 0 ) WRITE(*,*) '...Interpolation from kperp to kr,kz...'
-      DO ikr = ikrs,ikre
-        DO ikz = ikzs,ikze
-          kperp = SQRT(krarray(ikr)**2+kzarray(ikz)**2)
-          ! Find correspondings previous and next kperp values of matrices grid
-          ikp_prev  = INT(  FLOOR(kperp/deltakr))+1
-          ikp_next  = INT(  FLOOR(kperp/deltakr))+2
-          ! 0->1 variable for linear interp
-          zerotoone = (kperp - kparray(ikp_prev))/(kparray(ikp_next) - kparray(ikp_prev))
-          ! Linear interpolation between previous and next kperp matrix values
-          Ceepj (:,:,ikr,ikz) = (Ceepj__kp(:,:,ikp_next) - Ceepj__kp(:,:,ikp_prev))*zerotoone + Ceepj__kp(:,:,ikp_prev)
-          CeipjT(:,:,ikr,ikz) = (CeipjT_kp(:,:,ikp_next) - CeipjT_kp(:,:,ikp_prev))*zerotoone + CeipjT_kp(:,:,ikp_prev)
-          CeipjF(:,:,ikr,ikz) = (CeipjF_kp(:,:,ikp_next) - CeipjF_kp(:,:,ikp_prev))*zerotoone + CeipjF_kp(:,:,ikp_prev)
-          Ciipj (:,:,ikr,ikz) = (Ciipj__kp(:,:,ikp_next) - Ciipj__kp(:,:,ikp_prev))*zerotoone + Ciipj__kp(:,:,ikp_prev)
-          CiepjT(:,:,ikr,ikz) = (CiepjT_kp(:,:,ikp_next) - CiepjT_kp(:,:,ikp_prev))*zerotoone + CiepjT_kp(:,:,ikp_prev)
-          CiepjF(:,:,ikr,ikz) = (CiepjF_kp(:,:,ikp_next) - CiepjF_kp(:,:,ikp_prev))*zerotoone + CiepjF_kp(:,:,ikp_prev)
-        ENDDO
-      ENDDO
-    ELSE ! DK -> No kperp dep, copy simply to final collision matrices
-      Ceepj (:,:,1,1) = Ceepj__kp (:,:,1)
-      CeipjT(:,:,1,1) = CeipjT_kp(:,:,1)
-      CeipjF(:,:,1,1) = CeipjF_kp(:,:,1)
-      Ciipj (:,:,1,1) = Ciipj__kp (:,:,1)
-      CiepjT(:,:,1,1) = CiepjT_kp(:,:,1)
-      CiepjF(:,:,1,1) = CiepjF_kp(:,:,1)
-    ENDIF
-    ! Deallocate auxiliary variables
-    DEALLOCATE (Ceepj__kp ); DEALLOCATE (CeipjT_kp); DEALLOCATE (CeipjF_kp)
-    DEALLOCATE (Ciipj__kp ); DEALLOCATE (CiepjT_kp); DEALLOCATE (CiepjF_kp)
-
-    IF( CO_AA_ONLY ) THEN
-      CeipjF = 0._dp;
-      CeipjT = 0._dp;
-      CiepjF = 0._dp;
-      CiepjT = 0._dp;
-    ENDIF
-
-    IF (my_id .EQ. 0) WRITE(*,*) '============DONE==========='
-
-  END SUBROUTINE load_COSOlver_mat
-  !******************************************************************************!
 
+      IF (my_id .EQ. 0) WRITE(*,*) '============DONE==========='
 
-  ! !******************************************************************************!
-  ! !!!!!!! Load the collision matrix coefficient table from COSOlver results
-  ! !******************************************************************************!
-  ! SUBROUTINE load_COSOlver_mat_old ! Load a sub matrix from iCa files (works for pmaxa,jmaxa<=P_full,J_full)
-  !   use futils
-  !   use initial_par
-  !   IMPLICIT NONE
-  !   ! Indices for row and columns of the COSOlver matrix (4D compressed 2D matrices)
-  !   INTEGER :: irow_sub, irow_full, icol_sub, icol_full
-  !   INTEGER :: fid1, fid2, fid3, fid4 ! file indexation
-  !
-  !   INTEGER :: ip_e, ij_e, il_e, ik_e, ikps_C, ikpe_C                  ! indices for electrons loops
-  !   INTEGER :: pdime, jdime                                            ! dimensions of the COSOlver matrices
-  !   REAL(dp), DIMENSION(:,:),   ALLOCATABLE :: Ceepj_full, CeipjT_full ! To load the entire matrix
-  !   REAL(dp), DIMENSION(:,:),   ALLOCATABLE :: CeipjF_full             ! ''
-  !   REAL(dp), DIMENSION(:,:,:), ALLOCATABLE :: Ceepj__kp, CeipjT_kp    ! To store the coeff that will be used along kperp
-  !   REAL(dp), DIMENSION(:,:,:), ALLOCATABLE :: CeipjF_kp               ! ''
-  !   INTEGER :: ip_i, ij_i, il_i, ik_i                                  ! same for ions
-  !   INTEGER :: pdimi, jdimi                                            ! .
-  !   REAL(dp), DIMENSION(:,:),   ALLOCATABLE :: Ciipj_full, CiepjT_full ! .
-  !   REAL(dp), DIMENSION(:,:),   ALLOCATABLE :: CiepjF_full             ! .
-  !   REAL(dp), DIMENSION(:,:,:), ALLOCATABLE :: Ciipj__kp, CiepjT_kp    ! .
-  !   REAL(dp), DIMENSION(:,:,:), ALLOCATABLE :: CiepjF_kp               ! .
-  !   INTEGER  :: NFLR
-  !
-  !   INTEGER  :: ikp_next, ikp_prev
-  !   REAL(dp) ::  kp_next,  kp_prev, kperp, zerotoone
-  !
-  !   CHARACTER(len=256) :: mat_filename, kperp_string, NFLR_string
-  !
-  !   LOGICAL     :: CO_AA_ONLY = .false. ! Flag to remove ei ie collision
-  !
-  !   !! Some terminal info
-  !   IF (CO .EQ. 2) THEN
-  !     IF (my_id .EQ. 0) WRITE(*,*) '=== Load GK Sugama matrix ==='
-  !   ELSEIF(CO .EQ. 3) THEN
-  !     IF (my_id .EQ. 0) WRITE(*,*) '=== Load GK Full Coulomb matrix ==='
-  !   ELSEIF(CO .EQ. -2) THEN
-  !     IF (my_id .EQ. 0) WRITE(*,*) '=== Load DK Sugama matrix ==='
-  !   ELSEIF(CO .EQ. -3) THEN
-  !     IF (my_id .EQ. 0) WRITE(*,*) '=== Load DK Full Coulomb matrix ==='
-  !   ENDIF
-  !
-  !   IF (CO .GT. 0) THEN ! GK operator (k-dependant)
-  !     ikps_C = ikps; ikpe_C = ikpe
-  !   ELSEIF (CO .LT. 0) THEN ! DK operator (only one mat for every k)
-  !     ikps_C = 1; ikpe_C = 1
-  !   ENDIF
-  !
-  !   CALL allocate_array(  Ceepj__kp, 1,(pmaxe+1)*(jmaxe+1), 1,(pmaxe+1)*(jmaxe+1), ikps_C,ikpe_C)
-  !   CALL allocate_array(  CeipjT_kp, 1,(pmaxe+1)*(jmaxe+1), 1,(pmaxe+1)*(jmaxe+1), ikps_C,ikpe_C)
-  !   CALL allocate_array(  CeipjF_kp, 1,(pmaxe+1)*(jmaxe+1), 1,(pmaxe+1)*(jmaxe+1), ikps_C,ikpe_C)
-  !   CALL allocate_array(  Ciipj__kp, 1,(pmaxe+1)*(jmaxe+1), 1,(pmaxe+1)*(jmaxe+1), ikps_C,ikpe_C)
-  !   CALL allocate_array(  CiepjT_kp, 1,(pmaxe+1)*(jmaxe+1), 1,(pmaxe+1)*(jmaxe+1), ikps_C,ikpe_C)
-  !   CALL allocate_array(  CiepjF_kp, 1,(pmaxe+1)*(jmaxe+1), 1,(pmaxe+1)*(jmaxe+1), ikps_C,ikpe_C)
-  !
-  !   DO ikp = ikps_C,ikpe_C ! Loop over everz kperp values
-  !     ! we put zeros if kp>2/3kpmax because thoses frequenvies are filtered through AA
-  !     IF(kparray(ikp) .GT. two_third_kpmax .AND. NON_LIN) THEN
-  !       CiepjT_kp(:,:,ikp) = 0._dp
-  !       CiepjF_kp(:,:,ikp) = 0._dp
-  !       CeipjT_kp(:,:,ikp) = 0._dp
-  !       CeipjF_kp(:,:,ikp) = 0._dp
-  !       Ceepj__kp(:,:,ikp) = 0._dp
-  !       Ciipj__kp(:,:,ikp) = 0._dp
-  !     ELSE
-  !       write(kperp_string,'(f6.4)') kparray(ikp)
-  !       NFLR = MIN(25,MAX(5,CEILING(kparray(ikp)**2)))
-  !       write(NFLR_string,'(i2.1)') NFLR
-  !       !!!!!!!!!!!! Electron matrices !!!!!!!!!!!!
-  !       ! get the self electron colision matrix
-  !       IF (CO .GT. 0) THEN
-  !         WRITE(mat_filename,'(a,a,a,a,a,a)') TRIM(selfmat_file),&
-  !             'NFLR_',TRIM(ADJUSTL(NFLR_string)),'_kperp_',TRIM(ADJUSTL(kperp_string)),'.h5'
-  !       ELSE
-  !         mat_filename = selfmat_file
-  !       ENDIF
-  !       ! write(*,*) 'loading ', mat_filename
-  !
-  !       CALL openf(mat_filename,fid1, 'r', 'D', mpicomm=comm_p);
-  !       CALL getatt(fid1,'/Caapj/Ceepj/','Pmaxe',pdime)
-  !       CALL getatt(fid1,'/Caapj/Ceepj/','Jmaxe',jdime)
-  !       IF ( ((pdime .LT. pmaxe) .OR. (jdime .LT. jmaxe)) .AND. (my_id .EQ. 0)) WRITE(*,*) '!! P,J Matrix too small !!'
-  !
-  !       CALL allocate_array(  Ceepj_full, 1,(pdime+1)*(jdime+1), 1,(pdime+1)*(jdime+1))
-  !       CALL getarr(fid1, '/Caapj/Ceepj', Ceepj_full) ! get array (moli format)
-  !       ! Fill sub array with only usefull polynmials degree
-  !       DO ip_e = 0,pmaxe ! Loop over rows
-  !       DO ij_e = 0,jmaxe
-  !             irow_sub  = (jmaxe +1)*ip_e + ij_e +1
-  !             irow_full = (jdime +1)*ip_e + ij_e +1
-  !             DO il_e = 0,pmaxe ! Loop over columns
-  !             DO ik_e = 0,jmaxe
-  !                   icol_sub  = (jmaxe +1)*il_e + ik_e +1
-  !                   icol_full = (jdime +1)*il_e + ik_e +1
-  !                   Ceepj__kp (irow_sub,icol_sub,ikp) = Ceepj_full (irow_full,icol_full)
-  !             ENDDO
-  !             ENDDO
-  !       ENDDO
-  !       ENDDO
-  !
-  !       CALL closef(fid1)
-  !       DEALLOCATE(Ceepj_full)
-  !
-  !       ! get the Test and Back field electron ion collision matrix
-  !       IF (CO .GT. 0) THEN
-  !         WRITE(mat_filename,'(a,a,a,a,a,a,a,a)') TRIM(eimat_file),&
-  !             'NFLRe_',TRIM(ADJUSTL(NFLR_string)),'_NFLRi_',TRIM(ADJUSTL(NFLR_string)),&
-  !             '_kperp_',TRIM(ADJUSTL(kperp_string)),'.h5'
-  !           ELSE
-  !         mat_filename = eimat_file
-  !       ENDIF
-  !
-  !       ! WRITE(*,*) 'loading : ', mat_filename
-  !
-  !       CALL openf(mat_filename,fid2, 'r', 'D', mpicomm=comm_p);
-  !
-  !       CALL getatt(fid2,'/Ceipj/CeipjT/','Pmaxi',pdimi)
-  !       CALL getatt(fid2,'/Ceipj/CeipjT/','Jmaxi',jdimi)
-  !       IF ( (pdimi .LT. pmaxi) .OR. (jdimi .LT. jmaxi) ) WRITE(*,*) '!! Sugama Matrix too small !!'
-  !
-  !       CALL allocate_array( CeipjT_full, 1,(pdime+1)*(jdime+1), 1,(pdime+1)*(jdime+1))
-  !       CALL allocate_array( CeipjF_full, 1,(pdime+1)*(jdime+1), 1,(pdimi+1)*(jdimi+1))
-  !
-  !       CALL getarr(fid2, '/Ceipj/CeipjT', CeipjT_full)
-  !       CALL getarr(fid2, '/Ceipj/CeipjF', CeipjF_full)
-  !
-  !       ! Fill sub array with only usefull polynmials degree
-  !       DO ip_e = 0,pmaxe ! Loop over rows
-  !       DO ij_e = 0,jmaxe
-  !             irow_sub  = (jmaxe +1)*ip_e + ij_e +1
-  !             irow_full = (jdime +1)*ip_e + ij_e +1
-  !             DO il_e = 0,pmaxe ! Loop over columns
-  !             DO ik_e = 0,jmaxe
-  !                   icol_sub  = (jmaxe +1)*il_e + ik_e +1
-  !                   icol_full = (jdime +1)*il_e + ik_e +1
-  !                   CeipjT_kp(irow_sub,icol_sub,ikp) = CeipjT_full(irow_full,icol_full)
-  !             ENDDO
-  !             ENDDO
-  !             DO il_i = 0,pmaxi ! Loop over columns
-  !             DO ik_i = 0,jmaxi
-  !                   icol_sub  = (Jmaxi +1)*il_i + ik_i +1
-  !                   icol_full = (jdimi +1)*il_i + ik_i +1
-  !                   CeipjF_kp(irow_sub,icol_sub,ikp) = CeipjF_full(irow_full,icol_full)
-  !             ENDDO
-  !             ENDDO
-  !       ENDDO
-  !       ENDDO
-  !
-  !       CALL closef(fid2)
-  !       DEALLOCATE(CeipjF_full)
-  !       DEALLOCATE(CeipjT_full)
-  !
-  !       !!!!!!!!!!!!!!! Ion matrices !!!!!!!!!!!!!!
-  !       ! get the self electron colision matrix
-  !       IF (CO .GT. 0) THEN
-  !         WRITE(mat_filename,'(a,a,a,a,a,a)') TRIM(selfmat_file),&
-  !             'NFLR_',TRIM(ADJUSTL(NFLR_string)),'_kperp_',TRIM(ADJUSTL(kperp_string)),'.h5'
-  !       ELSE
-  !         mat_filename = selfmat_file
-  !       ENDIF
-  !
-  !       ! WRITE(*,*) 'loading : ', mat_filename
-  !
-  !       CALL openf(mat_filename, fid3, 'r', 'D', mpicomm=comm_p);
-  !
-  !       CALL allocate_array(  Ciipj_full, 1,(pdimi+1)*(jdimi+1), 1,(pdimi+1)*(jdimi+1))
-  !
-  !       IF ( (pmaxe .EQ. pmaxi) .AND. (jmaxe .EQ. jmaxi) ) THEN ! if same degrees ion and electron matrices are alike so load Ceepj
-  !         CALL getarr(fid3, '/Caapj/Ceepj', Ciipj_full) ! get array (moli format)
-  !       ELSE
-  !         CALL getarr(fid3, '/Caapj/Ciipj', Ciipj_full) ! get array (moli format)
-  !       ENDIF
-  !
-  !       ! Fill sub array with only usefull polynmials degree
-  !       DO ip_i = 0,Pmaxi ! Loop over rows
-  !       DO ij_i = 0,Jmaxi
-  !             irow_sub  = (Jmaxi +1)*ip_i + ij_i +1
-  !             irow_full = (jdimi +1)*ip_i + ij_i +1
-  !             DO il_i = 0,Pmaxi ! Loop over columns
-  !             DO ik_i = 0,Jmaxi
-  !                   icol_sub  = (Jmaxi +1)*il_i + ik_i +1
-  !                   icol_full = (jdimi +1)*il_i + ik_i +1
-  !                   Ciipj__kp (irow_sub,icol_sub,ikp) = Ciipj_full (irow_full,icol_full)
-  !             ENDDO
-  !             ENDDO
-  !       ENDDO
-  !       ENDDO
-  !
-  !       CALL closef(fid3)
-  !       DEALLOCATE(Ciipj_full)
-  !
-  !       ! get the Test and Back field electron ion collision matrix
-  !       IF (CO .GT. 0) THEN
-  !         WRITE(mat_filename,'(a,a,a,a,a,a,a,a)') TRIM(iemat_file),&
-  !             'NFLRe_',TRIM(ADJUSTL(NFLR_string)),'_NFLRi_',TRIM(ADJUSTL(NFLR_string)),&
-  !             '_kperp_',TRIM(ADJUSTL(kperp_string)),'.h5'
-  !       ELSE
-  !         mat_filename = iemat_file
-  !       ENDIF
-  !
-  !       ! write(*,*) 'loading : ', mat_filename
-  !
-  !       CALL openf(mat_filename,fid4, 'r', 'D', mpicomm=comm_p);
-  !
-  !       CALL allocate_array( CiepjT_full, 1,(pdimi+1)*(jdimi+1), 1,(pdimi+1)*(jdimi+1))
-  !       CALL allocate_array( CiepjF_full, 1,(pdimi+1)*(jdimi+1), 1,(pdime+1)*(jdime+1))
-  !
-  !       CALL getarr(fid4, '/Ciepj/CiepjT', CiepjT_full)
-  !       CALL getarr(fid4, '/Ciepj/CiepjF', CiepjF_full)
-  !
-  !       ! Fill sub array with only usefull polynmials degree
-  !       DO ip_i = 0,Pmaxi ! Loop over rows
-  !       DO ij_i = 0,Jmaxi
-  !             irow_sub  = (Jmaxi +1)*ip_i + ij_i +1
-  !             irow_full = (jdimi +1)*ip_i + ij_i +1
-  !             DO il_i = 0,Pmaxi ! Loop over columns
-  !             DO ik_i = 0,Jmaxi
-  !                   icol_sub  = (Jmaxi +1)*il_i + ik_i +1
-  !                   icol_full = (jdimi +1)*il_i + ik_i +1
-  !                   CiepjT_kp(irow_sub,icol_sub,ikp) = CiepjT_full(irow_full,icol_full)
-  !             ENDDO
-  !             ENDDO
-  !             DO il_e = 0,pmaxe ! Loop over columns
-  !             DO ik_e = 0,jmaxe
-  !                   icol_sub  = (jmaxe +1)*il_e + ik_e +1
-  !                   icol_full = (jdime +1)*il_e + ik_e +1
-  !                   CiepjF_kp(irow_sub,icol_sub,ikp) = CiepjF_full(irow_full,icol_full)
-  !             ENDDO
-  !             ENDDO
-  !       ENDDO
-  !       ENDDO
-  !
-  !       CALL closef(fid4)
-  !       DEALLOCATE(CiepjF_full)
-  !       DEALLOCATE(CiepjT_full)
-  !     ENDIF
-  !   ENDDO
-  !
-  !   IF (CO .GT. 0) THEN ! Interpolation of the kperp matrix values on kr kz grid
-  !     IF (my_id .EQ. 0 ) WRITE(*,*) '...Interpolation from kperp to kr,kz...'
-  !     DO ikr = ikrs,ikre
-  !       DO ikz = ikzs,ikze
-  !         kperp = SQRT(krarray(ikr)**2+kzarray(ikz)**2)
-  !         ! Find correspondings previous and next kperp values of matrices grid
-  !         ikp_prev  = INT(  FLOOR(kperp/deltakr))+1
-  !         ikp_next  = INT(  FLOOR(kperp/deltakr))+2
-  !         ! 0->1 variable for linear interp
-  !         zerotoone = (kperp - kparray(ikp_prev))/(kparray(ikp_next) - kparray(ikp_prev))
-  !         ! Linear interpolation between previous and next kperp matrix values
-  !         Ceepj (:,:,ikr,ikz) = (Ceepj__kp(:,:,ikp_next) - Ceepj__kp(:,:,ikp_prev))*zerotoone + Ceepj__kp(:,:,ikp_prev)
-  !         CeipjT(:,:,ikr,ikz) = (CeipjT_kp(:,:,ikp_next) - CeipjT_kp(:,:,ikp_prev))*zerotoone + CeipjT_kp(:,:,ikp_prev)
-  !         CeipjF(:,:,ikr,ikz) = (CeipjF_kp(:,:,ikp_next) - CeipjF_kp(:,:,ikp_prev))*zerotoone + CeipjF_kp(:,:,ikp_prev)
-  !         Ciipj (:,:,ikr,ikz) = (Ciipj__kp(:,:,ikp_next) - Ciipj__kp(:,:,ikp_prev))*zerotoone + Ciipj__kp(:,:,ikp_prev)
-  !         CiepjT(:,:,ikr,ikz) = (CiepjT_kp(:,:,ikp_next) - CiepjT_kp(:,:,ikp_prev))*zerotoone + CiepjT_kp(:,:,ikp_prev)
-  !         CiepjF(:,:,ikr,ikz) = (CiepjF_kp(:,:,ikp_next) - CiepjF_kp(:,:,ikp_prev))*zerotoone + CiepjF_kp(:,:,ikp_prev)
-  !       ENDDO
-  !     ENDDO
-  !   ELSE ! DK -> No kperp dep, copy simply to final collision matrices
-  !     Ceepj (:,:,1,1) = Ceepj__kp (:,:,1)
-  !     CeipjT(:,:,1,1) = CeipjT_kp(:,:,1)
-  !     CeipjF(:,:,1,1) = CeipjF_kp(:,:,1)
-  !     Ciipj (:,:,1,1) = Ciipj__kp (:,:,1)
-  !     CiepjT(:,:,1,1) = CiepjT_kp(:,:,1)
-  !     CiepjF(:,:,1,1) = CiepjF_kp(:,:,1)
-  !   ENDIF
-  !   ! Deallocate auxiliary variables
-  !   DEALLOCATE (Ceepj__kp ); DEALLOCATE (CeipjT_kp); DEALLOCATE (CeipjF_kp)
-  !   DEALLOCATE (Ciipj__kp ); DEALLOCATE (CiepjT_kp); DEALLOCATE (CiepjF_kp)
-  !
-  !   IF( CO_AA_ONLY ) THEN
-  !     CeipjF = 0._dp;
-  !     CeipjT = 0._dp;
-  !     CiepjF = 0._dp;
-  !     CiepjT = 0._dp;
-  !   ENDIF
-  !
-  !   IF (my_id .EQ. 0) WRITE(*,*) '============DONE==========='
-  !
-  ! END SUBROUTINE load_COSOlver_mat_old
-  ! !******************************************************************************!
+    END SUBROUTINE load_COSOlver_mat
+    !******************************************************************************!
 
 end module collision
diff --git a/src/grid_mod.F90 b/src/grid_mod.F90
index 4ff723572b926c26e35ffe967eeed648dcd2b4d4..f37b79dd79fc72fbc9eacd3d2fa838fd1e9cebdd 100644
--- a/src/grid_mod.F90
+++ b/src/grid_mod.F90
@@ -48,7 +48,7 @@ MODULE grid
   REAL(dp), DIMENSION(:),   ALLOCATABLE, PUBLIC :: krarray
   REAL(dp), DIMENSION(:),   ALLOCATABLE, PUBLIC :: kzarray
   REAL(dp), DIMENSION(:),   ALLOCATABLE, PUBLIC :: kparray     ! kperp array
-  REAL(dp), PUBLIC, PROTECTED ::  deltakr, deltakz
+  REAL(dp), PUBLIC, PROTECTED ::  deltakr, deltakz, kr_max, kz_max, kp_max
   INTEGER,  PUBLIC, PROTECTED ::  ikrs, ikre, ikzs, ikze, ikps, ikpe
   INTEGER,  PUBLIC, PROTECTED :: ikr_0, ikz_0, ikr_max, ikz_max ! Indices of k-grid origin and max
   INTEGER,  PUBLIC :: ikr, ikz, ip, ij, ikp ! counters
@@ -163,8 +163,10 @@ CONTAINS
     ! Grid spacings
     IF (Lr .EQ. 0) THEN
       deltakr = 1._dp
+      kr_max  = 0._dp
     ELSE
       deltakr = 2._dp*PI/Lr
+      kr_max  = (Nr/2+1)*deltakr
     ENDIF
 
     ! Creating a grid ordered as dk*(0 1 2 3)
@@ -175,8 +177,8 @@ CONTAINS
         ikr_0 = ikr
         contains_kr0 = .true.
       ENDIF
-      ! Finding krmax
-      IF (krarray(ikr) .EQ. (Nr/2+1)*deltakr) THEN
+      ! Finding krmax idx
+      IF (krarray(ikr) .EQ. kr_max) THEN
         ikr_max = ikr
         contains_krmax = .true.
       ENDIF
@@ -212,6 +214,7 @@ CONTAINS
       ikz_max    = 1
     ELSE
       deltakz = 2._dp*PI/Lz
+      kz_max  = (Nz/2)*deltakr
       ! Creating a grid ordered as dk*(0 1 2 3 -2 -1)
       DO ikz = ikzs,ikze
         kzarray(ikz) = deltakz*(MODULO(ikz-1,Nkz/2)-Nkz/2*FLOOR(2.*real(ikz-1)/real(Nkz)))
@@ -219,7 +222,7 @@ CONTAINS
         ! Finding kz=0
         IF (kzarray(ikz) .EQ. 0) ikz_0 = ikz
         ! Finding kzmax
-        IF (kzarray(ikr) .EQ. (Nz/2)*deltakr) ikr_max = ikr
+        IF (kzarray(ikr) .EQ. kz_max) ikr_max = ikr
       END DO
     ENDIF
 
@@ -252,7 +255,8 @@ CONTAINS
       kparray(ikp) = REAL(ikp-1,dp) * deltakr
     ENDDO
     write(*,*) rank_kr, ': ikps = ', ikps, 'ikpe = ',ikpe
-    two_third_kpmax = SQRT(two_third_krmax**2+two_third_kzmax**2)    
+    two_third_kpmax = SQRT(two_third_krmax**2+two_third_kzmax**2)
+    kp_max = 3._dp/2._dp * two_third_kpmax
   END SUBROUTINE
 
   SUBROUTINE grid_readinputs
diff --git a/src/moments_eq_rhs.F90 b/src/moments_eq_rhs.F90
index d667d1867a7c856fe3478f157202f0203a8aa6bb..cb981270f524324c267e277f0e24a431c56aa310 100644
--- a/src/moments_eq_rhs.F90
+++ b/src/moments_eq_rhs.F90
@@ -57,21 +57,21 @@ SUBROUTINE moments_eq_rhs_e
       xNapj   = taue_qe_etaB * 2._dp*(p_dp + j_dp + 1._dp)
 
       !! Collision operator pj terms
-      xCapj = -nu_e*(p_dp + 2._dp*j_dp) !DK Lenard-Bernstein basis
+      xCapj = -nu_ee*(p_dp + 2._dp*j_dp) !DK Lenard-Bernstein basis
       ! Dougherty part
       IF ( CO .EQ. -2) THEN
         IF     ((p_int .EQ. 2) .AND. (j_int .EQ. 0)) THEN ! kronecker pj20
-          xCa20 = nu_e * 2._dp/3._dp
+          xCa20 = nu_ee * 2._dp/3._dp
           xCa01 = -SQRT2 * xCa20
           xCa10 = 0._dp
         ELSEIF ((p_int .EQ. 0) .AND. (j_int .EQ. 1)) THEN ! kronecker pj01
-          xCa20 = -nu_e * SQRT2 * 2._dp/3._dp
+          xCa20 = -nu_ee * SQRT2 * 2._dp/3._dp
           xCa01 = -SQRT2 * xCa20
           xCa10 = 0._dp
         ELSEIF ((p_int .EQ. 1) .AND. (j_int .EQ. 0)) THEN ! kronecker pj10
           xCa20 = 0._dp
           xCa01 = 0._dp
-          xCa10 = nu_e
+          xCa10 = nu_ee
         ELSE
           xCa20 = 0._dp; xCa01 = 0._dp; xCa10 = 0._dp
         ENDIF