From d24c913efc254a43719dd95db023dd9106a83a3a Mon Sep 17 00:00:00 2001
From: Quentin Rodier <quentin.rodier@meteo.fr>
Date: Wed, 14 Aug 2024 11:51:09 +0200
Subject: [PATCH] Quentin 14/08/2024: mean_field add new namelist keys
 LMINMAX_MSLP, LMINMAX_WINDFFTKE and LMINMAX_VORT to avoid growing memory
 usage in case MEAN_FIELD activated but no need of these variables

---
 src/MNH/ini_modeln.f90       |  50 ++++++++-----
 src/MNH/mean_field.f90       | 131 ++++++++++++++++++-----------------
 src/MNH/modd_mean_field.f90  |   3 +
 src/MNH/modd_mean_fieldn.f90 |  78 +++++++++++++--------
 src/MNH/modn_mean.f90        |   3 +-
 src/MNH/write_lfin.f90       |  23 ++++--
 6 files changed, 170 insertions(+), 118 deletions(-)

diff --git a/src/MNH/ini_modeln.f90 b/src/MNH/ini_modeln.f90
index eff106fd5..085a09cde 100644
--- a/src/MNH/ini_modeln.f90
+++ b/src/MNH/ini_modeln.f90
@@ -778,16 +778,13 @@ IF (LMEAN_FIELD) THEN
   ALLOCATE(XTEMPM_MEAN(IIU,IJU,IKU))   ; XTEMPM_MEAN = 0.0
   ALLOCATE(XSVT_MEAN(IIU,IJU,IKU))     ; XSVT_MEAN  = 0.0
   IF (CTURB/='NONE') THEN
-    ALLOCATE(XTKEM_MEAN(IIU,IJU,IKU))
-    ALLOCATE(XTKEM_MAX(IIU,IJU,IKU))
-    ALLOCATE(XTKEMAX_MAX(IIU,IJU))
-    ALLOCATE(XTKE10MAX_MAX(IIU,IJU))
-    ALLOCATE(XTKE20MAX_MAX(IIU,IJU))
-    XTKEM_MAX = 0.0
-    XTKEM_MEAN = 0.0
-    XTKEMAX_MAX = 0.0
-    XTKE10MAX_MAX = 0.0
-    XTKE20MAX_MAX = 0.0
+    ALLOCATE(XTKEM_MEAN(IIU,IJU,IKU)) ; XTKEM_MAX = 0.0
+    ALLOCATE(XTKEM_MAX(IIU,IJU,IKU))  ; XTKEM_MEAN = 0.0
+    IF (LMINMAX_WINDFFTKE) THEN
+      ALLOCATE(XTKEMAX_MAX(IIU,IJU))  ;  XTKEMAX_MAX = 0.0
+      ALLOCATE(XTKE10MAX_MAX(IIU,IJU)) ;  XTKE10MAX_MAX = 0.0
+      ALLOCATE(XTKE20MAX_MAX(IIU,IJU)) ;  XTKE20MAX_MAX = 0.0
+    END IF
   ELSE
     ALLOCATE(XTKEM_MEAN(0,0,0))
     ALLOCATE(XTKEM_MAX(0,0,0))
@@ -834,14 +831,31 @@ IF (LMEAN_FIELD) THEN
   ALLOCATE(XTHM_MAX(IIU,IJU,IKU))     ; XTHM_MAX = 0.0
   ALLOCATE(XTEMPM_MAX(IIU,IJU,IKU))   ; XTEMPM_MAX = 0.0
   ALLOCATE(XPABSM_MAX(IIU,IJU,IKU))    ; XPABSM_MAX = 0.0
-  ALLOCATE(XUM1_MAX(IIU,IJU,IKU))      ; XUM1_MAX = -1.E20 ! 
-  ALLOCATE(XVM1_MAX(IIU,IJU,IKU))      ; XVM1_MAX = -1.E20 ! 
-  ALLOCATE(XWM1_MAX(IIU,IJU,IKU))      ; XWM1_MAX = -1.E20 ! 
-  ALLOCATE(XUM1_MIN(IIU,IJU,IKU))      ; XUM1_MIN = 1.E20 ! 
-  ALLOCATE(XVM1_MIN(IIU,IJU,IKU))      ; XVM1_MIN = 1.E20 ! 
-  ALLOCATE(XWM1_MIN(IIU,IJU,IKU))      ; XWM1_MIN = 1.E20 ! 
-  ALLOCATE(XMSLP_MAX(IIU,IJU))      ; XMSLP_MAX = -1.E20 ! 
-  ALLOCATE(XMSLP_MIN(IIU,IJU))      ; XMSLP_MIN = 1.E20 ! 
+!
+  IF (LMINMAX_VORT) THEN
+    ALLOCATE(XUM1_MAX(IIU,IJU,IKU))      ; XUM1_MAX = -1.E20 ! 
+    ALLOCATE(XVM1_MAX(IIU,IJU,IKU))      ; XVM1_MAX = -1.E20 ! 
+    ALLOCATE(XWM1_MAX(IIU,IJU,IKU))      ; XWM1_MAX = -1.E20 ! 
+    ALLOCATE(XUM1_MIN(IIU,IJU,IKU))      ; XUM1_MIN = 1.E20 ! 
+    ALLOCATE(XVM1_MIN(IIU,IJU,IKU))      ; XVM1_MIN = 1.E20 ! 
+    ALLOCATE(XWM1_MIN(IIU,IJU,IKU))      ; XWM1_MIN = 1.E20 !
+  ELSE
+    ALLOCATE(XUM1_MAX(0,0,0))
+    ALLOCATE(XVM1_MAX(0,0,0))
+    ALLOCATE(XWM1_MAX(0,0,0))
+    ALLOCATE(XUM1_MIN(0,0,0))
+    ALLOCATE(XVM1_MIN(0,0,0))
+    ALLOCATE(XWM1_MIN(0,0,0))
+  END IF
+!
+  IF (LMINMAX_MSLP) THEN
+    ALLOCATE(XMSLP_MAX(IIU,IJU))      ; XMSLP_MAX = -1.E20 ! 
+    ALLOCATE(XMSLP_MIN(IIU,IJU))      ; XMSLP_MIN = 1.E20 ! 
+  ELSE
+    ALLOCATE(XMSLP_MAX(0,0))
+    ALLOCATE(XMSLP_MIN(0,0))
+  END IF
+!
   IF (LUH_MAX) THEN
     ALLOCATE(XUH_MAX(IIU,IJU))      ; XUH_MAX = -1.E20
   ELSE
diff --git a/src/MNH/mean_field.f90 b/src/MNH/mean_field.f90
index b02091df3..d42770430 100644
--- a/src/MNH/mean_field.f90
+++ b/src/MNH/mean_field.f90
@@ -295,7 +295,7 @@ END IF
 !
 !-----------------------------------------------------------------------
 !
-!*       2. MAX
+!*       2. MAX & MIN
 !
   !
   ! Calculation of horizontal wind speed for maximum wind speed diagnostics
@@ -305,8 +305,6 @@ END IF
   !
   WHERE (ZAUX_WIDD(:,:,:).GT.360.0) ZAUX_WIDD(:,:,:) = ZAUX_WIDD(:,:,:) - 360.0
   !
-  ! Get maximum diagnostics
-  !
   DO JK=IKB,IKE
     DO JJ=IJB,IJE
       DO JI=IIB,IIE
@@ -314,6 +312,7 @@ END IF
         XUM_MAX(JI,JJ,JK) = MAX(XUM_MAX(JI,JJ,JK),PUT(JI,JJ,JK))
         XVM_MAX(JI,JJ,JK) = MAX(XVM_MAX(JI,JJ,JK),PVT(JI,JJ,JK))
         XWM_MAX(JI,JJ,JK) = MAX(XWM_MAX(JI,JJ,JK),PWT(JI,JJ,JK))
+        XWM_MIN(JI,JJ,JK) = MIN(XWM_MIN(JI,JJ,JK),PWT(JI,JJ,JK))
         XTHM_MAX(JI,JJ,JK) = MAX(XTHM_MAX(JI,JJ,JK),PTHT(JI,JJ,JK))
         XTEMPM_MAX(JI,JJ,JK) = MAX(XTEMPM_MAX(JI,JJ,JK),ZTEMPT(JI,JJ,JK))
         IF (CTURB/='NONE') XTKEM_MAX(JI,JJ,JK) =  &
@@ -328,7 +327,8 @@ END IF
       ENDDO
     ENDDO
   ENDDO
-
+!
+IF(LMINMAX_VORT) THEN
 ! Computation of vorticities (same as in the diag) 
   ZVOX(:,:,:)=GY_W_VW(PWT,XDYY,XDZZ,XDZY)-GZ_V_VW(PVT,XDZZ)
   ZVOX(:,:,2)=ZVOX(:,:,3)
@@ -340,9 +340,23 @@ END IF
   ZVOX=MYF(MZF(MXM(ZVOX)))
   ZVOY=MZF(MXF(MYM(ZVOY)))
   ZVOZ=MXF(MYF(MZM(ZVOZ)))
+  DO JK=IKB,IKE
+   DO JJ=IJB,IJE
+    DO JI=IIB,IIE
+      XUM1_MAX(JI,JJ,JK) = MAX(XUM1_MAX(JI,JJ,JK),ZVOX(JI,JJ,JK)) ! 
+      XVM1_MAX(JI,JJ,JK) = MAX(XVM1_MAX(JI,JJ,JK),ZVOY(JI,JJ,JK)) ! 
+      XWM1_MAX(JI,JJ,JK) = MAX(XWM1_MAX(JI,JJ,JK),ZVOZ(JI,JJ,JK)) ! 
+      XUM1_MIN(JI,JJ,JK) = MIN(XUM1_MIN(JI,JJ,JK),ZVOX(JI,JJ,JK)) ! 
+      XVM1_MIN(JI,JJ,JK) = MIN(XVM1_MIN(JI,JJ,JK),ZVOY(JI,JJ,JK)) ! 
+      XWM1_MIN(JI,JJ,JK) = MIN(XWM1_MIN(JI,JJ,JK),ZVOZ(JI,JJ,JK)) ! 
+    END DO
+   END DO
+  END DO
+END IF
 !
 ! Computation of P at sea level (same as in the diag) 
 !
+IF(LMINMAX_MSLP) THEN
   IF(NRR > 0) THEN
 !   compute the ratio : 1 + total water mass / dry air mass
     ZRV_OV_RD = XRV / XRD
@@ -373,31 +387,17 @@ END IF
 !  sea level pressure (hPa)
   ZMSLP(:,:) = 1.E-2*ZWORK4(:,:)*EXP(XG*XZS(:,:)/(XRD*ZMSLP(:,:)))
 !
-! vertical velocity at mass points
-  ZWM=MZF(PWT)
-!
-  DO JK=IKB,IKE
-   DO JJ=IJB,IJE
+  DO JJ=IJB,IJE
     DO JI=IIB,IIE
-      XUM_MAX(JI,JJ,JK) = MAX(XUM_MAX(JI,JJ,JK),PUT(JI,JJ,JK)) 
-      XVM_MAX(JI,JJ,JK) = MAX(XVM_MAX(JI,JJ,JK),PVT(JI,JJ,JK))
-      XWM_MAX(JI,JJ,JK) = MAX(XWM_MAX(JI,JJ,JK),ZWM(JI,JJ,JK))
-      XWM_MIN(JI,JJ,JK) = MIN(XWM_MIN(JI,JJ,JK),ZWM(JI,JJ,JK))    ! 
-      XUM1_MAX(JI,JJ,JK) = MAX(XUM1_MAX(JI,JJ,JK),ZVOX(JI,JJ,JK)) ! 
-      XVM1_MAX(JI,JJ,JK) = MAX(XVM1_MAX(JI,JJ,JK),ZVOY(JI,JJ,JK)) ! 
-      XWM1_MAX(JI,JJ,JK) = MAX(XWM1_MAX(JI,JJ,JK),ZVOZ(JI,JJ,JK)) ! 
-      XUM1_MIN(JI,JJ,JK) = MIN(XUM1_MIN(JI,JJ,JK),ZVOX(JI,JJ,JK)) ! 
-      XVM1_MIN(JI,JJ,JK) = MIN(XVM1_MIN(JI,JJ,JK),ZVOY(JI,JJ,JK)) ! 
-      XWM1_MIN(JI,JJ,JK) = MIN(XWM1_MIN(JI,JJ,JK),ZVOZ(JI,JJ,JK)) ! 
-      XTHM_MAX(JI,JJ,JK) = MAX(XTHM_MAX(JI,JJ,JK),PTHT(JI,JJ,JK)) 
-      XTEMPM_MAX(JI,JJ,JK) = MAX(XTEMPM_MAX(JI,JJ,JK),ZTEMPT(JI,JJ,JK))
-      IF (CTURB/='NONE') XTKEM_MAX(JI,JJ,JK) =  &
-              MAX(XTKEM_MAX(JI,JJ,JK),PTKET(JI,JJ,JK))
-      XPABSM_MAX(JI,JJ,JK) = MAX(XPABSM_MAX(JI,JJ,JK),PPABST(JI,JJ,JK))
+      XMSLP_MAX(JI,JJ) = MAX(XMSLP_MAX(JI,JJ),ZMSLP(JI,JJ)) ! 
+      XMSLP_MIN(JI,JJ) = MIN(XMSLP_MIN(JI,JJ),ZMSLP(JI,JJ)) ! 
     END DO
-   END DO
   END DO
-  !Computation of 10 m height wind gusts and 10 m + 20 m height TKE
+END IF
+!
+!
+!Computation of 10 m height wind gusts and 10 m + 20 m height TKE
+IF(LMINMAX_WINDFFTKE) THEN
   JK=IKB 
   DO WHILE((JK/=IKE-1))
    IF ((XZHATM(JK+1) .GE. 10.) .AND. (XZHATM(JK)<10.)) THEN
@@ -430,47 +430,50 @@ END IF
    END IF
    JK=JK+1
   END DO
-  IF (LUH_MAX) THEN
-    ! Computation of the Updraft Helicity (UH) 
-    JK=IKB 
-    !CALL PRINT_MSG(NVERB_INFO,'IO', 'ZUH:') !, ZUH)
-    ZUH = 0.
-  !
-    DO WHILE((XZHAT(JK+1) .LE. 5000))
-      IF (XZHAT(JK) .GE. 2000) THEN
-        DO JJ=IJB,IJE
-          DO JI=IIB,IIE
-            ZUH(JI,JJ)=ZUH(JI,JJ)+0.5*(XZHAT(JK+1)-XZHAT(JK))* &
-                       (PWT(JI,JJ,JK+1)*ZVOZ(JI,JJ,JK+1)+PWT(JI,JJ,JK)*ZVOZ(JI,JJ,JK))
-          END DO
+END IF
+!
+! Computation of the Updraft Helicity (UH) 
+IF (LUH_MAX) THEN
+  JK=IKB 
+  ZUH = 0.
+  DO WHILE((XZHAT(JK+1) .LE. 5000))
+    IF (XZHAT(JK) .GE. 2000) THEN
+      DO JJ=IJB,IJE
+        DO JI=IIB,IIE
+          ZUH(JI,JJ)=ZUH(JI,JJ)+0.5*(XZHAT(JK+1)-XZHAT(JK))* &
+                     (PWT(JI,JJ,JK+1)*ZVOZ(JI,JJ,JK+1)+PWT(JI,JJ,JK)*ZVOZ(JI,JJ,JK))
         END DO
-      END IF
-     JK=JK+1
+      END DO
+    END IF
+   JK=JK+1
+  END DO
+  DO JJ=IJB,IJE
+    DO JI=IIB,IIE
+      XUH_MAX(JI,JJ)= MAX(XUH_MAX(JI,JJ),ZUH(JI,JJ))
     END DO
-  END IF
+  END DO
+END IF
 !
+IF(LMINMAX_WINDFFTKE) THEN
   DO JJ=IJB,IJE
-   DO JI=IIB,IIE
-     ZWORK1(JI,JJ) = SQRT(ZCURRENT_ZON10M(JI,JJ)**2+ZCURRENT_MER10M(JI,JJ)**2)
-     XWMOD10MAX_MAX(JI,JJ) = MAX(XWMOD10MAX_MAX(JI,JJ),ZWORK1(JI,JJ))
-     IF (CTURB/='NONE') THEN 
-       ZWORK2(JI,JJ) =  4. * SQRT(PTKET(JI,JJ,IKB))
-       ZWORK3(JI,JJ) = 4. * SQRT(ZCURRENT_TKE10M(JI,JJ))
-       ZWORK4(JI,JJ) = 3.8 * SQRT(ZCURRENT_TKE20M(JI,JJ))
-       ZWORK5(JI,JJ) = ZWORK1(JI,JJ) + ZWORK2(JI,JJ)
-       ZWORK6(JI,JJ) = ZWORK1(JI,JJ) + ZWORK3(JI,JJ)
-       ZWORK7(JI,JJ) = ZWORK1(JI,JJ) + ZWORK4(JI,JJ)
-       XTKEMAX_MAX(JI,JJ) = MAX(XTKEMAX_MAX(JI,JJ),ZWORK2(JI,JJ))
-       XTKE10MAX_MAX(JI,JJ) = MAX(XTKE10MAX_MAX(JI,JJ),ZWORK3(JI,JJ))
-       XTKE20MAX_MAX(JI,JJ) = MAX(XTKE20MAX_MAX(JI,JJ),ZWORK4(JI,JJ))
-       XFF10MAX_MAX(JI,JJ) = MAX(XFF10MAX_MAX(JI,JJ),ZWORK5(JI,JJ))
-       XFF10MAX2_MAX(JI,JJ) = MAX(XFF10MAX2_MAX(JI,JJ),ZWORK6(JI,JJ))
-       XFF10MAX_AROME_MAX(JI,JJ) = MAX(XFF10MAX_AROME_MAX(JI,JJ),ZWORK7(JI,JJ))
-     END IF
-     XMSLP_MAX(JI,JJ) = MAX(XMSLP_MAX(JI,JJ),ZMSLP(JI,JJ)) ! 
-     XMSLP_MIN(JI,JJ) = MIN(XMSLP_MIN(JI,JJ),ZMSLP(JI,JJ)) ! 
-     IF (LUH_MAX) XUH_MAX(JI,JJ)= MAX(XUH_MAX(JI,JJ),ZUH(JI,JJ)) ! 
-   END DO
+    DO JI=IIB,IIE
+      ZWORK1(JI,JJ) = SQRT(ZCURRENT_ZON10M(JI,JJ)**2+ZCURRENT_MER10M(JI,JJ)**2)
+      XWMOD10MAX_MAX(JI,JJ) = MAX(XWMOD10MAX_MAX(JI,JJ),ZWORK1(JI,JJ))
+      IF (CTURB/='NONE') THEN
+        ZWORK2(JI,JJ) =  4. * SQRT(PTKET(JI,JJ,IKB))
+        ZWORK3(JI,JJ) = 4. * SQRT(ZCURRENT_TKE10M(JI,JJ))
+        ZWORK4(JI,JJ) = 3.8 * SQRT(ZCURRENT_TKE20M(JI,JJ))
+        ZWORK5(JI,JJ) = ZWORK1(JI,JJ) + ZWORK2(JI,JJ)
+        ZWORK6(JI,JJ) = ZWORK1(JI,JJ) + ZWORK3(JI,JJ)
+        ZWORK7(JI,JJ) = ZWORK1(JI,JJ) + ZWORK4(JI,JJ)
+        XTKEMAX_MAX(JI,JJ) = MAX(XTKEMAX_MAX(JI,JJ),ZWORK2(JI,JJ))
+        XTKE10MAX_MAX(JI,JJ) = MAX(XTKE10MAX_MAX(JI,JJ),ZWORK3(JI,JJ))
+        XTKE20MAX_MAX(JI,JJ) = MAX(XTKE20MAX_MAX(JI,JJ),ZWORK4(JI,JJ))
+        XFF10MAX_MAX(JI,JJ) = MAX(XFF10MAX_MAX(JI,JJ),ZWORK5(JI,JJ))
+        XFF10MAX2_MAX(JI,JJ) = MAX(XFF10MAX2_MAX(JI,JJ),ZWORK6(JI,JJ))
+        XFF10MAX_AROME_MAX(JI,JJ) = MAX(XFF10MAX_AROME_MAX(JI,JJ),ZWORK7(JI,JJ))
+      END IF
+    END DO
   END DO
-!
+END IF
 END SUBROUTINE MEAN_FIELD
diff --git a/src/MNH/modd_mean_field.f90 b/src/MNH/modd_mean_field.f90
index 88051e0d7..4741f6c9d 100644
--- a/src/MNH/modd_mean_field.f90
+++ b/src/MNH/modd_mean_field.f90
@@ -50,5 +50,8 @@ IMPLICIT NONE
 LOGICAL :: LMEAN_FIELD          
 LOGICAL :: LCOV_FIELD          
 LOGICAL :: LUH_MAX   
+LOGICAL :: LMINMAX_VORT
+LOGICAL :: LMINMAX_MSLP
+LOGICAL :: LMINMAX_WINDFFTKE 
 
 END MODULE MODD_MEAN_FIELD
diff --git a/src/MNH/modd_mean_fieldn.f90 b/src/MNH/modd_mean_fieldn.f90
index 21ef8f4b7..44f92e439 100644
--- a/src/MNH/modd_mean_fieldn.f90
+++ b/src/MNH/modd_mean_fieldn.f90
@@ -169,33 +169,43 @@ MEAN_FIELD_MODEL(KFROM)%XUM_MAX=>XUM_MAX
 MEAN_FIELD_MODEL(KFROM)%XVM_MAX=>XVM_MAX
 MEAN_FIELD_MODEL(KFROM)%XWM_MAX=>XWM_MAX
 MEAN_FIELD_MODEL(KFROM)%XWM_MIN=>XWM_MIN   !
-MEAN_FIELD_MODEL(KFROM)%XUM1_MAX=>XUM1_MAX !
-MEAN_FIELD_MODEL(KFROM)%XVM1_MAX=>XVM1_MAX !
-MEAN_FIELD_MODEL(KFROM)%XWM1_MAX=>XWM1_MAX !
-MEAN_FIELD_MODEL(KFROM)%XUM1_MIN=>XUM1_MIN !
-MEAN_FIELD_MODEL(KFROM)%XVM1_MIN=>XVM1_MIN !
-MEAN_FIELD_MODEL(KFROM)%XWM1_MIN=>XWM1_MIN !
 MEAN_FIELD_MODEL(KFROM)%XTHM_MAX=>XTHM_MAX
 MEAN_FIELD_MODEL(KFROM)%XTEMPM_MAX=>XTEMPM_MAX
 MEAN_FIELD_MODEL(KFROM)%XTKEM_MAX=>XTKEM_MAX
 MEAN_FIELD_MODEL(KFROM)%XPABSM_MAX=>XPABSM_MAX
-MEAN_FIELD_MODEL(KFROM)%XMSLP_MAX=>XMSLP_MAX !
-MEAN_FIELD_MODEL(KFROM)%XMSLP_MIN=>XMSLP_MIN !
+!
+IF (LMINMAX_VORT) THEN
+  MEAN_FIELD_MODEL(KFROM)%XUM1_MAX=>XUM1_MAX !
+  MEAN_FIELD_MODEL(KFROM)%XVM1_MAX=>XVM1_MAX !
+  MEAN_FIELD_MODEL(KFROM)%XWM1_MAX=>XWM1_MAX !
+  MEAN_FIELD_MODEL(KFROM)%XUM1_MIN=>XUM1_MIN !
+  MEAN_FIELD_MODEL(KFROM)%XVM1_MIN=>XVM1_MIN !
+  MEAN_FIELD_MODEL(KFROM)%XWM1_MIN=>XWM1_MIN !
+END IF
+!
+IF (LMINMAX_MSLP) THEN
+  MEAN_FIELD_MODEL(KFROM)%XMSLP_MAX=>XMSLP_MAX !
+  MEAN_FIELD_MODEL(KFROM)%XMSLP_MIN=>XMSLP_MIN !
+END IF
+!
 IF (LUH_MAX) MEAN_FIELD_MODEL(KFROM)%XUH_MAX=>XUH_MAX !
-MEAN_FIELD_MODEL(KFROM)%XWMOD10MAX_MAX=>XWMOD10MAX_MAX
-MEAN_FIELD_MODEL(KFROM)%XTKEMAX_MAX=>XTKEMAX_MAX
-MEAN_FIELD_MODEL(KFROM)%XTKE10MAX_MAX=>XTKE10MAX_MAX
-MEAN_FIELD_MODEL(KFROM)%XTKE20MAX_MAX=>XTKE20MAX_MAX
-MEAN_FIELD_MODEL(KFROM)%XFF10MAX_MAX=>XFF10MAX_MAX
-MEAN_FIELD_MODEL(KFROM)%XFF10MAX2_MAX=>XFF10MAX2_MAX
-MEAN_FIELD_MODEL(KFROM)%XFF10MAX_AROME_MAX=>XFF10MAX_AROME_MAX
+!
+IF (LMINMAX_WINDFFTKE) THEN
+  MEAN_FIELD_MODEL(KFROM)%XWMOD10MAX_MAX=>XWMOD10MAX_MAX
+  MEAN_FIELD_MODEL(KFROM)%XTKEMAX_MAX=>XTKEMAX_MAX
+  MEAN_FIELD_MODEL(KFROM)%XTKE10MAX_MAX=>XTKE10MAX_MAX
+  MEAN_FIELD_MODEL(KFROM)%XTKE20MAX_MAX=>XTKE20MAX_MAX
+  MEAN_FIELD_MODEL(KFROM)%XFF10MAX_MAX=>XFF10MAX_MAX
+  MEAN_FIELD_MODEL(KFROM)%XFF10MAX2_MAX=>XFF10MAX2_MAX
+  MEAN_FIELD_MODEL(KFROM)%XFF10MAX_AROME_MAX=>XFF10MAX_AROME_MAX
+END IF
 MEAN_FIELD_MODEL(KFROM)%XU2_M2=>XU2_M2
 MEAN_FIELD_MODEL(KFROM)%XV2_M2=>XV2_M2
 MEAN_FIELD_MODEL(KFROM)%XW2_M2=>XW2_M2
 MEAN_FIELD_MODEL(KFROM)%XTH2_M2=>XTH2_M2
 MEAN_FIELD_MODEL(KFROM)%XTEMP2_M2=>XTEMP2_M2
 MEAN_FIELD_MODEL(KFROM)%XPABS2_M2=>XPABS2_M2
-
+!
 IF (LCOV_FIELD) THEN
   MEAN_FIELD_MODEL(KFROM)%XUV_MEAN=>XUV_MEAN
   MEAN_FIELD_MODEL(KFROM)%XUW_MEAN=>XUW_MEAN
@@ -228,26 +238,36 @@ XUM_MAX=>MEAN_FIELD_MODEL(KTO)%XUM_MAX
 XVM_MAX=>MEAN_FIELD_MODEL(KTO)%XVM_MAX
 XWM_MAX=>MEAN_FIELD_MODEL(KTO)%XWM_MAX
 XWM_MIN=>MEAN_FIELD_MODEL(KTO)%XWM_MIN   !
+XTHM_MAX=>MEAN_FIELD_MODEL(KTO)%XTHM_MAX
+XTEMPM_MAX=>MEAN_FIELD_MODEL(KTO)%XTEMPM_MAX
+XTKEM_MAX=>MEAN_FIELD_MODEL(KTO)%XTKEM_MAX
+XPABSM_MAX=>MEAN_FIELD_MODEL(KTO)%XPABSM_MAX
+!
+IF (LMINMAX_VORT) THEN
 XUM1_MAX=>MEAN_FIELD_MODEL(KTO)%XUM1_MAX !
 XVM1_MAX=>MEAN_FIELD_MODEL(KTO)%XVM1_MAX !
 XWM1_MAX=>MEAN_FIELD_MODEL(KTO)%XWM1_MAX !
 XUM1_MIN=>MEAN_FIELD_MODEL(KTO)%XUM1_MIN !
 XVM1_MIN=>MEAN_FIELD_MODEL(KTO)%XVM1_MIN !
 XWM1_MIN=>MEAN_FIELD_MODEL(KTO)%XWM1_MIN !
-XTHM_MAX=>MEAN_FIELD_MODEL(KTO)%XTHM_MAX
-XTEMPM_MAX=>MEAN_FIELD_MODEL(KTO)%XTEMPM_MAX
-XTKEM_MAX=>MEAN_FIELD_MODEL(KTO)%XTKEM_MAX
-XPABSM_MAX=>MEAN_FIELD_MODEL(KTO)%XPABSM_MAX
-XMSLP_MAX=>MEAN_FIELD_MODEL(KTO)%XMSLP_MAX !
-XMSLP_MIN=>MEAN_FIELD_MODEL(KTO)%XMSLP_MIN !
+END IF
+!
+IF (LMINMAX_MSLP) THEN
+  XMSLP_MAX=>MEAN_FIELD_MODEL(KTO)%XMSLP_MAX !
+  XMSLP_MIN=>MEAN_FIELD_MODEL(KTO)%XMSLP_MIN !
+END IF
+!
 IF (LUH_MAX) XUH_MAX=>MEAN_FIELD_MODEL(KTO)%XUH_MAX !
-XWMOD10MAX_MAX=>MEAN_FIELD_MODEL(KTO)%XWMOD10MAX_MAX
-XTKEMAX_MAX=>MEAN_FIELD_MODEL(KTO)%XTKEMAX_MAX
-XTKE10MAX_MAX=>MEAN_FIELD_MODEL(KTO)%XTKE10MAX_MAX
-XTKE20MAX_MAX=>MEAN_FIELD_MODEL(KTO)%XTKE20MAX_MAX
-XFF10MAX_MAX=>MEAN_FIELD_MODEL(KTO)%XFF10MAX_MAX
-XFF10MAX2_MAX=>MEAN_FIELD_MODEL(KTO)%XFF10MAX2_MAX
-XFF10MAX_AROME_MAX=>MEAN_FIELD_MODEL(KTO)%XFF10MAX_AROME_MAX
+!
+IF (LMINMAX_WINDFFTKE) THEN
+  XWMOD10MAX_MAX=>MEAN_FIELD_MODEL(KTO)%XWMOD10MAX_MAX
+  XTKEMAX_MAX=>MEAN_FIELD_MODEL(KTO)%XTKEMAX_MAX
+  XTKE10MAX_MAX=>MEAN_FIELD_MODEL(KTO)%XTKE10MAX_MAX
+  XTKE20MAX_MAX=>MEAN_FIELD_MODEL(KTO)%XTKE20MAX_MAX
+  XFF10MAX_MAX=>MEAN_FIELD_MODEL(KTO)%XFF10MAX_MAX
+  XFF10MAX2_MAX=>MEAN_FIELD_MODEL(KTO)%XFF10MAX2_MAX
+  XFF10MAX_AROME_MAX=>MEAN_FIELD_MODEL(KTO)%XFF10MAX_AROME_MAX
+END IF
 
 XU2_M2=>MEAN_FIELD_MODEL(KTO)%XU2_M2
 XV2_M2=>MEAN_FIELD_MODEL(KTO)%XV2_M2
diff --git a/src/MNH/modn_mean.f90 b/src/MNH/modn_mean.f90
index 75e7854b7..888b5cf7b 100644
--- a/src/MNH/modn_mean.f90
+++ b/src/MNH/modn_mean.f90
@@ -38,7 +38,8 @@ USE MODD_MEAN_FIELD
 !
 IMPLICIT NONE
 !
-NAMELIST/NAM_MEAN/LMEAN_FIELD,LCOV_FIELD,LUH_MAX
+NAMELIST/NAM_MEAN/LMEAN_FIELD,LCOV_FIELD,LUH_MAX, LMINMAX_MSLP, LMINMAX_VORT, &
+                  LMINMAX_WINDFFTKE
 !
 !
 END MODULE MODN_MEAN
diff --git a/src/MNH/write_lfin.f90 b/src/MNH/write_lfin.f90
index 96a02c412..1bf4808c3 100644
--- a/src/MNH/write_lfin.f90
+++ b/src/MNH/write_lfin.f90
@@ -792,7 +792,8 @@ IF (MEAN_COUNT /= 0) THEN
     !
   END IF
 !
-! Min and max vorticity modif 
+IF(LMINMAX_VORT) THEN
+! Min and max vorticity
 !
   TZFIELD%CMNHNAME   = 'UM1_MAX'
   TZFIELD%CLONGNAME  = 'UM1_MAX'
@@ -807,6 +808,8 @@ IF (MEAN_COUNT /= 0) THEN
   TZFIELD%CCOMMENT   = 'X_Y_Z_x_maximum relative vorticity'
   CALL IO_Field_write(TPFILE,TZFIELD,XUM1_MIN)
 !
+END IF
+!
 !
   TZFIELD = TFIELDMETADATA(                          &
     CMNHNAME   = 'generic for mean_count variables', & !Temporary name to ease identification
@@ -837,7 +840,8 @@ IF (MEAN_COUNT /= 0) THEN
   TZFIELD%CCOMMENT   = 'X_Y_Z_V component of max wind'
   CALL IO_Field_write(TPFILE,TZFIELD,XVM_MAX)
 !
-! Min and max vorticity modif 
+IF(LMINMAX_VORT) THEN
+! Min and max vorticity
 !
   TZFIELD%CMNHNAME   = 'VM1_MAX'
   TZFIELD%CLONGNAME  = 'VM1_MAX'
@@ -848,9 +852,10 @@ IF (MEAN_COUNT /= 0) THEN
   TZFIELD%CMNHNAME   = 'VM1_MIN'
   TZFIELD%CLONGNAME  = 'VM1_MIN'
   TZFIELD%CUNITS     = 's-1'
-  TZFIELD%CCOMMENT   = 'X_Y_Z_y_maximum relative vorticity'
+  TZFIELD%CCOMMENT   = 'X_Y_Z_y_minimum relative vorticity'
   CALL IO_Field_write(TPFILE,TZFIELD,XVM1_MIN)
 !
+END IF
 !
   TZFIELD = TFIELDMETADATA(                          &
     CMNHNAME   = 'generic for mean_count variables', & !Temporary name to ease identification
@@ -887,7 +892,8 @@ IF (MEAN_COUNT /= 0) THEN
   TZFIELD%CCOMMENT   = 'X_Y_Z_vertical min wind'
   CALL IO_Field_write(TPFILE,TZFIELD,XWM_MIN)
 !
-! Min and max vorticity modif 
+IF(LMINMAX_VORT) THEN
+! Min and max vorticity
 !
   TZFIELD%CMNHNAME   = 'WM1_MAX'
   TZFIELD%CLONGNAME  = 'WM1_MAX'
@@ -901,6 +907,7 @@ IF (MEAN_COUNT /= 0) THEN
   TZFIELD%CCOMMENT   = 'X_Y_Z_z_maximum relative vorticity'
   CALL IO_Field_write(TPFILE,TZFIELD,XWM1_MIN)
 !
+END IF
 !
   !
   ! Calculation of mean horizontal wind speed and
@@ -1083,6 +1090,7 @@ IF (MEAN_COUNT /= 0) THEN
     CALL IO_Field_write(TPFILE,TZFIELD,XTKEM_MAX)
   END IF
 !
+IF(LMINMAX_WINDFFTKE) THEN
   TZFIELD = TFIELDMETADATA(                          &
     CMNHNAME   = 'generic for mean_count variables', & !Temporary name to ease identification
     CSTDNAME   = '',                                 &
@@ -1116,6 +1124,7 @@ IF (MEAN_COUNT /= 0) THEN
   TZFIELD%CUNITS     = 'm s-1'
   TZFIELD%CCOMMENT   = 'X_Y_max XTKE20MAX'
   CALL IO_Field_write(TPFILE,TZFIELD,XTKE20MAX_MAX)
+ END IF
 !
   TZFIELD%CMNHNAME   = 'FF10MAX_MA'
   TZFIELD%CLONGNAME  = 'FF10MAX_MA'
@@ -1134,8 +1143,9 @@ IF (MEAN_COUNT /= 0) THEN
   TZFIELD%CUNITS     = 'm s-1'
   TZFIELD%CCOMMENT   = 'X_Y_max FF10MAX_AROME'
   CALL IO_Field_write(TPFILE,TZFIELD,XFF10MAX_AROME_MAX)
- END IF
 !
+END IF
+IF(LMINMAX_MSLP) THEN
 ! Min and max sea level pressure 
   TZFIELD%CMNHNAME   = 'MSLP_MAX'
   TZFIELD%CLONGNAME  = 'MSLP_MAX'
@@ -1148,7 +1158,8 @@ IF (MEAN_COUNT /= 0) THEN
   TZFIELD%CUNITS     = 'hPa'
   TZFIELD%CCOMMENT   = 'X_Y_min Mean Sea Level Pressure'
   CALL IO_Field_write(TPFILE,TZFIELD,XMSLP_MIN)
-!   
+!
+END IF
 !
   ! Max updraft helicity 
   IF (LUH_MAX) THEN
-- 
GitLab