diff --git a/src/MNH/ini_lesn.f90 b/src/MNH/ini_lesn.f90 index d2c4d2801d397f62740d6d97973416325b3abae3..538042c95e6cf121c954ba5f23647acf5a5ea90a 100644 --- a/src/MNH/ini_lesn.f90 +++ b/src/MNH/ini_lesn.f90 @@ -1700,6 +1700,10 @@ ALLOCATE(XLES_CF2tot (NLES_TIMES)) ALLOCATE(XLES_LWP (NLES_TIMES)) ALLOCATE(XLES_LWPVAR (NLES_TIMES)) ALLOCATE(XLES_RWP (NLES_TIMES)) +ALLOCATE(XLES_IWP (NLES_TIMES)) +ALLOCATE(XLES_SWP (NLES_TIMES)) +ALLOCATE(XLES_GWP (NLES_TIMES)) +ALLOCATE(XLES_HWP (NLES_TIMES)) ALLOCATE(XLES_INT_TKE (NLES_TIMES)) ALLOCATE(XLES_ZMAXCF (NLES_TIMES)) ALLOCATE(XLES_ZMAXCF2 (NLES_TIMES)) @@ -1730,6 +1734,10 @@ XLES_CF2tot = XUNDEF XLES_LWP = XUNDEF XLES_LWPVAR = XUNDEF XLES_RWP = XUNDEF +XLES_IWP = XUNDEF +XLES_SWP = XUNDEF +XLES_GWP = XUNDEF +XLES_HWP = XUNDEF XLES_INT_TKE = XUNDEF XLES_ZMAXCF = XUNDEF XLES_ZMAXCF2 = XUNDEF diff --git a/src/MNH/lesn.f90 b/src/MNH/lesn.f90 index dce40e30c4946e0cb5da6d26c392c464e13bdc8b..139d5aa95096f649ebf8b229ec0f920471061c95 100644 --- a/src/MNH/lesn.f90 +++ b/src/MNH/lesn.f90 @@ -153,6 +153,7 @@ REAL, DIMENSION(:), ALLOCATABLE :: ZLES_MEAN_DRtDZ! drt/dz mean on LES REAL, DIMENSION(:), ALLOCATABLE :: ZLES_MEAN_DTHDZ! dth/dz mean on LES vertical grid REAL, DIMENSION(:,:), ALLOCATABLE :: ZLES_MEAN_DSVDZ! drt/dz mean on LES vertical grid REAL, DIMENSION(:,:), ALLOCATABLE :: ZLWP_LES, ZRWP_LES, ZTKET_LES +REAL, DIMENSION(:,:), ALLOCATABLE :: ZIWP_LES, ZSWP_LES, ZGWP_LES, ZHWP_LES REAL, DIMENSION(:,:), ALLOCATABLE :: ZINDCLD2D ! REAL, DIMENSION(:,:), ALLOCATABLE :: ZINDCLD2D2 ! REAL, DIMENSION(:,:), ALLOCATABLE :: ZLWP_ANOM ! lwp anomaly @@ -323,23 +324,31 @@ ELSE END IF IF (LUSERI) THEN ALLOCATE(ZRI_LES (IIU,IJU,NLES_K)) + ALLOCATE(ZIWP_LES(IIU,IJU)) ELSE ALLOCATE(ZRI_LES (0,0,0)) + ALLOCATE(ZIWP_LES(0,0)) END IF IF (LUSERS) THEN ALLOCATE(ZRS_LES (IIU,IJU,NLES_K)) + ALLOCATE(ZSWP_LES(IIU,IJU)) ELSE ALLOCATE(ZRS_LES (0,0,0)) + ALLOCATE(ZSWP_LES(0,0)) END IF IF (LUSERG) THEN ALLOCATE(ZRG_LES (IIU,IJU,NLES_K)) + ALLOCATE(ZGWP_LES(IIU,IJU)) ELSE ALLOCATE(ZRG_LES (0,0,0)) + ALLOCATE(ZGWP_LES(0,0)) END IF IF (LUSERH) THEN ALLOCATE(ZRH_LES (IIU,IJU,NLES_K)) + ALLOCATE(ZHWP_LES(IIU,IJU)) ELSE ALLOCATE(ZRH_LES (0,0,0)) + ALLOCATE(ZHWP_LES(0,0)) END IF IF (NSV>0) THEN ALLOCATE(ZSV_LES (IIU,IJU,NLES_K,NSV)) @@ -556,18 +565,46 @@ ENDIF IF (LUSERI) THEN IRR = IRR + 1 CALL LES_VER_INT( XRT(:,:,:,IRR) ,ZRI_LES ) + ZIWP_LES(:,:)=0. + DO JK=1,NLES_K-1 + ZIWP_LES(:,:) = ZIWP_LES(:,:) + (ZZZ_LES(:,:,JK+1)-ZZZ_LES(:,:,JK)) & + * (ZRI_LES(:,:,JK)) * ZRHO_LES(:,:,JK) + END DO + CALL LES_MEAN_ll ( ZIWP_LES, LLES_CURRENT_CART_MASK(:,:,1), & + XLES_IWP(NLES_CURRENT_TCOUNT) ) END IF IF (LUSERS) THEN IRR = IRR + 1 CALL LES_VER_INT( XRT(:,:,:,IRR) ,ZRS_LES ) + ZSWP_LES(:,:)=0. + DO JK=1,NLES_K-1 + ZSWP_LES(:,:) = ZSWP_LES(:,:) + (ZZZ_LES(:,:,JK+1)-ZZZ_LES(:,:,JK)) & + * (ZRS_LES(:,:,JK)) * ZRHO_LES(:,:,JK) + END DO + CALL LES_MEAN_ll ( ZSWP_LES, LLES_CURRENT_CART_MASK(:,:,1), & + XLES_SWP(NLES_CURRENT_TCOUNT) ) END IF IF (LUSERG) THEN IRR = IRR + 1 CALL LES_VER_INT( XRT(:,:,:,IRR) ,ZRG_LES ) + ZGWP_LES(:,:)=0. + DO JK=1,NLES_K-1 + ZGWP_LES(:,:) = ZGWP_LES(:,:) + (ZZZ_LES(:,:,JK+1)-ZZZ_LES(:,:,JK)) & + * (ZRG_LES(:,:,JK)) * ZRHO_LES(:,:,JK) + END DO + CALL LES_MEAN_ll ( ZGWP_LES, LLES_CURRENT_CART_MASK(:,:,1), & + XLES_GWP(NLES_CURRENT_TCOUNT) ) END IF IF (LUSERH) THEN IRR = IRR + 1 CALL LES_VER_INT( XRT(:,:,:,IRR) ,ZRH_LES ) + ZHWP_LES(:,:)=0. + DO JK=1,NLES_K-1 + ZHWP_LES(:,:) = ZHWP_LES(:,:) + (ZZZ_LES(:,:,JK+1)-ZZZ_LES(:,:,JK)) & + * (ZRH_LES(:,:,JK)) * ZRHO_LES(:,:,JK) + END DO + CALL LES_MEAN_ll ( ZHWP_LES, LLES_CURRENT_CART_MASK(:,:,1), & + XLES_HWP(NLES_CURRENT_TCOUNT) ) END IF IF (NSV>0) THEN DO JSV=1,NSV @@ -986,6 +1023,10 @@ DEALLOCATE(ZRR_LES ) DEALLOCATE(ZZZ_LES) DEALLOCATE(ZLWP_LES ) DEALLOCATE(ZRWP_LES ) +DEALLOCATE(ZIWP_LES ) +DEALLOCATE(ZSWP_LES ) +DEALLOCATE(ZGWP_LES ) +DEALLOCATE(ZHWP_LES ) DEALLOCATE(ZINPRR3D_LES) DEALLOCATE(ZEVAP3D_LES) DEALLOCATE(ZRI_LES ) diff --git a/src/MNH/modd_lesn.f90 b/src/MNH/modd_lesn.f90 index 2dc9a03c5dffd39e184349e1037a765344c756a3..1bf463e9edb2527279913cc84bde71c915cb35bf 100644 --- a/src/MNH/modd_lesn.f90 +++ b/src/MNH/modd_lesn.f90 @@ -563,6 +563,10 @@ TYPE LES_t REAL, DIMENSION(:), POINTER :: XLES_LWP=>NULL() ! lwpath REAL, DIMENSION(:), POINTER :: XLES_LWPVAR=>NULL() ! lwpath variance REAL, DIMENSION(:), POINTER :: XLES_RWP=>NULL() ! rain w path + REAL, DIMENSION(:), POINTER :: XLES_IWP=>NULL() ! ice w path + REAL, DIMENSION(:), POINTER :: XLES_SWP=>NULL() ! snow w path + REAL, DIMENSION(:), POINTER :: XLES_GWP=>NULL() ! graupel w path + REAL, DIMENSION(:), POINTER :: XLES_HWP=>NULL() ! hail w path REAL, DIMENSION(:), POINTER :: XLES_INT_TKE=>NULL() ! vert. integratedtke REAL, DIMENSION(:), POINTER :: XLES_INPRR=>NULL() ! inst precip rate REAL, DIMENSION(:), POINTER :: XLES_RAIN_INPRR=>NULL()!flux prec rainy cell @@ -1007,6 +1011,10 @@ REAL, DIMENSION(:), POINTER :: XLES_CF2tot=>NULL() REAL, DIMENSION(:), POINTER :: XLES_LWP=>NULL() REAL, DIMENSION(:), POINTER :: XLES_LWPVAR=>NULL() REAL, DIMENSION(:), POINTER :: XLES_RWP=>NULL() +REAL, DIMENSION(:), POINTER :: XLES_IWP=>NULL() +REAL, DIMENSION(:), POINTER :: XLES_SWP=>NULL() +REAL, DIMENSION(:), POINTER :: XLES_GWP=>NULL() +REAL, DIMENSION(:), POINTER :: XLES_HWP=>NULL() REAL, DIMENSION(:), POINTER :: XLES_INT_TKE=>NULL() REAL, DIMENSION(:), POINTER :: XLES_INPRR=>NULL() REAL, DIMENSION(:), POINTER :: XLES_RAIN_INPRR=>NULL() @@ -1423,6 +1431,10 @@ LES_MODEL(KFROM)%XLES_CF2tot=>XLES_CF2tot LES_MODEL(KFROM)%XLES_LWP=>XLES_LWP LES_MODEL(KFROM)%XLES_LWPVAR=>XLES_LWPVAR LES_MODEL(KFROM)%XLES_RWP=>XLES_RWP +LES_MODEL(KFROM)%XLES_IWP=>XLES_IWP +LES_MODEL(KFROM)%XLES_SWP=>XLES_SWP +LES_MODEL(KFROM)%XLES_GWP=>XLES_GWP +LES_MODEL(KFROM)%XLES_HWP=>XLES_HWP LES_MODEL(KFROM)%XLES_INT_TKE=>XLES_INT_TKE LES_MODEL(KFROM)%XLES_INPRR=>XLES_INPRR LES_MODEL(KFROM)%XLES_RAIN_INPRR=>XLES_RAIN_INPRR @@ -1840,6 +1852,10 @@ XLES_CF2tot=>LES_MODEL(KTO)%XLES_CF2tot XLES_LWP=>LES_MODEL(KTO)%XLES_LWP XLES_LWPVAR=>LES_MODEL(KTO)%XLES_LWPVAR XLES_RWP=>LES_MODEL(KTO)%XLES_RWP +XLES_IWP=>LES_MODEL(KTO)%XLES_IWP +XLES_SWP=>LES_MODEL(KTO)%XLES_SWP +XLES_GWP=>LES_MODEL(KTO)%XLES_GWP +XLES_HWP=>LES_MODEL(KTO)%XLES_HWP XLES_INT_TKE=>LES_MODEL(KTO)%XLES_INT_TKE XLES_INPRR=>LES_MODEL(KTO)%XLES_INPRR XLES_RAIN_INPRR=>LES_MODEL(KTO)%XLES_RAIN_INPRR diff --git a/src/MNH/write_lesn.f90 b/src/MNH/write_lesn.f90 index 30952eacd3ff159a5f8f5a9ab6fb5af593b7b75b..8b03a32f2d7a1ee74ff2ac059a14c05a8dbb503b 100644 --- a/src/MNH/write_lesn.f90 +++ b/src/MNH/write_lesn.f90 @@ -1322,6 +1322,22 @@ IF (HLES_AVG==' ' .OR. HLES_AVG=='A') THEN CALL LES_DIACHRO_SURF("RWP ", & "Rain Water path","kg/m2",XLES_RWP,HLES_AVG) + IF (LUSERI) & + CALL LES_DIACHRO_SURF("IWP ", & + "Ice Water path","kg/m2",XLES_IWP,HLES_AVG) + + IF (LUSERS) & + CALL LES_DIACHRO_SURF("SWP ", & + "Snow Water path","kg/m2",XLES_SWP,HLES_AVG) + + IF (LUSERG) & + CALL LES_DIACHRO_SURF("GWP ", & + "Graupel Water path","kg/m2",XLES_GWP,HLES_AVG) + + IF (LUSERH) & + CALL LES_DIACHRO_SURF("HWP ", & + "Hail Water path","kg/m2",XLES_HWP,HLES_AVG) + IF (LUSERR) & CALL LES_DIACHRO_SURF("PREC_FRAC ", & "Fract of col where rain at surface","",XLES_PRECFR,HLES_AVG)