diff --git a/Makefile b/Makefile
index 9ffc00138187197da896b0578017acbbdb3d00ce..215e47f28dadaab505b29a145fbb8972028e4649 100644
--- a/Makefile
+++ b/Makefile
@@ -6,14 +6,14 @@ all: dp
 
 # Double precision version
 dp: F90 = mpif90
-dp: F90FLAGS = -DNOLAPACK -O3 -xHOST
+dp: F90FLAGS = -O3 -xHOST
 dp: EXEC = $(BINDIR)/gyacomo23_dp
 dp: dirs src/srcinfo.h
 dp: compile
 
 # Single precision version
 sp: F90 = mpif90
-sp: F90FLAGS = -DNOLAPACK -DSINGLE_PRECISION -O3 -xHOST
+sp: F90FLAGS = -DSINGLE_PRECISION -O3 -xHOST
 sp: EXEC = $(BINDIR)/gyacomo23_sp
 sp: dirs src/srcinfo.h
 sp: compile
@@ -41,21 +41,21 @@ debug: compile
 
 # For compiling on marconi
 marconi: F90 = mpiifort
-marconi: F90FLAGS = -DNOLAPACK -O3 -xHOST
+marconi: F90FLAGS = -O3 -xHOST
 marconi: EXEC = $(BINDIR)/gyacomo23_dp
 marconi: dirs src/srcinfo.h
 marconi: compile
 
 # For compiling on marconi in single prec.
 marconi_sp: F90 = mpiifort
-marconi_sp: F90FLAGS = -DNOLAPACK -DSINGLE_PRECISION -O3 -xHOST
+marconi_sp: F90FLAGS = -DSINGLE_PRECISION -O3 -xHOST
 marconi_sp: EXEC = $(BINDIR)/gyacomo23_sp
 marconi_sp: dirs src/srcinfo.h
 marconi_sp: compile
 
 # For compiling on marconi in single prec.
 marconi_dbg: F90 = mpiifort
-marconi_dbg: F90FLAGS = -DNOLAPACK -DSINGLE_PRECISION -g -traceback -ftrapuv -warn all -debug all
+marconi_dbg: F90FLAGS = -DSINGLE_PRECISION -g -traceback -ftrapuv -warn all -debug all
 marconi_dbg: EXEC = $(BINDIR)/gyacomo23_dbg
 marconi_dbg: dirs src/srcinfo.h
 marconi_dbg: compile
@@ -93,8 +93,7 @@ gdebug: compile
 
 # test SVD
 test_svd: F90 = mpif90
-# test_svd: F90FLAGS = -DTEST_SVD -g -traceback -ftrapuv -warn all -debug all
-test_svd: F90FLAGS = -DTEST_SVD -O3
+test_svd: F90FLAGS = -DLAPACK -DTEST_SVD -O3
 test_svd: EXEC = $(BINDIR)/gyacomo23_test_svd
 test_svd: dirs src/srcinfo.h
 test_svd: compile
@@ -133,7 +132,8 @@ $(OBJDIR)/moments_eq_rhs_mod.o $(OBJDIR)/numerics_mod.o $(OBJDIR)/parallel_mod.o
 $(OBJDIR)/ppexit.o $(OBJDIR)/prec_const_mod.o \
 $(OBJDIR)/processing_mod.o $(OBJDIR)/readinputs.o $(OBJDIR)/restarts_mod.o \
 $(OBJDIR)/solve_EM_fields.o $(OBJDIR)/species_mod.o $(OBJDIR)/stepon.o $(OBJDIR)/tesend.o \
-$(OBJDIR)/time_integration_mod.o $(OBJDIR)/utility_mod.o $(OBJDIR)/CLA_mod.o
+$(OBJDIR)/time_integration_mod.o $(OBJDIR)/utility_mod.o $(OBJDIR)/units_mod.o \
+$(OBJDIR)/CLA_mod.o
 
 # Add finally the definition of the Gyacomo directory
 # (helps if the code needs to load a file as for the init Ricci)
@@ -206,7 +206,7 @@ $(OBJDIR)/time_integration_mod.o $(OBJDIR)/utility_mod.o $(OBJDIR)/CLA_mod.o
  	 $(OBJDIR)/prec_const_mod.o $(OBJDIR)/processing_mod.o $(OBJDIR)/array_mod.o \
      $(OBJDIR)/basic_mod.o $(OBJDIR)/fields_mod.o \
 	 $(OBJDIR)/grid_mod.o $(OBJDIR)/initial_mod.o $(OBJDIR)/model_mod.o \
-	 $(OBJDIR)/time_integration_mod.o $(OBJDIR)/parallel_mod.o
+	 $(OBJDIR)/time_integration_mod.o $(OBJDIR)/parallel_mod.o $(OBJDIR)/units_mod.o
 	$(F90) -c $(F90FLAGS) $(FPPFLAGS) $(EXTMOD) $(EXTINC) src/diagnostics_mod.F90 -o $@
 
  $(OBJDIR)/endrun.o : src/endrun.F90 \
@@ -307,7 +307,8 @@ $(OBJDIR)/time_integration_mod.o $(OBJDIR)/utility_mod.o $(OBJDIR)/CLA_mod.o
 
  $(OBJDIR)/readinputs.o : src/readinputs.F90  \
    $(OBJDIR)/diagnostics_mod.o $(OBJDIR)/initial_mod.o $(OBJDIR)/model_mod.o  \
-  $(OBJDIR)/prec_const_mod.o $(OBJDIR)/grid_mod.o $(OBJDIR)/time_integration_mod.o
+	 $(OBJDIR)/prec_const_mod.o $(OBJDIR)/grid_mod.o $(OBJDIR)/time_integration_mod.o \
+  	 $(OBJDIR)/units_mod.o
 	$(F90) -c $(F90FLAGS) $(FPPFLAGS) $(EXTMOD) $(EXTINC) src/readinputs.F90 -o $@
 
  $(OBJDIR)/restarts_mod.o : src/restarts_mod.F90   \
@@ -327,7 +328,7 @@ $(OBJDIR)/time_integration_mod.o $(OBJDIR)/utility_mod.o $(OBJDIR)/CLA_mod.o
 
  $(OBJDIR)/stepon.o : src/stepon.F90 \
  	 $(OBJDIR)/initial_mod.o $(OBJDIR)/prec_const_mod.o $(OBJDIR)/advance_field_mod.o \
-   $(OBJDIR)/basic_mod.o $(OBJDIR)/nonlinear_mod.o $(OBJDIR)/grid_mod.o \
+     $(OBJDIR)/basic_mod.o $(OBJDIR)/nonlinear_mod.o $(OBJDIR)/grid_mod.o \
 	 $(OBJDIR)/array_mod.o $(OBJDIR)/numerics_mod.o $(OBJDIR)/fields_mod.o \
 	 $(OBJDIR)/ghosts_mod.o $(OBJDIR)/moments_eq_rhs_mod.o $(OBJDIR)/solve_EM_fields.o\
 	 $(OBJDIR)/utility_mod.o $(OBJDIR)/model_mod.o $(OBJDIR)/time_integration_mod.o \
@@ -346,6 +347,10 @@ $(OBJDIR)/time_integration_mod.o $(OBJDIR)/utility_mod.o $(OBJDIR)/CLA_mod.o
    $(OBJDIR)/basic_mod.o $(OBJDIR)/prec_const_mod.o $(OBJDIR)/time_integration_mod.o
 	$(F90) -c $(F90FLAGS) $(FPPFLAGS) $(EXTMOD) $(EXTINC) src/utility_mod.F90 -o $@
 
+ $(OBJDIR)/units_mod.o : src/units_mod.F90  \
+	$(OBJDIR)/basic_mod.o $(OBJDIR)/prec_const_mod.o $(OBJDIR)/geometry_mod.o 
+	$(F90) -c $(F90FLAGS) $(FPPFLAGS) $(EXTMOD) $(EXTINC) src/units_mod.F90 -o $@
+
  $(OBJDIR)/CLA_mod.o : src/CLA_mod.F90  \
    $(OBJDIR)/basic_mod.o $(OBJDIR)/prec_const_mod.o $(OBJDIR)/fields_mod.o $(OBJDIR)/grid_mod.o \
    $(OBJDIR)/time_integration_mod.o
diff --git a/basic_scripts/parameters_CBC.90 b/basic_scripts/parameters_CBC.90
index 288b95aa7d02a6fc1322229f11caf49e9fa6c69b..713e5878889ce49fb834d543eac8699f0497ac0d 100644
--- a/basic_scripts/parameters_CBC.90
+++ b/basic_scripts/parameters_CBC.90
@@ -84,3 +84,13 @@
 &TIME_INTEGRATION
   numerical_scheme = 'RK4' ! numerical scheme for time integration (RK2,3,4 etc.)
 /
+
+&UNITS
+n_ref = 5.0 ! Electron density  (x1e19) [m-3]
+T_ref = 2.5 ! Electron temperature      [keV]
+R_ref = 1.7 ! Major Radius              [m]
+B_ref = 1.5 ! Magnetic field intensity  [T]
+m_ref = 1   ! Ion mass                  [proton mass]
+q_ref = 1   ! Ion charge                [elementary charge]
+WRITE_MW = .false. ! Write in std the power output in MW
+/
diff --git a/src/diagnostics_mod.F90 b/src/diagnostics_mod.F90
index cff27d397afc3bf759cb7ca8f57f49703ca7c335..1e8bec5c05c15cfa4fdd6f6a6c061e40bad7f305 100644
--- a/src/diagnostics_mod.F90
+++ b/src/diagnostics_mod.F90
@@ -71,6 +71,7 @@ CONTAINS
     USE initial,         ONLY: initial_outputinputs
     USE time_integration,ONLY: time_integration_outputinputs
     USE parallel,        ONLY: parallel_outputinputs
+    USE units,           ONLY: units_outputinputs
     USE futils,          ONLY: creatf, creatg, creatd, attach, putfile
     IMPLICIT NONE
     !input
@@ -114,6 +115,7 @@ CONTAINS
     CALL          initial_outputinputs(fid)
     CALL time_integration_outputinputs(fid)
     CALL         parallel_outputinputs(fid)
+    CALL            units_outputinputs(fid)
     !  Save STDIN (input file) of this run
     IF(jobnum .LE. 99) THEN
        WRITE(str,'(a,i2.2)') "/files/STDIN.",jobnum
@@ -128,6 +130,7 @@ CONTAINS
     USE basic,           ONLY: lu_in, chrono_runt, cstep, time, display_h_min_s
     USE processing,      ONLY: pflux_x, hflux_x
     USE parallel,        ONLY: my_id
+    USE units,           ONLY: WRITE_MW, pow_ref
     IMPLICIT NONE
     INTEGER, INTENT(in) :: kstep
     !! Basic diagnose loop for reading input file, displaying advancement and ending
@@ -150,14 +153,25 @@ CONTAINS
   
     ! Terminal info
     IF ((kstep .GE. 0) .AND. (MOD(cstep, nsave_0d) == 0) .AND. (my_id .EQ. 0)) THEN
-      if(SIZE(pflux_x) .GT. 1) THEN
-        WRITE(*,"(A,F8.2,A8,G10.3,A8,G10.3,A8,G10.3,A8,G10.3,A)")&
-        '|t = ', time,'| Pxi = ',pflux_x(1),'| Qxi = ',hflux_x(1),'| Pxe = ',pflux_x(2),'| Qxe = ',hflux_x(2),'|'
-      else
-        WRITE(*,"(A,F8.2,A8,G10.3,A8,G10.3,A)")&
-        '|t = ', time,'| Px  = ',pflux_x(1),'| Qx  = ',hflux_x(1),'|'
-      endif
+      IF (WRITE_MW) THEN ! Display MW
+        if(SIZE(pflux_x) .GT. 1) THEN
+          WRITE(*,"(A,F8.2,A8,G10.3,A14,G10.3,A7)")&
+          '|t = ', time,'| Qxi = ',hflux_x(1)*pow_ref,' [MW] | Qxe = ',hflux_x(2)*pow_Ref,' [MW] |'
+        else
+          WRITE(*,"(A,F8.2,A8,G10.3,A8,G10.3,A)")&
+          '|t = ', time,'| Qxi = ',hflux_x(1)*pow_ref,' [MW]|'
+        endif
+      ELSE ! Display normalized code values
+          if(SIZE(pflux_x) .GT. 1) THEN
+            WRITE(*,"(A,F8.2,A8,G10.3,A8,G10.3,A8,G10.3,A8,G10.3,A)")&
+            '|t = ', time,'| Pxi = ',pflux_x(1),'| Qxi = ',hflux_x(1),'| Pxe = ',pflux_x(2),'| Qxe = ',hflux_x(2),'|'
+          else
+            WRITE(*,"(A,F8.2,A8,G10.3,A8,G10.3,A)")&
+            '|t = ', time,'| Pxi = ',pflux_x(1),'| Qxi = ',hflux_x(1),'|'
+          endif
+      ENDIF
     ENDIF
+
   END SUBROUTINE diagnose
   
   SUBROUTINE diagnose_full(kstep)
diff --git a/src/readinputs.F90 b/src/readinputs.F90
index b6e4bac0ccdd32de5d25238bb336eee68a325734..b5522271179e0f73700780ebcac52ab8a44a7619 100644
--- a/src/readinputs.F90
+++ b/src/readinputs.F90
@@ -1,14 +1,15 @@
 SUBROUTINE readinputs
   ! Additional data specific for a new run
-  USE grid,             ONLY: grid_readinputs
-  USE diagnostics,      ONLY: diag_readinputs
+  USE closure,          ONLY: closure_readinputs
   USE collision,        ONLY: collision_readinputs
+  USE diagnostics,      ONLY: diag_readinputs
+  USE geometry,         ONLY: geometry_readinputs
+  USE grid,             ONLY: grid_readinputs
+  USE initial,          ONLY: initial_readinputs
   USE model,            ONLY: model_readinputs
   USE species,          ONLY: species_readinputs
-  USE initial,          ONLY: initial_readinputs
   USE time_integration, ONLY: time_integration_readinputs
-  USE geometry,         ONLY: geometry_readinputs
-  USE closure,          ONLY: closure_readinputs
+  USE units,            ONLY: units_readinputs
 
   USE prec_const
   IMPLICIT NONE
@@ -44,4 +45,7 @@ SUBROUTINE readinputs
   ! Load parameters for time integration from input file
   CALL time_integration_readinputs
 
+  ! Load reference profile data in phys. units
+  CALL units_readinputs
+
 END SUBROUTINE readinputs
diff --git a/src/units_mod.F90 b/src/units_mod.F90
new file mode 100644
index 0000000000000000000000000000000000000000..bad4652802ee91d3e30acfd74f22a198d774eb11
--- /dev/null
+++ b/src/units_mod.F90
@@ -0,0 +1,98 @@
+MODULE units
+
+    USE prec_const
+  
+    IMPLICIT NONE
+    PRIVATE
+    !! Define the reference values for transforming simulation data into physical units
+    !  The default value, commented here, are corresponding to the #186473 DIII-D discharge at rho=0.95.
+    REAL(xp), PUBLIC, PROTECTED :: n_ref = -1!25      ! density     (electrons) [1e19m-3]
+    REAL(xp), PUBLIC, PROTECTED :: T_ref = -1!0.3     ! temperature (electrons) [keV]
+    REAL(xp), PUBLIC, PROTECTED :: R_ref = -1!1.7     ! length   (major radius) [m]     
+    REAL(xp), PUBLIC, PROTECTED :: B_ref = -1!2.0     ! magnetic field          [T]
+    REAL(xp), PUBLIC, PROTECTED :: m_ref = -1!1       ! mass                    [nucleid mass]
+    REAL(xp), PUBLIC, PROTECTED :: q_ref = -1!1       ! charge                  [elementary charge]
+    ! Input flag to write heat flux in MW in the std terminal
+    LOGICAL,  PUBLIC, PROTECTED :: WRITE_MW = .false.
+    ! Physical constants
+    REAL(xp), PUBLIC, PROTECTED :: kB    = 1.4e-23 ! Boltzmann constant  [J/K]
+    REAL(xp), PUBLIC, PROTECTED :: mp    = 1.7e-27 ! proton mass at rest [kg]
+    REAL(xp), PUBLIC, PROTECTED :: ec    = 1.6e-19 ! elementary charge   [C]
+
+    ! Derived normalization quantities
+    REAL(xp), PUBLIC, PROTECTED :: c_s0     ! sound speed             [m/s]
+    REAL(xp), PUBLIC, PROTECTED :: r_s0     ! sound Larmor radius     [m/s]
+    REAL(xp), PUBLIC, PROTECTED :: w_ci     ! ion cyclotron frequency [1/s]
+    REAL(xp), PUBLIC, PROTECTED :: A_fs     ! flux surface area (torus approx) [m2]
+
+    ! Physical unit converters
+    REAL(xp), PUBLIC, PROTECTED :: hf_ref   ! heat flux     [W/m2]
+    REAL(xp), PUBLIC, PROTECTED :: pf_ref   ! particle flux [1/s/m2]
+    REAL(xp), PUBLIC, PROTECTED :: mf_ref   ! momentum flux [kg (m/s)2]
+    REAL(xp), PUBLIC, PROTECTED :: ph_ref   ! voltage       [V]
+    REAL(xp), PUBLIC, PROTECTED :: pow_ref  ! power         [MW]
+
+    PUBLIC :: units_readinputs, units_outputinputs
+
+  CONTAINS
+  
+    SUBROUTINE units_readinputs
+      ! Read the input parameters
+      USE basic,      ONLY: lu_in
+      USE geometry,   ONLY: eps, geom
+      USE prec_const, ONLY: xp, pi
+      IMPLICIT NONE
+      REAL(xp) :: T0,n0, p0, m0, q0
+      INTEGER  :: fu
+      ! Define namelist to read
+      NAMELIST /UNITS/ n_ref, T_ref, R_ref, B_ref, m_ref, q_ref, WRITE_MW
+      ! Read namelist in input file
+      READ(unit=lu_in,nml=units,iostat=fu)
+      ! Convert in mksa
+      T0      = ec*(1000*T_ref)/kB                ! temperature [K]
+      n0      = n_ref*1e19                        ! density     [m-3]
+      m0      = m_ref*mp                          ! mass        [kg]
+      q0      = q_ref*ec                          ! charge      [C]
+      ! Setup derived normalization quantities
+      c_s0  = sqrt(kB*T0/m0)                      ! Sound speed                       [m/s]
+      w_ci  = q0*B_ref/m0                         ! Ion cyclotron frequ.              [Hz]
+      r_s0  = c_s0/w_ci                           ! Ion Larmor radius                 [m]
+      SELECT CASE(geom)
+        CASE('z-pinch','Z-pinch','zpinch','Zpinch')
+            A_fs  = 2*pi*R_ref*R_ref              ! Area of a cylinder of height R_ref [m2]
+        CASE DEFAULT
+            A_fs  = 4*pi**2*eps*R_ref**2          ! Area of the toroidal flux surface [m2]
+      END SELECT
+      ! Setup physical unit converters
+      p0      = n0*kB*T0                          ! pressure [Pa] 
+      hf_ref  = p0*c_s0*r_s0**2/R_ref**2          ! Gyrobohm heat flux [W/m2]
+      pow_ref = hf_ref*A_fs/1e6                   ! Gyrobohm power [MW]
+      pf_ref  = n0*c_s0*r_s0**2/R_ref**2          ! Particle flux [1/s/m2]
+      mf_ref  = n0*m0*c_s0**2*r_s0**2/R_ref**2    ! Momentum flux [kg (m/s)2]
+    END SUBROUTINE units_readinputs
+  
+  
+    SUBROUTINE units_outputinputs(fid)
+      ! Write the input parameters to the results_xx.h5 file
+      USE futils, ONLY: attach, creatd
+      IMPLICIT NONE
+      INTEGER, INTENT(in) :: fid
+      CHARACTER(len=256)  :: str
+      WRITE(str,'(a)') '/data/input/units'
+      CALL creatd(fid, 0,(/0/),TRIM(str),'Units Input')
+      CALL attach(fid, TRIM(str), "density          (electrons)",   n_ref)
+      CALL attach(fid, TRIM(str), "temperature      (electrons)",   T_ref)
+      CALL attach(fid, TRIM(str), "length           (major radius)",R_ref)
+      CALL attach(fid, TRIM(str), "magnetic field   (electrons)",   B_ref)
+      CALL attach(fid, TRIM(str), "mass             (proton)",      m_ref)
+      CALL attach(fid, TRIM(str), "charge           (elementary)",  q_ref)
+      ! Write the mksa converter if units input are provided
+      if ( (hf_ref > 0) .AND. (pf_ref > 0) .AND. (mf_ref > 0)) THEN
+        CALL attach(fid, TRIM(str), "heat flux        (gyroBohm)",    hf_ref)
+        CALL attach(fid, TRIM(str), "power            (gyroBohm)",    pow_ref)
+        CALL attach(fid, TRIM(str), "particle flux    (gyroBohm)",    pf_ref)
+        CALL attach(fid, TRIM(str), "momentum flux    (gyroBohm)",    mf_ref)
+      ENDIF
+    END SUBROUTINE units_outputinputs
+
+END MODULE units
\ No newline at end of file