From 8495c8aa9d9c3a0abe1e888b22af51da33d2e74f Mon Sep 17 00:00:00 2001
From: Philippe WAUTELET <philippe.wautelet@aero.obs-mip.fr>
Date: Thu, 20 Apr 2023 11:25:41 +0200
Subject: [PATCH] Philippe 20/04/2023: allocate and compute surface fields for
 flyers, aircrafts, balloons and DIAG only when useful

---
 src/MNH/aircraft_balloon_evol.f90      |   4 +-
 src/MNH/default_desfmn.f90             |   4 +-
 src/MNH/end_diag_in_run.f90            |   4 +-
 src/MNH/ground_paramn.f90              | 317 +++++++++++++------------
 src/MNH/ini_diag_in_run.f90            | 111 ++++++---
 src/MNH/modd_allprofilern.f90          |  10 +-
 src/MNH/modd_allstationn.f90           |  10 +-
 src/MNH/modn_profilern.f90             |  14 +-
 src/MNH/modn_stationn.f90              |   4 +-
 src/MNH/profilern.f90                  |   7 +-
 src/MNH/read_desfmn.f90                |   4 +-
 src/MNH/read_exsegn.f90                |   4 +-
 src/MNH/stationn.f90                   |   4 +-
 src/MNH/statprof_tools.f90             |  33 +--
 src/MNH/write_aircraft_balloon.f90     |   7 +-
 src/MNH/write_desfmn.f90               |   4 +-
 src/MNH/write_lfifm1_for_diag_supp.f90 |   2 +
 src/MNH/write_profilern.f90            |  19 +-
 src/MNH/write_stationn.f90             |  16 +-
 19 files changed, 328 insertions(+), 250 deletions(-)

diff --git a/src/MNH/aircraft_balloon_evol.f90 b/src/MNH/aircraft_balloon_evol.f90
index aae1d6092..1d03d38a3 100644
--- a/src/MNH/aircraft_balloon_evol.f90
+++ b/src/MNH/aircraft_balloon_evol.f90
@@ -921,7 +921,7 @@ END SUBROUTINE FLYER_COMPUTE_INTERP_COEFF_HOR_STAGE2
 SUBROUTINE FLYER_RECORD_DATA( )
 
 USE MODD_CST,              ONLY: XCPD, XLAM_CRAD, XLIGHTSPEED, XP00, XPI, XRD, XRHOLW, XTT
-USE MODD_DIAG_IN_RUN,      ONLY: LDIAG_IN_RUN, XCURRENT_TKE_DISS
+USE MODD_DIAG_IN_RUN,      ONLY: XCURRENT_TKE_DISS
 USE MODD_GRID,             ONLY: XBETA, XLON0, XRPK
 USE MODD_NSV,              ONLY: NSV_LIMA_NC, NSV_LIMA_NR, NSV_LIMA_NI
 USE MODD_PARAMETERS,       ONLY: JPVEXT
@@ -1349,7 +1349,7 @@ END IF ! end LOOP ICE3
 TPFLYER%XWZ  (ISTORE,:) = FLYER_INTERPZ(ZWM(:,:,:))
 IF (SIZE(PTKE)>0) TPFLYER%XTKE  (ISTORE)    = FLYER_INTERP(PTKE)
 IF (SIZE(PTS) >0) TPFLYER%XTSRAD(ISTORE)    = FLYER_INTERP_2D(PTS)
-IF (LDIAG_IN_RUN) TPFLYER%XTKE_DISS(ISTORE) = FLYER_INTERP(XCURRENT_TKE_DISS)
+TPFLYER%XTKE_DISS(ISTORE) = FLYER_INTERP(XCURRENT_TKE_DISS)
 TPFLYER%XZS(ISTORE)  = FLYER_INTERP_2D(PZ(:,:,1+JPVEXT))
 TPFLYER%XTHW_FLUX(ISTORE) = FLYER_INTERP(ZTHW_FLUX)
 TPFLYER%XRCW_FLUX(ISTORE) = FLYER_INTERP(ZRCW_FLUX)
diff --git a/src/MNH/default_desfmn.f90 b/src/MNH/default_desfmn.f90
index 0b4de6d6f..6678d6e26 100644
--- a/src/MNH/default_desfmn.f90
+++ b/src/MNH/default_desfmn.f90
@@ -613,7 +613,7 @@ XLAT_PROF(:)  = XUNDEF
 XLON_PROF(:)  = XUNDEF
 CNAME_PROF(:) = ''
 CFILE_PROF    = 'NO_INPUT_CSV'
-! LDIAG_SURFRAD = .TRUE.
+LDIAG_SURFRAD_PROF = .TRUE.
 !------------------------------------------------------------------------------
 !*      10.f   SET DEFAULT VALUES FOR MODD_ALLSTATION_n :
 !             ----------------------------------
@@ -627,7 +627,7 @@ XLAT_STAT(:)  = XUNDEF
 XLON_STAT(:)  = XUNDEF
 CNAME_STAT(:) = ''
 CFILE_STAT    = 'NO_INPUT_CSV'
-LDIAG_SURFRAD = .TRUE.
+LDIAG_SURFRAD_STAT = .TRUE.
 !
 !-------------------------------------------------------------------------------
 !
diff --git a/src/MNH/end_diag_in_run.f90 b/src/MNH/end_diag_in_run.f90
index 6b48ed8a3..2fd13009a 100644
--- a/src/MNH/end_diag_in_run.f90
+++ b/src/MNH/end_diag_in_run.f90
@@ -78,8 +78,8 @@ DEALLOCATE(XCURRENT_LWD   )! incoming longwave at the surface
 DEALLOCATE(XCURRENT_LWU   )! outcoming longwave at the surface
 DEALLOCATE(XCURRENT_SWD   )! incoming Shortwave at the surface
 DEALLOCATE(XCURRENT_SWU   )! outcoming Shortwave at the surface
-IF(ALLOCATED(XCURRENT_SWDIR)) DEALLOCATE(XCURRENT_SWDIR )! incoming Shortwave direct at the surface
-IF(ALLOCATED(XCURRENT_SWDIFF))DEALLOCATE(XCURRENT_SWDIFF)! incoming Shortwave diffuse at the surface
+DEALLOCATE(XCURRENT_SWDIR )! incoming Shortwave direct at the surface
+DEALLOCATE(XCURRENT_SWDIFF)! incoming Shortwave diffuse at the surface
 DEALLOCATE(XCURRENT_T2M   )! temperature at 2m
 DEALLOCATE(XCURRENT_Q2M   )! humidity at 2m
 DEALLOCATE(XCURRENT_HU2M  )! humidity at 2m
diff --git a/src/MNH/ground_paramn.f90 b/src/MNH/ground_paramn.f90
index 449a890f5..37d6dcbb3 100644
--- a/src/MNH/ground_paramn.f90
+++ b/src/MNH/ground_paramn.f90
@@ -127,95 +127,92 @@ END MODULE MODI_GROUND_PARAM_n
 !*       0.     DECLARATIONS
 !               ------------
 !
-! 
+USE MODD_ALLPROFILER_n,     ONLY: LDIAG_SURFRAD_PROF
+USE MODD_ALLSTATION_n,      ONLY: LDIAG_SURFRAD_STAT
+USE MODD_ARGSLIST_ll,       ONLY: LIST_ll
+USE MODD_BLOWSNOW,          ONLY: LBLOWSNOW, NBLOWSNOW_2D, YPBLOWSNOW_2D
+USE MODD_BLOWSNOW_n,        ONLY: XRSNWCANOS
+USE MODD_BUDGET,            ONLY: LBUDGET_TH, LBUDGET_RV, NBUDGET_RV, NBUDGET_TH, TBUDGETS
+USE MODD_CH_AEROSOL,        ONLY: LORILAM
+USE MODD_CH_FLX_n,          ONLY: XCHFLX
+USE MODD_CH_MNHC_n,         ONLY: LUSECHEM
+USE MODD_CONF,              ONLY: CPROGRAM, LCARTESIAN, NHALO
+USE MODD_CONF_n,            ONLY: NRR
+USE MODD_CST,               ONLY: XP00, XCPD, XRD, XRV, XRHOLW, XDAY, XPI, XMD, XAVOGADRO
+USE MODD_CSTS_DUST,         ONLY: XMOLARWEIGHT_DUST
+USE MODD_CSTS_SALT,         ONLY: XMOLARWEIGHT_SALT
+USE MODD_DEEP_CONVECTION_n, ONLY: XPRCONV, XPRSCONV
+USE MODD_DIAG_FLAG,         ONLY: LCHEMDIAG
+USE MODD_DIAG_IN_RUN
+USE MODD_DIM_n,             ONLY: NKMAX
+USE MODD_DIMPHYEX,          ONLY: DIMPHYEX_t
+USE MODD_DUST,              ONLY: LDUST 
+USE MODD_DYN_n,             ONLY: XTSTEP
+USE MODD_FIELD_n,           ONLY: XUT, XVT, XWT, XTHT, XRT, XPABST, XSVT, XTKET, XZWS, XRTHS, XRRS
+USE MODD_FIRE_n,            ONLY: XLSPHI, XBMAP, XFMR0, XFMRFA, XFMWF0, XFMR00, XFMIGNITION, XFMFUELTYPE,    &
+                                  XFIRETAU, XFLUXPARAMH, XFLUXPARAMW, XFIRERW, XFMASE, XFMAWC, XFMWALKIG,    &
+                                  XFMFLUXHDH, XFMFLUXHDW, XFMHWS, XFMWINDU, XFMWINDV, XFMWINDW, XGRADLSPHIX, &
+                                  XGRADLSPHIY, XFIREWIND, XFMGRADOROX, XFMGRADOROY
+USE MODD_GRID,              ONLY: XLON0, XRPK, XBETA
+USE MODD_GRID_n,            ONLY: XLON, XZZ, XDIRCOSXW, XDIRCOSYW, XDIRCOSZW, &
+                                  XCOSSLOPE, XSINSLOPE, XZS
+USE MODD_IO,                ONLY: TFILEDATA
+USE MODD_LUNIT_n,           ONLY: TLUOUT
+USE MODD_METRICS_n,         ONLY: XDXX, XDYY, XDZZ
+USE MODD_MNH_SURFEX_n,      ONLY: YSURF_CUR
+USE MODD_NSV,               ONLY: CSV, NSV, NSV_AERBEG, NSV_AEREND, NSV_CHEMBEG, NSV_CHEMEND, NSV_DSTBEG, NSV_DSTEND, &
+                                  NSV_SLTBEG, NSV_SLTEND, NSV_SNWBEG, NSV_SNWEND
+USE MODD_PARAM_C2R2,        ONLY: LSEDC
+USE MODD_PARAMETERS,        ONLY: JPVEXT
+USE MODD_PARAM_ICE,         ONLY: LSEDIC
+USE MODD_PARAM_LIMA,        ONLY: MSEDC=>LSEDC
+USE MODD_PARAM_n,           ONLY: CDCONV, CCLOUD, CRAD
+USE MODD_PRECIP_n,          ONLY: XINPRC, XINPRR, XINPRS, XINPRG, XINPRH
+USE MODD_PRECISION,         ONLY: MNHTIME
+USE MODD_PROFILER_n,        ONLY: LPROFILER
+USE MODD_RADIATIONS_n,      ONLY: XFLALWD, XCCO2, XTSIDER, &
+                                  XSW_BANDS, XDIRSRFSWD, XSCAFLASWD, &
+                                  XZENITH, XAZIM, XAER, XSWU, XLWU
+USE MODD_REF_n,             ONLY: XEXNREF, XRHODREF, XRHODJ
+USE MODD_SALT,              ONLY: LSALT
+USE MODD_STATION_n,         ONLY: LSTATION
+USE MODD_SURF_PAR,          ONLY: XUNDEF_SFX => XUNDEF
+USE MODD_TIME,              ONLY: TDTSEG
+USE MODD_TIME_n,            ONLY: TDTCUR
 #ifdef CPLOASIS
-USE MODI_GET_HALO
-USE MODI_MNH_OASIS_RECV
-USE MODI_MNH_OASIS_SEND
-USE MODD_SFX_OASIS, ONLY : LOASIS
-USE MODD_DYN,       ONLY : XSEGLEN
-USE MODD_DYN_n,     ONLY : DYN_MODEL
+USE MODD_SFX_OASIS,         ONLY: LOASIS
+USE MODD_DYN,               ONLY: XSEGLEN
+USE MODD_DYN_n,             ONLY: DYN_MODEL
 #endif
-!
-USE MODD_LUNIT_n, ONLY: TLUOUT
-USE MODD_BUDGET,  ONLY: LBUDGET_TH, LBUDGET_RV, NBUDGET_RV, NBUDGET_TH,TBUDGETS
-USE MODE_BUDGET,  ONLY: BUDGET_STORE_INIT, BUDGET_STORE_END
-USE MODD_CST,        ONLY : XP00, XCPD, XRD, XRV,XRHOLW, XDAY, XPI, XLVTT, XMD, XAVOGADRO
-USE MODD_DIMPHYEX,   ONLY : DIMPHYEX_t
-USE MODD_PARAMETERS, ONLY : JPVEXT
-USE MODD_DYN_n,      ONLY : XTSTEP
-USE MODD_CH_MNHC_n,  ONLY : LUSECHEM
-USE MODD_FIELD_n,    ONLY : XUT, XVT, XWT, XTHT, XRT, XPABST, XSVT, XTKET, XZWS, XRTHS, XRRS
-USE MODD_FIRE_n,     ONLY : XLSPHI, XBMAP, XFMR0, XFMRFA, XFMWF0, XFMR00, XFMIGNITION, XFMFUELTYPE,    &
-                            XFIRETAU, XFLUXPARAMH, XFLUXPARAMW, XFIRERW, XFMASE, XFMAWC, XFMWALKIG,    &
-                            XFMFLUXHDH, XFMFLUXHDW, XFMHWS, XFMWINDU, XFMWINDV, XFMWINDW, XGRADLSPHIX, &
-                            XGRADLSPHIY, XFIREWIND, XFMGRADOROX, XFMGRADOROY
-USE MODD_METRICS_n,  ONLY : XDXX, XDYY, XDZZ
-USE MODD_DIM_n,      ONLY : NKMAX
-USE MODD_GRID_n,     ONLY : XLON, XZZ, XDIRCOSXW, XDIRCOSYW, XDIRCOSZW, &
-                            XCOSSLOPE, XSINSLOPE, XZS
-USE MODD_REF_n,      ONLY : XEXNREF, XRHODREF, XRHODJ
-USE MODD_CONF_n,     ONLY : NRR
-USE MODD_PARAM_n,    ONLY : CDCONV,CCLOUD, CRAD
-USE MODD_PRECIP_n,   ONLY : XINPRC, XINPRR, XINPRS, XINPRG, XINPRH
-USE MODD_DEEP_CONVECTION_n, ONLY : XPRCONV, XPRSCONV
-USE MODD_CONF,       ONLY : LCARTESIAN, CPROGRAM
-USE MODD_TIME_n,     ONLY : TDTCUR
-USE MODD_RADIATIONS_n,   ONLY : XFLALWD, XCCO2, XTSIDER, &
-                                XSW_BANDS, XDIRSRFSWD, XSCAFLASWD, &
-                                XZENITH, XAZIM, XAER, XSWU, XLWU
-USE MODD_NSV
-USE MODD_GRID,       ONLY : XLON0, XRPK, XBETA
-USE MODD_PARAM_ICE,  ONLY : LSEDIC
-USE MODD_PARAM_C2R2, ONLY : LSEDC
-USE MODD_DIAG_IN_RUN
-USE MODD_DUST,       ONLY : LDUST 
-USE MODD_SALT,       ONLY : LSALT
-USE MODD_BLOWSNOW
-USE MODD_BLOWSNOW_n
-USE MODD_CH_AEROSOL, ONLY : LORILAM
-USE MODD_CSTS_DUST,  ONLY : XMOLARWEIGHT_DUST
-USE MODD_CSTS_SALT,  ONLY : XMOLARWEIGHT_SALT
-USE MODD_CH_FLX_n, ONLY : XCHFLX
-USE MODD_DIAG_FLAG, ONLY : LCHEMDIAG
-USE MODD_SURF_PAR,   ONLY: XUNDEF_SFX => XUNDEF
-USE MODD_PRECISION,      ONLY: MNHTIME
-!
-USE MODI_NORMAL_INTERPOL
-USE MODE_ROTATE_WIND, ONLY: ROTATE_WIND
-USE MODI_SHUMAN
-USE MODI_MNHGET_SURF_PARAM_n
-USE MODI_COUPLING_SURF_ATM_n
-USE MODI_DIAG_SURF_ATM_n
-USE MODD_MNH_SURFEX_n
-!
-USE MODE_DATETIME
-USE MODE_ll
-USE MODD_ARGSLIST_ll, ONLY : LIST_ll
 #ifdef MNH_FOREFIRE
-!** MODULES FOR FOREFIRE **!
 USE MODD_FOREFIRE
 USE MODD_FOREFIRE_n
-USE MODI_COUPLING_FOREFIRE_n
 #endif
-!
-USE MODD_TIME_n
-USE MODD_TIME
-!
-USE MODD_PARAM_LIMA, ONLY : MSEDC=>LSEDC
-!
-USE MODD_FIRE_n
-USE MODD_FIELD
+
+USE MODE_BUDGET,            ONLY: BUDGET_STORE_INIT, BUDGET_STORE_END
+USE MODE_DATETIME
 USE MODE_FIRE_MODEL
-USE MODD_CONF, ONLY : NVERB, NHALO
-USE MODE_MNH_TIMING, ONLY : SECOND_MNH2
+USE MODE_ll
+USE MODE_MNH_TIMING,       ONLY: SECOND_MNH2
 USE MODE_MSG
-USE MODD_IO,      ONLY: TFILEDATA
+USE MODE_ROTATE_WIND,      ONLY: ROTATE_WIND
+
+USE MODI_COUPLING_SURF_ATM_n
+USE MODI_DIAG_SURF_ATM_n
+USE MODI_MNHGET_SURF_PARAM_n
+USE MODI_NORMAL_INTERPOL
+USE MODI_SHUMAN
+#ifdef CPLOASIS
+USE MODI_GET_HALO
+USE MODI_MNH_OASIS_RECV
+USE MODI_MNH_OASIS_SEND
+#endif
+#ifdef MNH_FOREFIRE
+USE MODI_COUPLING_FOREFIRE_n
+#endif
 !
 IMPLICIT NONE
 !
-!
-!
 !*      0.1    declarations of arguments
 !
 !* surface fluxes
@@ -383,8 +380,9 @@ CHARACTER(LEN=6) :: YJSV
 CHARACTER(LEN=6), DIMENSION(:), ALLOCATABLE :: YSV_SURF ! name of the scalar variables
                                                         ! sent to SURFEX
 !                                                        
-REAL                              :: ZTIMEC
-INTEGER           :: ILUOUT         ! logical unit
+LOGICAL :: GSTATPROF_SURF ! TRUE if station or profiler need to write surface or radiation data
+REAL    :: ZTIMEC
+INTEGER :: ILUOUT         ! logical unit
 !
 ! Fire model
 REAL(KIND=MNHTIME), DIMENSION(2)      :: ZFIRETIME1, ZFIRETIME2           ! CPU time for Blaze perf profiling
@@ -417,6 +415,7 @@ PSCA_ALB = XUNDEF_SFX
 PEMIS    = XUNDEF_SFX
 PTSRAD   = XUNDEF_SFX
 !
+GSTATPROF_SURF = ( LPROFILER .AND. LDIAG_SURFRAD_PROF ) .OR. ( LSTATION .AND. LDIAG_SURFRAD_STAT )
 !
 !-------------------------------------------------------------------------------
 !
@@ -658,11 +657,15 @@ IF (LOASIS) THEN
 END IF
 #endif
 !
-IF (CPROGRAM=='DIAG  ' .OR. LDIAG_IN_RUN) THEN
-  CALL DIAG_SURF_ATM_n(YSURF_CUR,'MESONH')
-  CALL  MNHGET_SURF_PARAM_n( PRN = ZP_RN,         PH = ZP_H,           PLE = ZP_LE,   PLEI = ZP_LEI,   &
-                             PGFLUX = ZP_GFLUX,   PT2M = ZP_T2M,       PQ2M = ZP_Q2M, PHU2M = ZP_HU2M, &
-                             PZON10M = ZP_ZON10M, PMER10M = ZP_MER10M                                  )
+IF ( CPROGRAM == 'DIAG' .OR. GSTATPROF_SURF ) THEN
+  CALL DIAG_SURF_ATM_n( YSURF_CUR, 'MESONH' )
+  IF ( CPROGRAM == 'DIAG' ) THEN
+    CALL  MNHGET_SURF_PARAM_n( PZON10M = ZP_ZON10M, PMER10M = ZP_MER10M                                  )
+  ELSE
+    CALL  MNHGET_SURF_PARAM_n( PRN = ZP_RN,         PH = ZP_H,           PLE = ZP_LE,   PLEI = ZP_LEI,   &
+                               PGFLUX = ZP_GFLUX,   PT2M = ZP_T2M,       PQ2M = ZP_Q2M, PHU2M = ZP_HU2M, &
+                               PZON10M = ZP_ZON10M, PMER10M = ZP_MER10M                                  )
+  END IF
 END IF
 !
 ! Transform 1D output fields into 2D:
@@ -970,50 +973,58 @@ CALL CLEANLIST_ll(TZFIELDSURF_ll)
 !   -----------
 !
 !
-IF (LDIAG_IN_RUN) THEN
-  !
+IF ( CPROGRAM == 'DIAG' .OR. GSTATPROF_SURF ) THEN
   XCURRENT_SFCO2(:,:) = ZSFCO2(:,:)
-  XCURRENT_DSTAOD(:,:)=0.0
-  XCURRENT_SLTAOD(:,:)=0.0
-  IF (CRAD/='NONE') THEN
-  XCURRENT_LWD  (:,:) = XFLALWD(:,:)
-  XCURRENT_SWD  (:,:) = SUM(XDIRSRFSWD(:,:,:)+XSCAFLASWD(:,:,:),DIM=3)
-  XCURRENT_LWU  (:,:) = XLWU(:,:,IKB) 
-  XCURRENT_SWU  (:,:) = XSWU(:,:,IKB) 
-  XCURRENT_SWDIR(:,:) = SUM(XDIRSRFSWD,DIM=3)
-  XCURRENT_SWDIFF(:,:) = SUM(XSCAFLASWD(:,:,:),DIM=3) 
-  DO JK=IKB,IKE
-    IKRAD = JK - 1 
-    DO JJ=IJB,IJE
-       DO JI=IIB,IIE
-         XCURRENT_DSTAOD(JI,JJ)=XCURRENT_DSTAOD(JI,JJ)+XAER(JI,JJ,IKRAD,3)
-         XCURRENT_SLTAOD(JI,JJ)=XCURRENT_SLTAOD(JI,JJ)+XAER(JI,JJ,IKRAD,2)
-       ENDDO
-    ENDDO
-  ENDDO
+  IF ( CRAD /= 'NONE' ) THEN
+    XCURRENT_LWD  (:,:) = XFLALWD(:,:)
+    XCURRENT_SWD  (:,:) = SUM( XDIRSRFSWD(:,:,:) + XSCAFLASWD(:,:,:), DIM=3 )
+    XCURRENT_LWU  (:,:) = XLWU(:,:,IKB)
+    XCURRENT_SWU  (:,:) = XSWU(:,:,IKB)
+    IF ( GSTATPROF_SURF ) THEN
+      XCURRENT_SWDIR(:,:)  = SUM( XDIRSRFSWD(:,:,:), DIM=3 )
+      XCURRENT_SWDIFF(:,:) = SUM( XSCAFLASWD(:,:,:), DIM=3 )
+      XCURRENT_DSTAOD(:,:) = 0.0
+      XCURRENT_SLTAOD(:,:) = 0.0
+      DO JK=IKB,IKE
+        IKRAD = JK - 1
+        DO JJ = IJB, IJE
+          DO JI = IIB, IIE
+            XCURRENT_DSTAOD(JI,JJ) = XCURRENT_DSTAOD(JI,JJ) + XAER(JI,JJ,IKRAD,3)
+            XCURRENT_SLTAOD(JI,JJ) = XCURRENT_SLTAOD(JI,JJ) + XAER(JI,JJ,IKRAD,2)
+          END DO
+        END DO
+      END DO
+    END IF
   END IF
-!
+
   NULLIFY(TZFIELDSURF_ll)
-  CALL ADD2DFIELD_ll( TZFIELDSURF_ll,XCURRENT_RN,     'GROUND_PARAM_n::XCURRENT_RN'     )
-  CALL ADD2DFIELD_ll( TZFIELDSURF_ll,XCURRENT_H,      'GROUND_PARAM_n::XCURRENT_H'      )
-  CALL ADD2DFIELD_ll( TZFIELDSURF_ll,XCURRENT_LE,     'GROUND_PARAM_n::XCURRENT_LE'     )
-  CALL ADD2DFIELD_ll( TZFIELDSURF_ll,XCURRENT_LEI,    'GROUND_PARAM_n::XCURRENT_LEI'    )
-  CALL ADD2DFIELD_ll( TZFIELDSURF_ll,XCURRENT_GFLUX,  'GROUND_PARAM_n::XCURRENT_GFLUX'  )
-  CALL ADD2DFIELD_ll( TZFIELDSURF_ll,XCURRENT_SWD,    'GROUND_PARAM_n::XCURRENT_SWD'    )
-  CALL ADD2DFIELD_ll( TZFIELDSURF_ll,XCURRENT_SWU,    'GROUND_PARAM_n::XCURRENT_SWU'    )
-  CALL ADD2DFIELD_ll( TZFIELDSURF_ll,XCURRENT_LWD,    'GROUND_PARAM_n::XCURRENT_LWD'    )
-  CALL ADD2DFIELD_ll( TZFIELDSURF_ll,XCURRENT_LWU,    'GROUND_PARAM_n::XCURRENT_LWU'    )
-  CALL ADD2DFIELD_ll( TZFIELDSURF_ll,XCURRENT_SWDIR,  'GROUND_PARAM_n::XCURRENT_SWDIR'  )
-  CALL ADD2DFIELD_ll( TZFIELDSURF_ll,XCURRENT_SWDIFF, 'GROUND_PARAM_n::XCURRENT_SWDIFF' )
-  CALL ADD2DFIELD_ll( TZFIELDSURF_ll,XCURRENT_T2M,    'GROUND_PARAM_n::XCURRENT_T2M'    )
-  CALL ADD2DFIELD_ll( TZFIELDSURF_ll,XCURRENT_Q2M,    'GROUND_PARAM_n::XCURRENT_Q2M'    )
-  CALL ADD2DFIELD_ll( TZFIELDSURF_ll,XCURRENT_HU2M,   'GROUND_PARAM_n::XCURRENT_HU2M'   )
-  CALL ADD2DFIELD_ll( TZFIELDSURF_ll,XCURRENT_ZON10M, 'GROUND_PARAM_n::XCURRENT_ZON10M' )
-  CALL ADD2DFIELD_ll( TZFIELDSURF_ll,XCURRENT_MER10M, 'GROUND_PARAM_n::XCURRENT_MER10M' )
-  CALL ADD2DFIELD_ll( TZFIELDSURF_ll,XCURRENT_DSTAOD, 'GROUND_PARAM_n::XCURRENT_DSTAOD' )
-  CALL ADD2DFIELD_ll( TZFIELDSURF_ll,XCURRENT_SLTAOD, 'GROUND_PARAM_n::XCURRENT_SLTAOD' )
-  ! CALL ADD2DFIELD_ll( TZFIELDSURF_ll,XCURRENT_ZWS,    'GROUND_PARAM_n::XCURRENT_ZWS'    )
-  CALL ADD2DFIELD_ll( TZFIELDSURF_ll,XCURRENT_SFCO2,  'GROUND_PARAM_n::XCURRENT_SFCO2'  )
+
+  CALL ADD2DFIELD_ll( TZFIELDSURF_ll,XCURRENT_SFCO2,      'GROUND_PARAM_n::XCURRENT_SFCO2'  )
+  IF ( CRAD /= 'NONE' ) THEN
+    CALL ADD2DFIELD_ll( TZFIELDSURF_ll,XCURRENT_LWD,      'GROUND_PARAM_n::XCURRENT_LWD'    )
+    CALL ADD2DFIELD_ll( TZFIELDSURF_ll,XCURRENT_SWD,      'GROUND_PARAM_n::XCURRENT_SWD'    )
+    CALL ADD2DFIELD_ll( TZFIELDSURF_ll,XCURRENT_LWU,      'GROUND_PARAM_n::XCURRENT_LWU'    )
+    CALL ADD2DFIELD_ll( TZFIELDSURF_ll,XCURRENT_SWU,      'GROUND_PARAM_n::XCURRENT_SWU'    )
+    IF ( GSTATPROF_SURF ) THEN
+      CALL ADD2DFIELD_ll( TZFIELDSURF_ll,XCURRENT_SWDIR,  'GROUND_PARAM_n::XCURRENT_SWDIR'  )
+      CALL ADD2DFIELD_ll( TZFIELDSURF_ll,XCURRENT_SWDIFF, 'GROUND_PARAM_n::XCURRENT_SWDIFF' )
+      CALL ADD2DFIELD_ll( TZFIELDSURF_ll,XCURRENT_DSTAOD, 'GROUND_PARAM_n::XCURRENT_DSTAOD' )
+      CALL ADD2DFIELD_ll( TZFIELDSURF_ll,XCURRENT_SLTAOD, 'GROUND_PARAM_n::XCURRENT_SLTAOD' )
+    END IF
+  END IF
+  CALL ADD2DFIELD_ll( TZFIELDSURF_ll,XCURRENT_ZON10M,     'GROUND_PARAM_n::XCURRENT_ZON10M' )
+  CALL ADD2DFIELD_ll( TZFIELDSURF_ll,XCURRENT_MER10M,     'GROUND_PARAM_n::XCURRENT_MER10M' )
+  IF ( GSTATPROF_SURF ) THEN
+    CALL ADD2DFIELD_ll( TZFIELDSURF_ll,XCURRENT_RN,       'GROUND_PARAM_n::XCURRENT_RN'     )
+    CALL ADD2DFIELD_ll( TZFIELDSURF_ll,XCURRENT_H,        'GROUND_PARAM_n::XCURRENT_H'      )
+    CALL ADD2DFIELD_ll( TZFIELDSURF_ll,XCURRENT_LE,       'GROUND_PARAM_n::XCURRENT_LE'     )
+    CALL ADD2DFIELD_ll( TZFIELDSURF_ll,XCURRENT_LEI,      'GROUND_PARAM_n::XCURRENT_LEI'    )
+    CALL ADD2DFIELD_ll( TZFIELDSURF_ll,XCURRENT_GFLUX,    'GROUND_PARAM_n::XCURRENT_GFLUX'  )
+    CALL ADD2DFIELD_ll( TZFIELDSURF_ll,XCURRENT_T2M,      'GROUND_PARAM_n::XCURRENT_T2M'    )
+    CALL ADD2DFIELD_ll( TZFIELDSURF_ll,XCURRENT_Q2M,      'GROUND_PARAM_n::XCURRENT_Q2M'    )
+    CALL ADD2DFIELD_ll( TZFIELDSURF_ll,XCURRENT_HU2M,     'GROUND_PARAM_n::XCURRENT_HU2M'   )
+  END IF
+  ! CALL ADD2DFIELD_ll( TZFIELDSURF_ll,XCURRENT_ZWS,      'GROUND_PARAM_n::XCURRENT_ZWS'    )
 
   CALL UPDATE_HALO_ll(TZFIELDSURF_ll,IINFO_ll)
   CALL CLEANLIST_ll(TZFIELDSURF_ll)
@@ -1073,16 +1084,20 @@ ALLOCATE(ZP_TSURF   (KDIM1D))
 ALLOCATE(ZP_Z0      (KDIM1D))
 ALLOCATE(ZP_Z0H     (KDIM1D))
 ALLOCATE(ZP_QSURF   (KDIM1D))
-ALLOCATE(ZP_RN      (KDIM1D))
-ALLOCATE(ZP_H       (KDIM1D))
-ALLOCATE(ZP_LE      (KDIM1D))
-ALLOCATE(ZP_LEI     (KDIM1D))
-ALLOCATE(ZP_GFLUX   (KDIM1D))
-ALLOCATE(ZP_T2M     (KDIM1D))
-ALLOCATE(ZP_Q2M     (KDIM1D))
-ALLOCATE(ZP_HU2M    (KDIM1D))
-ALLOCATE(ZP_ZON10M  (KDIM1D))
-ALLOCATE(ZP_MER10M  (KDIM1D))
+IF ( GSTATPROF_SURF ) THEN
+  ALLOCATE(ZP_RN      (KDIM1D))
+  ALLOCATE(ZP_H       (KDIM1D))
+  ALLOCATE(ZP_LE      (KDIM1D))
+  ALLOCATE(ZP_LEI     (KDIM1D))
+  ALLOCATE(ZP_GFLUX   (KDIM1D))
+  ALLOCATE(ZP_T2M     (KDIM1D))
+  ALLOCATE(ZP_Q2M     (KDIM1D))
+  ALLOCATE(ZP_HU2M    (KDIM1D))
+END IF
+IF ( CPROGRAM == 'DIAG' .OR. GSTATPROF_SURF ) THEN
+  ALLOCATE(ZP_ZON10M  (KDIM1D))
+  ALLOCATE(ZP_MER10M  (KDIM1D))
+END IF
 
 !* explicit coupling only
 ALLOCATE(ZP_PEW_A_COEF  (KDIM1D))
@@ -1196,7 +1211,7 @@ IF(LBLOWSNOW) THEN
   END DO
 END IF
 !
-IF (LDIAG_IN_RUN) THEN
+IF ( GSTATPROF_SURF ) THEN
   XCURRENT_RN      (IIB:IIE,IJB:IJE)  = RESHAPE(ZP_RN(:),     ISHAPE_2)
   XCURRENT_H       (IIB:IIE,IJB:IJE)  = RESHAPE(ZP_H (:),     ISHAPE_2)
   XCURRENT_LE      (IIB:IIE,IJB:IJE)  = RESHAPE(ZP_LE(:),     ISHAPE_2)
@@ -1205,10 +1220,12 @@ IF (LDIAG_IN_RUN) THEN
   XCURRENT_T2M     (IIB:IIE,IJB:IJE)  = RESHAPE(ZP_T2M(:),    ISHAPE_2)
   XCURRENT_Q2M     (IIB:IIE,IJB:IJE)  = RESHAPE(ZP_Q2M(:),    ISHAPE_2)
   XCURRENT_HU2M    (IIB:IIE,IJB:IJE)  = RESHAPE(ZP_HU2M(:),   ISHAPE_2)
+END IF
+IF ( GSTATPROF_SURF .OR. CPROGRAM == 'DIAG' ) THEN
   XCURRENT_ZON10M  (IIB:IIE,IJB:IJE)  = RESHAPE(ZP_ZON10M(:), ISHAPE_2)
   XCURRENT_MER10M  (IIB:IIE,IJB:IJE)  = RESHAPE(ZP_MER10M(:), ISHAPE_2)
   ! XCURRENT_ZWS     (IIB:IIE,IJB:IJE)  = RESHAPE(ZP_ZWS(:),    ISHAPE_2)
-ENDIF
+END IF
 !
 DO JLAYER=1,SIZE(PDIR_ALB,3)
   PDIR_ALB(IIB:IIE,IJB:IJE,JLAYER) = RESHAPE(ZP_DIR_ALB(:,JLAYER), ISHAPE_2)
@@ -1246,16 +1263,20 @@ DEALLOCATE(ZP_TSRAD   )
 DEALLOCATE(ZP_DIR_ALB )
 DEALLOCATE(ZP_SCA_ALB )
 DEALLOCATE(ZP_EMIS    )
-DEALLOCATE(ZP_RN      )
-DEALLOCATE(ZP_H       )
-DEALLOCATE(ZP_LE      )
-DEALLOCATE(ZP_LEI     )
-DEALLOCATE(ZP_GFLUX   )
-DEALLOCATE(ZP_T2M     )
-DEALLOCATE(ZP_Q2M     )
-DEALLOCATE(ZP_HU2M     )
-DEALLOCATE(ZP_ZON10M  )
-DEALLOCATE(ZP_MER10M  )
+IF ( GSTATPROF_SURF ) THEN
+  DEALLOCATE(ZP_RN      )
+  DEALLOCATE(ZP_H       )
+  DEALLOCATE(ZP_LE      )
+  DEALLOCATE(ZP_LEI     )
+  DEALLOCATE(ZP_GFLUX   )
+  DEALLOCATE(ZP_T2M     )
+  DEALLOCATE(ZP_Q2M     )
+  DEALLOCATE(ZP_HU2M    )
+END IF
+IF ( CPROGRAM == 'DIAG' .OR. GSTATPROF_SURF ) THEN
+  DEALLOCATE(ZP_ZON10M  )
+  DEALLOCATE(ZP_MER10M  )
+END IF
 
 DEALLOCATE(ZP_PEW_A_COEF  )
 DEALLOCATE(ZP_PEW_B_COEF  )
diff --git a/src/MNH/ini_diag_in_run.f90 b/src/MNH/ini_diag_in_run.f90
index e3af33fa2..0910a61e6 100644
--- a/src/MNH/ini_diag_in_run.f90
+++ b/src/MNH/ini_diag_in_run.f90
@@ -31,7 +31,7 @@ END MODULE MODI_INI_DIAG_IN_RUN
 !     ###############################################################
 !
 !
-!!****  *INI_DIAG_IN_RUN* - 
+!!****  *INI_DIAG_IN_RUN* -
 !!
 !!    PURPOSE
 !!    -------
@@ -39,7 +39,7 @@ END MODULE MODI_INI_DIAG_IN_RUN
 !
 !!**  METHOD
 !!    ------
-!!    
+!!
 !!
 !!    EXTERNAL
 !!    --------
@@ -65,10 +65,13 @@ END MODULE MODI_INI_DIAG_IN_RUN
 !*      0. DECLARATIONS
 !          ------------
 !
-USE MODD_CONF, ONLY : CPROGRAM
+USE MODD_ALLPROFILER_n, ONLY: LDIAG_SURFRAD_PROF
+USE MODD_ALLSTATION_n,  ONLY: LDIAG_SURFRAD_STAT
+USE MODD_CONF,          ONLY: CPROGRAM
 USE MODD_DIAG_IN_RUN
-USE MODD_PARAMETERS, ONLY : XUNDEF
-USE MODD_SURF_PAR,   ONLY: XUNDEF_SFX => XUNDEF
+USE MODD_PARAMETERS,    ONLY: XUNDEF
+USE MODD_PARAM_n,       ONLY: CRAD
+USE MODD_SURF_PAR,      ONLY: XUNDEF_SFX => XUNDEF
 !
 IMPLICIT NONE
 !
@@ -84,36 +87,90 @@ LOGICAL,            INTENT(IN) :: OPROFILER! flag for profiler
 !
 !-------------------------------------------------------------------------------
 !
-IF (OFLYER .OR. OSTATION .OR. OPROFILER .OR. CPROGRAM=='DIAG  ') THEN
+! LDIAG_IN_RUN is only used for XCURRENT_TKE_DISS (computed in turbulence)
+IF ( OFLYER .OR. OPROFILER ) THEN
   LDIAG_IN_RUN = .TRUE.
+  ALLOCATE( XCURRENT_TKE_DISS(KIU,KJU,KKU) ) ! Tke dissipation rate
+  XCURRENT_TKE_DISS = XUNDEF
 ELSE
   LDIAG_IN_RUN = .FALSE.
+  ALLOCATE( XCURRENT_TKE_DISS(0,0,0) ) ! Tke dissipation rate
 END IF
-!
-IF (LDIAG_IN_RUN) THEN
+
+IF ( CPROGRAM == 'DIAG' ) THEN
+  IF ( CRAD /= 'NONE' ) THEN
+    ALLOCATE(XCURRENT_LWD   (KIU,KJU))! incoming longwave at the surface
+    ALLOCATE(XCURRENT_LWU   (KIU,KJU))! outcoming longwave at the surface
+    ALLOCATE(XCURRENT_SWD   (KIU,KJU))! incoming Shortwave at the surface
+    ALLOCATE(XCURRENT_SWU   (KIU,KJU))! outcoming Shortwave at the surface
+  ELSE
+    ALLOCATE(XCURRENT_LWD   (0,0))! incoming longwave at the surface
+    ALLOCATE(XCURRENT_LWU   (0,0))! outcoming longwave at the surface
+    ALLOCATE(XCURRENT_SWD   (0,0))! incoming Shortwave at the surface
+    ALLOCATE(XCURRENT_SWU   (0,0))! outcoming Shortwave at the surface
+  END IF
+
+  ALLOCATE(XCURRENT_ZON10M(KIU,KJU))! zonal wind at 10m
+  ALLOCATE(XCURRENT_MER10M(KIU,KJU))! meridian wind at 10m
+
+  ALLOCATE(XCURRENT_SFCO2 (KIU,KJU))! CO2 Surface flux
+
+  ALLOCATE(XCURRENT_RN    (0,0))! net radiation
+  ALLOCATE(XCURRENT_H     (0,0))! sensible heat flux
+  ALLOCATE(XCURRENT_LE    (0,0))! Total latent heat flux
+  ALLOCATE(XCURRENT_LEI   (0,0))! Solid latent heat flux
+  ALLOCATE(XCURRENT_GFLUX (0,0))! ground flux
+  ALLOCATE(XCURRENT_SWDIR (0,0))! incoming Shortwave direct at the surface
+  ALLOCATE(XCURRENT_SWDIFF(0,0))! incoming Shortwave diffuse at the surface
+  ALLOCATE(XCURRENT_T2M   (0,0))! temperature at 2m
+  ALLOCATE(XCURRENT_Q2M   (0,0))! humidity at 2m
+  ALLOCATE(XCURRENT_HU2M  (0,0))! humidity at 2m
+  ALLOCATE(XCURRENT_DSTAOD(0,0))! dust aerosol optical depth
+  ALLOCATE(XCURRENT_SLTAOD(0,0))! Salt aerosol optical depth
+  ! ALLOCATE(XCURRENT_ZWS(0,0))! Significant height of waves
+
+  XCURRENT_LWD   = XUNDEF
+  XCURRENT_LWU   = XUNDEF
+  XCURRENT_SWD   = XUNDEF
+  XCURRENT_SWU   = XUNDEF
+
+  XCURRENT_ZON10M = XUNDEF_SFX
+  XCURRENT_MER10M = XUNDEF_SFX
+
+  XCURRENT_SFCO2 = XUNDEF_SFX
+ELSE IF ( ( OPROFILER .AND. LDIAG_SURFRAD_PROF ) .OR. ( OSTATION .AND. LDIAG_SURFRAD_STAT ) ) THEN
   ALLOCATE(XCURRENT_RN    (KIU,KJU))! net radiation
   ALLOCATE(XCURRENT_H     (KIU,KJU))! sensible heat flux
   ALLOCATE(XCURRENT_LE    (KIU,KJU))! Total latent heat flux
-  ALLOCATE(XCURRENT_LEI   (KIU,KJU))! Solid latent heat flux  
+  ALLOCATE(XCURRENT_LEI   (KIU,KJU))! Solid latent heat flux
   ALLOCATE(XCURRENT_GFLUX (KIU,KJU))! ground flux
-  ALLOCATE(XCURRENT_LWD   (KIU,KJU))! incoming longwave at the surface
-  ALLOCATE(XCURRENT_LWU   (KIU,KJU))! outcoming longwave at the surface
-  ALLOCATE(XCURRENT_SWD   (KIU,KJU))! incoming Shortwave at the surface
-  ALLOCATE(XCURRENT_SWU   (KIU,KJU))! outcoming Shortwave at the surface
-  ALLOCATE(XCURRENT_SWDIR (KIU,KJU))! incoming Shortwave direct at the surface
-  ALLOCATE(XCURRENT_SWDIFF(KIU,KJU))! incoming Shortwave diffuse at the surface  
+  IF ( CRAD /= 'NONE' ) THEN
+    ALLOCATE(XCURRENT_LWD   (KIU,KJU))! incoming longwave at the surface
+    ALLOCATE(XCURRENT_LWU   (KIU,KJU))! outcoming longwave at the surface
+    ALLOCATE(XCURRENT_SWD   (KIU,KJU))! incoming Shortwave at the surface
+    ALLOCATE(XCURRENT_SWU   (KIU,KJU))! outcoming Shortwave at the surface
+    ALLOCATE(XCURRENT_SWDIR (KIU,KJU))! incoming Shortwave direct at the surface
+    ALLOCATE(XCURRENT_SWDIFF(KIU,KJU))! incoming Shortwave diffuse at the surface
+    ALLOCATE(XCURRENT_DSTAOD(KIU,KJU))! dust aerosol optical depth
+    ALLOCATE(XCURRENT_SLTAOD(KIU,KJU))! Salt aerosol optical depth
+  ELSE
+    ALLOCATE(XCURRENT_LWD   (0,0))! incoming longwave at the surface
+    ALLOCATE(XCURRENT_LWU   (0,0))! outcoming longwave at the surface
+    ALLOCATE(XCURRENT_SWD   (0,0))! incoming Shortwave at the surface
+    ALLOCATE(XCURRENT_SWU   (0,0))! outcoming Shortwave at the surface
+    ALLOCATE(XCURRENT_SWDIR (0,0))! incoming Shortwave direct at the surface
+    ALLOCATE(XCURRENT_SWDIFF(0,0))! incoming Shortwave diffuse at the surface
+    ALLOCATE(XCURRENT_DSTAOD(0,0))! dust aerosol optical depth
+    ALLOCATE(XCURRENT_SLTAOD(0,0))! Salt aerosol optical depth
+  END IF
   ALLOCATE(XCURRENT_T2M   (KIU,KJU))! temperature at 2m
   ALLOCATE(XCURRENT_Q2M   (KIU,KJU))! humidity at 2m
-  ALLOCATE(XCURRENT_HU2M   (KIU,KJU))! humidity at 2m
+  ALLOCATE(XCURRENT_HU2M  (KIU,KJU))! humidity at 2m
   ALLOCATE(XCURRENT_ZON10M(KIU,KJU))! zonal wind at 10m
   ALLOCATE(XCURRENT_MER10M(KIU,KJU))! meridian wind at 10m
-  ALLOCATE(XCURRENT_DSTAOD(KIU,KJU))! dust aerosol optical depth
   ALLOCATE(XCURRENT_SFCO2 (KIU,KJU))! CO2 Surface flux
-  ALLOCATE(XCURRENT_TKE_DISS(KIU,KJU,KKU)) ! Tke dissipation rate
-  ALLOCATE(XCURRENT_SLTAOD(KIU,KJU))! Salt aerosol optical depth
   ! ALLOCATE(XCURRENT_ZWS(KIU,KJU)) ! Significant height of waves
-  !
-  !
+
   XCURRENT_RN    = XUNDEF_SFX
   XCURRENT_H     = XUNDEF_SFX
   XCURRENT_LE    = XUNDEF_SFX
@@ -124,38 +181,36 @@ IF (LDIAG_IN_RUN) THEN
   XCURRENT_SWD   = XUNDEF
   XCURRENT_SWU   = XUNDEF
   XCURRENT_SWDIR = XUNDEF
-  XCURRENT_SWDIFF= XUNDEF  
+  XCURRENT_SWDIFF= XUNDEF
   XCURRENT_T2M   = XUNDEF_SFX
   XCURRENT_Q2M   = XUNDEF_SFX
   XCURRENT_HU2M  = XUNDEF_SFX
   XCURRENT_ZON10M= XUNDEF_SFX
   XCURRENT_MER10M= XUNDEF_SFX
   XCURRENT_DSTAOD= XUNDEF
-  XCURRENT_SFCO2 = XUNDEF_SFX
-  XCURRENT_TKE_DISS = XUNDEF
   XCURRENT_SLTAOD= XUNDEF
+  XCURRENT_SFCO2 = XUNDEF_SFX
   ! XCURRENT_ZWS = XUNDEF_SFX
 ELSE
   ALLOCATE(XCURRENT_RN    (0,0))! net radiation
   ALLOCATE(XCURRENT_H     (0,0))! sensible heat flux
   ALLOCATE(XCURRENT_LE    (0,0))! Total latent heat flux
-  ALLOCATE(XCURRENT_LEI   (0,0))! Solid latent heat flux  
+  ALLOCATE(XCURRENT_LEI   (0,0))! Solid latent heat flux
   ALLOCATE(XCURRENT_GFLUX (0,0))! ground flux
   ALLOCATE(XCURRENT_LWD   (0,0))! incoming longwave at the surface
   ALLOCATE(XCURRENT_LWU   (0,0))! outcoming longwave at the surface
   ALLOCATE(XCURRENT_SWD   (0,0))! incoming Shortwave at the surface
   ALLOCATE(XCURRENT_SWU   (0,0))! outcoming Shortwave at the surface
   ALLOCATE(XCURRENT_SWDIR (0,0))! incoming Shortwave direct at the surface
-  ALLOCATE(XCURRENT_SWDIFF(0,0))! incoming Shortwave diffuse at the surface  
+  ALLOCATE(XCURRENT_SWDIFF(0,0))! incoming Shortwave diffuse at the surface
   ALLOCATE(XCURRENT_T2M   (0,0))! temperature at 2m
   ALLOCATE(XCURRENT_Q2M   (0,0))! humidity at 2m
   ALLOCATE(XCURRENT_HU2M  (0,0))! humidity at 2m
   ALLOCATE(XCURRENT_ZON10M(0,0))! zonal wind at 10m
   ALLOCATE(XCURRENT_MER10M(0,0))! meridian wind at 10m
   ALLOCATE(XCURRENT_DSTAOD(0,0))! dust aerosol optical depth
-  ALLOCATE(XCURRENT_SFCO2 (0,0))! CO2 Surface flux
-  ALLOCATE(XCURRENT_TKE_DISS(0,0,0)) ! Tke dissipation rate
   ALLOCATE(XCURRENT_SLTAOD(0,0))! Salt aerosol optical depth
+  ALLOCATE(XCURRENT_SFCO2 (0,0))! CO2 Surface flux
   ! ALLOCATE(XCURRENT_ZWS(0,0))! Significant height of waves
 END IF
 !
diff --git a/src/MNH/modd_allprofilern.f90 b/src/MNH/modd_allprofilern.f90
index fd7cd8eb2..176c5560f 100644
--- a/src/MNH/modd_allprofilern.f90
+++ b/src/MNH/modd_allprofilern.f90
@@ -1,4 +1,4 @@
-!MNH_LIC Copyright 2021-2022 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 2021-2023 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
 !MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
@@ -44,7 +44,7 @@ IMPLICIT NONE
 PRIVATE
 
 PUBLIC :: NNUMB_PROF, XSTEP_PROF, XX_PROF, XY_PROF, XLAT_PROF, XLON_PROF, XZ_PROF
-PUBLIC :: CNAME_PROF, CFILE_PROF !, LDIAG_SURFRAD
+PUBLIC :: CNAME_PROF, CFILE_PROF, LDIAG_SURFRAD_PROF
 
 PUBLIC :: ALLPROFILER_GOTO_MODEL
 
@@ -58,7 +58,7 @@ TYPE ALLPROFILER_t
   CHARACTER(LEN=NSTATPROFNAMELGTMAX), DIMENSION(100) :: CNAME_PROF
   CHARACTER(LEN=NFILENAMELGTMAX)   :: CFILE_PROF
   REAL                             :: XSTEP_PROF
-!  LOGICAL                          :: LDIAG_SURFRAD
+  LOGICAL                          :: LDIAG_SURFRAD_PROF
   !
 !
 END TYPE ALLPROFILER_t
@@ -74,7 +74,7 @@ REAL, DIMENSION(:), POINTER                  :: XLON_PROF=>NULL()
 REAL, DIMENSION(:), POINTER                  :: XZ_PROF=>NULL()
 CHARACTER (LEN=NSTATPROFNAMELGTMAX),DIMENSION(:), POINTER :: CNAME_PROF=>NULL()
 CHARACTER (LEN=NFILENAMELGTMAX),POINTER      :: CFILE_PROF=>NULL()
-!LOGICAL, POINTER                             :: LDIAG_SURFRAD=>NULL()
+LOGICAL, POINTER                             :: LDIAG_SURFRAD_PROF => NULL()
 CONTAINS
 
 SUBROUTINE ALLPROFILER_GOTO_MODEL(KFROM, KTO)
@@ -93,7 +93,7 @@ XLAT_PROF     =>ALLPROFILER_MODEL(KTO)%XLAT_PROF
 XLON_PROF     =>ALLPROFILER_MODEL(KTO)%XLON_PROF
 CNAME_PROF    =>ALLPROFILER_MODEL(KTO)%CNAME_PROF
 CFILE_PROF    =>ALLPROFILER_MODEL(KTO)%CFILE_PROF
-!LDIAG_SURFRAD =>ALLPROFILER_MODEL(KTO)%LDIAG_SURFRAD
+LDIAG_SURFRAD_PROF =>ALLPROFILER_MODEL(KTO)%LDIAG_SURFRAD_PROF
 END SUBROUTINE ALLPROFILER_GOTO_MODEL
 
 END MODULE MODD_ALLPROFILER_n
diff --git a/src/MNH/modd_allstationn.f90 b/src/MNH/modd_allstationn.f90
index 4fe0a7be7..463e5a811 100644
--- a/src/MNH/modd_allstationn.f90
+++ b/src/MNH/modd_allstationn.f90
@@ -1,4 +1,4 @@
-!MNH_LIC Copyright 2021-2022 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 2021-2023 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
 !MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
@@ -43,7 +43,7 @@ IMPLICIT NONE
 PRIVATE
 
 PUBLIC :: NNUMB_STAT, XSTEP_STAT, XX_STAT, XY_STAT, XLAT_STAT, XLON_STAT, XZ_STAT
-PUBLIC :: CNAME_STAT, CFILE_STAT, LDIAG_SURFRAD
+PUBLIC :: CNAME_STAT, CFILE_STAT, LDIAG_SURFRAD_STAT
 
 PUBLIC :: ALLSTATION_GOTO_MODEL
 
@@ -57,7 +57,7 @@ TYPE ALLSTATION_t
   CHARACTER(LEN=NSTATPROFNAMELGTMAX), DIMENSION(100) :: CNAME_STAT
   CHARACTER(LEN=NFILENAMELGTMAX)   :: CFILE_STAT
   REAL                             :: XSTEP_STAT
-  LOGICAL                          :: LDIAG_SURFRAD
+  LOGICAL                          :: LDIAG_SURFRAD_STAT
   !
 !
 END TYPE ALLSTATION_t
@@ -73,7 +73,7 @@ REAL, DIMENSION(:), POINTER                  :: XLON_STAT=>NULL()
 REAL, DIMENSION(:), POINTER                  :: XZ_STAT=>NULL()
 CHARACTER (LEN=NSTATPROFNAMELGTMAX),DIMENSION(:), POINTER :: CNAME_STAT=>NULL()
 CHARACTER (LEN=NFILENAMELGTMAX),POINTER      :: CFILE_STAT=>NULL()
-LOGICAL, POINTER                             :: LDIAG_SURFRAD=>NULL()
+LOGICAL, POINTER                             :: LDIAG_SURFRAD_STAT=>NULL()
 CONTAINS
 
 SUBROUTINE ALLSTATION_GOTO_MODEL(KFROM, KTO)
@@ -92,7 +92,7 @@ XLAT_STAT     =>ALLSTATION_MODEL(KTO)%XLAT_STAT
 XLON_STAT     =>ALLSTATION_MODEL(KTO)%XLON_STAT
 CNAME_STAT    =>ALLSTATION_MODEL(KTO)%CNAME_STAT
 CFILE_STAT    =>ALLSTATION_MODEL(KTO)%CFILE_STAT
-LDIAG_SURFRAD =>ALLSTATION_MODEL(KTO)%LDIAG_SURFRAD
+LDIAG_SURFRAD_STAT =>ALLSTATION_MODEL(KTO)%LDIAG_SURFRAD_STAT
 END SUBROUTINE ALLSTATION_GOTO_MODEL
 
 END MODULE MODD_ALLSTATION_n
diff --git a/src/MNH/modn_profilern.f90 b/src/MNH/modn_profilern.f90
index d050fddcf..c5e398416 100644
--- a/src/MNH/modn_profilern.f90
+++ b/src/MNH/modn_profilern.f90
@@ -1,4 +1,4 @@
-!MNH_LIC Copyright 2020-2022 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 2020-2023 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
 !MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
@@ -35,8 +35,8 @@ USE MODD_ALLPROFILER_n, ONLY:&
         XLON_PROF_n     =>XLON_PROF     ,&
         XZ_PROF_n       =>XZ_PROF       ,&
         CNAME_PROF_n    =>CNAME_PROF    ,&
-        CFILE_PROF_n    =>CFILE_PROF    !,&
-!         LDIAG_SURFRAD_n =>LDIAG_SURFRAD
+        CFILE_PROF_n    =>CFILE_PROF    ,&
+        LDIAG_SURFRAD_n =>LDIAG_SURFRAD_PROF
 USE MODD_PARAMETERS, ONLY: NFILENAMELGTMAX, NSTATPROFNAMELGTMAX
 !
 !-----------------------------------------------------------------------------
@@ -51,14 +51,14 @@ REAL                             ,SAVE:: XSTEP_PROF
 REAL, DIMENSION(100)             ,SAVE:: XX_PROF, XY_PROF, XZ_PROF, XLAT_PROF, XLON_PROF
 CHARACTER (LEN=NSTATPROFNAMELGTMAX), DIMENSION(100),SAVE:: CNAME_PROF
 CHARACTER (LEN=NFILENAMELGTMAX),                   SAVE:: CFILE_PROF              !filename
-! LOGICAL                          ,SAVE:: LDIAG_SURFRAD
+LOGICAL                          ,SAVE:: LDIAG_SURFRAD
 
 NAMELIST /NAM_PROFILERn/  &
      NNUMB_PROF, XSTEP_PROF, &
      XX_PROF,XY_PROF,XZ_PROF,&
      XLON_PROF,XLAT_PROF,&
      CNAME_PROF,&
-     CFILE_PROF !,LDIAG_SURFRAD
+     CFILE_PROF, LDIAG_SURFRAD
      
 !
 CONTAINS
@@ -73,7 +73,7 @@ SUBROUTINE INIT_NAM_PROFILERn
   XZ_PROF      = XZ_PROF_n
   CNAME_PROF   = CNAME_PROF_n
   CFILE_PROF   = CFILE_PROF_n
-!   LDIAG_SURFRAD= LDIAG_SURFRAD_n
+  LDIAG_SURFRAD= LDIAG_SURFRAD_n
 END SUBROUTINE INIT_NAM_PROFILERn
 
 SUBROUTINE UPDATE_NAM_PROFILERn
@@ -86,6 +86,6 @@ SUBROUTINE UPDATE_NAM_PROFILERn
   XZ_PROF_n      = XZ_PROF
   CNAME_PROF_n   = CNAME_PROF
   CFILE_PROF_n   = CFILE_PROF
-!   LDIAG_SURFRAD_n= LDIAG_SURFRAD
+  LDIAG_SURFRAD_n= LDIAG_SURFRAD
 END SUBROUTINE UPDATE_NAM_PROFILERn
 END MODULE MODN_PROFILER_n
diff --git a/src/MNH/modn_stationn.f90 b/src/MNH/modn_stationn.f90
index 094b3dbb1..5cacedfca 100644
--- a/src/MNH/modn_stationn.f90
+++ b/src/MNH/modn_stationn.f90
@@ -1,4 +1,4 @@
-!MNH_LIC Copyright 2020-2022 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 2020-2023 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
 !MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
@@ -35,7 +35,7 @@ USE MODD_ALLSTATION_n, ONLY:&
         XZ_STAT_n       =>XZ_STAT       ,&
         CNAME_STAT_n    =>CNAME_STAT    ,&
         CFILE_STAT_n    =>CFILE_STAT    ,&
-        LDIAG_SURFRAD_n =>LDIAG_SURFRAD
+        LDIAG_SURFRAD_n =>LDIAG_SURFRAD_STAT
 USE MODD_PARAMETERS, ONLY: NFILENAMELGTMAX, NSTATPROFNAMELGTMAX
 !
 !-----------------------------------------------------------------------------
diff --git a/src/MNH/profilern.f90 b/src/MNH/profilern.f90
index 2cd83dea0..25c907e90 100644
--- a/src/MNH/profilern.f90
+++ b/src/MNH/profilern.f90
@@ -1,4 +1,4 @@
-!MNH_LIC Copyright 2002-2022 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 2002-2023 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
 !MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
@@ -88,6 +88,7 @@ END MODULE MODI_PROFILER_n
 !*      0. DECLARATIONS
 !          ------------
 !
+USE MODD_ALLPROFILER_n,    ONLY: LDIAG_SURFRAD_PROF
 USE MODD_CST,              ONLY: XCPD, XG, XLAM_CRAD, XLIGHTSPEED, XP00, XPI, XRD, XRHOLW, XRV, XTT
 USE MODD_DIAG_IN_RUN
 USE MODD_GRID,             ONLY: XBETA, XLON0, XRPK
@@ -689,7 +690,7 @@ PROFILER: DO JP = 1, NUMBPROFILER_LOC
   END DO
   IF (SIZE(PTKE)>0) TPROFILERS(JP)%XTKE  (IN,:) = STATPROF_INTERP_3D( TPROFILERS(JP), PTKE )
   !
-  IF (LDIAG_IN_RUN) THEN
+  IF ( LDIAG_SURFRAD_PROF ) THEN
     TPROFILERS(JP)%XT2M   (IN)     = STATPROF_INTERP_2D( TPROFILERS(JP), XCURRENT_T2M    )
     TPROFILERS(JP)%XQ2M   (IN)     = STATPROF_INTERP_2D( TPROFILERS(JP), XCURRENT_Q2M    )
     TPROFILERS(JP)%XHU2M  (IN)     = STATPROF_INTERP_2D( TPROFILERS(JP), XCURRENT_HU2M   )
@@ -710,9 +711,9 @@ PROFILER: DO JP = 1, NUMBPROFILER_LOC
       TPROFILERS(JP)%XDSTAOD(IN)     = STATPROF_INTERP_2D( TPROFILERS(JP), XCURRENT_DSTAOD )
       TPROFILERS(JP)%XSLTAOD(IN)     = STATPROF_INTERP_2D( TPROFILERS(JP), XCURRENT_SLTAOD )
     END IF
-    TPROFILERS(JP)%XTKE_DISS(IN,:) = STATPROF_INTERP_3D( TPROFILERS(JP), XCURRENT_TKE_DISS )
     TPROFILERS(JP)%XSFCO2   (IN)   = STATPROF_INTERP_2D( TPROFILERS(JP), XCURRENT_SFCO2    )
   END IF
+  TPROFILERS(JP)%XTKE_DISS(IN,:) = STATPROF_INTERP_3D( TPROFILERS(JP), XCURRENT_TKE_DISS )
 END DO PROFILER
 !
 !----------------------------------------------------------------------------
diff --git a/src/MNH/read_desfmn.f90 b/src/MNH/read_desfmn.f90
index 10c8623f5..ce23cbb2c 100644
--- a/src/MNH/read_desfmn.f90
+++ b/src/MNH/read_desfmn.f90
@@ -266,8 +266,8 @@ USE MODN_LATZ_EDFLX
 USE MODN_2D_FRC
 USE MODN_BLOWSNOW_n
 USE MODN_BLOWSNOW
-USE MODN_PROFILER_n
-USE MODN_STATION_n
+USE MODN_PROFILER_n, LDIAG_SURFRAD_PROF => LDIAG_SURFRAD
+USE MODN_STATION_n,  LDIAG_SURFRAD_STAT => LDIAG_SURFRAD
 !
 USE MODN_PARAM_LIMA
 ! USE MODN_FLYERS
diff --git a/src/MNH/read_exsegn.f90 b/src/MNH/read_exsegn.f90
index 4beb49197..b633ed2c6 100644
--- a/src/MNH/read_exsegn.f90
+++ b/src/MNH/read_exsegn.f90
@@ -401,12 +401,12 @@ USE MODN_PARAM_MFSHALL_n
 USE MODN_PARAM_n    ! realized in subroutine ini_model n
 USE MODN_PARAM_RAD_n
 USE MODN_PASPOL
-USE MODN_PROFILER_n
+USE MODN_PROFILER_n, LDIAG_SURFRAD_PROF => LDIAG_SURFRAD
 USE MODN_RECYCL_PARAM_n
 USE MODN_SALT
 USE MODN_SERIES
 USE MODN_SERIES_n
-USE MODN_STATION_n
+USE MODN_STATION_n,  LDIAG_SURFRAD_STAT => LDIAG_SURFRAD
 USE MODN_TURB
 USE MODN_TURB_CLOUD
 USE MODN_TURB_n
diff --git a/src/MNH/stationn.f90 b/src/MNH/stationn.f90
index 3b823f7ba..a9a08e66a 100644
--- a/src/MNH/stationn.f90
+++ b/src/MNH/stationn.f90
@@ -82,6 +82,7 @@ END MODULE MODI_STATION_n
 !*      0. DECLARATIONS
 !          ------------
 !
+USE MODD_ALLSTATION_n,  ONLY: LDIAG_SURFRAD_STAT
 USE MODD_CONF,          ONLY: LCARTESIAN
 USE MODD_CST,           ONLY: XPI
 USE MODD_DIAG_IN_RUN
@@ -89,7 +90,6 @@ USE MODD_GRID,          ONLY: XBETA, XLON0, XRPK
 USE MODD_PARAMETERS,    ONLY: JPVEXT
 USE MODD_PARAM_n,       ONLY: CRAD
 USE MODD_STATION_n
-USE MODD_ALLSTATION_n,  ONLY: LDIAG_SURFRAD
 !
 USE MODE_STATPROF_TOOLS, ONLY: STATPROF_INSTANT, STATPROF_INTERP_2D, STATPROF_INTERP_2D_U, STATPROF_INTERP_2D_V
 !
@@ -168,7 +168,7 @@ STATION: DO JS = 1,NUMBSTAT_LOC
   IF ( CRAD /= 'NONE' ) TSTATIONS(JS)%XTSRAD(IN) = STATPROF_INTERP_2D( TSTATIONS(JS), PTS )
   TSTATIONS(JS)%XZS  = STATPROF_INTERP_2D( TSTATIONS(JS), PZ(:,:,1+JPVEXT))
 
-  IF ( LDIAG_SURFRAD ) THEN
+  IF ( LDIAG_SURFRAD_STAT ) THEN
     TSTATIONS(JS)%XZON10M(IN) = STATPROF_INTERP_2D( TSTATIONS(JS), XCURRENT_ZON10M )
     TSTATIONS(JS)%XMER10M(IN) = STATPROF_INTERP_2D( TSTATIONS(JS), XCURRENT_MER10M )
     TSTATIONS(JS)%XT2M   (IN) = STATPROF_INTERP_2D( TSTATIONS(JS), XCURRENT_T2M    )
diff --git a/src/MNH/statprof_tools.f90 b/src/MNH/statprof_tools.f90
index c1bb9de5e..f7e0e7596 100644
--- a/src/MNH/statprof_tools.f90
+++ b/src/MNH/statprof_tools.f90
@@ -35,15 +35,14 @@ CONTAINS
 SUBROUTINE PROFILER_ALLOCATE( TPPROFILER, KSTORE )
 ! ################################################
 
-!   USE MODD_ALLSTATION_n, ONLY: LDIAG_SURFRAD
-  USE MODD_CONF_n,       ONLY: NRR
-  USE MODD_DIAG_IN_RUN,  ONLY: LDIAG_IN_RUN
-  USE MODD_DIM_n,        ONLY: NKMAX
-  USE MODD_NSV,          ONLY: NSV
-  USE MODD_PARAMETERS,   ONLY: JPVEXT, XUNDEF
-  USE MODD_PARAM_n,      ONLY: CCLOUD, CRAD, CTURB
-  USE MODD_RADIATIONS_n, ONLY: NAER
-  USE MODD_SURF_PAR,     ONLY: XUNDEF_SFX => XUNDEF
+  USE MODD_ALLPROFILER_n, ONLY: LDIAG_SURFRAD_PROF
+  USE MODD_CONF_n,        ONLY: NRR
+  USE MODD_DIM_n,         ONLY: NKMAX
+  USE MODD_NSV,           ONLY: NSV
+  USE MODD_PARAMETERS,    ONLY: JPVEXT, XUNDEF
+  USE MODD_PARAM_n,       ONLY: CCLOUD, CRAD, CTURB
+  USE MODD_RADIATIONS_n,  ONLY: NAER
+  USE MODD_SURF_PAR,      ONLY: XUNDEF_SFX => XUNDEF
 
   IMPLICIT NONE
 
@@ -96,7 +95,7 @@ SUBROUTINE PROFILER_ALLOCATE( TPPROFILER, KSTORE )
   ALLOCATE( TPPROFILER%XZWD(KSTORE) )
   ALLOCATE( TPPROFILER%XZHD(KSTORE) )
 
-!   IF ( LDIAG_IN_RUN ) THEN
+  IF ( LDIAG_SURFRAD_PROF ) THEN
     ALLOCATE( TPPROFILER%XT2M   (KSTORE) )
     ALLOCATE( TPPROFILER%XQ2M   (KSTORE) )
     ALLOCATE( TPPROFILER%XHU2M  (KSTORE) )
@@ -117,10 +116,11 @@ SUBROUTINE PROFILER_ALLOCATE( TPPROFILER, KSTORE )
       ALLOCATE( TPPROFILER%XDSTAOD(KSTORE) )
       ALLOCATE( TPPROFILER%XSLTAOD(KSTORE) )
     END IF
-    ALLOCATE( TPPROFILER%XTKE_DISS(KSTORE, IKU) )
     ALLOCATE( TPPROFILER%XSFCO2   (KSTORE) )
   END IF
 
+  ALLOCATE( TPPROFILER%XTKE_DISS(KSTORE, IKU) )
+
   TPPROFILER%XZON      (:,:) = XUNDEF
   TPPROFILER%XMER      (:,:) = XUNDEF
   TPPROFILER%XFF       (:,:) = XUNDEF
@@ -148,7 +148,7 @@ SUBROUTINE PROFILER_ALLOCATE( TPPROFILER, KSTORE )
   TPPROFILER%XZWD(:) = XUNDEF
   TPPROFILER%XZHD(:) = XUNDEF
 
-!   IF ( LDIAG_IN_RUN ) THEN
+  IF ( LDIAG_SURFRAD_PROF ) THEN
     TPPROFILER%XT2M   (:) = XUNDEF_SFX
     TPPROFILER%XQ2M   (:) = XUNDEF_SFX
     TPPROFILER%XHU2M  (:) = XUNDEF_SFX
@@ -169,17 +169,18 @@ SUBROUTINE PROFILER_ALLOCATE( TPPROFILER, KSTORE )
       TPPROFILER%XDSTAOD(:) = XUNDEF
       TPPROFILER%XSLTAOD(:) = XUNDEF
     END IF
-    TPPROFILER%XTKE_DISS(:,:) = XUNDEF
     TPPROFILER%XSFCO2(:)      = XUNDEF
   END IF
 
+  TPPROFILER%XTKE_DISS(:,:) = XUNDEF
+
 END SUBROUTINE PROFILER_ALLOCATE
 
 ! ##############################################
 SUBROUTINE STATION_ALLOCATE( TPSTATION, KSTORE )
 ! ##############################################
 
-  USE MODD_ALLSTATION_n, ONLY: LDIAG_SURFRAD
+  USE MODD_ALLSTATION_n, ONLY: LDIAG_SURFRAD_STAT
   USE MODD_CONF_n,       ONLY: NRR
   USE MODD_NSV,          ONLY: NSV
   USE MODD_PARAMETERS,   ONLY: XUNDEF
@@ -208,7 +209,7 @@ SUBROUTINE STATION_ALLOCATE( TPSTATION, KSTORE )
   ELSE
     ALLOCATE( TPSTATION%XTSRAD(0) )
   END IF
-  IF ( LDIAG_SURFRAD ) THEN
+  IF ( LDIAG_SURFRAD_STAT ) THEN
     ALLOCATE( TPSTATION%XT2M   (KSTORE) )
     ALLOCATE( TPSTATION%XQ2M   (KSTORE) )
     ALLOCATE( TPSTATION%XHU2M  (KSTORE) )
@@ -241,7 +242,7 @@ SUBROUTINE STATION_ALLOCATE( TPSTATION, KSTORE )
   TPSTATION%XR(:,:)    = XUNDEF
   TPSTATION%XSV(:,:)   = XUNDEF
   TPSTATION%XTSRAD(:)  = XUNDEF
-  IF ( LDIAG_SURFRAD ) THEN
+  IF ( LDIAG_SURFRAD_STAT ) THEN
     TPSTATION%XT2M(:)    = XUNDEF_SFX
     TPSTATION%XQ2M(:)    = XUNDEF_SFX
     TPSTATION%XHU2M(:)   = XUNDEF_SFX
diff --git a/src/MNH/write_aircraft_balloon.f90 b/src/MNH/write_aircraft_balloon.f90
index 2284be8ea..9c3c5b584 100644
--- a/src/MNH/write_aircraft_balloon.f90
+++ b/src/MNH/write_aircraft_balloon.f90
@@ -203,7 +203,6 @@ USE MODD_AIRCRAFT_BALLOON
 use modd_budget,           only: NLVL_CATEGORY, NLVL_SUBCATEGORY, NLVL_GROUP, NLVL_SHAPE, NLVL_TIMEAVG, NLVL_NORM, NLVL_MASK, &
                                  tbudiachrometadata
 USE MODD_CST,              ONLY: XRV
-USE MODD_DIAG_IN_RUN,      ONLY: LDIAG_IN_RUN
 use modd_field,            only: NMNHDIM_LEVEL, NMNHDIM_FLYER_PROC, NMNHDIM_FLYER_TIME, NMNHDIM_UNUSED, &
                                  tfieldmetadata_base, TYPEREAL
 USE MODD_IO,               ONLY: TFILEDATA
@@ -268,7 +267,7 @@ IPROCZ = SIZE(TPFLYER%XRTZ,2)+ SIZE(TPFLYER%XRZ,2)+ SIZE(TPFLYER%XRZ,3)+  SIZE(T
 
 IF (NSV_LIMA_BEG<=NSV_LIMA_END) IPROCZ= IPROCZ+ SIZE(TPFLYER%XCCZ,2) + SIZE(TPFLYER%XCRZ,2)
 IF (SIZE(TPFLYER%XTKE  )>0) IPROC = IPROC + 1
-IF (LDIAG_IN_RUN) IPROC = IPROC + 1
+IPROC = IPROC + 1 ! TKE_DISS
 IF (LORILAM) IPROC = IPROC + JPMODE*3
 IF (LDUST) IPROC = IPROC + NMODE_DST*3
 IF (SIZE(TPFLYER%XTSRAD)>0) IPROC = IPROC + 1
@@ -352,9 +351,7 @@ DO JSV=1,SIZE(TPFLYER%XSVW_FLUX,2)
   WRITE ( YTITLE, FMT = '( A, I3.3 )' ) 'SV_FLUX', JSV
   call Add_point( Trim( ytitle ), 'scalar flux', 'SVUNIT m s-1', tpflyer%xsvw_flux(:,jsv) )
 END DO
-IF (LDIAG_IN_RUN) THEN
-  call Add_point( 'Tke_Diss', 'TKE dissipation rate', 'm2 s-2', tpflyer%xtke_diss(:) )
-ENDIF
+call Add_point( 'Tke_Diss', 'TKE dissipation rate', 'm2 s-2', tpflyer%xtke_diss(:) )
 !
 IF (SIZE(TPFLYER%XSV,2)>=1) THEN
   ! Scalar variables
diff --git a/src/MNH/write_desfmn.f90 b/src/MNH/write_desfmn.f90
index 4f27769f9..cb4330d88 100644
--- a/src/MNH/write_desfmn.f90
+++ b/src/MNH/write_desfmn.f90
@@ -216,8 +216,8 @@ USE MODN_BLOWSNOW_n
 USE MODN_BLOWSNOW
 USE MODN_IBM_PARAM_n
 USE MODN_RECYCL_PARAM_n
-USE MODN_PROFILER_n
-USE MODN_STATION_n
+USE MODN_PROFILER_n,     LDIAG_SURFRAD_PROF => LDIAG_SURFRAD
+USE MODN_STATION_n,      LDIAG_SURFRAD_STAT => LDIAG_SURFRAD
 USE MODN_FIRE_n
 USE MODN_FLYERS
 !
diff --git a/src/MNH/write_lfifm1_for_diag_supp.f90 b/src/MNH/write_lfifm1_for_diag_supp.f90
index 57a71520c..06eee20bc 100644
--- a/src/MNH/write_lfifm1_for_diag_supp.f90
+++ b/src/MNH/write_lfifm1_for_diag_supp.f90
@@ -909,6 +909,7 @@ IF (CSURF=='EXTE') THEN
     CALL IO_Field_write(TPFILE,TZFIELD,XCURRENT_SFCO2)
   END IF
   !
+  IF ( CRAD /= 'NONE' ) THEN
   IF(ANY(XCURRENT_SWD/=XUNDEF))THEN
     TZFIELD = TFIELDMETADATA(                           &
       CMNHNAME   = 'SWD',                               &
@@ -968,6 +969,7 @@ IF (CSURF=='EXTE') THEN
       LTIMEDEP   = .TRUE.                               )
     CALL IO_Field_write(TPFILE,TZFIELD,XCURRENT_LWU)
   END IF
+  END IF ! CRAD/='NONE'
 END IF
 
 ! MODIF FP NOV 2012
diff --git a/src/MNH/write_profilern.f90 b/src/MNH/write_profilern.f90
index 94afe59ce..98e73e04c 100644
--- a/src/MNH/write_profilern.f90
+++ b/src/MNH/write_profilern.f90
@@ -51,10 +51,10 @@ SUBROUTINE WRITE_PROFILER_n( TPDIAFILE )
 !*      0. DECLARATIONS
 !          ------------
 !
+USE MODD_ALLPROFILER_n,   ONLY: LDIAG_SURFRAD_PROF
 USE MODD_CONF_n,          ONLY: NRR
 USE MODD_DIM_n,           ONLY: NKMAX
 USE MODD_IO,              ONLY: ISNPROC, ISP, TFILEDATA
-USE MODD_DIAG_IN_RUN,     ONLY: LDIAG_IN_RUN
 USE MODD_MPIF
 USE MODD_NSV,             ONLY: NSV
 USE MODD_PARAMETERS,      ONLY: JPVEXT
@@ -146,12 +146,12 @@ IF ( ISNPROC > 1 ) THEN
   IF ( CTURB == 'TKEL') IPACKSIZE = IPACKSIZE + ISTORE * IKU !Tke term
   IF ( CCLOUD == 'ICE3' .OR. CCLOUD == 'ICE4' ) IPACKSIZE = IPACKSIZE + ISTORE * IKU  !CIZ term
   IPACKSIZE = IPACKSIZE + 4 * ISTORE
-  IF ( LDIAG_IN_RUN ) THEN
+  IF ( LDIAG_SURFRAD_PROF ) THEN
     IPACKSIZE = IPACKSIZE + ISTORE * 10
-    IPACKSIZE = IPACKSIZE + ISTORE * IKU !XTKE_DISS term
     IF ( CRAD /= 'NONE' )  IPACKSIZE = IPACKSIZE + ISTORE * 8
     IPACKSIZE = IPACKSIZE + ISTORE !XSFCO2 term
   END IF
+  IPACKSIZE = IPACKSIZE + ISTORE * IKU !XTKE_DISS term
 
   ALLOCATE( ZPACK(IPACKSIZE) )
 END IF
@@ -216,7 +216,7 @@ PROFILER: DO JS = 1, INUMPROF
       ZPACK(IPOS:IPOS+ISTORE-1) = TPROFILERS(IDX)%XZWD(:); IPOS = IPOS + ISTORE
       ZPACK(IPOS:IPOS+ISTORE-1) = TPROFILERS(IDX)%XZHD(:); IPOS = IPOS + ISTORE
 
-      IF ( LDIAG_IN_RUN ) THEN
+      IF ( LDIAG_SURFRAD_PROF ) THEN
         ZPACK(IPOS:IPOS+ISTORE-1) = TPROFILERS(IDX)%XT2M;    IPOS = IPOS + ISTORE
         ZPACK(IPOS:IPOS+ISTORE-1) = TPROFILERS(IDX)%XQ2M;    IPOS = IPOS + ISTORE
         ZPACK(IPOS:IPOS+ISTORE-1) = TPROFILERS(IDX)%XHU2M;   IPOS = IPOS + ISTORE
@@ -237,10 +237,10 @@ PROFILER: DO JS = 1, INUMPROF
           ZPACK(IPOS:IPOS+ISTORE-1) = TPROFILERS(IDX)%XDSTAOD; IPOS = IPOS + ISTORE
           ZPACK(IPOS:IPOS+ISTORE-1) = TPROFILERS(IDX)%XSLTAOD; IPOS = IPOS + ISTORE
         END IF
-        ZPACK(IPOS:IPOS+ISTORE*IKU-1) = RESHAPE( TPROFILERS(IDX)%XTKE_DISS(:,:), [ISTORE*IKU] ) ; IPOS = IPOS + ISTORE * IKU
         ZPACK(IPOS:IPOS+ISTORE-1) = TPROFILERS(IDX)%XSFCO2;    IPOS = IPOS + ISTORE
       END IF
 
+      ZPACK(IPOS:IPOS+ISTORE*IKU-1) = RESHAPE( TPROFILERS(IDX)%XTKE_DISS(:,:), [ISTORE*IKU] ) ; IPOS = IPOS + ISTORE * IKU
 
       IF ( IPOS-1 /= IPACKSIZE ) &
         call Print_msg( NVERB_WARNING, 'IO', 'WRITE_PROFILER_n', 'IPOS-1 /= IPACKSIZE (sender side)', OLOCAL = .TRUE. )
@@ -304,7 +304,7 @@ PROFILER: DO JS = 1, INUMPROF
       TZPROFILER%XZWD(:) = ZPACK(IPOS:IPOS+ISTORE-1) ; IPOS = IPOS + ISTORE
       TZPROFILER%XZHD(:) = ZPACK(IPOS:IPOS+ISTORE-1) ; IPOS = IPOS + ISTORE
 
-      IF ( LDIAG_IN_RUN ) THEN
+      IF ( LDIAG_SURFRAD_PROF ) THEN
         TZPROFILER%XT2M    = ZPACK(IPOS:IPOS+ISTORE-1) ; IPOS = IPOS + ISTORE
         TZPROFILER%XQ2M    = ZPACK(IPOS:IPOS+ISTORE-1) ; IPOS = IPOS + ISTORE
         TZPROFILER%XHU2M   = ZPACK(IPOS:IPOS+ISTORE-1) ; IPOS = IPOS + ISTORE
@@ -325,10 +325,11 @@ PROFILER: DO JS = 1, INUMPROF
           TZPROFILER%XDSTAOD = ZPACK(IPOS:IPOS+ISTORE-1); IPOS = IPOS + ISTORE
           TZPROFILER%XSLTAOD = ZPACK(IPOS:IPOS+ISTORE-1); IPOS = IPOS + ISTORE
         END IF
-        TZPROFILER%XTKE_DISS(:,:) = RESHAPE( ZPACK(IPOS:IPOS+ISTORE*IKU-1), [ ISTORE, IKU ] ) ; IPOS = IPOS + ISTORE * IKU
         TZPROFILER%XSFCO2    = ZPACK(IPOS:IPOS+ISTORE-1); IPOS = IPOS + ISTORE
       END IF
 
+      TZPROFILER%XTKE_DISS(:,:) = RESHAPE( ZPACK(IPOS:IPOS+ISTORE*IKU-1), [ ISTORE, IKU ] ) ; IPOS = IPOS + ISTORE * IKU
+
       IF ( IPOS-1 /= IPACKSIZE ) &
         call Print_msg( NVERB_WARNING, 'IO', 'WRITE_PROFILER_n', 'IPOS-1 /= IPACKSIZE (receiver side)', OLOCAL = .TRUE. )
     END IF
@@ -346,13 +347,13 @@ END SUBROUTINE WRITE_PROFILER_n
 SUBROUTINE PROFILER_DIACHRO_n( TPDIAFILE, TPPROFILER )
 ! ####################################################
 
+USE MODD_ALLPROFILER_n,   ONLY: LDIAG_SURFRAD_PROF
 use modd_budget,          only: NLVL_CATEGORY, NLVL_SUBCATEGORY, NLVL_GROUP, NLVL_SHAPE, NLVL_TIMEAVG, NLVL_NORM, NLVL_MASK, &
                                 tbudiachrometadata
 USE MODD_CH_AEROSOL,      ONLY: LORILAM, JPMODE
 USE MODD_CONF,            ONLY: LCARTESIAN
 USE MODD_CONF_n,          ONLY: NRR
 USE MODD_CST,             ONLY: XRV
-USE MODD_DIAG_IN_RUN,     only: LDIAG_IN_RUN
 USE MODD_DUST,            ONLY: LDUST, NMODE_DST
 USE MODD_DIM_n,           ONLY: NKMAX
 use modd_field,           only: NMNHDIM_LEVEL, NMNHDIM_LEVEL_W, NMNHDIM_PROFILER_TIME, NMNHDIM_PROFILER_PROC, NMNHDIM_UNUSED, &
@@ -673,7 +674,7 @@ ALLOCATE ( XWORK6(1, 1, 1, ISTORE, 1, IPROC) )
 
 jproc = 0
 
-if ( ldiag_in_run ) then
+if ( ldiag_surfrad_prof ) then
   call Add_point( 'T2m',    '2-m temperature',               'K',       tpprofiler%xt2m    )
   call Add_point( 'Q2m',    '2-m humidity',                  'kg kg-1', tpprofiler%xq2m    )
   call Add_point( 'HU2m',   '2-m relative humidity',         'percent', tpprofiler%xhu2m   )
diff --git a/src/MNH/write_stationn.f90 b/src/MNH/write_stationn.f90
index 383e9aad2..903380597 100644
--- a/src/MNH/write_stationn.f90
+++ b/src/MNH/write_stationn.f90
@@ -44,7 +44,7 @@ SUBROUTINE WRITE_STATION_n( TPDIAFILE )
 !*      0. DECLARATIONS
 !          ------------
 !
-USE MODD_ALLSTATION_n,    ONLY: LDIAG_SURFRAD
+USE MODD_ALLSTATION_n,    ONLY: LDIAG_SURFRAD_STAT
 USE MODD_CONF_n,          ONLY: NRR
 USE MODD_IO,              ONLY: ISNPROC, ISP, TFILEDATA
 USE MODD_MPIF
@@ -130,7 +130,7 @@ IF ( ISNPROC > 1 ) THEN
   IPACKSIZE = IPACKSIZE + ISTORE * ( 5 + NRR + NSV )
   IF ( CTURB == 'TKEL') IPACKSIZE = IPACKSIZE + ISTORE !Tke term
   IF ( CRAD /= 'NONE' ) IPACKSIZE = IPACKSIZE + ISTORE !XTSRAD term
-  IF ( LDIAG_SURFRAD ) THEN
+  IF ( LDIAG_SURFRAD_STAT ) THEN
     IF ( CSURF == 'EXTE' ) IPACKSIZE = IPACKSIZE + ISTORE * 10
     IF ( CRAD /= 'NONE' )  IPACKSIZE = IPACKSIZE + ISTORE * 8
     IPACKSIZE = IPACKSIZE + ISTORE !XSFCO2 term
@@ -175,7 +175,7 @@ STATION: DO JS = 1, INUMSTAT
       IF ( CRAD /= 'NONE' ) THEN
         ZPACK(IPOS:IPOS+ISTORE-1) = TSTATIONS(IDX)%XTSRAD(:); IPOS = IPOS + ISTORE
       END IF
-      IF ( LDIAG_SURFRAD ) THEN
+      IF ( LDIAG_SURFRAD_STAT ) THEN
         IF ( CSURF == 'EXTE') THEN
           ZPACK(IPOS:IPOS+ISTORE-1) = TSTATIONS(IDX)%XT2M;    IPOS = IPOS + ISTORE
           ZPACK(IPOS:IPOS+ISTORE-1) = TSTATIONS(IDX)%XQ2M;    IPOS = IPOS + ISTORE
@@ -239,7 +239,7 @@ STATION: DO JS = 1, INUMSTAT
       IF ( CRAD /= 'NONE' ) THEN
         TZSTATION%XTSRAD(:) = ZPACK(IPOS:IPOS+ISTORE-1); IPOS = IPOS + ISTORE
       END IF
-      IF ( LDIAG_SURFRAD ) THEN
+      IF ( LDIAG_SURFRAD_STAT ) THEN
         IF ( CSURF == 'EXTE' ) THEN
           TZSTATION%XT2M    = ZPACK(IPOS:IPOS+ISTORE-1); IPOS = IPOS + ISTORE
           TZSTATION%XQ2M    = ZPACK(IPOS:IPOS+ISTORE-1); IPOS = IPOS + ISTORE
@@ -280,7 +280,7 @@ END SUBROUTINE WRITE_STATION_n
 SUBROUTINE STATION_DIACHRO_n( TPDIAFILE, TPSTATION )
 ! ##################################################
 
-USE MODD_ALLSTATION_n,  ONLY: LDIAG_SURFRAD
+USE MODD_ALLSTATION_n,  ONLY: LDIAG_SURFRAD_STAT
 use modd_budget,        only: NLVL_CATEGORY, NLVL_SUBCATEGORY, NLVL_GROUP, NLVL_SHAPE, NLVL_TIMEAVG, NLVL_NORM, NLVL_MASK, &
                               tbudiachrometadata
 USE MODD_CONF,          ONLY: LCARTESIAN
@@ -329,7 +329,7 @@ type(tfieldmetadata_base), dimension(:), allocatable :: tzfields
 IPROC = 5 + SIZE(TPSTATION%XR,2) + SIZE(TPSTATION%XSV,2)
 
 IF ( CTURB == 'TKEL' ) IPROC = IPROC + 1
-IF (LDIAG_SURFRAD) THEN
+IF (LDIAG_SURFRAD_STAT) THEN
   IF(CSURF=="EXTE") IPROC = IPROC + 10
   IF(CRAD/="NONE")  IPROC = IPROC + 8
   IPROC = IPROC + 1 ! XSFCO2 term
@@ -365,7 +365,7 @@ end if
 call Add_point( 'W',  'Air vertical speed',    'm s-1', tpstation%xw(:)  )
 call Add_point( 'Th', 'Potential temperature', 'K',     tpstation%xth(:) )
 
-if ( ldiag_surfrad ) then
+if ( ldiag_surfrad_stat ) then
   if ( csurf == "EXTE" ) then
     call Add_point( 'T2m',    '2-m temperature',        'K',       tpstation%xt2m(:)    )
     call Add_point( 'Q2m',    '2-m humidity',           'kg kg-1', tpstation%xq2m(:)    )
@@ -623,7 +623,7 @@ end if
 
 if ( crad /= 'NONE' ) call Add_point( 'Tsrad', 'Radiative Surface Temperature', 'K', tpstation%xtsrad(:) )
 
-if ( ldiag_surfrad ) call Add_point( 'SFCO2', 'CO2 Surface Flux', 'mg m-2 s-1', tpstation%xsfco2(:) )
+if ( ldiag_surfrad_stat ) call Add_point( 'SFCO2', 'CO2 Surface Flux', 'mg m-2 s-1', tpstation%xsfco2(:) )
 !
 !----------------------------------------------------------------------------
 !
-- 
GitLab