From b68fdf207edd9df676a40f2b08500a483bc9aed0 Mon Sep 17 00:00:00 2001
From: Antoine Hoffmann <antoine.hoffmann@epfl.ch>
Date: Tue, 28 Mar 2023 17:07:43 +0200
Subject: [PATCH] Remove dp into xp which is meant to be set by user soon

---
 src/array_mod.F90              |  62 ++++-----
 src/basic_mod.F90              | 118 +++++++++---------
 src/calculus_mod.F90           | 108 ++++++++--------
 src/closure_mod.F90            |  16 +--
 src/coeff_mod.F90              |   8 +-
 src/collision_mod.F90          | 100 +++++++--------
 src/control.F90                |   4 +-
 src/cosolver_interface_mod.F90 |  38 +++---
 src/diagnose.F90               |  38 +++---
 src/fields_mod.F90             |   6 +-
 src/fourier_mod.F90            |   6 +-
 src/geometry_mod.F90           | 156 +++++++++++------------
 src/ghosts_mod.F90             |  18 +--
 src/grid_mod.F90               | 152 +++++++++++-----------
 src/inital.F90                 |  64 +++++-----
 src/initial_par_mod.F90        |   6 +-
 src/lag_interp_mod.F90         |  58 ++++-----
 src/miller_mod.F90             | 136 ++++++++++----------
 src/model_mod.F90              |  24 ++--
 src/moments_eq_rhs_mod.F90     |  42 +++----
 src/nonlinear_mod.F90          |  24 ++--
 src/numerics_mod.F90           | 140 ++++++++++-----------
 src/parallel_mod.F90           |  52 ++++----
 src/prec_const_mod.F90         |  98 ++++++++-------
 src/processing_mod.F90         | 136 ++++++++++----------
 src/restarts_mod.F90           |   8 +-
 src/solve_EM_fields.F90        |  20 +--
 src/species_mod.F90            |  66 +++++-----
 src/stepon.F90                 |   8 +-
 src/time_integration_mod.F90   | 222 ++++++++++++++++-----------------
 src/utility_mod.F90            |  16 +--
 wk/fast_analysis.m             |  11 +-
 32 files changed, 989 insertions(+), 972 deletions(-)

diff --git a/src/array_mod.F90 b/src/array_mod.F90
index f4878080..74916783 100644
--- a/src/array_mod.F90
+++ b/src/array_mod.F90
@@ -4,65 +4,65 @@ MODULE array
   implicit none
 
   ! Arrays to store the rhs, for time integration (ia,ip,ij,iky,ikx,iz)
-  COMPLEX(dp), DIMENSION(:,:,:,:,:,:,:), ALLOCATABLE :: moments_rhs
+  COMPLEX(xp), DIMENSION(:,:,:,:,:,:,:), ALLOCATABLE :: moments_rhs
 
   ! Arrays of non-adiabatique moments
-  COMPLEX(dp), DIMENSION(:,:,:,:,:,:), ALLOCATABLE :: nadiab_moments
+  COMPLEX(xp), DIMENSION(:,:,:,:,:,:), ALLOCATABLE :: nadiab_moments
 
   ! Derivatives and interpolated moments
-  COMPLEX(dp), DIMENSION(:,:,:,:,:,:), ALLOCATABLE :: ddz_napj
-  COMPLEX(dp), DIMENSION(:,:,:,:,:,:), ALLOCATABLE :: interp_napj
-  COMPLEX(dp), DIMENSION(:,:,:,:,:,:), ALLOCATABLE :: ddzND_Napj
+  COMPLEX(xp), DIMENSION(:,:,:,:,:,:), ALLOCATABLE :: ddz_napj
+  COMPLEX(xp), DIMENSION(:,:,:,:,:,:), ALLOCATABLE :: interp_napj
+  COMPLEX(xp), DIMENSION(:,:,:,:,:,:), ALLOCATABLE :: ddzND_Napj
 
   ! Non linear term array (ip,ij,iky,ikx,iz)
-  COMPLEX(dp), DIMENSION(:,:,:,:,:,:), ALLOCATABLE :: Sapj ! electron
+  COMPLEX(xp), DIMENSION(:,:,:,:,:,:), ALLOCATABLE :: Sapj ! electron
 
   ! a-a collision matrix (ia,ip,ij,iky,ikx,iz)
-  REAL(dp), DIMENSION(:,:,:,:,:,:), ALLOCATABLE :: Caa
+  REAL(xp), DIMENSION(:,:,:,:,:,:), ALLOCATABLE :: Caa
   ! Test and field collision matrices (ia,ib,ip,ij,iky,ikx,iz)
-  REAL(dp), DIMENSION(:,:,:,:,:,:,:), ALLOCATABLE :: Cab_F, Cab_T
+  REAL(xp), DIMENSION(:,:,:,:,:,:,:), ALLOCATABLE :: Cab_F, Cab_T
   ! nu x self collision matrix nuCself = nuaa*Caa + sum_b_neq_a nu_ab Cab_T
-  REAL(dp), DIMENSION(:,:,:,:,:,:), ALLOCATABLE :: nuCself
+  REAL(xp), DIMENSION(:,:,:,:,:,:), ALLOCATABLE :: nuCself
 
   ! Collision term (ip,ij,iky,ikx,iz)
-  COMPLEX(dp), DIMENSION(:,:,:,:,:,:), ALLOCATABLE :: Capj
-  COMPLEX(dp), DIMENSION(:,:,:,:,:), ALLOCATABLE   :: TColl_e_local, TColl_i_local
+  COMPLEX(xp), DIMENSION(:,:,:,:,:,:), ALLOCATABLE :: Capj
+  COMPLEX(xp), DIMENSION(:,:,:,:,:), ALLOCATABLE   :: TColl_e_local, TColl_i_local
 
   ! dnjs coefficient storage (in, ij, is)
-  COMPLEX(dp), DIMENSION(:,:,:), ALLOCATABLE :: dnjs
+  COMPLEX(xp), DIMENSION(:,:,:), ALLOCATABLE :: dnjs
 
   ! Hermite fourth derivative coeff storage 4*sqrt(p!/(p-4)!)
-  COMPLEX(dp), DIMENSION(:), ALLOCATABLE :: dv4_Hp_coeff
+  COMPLEX(xp), DIMENSION(:), ALLOCATABLE :: dv4_Hp_coeff
 
   ! lin rhs p,j coefficient storage (ip,ij)
-  REAL(dp), DIMENSION(:,:,:), ALLOCATABLE :: xnapj
-  REAL(dp), DIMENSION(:,:),   ALLOCATABLE :: xnapp1j, xnapp2j,   xnapm1j, xnapm2j, xnapjp1, xnapjm1
-  REAL(dp), DIMENSION(:,:,:), ALLOCATABLE :: ynapp1j, ynapm1j,   ynapp1jm1, ynapm1jm1 ! mirror lin coeff for non adiab mom
-  REAL(dp), DIMENSION(:,:,:), ALLOCATABLE :: zNapm1j, zNapm1jp1, zNapm1jm1            ! mirror lin coeff for adiab mom
-  REAL(dp), DIMENSION(:,:,:), ALLOCATABLE :: xphij, xphijp1, xphijm1
-  REAL(dp), DIMENSION(:,:,:), ALLOCATABLE :: xpsij, xpsijp1, xpsijm1
+  REAL(xp), DIMENSION(:,:,:), ALLOCATABLE :: xnapj
+  REAL(xp), DIMENSION(:,:),   ALLOCATABLE :: xnapp1j, xnapp2j,   xnapm1j, xnapm2j, xnapjp1, xnapjm1
+  REAL(xp), DIMENSION(:,:,:), ALLOCATABLE :: ynapp1j, ynapm1j,   ynapp1jm1, ynapm1jm1 ! mirror lin coeff for non adiab mom
+  REAL(xp), DIMENSION(:,:,:), ALLOCATABLE :: zNapm1j, zNapm1jp1, zNapm1jm1            ! mirror lin coeff for adiab mom
+  REAL(xp), DIMENSION(:,:,:), ALLOCATABLE :: xphij, xphijp1, xphijm1
+  REAL(xp), DIMENSION(:,:,:), ALLOCATABLE :: xpsij, xpsijp1, xpsijm1
   ! Kernel function evaluation (ia,ij,iky,ikx,iz,odd/even p)
-  REAL(dp), DIMENSION(:,:,:,:,:,:), ALLOCATABLE :: kernel
+  REAL(xp), DIMENSION(:,:,:,:,:,:), ALLOCATABLE :: kernel
 
   ! Poisson operator (iky,ikx,iz)
-  REAL(dp), DIMENSION(:,:,:), ALLOCATABLE :: inv_poisson_op
-  REAL(dp), DIMENSION(:,:,:), ALLOCATABLE :: inv_ampere_op
-  REAL(dp), DIMENSION(:,:,:), ALLOCATABLE :: inv_pol_ion
-  ! REAL(dp), DIMENSION(:,:,:), ALLOCATABLE :: HF_phi_correction_operator
+  REAL(xp), DIMENSION(:,:,:), ALLOCATABLE :: inv_poisson_op
+  REAL(xp), DIMENSION(:,:,:), ALLOCATABLE :: inv_ampere_op
+  REAL(xp), DIMENSION(:,:,:), ALLOCATABLE :: inv_pol_ion
+  ! REAL(xp), DIMENSION(:,:,:), ALLOCATABLE :: HF_phi_correction_operator
 
   ! Kinetic spectrum sum_kx,ky(|Napj(z)|^2), (ia,ip,ij,iz) (should be real)
-  REAL(dp), DIMENSION(:,:,:,:), ALLOCATABLE :: Napjz
+  REAL(xp), DIMENSION(:,:,:,:), ALLOCATABLE :: Napjz
 
   ! particle density for electron and ions (iky,ikx,iz)
-  COMPLEX(dp), DIMENSION(:,:,:,:), ALLOCATABLE :: dens
+  COMPLEX(xp), DIMENSION(:,:,:,:), ALLOCATABLE :: dens
 
   ! particle fluid velocity for electron and ions (iky,ikx,iz)
-  COMPLEX(dp), DIMENSION(:,:,:,:), ALLOCATABLE :: upar
-  COMPLEX(dp), DIMENSION(:,:,:,:), ALLOCATABLE :: uper
+  COMPLEX(xp), DIMENSION(:,:,:,:), ALLOCATABLE :: upar
+  COMPLEX(xp), DIMENSION(:,:,:,:), ALLOCATABLE :: uper
 
   ! particle temperature for electron and ions (iky,ikx,iz)
-  COMPLEX(dp), DIMENSION(:,:,:,:), ALLOCATABLE :: Tpar
-  COMPLEX(dp), DIMENSION(:,:,:,:), ALLOCATABLE :: Tper
-  COMPLEX(dp), DIMENSION(:,:,:,:), ALLOCATABLE :: temp
+  COMPLEX(xp), DIMENSION(:,:,:,:), ALLOCATABLE :: Tpar
+  COMPLEX(xp), DIMENSION(:,:,:,:), ALLOCATABLE :: Tper
+  COMPLEX(xp), DIMENSION(:,:,:,:), ALLOCATABLE :: temp
 
 END MODULE array
diff --git a/src/basic_mod.F90 b/src/basic_mod.F90
index cc1c14f0..0784de19 100644
--- a/src/basic_mod.F90
+++ b/src/basic_mod.F90
@@ -1,18 +1,18 @@
 MODULE basic
   !   Basic module for time dependent problems
   use, intrinsic :: iso_c_binding
-  use prec_const, ONLY : dp
+  use prec_const, ONLY : xp
   IMPLICIT none
   PRIVATE
   ! INCLUDE 'fftw3-mpi.f03'
   ! INPUT PARAMETERS
   INTEGER,  PUBLIC, PROTECTED :: nrun       = 1        ! Number of time steps to run
-  real(dp), PUBLIC, PROTECTED :: tmax       = 100000.0 ! Maximum simulation time
-  real(dp), PUBLIC, PROTECTED :: dt         = 1.0      ! Time step
-  real(dp), PUBLIC, PROTECTED :: maxruntime = 1e9      ! Maximum simulation CPU time
+  real(xp), PUBLIC, PROTECTED :: tmax       = 100000.0 ! Maximum simulation time
+  real(xp), PUBLIC, PROTECTED :: dt         = 1.0      ! Time step
+  real(xp), PUBLIC, PROTECTED :: maxruntime = 1e9      ! Maximum simulation CPU time
   INTEGER,  PUBLIC, PROTECTED :: job2load   = 99       ! jobnum of the checkpoint to load
   ! Auxiliary variables
-  real(dp), PUBLIC, PROTECTED :: time   = 0            ! Current simulation time (Init from restart file)
+  real(xp), PUBLIC, PROTECTED :: time   = 0            ! Current simulation time (Init from restart file)
 
   INTEGER, PUBLIC, PROTECTED  :: jobnum  = 0           ! Job number
   INTEGER, PUBLIC, PROTECTED  :: step    = 0           ! Calculation step of this run
@@ -32,9 +32,9 @@ MODULE basic
 
   ! To measure computation time
   type :: chrono
-    real(dp) :: tstart !start of the chrono
-    real(dp) :: tstop  !stop 
-    real(dp) :: ttot   !cumulative time
+    real(xp) :: tstart !start of the chrono
+    real(xp) :: tstop  !stop 
+    real(xp) :: ttot   !cumulative time
   end type chrono
 
   type(chrono), PUBLIC, PROTECTED :: chrono_runt, chrono_mrhs, chrono_advf, chrono_pois, chrono_sapj,&
@@ -47,8 +47,8 @@ MODULE basic
             set_basic_cp, daytim, start_chrono, stop_chrono
 
   INTERFACE allocate_array
-    MODULE PROCEDURE allocate_array_dp1,allocate_array_dp2,allocate_array_dp3, &
-                     allocate_array_dp4, allocate_array_dp5, allocate_array_dp6, allocate_array_dp7
+    MODULE PROCEDURE allocate_array_xp1,allocate_array_xp2,allocate_array_xp3, &
+                     allocate_array_xp4, allocate_array_xp5, allocate_array_xp6, allocate_array_xp7
     MODULE PROCEDURE allocate_array_dc1,allocate_array_dc2,allocate_array_dc3, &
                      allocate_array_dc4, allocate_array_dc5, allocate_array_dc6, allocate_array_dc7
     MODULE PROCEDURE allocate_array_i1,allocate_array_i2,allocate_array_i3,allocate_array_i4
@@ -56,7 +56,7 @@ MODULE basic
   END INTERFACE allocate_array
 
   INTERFACE str
-    MODULE PROCEDURE str_dp, str_int
+    MODULE PROCEDURE str_xp, str_int
   END INTERFACE
 
 CONTAINS
@@ -125,7 +125,7 @@ CONTAINS
   END SUBROUTINE
   SUBROUTINE set_basic_cp(cstep_cp,time_cp,jobnum_cp)
     IMPLICIT NONE
-    REAL(dp), INTENT(IN) :: time_cp
+    REAL(xp), INTENT(IN) :: time_cp
     INTEGER,  INTENT(IN) :: cstep_cp, jobnum_cp
     cstep  = cstep_cp
     time   = time_cp
@@ -196,7 +196,7 @@ CONTAINS
   SUBROUTINE display_h_min_s(time)
     USE parallel, ONLY: my_id
     IMPLICIT NONE
-    real(dp) :: time
+    real(xp) :: time
     integer  :: days, hours, mins, secs
     days = FLOOR(time/24./3600.);
     hours= FLOOR(time/3600.);
@@ -228,13 +228,13 @@ CONTAINS
   END SUBROUTINE display_h_min_s
 !================================================================================
 
-  function str_dp(k) result( str_ )
+  function str_xp(k) result( str_ )
   !   "Convert an integer to string."
-      REAL(dp), intent(in) :: k
+      REAL(xp), intent(in) :: k
       character(len=10):: str_
       write (str_, "(G10.2)") k
       str_ = adjustl(str_)
-  end function str_dp
+  end function str_xp
 
   function str_int(k) result( str_ )
   !   "Convert an integer to string."
@@ -245,117 +245,117 @@ CONTAINS
   end function str_int
 
 ! To allocate arrays of doubles, integers, etc. at run time
-  SUBROUTINE allocate_array_dp1(a,is1,ie1)
+  SUBROUTINE allocate_array_xp1(a,is1,ie1)
     IMPLICIT NONE
-    real(dp), DIMENSION(:), ALLOCATABLE, INTENT(INOUT) :: a
+    real(xp), DIMENSION(:), ALLOCATABLE, INTENT(INOUT) :: a
     INTEGER, INTENT(IN) :: is1,ie1
     ALLOCATE(a(is1:ie1))
-    a=0.0_dp
-  END SUBROUTINE allocate_array_dp1
+    a=0.0_xp
+  END SUBROUTINE allocate_array_xp1
 
-  SUBROUTINE allocate_array_dp2(a,is1,ie1,is2,ie2)
+  SUBROUTINE allocate_array_xp2(a,is1,ie1,is2,ie2)
     IMPLICIT NONE
-    real(dp), DIMENSION(:,:), ALLOCATABLE, INTENT(INOUT) :: a
+    real(xp), DIMENSION(:,:), ALLOCATABLE, INTENT(INOUT) :: a
     INTEGER, INTENT(IN) :: is1,ie1,is2,ie2
     ALLOCATE(a(is1:ie1,is2:ie2))
-    a=0.0_dp
-  END SUBROUTINE allocate_array_dp2
+    a=0.0_xp
+  END SUBROUTINE allocate_array_xp2
 
-  SUBROUTINE allocate_array_dp3(a,is1,ie1,is2,ie2,is3,ie3)
+  SUBROUTINE allocate_array_xp3(a,is1,ie1,is2,ie2,is3,ie3)
     IMPLICIT NONE
-    real(dp), DIMENSION(:,:,:), ALLOCATABLE, INTENT(INOUT) :: a
+    real(xp), DIMENSION(:,:,:), ALLOCATABLE, INTENT(INOUT) :: a
     INTEGER, INTENT(IN) :: is1,ie1,is2,ie2,is3,ie3
     ALLOCATE(a(is1:ie1,is2:ie2,is3:ie3))
-    a=0.0_dp
-  END SUBROUTINE allocate_array_dp3
+    a=0.0_xp
+  END SUBROUTINE allocate_array_xp3
 
-  SUBROUTINE allocate_array_dp4(a,is1,ie1,is2,ie2,is3,ie3,is4,ie4)
+  SUBROUTINE allocate_array_xp4(a,is1,ie1,is2,ie2,is3,ie3,is4,ie4)
     IMPLICIT NONE
-    real(dp), DIMENSION(:,:,:,:), ALLOCATABLE, INTENT(INOUT) :: a
+    real(xp), DIMENSION(:,:,:,:), ALLOCATABLE, INTENT(INOUT) :: a
     INTEGER, INTENT(IN) :: is1,ie1,is2,ie2,is3,ie3,is4,ie4
     ALLOCATE(a(is1:ie1,is2:ie2,is3:ie3,is4:ie4))
-    a=0.0_dp
-  END SUBROUTINE allocate_array_dp4
+    a=0.0_xp
+  END SUBROUTINE allocate_array_xp4
 
-  SUBROUTINE allocate_array_dp5(a,is1,ie1,is2,ie2,is3,ie3,is4,ie4,is5,ie5)
+  SUBROUTINE allocate_array_xp5(a,is1,ie1,is2,ie2,is3,ie3,is4,ie4,is5,ie5)
     IMPLICIT NONE
-    real(dp), DIMENSION(:,:,:,:,:), ALLOCATABLE, INTENT(INOUT) :: a
+    real(xp), DIMENSION(:,:,:,:,:), ALLOCATABLE, INTENT(INOUT) :: a
     INTEGER, INTENT(IN) :: is1,ie1,is2,ie2,is3,ie3,is4,ie4,is5,ie5
     ALLOCATE(a(is1:ie1,is2:ie2,is3:ie3,is4:ie4,is5:ie5))
-    a=0.0_dp
-  END SUBROUTINE allocate_array_dp5
+    a=0.0_xp
+  END SUBROUTINE allocate_array_xp5
 
-  SUBROUTINE allocate_array_dp6(a,is1,ie1,is2,ie2,is3,ie3,is4,ie4,is5,ie5,is6,ie6)
+  SUBROUTINE allocate_array_xp6(a,is1,ie1,is2,ie2,is3,ie3,is4,ie4,is5,ie5,is6,ie6)
     IMPLICIT NONE
-    real(dp), DIMENSION(:,:,:,:,:,:), ALLOCATABLE, INTENT(INOUT) :: a
+    real(xp), DIMENSION(:,:,:,:,:,:), ALLOCATABLE, INTENT(INOUT) :: a
     INTEGER, INTENT(IN) :: is1,ie1,is2,ie2,is3,ie3,is4,ie4,is5,ie5,is6,ie6
     ALLOCATE(a(is1:ie1,is2:ie2,is3:ie3,is4:ie4,is5:ie5,is6:ie6))
-    a=0.0_dp
-  END SUBROUTINE allocate_array_dp6
+    a=0.0_xp
+  END SUBROUTINE allocate_array_xp6
 
-  SUBROUTINE allocate_array_dp7(a,is1,ie1,is2,ie2,is3,ie3,is4,ie4,is5,ie5,is6,ie6,is7,ie7)
+  SUBROUTINE allocate_array_xp7(a,is1,ie1,is2,ie2,is3,ie3,is4,ie4,is5,ie5,is6,ie6,is7,ie7)
     IMPLICIT NONE
-    REAL(dp), DIMENSION(:,:,:,:,:,:,:), ALLOCATABLE, INTENT(INOUT) :: a
+    REAL(xp), DIMENSION(:,:,:,:,:,:,:), ALLOCATABLE, INTENT(INOUT) :: a
     INTEGER, INTENT(IN) :: is1,ie1,is2,ie2,is3,ie3,is4,ie4,is5,ie5,is6,ie6,is7,ie7
     ALLOCATE(a(is1:ie1,is2:ie2,is3:ie3,is4:ie4,is5:ie5,is6:ie6,is7:ie7))
-    a=0.0_dp
-  END SUBROUTINE allocate_array_dp7
+    a=0.0_xp
+  END SUBROUTINE allocate_array_xp7
   !========================================
 
   SUBROUTINE allocate_array_dc1(a,is1,ie1)
     IMPLICIT NONE
-    COMPLEX(dp), DIMENSION(:), ALLOCATABLE, INTENT(INOUT) :: a
+    COMPLEX(xp), DIMENSION(:), ALLOCATABLE, INTENT(INOUT) :: a
     INTEGER, INTENT(IN) :: is1,ie1
     ALLOCATE(a(is1:ie1))
-    a=CMPLX(0.0_dp,0.0_dp)
+    a=CMPLX(0.0_xp,0.0_xp)
   END SUBROUTINE allocate_array_dc1
 
   SUBROUTINE allocate_array_dc2(a,is1,ie1,is2,ie2)
     IMPLICIT NONE
-    COMPLEX(dp), DIMENSION(:,:), ALLOCATABLE, INTENT(INOUT) :: a
+    COMPLEX(xp), DIMENSION(:,:), ALLOCATABLE, INTENT(INOUT) :: a
     INTEGER, INTENT(IN) :: is1,ie1,is2,ie2
     ALLOCATE(a(is1:ie1,is2:ie2))
-    a=CMPLX(0.0_dp,0.0_dp)
+    a=CMPLX(0.0_xp,0.0_xp)
   END SUBROUTINE allocate_array_dc2
 
   SUBROUTINE allocate_array_dc3(a,is1,ie1,is2,ie2,is3,ie3)
     IMPLICIT NONE
-    COMPLEX(dp), DIMENSION(:,:,:), ALLOCATABLE, INTENT(INOUT) :: a
+    COMPLEX(xp), DIMENSION(:,:,:), ALLOCATABLE, INTENT(INOUT) :: a
     INTEGER, INTENT(IN) :: is1,ie1,is2,ie2,is3,ie3
     ALLOCATE(a(is1:ie1,is2:ie2,is3:ie3))
-    a=CMPLX(0.0_dp,0.0_dp)
+    a=CMPLX(0.0_xp,0.0_xp)
   END SUBROUTINE allocate_array_dc3
 
   SUBROUTINE allocate_array_dc4(a,is1,ie1,is2,ie2,is3,ie3,is4,ie4)
     IMPLICIT NONE
-    COMPLEX(dp), DIMENSION(:,:,:,:), ALLOCATABLE, INTENT(INOUT) :: a
+    COMPLEX(xp), DIMENSION(:,:,:,:), ALLOCATABLE, INTENT(INOUT) :: a
     INTEGER, INTENT(IN) :: is1,ie1,is2,ie2,is3,ie3,is4,ie4
     ALLOCATE(a(is1:ie1,is2:ie2,is3:ie3,is4:ie4))
-    a=CMPLX(0.0_dp,0.0_dp)
+    a=CMPLX(0.0_xp,0.0_xp)
   END SUBROUTINE allocate_array_dc4
 
   SUBROUTINE allocate_array_dc5(a,is1,ie1,is2,ie2,is3,ie3,is4,ie4,is5,ie5)
     IMPLICIT NONE
-    COMPLEX(dp), DIMENSION(:,:,:,:,:), ALLOCATABLE, INTENT(INOUT) :: a
+    COMPLEX(xp), DIMENSION(:,:,:,:,:), ALLOCATABLE, INTENT(INOUT) :: a
     INTEGER, INTENT(IN) :: is1,ie1,is2,ie2,is3,ie3,is4,ie4,is5,ie5
     ALLOCATE(a(is1:ie1,is2:ie2,is3:ie3,is4:ie4,is5:ie5))
-    a=CMPLX(0.0_dp,0.0_dp)
+    a=CMPLX(0.0_xp,0.0_xp)
   END SUBROUTINE allocate_array_dc5
 
   SUBROUTINE allocate_array_dc6(a,is1,ie1,is2,ie2,is3,ie3,is4,ie4,is5,ie5,is6,ie6)
     IMPLICIT NONE
-    COMPLEX(dp), DIMENSION(:,:,:,:,:,:), ALLOCATABLE, INTENT(INOUT) :: a
+    COMPLEX(xp), DIMENSION(:,:,:,:,:,:), ALLOCATABLE, INTENT(INOUT) :: a
     INTEGER, INTENT(IN) :: is1,ie1,is2,ie2,is3,ie3,is4,ie4,is5,ie5,is6,ie6
     ALLOCATE(a(is1:ie1,is2:ie2,is3:ie3,is4:ie4,is5:ie5,is6:ie6))
-    a=CMPLX(0.0_dp,0.0_dp)
+    a=CMPLX(0.0_xp,0.0_xp)
   END SUBROUTINE allocate_array_dc6
 
   SUBROUTINE allocate_array_dc7(a,is1,ie1,is2,ie2,is3,ie3,is4,ie4,is5,ie5,is6,ie6,is7,ie7)
     IMPLICIT NONE
-    COMPLEX(dp), DIMENSION(:,:,:,:,:,:,:), ALLOCATABLE, INTENT(INOUT) :: a
+    COMPLEX(xp), DIMENSION(:,:,:,:,:,:,:), ALLOCATABLE, INTENT(INOUT) :: a
     INTEGER, INTENT(IN) :: is1,ie1,is2,ie2,is3,ie3,is4,ie4,is5,ie5,is6,ie6,is7,ie7
     ALLOCATE(a(is1:ie1,is2:ie2,is3:ie3,is4:ie4,is5:ie5,is6:ie6,is7:ie7))
-    a=CMPLX(0.0_dp,0.0_dp)
+    a=CMPLX(0.0_xp,0.0_xp)
   END SUBROUTINE allocate_array_dc7
   !========================================
 
@@ -393,7 +393,7 @@ CONTAINS
 
   SUBROUTINE allocate_array_i5(a,is1,ie1,is2,ie2,is3,ie3,is4,ie4,is5,ie5)
     IMPLICIT NONE
-    real(dp), DIMENSION(:,:,:,:,:), ALLOCATABLE, INTENT(INOUT) :: a
+    INTEGER, DIMENSION(:,:,:,:,:), ALLOCATABLE, INTENT(INOUT) :: a
     INTEGER, INTENT(IN) :: is1,ie1,is2,ie2,is3,ie3,is4,ie4,is5,ie5
     ALLOCATE(a(is1:ie1,is2:ie2,is3:ie3,is4:ie4,is5:ie5))
     a=0
diff --git a/src/calculus_mod.F90 b/src/calculus_mod.F90
index a6c75d03..1e186bcb 100644
--- a/src/calculus_mod.F90
+++ b/src/calculus_mod.F90
@@ -1,21 +1,21 @@
 MODULE calculus
   ! Routine to evaluate gradients, interpolation schemes and integrals
-  USE prec_const, ONLY: dp
+  USE prec_const, ONLY: xp
   IMPLICIT NONE
-  REAL(dp), dimension(-2:2) :: dz_usu = &
-   (/  1._dp/12._dp, -2._dp/3._dp, 0._dp, 2._dp/3._dp, -1._dp/12._dp /) ! fd4 centered stencil
-  REAL(dp), dimension(-2:1) :: dz_o2e = &
-   (/ 1._dp/24._dp,-9._dp/8._dp, 9._dp/8._dp,-1._dp/24._dp /) ! fd4 odd to even stencil
-  REAL(dp), dimension(-1:2) :: dz_e2o = &
-   (/ 1._dp/24._dp,-9._dp/8._dp, 9._dp/8._dp,-1._dp/24._dp /) ! fd4 odd to even stencil
-   REAL(dp), dimension(-2:2) :: dz2_usu = &
-   (/-1._dp/12._dp, 4._dp/3._dp, -5._dp/2._dp, 4._dp/3._dp, -1._dp/12._dp /)! 2th derivative, 4th order (for parallel hypdiff)
-   REAL(dp), dimension(-2:2) :: dz4_usu = &
-   (/  1._dp, -4._dp, 6._dp, -4._dp, 1._dp /) ! 4th derivative, 2nd order (for parallel hypdiff)
-   REAL(dp), dimension(-2:1) :: iz_o2e = &
-   (/ -1._dp/16._dp, 9._dp/16._dp, 9._dp/16._dp, -1._dp/16._dp /) ! grid interpolation, 4th order, odd to even
-   REAL(dp), dimension(-1:2) :: iz_e2o = &
-   (/ -1._dp/16._dp, 9._dp/16._dp, 9._dp/16._dp, -1._dp/16._dp /) ! grid interpolation, 4th order, even to odd
+  REAL(xp), dimension(-2:2) :: dz_usu = &
+   (/  1._xp/12._xp, -2._xp/3._xp, 0._xp, 2._xp/3._xp, -1._xp/12._xp /) ! fd4 centered stencil
+  REAL(xp), dimension(-2:1) :: dz_o2e = &
+   (/ 1._xp/24._xp,-9._xp/8._xp, 9._xp/8._xp,-1._xp/24._xp /) ! fd4 odd to even stencil
+  REAL(xp), dimension(-1:2) :: dz_e2o = &
+   (/ 1._xp/24._xp,-9._xp/8._xp, 9._xp/8._xp,-1._xp/24._xp /) ! fd4 odd to even stencil
+   REAL(xp), dimension(-2:2) :: dz2_usu = &
+   (/-1._xp/12._xp, 4._xp/3._xp, -5._xp/2._xp, 4._xp/3._xp, -1._xp/12._xp /)! 2th derivative, 4th order (for parallel hypdiff)
+   REAL(xp), dimension(-2:2) :: dz4_usu = &
+   (/  1._xp, -4._xp, 6._xp, -4._xp, 1._xp /) ! 4th derivative, 2nd order (for parallel hypdiff)
+   REAL(xp), dimension(-2:1) :: iz_o2e = &
+   (/ -1._xp/16._xp, 9._xp/16._xp, 9._xp/16._xp, -1._xp/16._xp /) ! grid interpolation, 4th order, odd to even
+   REAL(xp), dimension(-1:2) :: iz_e2o = &
+   (/ -1._xp/16._xp, 9._xp/16._xp, 9._xp/16._xp, -1._xp/16._xp /) ! grid interpolation, 4th order, even to odd
   PUBLIC :: simpson_rule_z, interp_z, grad_z, grad_z4, grad_z_5D, grad_z4_5D
 
 CONTAINS
@@ -27,9 +27,9 @@ SUBROUTINE grad_z(target,local_nz,ngz,inv_deltaz,f,ddzf)
   ! 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
-  REAL(dp), INTENT(IN) :: inv_deltaz
-  COMPLEX(dp),dimension(local_nz+ngz), INTENT(IN)  :: f
-  COMPLEX(dp),dimension(local_nz),     INTENT(OUT) :: ddzf
+  REAL(xp), INTENT(IN) :: inv_deltaz
+  COMPLEX(xp),dimension(local_nz+ngz), INTENT(IN)  :: f
+  COMPLEX(xp),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)
@@ -46,16 +46,16 @@ SUBROUTINE grad_z(target,local_nz,ngz,inv_deltaz,f,ddzf)
       ddzf(:) = ddzf(:) * inv_deltaz
     END SELECT
   ELSE
-    ddzf = 0._dp
+    ddzf = 0._xp
   ENDIF
 CONTAINS
   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
-    REAL(dp), INTENT(IN) :: inv_deltaz
-    COMPLEX(dp),dimension(local_nz+ngz), INTENT(IN)  :: fo
-    COMPLEX(dp),dimension(local_nz),     INTENT(OUT) :: ddzfe !
+    REAL(xp), INTENT(IN) :: inv_deltaz
+    COMPLEX(xp),dimension(local_nz+ngz), INTENT(IN)  :: fo
+    COMPLEX(xp),dimension(local_nz),     INTENT(OUT) :: ddzfe !
     INTEGER :: iz
     DO iz = 1,local_nz
      ddzfe(iz) = dz_o2e(-2)*fo(iz  ) + dz_o2e(-1)*fo(iz+1) &
@@ -68,9 +68,9 @@ CONTAINS
     ! gives the gradient of a field from the even grid to the odd one
     implicit none
     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
+    REAL(xp), INTENT(IN) :: inv_deltaz
+    COMPLEX(xp),dimension(local_nz+ngz), INTENT(IN)  :: fe
+    COMPLEX(xp),dimension(local_nz),     INTENT(OUT) :: ddzfo
     INTEGER :: iz
     DO iz = 1,local_nz
      ddzfo(iz) = dz_e2o(-1)*fe(iz+1) + dz_e2o(0)*fe(iz+2) &
@@ -87,9 +87,9 @@ SUBROUTINE grad_z_5D(local_nz,ngz,inv_deltaz,f,ddzf)
   ! 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) :: local_nz, ngz
-  REAL(dp), INTENT(IN) :: inv_deltaz
-  COMPLEX(dp),dimension(:,:,:,:,:,:), INTENT(IN)  :: f
-  COMPLEX(dp),dimension(:,:,:,:,:,:),     INTENT(OUT) :: ddzf
+  REAL(xp), INTENT(IN) :: inv_deltaz
+  COMPLEX(xp),dimension(:,:,:,:,:,:), INTENT(IN)  :: f
+  COMPLEX(xp),dimension(:,:,:,:,:,:),     INTENT(OUT) :: ddzf
   INTEGER :: iz
   IF(ngz .GT. 3) THEN ! Cannot apply four points stencil on less than four points grid
     DO iz = 1,local_nz
@@ -99,7 +99,7 @@ SUBROUTINE grad_z_5D(local_nz,ngz,inv_deltaz,f,ddzf)
         +dz_usu( 1)*f(:,:,:,:,:,iz+3) + dz_usu( 2)*f(:,:,:,:,:,iz+4))
     ENDDO
   ELSE
-    ddzf = 0._dp
+    ddzf = 0._xp
   ENDIF
 END SUBROUTINE grad_z_5D
 
@@ -108,9 +108,9 @@ 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
-  REAL(dp), INTENT(IN) :: inv_deltaz
-  COMPLEX(dp),dimension(local_nz+ngz), INTENT(IN)  :: f
-  COMPLEX(dp),dimension(local_nz),     INTENT(OUT) :: ddz2f
+  REAL(xp), INTENT(IN) :: inv_deltaz
+  COMPLEX(xp),dimension(local_nz+ngz), INTENT(IN)  :: f
+  COMPLEX(xp),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
@@ -119,7 +119,7 @@ SUBROUTINE grad_z2(local_nz,ngz,inv_deltaz,f,ddz2f)
                   +dz2_usu( 1)*f(iz+3) + dz2_usu( 2)*f(iz+4)
       ENDDO
   ELSE
-    ddz2f = 0._dp
+    ddz2f = 0._xp
   ENDIF
   ddz2f = ddz2f * inv_deltaz**2
 END SUBROUTINE grad_z2
@@ -128,9 +128,9 @@ SUBROUTINE grad_z4_5D(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
-  REAL(dp), INTENT(IN) :: inv_deltaz
-  COMPLEX(dp),dimension(:,:,:,:,:,:), INTENT(IN)  :: f
-  COMPLEX(dp),dimension(:,:,:,:,:,:),     INTENT(OUT) :: ddz4f
+  REAL(xp), INTENT(IN) :: inv_deltaz
+  COMPLEX(xp),dimension(:,:,:,:,:,:), INTENT(IN)  :: f
+  COMPLEX(xp),dimension(:,:,:,:,:,:),     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
@@ -140,7 +140,7 @@ SUBROUTINE grad_z4_5D(local_nz,ngz,inv_deltaz,f,ddz4f)
           +dz4_usu( 1)*f(:,:,:,:,:,iz+3) + dz4_usu( 2)*f(:,:,:,:,:,iz+4))
       ENDDO
   ELSE
-    ddz4f = 0._dp
+    ddz4f = 0._xp
   ENDIF
 END SUBROUTINE grad_z4_5D
 
@@ -148,9 +148,9 @@ 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
-  REAL(dp), INTENT(IN) :: inv_deltaz
-  COMPLEX(dp),dimension(local_nz+ngz), INTENT(IN)  :: f
-  COMPLEX(dp),dimension(local_nz),     INTENT(OUT) :: ddz4f
+  REAL(xp), INTENT(IN) :: inv_deltaz
+  COMPLEX(xp),dimension(local_nz+ngz), INTENT(IN)  :: f
+  COMPLEX(xp),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
@@ -159,7 +159,7 @@ SUBROUTINE grad_z4(local_nz,ngz,inv_deltaz,f,ddz4f)
                   +dz4_usu( 1)*f(iz+3) + dz4_usu( 2)*f(iz+4)
       ENDDO
   ELSE
-    ddz4f = 0._dp
+    ddz4f = 0._xp
   ENDIF
   ddz4f = ddz4f * inv_deltaz**4
 END SUBROUTINE grad_z4
@@ -172,8 +172,8 @@ SUBROUTINE interp_z(target,local_nz,ngz,f_in,f_out)
   implicit none
   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(xp),dimension(local_nz+ngz), INTENT(IN)  :: f_in
+  COMPLEX(xp),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)
@@ -187,8 +187,8 @@ CONTAINS
    ! 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
+   COMPLEX(xp),dimension(local_nz+ngz), INTENT(IN)  :: fo
+   COMPLEX(xp),dimension(local_nz),     INTENT(OUT) :: fe
    INTEGER :: iz
    ! 4th order interp
    DO iz = 1,local_nz
@@ -201,8 +201,8 @@ CONTAINS
    ! 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
+   COMPLEX(xp),dimension(local_nz+ngz), INTENT(IN)  :: fe
+   COMPLEX(xp),dimension(local_nz),     INTENT(OUT) :: fo
    INTEGER :: iz
    ! 4th order interp
    DO iz = 1,local_nz
@@ -216,25 +216,25 @@ END SUBROUTINE interp_z
 SUBROUTINE simpson_rule_z(local_nz,zweights_SR,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 prec_const, ONLY: xp, onethird
   USE parallel,   ONLY: num_procs_z, rank_z, comm_z, manual_0D_bcast
   USE mpi
   implicit none
   INTEGER, INTENT(IN) :: local_nz
-  REAL(dp),   dimension(local_nz), intent(in) :: zweights_SR
-  complex(dp),dimension(local_nz), intent(in) :: f
-  COMPLEX(dp), intent(out) :: intf
-  COMPLEX(dp)              :: buffer, local_int
+  REAL(xp),   dimension(local_nz), intent(in) :: zweights_SR
+  complex(xp),dimension(local_nz), intent(in) :: f
+  COMPLEX(xp), intent(out) :: intf
+  COMPLEX(xp)              :: buffer, local_int
   INTEGER :: root, i_, iz, ierr
   ! Buil local sum using the weights of composite Simpson's rule
-  local_int = 0._dp
+  local_int = 0._xp
   DO iz = 1,local_nz
       local_int = local_int + zweights_SR(iz)*f(iz)
   ENDDO
   buffer = local_int
   root = 0
   !Gather manually among the rank_z=0 processes and perform the sum
-  intf = 0._dp
+  intf = 0._xp
   IF (num_procs_z .GT. 1) THEN
       !! Everyone sends its local_sum to root = 0
       IF (rank_z .NE. root) THEN
diff --git a/src/closure_mod.F90 b/src/closure_mod.F90
index cd6e231a..9180feeb 100644
--- a/src/closure_mod.F90
+++ b/src/closure_mod.F90
@@ -8,7 +8,7 @@ CONTAINS
 
 ! Positive Oob indices are approximated with a model
 SUBROUTINE apply_closure_model
-  USE prec_const, ONLY: dp
+  USE prec_const, ONLY: xp
   USE model,      ONLY: CLOS
   USE grid,       ONLY: local_nj,ngj, jarray,&
                         local_np,ngp, parray, dmax
@@ -28,7 +28,7 @@ SUBROUTINE apply_closure_model
     j: DO ij = 1,local_nj+ngj
     p: DO ip = 1,local_np+ngp
       IF ( parray(ip)+2*jarray(ij) .GT. dmax) THEN
-        moments(ia,ip,ij,:,:,:,updatetlevel) = 0._dp
+        moments(ia,ip,ij,:,:,:,updatetlevel) = 0._xp
       ENDIF
     ENDDO p
     ENDDO j
@@ -40,7 +40,7 @@ END SUBROUTINE apply_closure_model
 
 ! Positive Oob indices are approximated with a model
 SUBROUTINE ghosts_upper_truncation
-  USE prec_const, ONLY: dp
+  USE prec_const, ONLY: xp
   USE grid,       ONLY: local_np,ngp,local_pmax, pmax,&
                         local_nj,ngj,local_jmax, jmax
   USE fields,           ONLY: moments
@@ -51,20 +51,20 @@ SUBROUTINE ghosts_upper_truncation
     ! applies only for the processes that evolve the highest moment degree
     IF(local_jmax .GE. Jmax) THEN
       DO ig = 1,ngj/2
-        moments(:,:,local_nj+ngj/2+ig,:,:,:,updatetlevel) = 0._dp
+        moments(:,:,local_nj+ngj/2+ig,:,:,:,updatetlevel) = 0._xp
       ENDDO
     ENDIF
     ! applies only for the process that has largest p index
     IF(local_pmax .GE. Pmax) THEN
       DO ig = 1,ngp/2
-        moments(:,local_np+ngp/2+ig,:,:,:,:,updatetlevel) = 0._dp
+        moments(:,local_np+ngp/2+ig,:,:,:,:,updatetlevel) = 0._xp
       ENDDO
     ENDIF
 END SUBROUTINE ghosts_upper_truncation
 
 ! Negative OoB indices are 0
 SUBROUTINE ghosts_lower_truncation
-  USE prec_const, ONLY: dp
+  USE prec_const, ONLY: xp
   USE grid,       ONLY: ngp,ngj,local_pmin,local_jmin
   USE fields,           ONLY: moments
   USE time_integration, ONLY: updatetlevel
@@ -73,13 +73,13 @@ SUBROUTINE ghosts_lower_truncation
 ! zero truncation, An=0 for n<0
     IF(local_jmin .EQ. 0) THEN
       DO ig  = 1,ngj/2
-        moments(:,:,ig,:,:,:,updatetlevel) = 0._dp
+        moments(:,:,ig,:,:,:,updatetlevel) = 0._xp
       ENDDO
     ENDIF
     ! applies only for the process that has lowest p index
     IF(local_pmin .EQ. 0) THEN
       DO ig  = 1,ngp/2
-        moments(:,ig,:,:,:,:,updatetlevel) = 0._dp
+        moments(:,ig,:,:,:,:,updatetlevel) = 0._xp
       ENDDO
     ENDIF
 
diff --git a/src/coeff_mod.F90 b/src/coeff_mod.F90
index cfd32243..3c4c9125 100644
--- a/src/coeff_mod.F90
+++ b/src/coeff_mod.F90
@@ -44,11 +44,11 @@ CONTAINS
       XOUT = TO_FM('0.0')
       !
       DO n1=0,n 
-         AUXN =Lpjl(REAL(m,dp)-0.5_dp,REAL(n,dp),REAL(n1,dp))
+         AUXN =Lpjl(REAL(m,xp)-0.5_xp,REAL(n,xp),REAL(n1,xp))
          DO k1=0,k
-            AUXK =Lpjl(-0.5_dp,REAL(k,dp),REAL(k1,dp))
+            AUXK =Lpjl(-0.5_xp,REAL(k,xp),REAL(k1,xp))
             DO s1=0,s
-               AUXS = Lpjl(-0.5_dp,REAL(s,dp),REAL(s1,dp))
+               AUXS = Lpjl(-0.5_xp,REAL(s,xp),REAL(s1,xp))
                XOUT = XOUT + FACTORIAL(TO_FM(n1 + k1 + s1 ))*AUXN*AUXK*AUXS 
             ENDDO
          ENDDO
@@ -75,7 +75,7 @@ CONTAINS
       IMPLICIT NONE
 
       !
-      REAL(dp), intent(in) :: p,j,l
+      REAL(xp), intent(in) :: p,j,l
       TYPE(FM) :: XOUT
       !
       CALL FM_ENTER_USER_FUNCTION(XOUT)
diff --git a/src/collision_mod.F90 b/src/collision_mod.F90
index a223da4d..903e6ddb 100644
--- a/src/collision_mod.F90
+++ b/src/collision_mod.F90
@@ -1,13 +1,13 @@
 module collision
 ! contains the Hermite-Laguerre collision operators without the use of COSOLVER
-USE prec_const, ONLY : dp
+USE prec_const, ONLY : xp
 IMPLICIT NONE
 PRIVATE
 CHARACTER(len=32),    PUBLIC, PROTECTED :: collision_model      ! (Lenard-Bernstein: 'LB', Dougherty: 'DG', Sugama: 'SG', Lorentz: 'LR', Landau: 'LD')
 LOGICAL,              PUBLIC, PROTECTED :: GK_CO        =.true. ! activates GK effects on CO
 LOGICAL,              PUBLIC, PROTECTED :: INTERSPECIES =.true. ! activates interpecies collision
 CHARACTER(len=128),   PUBLIC, PROTECTED :: mat_file    ! COSOlver matrix file names
-REAL(dp),             PUBLIC, PROTECTED :: collision_kcut = 100.0
+REAL(xp),             PUBLIC, PROTECTED :: collision_kcut = 100.0
 LOGICAL,              PUBLIC, PROTECTED :: cosolver_coll ! check if cosolver matrices are used
 
 PUBLIC :: init_collision
@@ -96,12 +96,12 @@ CONTAINS
         CASE ('SG','LR','LD')
           CALL compute_cosolver_coll(GK_CO)
         CASE ('none','hypcoll','dvpar4')
-          Capj = 0._dp
+          Capj = 0._xp
         CASE DEFAULT
           ERROR STOP '>> ERROR << collision operator not recognized!!'
       END SELECT
     ELSE
-      Capj = 0._dp
+      Capj = 0._xp
     ENDIF
   END SUBROUTINE compute_Capj
 
@@ -116,8 +116,8 @@ CONTAINS
     USE array,            ONLY: Capj
     USE fields,           ONLY: moments
     IMPLICIT NONE
-    COMPLEX(dp) :: TColl_
-    REAL(dp)    :: j_dp, p_dp, ba_2, kp
+    COMPLEX(xp) :: TColl_
+    REAL(xp)    :: j_xp, p_xp, ba_2, kp
     INTEGER     :: iz,ikx,iky,ij,ip,ia,eo
     DO iz = izs,ize
     DO ikx = ikxs, ikxe;
@@ -127,16 +127,16 @@ CONTAINS
     DO ia = ias, iae
       !** Auxiliary variables **
       eo   = MODULO(parray(ip),2)
-      p_dp = REAL(parray(ip),dp)
-      j_dp = REAL(jarray(ij),dp)
+      p_xp = REAL(parray(ip),xp)
+      j_xp = REAL(jarray(ij),xp)
       kp   = kparray(iky,ikx,iz,eo)
       ba_2 = kp**2 * sigma2_tau_o2(ia) ! this is (ba/2)^2
 
       !** Assembling collison operator **
       ! -nuee (p + 2j) Nepj
-      TColl_ = -nu_ab(ia,ia) * (p_dp + 2._dp*j_dp)*moments(ia,ip,ij,iky,ikx,iz,updatetlevel)
+      TColl_ = -nu_ab(ia,ia) * (p_xp + 2._xp*j_xp)*moments(ia,ip,ij,iky,ikx,iz,updatetlevel)
       IF(GK_CO) THEN
-        TColl_ = TColl_ - nu_ab(ia,ia) *2._dp*ba_2*moments(ia,ip,ij,iky,ikx,iz,updatetlevel)
+        TColl_ = TColl_ - nu_ab(ia,ia) *2._xp*ba_2*moments(ia,ip,ij,iky,ikx,iz,updatetlevel)
       ENDIF
       Capj(ia,ip,ij,iky,ikx,iz) = TColl_
     ENDDO
@@ -170,11 +170,11 @@ CONTAINS
     USE time_integration, ONLY: updatetlevel
     USE array,            ONLY: Capj
     USE fields,           ONLY: moments
-    USE prec_const,       ONLY: dp, SQRT2, twothird
+    USE prec_const,       ONLY: xp, SQRT2, twothird
     IMPLICIT NONE
-    COMPLEX(dp) :: Tmp
+    COMPLEX(xp) :: Tmp
     INTEGER     :: iz,ikx,iky,ij,ip,ia, ipi,iji,izi
-    REAL(dp)    :: j_dp, p_dp
+    REAL(xp)    :: j_xp, p_xp
     DO iz = 1,local_nz
       izi = iz + ngz/2
       DO ikx = 1,local_nkx
@@ -185,17 +185,17 @@ CONTAINS
               ipi = ip + ngp/2
               DO ia = 1,local_na
                 !** Auxiliary variables **
-                p_dp      = REAL(parray(ipi),dp)
-                j_dp      = REAL(jarray(iji),dp)
+                p_xp      = REAL(parray(ipi),xp)
+                j_xp      = REAL(jarray(iji),xp)
                 !** Assembling collison operator **
-                Tmp = -(p_dp + 2._dp*j_dp)*moments(ia,ipi,iji,iky,ikx,izi,updatetlevel)
-                IF( (p_dp .EQ. 1._dp) .AND. (j_dp .EQ. 0._dp)) THEN !Ce10
+                Tmp = -(p_xp + 2._xp*j_xp)*moments(ia,ipi,iji,iky,ikx,izi,updatetlevel)
+                IF( (p_xp .EQ. 1._xp) .AND. (j_xp .EQ. 0._xp)) THEN !Ce10
                   Tmp = Tmp +  moments(ia,ip1,ij1,iky,ikx,iz,updatetlevel)
-                ELSEIF( (p_dp .EQ. 2._dp) .AND. (j_dp .EQ. 0._dp)) THEN ! Ce20
+                ELSEIF( (p_xp .EQ. 2._xp) .AND. (j_xp .EQ. 0._xp)) THEN ! Ce20
                   Tmp = Tmp +       twothird*moments(ia,ip2,ij0,iky,ikx,izi,updatetlevel) &
                             - SQRT2*twothird*moments(ia,ip0,ij1,iky,ikx,izi,updatetlevel)
-                ELSEIF( (p_dp .EQ. 0._dp) .AND. (j_dp .EQ. 1._dp)) THEN ! Ce01
-                  Tmp = Tmp +  2._dp*twothird*moments(ia,ip0,ij1,iky,ikx,izi,updatetlevel) &
+                ELSEIF( (p_xp .EQ. 0._xp) .AND. (j_xp .EQ. 1._xp)) THEN ! Ce01
+                  Tmp = Tmp +  2._xp*twothird*moments(ia,ip0,ij1,iky,ikx,izi,updatetlevel) &
                               -SQRT2*twothird*moments(ia,ip2,ij0,iky,ikx,izi,updatetlevel)
                 ENDIF
                 Capj(ia,ip,ij,iky,ikx,iz) = nu_ab(ia,ia) * Tmp
@@ -215,13 +215,13 @@ CONTAINS
                     local_nky, local_nkx, local_nz, ngz, kparray, nzgrid
     USE species,          ONLY: sigma2_tau_o2, sqrt_sigma2_tau_o2, nu_ab
     USE array,            ONLY: Capj, nadiab_moments, kernel
-    USE prec_const,       ONLY: dp, SQRT2, twothird
+    USE prec_const,       ONLY: xp, SQRT2, twothird
     IMPLICIT NONE
     !! Local variables
-    COMPLEX(dp) :: dens_,upar_,uperp_,Tpar_,Tperp_,Temp_
-    COMPLEX(dp) :: nadiab_moment_0j, Tmp
-    REAL(dp)    :: Knp0, Knp1, Knm1, kp
-    REAL(dp)    :: n_dp, j_dp, p_dp, ba, ba_2
+    COMPLEX(xp) :: dens_,upar_,uperp_,Tpar_,Tperp_,Temp_
+    COMPLEX(xp) :: nadiab_moment_0j, Tmp
+    REAL(xp)    :: Knp0, Knp1, Knm1, kp
+    REAL(xp)    :: n_xp, j_xp, p_xp, ba, ba_2
     INTEGER     :: iz,ikx,iky,ij,ip,ia,eo,in, ipi,iji,izi,ini
     DO iz = 1,local_nz
       izi = iz + ngz/2
@@ -233,25 +233,25 @@ CONTAINS
               ipi = ip + ngp/2
               DO ia = 1,local_na
     !** Auxiliary variables **
-    p_dp      = REAL(parray(ipi),dp)
-    j_dp      = REAL(jarray(iji),dp)
+    p_xp      = REAL(parray(ipi),xp)
+    j_xp      = REAL(jarray(iji),xp)
     eo        = MIN(nzgrid,MODULO(parray(ipi),2)+1)
     kp        = kparray(iky,ikx,izi,eo)
     ba_2      = kp**2 * sigma2_tau_o2(ia) ! this is (l_a/2)^2
-    ba        = 2_dp*kp * sqrt_sigma2_tau_o2(ia)  ! this is l_a
+    ba        = 2_xp*kp * sqrt_sigma2_tau_o2(ia)  ! this is l_a
     !** Assembling collison operator **
     ! Velocity-space diffusion (similar to Lenard Bernstein)
     ! -nu (p + 2j + b^2/2) Napj
-    Tmp = -(p_dp + 2._dp*j_dp + 2._dp*ba_2)*nadiab_moments(ia,ipi,iji,iky,ikx,izi)
+    Tmp = -(p_xp + 2._xp*j_xp + 2._xp*ba_2)*nadiab_moments(ia,ipi,iji,iky,ikx,izi)
       !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Non zero term for p = 0 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-    IF( p_dp .EQ. 0 ) THEN ! Kronecker p0
+    IF( p_xp .EQ. 0 ) THEN ! Kronecker p0
         !** build required fluid moments **
-        dens_  = 0._dp
-        upar_  = 0._dp; uperp_ = 0._dp
-        Tpar_  = 0._dp; Tperp_ = 0._dp
+        dens_  = 0._xp
+        upar_  = 0._xp; uperp_ = 0._xp
+        Tpar_  = 0._xp; Tperp_ = 0._xp
         DO in = 1,local_nj
           ini = in + ngj/2
-          n_dp = REAL(jarray(ini),dp)
+          n_xp = REAL(jarray(ini),xp)
           ! Store the kernels for sparing readings
           Knp0 =  kernel(ia,ini  ,iky,ikx,izi,eo)
           Knp1 =  kernel(ia,ini+1,iky,ikx,izi,eo)
@@ -261,40 +261,40 @@ CONTAINS
           ! Density
           dens_  = dens_  + Knp0 * nadiab_moment_0j
           ! Perpendicular velocity
-          uperp_ = uperp_ + ba*0.5_dp*(Knp0 - Knm1) * nadiab_moment_0j
+          uperp_ = uperp_ + ba*0.5_xp*(Knp0 - Knm1) * nadiab_moment_0j
           ! Parallel temperature
           Tpar_  = Tpar_  + Knp0 * (SQRT2*nadiab_moments(ia,ip2,ini,iky,ikx,izi) + nadiab_moment_0j)
           ! Perpendicular temperature
-          Tperp_ = Tperp_ + ((2._dp*n_dp+1._dp)*Knp0 - (n_dp+1._dp)*Knp1 - n_dp*Knm1)*nadiab_moment_0j
+          Tperp_ = Tperp_ + ((2._xp*n_xp+1._xp)*Knp0 - (n_xp+1._xp)*Knp1 - n_xp*Knm1)*nadiab_moment_0j
         ENDDO
-      Temp_  = (Tpar_ + 2._dp*Tperp_)/3._dp - dens_
+      Temp_  = (Tpar_ + 2._xp*Tperp_)/3._xp - dens_
       ! Add energy restoring term
-      Tmp = Tmp + Temp_* 4._dp *  j_dp          * kernel(ia,iji  ,iky,ikx,izi,eo)
-      Tmp = Tmp - Temp_* 2._dp * (j_dp + 1._dp) * kernel(ia,iji+1,iky,ikx,izi,eo)
-      Tmp = Tmp - Temp_* 2._dp *  j_dp          * kernel(ia,iji-1,iky,ikx,izi,eo)
+      Tmp = Tmp + Temp_* 4._xp *  j_xp          * kernel(ia,iji  ,iky,ikx,izi,eo)
+      Tmp = Tmp - Temp_* 2._xp * (j_xp + 1._xp) * kernel(ia,iji+1,iky,ikx,izi,eo)
+      Tmp = Tmp - Temp_* 2._xp *  j_xp          * kernel(ia,iji-1,iky,ikx,izi,eo)
       Tmp = Tmp + uperp_*ba* (kernel(ia,iji,iky,ikx,izi,eo) - kernel(ia,iji-1,iky,ikx,izi,eo))
       !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
       !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Non zero term for p = 1 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-    ELSEIF( p_dp .eq. 1 ) THEN ! kronecker p1
+    ELSEIF( p_xp .eq. 1 ) THEN ! kronecker p1
       !** build required fluid moments **
-      upar_  = 0._dp
+      upar_  = 0._xp
       DO in = 1,local_nj
         ini = in + ngj/2
-        n_dp = REAL(jarray(ini),dp)
+        n_xp = REAL(jarray(ini),xp)
         ! Parallel velocity
         upar_  = upar_  + kernel(ia,ini,iky,ikx,izi,eo) * nadiab_moments(ia,ip1,ini,iky,ikx,izi)
       ENDDO
       Tmp = Tmp + upar_*kernel(ia,iji,iky,ikx,izi,eo)
       !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
       !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Non zero term for p = 2 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-    ELSEIF( p_dp .eq. 2 ) THEN ! kronecker p2
+    ELSEIF( p_xp .eq. 2 ) THEN ! kronecker p2
       !** build required fluid moments **
-      dens_  = 0._dp
-      upar_  = 0._dp; uperp_ = 0._dp
-      Tpar_  = 0._dp; Tperp_ = 0._dp
+      dens_  = 0._xp
+      upar_  = 0._xp; uperp_ = 0._xp
+      Tpar_  = 0._xp; Tperp_ = 0._xp
       DO in = 1,local_nj
         ini = in + ngj/2
-        n_dp = REAL(jarray(ini),dp)
+        n_xp = REAL(jarray(ini),xp)
         ! Store the kernels for sparing readings
         Knp0 =  kernel(ia,ini  ,iky,ikx,izi,eo)
         Knp1 =  kernel(ia,ini+1,iky,ikx,izi,eo)
@@ -306,9 +306,9 @@ CONTAINS
         ! Parallel temperature
         Tpar_  = Tpar_  + Knp0 * (SQRT2*nadiab_moments(ia,ip2,ini,iky,ikx,izi) + nadiab_moment_0j)
         ! Perpendicular temperature
-        Tperp_ = Tperp_ + ((2._dp*n_dp+1._dp)*Knp0 - (n_dp+1._dp)*Knp1 - n_dp*Knm1)*nadiab_moment_0j
+        Tperp_ = Tperp_ + ((2._xp*n_xp+1._xp)*Knp0 - (n_xp+1._xp)*Knp1 - n_xp*Knm1)*nadiab_moment_0j
       ENDDO
-      Temp_  = (Tpar_ + 2._dp*Tperp_)/3._dp - dens_
+      Temp_  = (Tpar_ + 2._xp*Tperp_)/3._xp - dens_
       Tmp = Tmp + Temp_*SQRT2*kernel(ia,iji,iky,ikx,izi,eo)
       !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
     ENDIF
diff --git a/src/control.F90 b/src/control.F90
index b70961cd..c8e307da 100644
--- a/src/control.F90
+++ b/src/control.F90
@@ -4,11 +4,11 @@ SUBROUTINE control
   use basic,      ONLY: str,daytim,speak,basic_data,&
                         nlend,step,increase_step,increase_time,increase_cstep,&
                         chrono_runt,chrono_step, chrono_diag, start_chrono, stop_chrono
-  use prec_const, ONLY: dp, stdout
+  use prec_const, ONLY: xp, stdout
   USE parallel,   ONLY: ppinit
   USE mpi
   IMPLICIT NONE
-  REAL(dp) :: t_init_diag_0, t_init_diag_1
+  REAL(xp) :: t_init_diag_0, t_init_diag_1
   INTEGER  :: ierr
   ! start the chronometer for the total runtime
   CALL start_chrono(chrono_runt)
diff --git a/src/cosolver_interface_mod.F90 b/src/cosolver_interface_mod.F90
index f5b765e9..ade4d052 100644
--- a/src/cosolver_interface_mod.F90
+++ b/src/cosolver_interface_mod.F90
@@ -1,6 +1,6 @@
 module cosolver_interface
 ! contains the Hermite-Laguerre collision operators solved using COSOlver.
-USE prec_const, ONLY: dp
+USE prec_const, ONLY: xp
 IMPLICIT NONE
 PRIVATE
 PUBLIC :: load_COSOlver_mat, compute_cosolver_coll
@@ -19,9 +19,9 @@ CONTAINS
     USE MPI
     IMPLICIT NONE
     LOGICAL, INTENT(IN) :: GK_CO
-    COMPLEX(dp), DIMENSION(total_np)    :: local_coll, buffer
-    COMPLEX(dp), DIMENSION(local_np)    :: TColl_distr
-    COMPLEX(dp) :: Tmp_
+    COMPLEX(xp), DIMENSION(total_np)    :: local_coll, buffer
+    COMPLEX(xp), DIMENSION(local_np)    :: TColl_distr
+    COMPLEX(xp) :: Tmp_
     INTEGER :: iz,ikx,iky,ij,ip,ia,ikx_C,iky_C,iz_C
     INTEGER :: ierr
     z:DO iz = 1,local_nz
@@ -74,7 +74,7 @@ CONTAINS
     USE species,     ONLY: nu_ab
     IMPLICIT NONE
     INTEGER, INTENT(IN) :: ia,ip,ij,iky,ikx,iz,ikx_C,iky_C,iz_C
-    COMPLEX(dp), INTENT(OUT) :: local_coll
+    COMPLEX(xp), INTENT(OUT) :: local_coll
     INTEGER :: ib,iq,il
     INTEGER :: p_int,q_int,j_int,l_int
     INTEGER :: izi, iqi, ili
@@ -82,7 +82,7 @@ CONTAINS
     p_int = parray_full(ip)
     j_int = jarray_full(ij)
     !! Apply the cosolver collision matrix
-    local_coll = 0._dp ! Initialization
+    local_coll = 0._xp ! Initialization
     q:DO iq = 1,local_np
       iqi   = iq + ngp/2
       q_int = parray(iqi)
@@ -124,20 +124,20 @@ CONTAINS
       ! Input
       LOGICAL,            INTENT(IN) :: GK_CO, INTERSPECIES
       CHARACTER(len=128), INTENT(IN) :: matfile    ! COSOlver matrix file names
-      REAL(dp),           INTENT(IN) :: collision_kcut
+      REAL(xp),           INTENT(IN) :: collision_kcut
       ! Local variables
-      REAL(dp), DIMENSION(:,:),       ALLOCATABLE :: Caa_full,CabT_full, CabF_full  ! To load the self entire matrices
-      REAL(dp), DIMENSION(:,:,:,:),   ALLOCATABLE :: Caa__kp         ! To store the coeff that will be used along kperp
-      REAL(dp), DIMENSION(:,:,:,:,:), ALLOCATABLE :: CabF_kp,CabT_kp ! ''
-      REAL(dp), DIMENSION(:),         ALLOCATABLE :: kp_grid_mat     ! kperp grid of the matrices
-      REAL(dp), DIMENSION(2) :: dims
+      REAL(xp), DIMENSION(:,:),       ALLOCATABLE :: Caa_full,CabT_full, CabF_full  ! To load the self entire matrices
+      REAL(xp), DIMENSION(:,:,:,:),   ALLOCATABLE :: Caa__kp         ! To store the coeff that will be used along kperp
+      REAL(xp), DIMENSION(:,:,:,:,:), ALLOCATABLE :: CabF_kp,CabT_kp ! ''
+      REAL(xp), DIMENSION(:),         ALLOCATABLE :: kp_grid_mat     ! kperp grid of the matrices
+      REAL(xp), DIMENSION(2) :: dims
       ! 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, ij, il, ikx, iky, iz, ik, ikp, ikps_C,ikpe_C,ia,ib  ! indices for loops
       INTEGER  :: pdim, jdim                                ! dimensions of the COSOlver matrices
       INTEGER  :: ikp_next, ikp_prev, nkp_mat, ikp_mat
-      REAL(dp) :: kp_max,kperp_sim, kperp_mat, zerotoone
+      REAL(xp) :: kp_max,kperp_sim, kperp_mat, zerotoone
       CHARACTER(len=128) :: var_name, ikp_string, name_a, name_b
       CHARACTER(len=1)   :: letter_a, letter_b
       ! Opening the compiled cosolver matrices results
@@ -225,7 +225,7 @@ CONTAINS
               ENDDO
               ENDDO
             ELSE
-              CabT_kp(ia,ib,:,:,:) = 0._dp; CabF_kp(ia,ib,:,:,:) = 0._dp
+              CabT_kp(ia,ib,:,:,:) = 0._xp; CabF_kp(ia,ib,:,:,:) = 0._xp
             ENDIF
           ENDDO b
         ENDDO a
@@ -259,15 +259,15 @@ CONTAINS
                 ! write(*,*) kp_grid_mat(ikp_prev), '<', kperp_sim, '<', kp_grid_mat(ikp_next)
               ENDIF
               ! 0->1 variable for linear interp, i.e. zero2one = (k-k0)/(k1-k0)
-              zerotoone = MIN(1._dp,(kperp_sim - kp_grid_mat(ikp_prev))/(kp_grid_mat(ikp_next) - kp_grid_mat(ikp_prev)))
+              zerotoone = MIN(1._xp,(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
               Caa (:,:,:,iky,ikx,iz) = (Caa__kp(:,:,:,ikp_next) - Caa__kp(:,:,:,ikp_prev))*zerotoone + Caa__kp(:,:,:,ikp_prev)
               IF(INTERSPECIES) THEN
                 Cab_T(:,:,:,:,iky,ikx,iz) = (CabT_kp(:,:,:,:,ikp_next) - CabT_kp(:,:,:,:,ikp_prev))*zerotoone + CabT_kp(:,:,:,:,ikp_prev)
                 Cab_F(:,:,:,:,iky,ikx,iz) = (CabF_kp(:,:,:,:,ikp_next) - CabF_kp(:,:,:,:,ikp_prev))*zerotoone + CabF_kp(:,:,:,:,ikp_prev)
               ELSE
-                Cab_T(:,:,:,:,iky,ikx,iz) = 0._dp
-                Cab_F(:,:,:,:,iky,ikx,iz) = 0._dp
+                Cab_T(:,:,:,:,iky,ikx,iz) = 0._xp
+                Cab_F(:,:,:,:,iky,ikx,iz) = 0._xp
               ENDIF
             ENDDO
           ENDDO
@@ -282,8 +282,8 @@ CONTAINS
 
       IF( .NOT. INTERSPECIES ) THEN
         CALL speak("--Like Species operator--")
-        Cab_F = 0._dp;
-        Cab_T = 0._dp;
+        Cab_F = 0._xp;
+        Cab_T = 0._xp;
       ENDIF
       ! Build the self matrix   
       ! nuCself = nuaa*Caa + sum_b_neq_a nu_ab Cab_T
diff --git a/src/diagnose.F90 b/src/diagnose.F90
index 78243c2a..3cf0cb9e 100644
--- a/src/diagnose.F90
+++ b/src/diagnose.F90
@@ -132,7 +132,7 @@ SUBROUTINE diagnose_full(kstep)
     CALL putarr(fidres, "/data/grid/coordkx",   kxarray_full,  "kx*rho_s0", ionode=0)
     CALL putarr(fidres, "/data/grid/coordky",   kyarray_full,  "ky*rho_s0", ionode=0)
     CALL putarr(fidres, "/data/grid/coordz",    zarray_full,   "z/R", ionode=0)
-    CALL putarr(fidres, "/data/grid/coordp" ,   parray_full,   "p", ionode=0)
+    CALL putarr(fidres, "/data/grid/coorxp" ,   parray_full,   "p", ionode=0)
     CALL putarr(fidres, "/data/grid/coordj" ,   jarray_full,   "j", ionode=0)
     ! Metric info
     CALL   creatg(fidres, "/data/metric", "Metric data")
@@ -289,7 +289,7 @@ SUBROUTINE diagnose_0d
   CALL append(fidres, "/profiler/time",                time,ionode=0)
   ! Processing data
   CALL append(fidres,  "/data/var0d/time",           time,ionode=0)
-  CALL append(fidres, "/data/var0d/cstep", real(cstep,dp),ionode=0)
+  CALL append(fidres, "/data/var0d/cstep", real(cstep,xp),ionode=0)
   CALL getatt(fidres,      "/data/var0d/",       "frames",iframe0d)
   iframe0d=iframe0d+1
   CALL attach(fidres,"/data/var0d/" , "frames", iframe0d)
@@ -330,12 +330,12 @@ SUBROUTINE diagnose_3d
   IMPLICIT NONE
   CHARACTER :: letter_a
   INTEGER   :: ia
-  COMPLEX(dp), DIMENSION(local_nky,local_nkx,local_nz) :: Na00_
-  COMPLEX(dp), DIMENSION(local_nky,local_nkx,local_nz) :: fmom
-  COMPLEX(dp), DIMENSION(local_np, local_nj, local_nz) :: Napjz_
+  COMPLEX(xp), DIMENSION(local_nky,local_nkx,local_nz) :: Na00_
+  COMPLEX(xp), DIMENSION(local_nky,local_nkx,local_nz) :: fmom
+  COMPLEX(xp), DIMENSION(local_np, local_nj, local_nz) :: Napjz_
   ! add current time, cstep and frame
   CALL append(fidres,  "/data/var3d/time",           time,ionode=0)
-  CALL append(fidres, "/data/var3d/cstep", real(cstep,dp),ionode=0)
+  CALL append(fidres, "/data/var3d/cstep", real(cstep,xp),ionode=0)
   CALL getatt(fidres,      "/data/var3d/",       "frames",iframe3d)
   iframe3d=iframe3d+1
   CALL attach(fidres,"/data/var3d/" , "frames", iframe3d)
@@ -350,7 +350,7 @@ SUBROUTINE diagnose_3d
         ! gyrocenter density
         Na00_    = moments(ia,ip0,ij0,:,:,(1+ngz/2):(local_nz+ngz/2),updatetlevel)
       ELSE
-        Na00_    = 0._dp
+        Na00_    = 0._xp
       ENDIF
       CALL write_field3d_kykxz(Na00_, 'N'//letter_a//'00')
      ! <<Napj>x>y spectrum
@@ -389,9 +389,9 @@ SUBROUTINE diagnose_3d
     SUBROUTINE write_field3d_kykxz(field, text)
       USE parallel, ONLY : gather_xyz, num_procs
       IMPLICIT NONE
-      COMPLEX(dp), DIMENSION(local_nky,total_nkx,local_nz), INTENT(IN) :: field
+      COMPLEX(xp), DIMENSION(local_nky,total_nkx,local_nz), INTENT(IN) :: field
       CHARACTER(*), INTENT(IN) :: text
-      COMPLEX(dp), DIMENSION(total_nky,total_nkx,total_nz) :: field_full
+      COMPLEX(xp), DIMENSION(total_nky,total_nkx,total_nz) :: field_full
       CHARACTER(50) :: dset_name
       field_full = 0;
       WRITE(dset_name, "(A, '/', A, '/', i6.6)") "/data/var3d", TRIM(text), iframe3d
@@ -407,9 +407,9 @@ SUBROUTINE diagnose_3d
     SUBROUTINE write_field3d_pjz(field, text)
       USE parallel, ONLY : gather_pjz, num_procs
       IMPLICIT NONE
-      COMPLEX(dp), DIMENSION(local_np,local_nj,local_nz), INTENT(IN) :: field
+      COMPLEX(xp), DIMENSION(local_np,local_nj,local_nz), INTENT(IN) :: field
       CHARACTER(*), INTENT(IN) :: text
-      COMPLEX(dp), DIMENSION(total_np,total_nj,total_nz) :: field_full
+      COMPLEX(xp), DIMENSION(total_np,total_nj,total_nz) :: field_full
       CHARACTER(LEN=50) :: dset_name
       field_full = 0;
       WRITE(dset_name, "(A, '/', A, '/', i6.6)") "/data/var3d", TRIM(text), iframe3d
@@ -434,11 +434,11 @@ SUBROUTINE diagnose_5d
                    ngp, ngj, ngz, total_na
   USE time_integration, ONLY: updatetlevel, ntimelevel
   USE diagnostics_par
-  USE prec_const, ONLY: dp
+  USE prec_const, ONLY: xp
   IMPLICIT NONE
 
   CALL append(fidres,  "/data/var5d/time",           time,ionode=0)
-  CALL append(fidres, "/data/var5d/cstep", real(cstep,dp),ionode=0)
+  CALL append(fidres, "/data/var5d/cstep", real(cstep,xp),ionode=0)
   CALL getatt(fidres,      "/data/var5d/",       "frames",iframe5d)
   iframe5d=iframe5d+1
   CALL attach(fidres,"/data/var5d/" , "frames", iframe5d)
@@ -453,12 +453,12 @@ SUBROUTINE diagnose_5d
     USE basic,    ONLY: GATHERV_OUTPUT, jobnum, dt
     USE futils,   ONLY: attach, putarr, putarrnd
     USE parallel, ONLY: gather_pjxyz, num_procs
-    USE prec_const, ONLY: dp
+    USE prec_const, ONLY: xp
     IMPLICIT NONE
-    COMPLEX(dp), DIMENSION(total_na,local_np+ngp,local_nj+ngj,local_nky,local_nkx,local_nz+ngz,ntimelevel), INTENT(IN) :: field
+    COMPLEX(xp), 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(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
+    COMPLEX(xp), DIMENSION(total_na,local_np,local_nj,local_nky,local_nkx,local_nz) :: field_sub
+    COMPLEX(xp), DIMENSION(total_na,total_np,total_nj,total_nky,total_nkx,total_nz) :: field_full
     CHARACTER(LEN=50) :: dset_name
     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)
@@ -486,12 +486,12 @@ SUBROUTINE spit_snapshot_check
                   local_nky,local_nz, ngz
   USE parallel, ONLY: gather_xyz, my_id
   USE basic
-  USE prec_const, ONLY: dp
+  USE prec_const, ONLY: xp
   IMPLICIT NONE
   LOGICAL :: file_exist
   INTEGER :: fid_check, ikx, iky, iz
   CHARACTER(256) :: check_filename
-  COMPLEX(dp), DIMENSION(total_nky,total_nkx,total_nz) :: field_to_check
+  COMPLEX(xp), DIMENSION(total_nky,total_nkx,total_nz) :: field_to_check
   !! Spit a snapshot of PHI if requested (triggered by creating a file named "check_phi")
   INQUIRE(file='check_phi', exist=file_exist)
   IF( file_exist ) THEN
diff --git a/src/fields_mod.F90 b/src/fields_mod.F90
index ba3cc5cf..f689f8f5 100644
--- a/src/fields_mod.F90
+++ b/src/fields_mod.F90
@@ -4,13 +4,13 @@ MODULE fields
   implicit none
 !------------------MOMENTS Napj------------------
   ! Hermite-Moments: N_a^pj ! dimensions correspond to: species (a), p, j, kx, ky, z, updatetlevel.
-  COMPLEX(dp), DIMENSION(:,:,:,:,:,:,:), ALLOCATABLE :: moments
+  COMPLEX(xp), DIMENSION(:,:,:,:,:,:,:), ALLOCATABLE :: moments
 !------------------ELECTROSTATIC POTENTIAL------------------
 
   ! Normalized electric potential: \hat{\phi} ! (kx,ky,z)
-  COMPLEX(dp), DIMENSION(:,:,:), ALLOCATABLE :: phi
+  COMPLEX(xp), DIMENSION(:,:,:), ALLOCATABLE :: phi
 
 !------------------Vector field part
-  COMPLEX(dp), DIMENSION(:,:,:), ALLOCATABLE :: psi
+  COMPLEX(xp), DIMENSION(:,:,:), ALLOCATABLE :: psi
 
 END MODULE fields
diff --git a/src/fourier_mod.F90 b/src/fourier_mod.F90
index f6e226c2..28acf05f 100644
--- a/src/fourier_mod.F90
+++ b/src/fourier_mod.F90
@@ -72,9 +72,9 @@ MODULE fourier
                                      local_nky_ptr, local_nkx_ptr, F_, G_, sum_real_)
     IMPLICIT NONE
     INTEGER(C_INTPTR_T),                  INTENT(IN) :: local_nkx_ptr,local_nky_ptr
-    REAL(dp),                             INTENT(IN) :: inv_Nx, inv_Ny
-    REAL(dp), DIMENSION(local_nky_ptr),   INTENT(IN) :: ky_, AA_y
-    REAL(dp), DIMENSION(local_nkx_ptr),   INTENT(IN) :: kx_, AA_x
+    REAL(xp),                             INTENT(IN) :: inv_Nx, inv_Ny
+    REAL(xp), DIMENSION(local_nky_ptr),   INTENT(IN) :: ky_, AA_y
+    REAL(xp), DIMENSION(local_nkx_ptr),   INTENT(IN) :: kx_, AA_x
     COMPLEX(C_DOUBLE_COMPLEX), DIMENSION(local_nky_ptr,local_nkx_ptr), &
                                           INTENT(IN) :: F_(:,:), G_(:,:)
     real(C_DOUBLE), pointer,              INTENT(INOUT) :: sum_real_(:,:)
diff --git a/src/geometry_mod.F90 b/src/geometry_mod.F90
index c354536f..1ee9153c 100644
--- a/src/geometry_mod.F90
+++ b/src/geometry_mod.F90
@@ -1,25 +1,25 @@
 module geometry
 ! computes geometrical quantities
 ! Adapted from B.J.Frei MOLIX code (2021)
-  use prec_const, ONLY: dp
+  use prec_const, ONLY: xp
 implicit none
   PRIVATE
   ! Geometry input parameters
   CHARACTER(len=16), &
                PUBLIC, PROTECTED :: geom      = 's-alpha'
-  REAL(dp),    PUBLIC, PROTECTED :: q0        = 1.4_dp  ! safety factor
-  REAL(dp),    PUBLIC, PROTECTED :: shear     = 0._dp   ! magnetic field shear
-  REAL(dp),    PUBLIC, PROTECTED :: eps       = 0.18_dp ! inverse aspect ratio
-  REAL(dp),    PUBLIC, PROTECTED :: alpha_MHD = 0 ! shafranov shift effect alpha = -q2 R dbeta/dr
+  REAL(xp),    PUBLIC, PROTECTED :: q0        = 1.4_xp  ! safety factor
+  REAL(xp),    PUBLIC, PROTECTED :: shear     = 0._xp   ! magnetic field shear
+  REAL(xp),    PUBLIC, PROTECTED :: eps       = 0.18_xp ! inverse aspect ratio
+  REAL(xp),    PUBLIC, PROTECTED :: alpha_MHD = 0 ! shafranov shift effect alpha = -q2 R dbeta/dr
   ! parameters for Miller geometry
-  REAL(dp),    PUBLIC, PROTECTED :: kappa     = 1._dp ! elongation (1 for circular)
-  REAL(dp),    PUBLIC, PROTECTED :: s_kappa   = 0._dp ! r normalized derivative skappa = r/kappa dkappa/dr
-  REAL(dp),    PUBLIC, PROTECTED :: delta     = 0._dp ! triangularity
-  REAL(dp),    PUBLIC, PROTECTED :: s_delta   = 0._dp ! '' sdelta = r/sqrt(1-delta2) ddelta/dr
-  REAL(dp),    PUBLIC, PROTECTED :: zeta      = 0._dp ! squareness
-  REAL(dp),    PUBLIC, PROTECTED :: s_zeta    = 0._dp ! '' szeta = r dzeta/dr
+  REAL(xp),    PUBLIC, PROTECTED :: kappa     = 1._xp ! elongation (1 for circular)
+  REAL(xp),    PUBLIC, PROTECTED :: s_kappa   = 0._xp ! r normalized derivative skappa = r/kappa dkappa/dr
+  REAL(xp),    PUBLIC, PROTECTED :: delta     = 0._xp ! triangularity
+  REAL(xp),    PUBLIC, PROTECTED :: s_delta   = 0._xp ! '' sdelta = r/sqrt(1-delta2) ddelta/dr
+  REAL(xp),    PUBLIC, PROTECTED :: zeta      = 0._xp ! squareness
+  REAL(xp),    PUBLIC, PROTECTED :: s_zeta    = 0._xp ! '' szeta = r dzeta/dr
   ! to apply shift in the parallel z-BC if shearless
-  REAL(dp),    PUBLIC, PROTECTED :: shift_y   = 0._dp ! for Arno <3
+  REAL(xp),    PUBLIC, PROTECTED :: shift_y   = 0._xp ! for Arno <3
   INTEGER,     PUBLIC, PROTECTED :: Npol      = 1         ! number of poloidal turns
   ! Chooses the type of parallel BC we use for the unconnected kx modes (active for non-zero shear only)
   !  'periodic'     : Connect a disconnected kx to a mode on the other cadran
@@ -30,39 +30,39 @@ implicit none
                PUBLIC, PROTECTED :: parallel_bc
 
   ! GENE unused additional parameters for miller_mod
-  REAL(dp), PUBLIC, PROTECTED :: edge_opt      = 0._dp ! meant to redistribute the points in z
-  REAL(dp), PUBLIC, PROTECTED :: major_R       = 1._dp ! major radius
-  REAL(dp), PUBLIC, PROTECTED :: major_Z       = 0._dp ! vertical elevation
-  REAL(dp), PUBLIC, PROTECTED :: dpdx_pm_geom  = 0._dp ! amplitude mag. eq. pressure grad.
-  REAL(dp), PUBLIC, PROTECTED ::          C_y  = 0._dp ! defines y coordinate : Cy (q theta - phi)
-  REAL(dp), PUBLIC, PROTECTED ::         C_xy  = 1._dp ! defines x coordinate : B = Cxy Vx x Vy
+  REAL(xp), PUBLIC, PROTECTED :: edge_opt      = 0._xp ! meant to redistribute the points in z
+  REAL(xp), PUBLIC, PROTECTED :: major_R       = 1._xp ! major radius
+  REAL(xp), PUBLIC, PROTECTED :: major_Z       = 0._xp ! vertical elevation
+  REAL(xp), PUBLIC, PROTECTED :: xpdx_pm_geom  = 0._xp ! amplitude mag. eq. pressure grad.
+  REAL(xp), PUBLIC, PROTECTED ::          C_y  = 0._xp ! defines y coordinate : Cy (q theta - phi)
+  REAL(xp), PUBLIC, PROTECTED ::         C_xy  = 1._xp ! defines x coordinate : B = Cxy Vx x Vy
 
   ! Geometrical auxiliary variables
   LOGICAL,     PUBLIC, PROTECTED :: SHEARED  = .false. ! flag for shear magn. geom or not
   ! Curvature
-  REAL(dp),    PUBLIC, DIMENSION(:,:,:,:), ALLOCATABLE :: Ckxky  ! dimensions: kx, ky, z, odd/even p
+  REAL(xp),    PUBLIC, DIMENSION(:,:,:,:), ALLOCATABLE :: Ckxky  ! dimensions: kx, ky, z, odd/even p
   ! Jacobian
-  REAL(dp),    PUBLIC, DIMENSION(:,:), ALLOCATABLE :: Jacobian ! dimensions: z, odd/even p
-  COMPLEX(dp), PUBLIC, PROTECTED        :: iInt_Jacobian ! Inverse integrated Jacobian
+  REAL(xp),    PUBLIC, DIMENSION(:,:), ALLOCATABLE :: Jacobian ! dimensions: z, odd/even p
+  COMPLEX(xp), PUBLIC, PROTECTED        :: iInt_Jacobian ! Inverse integrated Jacobian
   ! Metric
-  REAL(dp),    PUBLIC, DIMENSION(:,:), ALLOCATABLE :: gxx, gxy, gxz, gyy, gyz, gzz ! dimensions: z, odd/even p
-  REAL(dp),    PUBLIC, DIMENSION(:,:), ALLOCATABLE :: dxdr, dxdZ, Rc, phic, Zc
+  REAL(xp),    PUBLIC, DIMENSION(:,:), ALLOCATABLE :: gxx, gxy, gxz, gyy, gyz, gzz ! dimensions: z, odd/even p
+  REAL(xp),    PUBLIC, DIMENSION(:,:), ALLOCATABLE :: dxdr, dxdZ, Rc, phic, Zc
   ! derivatives of magnetic field strength
-  REAL(dp),    PUBLIC, DIMENSION(:,:), ALLOCATABLE :: dBdx, dBdy, dBdz, dlnBdz
+  REAL(xp),    PUBLIC, DIMENSION(:,:), ALLOCATABLE :: dBdx, dBdy, dBdz, dlnBdz
   ! Relative magnetic field strength
-  REAL(dp),    PUBLIC, DIMENSION(:,:), ALLOCATABLE :: hatB
+  REAL(xp),    PUBLIC, DIMENSION(:,:), ALLOCATABLE :: hatB
   ! Relative strength of major radius
-  REAL(dp),    PUBLIC, DIMENSION(:,:), ALLOCATABLE :: hatR, hatZ
+  REAL(xp),    PUBLIC, DIMENSION(:,:), ALLOCATABLE :: hatR, hatZ
   ! Some geometrical coefficients
-  REAL(dp),    PUBLIC, DIMENSION(:,:) , ALLOCATABLE :: gradz_coeff  ! 1 / [ J_{xyz} \hat{B} ]
+  REAL(xp),    PUBLIC, DIMENSION(:,:) , ALLOCATABLE :: gradz_coeff  ! 1 / [ J_{xyz} \hat{B} ]
   ! Array to map the index of mode (kx,ky,-pi) to (kx+2pi*s*ky,ky,pi) for sheared periodic boundary condition
   INTEGER,     PUBLIC, DIMENSION(:,:), ALLOCATABLE :: ikx_zBC_L, ikx_zBC_R
   ! Geometric factor in front of the parallel phi derivative (not implemented)
-  ! REAL(dp),    PUBLIC, DIMENSION(:,:), ALLOCATABLE :: Gamma_phipar
+  ! REAL(xp),    PUBLIC, DIMENSION(:,:), ALLOCATABLE :: Gamma_phipar
   ! pb_phase, for parallel boundary phase, contains the factor that occurs when taking into account
   !   that q0 is defined in the middle of the fluxtube whereas the radial position spans in [0,Lx)
   !   This shift introduces a (-1)^(Nexc*iky) phase change that is included in GENE
-  COMPLEX(dp), PUBLIC, DIMENSION(:),   ALLOCATABLE :: pb_phase_L, pb_phase_R
+  COMPLEX(xp), PUBLIC, DIMENSION(:),   ALLOCATABLE :: pb_phase_L, pb_phase_R
 
   ! Functions
   PUBLIC :: geometry_readinputs, geometry_outputinputs,&
@@ -78,7 +78,7 @@ CONTAINS
       kappa, s_kappa,delta, s_delta, zeta, s_zeta,& ! For miller
       parallel_bc, shift_y, Npol
     READ(lu_in,geometry)
-    IF(shear .NE. 0._dp) SHEARED = .true.
+    IF(shear .NE. 0._xp) SHEARED = .true.
     SELECT CASE(parallel_bc)
       CASE ('dirichlet')
       CASE ('periodic')
@@ -100,9 +100,9 @@ CONTAINS
     USE calculus, ONLY: simpson_rule_z
     ! evalute metrix, elementwo_third_kpmaxts, jacobian and gradient
     implicit none
-    REAL(dp) :: kx,ky
-    COMPLEX(dp), DIMENSION(local_nz) :: integrant
-    real(dp) :: G1,G2,G3,Cx,Cy
+    REAL(xp) :: kx,ky
+    COMPLEX(xp), DIMENSION(local_nz) :: integrant
+    real(xp) :: G1,G2,G3,Cx,Cy
     INTEGER  :: eo,iz,iky,ikx
 
     ! Allocate arrays
@@ -120,12 +120,12 @@ CONTAINS
           CALL speak('Z-pinch geometry')
           call eval_zpinch_geometry
           SHEARED = .FALSE.
-          shear   = 0._dp
+          shear   = 0._xp
         CASE('miller')
           CALL speak('Miller geometry')
           call set_miller_parameters(kappa,s_kappa,delta,s_delta,zeta,s_zeta)
           call get_miller(eps,major_R,major_Z,q0,shear,Npol,alpha_MHD,edge_opt,&
-                          C_y,C_xy,dpdx_pm_geom,gxx,gyy,gzz,gxy,gxz,gyz,&
+                          C_y,C_xy,xpdx_pm_geom,gxx,gyy,gzz,gxy,gxz,gyz,&
                           dBdx,dBdy,hatB,jacobian,dBdz,hatR,hatZ,dxdR,dxdZ,&
                           Ckxky,gradz_coeff)
         CASE DEFAULT
@@ -154,7 +154,7 @@ CONTAINS
            ENDDO
         ENDDO
         ! coefficient in the front of parallel derivative
-        gradz_coeff(iz,eo) = 1._dp /(jacobian(iz,eo)*hatB(iz,eo))
+        gradz_coeff(iz,eo) = 1._xp /(jacobian(iz,eo)*hatB(iz,eo))
         ! d/dz(ln B) to correspond to the formulation in paper 2023
         dlnBdz(iz,eo)      = dBdz(iz,eo)/hatB(iz,eo)
         ! Geometric factor in front to the maxwellian dzphi term (not implemented)
@@ -168,7 +168,7 @@ CONTAINS
     ! Compute the inverse z integrated Jacobian (useful for flux averaging)
     integrant = Jacobian((1+ngz/2):(local_nz+ngz/2),ieven) ! Convert into complex array
     CALL simpson_rule_z(local_nz,zweights_SR,integrant,iInt_Jacobian)
-    iInt_Jacobian = 1._dp/iInt_Jacobian ! reverse it
+    iInt_Jacobian = 1._xp/iInt_Jacobian ! reverse it
   END SUBROUTINE eval_magnetic_geometry
   !
   !--------------------------------------------------------------------------------
@@ -178,27 +178,27 @@ CONTAINS
     USE grid, ONLY : local_nz,Ngz,zarray,nzgrid
   ! evaluate s-alpha geometry model
   implicit none
-  REAL(dp) :: z
+  REAL(xp) :: z
   INTEGER  :: iz, eo
-  alpha_MHD = 0._dp
+  alpha_MHD = 0._xp
 
   DO eo = 1,nzgrid
    DO iz = 1,local_nz+Ngz
     z = zarray(iz,eo)
 
     ! metric
-      gxx(iz,eo) = 1._dp
+      gxx(iz,eo) = 1._xp
       gxy(iz,eo) = shear*z - alpha_MHD*SIN(z)
-      gxz(iz,eo) = 0._dp
-      gyy(iz,eo) = 1._dp + (shear*z - alpha_MHD*SIN(z))**2
-      gyz(iz,eo) = 1._dp/eps
-      gzz(iz,eo) = 1._dp/eps**2
+      gxz(iz,eo) = 0._xp
+      gyy(iz,eo) = 1._xp + (shear*z - alpha_MHD*SIN(z))**2
+      gyz(iz,eo) = 1._xp/eps
+      gzz(iz,eo) = 1._xp/eps**2
       dxdR(iz,eo)= COS(z)
       dxdZ(iz,eo)= SIN(z)
 
     ! Poloidal plane coordinates
-      hatR(iz,eo) = 1._dp + eps*COS(z)
-      hatZ(iz,eo) = 1._dp + eps*SIN(z)
+      hatR(iz,eo) = 1._xp + eps*COS(z)
+      hatZ(iz,eo) = 1._xp + eps*SIN(z)
 
     ! toroidal coordinates
       Rc  (iz,eo) = hatR(iz,eo)
@@ -206,18 +206,18 @@ CONTAINS
       Zc  (iz,eo) = hatZ(iz,eo)
 
     ! Relative strengh of modulus of B
-      hatB(iz,eo) = 1._dp/(1._dp + eps*COS(z))
+      hatB(iz,eo) = 1._xp/(1._xp + eps*COS(z))
 
     ! Jacobian
       Jacobian(iz,eo) = q0/hatB(iz,eo)
 
     ! Derivative of the magnetic field strenght
       dBdx(iz,eo) = -COS(z)*hatB(iz,eo)**2 ! LB = 1
-      dBdy(iz,eo) =  0._dp
+      dBdy(iz,eo) =  0._xp
       dBdz(iz,eo) =  eps*SIN(z)*hatB(iz,eo)**2
 
     ! Curvature factor
-      C_xy = 1._dp
+      C_xy = 1._xp
 
    ENDDO
   ENDDO
@@ -229,27 +229,27 @@ CONTAINS
   SUBROUTINE eval_zpinch_geometry
   USE grid, ONLY : local_nz,Ngz,zarray,nzgrid
   implicit none
-  REAL(dp) :: z
+  REAL(xp) :: z
   INTEGER  :: iz, eo
-  alpha_MHD = 0._dp
+  alpha_MHD = 0._xp
 
   DO eo = 1,nzgrid
    DO iz = 1,local_nz+Ngz
     z = zarray(iz,eo)
 
     ! metric
-      gxx(iz,eo) = 1._dp
-      gxy(iz,eo) = 0._dp
-      gxz(iz,eo) = 0._dp
-      gyy(iz,eo) = 1._dp ! 1/R but R is the normalization length
-      gyz(iz,eo) = 0._dp
-      gzz(iz,eo) = 1._dp
+      gxx(iz,eo) = 1._xp
+      gxy(iz,eo) = 0._xp
+      gxz(iz,eo) = 0._xp
+      gyy(iz,eo) = 1._xp ! 1/R but R is the normalization length
+      gyz(iz,eo) = 0._xp
+      gzz(iz,eo) = 1._xp
       dxdR(iz,eo)= COS(z)
       dxdZ(iz,eo)= SIN(z)
 
     ! Relative strengh of radius
-      hatR(iz,eo) = 1._dp ! R but R is the normalization length
-      hatZ(iz,eo) = 1._dp
+      hatR(iz,eo) = 1._xp ! R but R is the normalization length
+      hatZ(iz,eo) = 1._xp
 
     ! toroidal coordinates
       Rc  (iz,eo) = hatR(iz,eo)
@@ -257,21 +257,21 @@ CONTAINS
       Zc  (iz,eo) = hatZ(iz,eo)
 
     ! Jacobian
-      Jacobian(iz,eo) = 1._dp ! R but R is the normalization length
+      Jacobian(iz,eo) = 1._xp ! R but R is the normalization length
 
     ! Relative strengh of modulus of B
-      hatB   (iz,eo) = 1._dp
+      hatB   (iz,eo) = 1._xp
 
     ! Derivative of the magnetic field strenght
       dBdx(iz,eo) = -hatB(iz,eo) ! LB = 1
-      dBdy(iz,eo) = 0._dp
-      dBdz(iz,eo) = 0._dp ! Gene put a factor hatB or 1/hatR in this
+      dBdy(iz,eo) = 0._xp
+      dBdz(iz,eo) = 0._xp ! Gene put a factor hatB or 1/hatR in this
 
   ENDDO
   ENDDO
 
   ! Curvature factor
-    C_xy = 1._dp
+    C_xy = 1._xp
   END SUBROUTINE eval_zpinch_geometry
     !
     !--------------------------------------------------------------------------------
@@ -280,25 +280,25 @@ CONTAINS
     USE grid, ONLY : local_nz,Ngz,zarray, nzgrid
     ! evaluate 1D perp geometry model
     implicit none
-    REAL(dp) :: z
+    REAL(xp) :: z
     INTEGER  :: iz, eo
     DO eo = 1,nzgrid
       DO iz = 1,local_nz+Ngz
       z = zarray(iz,eo)
 
       ! metric
-      gxx(iz,eo) = 1._dp
-      gxy(iz,eo) = 0._dp
-      gyy(iz,eo) = 1._dp
+      gxx(iz,eo) = 1._xp
+      gxy(iz,eo) = 0._xp
+      gyy(iz,eo) = 1._xp
 
       ! Relative strengh of radius
-      hatR(iz,eo) = 1._dp
+      hatR(iz,eo) = 1._xp
 
       ! Jacobian
-      Jacobian(iz,eo) = 1._dp
+      Jacobian(iz,eo) = 1._xp
 
       ! Relative strengh of modulus of B
-      hatB(iz,eo) = 1._dp
+      hatB(iz,eo) = 1._xp
 
       ENDDO
     ENDDO
@@ -313,7 +313,7 @@ CONTAINS
                          local_nky_offset
    USE prec_const, ONLY: imagu, pi
    IMPLICIT NONE
-   ! REAL(dp) :: shift
+   ! REAL(xp) :: shift
    INTEGER :: ikx,iky, mn_y
    ALLOCATE(ikx_zBC_L(local_nky,total_nkx))
    ALLOCATE(ikx_zBC_R(local_nky,total_nkx))
@@ -330,8 +330,8 @@ CONTAINS
        ikx_zBC_L(iky,ikx) = ikx ! connect to itself per default
        ikx_zBC_R(iky,ikx) = ikx
      ENDDO
-     pb_phase_L(iky) = 1._dp ! no phase change per default
-     pb_phase_R(iky) = 1._dp
+     pb_phase_L(iky) = 1._xp ! no phase change per default
+     pb_phase_R(iky) = 1._xp
    ENDDO
    ! Parallel boundary are not trivial for sheared case and if
    !  the user does not ask explicitly for shearless bc
@@ -343,7 +343,7 @@ CONTAINS
         ! get the real mode number (iky starts at 1 and is shifted from paral)
         mn_y = iky-1+local_nky_offset
         ! Formula for the shift due to shear after Npol turns
-        ! shift = 2._dp*PI*shear*kyarray(iky)*Npol
+        ! shift = 2._xp*PI*shear*kyarray(iky)*Npol
           DO ikx = 1,total_nkx
             ! Usual formula for shifting indices using that dkx = 2pi*shear*dky/Nexc
             ikx_zBC_L(iky,ikx) = ikx-mn_y*Nexc
@@ -362,7 +362,7 @@ CONTAINS
           ENDDO
           ! phase present in GENE from a shift of the x origin by Lx/2 (useless?)
           ! We also put the user defined shift in the y direction (see Volcokas et al. 2022)
-          pb_phase_L(iky) = (-1._dp)**(Nexc*mn_y)*EXP(imagu*REAL(mn_y,dp)*2._dp*pi*shift_y)
+          pb_phase_L(iky) = (-1._xp)**(Nexc*mn_y)*EXP(imagu*REAL(mn_y,xp)*2._xp*pi*shift_y)
        ENDDO
      ENDIF
      ! Option for disconnecting every modes, viz. connecting all boundary to 0
@@ -373,7 +373,7 @@ CONTAINS
         ! get the real mode number (iky starts at 1 and is shifted from paral)
         mn_y = iky-1+local_nky_offset
         ! Formula for the shift due to shear after Npol
-        ! shift = 2._dp*PI*shear*kyarray(iky)*Npol
+        ! shift = 2._xp*PI*shear*kyarray(iky)*Npol
           DO ikx = 1,total_nkx
             ! Usual formula for shifting indices
             ikx_zBC_R(iky,ikx) = ikx+mn_y*Nexc
@@ -393,7 +393,7 @@ CONTAINS
           ENDDO
           ! phase present in GENE from a shift ofthe x origin by Lx/2 (useless?)
           ! We also put the user defined shift in the y direction (see Volcokas et al. 2022)
-          pb_phase_R(iky) = (-1._dp)**(Nexc*mn_y)*EXP(-imagu*REAL(mn_y,dp)*2._dp*pi*shift_y)
+          pb_phase_R(iky) = (-1._xp)**(Nexc*mn_y)*EXP(-imagu*REAL(mn_y,xp)*2._xp*pi*shift_y)
        ENDDO
      ENDIF
      ! Option for disconnecting every modes, viz. connecting all boundary to 0
diff --git a/src/ghosts_mod.F90 b/src/ghosts_mod.F90
index c578ad1b..9a2279b8 100644
--- a/src/ghosts_mod.F90
+++ b/src/ghosts_mod.F90
@@ -1,6 +1,6 @@
 module ghosts
 USE mpi
-USE prec_const, ONLY: dp
+USE prec_const, ONLY: xp
 IMPLICIT NONE
 
 INTEGER :: status(MPI_STATUS_SIZE), source, dest, count, ipg
@@ -28,7 +28,7 @@ SUBROUTINE update_ghosts_EM
   IMPLICIT NONE
   IF(total_nz .GT. 1) THEN
     CALL update_ghosts_z_3D(phi)
-    IF(beta .GT. 0._dp) &
+    IF(beta .GT. 0._xp) &
       CALL update_ghosts_z_3D(psi)
   ENDIF
 END SUBROUTINE update_ghosts_EM
@@ -102,7 +102,7 @@ SUBROUTINE update_ghosts_z_mom
                       ngp,ngj,ngz
   IMPLICIT NONE
   !! buffer for data exchanges
-  COMPLEX(dp),DIMENSION(local_na,local_np+ngp,local_nj+ngj,local_nky,local_nkx,-Ngz/2:Ngz/2) :: buff_pjxy_zBC
+  COMPLEX(xp),DIMENSION(local_na,local_np+ngp,local_nj+ngj,local_nky,local_nkx,-Ngz/2:Ngz/2) :: buff_pjxy_zBC
   INTEGER :: ikxBC_L, ikxBC_R, ikx, iky, first, last, ig, ierr
   first = 1 + ngz/2
   last  = local_nz + ngz/2
@@ -139,7 +139,7 @@ SUBROUTINE update_ghosts_z_mom
         ENDDO
       ELSE
         DO ig=1,ngz/2
-          moments(:,:,:,iky,ikx,first-ig,updatetlevel) = 0._dp
+          moments(:,:,:,iky,ikx,first-ig,updatetlevel) = 0._xp
         ENDDO
       ENDIF
       ikxBC_R = ikx_zBC_R(iky,ikx);
@@ -151,7 +151,7 @@ SUBROUTINE update_ghosts_z_mom
         ENDDO
       ELSE
         DO ig=1,ngz/2
-          moments(:,:,:,iky,ikx,last+ig,updatetlevel) = 0._dp
+          moments(:,:,:,iky,ikx,last+ig,updatetlevel) = 0._xp
         ENDDO
       ENDIF
     ENDDO
@@ -164,8 +164,8 @@ SUBROUTINE update_ghosts_z_3D(field)
   USE grid,     ONLY: local_nky,local_nkx,local_nz,ngz
   IMPLICIT NONE
   !! buffer for data exchanges
-  COMPLEX(dp),DIMENSION(local_nky,local_nkx,-ngz/2:ngz/2) :: buff_xy_zBC
-  COMPLEX(dp), INTENT(INOUT) :: field(local_nky,local_nkx,local_nz+ngz)
+  COMPLEX(xp),DIMENSION(local_nky,local_nkx,-ngz/2:ngz/2) :: buff_xy_zBC
+  COMPLEX(xp), INTENT(INOUT) :: field(local_nky,local_nkx,local_nz+ngz)
   INTEGER :: ikxBC_L, ikxBC_R, ikx, iky, first, last, ig, ierr
   first = 1 + ngz/2
   last  = local_nz + ngz/2
@@ -200,7 +200,7 @@ SUBROUTINE update_ghosts_z_3D(field)
         ENDDO
       ELSE
         DO ig = 1,ngz/2
-          field(iky,ikx,first-ig) = 0._dp
+          field(iky,ikx,first-ig) = 0._xp
         ENDDO
       ENDIF
       ikxBC_R = ikx_zBC_R(iky,ikx);
@@ -211,7 +211,7 @@ SUBROUTINE update_ghosts_z_3D(field)
         ENDDO
       ELSE
         DO ig = 1,ngz/2
-          field(iky,ikx,last+ig) = 0._dp
+          field(iky,ikx,last+ig) = 0._xp
         ENDDO
       ENDIF
     ENDDO
diff --git a/src/grid_mod.F90 b/src/grid_mod.F90
index 95b9c588..671f015f 100644
--- a/src/grid_mod.F90
+++ b/src/grid_mod.F90
@@ -13,23 +13,23 @@ MODULE grid
   INTEGER,  PUBLIC, PROTECTED :: maxj  = 1     ! The maximal Laguerre-moment
   INTEGER,  PUBLIC, PROTECTED :: dmax  = 1      ! The maximal full GF set of i-moments v^dmax
   INTEGER,  PUBLIC, PROTECTED :: Nx    = 4      ! Number of total internal grid points in x
-  REAL(dp), PUBLIC, PROTECTED :: Lx    = 120_dp ! horizontal length of the spatial box
+  REAL(xp), PUBLIC, PROTECTED :: Lx    = 120_xp ! horizontal length of the spatial box
   INTEGER,  PUBLIC, PROTECTED :: Nexc  = 1      ! factor to increase Lx when shear>0 (Lx = Nexc/kymin/shear)
   INTEGER,  PUBLIC, PROTECTED :: Ny    = 4      ! Number of total internal grid points in y
-  REAL(dp), PUBLIC, PROTECTED :: Ly    = 120_dp ! vertical length of the spatial box
+  REAL(xp), PUBLIC, PROTECTED :: Ly    = 120_xp ! vertical length of the spatial box
   INTEGER,  PUBLIC, PROTECTED :: Nz    = 4      ! Number of total perpendicular planes
   INTEGER,  PUBLIC, PROTECTED :: Odz   = 4      ! order of z interp and derivative schemes
   INTEGER,  PUBLIC, PROTECTED :: Nkx            ! Number of total internal grid points in kx
   INTEGER,  PUBLIC, PROTECTED :: Nky            ! Number of total internal grid points in ky
-  REAL(dp), PUBLIC, PROTECTED :: kpar  = 0_dp   ! parallel wave vector component
+  REAL(xp), PUBLIC, PROTECTED :: kpar  = 0_xp   ! parallel wave vector component
   ! Grid arrays
   INTEGER,  DIMENSION(:),   ALLOCATABLE, PUBLIC,PROTECTED :: parray,  parray_full
   INTEGER,  DIMENSION(:),   ALLOCATABLE, PUBLIC,PROTECTED :: jarray,  jarray_full
-  REAL(dp), DIMENSION(:),   ALLOCATABLE, PUBLIC,PROTECTED :: kxarray, kxarray_full
-  REAL(dp), DIMENSION(:),   ALLOCATABLE, PUBLIC,PROTECTED :: kyarray, kyarray_full
-  REAL(dp), DIMENSION(:,:), ALLOCATABLE, PUBLIC,PROTECTED :: zarray
-  REAL(dp), DIMENSION(:),   ALLOCATABLE, PUBLIC,PROTECTED :: zarray_full
-  REAL(dp), DIMENSION(:,:,:,:), ALLOCATABLE, PUBLIC,PROTECTED :: kparray !kperp
+  REAL(xp), DIMENSION(:),   ALLOCATABLE, PUBLIC,PROTECTED :: kxarray, kxarray_full
+  REAL(xp), DIMENSION(:),   ALLOCATABLE, PUBLIC,PROTECTED :: kyarray, kyarray_full
+  REAL(xp), DIMENSION(:,:), ALLOCATABLE, PUBLIC,PROTECTED :: zarray
+  REAL(xp), DIMENSION(:),   ALLOCATABLE, PUBLIC,PROTECTED :: zarray_full
+  REAL(xp), DIMENSION(:,:,:,:), ALLOCATABLE, PUBLIC,PROTECTED :: kparray !kperp
   ! Indexation variables
   INTEGER,  PUBLIC, PROTECTED ::  ias ,iae  ! species index
   INTEGER,  PUBLIC, PROTECTED ::  ips ,ipe  ! Hermite
@@ -68,18 +68,18 @@ MODULE grid
   integer(C_INTPTR_T), PUBLIC,PROTECTED :: local_nkx_ptr, local_nky_ptr
   integer(C_INTPTR_T), PUBLIC,PROTECTED :: local_nkx_ptr_offset, local_nky_ptr_offset
   ! Grid spacing and limits
-  REAL(dp), PUBLIC, PROTECTED ::  deltap, deltaz, inv_deltaz
-  REAL(dp), PUBLIC, PROTECTED ::  deltakx, deltaky, kx_max, ky_max, kx_min, ky_min!, kp_max
+  REAL(xp), PUBLIC, PROTECTED ::  deltap, deltaz, inv_deltaz
+  REAL(xp), PUBLIC, PROTECTED ::  deltakx, deltaky, kx_max, ky_max, kx_min, ky_min!, kp_max
   INTEGER , PUBLIC, PROTECTED ::  local_pmin,  local_pmax
   INTEGER , PUBLIC, PROTECTED ::  local_jmin,  local_jmax
-  REAL(dp), PUBLIC, PROTECTED ::  local_kymin, local_kymax
-  REAL(dp), PUBLIC, PROTECTED ::  local_kxmin, local_kxmax
-  REAL(dp), DIMENSION(:), ALLOCATABLE, PUBLIC, PROTECTED ::  local_zmin,  local_zmax
+  REAL(xp), PUBLIC, PROTECTED ::  local_kymin, local_kymax
+  REAL(xp), PUBLIC, PROTECTED ::  local_kxmin, local_kxmax
+  REAL(xp), DIMENSION(:), ALLOCATABLE, PUBLIC, PROTECTED ::  local_zmin,  local_zmax
   ! local z weights for computing simpson rule
-  REAL(dp),  DIMENSION(:),   ALLOCATABLE, PUBLIC,PROTECTED :: zweights_SR
+  REAL(xp),  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
+  REAL(xp), PUBLIC, PROTECTED  ::  diff_p_coeff, diff_j_coeff
+  REAL(xp), PUBLIC, PROTECTED  ::  diff_kx_coeff, diff_ky_coeff, diff_dz_coeff
   LOGICAL,  PUBLIC, PROTECTED  ::  SG = .true.! shifted grid flag
   ! Array to know the distribution of data among all processes (for MPI comm)
   INTEGER, DIMENSION(:), ALLOCATABLE, PUBLIC,PROTECTED :: counts_total_nkx, counts_nky, counts_nz
@@ -95,14 +95,14 @@ MODULE grid
   LOGICAL,  PUBLIC, PROTECTED ::  CONTAINSp0, CONTAINSp1, CONTAINSp2, CONTAINSp3
   LOGICAL,  PUBLIC, PROTECTED ::  SOLVE_POISSON, SOLVE_AMPERE
   ! Usefull inverse numbers
-  REAL(dp), PUBLIC, PROTECTED :: inv_Nx, inv_Ny, inv_Nz
+  REAL(xp), PUBLIC, PROTECTED :: inv_Nx, inv_Ny, inv_Nz
   ! For Orszag filter
-  REAL(dp), PUBLIC, PROTECTED :: two_third_kxmax
-  REAL(dp), PUBLIC, PROTECTED :: two_third_kymax
-  REAL(dp), PUBLIC, PROTECTED :: two_third_kpmax
+  REAL(xp), PUBLIC, PROTECTED :: two_third_kxmax
+  REAL(xp), PUBLIC, PROTECTED :: two_third_kymax
+  REAL(xp), PUBLIC, PROTECTED :: two_third_kpmax
   ! 1D Antialiasing arrays (2/3 rule)
-  REAL(dp), DIMENSION(:), ALLOCATABLE, PUBLIC,PROTECTED :: AA_x
-  REAL(dp), DIMENSION(:), ALLOCATABLE, PUBLIC,PROTECTED :: AA_y
+  REAL(xp), DIMENSION(:), ALLOCATABLE, PUBLIC,PROTECTED :: AA_x
+  REAL(xp), DIMENSION(:), ALLOCATABLE, PUBLIC,PROTECTED :: AA_y
 
   ! Public Functions
   PUBLIC :: init_1Dgrid_distr
@@ -111,7 +111,7 @@ MODULE grid
   PUBLIC :: bar
 
   ! Precomputations
-  real(dp), PUBLIC, PROTECTED    :: pmax_dp, jmax_dp
+  real(xp), PUBLIC, PROTECTED    :: pmax_xp, jmax_xp
 
 CONTAINS
 
@@ -129,8 +129,8 @@ CONTAINS
     !   i.e. : all moments N_a^pj s.t. p+2j<=d are simulated (see GF closure)
     dmax = min(pmax,2*jmax+1)
     ! Usefull precomputations
-    inv_Nx = 1._dp/REAL(Nx,dp)
-    inv_Ny = 1._dp/REAL(Ny,dp)
+    inv_Nx = 1._xp/REAL(Nx,xp)
+    inv_Ny = 1._xp/REAL(Ny,xp)
   END SUBROUTINE grid_readinputs
   !!!! GRID REPRESENTATION
   ! We define the grids that contain ghosts (p,j,z) with indexing from 1 to Nlocal + nghost
@@ -143,7 +143,7 @@ CONTAINS
   !  1 2 3 4
   SUBROUTINE set_grids(shear,Npol,LINEARITY,N_HD,EM,Na)
     USE fourier, ONLY: init_grid_distr_and_plans
-    REAL(dp), INTENT(IN) :: shear
+    REAL(xp), INTENT(IN) :: shear
     INTEGER,  INTENT(IN) :: Npol
     CHARACTER(len=*), INTENT(IN) :: LINEARITY
     INTEGER, INTENT(IN)  :: N_HD
@@ -252,8 +252,8 @@ CONTAINS
     IF(CONTAINSp0 .AND. .NOT. (CONTAINSp2))&
      WRITE(*,*) "Warning : distribution along p may not work with DGGK"
     ! Precomputations
-    pmax_dp       = real(pmax,dp)
-    diff_p_coeff  = pmax_dp*(1._dp/pmax_dp)**6
+    pmax_xp       = real(pmax,xp)
+    diff_p_coeff  = pmax_xp*(1._xp/pmax_xp)**6
     ! Overwrite SOLVE_AMPERE flag if beta is zero
     IF(.NOT. EM) THEN
       SOLVE_AMPERE = .FALSE.
@@ -284,8 +284,8 @@ CONTAINS
     local_jmax = jarray(local_nj+ngj/2)
     local_jmin = jarray(1+ngj/2)
     ! Precomputations
-    jmax_dp      = real(jmax,dp)
-    diff_j_coeff = jmax_dp*(1._dp/jmax_dp)**6
+    jmax_xp      = real(jmax,xp)
+    diff_j_coeff = jmax_xp*(1._xp/jmax_xp)**6
     ! j=0 and j=1 indices
     DO ij = 1,local_nj+ngj
       IF(jarray(ij) .EQ. 0) ij0 = ij
@@ -303,11 +303,11 @@ CONTAINS
     total_nky = Nky
     ! Grid spacings
     IF (Ny .EQ. 1) THEN
-      deltaky = 2._dp*PI/Ly
+      deltaky = 2._xp*PI/Ly
       ky_max  = deltaky
       ky_min  = deltaky
     ELSE
-      deltaky = 2._dp*PI/Ly
+      deltaky = 2._xp*PI/Ly
       ky_max  = (Nky-1)*deltaky
       ky_min  = deltaky
     ENDIF
@@ -315,14 +315,14 @@ CONTAINS
     ! Build the full grids on process 0 to diagnose it without comm
     ALLOCATE(kyarray_full(Nky))
     DO iky = 1,Nky
-     kyarray_full(iky) = REAL(iky-1,dp) * deltaky
+     kyarray_full(iky) = REAL(iky-1,xp) * deltaky
     END DO
     ikys = local_nky_ptr_offset + 1
     ikye = ikys + local_nky_ptr - 1
     local_nky = ikye - ikys + 1
     local_nky_offset = local_nky_ptr_offset
     ALLOCATE(kyarray(local_nky))
-    local_kymax = 0._dp
+    local_kymax = 0._xp
     ! Creating a grid ordered as dk*(0 1 2 3)
     ! We loop over the natural iky numbers (|1 2 3||4 5 6||... Nky|)
     DO iky = 1,local_nky
@@ -351,36 +351,36 @@ CONTAINS
       ENDIF
     END DO
     ! Orszag 2/3 filter
-    two_third_kymax = 2._dp/3._dp*deltaky*(Nky-1)
+    two_third_kymax = 2._xp/3._xp*deltaky*(Nky-1)
     ALLOCATE(AA_y(local_nky))
     DO iky = 1,local_nky
       IF ( (kyarray(iky) .LT. two_third_kymax) .OR. (LINEARITY .EQ. 'linear')) THEN
-        AA_y(iky) = 1._dp;
+        AA_y(iky) = 1._xp;
       ELSE
-        AA_y(iky) = 0._dp;
+        AA_y(iky) = 0._xp;
       ENDIF
     END DO
     ! For hyperdiffusion
     IF(LINEARITY.EQ.'linear') THEN
-      diff_ky_coeff= (1._dp/ky_max)**N_HD
+      diff_ky_coeff= (1._xp/ky_max)**N_HD
     ELSE
-      diff_ky_coeff= (1._dp/two_third_kymax)**N_HD
+      diff_ky_coeff= (1._xp/two_third_kymax)**N_HD
     ENDIF
   END SUBROUTINE set_kygrid
 
   SUBROUTINE set_kxgrid(shear,Npol,LINEARITY,N_HD)
     USE prec_const
     IMPLICIT NONE
-    REAL(dp), INTENT(IN) :: shear
+    REAL(xp), INTENT(IN) :: shear
     INTEGER,  INTENT(IN) :: Npol
     CHARACTER(len=*), INTENT(IN) ::LINEARITY
     INTEGER, INTENT(IN)  :: N_HD
     INTEGER :: ikx
-    REAL(dp):: Lx_adapted
+    REAL(xp):: 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
-      Lx_adapted = Ly/(2._dp*pi*shear*Npol)
+      Lx_adapted = Ly/(2._xp*pi*shear*Npol)
       ! Put Nexc to 0 so that it is computed from a target value Lx
       IF(Nexc .EQ. 0) THEN
         Nexc = CEILING(0.9 * Lx/Lx_adapted)
@@ -401,27 +401,27 @@ CONTAINS
     ALLOCATE(kxarray(local_nkx))
     ALLOCATE(kxarray_full(total_nkx))
     IF (Nx .EQ. 1) THEN
-      deltakx         = 1._dp
-      kxarray(1)      = 0._dp
+      deltakx         = 1._xp
+      kxarray(1)      = 0._xp
       ikx0           = 1
       contains_kx0    = .true.
-      kx_max          = 0._dp
+      kx_max          = 0._xp
       ikx_max         = 1
-      kx_min          = 0._dp
-      kxarray_full(1) = 0._dp
-      local_kxmax     = 0._dp
+      kx_min          = 0._xp
+      kxarray_full(1) = 0._xp
+      local_kxmax     = 0._xp
     ELSE ! Build apprpopriate grid
-      deltakx      = 2._dp*PI/Lx
+      deltakx      = 2._xp*PI/Lx
       IF(MODULO(total_nkx,2) .EQ. 0) THEN ! Even number of kx (-2 -1 0 1 2 3)
         kx_max = (total_nkx/2)*deltakx
         kx_min = -kx_max+deltakx
         ! Creating a grid ordered as dk*(0 1 2 3 -2 -1)
         DO ikx = 1,total_nkx
-          kxarray_full(ikx) = deltakx*REAL(MODULO(ikx-1,total_nkx/2)-(total_nkx/2)*FLOOR(2.*real(ikx-1)/real(total_nkx)),dp)
+          kxarray_full(ikx) = deltakx*REAL(MODULO(ikx-1,total_nkx/2)-(total_nkx/2)*FLOOR(2.*real(ikx-1)/real(total_nkx)),xp)
           IF (ikx .EQ. total_nkx/2+1) kxarray_full(ikx) = -kxarray_full(ikx)
         END DO
         ! Set local grid (not parallelized so same as full one)
-        local_kxmax = 0._dp
+        local_kxmax = 0._xp
         DO ikx = 1,local_nkx
           kxarray(ikx) = kxarray_full(ikx+local_nkx_offset)
           ! Finding kx=0
@@ -440,22 +440,22 @@ CONTAINS
       ENDIF
     ENDIF
     ! Orszag 2/3 filter
-    two_third_kxmax = 2._dp/3._dp*kx_max;
+    two_third_kxmax = 2._xp/3._xp*kx_max;
     ! Antialiasing filter
     ALLOCATE(AA_x(local_nkx))
     DO ikx = 1,local_nkx
       IF ( ((kxarray(ikx) .GT. -two_third_kxmax) .AND. &
            (kxarray(ikx) .LT. two_third_kxmax))   .OR. (LINEARITY .EQ. 'linear')) THEN
-        AA_x(ikx) = 1._dp;
+        AA_x(ikx) = 1._xp;
       ELSE
-        AA_x(ikx) = 0._dp;
+        AA_x(ikx) = 0._xp;
       ENDIF
     END DO
     ! For hyperdiffusion
     IF(LINEARITY.EQ.'linear') THEN
-      diff_kx_coeff= (1._dp/kx_max)**N_HD
+      diff_kx_coeff= (1._xp/kx_max)**N_HD
     ELSE
-      diff_kx_coeff= (1._dp/two_third_kxmax)**N_HD
+      diff_kx_coeff= (1._xp/two_third_kxmax)**N_HD
     ENDIF
   END SUBROUTINE set_kxgrid
 
@@ -463,25 +463,25 @@ CONTAINS
     USE prec_const
     USE parallel, ONLY: num_procs_z, rank_z
     IMPLICIT NONE
-    REAL(dp):: grid_shift, Lz, zmax, zmin
+    REAL(xp):: grid_shift, Lz, zmax, zmin
     INTEGER :: istart, iend, in, Npol, iz, ig, eo, iglob
     total_nz = Nz
     ! Length of the flux tube (in ballooning angle)
-    Lz         = 2._dp*pi*REAL(Npol,dp)
+    Lz         = 2._xp*pi*REAL(Npol,xp)
     ! Z stepping (#interval = #points since periodic)
-    deltaz        = Lz/REAL(Nz,dp)
-    inv_deltaz    = 1._dp/deltaz
+    deltaz        = Lz/REAL(Nz,xp)
+    inv_deltaz    = 1._xp/deltaz
     ! Parallel hyperdiffusion coefficient
-    diff_dz_coeff = (deltaz/2._dp)**4 ! adaptive fourth derivative (~GENE)
+    diff_dz_coeff = (deltaz/2._xp)**4 ! adaptive fourth derivative (~GENE)
     IF (SG) THEN
       CALL speak('--2 staggered z grids--')
-      grid_shift = deltaz/2._dp
+      grid_shift = deltaz/2._xp
       ! indices for even p and odd p grids (used in kernel, jacobian, gij etc.)
       ieven  = 1
       iodd   = 2
       nzgrid = 2
     ELSE
-      grid_shift = 0._dp
+      grid_shift = 0._xp
       ieven  = 1
       iodd   = 1
       nzgrid = 1
@@ -491,7 +491,7 @@ CONTAINS
     IF (Nz .EQ. 1) Npol = 0
     zmax = 0; zmin = 0;
     DO iz = 1,total_nz ! z in [-pi pi-dz] x Npol
-      zarray_full(iz) = REAL(iz-1,dp)*deltaz - Lz/2._dp
+      zarray_full(iz) = REAL(iz-1,xp)*deltaz - Lz/2._xp
       IF(zarray_full(iz) .GT. zmax) zmax = zarray_full(iz)
       IF(zarray_full(iz) .LT. zmin) zmin = zarray_full(iz)
     END DO
@@ -527,7 +527,7 @@ CONTAINS
     !! interior point loop
     DO iz = 1,local_nz
       DO eo = 1,nzgrid
-        zarray(iz+ngz/2,eo) = zarray_full(iz+local_nz_offset) + REAL(eo-1,dp)*grid_shift
+        zarray(iz+ngz/2,eo) = zarray_full(iz+local_nz_offset) + REAL(eo-1,xp)*grid_shift
       ENDDO
     ENDDO
     CALL allocate_array(local_zmax,1,nzgrid)
@@ -539,8 +539,8 @@ CONTAINS
       ! Fill the ghosts
       ! Continue angles
       ! 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
+      !   zarray(ig,eo)          = local_zmin(eo)-REAL(ngz/2-(ig-1),xp)*deltaz
+      !   zarray(local_nz+ngz/2+ig,eo) = local_zmax(eo)+REAL(ig,xp)*deltaz
       ! ENDDO
       ! Periodic z \in (-pi pi-dz)
       DO ig = 1,ngz/2 ! first ghost cells
@@ -557,30 +557,30 @@ CONTAINS
       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+REAL(eo-1,dp)*grid_shift)) .LT. EPSILON(zmin)) &
+      IF(abs(local_zmin(eo) - (zmin+REAL(eo-1,xp)*grid_shift)) .LT. EPSILON(zmin)) &
         contains_zmin = .TRUE.
-      IF(abs(local_zmax(eo) - (zmax+REAL(eo-1,dp)*grid_shift)) .LT. EPSILON(zmax)) &
+      IF(abs(local_zmax(eo) - (zmax+REAL(eo-1,xp)*grid_shift)) .LT. EPSILON(zmax)) &
         contains_zmax = .TRUE.
     ENDDO
     ! local weights for Simpson rule
     ALLOCATE(zweights_SR(local_nz))
     IF(total_nz .EQ. 1) THEN
-      zweights_SR = 1._dp
+      zweights_SR = 1._xp
     ELSE
       DO iz = 1,local_nz
         IF(MODULO(iz+local_nz_offset,2) .EQ. 1) THEN ! odd iz
-          zweights_SR(iz) = onethird*deltaz*2._dp
+          zweights_SR(iz) = onethird*deltaz*2._xp
         ELSE ! even iz
-          zweights_SR(iz) = onethird*deltaz*4._dp
+          zweights_SR(iz) = onethird*deltaz*4._xp
         ENDIF
       ENDDO
     ENDIF
   END SUBROUTINE set_zgrid
 
   SUBROUTINE set_kparray(gxx, gxy, gyy,hatB)
-    REAL(dp), DIMENSION(local_nz+ngz,nzgrid), INTENT(IN) :: gxx,gxy,gyy,hatB
+    REAL(xp), DIMENSION(local_nz+ngz,nzgrid), INTENT(IN) :: gxx,gxy,gyy,hatB
     INTEGER     :: eo,iz,iky,ikx
-    REAL(dp)    :: kx, ky
+    REAL(xp)    :: kx, ky
     CALL allocate_array( kparray, 1,local_nky, 1,local_nkx, 1,local_nz+ngz, 1,nzgrid)
     DO eo = 1,nzgrid
       DO iz = 1,local_nz+ngz
@@ -591,12 +591,12 @@ CONTAINS
             ! there is a factor 1/B from the normalization; important to match GENE
             ! this factor comes from $b_a$ argument in the Bessel. Kperp is not used otherwise.
             kparray(iky, ikx, iz, eo) = &
-            SQRT( gxx(iz,eo)*kx**2 + 2._dp*gxy(iz,eo)*kx*ky + gyy(iz,eo)*ky**2)/ hatB(iz,eo)
+            SQRT( gxx(iz,eo)*kx**2 + 2._xp*gxy(iz,eo)*kx*ky + gyy(iz,eo)*ky**2)/ hatB(iz,eo)
           ENDDO
         ENDDO
       ENDDO
     ENDDO
-    two_third_kpmax = 2._dp/3._dp * MAXVAL(kparray)
+    two_third_kpmax = 2._xp/3._xp * MAXVAL(kparray)
   END SUBROUTINE
 
   SUBROUTINE grid_outputinputs(fid)
diff --git a/src/inital.F90 b/src/inital.F90
index d9813ba3..cfc88cb4 100644
--- a/src/inital.F90
+++ b/src/inital.F90
@@ -100,12 +100,12 @@ SUBROUTINE init_moments
                         ngp, ngj, ngz, iky0, contains_ky0, AA_x, AA_y
   USE initial_par,ONLY: iseed, init_noiselvl, init_background
   USE fields,     ONLY: moments
-  USE prec_const, ONLY: dp
+  USE prec_const, ONLY: xp
   USE model,      ONLY: LINEARITY
   USE parallel,   ONLY: my_id
   IMPLICIT NONE
 
-  REAL(dp) :: noise
+  REAL(xp) :: noise
   INTEGER, DIMENSION(12) :: iseedarr
   INTEGER  :: ia,ip,ij,ikx,iky,iz, ipi,iji,izi
 
@@ -124,7 +124,7 @@ SUBROUTINE init_moments
             DO iz=1,local_nz
               izi = iz+ngz/2
               CALL RANDOM_NUMBER(noise)
-              moments(ia,ipi,iji,iky,ikx,izi,:) = (init_background + init_noiselvl*(noise-0.5_dp))
+              moments(ia,ipi,iji,iky,ikx,izi,:) = (init_background + init_noiselvl*(noise-0.5_xp))
             END DO
           END DO
         END DO
@@ -163,20 +163,20 @@ SUBROUTINE init_gyrodens
   USE grid,       ONLY: local_na, local_np, local_nj, total_nkx, local_nky, local_nz,&
                         ngp, ngj, ngz, iky0, parray, jarray, contains_ky0, AA_x, AA_y
   USE fields,     ONLY: moments
-  USE prec_const, ONLY: dp
+  USE prec_const, ONLY: xp
   USE initial_par,ONLY: iseed, init_noiselvl, init_background
   USE model,      ONLY: LINEARITY
   USE parallel,   ONLY: my_id
   IMPLICIT NONE
 
-  REAL(dp) :: noise
+  REAL(xp) :: noise
   INTEGER  :: ia,ip,ij,ikx,iky,iz
   INTEGER, DIMENSION(12) :: iseedarr
 
   ! Seed random number generator
   iseedarr(:)=iseed
   CALL RANDOM_SEED(PUT=iseedarr+my_id)
-  moments = 0._dp
+  moments = 0._xp
     !**** Broad noise initialization *******************************************
   DO ia=1,local_na
     DO ip=1+ngp/2,local_np+ngp/2
@@ -186,9 +186,9 @@ SUBROUTINE init_gyrodens
             DO iz=1+ngz/2,local_nz+ngz/2
               CALL RANDOM_NUMBER(noise)
               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))
+                moments(ia,ip,ij,iky,ikx,iz,:) = (init_background + init_noiselvl*(noise-0.5_xp))
               ELSE
-                moments(ia,ip,ij,iky,ikx,iz,:) = 0._dp
+                moments(ia,ip,ij,iky,ikx,iz,:) = 0._xp
               ENDIF
             END DO
           END DO
@@ -225,12 +225,12 @@ SUBROUTINE init_phi
   USE grid,       ONLY: total_nkx, local_nky, local_nz,&
                         ngz, iky0, ikx0, contains_ky0
   USE fields,     ONLY: phi, moments
-  USE prec_const, ONLY: dp
+  USE prec_const, ONLY: xp
   USE initial_par,ONLY: iseed, init_noiselvl, init_background
   USE model,      ONLY: LINEARITY
   USE parallel,   ONLY: my_id
   IMPLICIT NONE
-  REAL(dp) :: noise
+  REAL(xp) :: noise
   INTEGER, DIMENSION(12) :: iseedarr
   INTEGER :: iky,ikx,iz
   ! Seed random number generator
@@ -241,7 +241,7 @@ SUBROUTINE init_phi
     DO iky=1,local_nky
       DO iz=1,local_nz+ngz
         CALL RANDOM_NUMBER(noise)
-        phi(iky,ikx,iz) = (init_background + init_noiselvl*(noise-0.5_dp))!*AA_x(ikx)*AA_y(iky)
+        phi(iky,ikx,iz) = (init_background + init_noiselvl*(noise-0.5_xp))!*AA_x(ikx)*AA_y(iky)
       ENDDO
     END DO
   END DO
@@ -251,11 +251,11 @@ 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),dp) !origin must be real
+    phi(iky0,ikx0,iz) = REAL(phi(iky0,ikx0,iz),xp) !origin must be real
   END DO
   ENDIF
   !**** ensure no previous moments initialization
-  moments = 0._dp
+  moments = 0._xp
   !**** Zonal Flow initialization *******************************************
   ! put a mode at ikx = mode number + 1, symmetry is already included since kx>=0
   ! IF(INIT_ZF .GT. 0) THEN
@@ -263,8 +263,8 @@ SUBROUTINE init_phi
   !   IF( (INIT_ZF+1 .GT. ikxs) .AND. (INIT_ZF+1 .LT. ikxe) ) THEN
   !     DO ia=1,local_na
   !       DO iz = 1,local_nz+ngz
-  !         phi(iky0,INIT_ZF+1,iz) = ZF_AMP*(2._dp*PI)**2/deltakx/deltaky/2._dp * COS((iz-1)/Nz*2._dp*PI)
-  !         moments(ia,ip0,ij0,iky0,INIT_ZF+1,iz,:) = kxarray(INIT_ZF+1)**2*phi(iky0,INIT_ZF+1,iz)* COS((iz-1)/Nz*2._dp*PI)
+  !         phi(iky0,INIT_ZF+1,iz) = ZF_AMP*(2._xp*PI)**2/deltakx/deltaky/2._xp * COS((iz-1)/Nz*2._xp*PI)
+  !         moments(ia,ip0,ij0,iky0,INIT_ZF+1,iz,:) = kxarray(INIT_ZF+1)**2*phi(iky0,INIT_ZF+1,iz)* COS((iz-1)/Nz*2._xp*PI)
   !       ENDDO
   !     ENDDO
   !   ENDIF
@@ -279,14 +279,14 @@ SUBROUTINE init_phi_ppj
   USE grid,       ONLY: total_nkx, local_nky, local_nz,&
                         ngz, iky0, ikx0, contains_ky0, ieven, kxarray, kyarray, zarray, deltakx
   USE fields,     ONLY: phi, moments
-  USE prec_const, ONLY: dp
+  USE prec_const, ONLY: xp
   USE initial_par,ONLY: iseed, init_noiselvl, init_background
   USE model,      ONLY: LINEARITY
   USE geometry,   ONLY: Jacobian, iInt_Jacobian
   IMPLICIT NONE
-  REAL(dp) :: kx, ky, z, amp
+  REAL(xp) :: kx, ky, z, amp
   INTEGER  :: ikx, iky, iz
-  amp = 1.0_dp
+  amp = 1.0_xp
     !**** ppj initialization *******************************************
       DO ikx=1,total_nkx
         kx = kxarray(ikx)
@@ -295,9 +295,9 @@ SUBROUTINE init_phi_ppj
           DO iz=1,local_nz+ngz
             z = zarray(iz,ieven)
             IF (ky .NE. 0) THEN
-              phi(iky,ikx,iz) = 0._dp
+              phi(iky,ikx,iz) = 0._xp
             ELSE
-              phi(iky,ikx,iz) = 0.5_dp*amp*(deltakx/(ABS(kx)+deltakx))
+              phi(iky,ikx,iz) = 0.5_xp*amp*(deltakx/(ABS(kx)+deltakx))
             ENDIF
             ! z-dep and noise
             phi(iky,ikx,iz) = phi(iky,ikx,iz) * &
@@ -311,11 +311,11 @@ 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),dp) !origin must be real
+        phi(iky0,ikx0,iz) = REAL(phi(iky0,ikx0,iz),xp) !origin must be real
       END DO
     ENDIF
     !**** ensure no previous moments initialization
-    moments = 0._dp
+    moments = 0._xp
 END SUBROUTINE init_phi_ppj
 !******************************************************************************!
 
@@ -328,12 +328,12 @@ SUBROUTINE initialize_blob
                         AA_x, AA_y, parray, jarray,&
                         ngp,ngj,ngz, iky0, ieven, kxarray, kyarray, zarray
   USE fields,     ONLY: moments
-  USE prec_const, ONLY: dp
+  USE prec_const, ONLY: xp
   USE initial_par,ONLY: iseed, init_noiselvl, init_background
   USE model,      ONLY: LINEARITY
   USE geometry,   ONLY: Jacobian, iInt_Jacobian, shear
   IMPLICIT NONE
-  REAL(dp) ::kx, ky, z, sigma_x, sigma_y, gain
+  REAL(xp) ::kx, ky, z, sigma_x, sigma_y, gain
   INTEGER :: ia,iky,ikx,iz,ip,ij, p, j
   sigma_y = 1.0
   sigma_x = sigma_y
@@ -372,15 +372,15 @@ SUBROUTINE init_ppj
                         AA_x, AA_y, deltakx, deltaky,contains_ky0,&
                         ngp,ngj,ngz, iky0, ieven, kxarray, kyarray, zarray
   USE fields,     ONLY: moments
-  USE prec_const, ONLY: dp, pi
+  USE prec_const, ONLY: xp, pi
   USE initial_par,ONLY: iseed, init_noiselvl, init_background
   USE model,      ONLY: LINEARITY
   USE geometry,   ONLY: Jacobian, iInt_Jacobian, shear
   IMPLICIT NONE
-  REAL(dp) :: kx, ky, sigma_z, amp, z
+  REAL(xp) :: kx, ky, sigma_z, amp, z
   INTEGER :: ia,iky,ikx,iz,ip,ij
-  sigma_z = pi/4._dp
-  amp = 1.0_dp
+  sigma_z = pi/4._xp
+  amp = 1.0_xp
     !**** Broad noise initialization *******************************************
     DO ia=1,local_na
       DO ip=1,local_np+ngp
@@ -394,15 +394,15 @@ SUBROUTINE init_ppj
                   z = zarray(iz,ieven)
                   IF (kx .EQ. 0) THEN
                     IF(ky .EQ. 0) THEN
-                      moments(ia,ip,ij,iky,ikx,iz,:) = 0._dp
+                      moments(ia,ip,ij,iky,ikx,iz,:) = 0._xp
                     ELSE
-                      moments(ia,ip,ij,iky,ikx,iz,:) = 0.5_dp * deltaky/(ABS(ky)+deltaky)
+                      moments(ia,ip,ij,iky,ikx,iz,:) = 0.5_xp * deltaky/(ABS(ky)+deltaky)
                     ENDIF
                   ELSE
                     IF(ky .GT. 0) THEN
                       moments(ia,ip,ij,iky,ikx,iz,:) = (deltakx/(ABS(kx)+deltakx))*(deltaky/(ABS(ky)+deltaky))
                     ELSE
-                      moments(ia,ip,ij,iky,ikx,iz,:) = 0.5_dp*amp*(deltakx/(ABS(kx)+deltakx))
+                      moments(ia,ip,ij,iky,ikx,iz,:) = 0.5_xp*amp*(deltakx/(ABS(kx)+deltakx))
                     ENDIF
                   ENDIF
                   ! z-dep and noise
@@ -419,7 +419,7 @@ SUBROUTINE init_ppj
               END DO
             ENDIF
         ELSE
-          moments(ia,ip,ij,:,:,:,:) = 0._dp
+          moments(ia,ip,ij,:,:,:,:) = 0._xp
         ENDIF
       END DO
     END DO
diff --git a/src/initial_par_mod.F90 b/src/initial_par_mod.F90
index 0b95194f..4fd93b0b 100644
--- a/src/initial_par_mod.F90
+++ b/src/initial_par_mod.F90
@@ -9,13 +9,13 @@ MODULE initial_par
   CHARACTER(len=32), PUBLIC, PROTECTED :: INIT_OPT = 'phi'
   ! Initialization through a zonal flow phi
   INTEGER,  PUBLIC, PROTECTED :: INIT_ZF    = 0
-  REAL(DP), PUBLIC, PROTECTED :: ZF_AMP     = 1E+3_dp
+  REAL(xp), PUBLIC, PROTECTED :: ZF_AMP     = 1E+3_xp
   ! Act on modes artificially (keep/wipe, zonal, non zonal, entropy mode etc.)
   CHARACTER(len=32),  PUBLIC, PROTECTED :: ACT_ON_MODES = 'nothing'
   ! Initial background level
-  REAL(dp), PUBLIC, PROTECTED :: init_background=0._dp
+  REAL(xp), PUBLIC, PROTECTED :: init_background=0._xp
   ! Initial noise amplitude
-  REAL(dp), PUBLIC, PROTECTED :: init_noiselvl=1E-6_dp
+  REAL(xp), PUBLIC, PROTECTED :: init_noiselvl=1E-6_xp
   ! Initialization for random number generator
   INTEGER,  PUBLIC, PROTECTED :: iseed=42
 
diff --git a/src/lag_interp_mod.F90 b/src/lag_interp_mod.F90
index 8415df5d..39cea31f 100644
--- a/src/lag_interp_mod.F90
+++ b/src/lag_interp_mod.F90
@@ -21,11 +21,11 @@ CONTAINS
   !> Third order lagrange interpolation
   SUBROUTINE lag3interp_scalar(y_in,x_in,n_in,y_out,x_out)
     INTEGER, INTENT(IN) :: n_in
-    REAL(dp), DIMENSION(n_in), INTENT(IN) :: y_in,x_in
-    REAL(dp), INTENT(IN) :: x_out
-    REAL(dp), INTENT(OUT) :: y_out
+    REAL(xp), DIMENSION(n_in), INTENT(IN) :: y_in,x_in
+    REAL(xp), INTENT(IN) :: x_out
+    REAL(xp), INTENT(OUT) :: y_out
 
-    REAL(dp), DIMENSION(1) :: xout_wrap, yout_wrap
+    REAL(xp), DIMENSION(1) :: xout_wrap, yout_wrap
 
     xout_wrap = x_out
     call lag3interp_array(y_in,x_in,n_in,yout_wrap,xout_wrap,1)
@@ -36,11 +36,11 @@ CONTAINS
   !> Third order lagrange interpolation
   subroutine lag3interp_array(y_in,x_in,n_in,y_out,x_out,n_out)
     INTEGER, INTENT(IN) :: n_in,n_out
-    REAL(dp), DIMENSION(n_in), INTENT(IN) :: y_in,x_in
-    REAL(dp), DIMENSION(n_out), INTENT(IN) :: x_out
-    REAL(dp), DIMENSION(n_out), INTENT(OUT) :: y_out
+    REAL(xp), DIMENSION(n_in), INTENT(IN) :: y_in,x_in
+    REAL(xp), DIMENSION(n_out), INTENT(IN) :: x_out
+    REAL(xp), DIMENSION(n_out), INTENT(OUT) :: y_out
 
-    REAL(dp) :: x,aintm,aint0,aint1,aint2,xm,x0,x1,x2
+    REAL(xp) :: x,aintm,aint0,aint1,aint2,xm,x0,x1,x2
     INTEGER :: j,jm,j0,j1,j2
     INTEGER :: jstart,jfirst,jlast,jstep
 
@@ -91,11 +91,11 @@ CONTAINS
   SUBROUTINE lag3interp_complex(y_in,x_in,n_in,y_out,x_out,n_out)
     INTEGER, INTENT(IN) :: n_in,n_out
     COMPLEX, DIMENSION(n_in), INTENT(IN) :: y_in
-    REAL(dp), DIMENSION(n_in), INTENT(IN) :: x_in
+    REAL(xp), DIMENSION(n_in), INTENT(IN) :: x_in
     COMPLEX, DIMENSION(n_out), INTENT(OUT) :: y_out
-    REAL(dp), DIMENSION(n_out), INTENT(IN) :: x_out
+    REAL(xp), DIMENSION(n_out), INTENT(IN) :: x_out
 
-    REAL(dp) :: x,aintm,aint0,aint1,aint2,xm,x0,x1,x2
+    REAL(xp) :: x,aintm,aint0,aint1,aint2,xm,x0,x1,x2
     INTEGER :: j,jm,j0,j1,j2
     INTEGER :: jstart,jfirst,jlast,jstep
 
@@ -143,22 +143,22 @@ CONTAINS
 
 
   !>2D interpolation
-  !\TODO check whether a "REAL(dp)" 2D interpolation would
+  !\TODO check whether a "REAL(xp)" 2D interpolation would
   !! be more appropriate
   SUBROUTINE lag3interp_2d(y_in,x1_in,n1_in,x2_in,n2_in,&
        &y_out,x1_out,n1_out,x2_out,n2_out)
     INTEGER, INTENT(IN) :: n1_in,n2_in,n1_out,n2_out
-    REAL(dp), DIMENSION(n1_in,n2_in), INTENT(IN) :: y_in
-    REAL(dp), DIMENSION(n1_in) :: x1_in
-    REAL(dp), DIMENSION(n2_in) :: x2_in
-    REAL(dp), DIMENSION(n1_out), INTENT(IN) :: x1_out
-    REAL(dp), DIMENSION(n2_out), INTENT(IN) :: x2_out
-    REAL(dp), DIMENSION(n1_out,n2_out), INTENT(OUT) :: y_out
+    REAL(xp), DIMENSION(n1_in,n2_in), INTENT(IN) :: y_in
+    REAL(xp), DIMENSION(n1_in) :: x1_in
+    REAL(xp), DIMENSION(n2_in) :: x2_in
+    REAL(xp), DIMENSION(n1_out), INTENT(IN) :: x1_out
+    REAL(xp), DIMENSION(n2_out), INTENT(IN) :: x2_out
+    REAL(xp), DIMENSION(n1_out,n2_out), INTENT(OUT) :: y_out
 
     !local variables
-    REAL(dp), DIMENSION(n2_in) :: y2_in_tmp
-    REAL(dp), DIMENSION(n2_out) :: y2_out_tmp
-    REAL(dp), DIMENSION(n1_in,n2_out) :: y_tmp
+    REAL(xp), DIMENSION(n2_in) :: y2_in_tmp
+    REAL(xp), DIMENSION(n2_out) :: y2_out_tmp
+    REAL(xp), DIMENSION(n1_in,n2_out) :: y_tmp
     INTEGER :: i
 
     DO i=1,n1_in
@@ -181,11 +181,11 @@ CONTAINS
     IMPLICIT NONE
 
     INTEGER, INTENT(IN) :: n_in
-    REAL(dp), DIMENSION(n_in), INTENT(IN) :: y_in,x_in
-    REAL(dp), INTENT(IN) :: x_out
-    REAL(dp), INTENT(OUT) :: dydx_out
+    REAL(xp), DIMENSION(n_in), INTENT(IN) :: y_in,x_in
+    REAL(xp), INTENT(IN) :: x_out
+    REAL(xp), INTENT(OUT) :: dydx_out
 
-    REAL(dp), DIMENSION(1) :: xout_wrap, dydxout_wrap
+    REAL(xp), DIMENSION(1) :: xout_wrap, dydxout_wrap
 
     xout_wrap = x_out
     call lag3deriv_array(y_in,x_in,n_in,dydxout_wrap,xout_wrap,1)
@@ -198,11 +198,11 @@ CONTAINS
 !>Returns Derivative based on a 3rd order lagrange interpolation
   subroutine lag3deriv_array(y_in,x_in,n_in,dydx_out,x_out,n_out)
     INTEGER :: n_in,n_out
-    REAL(dp), DIMENSION(n_in), INTENT(IN) :: y_in,x_in
-    REAL(dp), DIMENSION(n_out), INTENT(IN) :: x_out
-    REAL(dp), DIMENSION(n_out), INTENT(OUT) :: dydx_out
+    REAL(xp), DIMENSION(n_in), INTENT(IN) :: y_in,x_in
+    REAL(xp), DIMENSION(n_out), INTENT(IN) :: x_out
+    REAL(xp), DIMENSION(n_out), INTENT(OUT) :: dydx_out
 
-    REAL(dp) :: x,aintm,aint0,aint1,aint2,xm,x0,x1,x2
+    REAL(xp) :: x,aintm,aint0,aint1,aint2,xm,x0,x1,x2
     INTEGER :: j,jm,j0,j1,j2
     INTEGER :: jstart,jfirst,jlast,jstep
 
diff --git a/src/miller_mod.F90 b/src/miller_mod.F90
index 3ecce924..495347eb 100644
--- a/src/miller_mod.F90
+++ b/src/miller_mod.F90
@@ -20,15 +20,15 @@ MODULE miller
 
   private
 
-  real(dp) :: rho, kappa, delta, s_kappa, s_delta, drR, drZ, zeta, s_zeta
-  real(dp) :: thetaShift
-  real(dp) :: thetak, thetad
+  real(xp) :: rho, kappa, delta, s_kappa, s_delta, drR, drZ, zeta, s_zeta
+  real(xp) :: thetaShift
+  real(xp) :: thetak, thetad
   INTEGER  :: ierr
 CONTAINS
 
   !>Set defaults for miller parameters
   subroutine set_miller_parameters(kappa_,s_kappa_,delta_,s_delta_,zeta_,s_zeta_)
-    real(dp), INTENT(IN) :: kappa_,s_kappa_,delta_,s_delta_,zeta_,s_zeta_
+    real(xp), INTENT(IN) :: kappa_,s_kappa_,delta_,s_delta_,zeta_,s_zeta_
     rho     = -1.0
     kappa   = kappa_
     s_kappa = s_kappa_
@@ -46,62 +46,62 @@ CONTAINS
 
   !>Get Miller metric, magnetic field, jacobian etc.
   subroutine get_miller(trpeps,major_R,major_Z,q0,shat,Npol,amhd,edge_opt,&
-       C_y,C_xy,dpdx_pm_geom,gxx_,gyy_,gzz_,gxy_,gxz_,gyz_,dBdx_,dBdy_,&
+       C_y,C_xy,xpdx_pm_geom,gxx_,gyy_,gzz_,gxy_,gxz_,gyz_,dBdx_,dBdy_,&
        Bfield_,jacobian_,dBdz_,R_hat_,Z_hat_,dxdR_,dxdZ_,Ckxky_,gradz_coeff_)
     !!!!!!!!!!!!!!!! GYACOMO INTERFACE !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-    real(dp), INTENT(INOUT) :: trpeps          ! eps in gyacomo (inverse aspect ratio)
-    real(dp), INTENT(INOUT) :: major_R         ! major radius
-    real(dp), INTENT(INOUT) :: major_Z         ! major Z
-    real(dp), INTENT(INOUT) :: q0              ! safetyfactor
-    real(dp), INTENT(INOUT) :: shat            ! safetyfactor
+    real(xp), INTENT(INOUT) :: trpeps          ! eps in gyacomo (inverse aspect ratio)
+    real(xp), INTENT(INOUT) :: major_R         ! major radius
+    real(xp), INTENT(INOUT) :: major_Z         ! major Z
+    real(xp), INTENT(INOUT) :: q0              ! safetyfactor
+    real(xp), INTENT(INOUT) :: shat            ! safetyfactor
     INTEGER,  INTENT(IN)    :: Npol            ! number of poloidal turns
-    real(dp), INTENT(INOUT) :: amhd            ! alpha mhd
-    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(xp), INTENT(INOUT) :: amhd            ! alpha mhd
+    real(xp), INTENT(INOUT) :: edge_opt        ! alpha mhd
+    real(xp), INTENT(INOUT) :: xpdx_pm_geom    ! amplitude mag. eq. pressure grad.
+    real(xp), INTENT(INOUT) :: C_y, C_xy
+    real(xp), 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(xp), 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)
-    real(dp) :: sign_Bt_CW=1 ! current sign (only normal current)
+    real(xp) :: sign_Ip_CW=1 ! current sign (only normal current)
+    real(xp) :: sign_Bt_CW=1 ! current sign (only normal current)
     !!!!!!!!!!!!!! END GYACOMO INTERFACE !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
     ! Auxiliary variables for curvature computation
-    real(dp) :: G1,G2,G3,Cx,Cy,ky,kx
+    real(xp) :: G1,G2,G3,Cx,Cy,ky,kx
 
     integer:: np, np_s, Npol_ext, Npol_s
 
-    real(dp), dimension(500*(Npol+2)):: R,Z,R_rho,Z_rho,R_theta,Z_theta,R_theta_theta,Z_theta_theta,dlp,Rc,cosu,sinu,Bphi
-    real(dp), dimension(500*(Npol+2)):: drRcirc, drRelong, drRelongTilt, drRtri, drRtriTilt, drZcirc, drZelong, drZelongTilt
-    real(dp), dimension(500*(Npol+2)):: drZtri, drZtriTilt, dtdtRcirc, dtdtRelong, dtdtRelongTilt, dtdtRtri, dtdtRtriTilt
-    real(dp), dimension(500*(Npol+2)):: dtdtZcirc, dtdtZelong, dtdtZelongTilt, dtdtZtri, dtdtZtriTilt, dtRcirc, dtRelong
-    real(dp), dimension(500*(Npol+2)):: dtRelongTilt, dtRtri, dtRtriTilt, dtZcirc, dtZelong, dtZelongTilt, dtZtri, dtZtriTilt
-    real(dp), dimension(500*(Npol+2)):: Rcirc, Relong, RelongTilt, Rtri, RtriTilt, Zcirc, Zelong, ZelongTilt, Ztri, ZtriTilt
-    ! real(dp), dimension(500*(Npol+2)):: drrShape, drrAng, drxAng, dryAng, dtdtrShape, dtdtrAng, dtdtxAng
-    ! real(dp), dimension(500*(Npol+2)):: dtdtyAng, dtrShape, dtrAng, dtxAng, dtyAng, rShape, rAng, xAng, yAng
-    real(dp), dimension(500*(Npol+2)):: theta, thAdj, J_r, B, Bp, D0, D1, D2, D3, nu, chi, psi1, nu1
-    real(dp), dimension(500*(Npol+2)):: tmp_reverse, theta_reverse, tmp_arr
-
-    real(dp), dimension(500*(Npol+1)):: theta_s, thAdj_s, chi_s, theta_s_reverse
-    real(dp), dimension(500*(Npol+1)):: R_s, Z_s, R_theta_s, Z_theta_s, Rc_s, cosu_s, sinu_s, Bphi_s, B_s, Bp_s, dlp_s
-    real(dp), dimension(500*(Npol+1)):: dtRcirc_s, dtRelong_s, dtRelongTilt_s, dtRtri_s, dtRtriTilt_s, dtZcirc_s
-    real(dp), dimension(500*(Npol+1)):: dtZelong_s, dtZelongTilt_s, dtZtri_s, dtZtriTilt_s, Rcirc_s, Relong_s, RelongTilt_s
-    real(dp), dimension(500*(Npol+1)):: Rtri_s, RtriTilt_s, Zcirc_s, Zelong_s, ZelongTilt_s, Ztri_s, ZtriTilt_s!, dtrShape_s
-    ! real(dp), dimension(500*(Npol+1)):: dtrAng_s, dtxAng_s, dtyAng_s, rShape_s, rAng_s, xAng_s, yAng_s
-    real(dp), dimension(500*(Npol+1)):: psi1_s, nu1_s, dchidx_s, dB_drho_s, dB_dl_s, dnu_drho_s, dnu_dl_s, grad_nu_s
-    real(dp), dimension(500*(Npol+1)):: gxx, gxy, gxz, gyy, gyz, gzz, dtheta_dchi_s, dBp_dchi_s, jacobian, dBdx, dBdz
-    real(dp), dimension(500*(Npol+1)):: g_xx, g_xy, g_xz, g_yy, g_yz, g_zz, tmp_arr_s, dxdR_s, dxdZ_s, K_x, K_y !tmp_arr2
-
-    real(dp), dimension(1:Nz):: gxx_out,gxy_out,gxz_out,gyy_out,gyz_out,gzz_out,Bfield_out,jacobian_out, dBdx_out, dBdz_out, chi_out
-    real(dp), dimension(1:Nz):: R_out, Z_out, dxdR_out, dxdZ_out
-    real(dp):: d_inv, drPsi, dxPsi, dq_dx, dq_dpsi, R0, Z0, B0, F, D0_full, D1_full, D2_full, D3_full
-    !real(dp) :: Lnorm, Psi0 ! currently module-wide defined anyway
-    real(dp):: pprime, ffprime, D0_mid, D1_mid, D2_mid, D3_mid, dx_drho, pi, mu_0, dzprimedz
-    ! real(dp):: rho_a, psiN, drpsiN, CN2, CN3, Rcenter, Zcenter, drRcenter, drZcenter
+    real(xp), dimension(500*(Npol+2)):: R,Z,R_rho,Z_rho,R_theta,Z_theta,R_theta_theta,Z_theta_theta,dlp,Rc,cosu,sinu,Bphi
+    real(xp), dimension(500*(Npol+2)):: drRcirc, drRelong, drRelongTilt, drRtri, drRtriTilt, drZcirc, drZelong, drZelongTilt
+    real(xp), dimension(500*(Npol+2)):: drZtri, drZtriTilt, dtdtRcirc, dtdtRelong, dtdtRelongTilt, dtdtRtri, dtdtRtriTilt
+    real(xp), dimension(500*(Npol+2)):: dtdtZcirc, dtdtZelong, dtdtZelongTilt, dtdtZtri, dtdtZtriTilt, dtRcirc, dtRelong
+    real(xp), dimension(500*(Npol+2)):: dtRelongTilt, dtRtri, dtRtriTilt, dtZcirc, dtZelong, dtZelongTilt, dtZtri, dtZtriTilt
+    real(xp), dimension(500*(Npol+2)):: Rcirc, Relong, RelongTilt, Rtri, RtriTilt, Zcirc, Zelong, ZelongTilt, Ztri, ZtriTilt
+    ! real(xp), dimension(500*(Npol+2)):: drrShape, drrAng, drxAng, dryAng, dtdtrShape, dtdtrAng, dtdtxAng
+    ! real(xp), dimension(500*(Npol+2)):: dtdtyAng, dtrShape, dtrAng, dtxAng, dtyAng, rShape, rAng, xAng, yAng
+    real(xp), dimension(500*(Npol+2)):: theta, thAdj, J_r, B, Bp, D0, D1, D2, D3, nu, chi, psi1, nu1
+    real(xp), dimension(500*(Npol+2)):: tmp_reverse, theta_reverse, tmp_arr
+
+    real(xp), dimension(500*(Npol+1)):: theta_s, thAdj_s, chi_s, theta_s_reverse
+    real(xp), dimension(500*(Npol+1)):: R_s, Z_s, R_theta_s, Z_theta_s, Rc_s, cosu_s, sinu_s, Bphi_s, B_s, Bp_s, dlp_s
+    real(xp), dimension(500*(Npol+1)):: dtRcirc_s, dtRelong_s, dtRelongTilt_s, dtRtri_s, dtRtriTilt_s, dtZcirc_s
+    real(xp), dimension(500*(Npol+1)):: dtZelong_s, dtZelongTilt_s, dtZtri_s, dtZtriTilt_s, Rcirc_s, Relong_s, RelongTilt_s
+    real(xp), dimension(500*(Npol+1)):: Rtri_s, RtriTilt_s, Zcirc_s, Zelong_s, ZelongTilt_s, Ztri_s, ZtriTilt_s!, dtrShape_s
+    ! real(xp), dimension(500*(Npol+1)):: dtrAng_s, dtxAng_s, dtyAng_s, rShape_s, rAng_s, xAng_s, yAng_s
+    real(xp), dimension(500*(Npol+1)):: psi1_s, nu1_s, dchidx_s, dB_drho_s, dB_dl_s, dnu_drho_s, dnu_dl_s, grad_nu_s
+    real(xp), dimension(500*(Npol+1)):: gxx, gxy, gxz, gyy, gyz, gzz, dtheta_dchi_s, dBp_dchi_s, jacobian, dBdx, dBdz
+    real(xp), dimension(500*(Npol+1)):: g_xx, g_xy, g_xz, g_yy, g_yz, g_zz, tmp_arr_s, dxdR_s, dxdZ_s, K_x, K_y !tmp_arr2
+
+    real(xp), dimension(1:Nz):: gxx_out,gxy_out,gxz_out,gyy_out,gyz_out,gzz_out,Bfield_out,jacobian_out, dBdx_out, dBdz_out, chi_out
+    real(xp), dimension(1:Nz):: R_out, Z_out, dxdR_out, dxdZ_out
+    real(xp):: d_inv, drPsi, dxPsi, dq_dx, dq_xpsi, R0, Z0, B0, F, D0_full, D1_full, D2_full, D3_full
+    !real(xp) :: Lnorm, Psi0 ! currently module-wide defined anyway
+    real(xp):: pprime, ffprime, D0_mid, D1_mid, D2_mid, D3_mid, dx_drho, pi, mu_0, dzprimedz
+    ! real(xp):: rho_a, psiN, drpsiN, CN2, CN3, Rcenter, Zcenter, drRcenter, drZcenter
     logical:: bMaxShift
     integer:: i, k, iBmax
 
@@ -123,7 +123,7 @@ CONTAINS
     pi = acos(-1.0)
     mu_0=4.0*pi
 
-    theta=linspace(-pi*Npol_ext,pi*Npol_ext-2._dp*pi*Npol_ext/np,np)
+    theta=linspace(-pi*Npol_ext,pi*Npol_ext-2._xp*pi*Npol_ext/np,np)
     d_inv=asin(delta)
 
     thetaShift = 0.0
@@ -263,11 +263,11 @@ CONTAINS
 
     !--------shear is expected to be defined as rho/q*dq/drho--------!
     dq_dx=shat*q0/rho/dx_drho
-    dq_dpsi=dq_dx/dxPsi
+    dq_xpsi=dq_dx/dxPsi
     pprime=-amhd/q0**2/R0/(2*mu_0)*B0**2/drPsi
 
-    !neg. dpdx normalized to magnetic pressure for pressure term
-    dpdx_pm_geom=amhd/q0**2/R0/dx_drho
+    !neg. xpdx normalized to magnetic pressure for pressure term
+    xpdx_pm_geom=amhd/q0**2/R0/dx_drho
 
     !first coefficient of psi in varrho expansion
     psi1 = R*Bp*sign_Ip_CW
@@ -296,7 +296,7 @@ CONTAINS
     D2_mid=D2(np/2+1)
     D3_mid=D3(np/2+1)
 
-    ffprime=-(sign_Ip_CW*dq_dpsi*2.*pi*Npol_ext+D0_full+D2_full*pprime)/D1_full
+    ffprime=-(sign_Ip_CW*dq_xpsi*2.*pi*Npol_ext+D0_full+D2_full*pprime)/D1_full
 
     if (my_id==0) then
        write(*,'(A,ES12.4)') "ffprime = ", ffprime
@@ -405,10 +405,10 @@ CONTAINS
     !contravariant metric coefficients (varrho,l,fz)->(x,y,z)
     gxx=(psi1_s/dxPsi)**2
     gxy=-psi1_s/dxPsi*C_y*sign_Ip_CW*nu1_s
-    gxz=-psi1_s/dxPsi*(nu1_s+psi1_s*dq_dpsi*chi_s)/q0
+    gxz=-psi1_s/dxPsi*(nu1_s+psi1_s*dq_xpsi*chi_s)/q0
     gyy=C_y**2*(grad_nu_s**2+1/R_s**2)
-    gyz=sign_Ip_CW*C_y/q0*(grad_nu_s**2+dq_dpsi*nu1_s*psi1_s*chi_s)
-    gzz=1./q0**2*(grad_nu_s**2+2.*dq_dpsi*nu1_s*psi1_s*chi_s+(dq_dpsi*psi1_s*chi_s)**2)
+    gyz=sign_Ip_CW*C_y/q0*(grad_nu_s**2+dq_xpsi*nu1_s*psi1_s*chi_s)
+    gzz=1./q0**2*(grad_nu_s**2+2.*dq_xpsi*nu1_s*psi1_s*chi_s+(dq_xpsi*psi1_s*chi_s)**2)
 
     jacobian=1./sqrt(gxx*gyy*gzz + 2.*gxy*gyz*gxz - gxz**2*gyy - gyz**2*gxx - gzz*gxy**2)
 
@@ -422,7 +422,7 @@ CONTAINS
 
     !Bfield derivatives
     !dBdx = e_x * nabla B = J (nabla y x nabla z) * nabla B
-    dBdx=jacobian*C_y/(q0*R_s)*(F/(R_s*psi1_s)*dB_drho_s+(nu1_s+dq_dpsi*chi_s*psi1_s)*dB_dl_s)
+    dBdx=jacobian*C_y/(q0*R_s)*(F/(R_s*psi1_s)*dB_drho_s+(nu1_s+dq_xpsi*chi_s*psi1_s)*dB_dl_s)
     dBdz=1./B_s*(Bp_s*dBp_dchi_s-F**2/R_s**3*R_theta_s)
 
     !curvature terms (these are just local and will be recalculated in geometry.F90)
@@ -526,7 +526,7 @@ CONTAINS
          ENDDO
       ENDDO
       ! coefficient in the front of parallel derivative
-      gradz_coeff_(iz,eo) = 1._dp / jacobian_(iz,eo) / Bfield_(iz,eo)
+      gradz_coeff_(iz,eo) = 1._xp / jacobian_(iz,eo) / Bfield_(iz,eo)
     ENDDO
   ENDDO
 
@@ -536,8 +536,8 @@ 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(-2:2) :: buff
+      REAL(xp), DIMENSION(1:local_nz+Ngz), INTENT(INOUT) :: fz_
+      REAL(xp), DIMENSION(-2:2) :: buff
       INTEGER :: status(MPI_STATUS_SIZE), count, last, first
       last = local_nz+Ngz/2
       first= 1 + Ngz/2
@@ -578,9 +578,9 @@ CONTAINS
 
     !> Generate an equidistant array from min to max with n points
     function linspace(min,max,n) result(out)
-      real(dp), INTENT(IN):: min, max
+      real(xp), INTENT(IN):: min, max
       integer,  INTENT(IN):: n
-      real(dp), dimension(n):: out
+      real(xp), dimension(n):: out
 
       do i=1,n
          out(i)=min+(i-1)*(max-min)/(n-1)
@@ -588,20 +588,20 @@ CONTAINS
     end function linspace
 
     !> Weighted average
-    real(dp) function average(var,weight)
-      real(dp), dimension(np), INTENT(IN):: var, weight
+    real(xp) function average(var,weight)
+      real(xp), dimension(np), INTENT(IN):: var, weight
       average=sum(var*weight)/sum(weight)
     end function average
 
     !> full theta integral with weight function dlp
-    real(dp) function dlp_int(var,dlp)
-      real(dp), dimension(np), INTENT(IN):: var, dlp
+    real(xp) function dlp_int(var,dlp)
+      real(xp), dimension(np), INTENT(IN):: var, dlp
       dlp_int=sum(var*dlp)*2*pi*Npol_ext/np
     end function dlp_int
 
     !> theta integral with weight function dlp, up to index 'ind'
-    real(dp) function dlp_int_ind(var,dlp,ind)
-      real(dp), dimension(np), INTENT(IN):: var, dlp
+    real(xp) function dlp_int_ind(var,dlp,ind)
+      real(xp), dimension(np), INTENT(IN):: var, dlp
       integer, INTENT(IN):: ind
 
       dlp_int_ind=0.
@@ -615,8 +615,8 @@ CONTAINS
     !> 1st derivative with 2nd order finite differences
     function deriv_fd(y,x,n) result(out)
       integer,                INTENT(IN) :: n
-      real(dp), dimension(n), INTENT(IN):: x,y
-      real(dp), dimension(n) :: out,dx
+      real(xp), dimension(n), INTENT(IN):: x,y
+      real(xp), dimension(n) :: out,dx
 
       !call lag3deriv(y,x,n,out,x,n)
 
diff --git a/src/model_mod.F90 b/src/model_mod.F90
index ae9df467..6d93410a 100644
--- a/src/model_mod.F90
+++ b/src/model_mod.F90
@@ -9,23 +9,23 @@ MODULE model
   INTEGER,  PUBLIC, PROTECTED ::    KERN =  0         ! Kernel model
   CHARACTER(len=16), &
             PUBLIC, PROTECTED ::LINEARITY= 'linear'   ! To turn on non linear bracket term
-  REAL(dp), PUBLIC, PROTECTED ::    mu_x =  0._dp     ! spatial    x-Hyperdiffusivity coefficient (for num. stability)
-  REAL(dp), PUBLIC, PROTECTED ::    mu_y =  0._dp     ! spatial    y-Hyperdiffusivity coefficient (for num. stability)
+  REAL(xp), PUBLIC, PROTECTED ::    mu_x =  0._xp     ! spatial    x-Hyperdiffusivity coefficient (for num. stability)
+  REAL(xp), PUBLIC, PROTECTED ::    mu_y =  0._xp     ! spatial    y-Hyperdiffusivity coefficient (for num. stability)
   INTEGER,  PUBLIC, PROTECTED ::    N_HD =  4         ! order of numerical spatial diffusion
   LOGICAL,  PUBLIC, PROTECTED ::   HDz_h =  .false.    ! to apply z-hyperdiffusion on non adiab part
-  REAL(dp), PUBLIC, PROTECTED ::    mu_z =  0._dp     ! spatial    z-Hyperdiffusivity coefficient (for num. stability)
-  REAL(dp), PUBLIC, PROTECTED ::    mu_p =  0._dp     ! kinetic para hyperdiffusivity coefficient (for num. stability)
-  REAL(dp), PUBLIC, PROTECTED ::    mu_j =  0._dp     ! kinetic perp hyperdiffusivity coefficient (for num. stability)
+  REAL(xp), PUBLIC, PROTECTED ::    mu_z =  0._xp     ! spatial    z-Hyperdiffusivity coefficient (for num. stability)
+  REAL(xp), PUBLIC, PROTECTED ::    mu_p =  0._xp     ! kinetic para hyperdiffusivity coefficient (for num. stability)
+  REAL(xp), PUBLIC, PROTECTED ::    mu_j =  0._xp     ! kinetic perp hyperdiffusivity coefficient (for num. stability)
   CHARACTER(len=16), &
   PUBLIC, PROTECTED ::   HYP_V = 'hypcoll'  ! hyperdiffusion model for velocity space ('none','hypcoll','dvpar4')
   INTEGER,  PUBLIC, PROTECTED ::      Na =  1         ! number of evolved species
-  REAL(dp), PUBLIC, PROTECTED ::      nu =  0._dp     ! collision frequency parameter
-  REAL(dp), PUBLIC, PROTECTED ::    k_gB =  1._dp     ! Magnetic gradient strength (L_ref/L_gB)
-  REAL(dp), PUBLIC, PROTECTED ::    k_cB =  1._dp     ! Magnetic curvature strength (L_ref/L_cB)
-  REAL(dp), PUBLIC, PROTECTED :: lambdaD =  0._dp     ! Debye length
-  REAL(dp), PUBLIC, PROTECTED ::    beta =  0._dp     ! electron plasma Beta (8piNT_e/B0^2)
+  REAL(xp), PUBLIC, PROTECTED ::      nu =  0._xp     ! collision frequency parameter
+  REAL(xp), PUBLIC, PROTECTED ::    k_gB =  1._xp     ! Magnetic gradient strength (L_ref/L_gB)
+  REAL(xp), PUBLIC, PROTECTED ::    k_cB =  1._xp     ! Magnetic curvature strength (L_ref/L_cB)
+  REAL(xp), PUBLIC, PROTECTED :: lambdaD =  0._xp     ! Debye length
+  REAL(xp), PUBLIC, PROTECTED ::    beta =  0._xp     ! electron plasma Beta (8piNT_e/B0^2)
   LOGICAL,  PUBLIC            :: ADIAB_E =  .false.   ! adiabatic electron model
-  REAL(dp), PUBLIC, PROTECTED ::   tau_e = 1.0        ! electron temperature ratio for adiabatic electrons
+  REAL(xp), PUBLIC, PROTECTED ::   tau_e = 1.0        ! electron temperature ratio for adiabatic electrons
   ! Auxiliary variable
   LOGICAL,  PUBLIC, PROTECTED ::      EM =  .false.   ! Electromagnetic effects flag
   PUBLIC :: model_readinputs, model_outputinputs
@@ -51,7 +51,7 @@ CONTAINS
 
     IF(Na .EQ. 1) THEN
       IF(my_id.EQ.0) print*, 'Adiabatic electron model -> beta = 0'
-      beta = 0._dp
+      beta = 0._xp
     ENDIF
 
     IF(beta .GT. 0) THEN
diff --git a/src/moments_eq_rhs_mod.F90 b/src/moments_eq_rhs_mod.F90
index 81506404..c6efa288 100644
--- a/src/moments_eq_rhs_mod.F90
+++ b/src/moments_eq_rhs_mod.F90
@@ -15,22 +15,22 @@ SUBROUTINE compute_moments_eq_rhs
   USE prec_const
   USE collision
   USE time_integration
-  ! USE species, ONLY: dpdx
+  ! USE species, ONLY: xpdx
   USE geometry, ONLY: gradz_coeff, dlnBdz, Ckxky!, Gamma_phipar
   USE calculus, ONLY: interp_z, grad_z, grad_z2
-  ! USE species,  ONLY: dpdx
+  ! USE species,  ONLY: xpdx
   IMPLICIT NONE
   INTEGER     :: ia, iz, iky,  ikx, ip ,ij, eo ! counters
   INTEGER     :: izi,ipi,iji ! interior points counters
   INTEGER     :: p_int, j_int ! loops indices and polynom. degrees
-  REAL(dp)    :: kx, ky, kperp2
-  COMPLEX(dp) :: Tnapj, Tnapp2j, Tnapm2j, Tnapjp1, Tnapjm1 ! Terms from b x gradB and drives
-  COMPLEX(dp) :: Tnapp1j, Tnapm1j, Tnapp1jm1, Tnapm1jm1 ! Terms from mirror force with non adiab moments_
-  COMPLEX(dp) :: Ldamp, Fmir
-  COMPLEX(dp) :: Mperp, Mpara, Dphi, Dpsi
-  COMPLEX(dp) :: Unapm1j, Unapm1jp1, Unapm1jm1 ! Terms from mirror force with adiab moments_
-  COMPLEX(dp) :: i_kx,i_ky
-  COMPLEX(dp) :: Napj, RHS, phikykxz, psikykxz
+  REAL(xp)    :: kx, ky, kperp2
+  COMPLEX(xp) :: Tnapj, Tnapp2j, Tnapm2j, Tnapjp1, Tnapjm1 ! Terms from b x gradB and drives
+  COMPLEX(xp) :: Tnapp1j, Tnapm1j, Tnapp1jm1, Tnapm1jm1 ! Terms from mirror force with non adiab moments_
+  COMPLEX(xp) :: Ldamp, Fmir
+  COMPLEX(xp) :: Mperp, Mpara, Dphi, Dpsi
+  COMPLEX(xp) :: Unapm1j, Unapm1jp1, Unapm1jm1 ! Terms from mirror force with adiab moments_
+  COMPLEX(xp) :: i_kx,i_ky
+  COMPLEX(xp) :: Napj, RHS, phikykxz, psikykxz
   ! Spatial loops
   z:DO  iz = 1,local_nz
     izi = iz + ngz/2
@@ -54,7 +54,7 @@ SUBROUTINE compute_moments_eq_rhs
             ! Species loop
             a:DO ia = 1,local_na
               Napj = moments(ia,ipi,iji,iky,ikx,izi,updatetlevel)
-              RHS = 0._dp
+              RHS = 0._xp
               IF((CLOS .NE. 1) .OR. (p_int +2*j_int .LE. dmax)) THEN ! for the closure scheme
                 !! Compute moments_ mixing terms
                 ! Perpendicular dynamic
@@ -95,7 +95,7 @@ SUBROUTINE compute_moments_eq_rhs
                             +xphijp1(ia,ip,ij)*kernel(ia,iji+1,iky,ikx,izi,eo) &
                             +xphijm1(ia,ip,ij)*kernel(ia,iji-1,iky,ikx,izi,eo) )*phikykxz
                 ELSE
-                  Dphi = 0._dp
+                  Dphi = 0._xp
                 ENDIF
                 !! Vector potential term
                 IF ( (p_int  .LE. 3) .AND. (p_int  .GE. 1) ) THEN ! Kronecker p1 or p3
@@ -103,7 +103,7 @@ SUBROUTINE compute_moments_eq_rhs
                               +xpsijp1(ia,ip,ij)*kernel(ia,iji+1,iky,ikx,izi,eo) &
                               +xpsijm1(ia,ip,ij)*kernel(ia,iji-1,iky,ikx,izi,eo))*psikykxz
                 ELSE
-                  Dpsi = 0._dp
+                  Dpsi = 0._xp
                 ENDIF
                 !! Sum of all RHS terms
                 RHS = &
@@ -118,7 +118,7 @@ SUBROUTINE compute_moments_eq_rhs
                     ! Collision term
                     + Capj(ia,ip,ij,iky,ikx,iz) &
                     ! Perpendicular pressure effects (electromagnetic term) (TO CHECK)
-                    ! - i_ky*beta*dpdx(ia) * (Tnapj + Tnapp2j + Tnapm2j + Tnapjp1 + Tnapjm1)&
+                    ! - i_ky*beta*xpdx(ia) * (Tnapj + Tnapp2j + Tnapm2j + Tnapjp1 + Tnapjm1)&
                     ! Parallel drive term (should be negligible, to test)
                     ! !! -Gamma_phipar(iz,eo)*Tphi*ddz_phi(iky,ikx,iz) &
                     ! Numerical perpendicular hyperdiffusion
@@ -145,7 +145,7 @@ SUBROUTINE compute_moments_eq_rhs
                 CASE DEFAULT
                 END SELECT
               ELSE
-                RHS = 0._dp
+                RHS = 0._xp
               ENDIF
               !! Put RHS in the array
               moments_rhs(ia,ip,ij,iky,ikx,iz,updatetlevel) = RHS
@@ -188,7 +188,7 @@ END SUBROUTINE compute_moments_eq_rhs
 !   USE grid,             ONLY: contains_kx0, contains_ky0, ikx0, iky0,&
 !                               ia,ias,iae,ip,ips,ipe, ij,ijs,ije, zarray,izs,ize
 !   IMPLICIT NONE
-!   real(dp), DIMENSION(izs:ize) :: sinz
+!   real(xp), DIMENSION(izs:ize) :: sinz
 !
 !   sinz(izs:ize) = SIN(zarray(izs:ize,0))
 !
@@ -201,19 +201,19 @@ END SUBROUTINE compute_moments_eq_rhs
 !             SELECT CASE (ip-1)
 !             CASE(0) ! Na00 term
 !                 moments_rhs(ia,ip,ij,iky0,ikx0,izs:ize,updatetlevel) = moments_rhs(ia,ip,ij,iky0,ikx0,izs:ize,updatetlevel)&
-!                   +tau_q(ia) * sinz(izs:ize) * (1.5_dp*k_N(ia) - 1.125_dp*k_T(ia))
+!                   +tau_q(ia) * sinz(izs:ize) * (1.5_xp*k_N(ia) - 1.125_xp*k_T(ia))
 !             CASE(2) ! Na20 term
 !                 moments_rhs(ia,ip,ij,iky0,ikx0,izs:ize,updatetlevel) = moments_rhs(ia,ip,ij,iky0,ikx0,izs:ize,updatetlevel)&
-!                   +tau_q(ia) * sinz(izs:ize) * (SQRT2*0.5_dp*k_N(ia) - 2.75_dp*k_T(ia))
+!                   +tau_q(ia) * sinz(izs:ize) * (SQRT2*0.5_xp*k_N(ia) - 2.75_xp*k_T(ia))
 !             CASE(4) ! Na40 term
 !                 moments_rhs(ia,ip,ij,iky0,ikx0,izs:ize,updatetlevel) = moments_rhs(ia,ip,ij,iky0,ikx0,izs:ize,updatetlevel)&
-!                   +tau_q(ia) * sinz(izs:ize) * SQRT6*0.75_dp*k_T(ia)
+!                   +tau_q(ia) * sinz(izs:ize) * SQRT6*0.75_xp*k_T(ia)
 !             END SELECT
 !           CASE(1) ! j = 1
 !             SELECT CASE (ip-1)
 !             CASE(0) ! Na01 term
 !                 moments_rhs(ia,ip,ij,iky0,ikx0,izs:ize,updatetlevel) = moments_rhs(ia,ip,ij,iky0,ikx0,izs:ize,updatetlevel)&
-!                   -tau_q(ia) * sinz(izs:ize) * (k_N(ia) + 3.5_dp*k_T(ia))
+!                   -tau_q(ia) * sinz(izs:ize) * (k_N(ia) + 3.5_xp*k_T(ia))
 !             CASE(2) ! Na21 term
 !                 moments_rhs(ia,ip,ij,iky0,ikx0,izs:ize,updatetlevel) = moments_rhs(ia,ip,ij,iky0,ikx0,izs:ize,updatetlevel)&
 !                   -tau_q(ia) * sinz(izs:ize) * SQRT2*k_T(ia)
@@ -222,7 +222,7 @@ END SUBROUTINE compute_moments_eq_rhs
 !             SELECT CASE (ip-1)
 !             CASE(0) ! Na02 term
 !                 moments_rhs(ia,ip,ij,iky0,ikx0,izs:ize,updatetlevel) = moments_rhs(ia,ip,ij,iky0,ikx0,izs:ize,updatetlevel)&
-!                   +tau_q(ia) * sinz(izs:ize) * 2._dp*k_T(ia)
+!                   +tau_q(ia) * sinz(izs:ize) * 2._xp*k_T(ia)
 !             END SELECT
 !           END SELECT
 !         ENDDO
diff --git a/src/nonlinear_mod.F90 b/src/nonlinear_mod.F90
index 37b3347a..73352402 100644
--- a/src/nonlinear_mod.F90
+++ b/src/nonlinear_mod.F90
@@ -10,7 +10,7 @@ MODULE nonlinear
                          local_nkx_ptr,kxarray, AA_x, inv_Nx,&
                          local_nz,ngz,zarray,nzgrid
   USE model,       ONLY : LINEARITY, CLOS, NL_CLOS, EM
-  USE prec_const,  ONLY : dp
+  USE prec_const,  ONLY : xp
   USE species,     ONLY : sqrt_tau_o_sigma
   USE time_integration, ONLY : updatetlevel
   use, intrinsic :: iso_c_binding
@@ -19,12 +19,12 @@ MODULE nonlinear
 
   INCLUDE 'fftw3-mpi.f03'
 
-  COMPLEX(dp), DIMENSION(:,:), ALLOCATABLE :: F_cmpx, G_cmpx
-  COMPLEX(dp), DIMENSION(:,:), ALLOCATABLE :: Fx_cmpx, Gy_cmpx
-  COMPLEX(dp), DIMENSION(:,:), ALLOCATABLE :: Fy_cmpx, Gx_cmpx, F_conv_G
+  COMPLEX(xp), DIMENSION(:,:), ALLOCATABLE :: F_cmpx, G_cmpx
+  COMPLEX(xp), DIMENSION(:,:), ALLOCATABLE :: Fx_cmpx, Gy_cmpx
+  COMPLEX(xp), DIMENSION(:,:), ALLOCATABLE :: Fy_cmpx, Gx_cmpx, F_conv_G
   INTEGER :: in, is, p_int, j_int, n_int
   INTEGER :: nmax, smax
-  REAL(dp):: sqrt_p, sqrt_pp1
+  REAL(xp):: sqrt_p, sqrt_pp1
   PUBLIC  :: compute_Sapj, nonlinear_init
 
 CONTAINS
@@ -52,7 +52,7 @@ SUBROUTINE compute_Sapj
     CASE ('nonlinear')
       CALL compute_nonlinear
     CASE ('linear')
-      Sapj = 0._dp
+      Sapj = 0._xp
     CASE DEFAULT
       ERROR STOP '>> ERROR << Linearity not recognized '
   END SELECT
@@ -69,8 +69,8 @@ SUBROUTINE compute_nonlinear
       DO ip = 1,local_np ! Loop over Hermite moments
         ipi = ip + ngp/2
         p_int    = parray(ipi)
-        sqrt_p   = SQRT(REAL(p_int,dp))
-        sqrt_pp1 = SQRT(REAL(p_int,dp) + 1._dp)
+        sqrt_p   = SQRT(REAL(p_int,xp))
+        sqrt_pp1 = SQRT(REAL(p_int,xp) + 1._xp)
         eo       = min(nzgrid,MODULO(parray(ip),2)+1)
         DO ia = 1,local_na
           IF((CLOS .NE. 1) .OR. (p_int+2*j_int .LE. dmax)) THEN !compute for every moments except for closure 1
@@ -82,14 +82,14 @@ SUBROUTINE compute_nonlinear
             ELSE
               nmax = min(NL_CLOS,Jmax-j_int)
             ENDIF
-            bracket_sum_r = 0._dp ! initialize sum over real nonlinear term
+            bracket_sum_r = 0._xp ! initialize sum over real nonlinear term
             DO in = 1,nmax+1 ! Loop over laguerre for the sum
               ini = in+ngj/2
   !-----------!! ELECTROSTATIC CONTRIBUTION
               ! First convolution terms
               F_cmpx(:,:) = phi(:,:,izi) * kernel(ia,ini,:,:,izi,eo)
               ! Second convolution terms
-              G_cmpx = 0._dp ! initialization of the sum
+              G_cmpx = 0._xp ! initialization of the sum
               smax   = MIN( (in-1)+(ij-1), Jmax );
               DO is = 1, smax+1 ! sum truncation on number of moments
                 isi = is + ngj/2
@@ -103,7 +103,7 @@ SUBROUTINE compute_nonlinear
               ! First convolution terms
               F_cmpx(:,:) = -sqrt_tau_o_sigma(ia) * psi(:,:,izi) * kernel(ia,ini,:,:,izi,eo)
               ! Second convolution terms
-              G_cmpx = 0._dp ! initialization of the sum
+              G_cmpx = 0._xp ! initialization of the sum
               smax   = MIN( (in-1)+(ij-1), Jmax );
               DO is = 1, smax+1 ! sum truncation on number of moments
                 isi = is + ngj/2
@@ -124,7 +124,7 @@ SUBROUTINE compute_nonlinear
               ENDDO
             ENDDO
           ELSE
-            Sapj(ia,ip,ij,:,:,iz) = 0._dp
+            Sapj(ia,ip,ij,:,:,iz) = 0._xp
           ENDIF
         ENDDO
       ENDDO
diff --git a/src/numerics_mod.F90 b/src/numerics_mod.F90
index 9b597509..9111ea3f 100644
--- a/src/numerics_mod.F90
+++ b/src/numerics_mod.F90
@@ -49,20 +49,20 @@ END SUBROUTINE build_dnjs_table
 SUBROUTINE build_dv4Hp_table
   USE array,      ONLY: dv4_Hp_coeff
   USE grid,       ONLY: pmax
-  USE prec_const, ONLY: dp, PI
+  USE prec_const, ONLY: xp, PI
   IMPLICIT NONE
   INTEGER :: p_
   DO p_ = -2,pmax
     if (p_ < 4) THEN
-      dv4_Hp_coeff(p_) = 0._dp
+      dv4_Hp_coeff(p_) = 0._xp
     ELSE
-      dv4_Hp_coeff(p_) = 4_dp*SQRT(REAL((p_-3)*(p_-2)*(p_-1)*p_,dp))
+      dv4_Hp_coeff(p_) = 4_xp*SQRT(REAL((p_-3)*(p_-2)*(p_-1)*p_,xp))
     ENDIF
   ENDDO
    !we scale it w.r.t. to the max degree since
    !D_4^{v}\sim (\Delta v/2)^4 and \Delta v \sim 2pi/kvpar = pi/\sqrt{2P}
-   ! dv4_Hp_coeff = dv4_Hp_coeff*(1._dp/2._dp/SQRT(REAL(pmax,dp)))**4
-   dv4_Hp_coeff = dv4_Hp_coeff*(PI/2._dp/SQRT(2._dp*REAL(pmax,dp)))**4
+   ! dv4_Hp_coeff = dv4_Hp_coeff*(1._xp/2._xp/SQRT(REAL(pmax,xp)))**4
+   dv4_Hp_coeff = dv4_Hp_coeff*(PI/2._xp/SQRT(2._xp*REAL(pmax,xp)))**4
 END SUBROUTINE build_dv4Hp_table
 !******************************************************************************!
 
@@ -75,10 +75,10 @@ SUBROUTINE evaluate_kernels
   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
+  USE prec_const, ONLY: xp
   IMPLICIT NONE
   INTEGER    :: j_int, ia, eo, ikx, iky, iz, ij
-  REAL(dp)   :: j_dp, y_, factj
+  REAL(xp)   :: j_xp, y_, factj
 
 DO ia  = 1,local_na
   DO eo  = 1,nzgrid
@@ -87,12 +87,12 @@ DO ia  = 1,local_na
         DO iz  = 1,local_nz + ngz
           DO ij = 1,local_nj + ngj
             j_int = jarray(ij)
-            j_dp  = REAL(j_int,dp)
+            j_xp  = REAL(j_int,xp)
             y_    =  sigma2_tau_o2(ia) * kparray(iky,ikx,iz,eo)**2
             IF(j_int .LT. 0) THEN !ghosts values
-              kernel(ia,ij,iky,ikx,iz,eo) = 0._dp
+              kernel(ia,ij,iky,ikx,iz,eo) = 0._xp
             ELSE
-              factj = REAL(GAMMA(j_dp+1._dp),dp)
+              factj = REAL(GAMMA(j_xp+1._xp),xp)
               kernel(ia,ij,iky,ikx,iz,eo) = y_**j_int*EXP(-y_)/factj
             ENDIF
           ENDDO
@@ -102,17 +102,17 @@ DO ia  = 1,local_na
   ENDDO
   ! !! Correction term for the evaluation of the heat flux
   ! HF_phi_correction_operator(:,:,:) = &
-  !        2._dp * Kernel(ia,1,:,:,:,1) &
-  !       -1._dp * Kernel(ia,2,:,:,:,1)
+  !        2._xp * Kernel(ia,1,:,:,:,1) &
+  !       -1._xp * Kernel(ia,2,:,:,:,1)
   !
   ! DO ij = 1,local_Nj
   !   j_int = jarray(ij)
-  !   j_dp  = REAL(j_int,dp)
+  !   j_xp  = REAL(j_int,xp)
   !   HF_phi_correction_operator(:,:,:) = HF_phi_correction_operator(:,:,:) &
   !   - Kernel(ia,ij,:,:,:,1) * (&
-  !       2._dp*(j_dp+1.5_dp) * Kernel(ia,ij  ,:,:,:,1) &
-  !       -     (j_dp+1.0_dp) * Kernel(ia,ij+1,:,:,:,1) &
-  !       -              j_dp * Kernel(ia,ij-1,:,:,:,1))
+  !       2._xp*(j_xp+1.5_xp) * Kernel(ia,ij  ,:,:,:,1) &
+  !       -     (j_xp+1.0_xp) * Kernel(ia,ij+1,:,:,:,1) &
+  !       -              j_xp * Kernel(ia,ij-1,:,:,:,1))
   ! ENDDO
 ENDDO
 END SUBROUTINE evaluate_kernels
@@ -135,26 +135,26 @@ SUBROUTINE evaluate_poisson_op
                       kxarray, kyarray, local_nj, ngj, ngz, ieven
   USE species, ONLY : q2_tau
   USE model,   ONLY : ADIAB_E
-  USE prec_const, ONLY: dp
+  USE prec_const, ONLY: xp
   IMPLICIT NONE
-  REAL(dp)    :: pol_tot, operator, operator_ion     ! (Z^2/tau (1-sum_n kernel_na^2))
+  REAL(xp)    :: pol_tot, operator, operator_ion     ! (Z^2/tau (1-sum_n kernel_na^2))
   INTEGER     :: in,ikx,iky,iz,ia
-  REAL(dp)    :: sumker     ! (Z_a^2/tau_a (1-sum_n kernel_na^2))
+  REAL(xp)    :: sumker     ! (Z_a^2/tau_a (1-sum_n kernel_na^2))
 
   ! This term has no staggered grid dependence. It is evalued for the
   ! even z grid since poisson uses p=0 moments and phi only.
   kxloop: DO ikx = 1,local_nkx
   kyloop: DO iky = 1,local_nky
   zloop:  DO iz  = 1,local_nz
-  IF( (kxarray(ikx).EQ.0._dp) .AND. (kyarray(iky).EQ.0._dp) ) THEN
-      inv_poisson_op(iky, ikx, iz) =  0._dp
-      inv_pol_ion   (iky, ikx, iz) =  0._dp
+  IF( (kxarray(ikx).EQ.0._xp) .AND. (kyarray(iky).EQ.0._xp) ) THEN
+      inv_poisson_op(iky, ikx, iz) =  0._xp
+      inv_pol_ion   (iky, ikx, iz) =  0._xp
 ELSE
     ! loop over n only up to the max polynomial degree
-    pol_tot = 0._dp  ! total polarisation term
+    pol_tot = 0._xp  ! total polarisation term
     a:DO ia = 1,local_na ! sum over species
     ! ia = 1
-      sumker  = 0._dp  ! sum of ion polarisation term
+      sumker  = 0._xp  ! sum of ion polarisation term
       DO in=1,local_nj
         sumker = sumker + q2_tau(ia)*kernel(ia,in+ngj/2,iky,ikx,iz+ngz/2,ieven)**2 ! ... sum recursively ...
       END DO
@@ -162,11 +162,11 @@ ELSE
     ENDDO a
     operator_ion = pol_tot
     IF(ADIAB_E) THEN ! Adiabatic electron model
-      pol_tot = pol_tot + 1._dp
+      pol_tot = pol_tot + 1._xp
     ENDIF
     operator = pol_tot
-    inv_poisson_op(iky, ikx, iz) =  1._dp/pol_tot
-    inv_pol_ion   (iky, ikx, iz) =  1._dp/operator_ion
+    inv_poisson_op(iky, ikx, iz) =  1._xp/pol_tot
+    inv_pol_ion   (iky, ikx, iz) =  1._xp/operator_ion
   ENDIF
   END DO zloop
   END DO kyloop
@@ -178,16 +178,16 @@ END SUBROUTINE evaluate_poisson_op
 !!!!!!! Evaluate inverse polarisation operator for Poisson equation
 !******************************************************************************!
 SUBROUTINE evaluate_ampere_op
-  USE prec_const,   ONLY : dp
+  USE prec_const,   ONLY : xp
   USE array,    ONLY : kernel, inv_ampere_op
   USE grid,     ONLY : local_na, local_nkx, local_nky, local_nz, ngz, total_nj, ngj,&
                        kparray, kxarray, kyarray, SOLVE_AMPERE, iodd
   USE model,    ONLY : beta
   USE species,  ONLY : q, sigma
   USE geometry, ONLY : hatB
-  USE prec_const, ONLY: dp
+  USE prec_const, ONLY: xp
   IMPLICIT NONE
-  REAL(dp)    :: sum_jpol, kperp2, operator     ! (Z^2/tau (1-sum_n kernel_na^2))
+  REAL(xp)    :: sum_jpol, kperp2, operator     ! (Z^2/tau (1-sum_n kernel_na^2))
   INTEGER     :: in,ikx,iky,iz,ia
   ! We do not solve Ampere if beta = 0 to spare waste of ressources
   IF(SOLVE_AMPERE) THEN
@@ -195,18 +195,18 @@ SUBROUTINE evaluate_ampere_op
     y:DO iky = 1,local_nky
     z:DO iz  = 1,local_nz
     kperp2 = kparray(iky,ikx,iz+ngz/2,iodd)**2
-    IF( (kxarray(ikx).EQ.0._dp) .AND. (kyarray(iky).EQ.0._dp) ) THEN
-        inv_ampere_op(iky, ikx, iz) =  0._dp
+    IF( (kxarray(ikx).EQ.0._xp) .AND. (kyarray(iky).EQ.0._xp) ) THEN
+        inv_ampere_op(iky, ikx, iz) =  0._xp
     ELSE
-      sum_jpol = 0._dp
+      sum_jpol = 0._xp
       a:DO ia  = 1,local_na
         ! loop over n only up to the max polynomial degree
         j:DO in=1,total_nj
           sum_jpol = sum_jpol  + q(ia)**2/(sigma(ia)**2)*kernel(ia,in+ngj/2,iky,ikx,iz+ngz/2,iodd)**2 ! ... sum recursively ...
         END DO j
       END DO a
-      operator = 2._dp*kperp2*hatB(iz+ngz/2,iodd)**2 + beta*sum_jpol
-      inv_ampere_op(iky, ikx, iz) =  1._dp/operator
+      operator = 2._xp*kperp2*hatB(iz+ngz/2,iodd)**2 + beta*sum_jpol
+      inv_ampere_op(iky, ikx, iz) =  1._xp/operator
     ENDIF
     END DO z
     END DO y
@@ -226,49 +226,49 @@ SUBROUTINE compute_lin_coeff
                     xpsij, xpsijp1, xpsijm1
   USE species, ONLY: k_T, k_N, tau, q, sqrt_tau_o_sigma
   USE model,   ONLY: k_cB, k_gB
-  USE prec_const, ONLY: dp, SQRT2, SQRT3
+  USE prec_const, ONLY: xp, SQRT2, SQRT3
   USE grid,  ONLY: parray, jarray, local_na, local_np, local_nj, ngj, ngp
   INTEGER     :: ia,ip,ij,p_int, j_int ! polynom. dagrees
-  REAL(dp)    :: p_dp, j_dp
+  REAL(xp)    :: p_xp, j_xp
 
   !! linear coefficients for moment RHS !!!!!!!!!!
   DO ia = 1,local_na
     DO ip = 1,local_np
       p_int= parray(ip+ngp/2)   ! Hermite degree
-      p_dp = REAL(p_int,dp) ! REAL of Hermite degree
+      p_xp = REAL(p_int,xp) ! REAL of Hermite degree
       DO ij = 1,local_nj
         j_int= jarray(ij+ngj/2)   ! Laguerre degree
-        j_dp = REAL(j_int,dp) ! REAL of Laguerre degree
+        j_xp = REAL(j_int,xp) ! REAL of Laguerre degree
         ! All Napj terms
-        xnapj(ia,ip,ij) = tau(ia)/q(ia)*(k_cB*(2._dp*p_dp + 1._dp) &
-                                        +k_gB*(2._dp*j_dp + 1._dp))
+        xnapj(ia,ip,ij) = tau(ia)/q(ia)*(k_cB*(2._xp*p_xp + 1._xp) &
+                                        +k_gB*(2._xp*j_xp + 1._xp))
         ! Mirror force terms
-        ynapp1j  (ia,ip,ij) = -sqrt_tau_o_sigma(ia) *      (j_dp+1._dp)*SQRT(p_dp+1._dp)
-        ynapm1j  (ia,ip,ij) = -sqrt_tau_o_sigma(ia) *      (j_dp+1._dp)*SQRT(p_dp)
-        ynapp1jm1(ia,ip,ij) = +sqrt_tau_o_sigma(ia) *              j_dp*SQRT(p_dp+1._dp)
-        ynapm1jm1(ia,ip,ij) = +sqrt_tau_o_sigma(ia) *              j_dp*SQRT(p_dp)
+        ynapp1j  (ia,ip,ij) = -sqrt_tau_o_sigma(ia) *      (j_xp+1._xp)*SQRT(p_xp+1._xp)
+        ynapm1j  (ia,ip,ij) = -sqrt_tau_o_sigma(ia) *      (j_xp+1._xp)*SQRT(p_xp)
+        ynapp1jm1(ia,ip,ij) = +sqrt_tau_o_sigma(ia) *              j_xp*SQRT(p_xp+1._xp)
+        ynapm1jm1(ia,ip,ij) = +sqrt_tau_o_sigma(ia) *              j_xp*SQRT(p_xp)
         ! Trapping terms
-        zNapm1j  (ia,ip,ij) = +sqrt_tau_o_sigma(ia) *(2._dp*j_dp+1._dp)*SQRT(p_dp)
-        zNapm1jp1(ia,ip,ij) = -sqrt_tau_o_sigma(ia) *      (j_dp+1._dp)*SQRT(p_dp)
-        zNapm1jm1(ia,ip,ij) = -sqrt_tau_o_sigma(ia) *              j_dp*SQRT(p_dp)
+        zNapm1j  (ia,ip,ij) = +sqrt_tau_o_sigma(ia) *(2._xp*j_xp+1._xp)*SQRT(p_xp)
+        zNapm1jp1(ia,ip,ij) = -sqrt_tau_o_sigma(ia) *      (j_xp+1._xp)*SQRT(p_xp)
+        zNapm1jm1(ia,ip,ij) = -sqrt_tau_o_sigma(ia) *              j_xp*SQRT(p_xp)
       ENDDO
     ENDDO
     DO ip = 1,local_np
       p_int= parray(ip+ngp/2)   ! Hermite degree
-      p_dp = REAL(p_int,dp) ! REAL of Hermite degree
+      p_xp = REAL(p_int,xp) ! REAL of Hermite degree
       ! Landau damping coefficients (ddz napj term)
-      xnapp1j(ia,ip) = sqrt_tau_o_sigma(ia) * SQRT(p_dp+1._dp)
-      xnapm1j(ia,ip) = sqrt_tau_o_sigma(ia) * SQRT(p_dp)
+      xnapp1j(ia,ip) = sqrt_tau_o_sigma(ia) * SQRT(p_xp+1._xp)
+      xnapm1j(ia,ip) = sqrt_tau_o_sigma(ia) * SQRT(p_xp)
       ! Magnetic curvature term
-      xnapp2j(ia,ip) = tau(ia)/q(ia) * k_cB * SQRT((p_dp+1._dp)*(p_dp + 2._dp))
-      xnapm2j(ia,ip) = tau(ia)/q(ia) * k_cB * SQRT( p_dp       *(p_dp - 1._dp))
+      xnapp2j(ia,ip) = tau(ia)/q(ia) * k_cB * SQRT((p_xp+1._xp)*(p_xp + 2._xp))
+      xnapm2j(ia,ip) = tau(ia)/q(ia) * k_cB * SQRT( p_xp       *(p_xp - 1._xp))
     ENDDO
     DO ij = 1,local_nj
       j_int= jarray(ij+ngj/2)   ! Laguerre degree
-      j_dp = REAL(j_int,dp) ! REAL of Laguerre degree
+      j_xp = REAL(j_int,xp) ! REAL of Laguerre degree
       ! Magnetic gradient term
-      xnapjp1(ia,ij) = -tau(ia)/q(ia) * k_gB * (j_dp + 1._dp)
-      xnapjm1(ia,ij) = -tau(ia)/q(ia) * k_gB *  j_dp
+      xnapjp1(ia,ij) = -tau(ia)/q(ia) * k_gB * (j_xp + 1._xp)
+      xnapjm1(ia,ij) = -tau(ia)/q(ia) * k_gB *  j_xp
     ENDDO
     !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
     !! ES linear coefficients for moment RHS !!!!!!!!!!
@@ -276,18 +276,18 @@ SUBROUTINE compute_lin_coeff
       p_int= parray(ip+ngp/2)   ! Hermite degree
       DO ij = 1,local_nj
         j_int= jarray(ij+ngj/2)   ! REALof Laguerre degree
-        j_dp = REAL(j_int,dp) ! REALof Laguerre degree
+        j_xp = REAL(j_int,xp) ! REALof Laguerre degree
         !! Electrostatic potential pj terms
         IF (p_int .EQ. 0) THEN ! kronecker p0
-          xphij  (ia,ip,ij)  = +k_N(ia) + 2._dp*j_dp*k_T(ia)
-          xphijp1(ia,ip,ij)  = -k_T(ia)*(j_dp+1._dp)
-          xphijm1(ia,ip,ij)  = -k_T(ia)* j_dp
+          xphij  (ia,ip,ij)  = +k_N(ia) + 2._xp*j_xp*k_T(ia)
+          xphijp1(ia,ip,ij)  = -k_T(ia)*(j_xp+1._xp)
+          xphijm1(ia,ip,ij)  = -k_T(ia)* j_xp
         ELSE IF (p_int .EQ. 2) THEN ! kronecker p2
           xphij(ia,ip,ij)    = +k_T(ia)/SQRT2
-          xphijp1(ia,ip,ij)  = 0._dp; xphijm1(ia,ip,ij)  = 0._dp;
+          xphijp1(ia,ip,ij)  = 0._xp; xphijm1(ia,ip,ij)  = 0._xp;
         ELSE
-          xphij  (ia,ip,ij)  = 0._dp; xphijp1(ia,ip,ij)  = 0._dp
-          xphijm1(ia,ip,ij)  = 0._dp;
+          xphij  (ia,ip,ij)  = 0._xp; xphijp1(ia,ip,ij)  = 0._xp
+          xphijm1(ia,ip,ij)  = 0._xp;
         ENDIF
       ENDDO
     ENDDO
@@ -297,17 +297,17 @@ SUBROUTINE compute_lin_coeff
       p_int= parray(ip+ngp/2)   ! Hermite degree
       DO ij = 1,local_nj
         j_int= jarray(ij+ngj/2)   ! REALof Laguerre degree
-        j_dp = REAL(j_int,dp) ! REALof Laguerre degree
+        j_xp = REAL(j_int,xp) ! REALof Laguerre degree
         IF (p_int .EQ. 1) THEN ! kronecker p1
-          xpsij  (ia,ip,ij)  = +(k_N(ia) + (2._dp*j_dp+1._dp)*k_T(ia))* sqrt_tau_o_sigma(ia)
-          xpsijp1(ia,ip,ij)  = - k_T(ia)*(j_dp+1._dp)                 * sqrt_tau_o_sigma(ia)
-          xpsijm1(ia,ip,ij)  = - k_T(ia)* j_dp                        * sqrt_tau_o_sigma(ia)
+          xpsij  (ia,ip,ij)  = +(k_N(ia) + (2._xp*j_xp+1._xp)*k_T(ia))* sqrt_tau_o_sigma(ia)
+          xpsijp1(ia,ip,ij)  = - k_T(ia)*(j_xp+1._xp)                 * sqrt_tau_o_sigma(ia)
+          xpsijm1(ia,ip,ij)  = - k_T(ia)* j_xp                        * sqrt_tau_o_sigma(ia)
         ELSE IF (p_int .EQ. 3) THEN ! kronecker p3
           xpsij  (ia,ip,ij)  = + k_T(ia)*SQRT3/SQRT2                  * sqrt_tau_o_sigma(ia)
-          xpsijp1(ia,ip,ij)  = 0._dp; xpsijm1(ia,ip,ij)  = 0._dp;
+          xpsijp1(ia,ip,ij)  = 0._xp; xpsijm1(ia,ip,ij)  = 0._xp;
         ELSE
-          xpsij  (ia,ip,ij)  = 0._dp; xpsijp1(ia,ip,ij)  = 0._dp
-          xpsijm1(ia,ip,ij)  = 0._dp;
+          xpsij  (ia,ip,ij)  = 0._xp; xpsijp1(ia,ip,ij)  = 0._xp
+          xpsijm1(ia,ip,ij)  = 0._xp;
         ENDIF
       ENDDO
     ENDDO
diff --git a/src/parallel_mod.F90 b/src/parallel_mod.F90
index e4469d0f..0dbb02cb 100644
--- a/src/parallel_mod.F90
+++ b/src/parallel_mod.F90
@@ -1,5 +1,5 @@
 MODULE parallel
-  use prec_const, ONLY : dp
+  use prec_const, ONLY : xp
   USE mpi
   IMPLICIT NONE
   ! Auxiliary variables
@@ -239,12 +239,12 @@ CONTAINS
   SUBROUTINE gather_xyz(field_loc,field_tot,nky_loc,nky_tot,nkx_tot,nz_loc,nz_tot)
     IMPLICIT NONE
     INTEGER, INTENT(IN) :: nky_loc,nky_tot,nkx_tot,nz_loc,nz_tot
-    COMPLEX(dp), DIMENSION(nky_loc,nkx_tot,nz_loc), INTENT(IN)  :: field_loc
-    COMPLEX(dp), DIMENSION(nky_tot,nkx_tot,nz_tot), INTENT(OUT) :: field_tot
-    COMPLEX(dp), DIMENSION(nky_tot,nz_loc) :: buffer_yt_zl !full  y, local z
-    COMPLEX(dp), DIMENSION(nky_tot,nz_tot) :: buffer_yt_zt !full  y, full  z
-    COMPLEX(dp), DIMENSION(nky_loc):: buffer_yl_zc !local y, constant z
-    COMPLEX(dp), DIMENSION(nky_tot):: buffer_yt_zc !full  y, constant z
+    COMPLEX(xp), DIMENSION(nky_loc,nkx_tot,nz_loc), INTENT(IN)  :: field_loc
+    COMPLEX(xp), DIMENSION(nky_tot,nkx_tot,nz_tot), INTENT(OUT) :: field_tot
+    COMPLEX(xp), DIMENSION(nky_tot,nz_loc) :: buffer_yt_zl !full  y, local z
+    COMPLEX(xp), DIMENSION(nky_tot,nz_tot) :: buffer_yt_zt !full  y, full  z
+    COMPLEX(xp), DIMENSION(nky_loc):: buffer_yl_zc !local y, constant z
+    COMPLEX(xp), DIMENSION(nky_tot):: buffer_yt_zc !full  y, constant z
     INTEGER :: snd_y, snd_z, root_p, root_z, root_ky, ix, iz
 
     snd_y  = nky_loc    ! Number of points to send along y (per z)
@@ -277,12 +277,12 @@ CONTAINS
   SUBROUTINE gather_pjz(field_loc,field_tot,np_loc,np_tot,nj_tot,nz_loc,nz_tot)
     IMPLICIT NONE
     INTEGER, INTENT(IN) :: np_loc,np_tot, nj_tot, nz_loc,nz_tot
-    COMPLEX(dp), DIMENSION(np_loc,nj_tot,nz_loc), INTENT(IN)  :: field_loc
-    COMPLEX(dp), DIMENSION(np_tot,nj_tot,nz_tot), INTENT(OUT) :: field_tot
-    COMPLEX(dp), DIMENSION(np_tot,nz_loc) :: buffer_pt_zl !full  p, local z
-    COMPLEX(dp), DIMENSION(np_tot,nz_tot) :: buffer_pt_zt !full  p, full  z
-    COMPLEX(dp), DIMENSION(np_loc) :: buffer_pl_zc !local p, constant z
-    COMPLEX(dp), DIMENSION(np_tot) :: buffer_pt_zc !full  p, constant z
+    COMPLEX(xp), DIMENSION(np_loc,nj_tot,nz_loc), INTENT(IN)  :: field_loc
+    COMPLEX(xp), DIMENSION(np_tot,nj_tot,nz_tot), INTENT(OUT) :: field_tot
+    COMPLEX(xp), DIMENSION(np_tot,nz_loc) :: buffer_pt_zl !full  p, local z
+    COMPLEX(xp), DIMENSION(np_tot,nz_tot) :: buffer_pt_zt !full  p, full  z
+    COMPLEX(xp), DIMENSION(np_loc) :: buffer_pl_zc !local p, constant z
+    COMPLEX(xp), DIMENSION(np_tot) :: buffer_pt_zc !full  p, constant z
     INTEGER :: snd_p, snd_z, root_p, root_z, root_ky, ij, iz
 
     snd_p  = np_loc    ! Number of points to send along p (per z)
@@ -317,14 +317,14 @@ CONTAINS
   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) :: na_tot,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(na_tot,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
+    COMPLEX(xp), DIMENSION(np_loc,nj_tot,nky_loc,nkx_tot,nz_loc), INTENT(IN)  :: field_loc
+    COMPLEX(xp), DIMENSION(na_tot,np_tot,nj_tot,nky_tot,nkx_tot,nz_tot), INTENT(OUT) :: field_tot
+    COMPLEX(xp), DIMENSION(np_tot,nky_tot,nz_loc) :: buffer_pt_yt_zl ! full p,     full y, local    z
+    COMPLEX(xp), DIMENSION(np_tot,nky_tot,nz_tot) :: buffer_pt_yt_zt ! full p,     full y, full     z
+    COMPLEX(xp), DIMENSION(np_tot,nky_loc) :: buffer_pt_yl_zc     ! full p,    local y, constant z
+    COMPLEX(xp), DIMENSION(np_tot,nky_tot) :: buffer_pt_yt_zc     ! full p,     full y, constant z
+    COMPLEX(xp), DIMENSION(np_loc)       :: buffer_pl_cy_zc     !local p, constant y, constant z
+    COMPLEX(xp), DIMENSION(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, ia
     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)
@@ -368,8 +368,8 @@ CONTAINS
   SUBROUTINE manual_3D_bcast(field_,n1,n2,n3)
     IMPLICIT NONE
     INTEGER, INTENT(IN) :: n1,n2,n3
-    COMPLEX(dp), DIMENSION(n1,n2,n3), INTENT(INOUT) :: field_
-    COMPLEX(dp) :: buffer(n1,n2,n3)
+    COMPLEX(xp), DIMENSION(n1,n2,n3), INTENT(INOUT) :: field_
+    COMPLEX(xp) :: buffer(n1,n2,n3)
     INTEGER     :: i_, root, world_rank, world_size, count, i1,i2,i3
     root = 0;
     count = n1*n2*n3;
@@ -410,8 +410,8 @@ CONTAINS
   !!!!! This is a manual way to do MPI_BCAST !!!!!!!!!!!
   SUBROUTINE manual_0D_bcast(v)
     IMPLICIT NONE
-    COMPLEX(dp), INTENT(INOUT) :: v
-    COMPLEX(dp) :: buffer
+    COMPLEX(xp), INTENT(INOUT) :: v
+    COMPLEX(xp) :: buffer
     INTEGER     :: i_, root, world_rank, world_size, count
     root = 0;
     count = 1;
@@ -441,7 +441,7 @@ CONTAINS
   SUBROUTINE exchange_ghosts_1D(f,nbr_L,nbr_R,np,ng)
     IMPLICIT NONE
     INTEGER, INTENT(IN) :: np,ng, nbr_L, nbr_R
-    COMPLEX(dp), DIMENSION(np+ng), INTENT(INOUT) :: f
+    COMPLEX(xp), DIMENSION(np+ng), INTENT(INOUT) :: f
     INTEGER :: ierr, first, last, ig
     first = 1 + ng/2
     last  = np + ng/2
diff --git a/src/prec_const_mod.F90 b/src/prec_const_mod.F90
index ba8a8dd7..af0ac57c 100644
--- a/src/prec_const_mod.F90
+++ b/src/prec_const_mod.F90
@@ -6,43 +6,50 @@ MODULE prec_const
                                            stdin=>input_unit, &
                                            stdout=>output_unit, &
                                            stderr=>error_unit
-  ! Precision for real and complex
-  INTEGER, PARAMETER :: sp = REAL32 !Single precision, should not be used
-  INTEGER, PARAMETER :: dp = REAL64 !real(dp), enforced through the code
-
-  INTEGER, private :: dp_r, dp_p !Range and Aprecision of doubles
-  INTEGER, private :: sp_r, sp_p !Range and precision of singles
-
-
-  INTEGER, private :: MPI_SP !Single precision for MPI
-  INTEGER, private :: MPI_DP !Double precision in MPI
-  INTEGER, private :: MPI_SUM_DP !Sum reduction operation for DP datatype
-  INTEGER, private :: MPI_MAX_DP !Max reduction operation for DP datatype
-  INTEGER, private :: MPI_MIN_DP !Min reduction operation for DP datatype
+  use, intrinsic :: iso_c_binding
+
+  ! Define single and double precision
+  ! INTEGER, PARAMETER :: sp = REAL32 !Single precision
+  ! INTEGER, PARAMETER :: dp = REAL64 !Double precision  
+  ! INTEGER, private :: dp_r, dp_p !Range and Aprecision of doubles
+  ! INTEGER, private :: sp_r, sp_p !Range and precision of singles
+  ! INTEGER, private :: MPI_SP !Single precision for MPI
+  ! INTEGER, private :: MPI_DP !Double precision in MPI
+  ! INTEGER, private :: MPI_SUM_DP !Sum reduction operation for DP datatype
+  ! INTEGER, private :: MPI_MAX_DP !Max reduction operation for DP datatype
+  ! INTEGER, private :: MPI_MIN_DP !Min reduction operation for DP datatype
+
+  ! Define a generic precision parameter for the entire program
+  INTEGER, PARAMETER :: xp = REAL64!real(xp), enforced through the code
+  INTEGER, private   :: xp_r, xp_p !Range and precision of single
+  INTEGER, private   :: MPI_XP     !Double precision in MPI
+  INTEGER, private   :: MPI_SUM_XP !Sum reduction operation for xp datatype
+  INTEGER, private   :: MPI_MAX_XP !Max reduction operation for xp datatype
+  INTEGER, private   :: MPI_MIN_XP !Min reduction operation for xp datatype
 
 
   ! Some useful constants, to avoid recomputing them too often
-  REAL(dp),    PARAMETER :: PI=3.141592653589793238462643383279502884197_dp
-  REAL(dp),    PARAMETER :: PIO2=1.57079632679489661923132169163975144209858_dp
-  REAL(dp),    PARAMETER :: TWOPI=6.283185307179586476925286766559005768394_dp
-  REAL(dp),    PARAMETER :: ONEOPI=0.3183098861837906912164442019275156781077_dp
-  REAL(dp),    PARAMETER :: SQRT2=1.41421356237309504880168872420969807856967_dp
-  REAL(dp),    PARAMETER :: SQRT6=SQRT(6._dp)
-  REAL(dp),    PARAMETER :: INVSQRT2=0.7071067811865475244008443621048490392848359377_dp
-  REAL(dp),    PARAMETER :: SQRT3=1.73205080756887729352744634150587236694281_dp
-  REAL(dp),    PARAMETER :: onetwelfth=0.08333333333333333333333333333333333333333333333_dp
-  REAL(dp),    PARAMETER :: onetwentyfourth=0.04166666666666666666666666666666666666666666667_dp
-  REAL(dp),    PARAMETER :: onethird=0.33333333333333333333333333333333333333333333333_dp
-  REAL(dp),    PARAMETER :: twothird=0.66666666666666666666666666666666666666666666666_dp
-  REAL(dp),    PARAMETER :: onesixth=0.1666666666666666666666666666666666666666666667_dp
-  REAL(dp),    PARAMETER :: fivesixths=0.8333333333333333333333333333333333333333333333_dp
-  REAL(dp),    PARAMETER :: sevensixths=1.1666666666666666666666666666666666666666666667_dp
-  REAL(dp),    PARAMETER :: elevensixths=1.833333333333333333333333333333333333333333333_dp
-  REAL(dp),    PARAMETER :: nineeighths=1.125_dp
-  REAL(dp),    PARAMETER :: onesixteenth=0.0625_dp
-  REAL(dp),    PARAMETER :: ninesixteenths=0.5625_dp
-  REAL(dp),    PARAMETER :: thirteentwelfths = 1.083333333333333333333333333333333333333333333_dp
-  COMPLEX(dp), PARAMETER :: imagu = (0._dp,1._dp)
+  REAL(xp),    PARAMETER :: PI=3.141592653589793238462643383279502884197_xp
+  REAL(xp),    PARAMETER :: PIO2=1.57079632679489661923132169163975144209858_xp
+  REAL(xp),    PARAMETER :: TWOPI=6.283185307179586476925286766559005768394_xp
+  REAL(xp),    PARAMETER :: ONEOPI=0.3183098861837906912164442019275156781077_xp
+  REAL(xp),    PARAMETER :: SQRT2=1.41421356237309504880168872420969807856967_xp
+  REAL(xp),    PARAMETER :: SQRT6=SQRT(6._xp)
+  REAL(xp),    PARAMETER :: INVSQRT2=0.7071067811865475244008443621048490392848359377_xp
+  REAL(xp),    PARAMETER :: SQRT3=1.73205080756887729352744634150587236694281_xp
+  REAL(xp),    PARAMETER :: onetwelfth=0.08333333333333333333333333333333333333333333333_xp
+  REAL(xp),    PARAMETER :: onetwentyfourth=0.04166666666666666666666666666666666666666666667_xp
+  REAL(xp),    PARAMETER :: onethird=0.33333333333333333333333333333333333333333333333_xp
+  REAL(xp),    PARAMETER :: twothird=0.66666666666666666666666666666666666666666666666_xp
+  REAL(xp),    PARAMETER :: onesixth=0.1666666666666666666666666666666666666666666667_xp
+  REAL(xp),    PARAMETER :: fivesixths=0.8333333333333333333333333333333333333333333333_xp
+  REAL(xp),    PARAMETER :: sevensixths=1.1666666666666666666666666666666666666666666667_xp
+  REAL(xp),    PARAMETER :: elevensixths=1.833333333333333333333333333333333333333333333_xp
+  REAL(xp),    PARAMETER :: nineeighths=1.125_xp
+  REAL(xp),    PARAMETER :: onesixteenth=0.0625_xp
+  REAL(xp),    PARAMETER :: ninesixteenths=0.5625_xp
+  REAL(xp),    PARAMETER :: thirteentwelfths = 1.083333333333333333333333333333333333333333333_xp
+  COMPLEX(xp), PARAMETER :: imagu = (0._xp,1._xp)
   CONTAINS
 
     SUBROUTINE INIT_PREC_CONST
@@ -50,21 +57,24 @@ MODULE prec_const
       IMPLICIT NONE
       integer :: ierr,me
 
-      REAL(sp) :: a = 1_sp
-      REAL(dp) :: b = 1_dp
-
+      ! REAL(sp) :: a = 1_sp
+      ! REAL(dp) :: b = 1_dp
       !Get range and precision of ISO FORTRAN sizes
-      sp_r = range(a)
-      sp_p = precision(a)
-
-      dp_r = range(b)
-      dp_p = precision(b)
+      ! sp_r = range(a)
+      ! sp_p = precision(a)
+      ! dp_r = range(b)
+      ! dp_p = precision(b)
+      
+      REAL(xp) :: c = 1_xp
+      xp_r = range(c)
+      xp_p = precision(c)
 
       CALL mpi_comm_rank(MPI_COMM_WORLD,me,ierr)
 
       !Create MPI datatypes that support the specific size
-      CALL MPI_Type_create_f90_real(sp_p,sp_r,MPI_sp,ierr)
-      CALL MPI_Type_create_f90_real(dp_p,dp_r,MPI_dp,ierr)
+      ! CALL MPI_Type_create_f90_real(sp_p,sp_r,MPI_sp,ierr)
+      ! CALL MPI_Type_create_f90_real(dp_p,dp_r,MPI_xp,ierr)
+      CALL MPI_Type_create_f90_real(xp_p,xp_r,MPI_xp,ierr)
 
     END SUBROUTINE INIT_PREC_CONST
 
diff --git a/src/processing_mod.F90 b/src/processing_mod.F90
index 46532eaa..c7e8dbee 100644
--- a/src/processing_mod.F90
+++ b/src/processing_mod.F90
@@ -1,5 +1,5 @@
 MODULE processing
-   USE prec_const,  ONLY: dp, imagu, SQRT2, SQRT3, onetwelfth, twothird
+   USE prec_const,  ONLY: xp, imagu, SQRT2, SQRT3, onetwelfth, twothird
    USE grid,        ONLY: &
       local_na, local_np, local_nj, local_nky, local_nkx, local_nz, Ngz,Ngj,Ngp,nzgrid, &
       parray,pmax,ip0, iodd, ieven,&
@@ -21,8 +21,8 @@ MODULE processing
    USE mpi
    implicit none
 
-   REAL(dp), PUBLIC, ALLOCATABLE, DIMENSION(:), PROTECTED :: pflux_x, gflux_x
-   REAL(dp), PUBLIC, ALLOCATABLE, DIMENSION(:), PROTECTED :: hflux_x
+   REAL(xp), PUBLIC, ALLOCATABLE, DIMENSION(:), PROTECTED :: pflux_x, gflux_x
+   REAL(xp), PUBLIC, ALLOCATABLE, DIMENSION(:), PROTECTED :: hflux_x
    INTEGER :: ierr
    PUBLIC :: init_process
    PUBLIC :: compute_nadiab_moments, compute_gradients_z, compute_interp_z
@@ -83,7 +83,7 @@ CONTAINS
          p_int = parray(ip)
             DO ia = 1,local_na
             IF(p_int+2*j_int .GT. dmax) &
-               nadiab_moments(ia,ip,ij,iky,ikx,iz) = 0._dp
+               nadiab_moments(ia,ip,ij,iky,ikx,iz) = 0._xp
          ENDDO
          ENDDO
          ENDDO
@@ -97,8 +97,8 @@ CONTAINS
    ! SUBROUTINE compute_gradients_z
    !    IMPLICIT NONE
    !    INTEGER :: eo, p_int, j_int, ia,ip,ij,iky,ikx,iz,izi
-   !    COMPLEX(dp), DIMENSION(local_nz+ngz) :: f_in
-   !    COMPLEX(dp), DIMENSION(local_nz)     :: f_out
+   !    COMPLEX(xp), DIMENSION(local_nz+ngz) :: f_in
+   !    COMPLEX(xp), DIMENSION(local_nz)     :: f_out
    !       ! Compute z first derivative
    !       DO iz=1,local_nz+ngz
    !          izi = iz+ngz/2
@@ -114,11 +114,11 @@ CONTAINS
    !             -onetwelfth*nadiab_moments(ia,ip,ij,iky,ikx,izi-2)&
    !             )
    !          ddzND_Napj(ia,ip,ij,iky,ikx,iz) = inv_deltaz**4 *(&
-   !             +1._dp*moments(ia,ip,ij,iky,ikx,izi-2,updatetlevel)&
-   !             -4._dp*moments(ia,ip,ij,iky,ikx,izi-1,updatetlevel)&
-   !             +6._dp*moments(ia,ip,ij,iky,ikx,izi  ,updatetlevel)&
-   !             -4._dp*moments(ia,ip,ij,iky,ikx,izi+1,updatetlevel)&
-   !             +1._dp*moments(ia,ip,ij,iky,ikx,izi-2,updatetlevel)&
+   !             +1._xp*moments(ia,ip,ij,iky,ikx,izi-2,updatetlevel)&
+   !             -4._xp*moments(ia,ip,ij,iky,ikx,izi-1,updatetlevel)&
+   !             +6._xp*moments(ia,ip,ij,iky,ikx,izi  ,updatetlevel)&
+   !             -4._xp*moments(ia,ip,ij,iky,ikx,izi+1,updatetlevel)&
+   !             +1._xp*moments(ia,ip,ij,iky,ikx,izi-2,updatetlevel)&
    !          )
    !       ENDDO
    !       ENDDO
@@ -131,9 +131,9 @@ CONTAINS
    ! ! z grid gradients
    SUBROUTINE compute_gradients_z
       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
+      INTEGER :: eo, p_int, ia,ip,ij,iky,ikx,iz
+      COMPLEX(xp), DIMENSION(local_nz+ngz) :: f_in
+      COMPLEX(xp), DIMENSION(local_nz)     :: f_out
       DO ikx = 1,local_nkx
       DO iky = 1,local_nky
       DO ij = 1,local_nj+ngj
@@ -170,9 +170,9 @@ CONTAINS
       ! z grid interpolation
    SUBROUTINE compute_interp_z
       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
+      INTEGER :: eo, ia,ip,ij,iky,ikx,iz
+      COMPLEX(xp), DIMENSION(local_nz+ngz) :: f_in
+      COMPLEX(xp), DIMENSION(local_nz)     :: f_out
       IF(nzgrid .GT. 1) THEN
          DO ikx = 1,local_nkx
          DO iky = 1,local_nky
@@ -201,14 +201,14 @@ CONTAINS
    ! 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)
+      COMPLEX(xp) :: pflux_local, gflux_local, integral
+      REAL(xp)    :: buffer(2)
       INTEGER     :: i_, root, iky, ikx, ia, iz, in, izi, ini
-      COMPLEX(dp), DIMENSION(local_nz) :: integrant
+      COMPLEX(xp), 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
+         pflux_local = 0._xp ! particle flux
+         gflux_local = 0._xp ! gyrocenter flux
+         integrant   = 0._xp ! auxiliary variable for z integration
          !!---------- Gyro center flux (drift kinetic) ------------
          ! Electrostatic part
          IF(CONTAINSp0) THEN
@@ -239,10 +239,10 @@ CONTAINS
          ! Integrate over z
          call simpson_rule_z(local_nz,zweights_SR,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
+         gflux_local = 2._xp*integral*iInt_Jacobian
          !
          !!---------- Particle flux (gyrokinetic) ------------
-         integrant   = 0._dp ! reset auxiliary variable
+         integrant   = 0._xp ! reset auxiliary variable
          ! Electrostatic part
          IF(CONTAINSp0) THEN
             DO iz = 1,local_nz ! we take interior points only
@@ -278,10 +278,10 @@ CONTAINS
          ! Integrate over z
          call simpson_rule_z(local_nz,zweights_SR,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
+         pflux_local = 2._xp*integral*iInt_Jacobian
          !!!!---------- Sum over all processes ----------
-         buffer(1) = REAL(gflux_local,dp)
-         buffer(2) = REAL(pflux_local,dp)
+         buffer(1) = REAL(gflux_local,xp)
+         buffer(2) = REAL(pflux_local,xp)
          root = 0
          !Gather manually among the rank_p=0 processes and perform the sum
          gflux_x(ia) = 0
@@ -309,13 +309,13 @@ CONTAINS
 ! 1D diagnostic to compute the average radial particle heatflux <T_i v_ExB_x>_xyz
    SUBROUTINE compute_radial_heatflux
       IMPLICIT NONE
-      COMPLEX(dp) :: hflux_local, integral
-      REAL(dp)    :: buffer(2), n_dp
+      COMPLEX(xp) :: hflux_local, integral
+      REAL(xp)    :: buffer(2), n_xp
       INTEGER     :: i_, root, in, ia, iky, ikx, iz, izi, ini
-      COMPLEX(dp), DIMENSION(local_nz) :: integrant        ! charge density q_a n_a
+      COMPLEX(xp), 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
+         hflux_local = 0._xp ! heat flux
+         integrant   = 0._xp ! 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
@@ -325,14 +325,14 @@ CONTAINS
             DO iky = 1,local_nky
             DO in = 1, local_nj
             ini  = in+ngj/2 !interior index for ghosted arrays
-            n_dp = jarray(ini)
+            n_xp = jarray(ini)
                integrant(iz) = integrant(iz) &
                   -Jacobian(izi,ieven)*tau(ia)*imagu*kyarray(iky)*phi(iky,ikx,izi)&
                   *kernel(ia,ini,iky,ikx,izi,ieven)*CONJG(&
-                              0.5_dp*SQRT2*moments(ia,ip2,ini  ,iky,ikx,izi,updatetlevel)&
-                  +(2._dp*n_dp + 1.5_dp)*moments(ia,ip0,ini  ,iky,ikx,izi,updatetlevel)&
-                           -(n_dp+1._dp)*moments(ia,ip0,ini+1,iky,ikx,izi,updatetlevel)&
-                                    -n_dp*moments(ia,ip0,ini-1,iky,ikx,izi,updatetlevel))
+                              0.5_xp*SQRT2*moments(ia,ip2,ini  ,iky,ikx,izi,updatetlevel)&
+                  +(2._xp*n_xp + 1.5_xp)*moments(ia,ip0,ini  ,iky,ikx,izi,updatetlevel)&
+                           -(n_xp+1._xp)*moments(ia,ip0,ini+1,iky,ikx,izi,updatetlevel)&
+                                    -n_xp*moments(ia,ip0,ini-1,iky,ikx,izi,updatetlevel))
             ENDDO
             ENDDO
             ENDDO
@@ -348,15 +348,15 @@ CONTAINS
             DO iky = 1,local_nky
             DO in = 1, local_nj
             ini = in + ngj/2 !interior index for ghosted arrays
-            n_dp = jarray(ini)
+            n_xp = jarray(ini)
                integrant(iz) = integrant(iz) &
                      +Jacobian(izi,iodd)*tau(ia)*sqrt_tau_o_sigma(ia)*imagu*kyarray(iky)*CONJG(psi(iky,ikx,izi))&
                   *kernel(ia,ini,iky,ikx,izi,iodd)*(&
-                  0.5_dp*SQRT2*SQRT3*moments(ia,ip3,ini  ,iky,ikx,izi,updatetlevel)&
-                              +1.5_dp*moments(ia,ip1,ini  ,iky,ikx,izi,updatetlevel)&
-                  +(2._dp*n_dp+1._dp)*moments(ia,ip1,ini  ,iky,ikx,izi,updatetlevel)&
-                        -(n_dp+1._dp)*moments(ia,ip1,ini+1,iky,ikx,izi,updatetlevel)&
-                                 -n_dp*moments(ia,ip1,ini-1,iky,ikx,izi,updatetlevel))
+                  0.5_xp*SQRT2*SQRT3*moments(ia,ip3,ini  ,iky,ikx,izi,updatetlevel)&
+                              +1.5_xp*moments(ia,ip1,ini  ,iky,ikx,izi,updatetlevel)&
+                  +(2._xp*n_xp+1._xp)*moments(ia,ip1,ini  ,iky,ikx,izi,updatetlevel)&
+                        -(n_xp+1._xp)*moments(ia,ip1,ini+1,iky,ikx,izi,updatetlevel)&
+                                 -n_xp*moments(ia,ip1,ini-1,iky,ikx,izi,updatetlevel))
             ENDDO
             ENDDO
             ENDDO
@@ -368,8 +368,8 @@ CONTAINS
          ! Integrate over z
          call simpson_rule_z(local_nz,zweights_SR,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)
+         hflux_local = 2._xp*integral*iInt_Jacobian
+         buffer(2)   = REAL(hflux_local,xp)
          root = 0
          !Gather manually among the rank_p=0 processes and perform the sum
          hflux_x(ia) = 0
@@ -396,13 +396,13 @@ CONTAINS
       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
+      REAL(xp), 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
+         local_sum = 0._xp
          DO iz = 1,local_nz
          DO ikx = 1,local_nkx
          DO iky = 1,local_nky
@@ -418,7 +418,7 @@ CONTAINS
          ENDDO
          ! sum reduction
          buffer     = local_sum
-         global_sum = 0._dp
+         global_sum = 0._xp
          count = local_np*local_nj*local_nz
          IF (num_procs_ky .GT. 1) THEN
             !! Everyone sends its local_sum to root = 0
@@ -444,7 +444,7 @@ CONTAINS
 ! Compute the 2D particle density for electron and ions (sum over Laguerre)
    SUBROUTINE compute_density
    IMPLICIT NONE
-   COMPLEX(dp) :: dens_
+   COMPLEX(xp) :: dens_
    INTEGER :: ia, iz, iky, ikx, ij
    DO ia=1,local_na
    IF ( CONTAINSp0 ) THEN
@@ -452,7 +452,7 @@ CONTAINS
    DO iz = 1,local_nz
    DO iky = 1,local_nky
    DO ikx = 1,local_nkx
-      dens_ = 0._dp
+      dens_ = 0._xp
       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
@@ -467,17 +467,17 @@ CONTAINS
 ! Compute the 2D particle fluid perp velocity for electron and ions (sum over Laguerre)
    SUBROUTINE compute_uperp
       IMPLICIT NONE
-      COMPLEX(dp) :: uperp_
+      COMPLEX(xp) :: 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
+      uperp_ = 0._xp
       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)&
+            0.5_xp*(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_
@@ -492,13 +492,13 @@ CONTAINS
    SUBROUTINE compute_upar
       IMPLICIT NONE
       INTEGER :: ia, iz, iky, ikx, ij
-      COMPLEX(dp) :: upar_
+      COMPLEX(xp) :: 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
+         upar_ = 0._xp
          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
@@ -514,8 +514,8 @@ CONTAINS
    SUBROUTINE compute_tperp
       USE time_integration, ONLY : updatetlevel
       IMPLICIT NONE
-      REAL(dp)    :: j_dp
-      COMPLEX(dp) :: Tperp_
+      REAL(xp)    :: j_xp
+      COMPLEX(xp) :: Tperp_
       INTEGER     :: ia, iz, iky, ikx, ij
       DO ia=1,local_na
       IF ( CONTAINSp0 .AND. CONTAINSp2 ) THEN
@@ -523,13 +523,13 @@ CONTAINS
       DO iz = 1,local_nz
       DO iky = 1,local_nky
       DO ikx = 1,local_nkx
-      Tperp_ = 0._dp
+      Tperp_ = 0._xp
       DO ij = 1, local_nj
-         j_dp = jarray(ij+ngj/2)
+         j_xp = 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))
+            ((2_xp*j_xp+1)*moments(ia,ip0,ij  +ngj/2,iky,ikx,iz+ngz/2,updatetlevel)&
+                     -j_xp*moments(ia,ip0,ij-1+ngj/2,iky,ikx,iz+ngz/2,updatetlevel)&
+                  -(j_xp+1)*moments(ia,ip0,ij+1+ngj/2,iky,ikx,iz+ngz/2,updatetlevel))
       ENDDO
       Tper(ia,iky,ikx,iz) = Tperp_
       ENDDO
@@ -543,8 +543,8 @@ CONTAINS
    SUBROUTINE compute_Tpar
       USE time_integration, ONLY : updatetlevel
       IMPLICIT NONE
-      REAL(dp)    :: j_dp
-      COMPLEX(dp) :: Tpar_
+      REAL(xp)    :: j_xp
+      COMPLEX(xp) :: Tpar_
       INTEGER     :: ia, iz, iky, ikx, ij
       DO ia=1,local_na
       IF ( CONTAINSp0 .AND. CONTAINSp0 ) THEN
@@ -552,9 +552,9 @@ CONTAINS
       DO iz = 1,local_nz
       DO iky = 1,local_nky
       DO ikx = 1,local_nkx
-      Tpar_ = 0._dp
+      Tpar_ = 0._xp
       DO ij = 1, local_nj
-         j_dp = REAL(ij-1,dp)
+         j_xp = REAL(ij-1,xp)
          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))
@@ -576,7 +576,7 @@ CONTAINS
       CALL compute_Tpar
       CALL compute_Tperp
       ! Temperature
-      temp = (Tpar - 2._dp * Tper)/3._dp - dens
+      temp = (Tpar - 2._xp * Tper)/3._xp - dens
    END SUBROUTINE compute_fluid_moments
 
 END MODULE processing
diff --git a/src/restarts_mod.F90 b/src/restarts_mod.F90
index 4a574d67..142231aa 100644
--- a/src/restarts_mod.F90
+++ b/src/restarts_mod.F90
@@ -19,15 +19,15 @@ CONTAINS
     USE parallel, ONLY: comm0
     IMPLICIT NONE
     CHARACTER(LEN=50) :: dset_name
-    REAL(dp):: time_cp
+    REAL(xp):: time_cp
     INTEGER :: cstep_cp, jobnum_cp
     INTEGER :: n_
     INTEGER :: deltap_cp
     INTEGER :: pmax_cp, jmax_cp, n0, Nkx_cp, Nky_cp, Nz_cp, Na_cp, Np_cp, Nj_cp
     INTEGER :: ia,ip,ij,iky,ikx,iz, iacp,ipcp,ijcp,iycp,ixcp,izcp, ierr
     INTEGER :: ipi,iji,izi
-    REAL(dp):: timer_tot_1,timer_tot_2
-    COMPLEX(dp), DIMENSION(:,:,:,:,:,:), ALLOCATABLE :: moments_cp
+    REAL(xp):: timer_tot_1,timer_tot_2
+    COMPLEX(xp), DIMENSION(:,:,:,:,:,:), ALLOCATABLE :: moments_cp
     CALL cpu_time(timer_tot_1)
     ! Checkpoint filename
     WRITE(rstfile,'(a,a1,i2.2,a3)') TRIM(resfile0),'_',job2load,'.h5'
@@ -72,7 +72,7 @@ CONTAINS
     WRITE(dset_name, "(A, '/', i6.6)") "/data/var5d/moments", n_
     CALL getarr(fidrst, dset_name, moments_cp(:,:,:,:,:,:))
 
-    moments     = 0._dp;
+    moments     = 0._xp;
     z: DO iz = 1,local_nz
       izcp = iz + local_nz_offset
       izi  = iz + ngz/2
diff --git a/src/solve_EM_fields.F90 b/src/solve_EM_fields.F90
index 73464ae2..01fc26ff 100644
--- a/src/solve_EM_fields.F90
+++ b/src/solve_EM_fields.F90
@@ -7,7 +7,7 @@ SUBROUTINE solve_EM_fields
 
   CALL poisson
 
-  IF(beta .GT. 0._dp) &
+  IF(beta .GT. 0._xp) &
   CALL ampere
 
 CONTAINS
@@ -29,8 +29,8 @@ CONTAINS
     IMPLICIT NONE
 
     INTEGER     :: in, ia, ikx, iky, iz, izi, ini
-    COMPLEX(dp) :: fsa_phi, intf_, rhtot   ! current flux averaged phi
-    COMPLEX(dp), DIMENSION(local_nz) :: rho, integrant  ! charge density q_a n_a and aux var
+    COMPLEX(xp) :: fsa_phi, intf_, rhtot   ! current flux averaged phi
+    COMPLEX(xp), DIMENSION(local_nz) :: rho, integrant  ! charge density q_a n_a and aux var
     rhtot = 0
     !! Poisson can be solved only for process containng p=0
     IF ( SOLVE_POISSON ) THEN
@@ -39,7 +39,7 @@ CONTAINS
             !!!!!!!!!!!!!!! Compute particle charge density q_a n_a for each evolved species
             DO iz = 1,local_nz
               izi = iz+ngz/2
-              rho(iz) = 0._dp
+              rho(iz) = 0._xp
               DO in = 1,total_nj
                 ini = in+ngj/2
                 DO ia = 1,local_na
@@ -55,8 +55,8 @@ CONTAINS
             ! [qi^2(1-sum_j K_j^2)/tau_i] <phi>_psi = <q_i n_i >_psi
             !       inv_pol_ion^-1         fsa_phi  = simpson(Jacobian rho_i ) * iInt_Jacobian
             IF (ADIAB_E) THEN
-              fsa_phi = 0._dp
-              IF(kyarray(iky).EQ.0._dp) THEN ! take ky=0 mode (y-average)
+              fsa_phi = 0._xp
+              IF(kyarray(iky).EQ.0._xp) THEN ! take ky=0 mode (y-average)
                 ! Prepare integrant for z-average
                 DO iz = 1,local_nz
                   izi = iz+ngz/2
@@ -78,7 +78,7 @@ CONTAINS
           ENDDO y
         ENDDO x
       ! Cancel origin singularity
-      IF (contains_kx0 .AND. contains_ky0) phi(iky0,ikx0,:) = 0._dp
+      IF (contains_kx0 .AND. contains_ky0) phi(iky0,ikx0,:) = 0._xp
     ENDIF
     ! Transfer phi to all the others process along p
     CALL manual_3D_bcast(phi,local_nky,local_nkx,local_nz+ngz)
@@ -105,7 +105,7 @@ CONTAINS
     use species,          ONLY: sqrt_tau_o_sigma, q
     use model,            ONLY: beta
     IMPLICIT NONE
-    COMPLEX(dp) :: j_a ! current density
+    COMPLEX(xp) :: j_a ! current density
     INTEGER     :: in, ia, ikx, iky, iz, ini, izi
     !! Ampere can be solved only with beta > 0 and for process containng p=1 moments
     IF ( SOLVE_AMPERE ) THEN
@@ -114,7 +114,7 @@ CONTAINS
         x:DO ikx = 1,local_nkx
           y:DO iky = 1,local_nky
           !!!!!!!!!!!!!!! compute current density contribution "j_a = q_a u_a" for each species
-          j_a = 0._dp
+          j_a = 0._xp
           n:DO in=1,total_nj
           ini = in+ngj/2
             a:DO ia = 1,local_na
@@ -129,7 +129,7 @@ CONTAINS
       ENDDO z
     ENDIF
     ! Cancel origin singularity
-    IF (contains_kx0 .AND. contains_ky0) psi(iky0,ikx0,:) = 0._dp
+    IF (contains_kx0 .AND. contains_ky0) psi(iky0,ikx0,:) = 0._xp
     ! Transfer phi to all the others process along p
     CALL manual_3D_bcast(psi,local_nky,local_nkx,local_nz+ngz)
   END SUBROUTINE ampere
diff --git a/src/species_mod.F90 b/src/species_mod.F90
index 6b40dab8..d00db354 100644
--- a/src/species_mod.F90
+++ b/src/species_mod.F90
@@ -5,31 +5,31 @@ MODULE species
   PRIVATE
   !! Input parameters
   CHARACTER(len=32) :: name_               ! name of the species
-  REAL(dp)          :: tau_                ! Temperature
-  REAL(dp)          :: sigma_              ! sqrt mass ratio
-  REAL(dp)          :: q_                  ! Charge
-  REAL(dp)          :: k_N_                ! density drive (L_ref/L_Ni)
-  REAL(dp)          :: k_T_                ! temperature drive (L_ref/L_Ti)
+  REAL(xp)          :: tau_                ! Temperature
+  REAL(xp)          :: sigma_              ! sqrt mass ratio
+  REAL(xp)          :: q_                  ! Charge
+  REAL(xp)          :: k_N_                ! density drive (L_ref/L_Ni)
+  REAL(xp)          :: k_T_                ! temperature drive (L_ref/L_Ti)
   !! Arrays to store all species features
   CHARACTER(len=32),&
             ALLOCATABLE, DIMENSION(:),  PUBLIC, PROTECTED :: name               ! name of the species
-  REAL(dp), ALLOCATABLE, DIMENSION(:),  PUBLIC, PROTECTED :: tau                ! Temperature
-  REAL(dp), ALLOCATABLE, DIMENSION(:),  PUBLIC, PROTECTED :: sigma              ! sqrt mass ratio
-  REAL(dp), ALLOCATABLE, DIMENSION(:),  PUBLIC, PROTECTED :: q                  ! Charge
-  REAL(dp), ALLOCATABLE, DIMENSION(:),  PUBLIC, PROTECTED :: k_N                ! density drive (L_ref/L_Ni)
-  REAL(dp), ALLOCATABLE, DIMENSION(:),  PUBLIC, PROTECTED :: k_T                ! temperature drive (L_ref/L_Ti)
-  REAL(dp), ALLOCATABLE, DIMENSION(:,:),PUBLIC, PROTECTED :: nu_ab              ! Collision frequency tensor
+  REAL(xp), ALLOCATABLE, DIMENSION(:),  PUBLIC, PROTECTED :: tau                ! Temperature
+  REAL(xp), ALLOCATABLE, DIMENSION(:),  PUBLIC, PROTECTED :: sigma              ! sqrt mass ratio
+  REAL(xp), ALLOCATABLE, DIMENSION(:),  PUBLIC, PROTECTED :: q                  ! Charge
+  REAL(xp), ALLOCATABLE, DIMENSION(:),  PUBLIC, PROTECTED :: k_N                ! density drive (L_ref/L_Ni)
+  REAL(xp), ALLOCATABLE, DIMENSION(:),  PUBLIC, PROTECTED :: k_T                ! temperature drive (L_ref/L_Ti)
+  REAL(xp), ALLOCATABLE, DIMENSION(:,:),PUBLIC, PROTECTED :: nu_ab              ! Collision frequency tensor
   !! Auxiliary variables to store precomputation
-  REAL(dp), ALLOCATABLE, DIMENSION(:),PUBLIC, PROTECTED :: tau_q              ! factor of the magnetic moment coupling
-  REAL(dp), ALLOCATABLE, DIMENSION(:),PUBLIC, PROTECTED :: q_tau              !
-  REAL(dp), ALLOCATABLE, DIMENSION(:),PUBLIC, PROTECTED :: sqrtTau_q          ! factor of parallel moment term
-  REAL(dp), ALLOCATABLE, DIMENSION(:),PUBLIC, PROTECTED :: q_sigma_sqrtTau    ! factor of parallel phi term
-  REAL(dp), ALLOCATABLE, DIMENSION(:),PUBLIC, PROTECTED :: sigma2_tau_o2      ! factor of the Kernel argument
-  REAL(dp), ALLOCATABLE, DIMENSION(:),PUBLIC, PROTECTED :: sqrt_sigma2_tau_o2 ! to avoid multiple SQRT eval
-  REAL(dp), ALLOCATABLE, DIMENSION(:),PUBLIC, PROTECTED :: q2_tau             ! factor of the gammaD sum
-  REAL(dp), ALLOCATABLE, DIMENSION(:),PUBLIC, PROTECTED :: q_o_sqrt_tau_sigma ! For psi field terms
-  REAL(dp), ALLOCATABLE, DIMENSION(:),PUBLIC, PROTECTED :: sqrt_tau_o_sigma   ! For Ampere eq
-  REAL(dp), ALLOCATABLE, DIMENSION(:),PUBLIC, PROTECTED :: dpdx               ! radial pressure gradient
+  REAL(xp), ALLOCATABLE, DIMENSION(:),PUBLIC, PROTECTED :: tau_q              ! factor of the magnetic moment coupling
+  REAL(xp), ALLOCATABLE, DIMENSION(:),PUBLIC, PROTECTED :: q_tau              !
+  REAL(xp), ALLOCATABLE, DIMENSION(:),PUBLIC, PROTECTED :: sqrtTau_q          ! factor of parallel moment term
+  REAL(xp), ALLOCATABLE, DIMENSION(:),PUBLIC, PROTECTED :: q_sigma_sqrtTau    ! factor of parallel phi term
+  REAL(xp), ALLOCATABLE, DIMENSION(:),PUBLIC, PROTECTED :: sigma2_tau_o2      ! factor of the Kernel argument
+  REAL(xp), ALLOCATABLE, DIMENSION(:),PUBLIC, PROTECTED :: sqrt_sigma2_tau_o2 ! to avoid multiple SQRT eval
+  REAL(xp), ALLOCATABLE, DIMENSION(:),PUBLIC, PROTECTED :: q2_tau             ! factor of the gammaD sum
+  REAL(xp), ALLOCATABLE, DIMENSION(:),PUBLIC, PROTECTED :: q_o_sqrt_tau_sigma ! For psi field terms
+  REAL(xp), ALLOCATABLE, DIMENSION(:),PUBLIC, PROTECTED :: sqrt_tau_o_sigma   ! For Ampere eq
+  REAL(xp), ALLOCATABLE, DIMENSION(:),PUBLIC, PROTECTED :: xpdx               ! radial pressure gradient
   !! Accessible routines
   PUBLIC :: species_readinputs, species_outputinputs
 CONTAINS
@@ -50,11 +50,11 @@ CONTAINS
     DO ia = 1,Na
       ! default parameters
       name_  = 'ions'
-      tau_   = 1._dp
-      sigma_ = 1._dp
-      q_     = 1._dp
-      k_N_   = 2.22_dp
-      k_T_   = 6.96_dp
+      tau_   = 1._xp
+      sigma_ = 1._xp
+      q_     = 1._xp
+      k_N_   = 2.22_xp
+      k_T_   = 6.96_xp
       ! read input
       READ(lu_in,species)
       ! place values found in the arrays
@@ -69,12 +69,12 @@ CONTAINS
       q_tau(ia)              = q_/tau_
       sqrtTau_q(ia)          = sqrt(tau_)/q_
       q_sigma_sqrtTau(ia)    = q_/sigma_/SQRT(tau_)
-      sigma2_tau_o2(ia)      = sigma_**2 * tau_/2._dp
-      sqrt_sigma2_tau_o2(ia) = SQRT(sigma_**2 * tau_/2._dp)
+      sigma2_tau_o2(ia)      = sigma_**2 * tau_/2._xp
+      sqrt_sigma2_tau_o2(ia) = SQRT(sigma_**2 * tau_/2._xp)
       q2_tau(ia)             = (q_**2)/tau_
       q_o_sqrt_tau_sigma(ia) = q_/SQRT(tau_)/sigma_
       sqrt_tau_o_sigma(ia)   = SQRT(tau_)/sigma_
-      dpdx(ia)               = 0._dp !not implemented yet
+      xpdx(ia)               = 0._xp !not implemented yet
       ! We remove the adiabatic electron flag if electrons are included
       SELECT CASE (name_)
       CASE ('electrons','e','electron')
@@ -91,18 +91,18 @@ CONTAINS
           !   nu_ii = 4 sqrt(pi)/3 T_i^(-3/2) m_i^(-1/2) q^4 n_i0 ln(Lambda)
           SELECT CASE (name(ia))
           CASE ('electrons','e','electron') ! e-e and e-i collision
-            nu_ab(ia,ib) = nu/sigma(ia) * (tau(ia))**(3._dp/2._dp)  ! (where already multiplied by 0.532)
+            nu_ab(ia,ib) = nu/sigma(ia) * (tau(ia))**(3._xp/2._xp)  ! (where already multiplied by 0.532)
           CASE ('ions','ion','i') ! i-e and i-i collision
             nu_ab(ia,ib) = nu
           CASE DEFAULT
             ERROR STOP "!! No collision model for these species interactions"
           END SELECT
           ! I think we can just write
-          ! nu_ab(ia,ib) = nu/sigma(ia) * (tau(ia))**(3._dp/2._dp)
+          ! nu_ab(ia,ib) = nu/sigma(ia) * (tau(ia))**(3._xp/2._xp)
         ENDDO
       ENDDO
     ENDIF
-    ! nu_e            = nu/sigma_e * (tau_e)**(3._dp/2._dp)  ! electron-ion collision frequency (where already multiplied by 0.532)
+    ! nu_e            = nu/sigma_e * (tau_e)**(3._xp/2._xp)  ! electron-ion collision frequency (where already multiplied by 0.532)
     ! nu_i            = nu ! ion-ion collision frequ.
     ! nu_ee           = nu_e ! e-e coll. frequ.
     ! nu_ie           = nu_i ! i-e coll. frequ.
@@ -150,7 +150,7 @@ CONTAINS
       ALLOCATE(            q2_tau(1:Na))
       ALLOCATE(q_o_sqrt_tau_sigma(1:Na))
       ALLOCATE(  sqrt_tau_o_sigma(1:Na))
-      ALLOCATE(              dpdx(1:Na))
+      ALLOCATE(              xpdx(1:Na))
   END SUBROUTINE species_allocate
 
 END MODULE species
diff --git a/src/stepon.F90 b/src/stepon.F90
index e145ecd6..f388a649 100644
--- a/src/stepon.F90
+++ b/src/stepon.F90
@@ -7,7 +7,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
+   USE prec_const,            ONLY: xp
    IMPLICIT NONE
 
    INTEGER :: num_step, ierr
@@ -158,7 +158,7 @@ CONTAINS
          END DO
          ! must be real at origin and top right
          moments(:,:,:, iky0,ikx0,:,updatetlevel) = &
-            REAL(moments(:,:,:, iky0,ikx0,:,updatetlevel),dp)
+            REAL(moments(:,:,:, iky0,ikx0,:,updatetlevel),xp)
          ! ENDDO a
          ! ENDDO p
          ! ENDDO j
@@ -168,13 +168,13 @@ CONTAINS
             phi(iky0,ikx,:) = phi(iky0,total_nkx+2-ikx,:)
          END DO
          ! must be real at origin
-         phi(iky0,ikx0,:) = REAL(phi(iky0,ikx0,:),dp)
+         phi(iky0,ikx0,:) = REAL(phi(iky0,ikx0,:),xp)
          ! 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,:),dp)
+         psi(iky0,ikx0,:) = REAL(psi(iky0,ikx0,:),xp)
       ENDIF
    END SUBROUTINE enforce_symmetry
 
diff --git a/src/time_integration_mod.F90 b/src/time_integration_mod.F90
index 7f937147..e1a2aa51 100644
--- a/src/time_integration_mod.F90
+++ b/src/time_integration_mod.F90
@@ -7,9 +7,9 @@ MODULE time_integration
   INTEGER, PUBLIC, PROTECTED :: ntimelevel=4 ! Total number of time levels required by the numerical scheme
   INTEGER, PUBLIC, PROTECTED :: updatetlevel ! Current time level to be updated
 
-  real(dp),PUBLIC,PROTECTED,DIMENSION(:,:),ALLOCATABLE :: A_E,A_I
-  real(dp),PUBLIC,PROTECTED,DIMENSION(:),ALLOCATABLE :: b_E,b_Es,b_I
-  real(dp),PUBLIC,PROTECTED,DIMENSION(:),ALLOCATABLE :: c_E,c_I !Coeff for Expl/Implic time integration in case of time dependent RHS (i.e. dy/dt = f(y,t)) see Baptiste Frei CSE Rapport 06/17
+  real(xp),PUBLIC,PROTECTED,DIMENSION(:,:),ALLOCATABLE :: A_E,A_I
+  real(xp),PUBLIC,PROTECTED,DIMENSION(:),ALLOCATABLE :: b_E,b_Es,b_I
+  real(xp),PUBLIC,PROTECTED,DIMENSION(:),ALLOCATABLE :: c_E,c_I !Coeff for Expl/Implic time integration in case of time dependent RHS (i.e. dy/dt = f(y,t)) see Baptiste Frei CSE Rapport 06/17
 
   character(len=10),PUBLIC,PROTECTED :: numerical_scheme='RK4'
 
@@ -88,11 +88,11 @@ CONTAINS
     CALL allocate_array(b_E,1,nbstep)
     CALL allocate_array(A_E,1,nbstep,1,nbstep)
     ntimelevel = 2
-    c_E(1) = 0.0_dp
-    c_E(2) = 1.0_dp
-    b_E(1) = 1._dp/2._dp
-    b_E(2) = 1._dp/2._dp
-    A_E(2,1) = 1._dp
+    c_E(1) = 0.0_xp
+    c_E(2) = 1.0_xp
+    b_E(1) = 1._xp/2._xp
+    b_E(2) = 1._xp/2._xp
+    A_E(2,1) = 1._xp
   END SUBROUTINE RK2
 
   SUBROUTINE SSPx_RK2
@@ -103,21 +103,21 @@ CONTAINS
     USE prec_const
     IMPLICIT NONE
     INTEGER,PARAMETER :: nbstep = 2
-    REAL(dp) :: alpha, beta
-    alpha = 1._dp/SQRT(2._dp)
-    beta  = SQRT(2._dp) - 1._dp
+    REAL(xp) :: alpha, beta
+    alpha = 1._xp/SQRT(2._xp)
+    beta  = SQRT(2._xp) - 1._xp
     CALL allocate_array(c_E,1,nbstep)
     CALL allocate_array(b_E,1,nbstep)
     CALL allocate_array(A_E,1,nbstep,1,nbstep)
     ntimelevel = 2
-    c_E(1)   = 0.0_dp
-    c_E(2)   = 1.0_dp/2.0_dp
-    b_E(1)   = alpha*beta/2._dp
-    b_E(2)   = alpha/2._dp
+    c_E(1)   = 0.0_xp
+    c_E(2)   = 1.0_xp/2.0_xp
+    b_E(1)   = alpha*beta/2._xp
+    b_E(2)   = alpha/2._xp
     A_E(2,1) = alpha
-    ! b_E(1) = 1._dp
-    ! b_E(2) = 1._dp/SQRT(2._dp)
-    ! A_E(2,1) = 1._dp/SQRT(2._dp)
+    ! b_E(1) = 1._xp
+    ! b_E(2) = 1._xp/SQRT(2._xp)
+    ! A_E(2,1) = 1._xp/SQRT(2._xp)
   END SUBROUTINE SSPx_RK2
 
   !!! third order time schemes
@@ -131,15 +131,15 @@ CONTAINS
     CALL allocate_array(b_E,1,nbstep)
     CALL allocate_array(A_E,1,nbstep,1,nbstep)
     ntimelevel = 3
-    c_E(1)   = 0.0_dp
-    c_E(2)   = 1.0_dp/2.0_dp
-    c_E(3)   = 1.0_dp
-    b_E(1)   = 1._dp/6._dp
-    b_E(2)   = 2._dp/3._dp
-    b_E(3)   = 1._dp/6._dp
-    A_E(2,1) = 1.0_dp/2.0_dp
-    A_E(3,1) = -1._dp
-    A_E(3,2) = 2._dp
+    c_E(1)   = 0.0_xp
+    c_E(2)   = 1.0_xp/2.0_xp
+    c_E(3)   = 1.0_xp
+    b_E(1)   = 1._xp/6._xp
+    b_E(2)   = 2._xp/3._xp
+    b_E(3)   = 1._xp/6._xp
+    A_E(2,1) = 1.0_xp/2.0_xp
+    A_E(3,1) = -1._xp
+    A_E(3,2) = 2._xp
   END SUBROUTINE RK3
 
   SUBROUTINE SSPx_RK3
@@ -150,24 +150,24 @@ CONTAINS
     USE prec_const
     IMPLICIT NONE
     INTEGER,PARAMETER :: nbstep = 3
-    REAL(dp) :: a1, a2, a3, w1, w2, w3
-    a1 = (1._dp/6._dp)**(1._dp/3._dp)! (1/6)^(1/3)
-    ! a1 = 0.5503212081491044571635029569733887910843_dp ! (1/6)^(1/3)
+    REAL(xp) :: a1, a2, a3, w1, w2, w3
+    a1 = (1._xp/6._xp)**(1._xp/3._xp)! (1/6)^(1/3)
+    ! a1 = 0.5503212081491044571635029569733887910843_xp ! (1/6)^(1/3)
     a2 = a1
     a3 = a1
-    w1 = 0.5_dp*(-1._dp + SQRT( 9._dp - 2._dp * 6._dp**(2._dp/3._dp))) ! (-1 + sqrt(9-2*6^(2/3)))/2
-    ! w1 = 0.2739744023885328783052273138309828937054_dp ! (sqrt(9-2*6^(2/3))-1)/2
-    w2 = 0.5_dp*(-1._dp + 6._dp**(2._dp/3._dp) - SQRT(9._dp - 2._dp * 6._dp**(2._dp/3._dp))) ! (6^(2/3)-1-sqrt(9-2*6^(2/3)))/2
-    ! w2 = 0.3769892220587804931852815570891834795475_dp ! (6^(2/3)-1-sqrt(9-2*6^(2/3)))/2
-    w3 = 1._dp/a1 - w2 * (1._dp + w1)
-    ! w3 = 1.3368459739528868457369981115334667265415_dp
+    w1 = 0.5_xp*(-1._xp + SQRT( 9._xp - 2._xp * 6._xp**(2._xp/3._xp))) ! (-1 + sqrt(9-2*6^(2/3)))/2
+    ! w1 = 0.2739744023885328783052273138309828937054_xp ! (sqrt(9-2*6^(2/3))-1)/2
+    w2 = 0.5_xp*(-1._xp + 6._xp**(2._xp/3._xp) - SQRT(9._xp - 2._xp * 6._xp**(2._xp/3._xp))) ! (6^(2/3)-1-sqrt(9-2*6^(2/3)))/2
+    ! w2 = 0.3769892220587804931852815570891834795475_xp ! (6^(2/3)-1-sqrt(9-2*6^(2/3)))/2
+    w3 = 1._xp/a1 - w2 * (1._xp + w1)
+    ! w3 = 1.3368459739528868457369981115334667265415_xp
     CALL allocate_array(c_E,1,nbstep)
     CALL allocate_array(b_E,1,nbstep)
     CALL allocate_array(A_E,1,nbstep,1,nbstep)
     ntimelevel = 3
-    c_E(1) = 0.0_dp
-    c_E(2) = 1.0_dp/2.0_dp
-    c_E(3) = 1.0_dp/2.0_dp
+    c_E(1) = 0.0_xp
+    c_E(2) = 1.0_xp/2.0_xp
+    c_E(3) = 1.0_xp/2.0_xp
     b_E(1) = a1 * (w1*w2 + w3)
     b_E(2) = a2 * w2
     b_E(3) = a3
@@ -187,15 +187,15 @@ CONTAINS
     CALL allocate_array(b_E,1,nbstep)
     CALL allocate_array(A_E,1,nbstep,1,nbstep)
     ntimelevel = 3
-    c_E(1)   = 0._dp
-    c_E(2)   = 0.711664700366941_dp
-    c_E(3)   = 0.994611536833690_dp
-    b_E(1)   = 0.398930808264688_dp
-    b_E(2)   = 0.345755244189623_dp
-    b_E(3)   = 0.255313947545689_dp
-    A_E(2,1) = 0.711664700366941_dp
-    A_E(3,1) = 0.077338168947683_dp
-    A_E(3,2) = 0.917273367886007_dp
+    c_E(1)   = 0._xp
+    c_E(2)   = 0.711664700366941_xp
+    c_E(3)   = 0.994611536833690_xp
+    b_E(1)   = 0.398930808264688_xp
+    b_E(2)   = 0.345755244189623_xp
+    b_E(3)   = 0.255313947545689_xp
+    A_E(2,1) = 0.711664700366941_xp
+    A_E(3,1) = 0.077338168947683_xp
+    A_E(3,2) = 0.917273367886007_xp
   END SUBROUTINE IMEX_SSP2
 
   SUBROUTINE ARK2
@@ -209,15 +209,15 @@ CONTAINS
     CALL allocate_array(b_E,1,nbstep)
     CALL allocate_array(A_E,1,nbstep,1,nbstep)
     ntimelevel = 3
-    c_E(1)   = 0._dp
-    c_E(2)   = 2._dp*(1._dp - 1._dp/SQRT2)
-    c_E(3)   = 1._dp
-    b_E(1)   = 1._dp/(2._dp*SQRT2)
-    b_E(2)   = 1._dp/(2._dp*SQRT2)
-    b_E(3)   = 1._dp - 1._dp/SQRT2
-    A_E(2,1) = 2._dp*(1._dp - 1._dp/SQRT2)
-    A_E(3,1) = 1._dp - (3._dp + 2._dp*SQRT2)/6._dp
-    A_E(3,2) = (3._dp + 2._dp*SQRT2)/6._dp
+    c_E(1)   = 0._xp
+    c_E(2)   = 2._xp*(1._xp - 1._xp/SQRT2)
+    c_E(3)   = 1._xp
+    b_E(1)   = 1._xp/(2._xp*SQRT2)
+    b_E(2)   = 1._xp/(2._xp*SQRT2)
+    b_E(3)   = 1._xp - 1._xp/SQRT2
+    A_E(2,1) = 2._xp*(1._xp - 1._xp/SQRT2)
+    A_E(3,1) = 1._xp - (3._xp + 2._xp*SQRT2)/6._xp
+    A_E(3,2) = (3._xp + 2._xp*SQRT2)/6._xp
   END SUBROUTINE ARK2
 
   SUBROUTINE SSP_RK3
@@ -230,15 +230,15 @@ CONTAINS
     CALL allocate_array(b_E,1,nbstep)
     CALL allocate_array(A_E,1,nbstep,1,nbstep)
     ntimelevel = 3
-    c_E(1)   = 0.0_dp
-    c_E(2)   = 1.0_dp
-    c_E(3)   = 1.0_dp/2.0_dp
-    b_E(1)   = 1._dp/6._dp
-    b_E(2)   = 1._dp/6._dp
-    b_E(3)   = 2._dp/3._dp
-    A_E(2,1) = 1._dp
-    A_E(3,1) = 1._dp/4._dp
-    A_E(3,2) = 1._dp/4._dp
+    c_E(1)   = 0.0_xp
+    c_E(2)   = 1.0_xp
+    c_E(3)   = 1.0_xp/2.0_xp
+    b_E(1)   = 1._xp/6._xp
+    b_E(2)   = 1._xp/6._xp
+    b_E(3)   = 2._xp/3._xp
+    A_E(2,1) = 1._xp
+    A_E(3,1) = 1._xp/4._xp
+    A_E(3,2) = 1._xp/4._xp
   END SUBROUTINE SSP_RK3
 
   !!! fourth order time schemes
@@ -252,17 +252,17 @@ CONTAINS
     CALL allocate_array(b_E,1,nbstep)
     CALL allocate_array(A_E,1,nbstep,1,nbstep)
     ntimelevel = 4
-    c_E(1)   = 0.0_dp
-    c_E(2)   = 1.0_dp/2.0_dp
-    c_E(3)   = 1.0_dp/2.0_dp
-    c_E(4)   = 1.0_dp
-    b_E(1)   = 1.0_dp/6.0_dp
-    b_E(2)   = 1.0_dp/3.0_dp
-    b_E(3)   = 1.0_dp/3.0_dp
-    b_E(4)   = 1.0_dp/6.0_dp
-    A_E(2,1) = 1.0_dp/2.0_dp
-    A_E(3,2) = 1.0_dp/2.0_dp
-    A_E(4,3) = 1.0_dp
+    c_E(1)   = 0.0_xp
+    c_E(2)   = 1.0_xp/2.0_xp
+    c_E(3)   = 1.0_xp/2.0_xp
+    c_E(4)   = 1.0_xp
+    b_E(1)   = 1.0_xp/6.0_xp
+    b_E(2)   = 1.0_xp/3.0_xp
+    b_E(3)   = 1.0_xp/3.0_xp
+    b_E(4)   = 1.0_xp/6.0_xp
+    A_E(2,1) = 1.0_xp/2.0_xp
+    A_E(3,2) = 1.0_xp/2.0_xp
+    A_E(4,3) = 1.0_xp
   END SUBROUTINE RK4
 
   !!! fifth order time schemes
@@ -277,40 +277,40 @@ CONTAINS
     CALL allocate_array(b_E,1,nbstep)
     CALL allocate_array(A_E,1,nbstep,1,nbstep)
     ntimelevel = 7
-    c_E(1) = 0._dp
-    c_E(2) = 1.0_dp/5.0_dp
-    c_E(3) = 3.0_dp /10.0_dp
-    c_E(4) = 4.0_dp/5.0_dp
-    c_E(5) = 8.0_dp/9.0_dp
-    c_E(6) = 1.0_dp
-    c_E(7) = 1.0_dp
-    A_E(2,1) = 1.0_dp/5.0_dp
-    A_E(3,1) = 3.0_dp/40.0_dp
-    A_E(3,2) = 9.0_dp/40.0_dp
-    A_E(4,1) = 	44.0_dp/45.0_dp
-    A_E(4,2) = -56.0_dp/15.0_dp
-    A_E(4,3) = 32.0_dp/9.0_dp
-    A_E(5,1 ) = 19372.0_dp/6561.0_dp
-    A_E(5,2) = -25360.0_dp/2187.0_dp
-    A_E(5,3) = 64448.0_dp/6561.0_dp
-    A_E(5,4) = -212.0_dp/729.0_dp
-    A_E(6,1) = 9017.0_dp/3168.0_dp
-    A_E(6,2)= -355.0_dp/33.0_dp
-    A_E(6,3) = 46732.0_dp/5247.0_dp
-    A_E(6,4) = 49.0_dp/176.0_dp
-    A_E(6,5) = -5103.0_dp/18656.0_dp
-    A_E(7,1) = 35.0_dp/384.0_dp
-    A_E(7,3) = 500.0_dp/1113.0_dp
-    A_E(7,4) = 125.0_dp/192.0_dp
-    A_E(7,5) = -2187.0_dp/6784.0_dp
-    A_E(7,6) = 11.0_dp/84.0_dp
-    b_E(1) = 35.0_dp/384.0_dp
-    b_E(2) = 0._dp
-    b_E(3) = 500.0_dp/1113.0_dp
-    b_E(4) = 125.0_dp/192.0_dp
-    b_E(5) = -2187.0_dp/6784.0_dp
-    b_E(6) = 11.0_dp/84.0_dp
-    b_E(7) = 0._dp
+    c_E(1) = 0._xp
+    c_E(2) = 1.0_xp/5.0_xp
+    c_E(3) = 3.0_xp /10.0_xp
+    c_E(4) = 4.0_xp/5.0_xp
+    c_E(5) = 8.0_xp/9.0_xp
+    c_E(6) = 1.0_xp
+    c_E(7) = 1.0_xp
+    A_E(2,1) = 1.0_xp/5.0_xp
+    A_E(3,1) = 3.0_xp/40.0_xp
+    A_E(3,2) = 9.0_xp/40.0_xp
+    A_E(4,1) = 	44.0_xp/45.0_xp
+    A_E(4,2) = -56.0_xp/15.0_xp
+    A_E(4,3) = 32.0_xp/9.0_xp
+    A_E(5,1 ) = 19372.0_xp/6561.0_xp
+    A_E(5,2) = -25360.0_xp/2187.0_xp
+    A_E(5,3) = 64448.0_xp/6561.0_xp
+    A_E(5,4) = -212.0_xp/729.0_xp
+    A_E(6,1) = 9017.0_xp/3168.0_xp
+    A_E(6,2)= -355.0_xp/33.0_xp
+    A_E(6,3) = 46732.0_xp/5247.0_xp
+    A_E(6,4) = 49.0_xp/176.0_xp
+    A_E(6,5) = -5103.0_xp/18656.0_xp
+    A_E(7,1) = 35.0_xp/384.0_xp
+    A_E(7,3) = 500.0_xp/1113.0_xp
+    A_E(7,4) = 125.0_xp/192.0_xp
+    A_E(7,5) = -2187.0_xp/6784.0_xp
+    A_E(7,6) = 11.0_xp/84.0_xp
+    b_E(1) = 35.0_xp/384.0_xp
+    b_E(2) = 0._xp
+    b_E(3) = 500.0_xp/1113.0_xp
+    b_E(4) = 125.0_xp/192.0_xp
+    b_E(5) = -2187.0_xp/6784.0_xp
+    b_E(6) = 11.0_xp/84.0_xp
+    b_E(7) = 0._xp
   END SUBROUTINE DOPRI5
 
 END MODULE time_integration
diff --git a/src/utility_mod.F90 b/src/utility_mod.F90
index 601b6b7f..b8544848 100644
--- a/src/utility_mod.F90
+++ b/src/utility_mod.F90
@@ -6,7 +6,7 @@ CONTAINS
   FUNCTION is_nan(x,str) RESULT(isn)
     USE basic,            ONLY: cstep
     USE time_integration, ONLY: updatetlevel
-    USE prec_const,       ONLY: dp, stdout
+    USE prec_const,       ONLY: xp, stdout
     IMPLICIT NONE
 
     real, INTENT(IN) :: x
@@ -25,7 +25,7 @@ CONTAINS
 
 
   FUNCTION is_inf(x,str) RESULT(isi)
-    USE prec_const,       ONLY: dp, stdout
+    USE prec_const,       ONLY: xp, stdout
     IMPLICIT NONE
 
     real, INTENT(IN) :: x
@@ -44,17 +44,17 @@ CONTAINS
   END FUNCTION is_inf
 
   ! FUNCTION checkfield(n1,n2,n3,field,str) RESULT(mlend)
-  !   use prec_const, ONLY: dp
+  !   use prec_const, ONLY: xp
   !   IMPLICIT NONE
   !   !! BUG found (or feature?)
   !   ! if one put the commented first line (commented) instead of the second one,
   !   ! no error will be risen by the compiler even if the rank of the array is not matching (should be 3D!)
-  !   ! COMPLEX(dp), DIMENSION(ikys:ikye,ikxs:ikxe), INTENT(IN) :: field
+  !   ! COMPLEX(xp), DIMENSION(ikys:ikye,ikxs:ikxe), INTENT(IN) :: field
   !   INTEGER, INTENT(in) :: n1,n2,n3
-  !   COMPLEX(dp), DIMENSION(n1,n2,n3), INTENT(IN) :: field
+  !   COMPLEX(xp), DIMENSION(n1,n2,n3), INTENT(IN) :: field
   !   CHARACTER(LEN=*), INTENT(IN) :: str
   !   LOGICAL :: mlend
-  !   COMPLEX(dp) :: sumfield
+  !   COMPLEX(xp) :: sumfield
 
   !   sumfield=SUM(field)
 
@@ -63,9 +63,9 @@ CONTAINS
   ! END FUNCTION checkfield
 
   ! FUNCTION checkelem(elem,str) RESULT(mlend)
-  !   use prec_const, ONLY: dp
+  !   use prec_const, ONLY: xp
   !   IMPLICIT NONE
-  !   COMPLEX(dp), INTENT(IN) :: elem
+  !   COMPLEX(xp), INTENT(IN) :: elem
   !   CHARACTER(LEN=*), INTENT(IN) :: str
   !   LOGICAL :: mlend
 
diff --git a/wk/fast_analysis.m b/wk/fast_analysis.m
index fdd59170..34d685b3 100644
--- a/wk/fast_analysis.m
+++ b/wk/fast_analysis.m
@@ -5,8 +5,13 @@ PARTITION  = '/misc/gyacomo23_outputs/';
 
 %% CBC 
 % resdir = 'paper_2_GYAC23/CBC/7x4x192x96x32_nu_0.05_muxy_0.5_muz_0.2';
-resdir = 'paper_2_GYAC23/CBC/7x4x192x96x32_nu_0.05_muxy_1.0_muz_1.0;'
+% resdir = 'paper_2_GYAC23/CBC/7x4x192x96x32_nu_0.05_muxy_1.0_muz_1.0';
+% resdir = 'paper_2_GYAC23/CBC/7x4x192x96x32_nu_0.05_muxy_1.0_muz_2.0';
+% resdir = 'paper_2_GYAC23/CBC/Full_NL_7x4x192x96x32_nu_0.05_muxy_1.0_muz_2.0';
 
+%% tests
+resdir = 'paper_2_GYAC23/precision_study/5x3x128x64x24';
+% resdir = 'paper_2_GYAC23/precision_study/5x3x128x64x24_Lx_180';
 %%
 J0 = 00; J1 = 10;
 
@@ -28,6 +33,7 @@ options.INTERP   = 0;
 options.RESOLUTION = 256;
 fig = plot_radial_transport_and_spacetime(data,options);
 
+if 0
 %% MOVIES %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 % Options
 options.INTERP    = 0;
@@ -40,7 +46,7 @@ options.NAME      = '\phi';
 % options.NAME      = 'Q_x';
 % options.NAME      = 'n_i';
 % options.NAME      = 'n_i-n_e';
-options.PLAN      = 'xz';
+options.PLAN      = 'xy';
 % options.NAME      = 'f_i';
 % options.PLAN      = 'sx';
 options.COMP      = 'avg';
@@ -51,3 +57,4 @@ data.EPS          = 0.1;
 data.a = data.EPS * 2000;
 options.RESOLUTION = 256;
 create_film(data,options,'.gif')
+end
-- 
GitLab