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