From 6974a6259f9b9ec510b62da36674ac4fffb9519f Mon Sep 17 00:00:00 2001
From: Quentin Rodier <quentin.rodier@meteo.fr>
Date: Mon, 18 Feb 2019 18:11:31 +0100
Subject: [PATCH] C.Lac 18/02/2019: adding rain fraction as a LES diagnostic

---
 src/MNH/ini_lesn.f90   | 5 ++++-
 src/MNH/lesn.f90       | 8 ++++++++
 src/MNH/modd_lesn.f90  | 5 +++++
 src/MNH/write_lesn.f90 | 7 ++++++-
 4 files changed, 23 insertions(+), 2 deletions(-)

diff --git a/src/MNH/ini_lesn.f90 b/src/MNH/ini_lesn.f90
index 3f398b419..3edab6944 100644
--- a/src/MNH/ini_lesn.f90
+++ b/src/MNH/ini_lesn.f90
@@ -33,7 +33,7 @@
 !!                       06/11/02 (V. Masson) add LES budgets
 !!                    10/2016 (C.Lac) Add droplet deposition
 !!  Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
-!!
+!!                     02/2019 (C. Lac) Add rain fraction as a LES diagnostic
 !! --------------------------------------------------------------------------
 !
 !*      0. DECLARATIONS
@@ -539,8 +539,10 @@ ELSE
 END IF
 IF (LUSERR ) THEN
   ALLOCATE(XLES_MEAN_Rr (NLES_K,NLES_TIMES,NLES_MASKS))
+  ALLOCATE(XLES_MEAN_RF (NLES_K,NLES_TIMES,NLES_MASKS))
 ELSE
   ALLOCATE(XLES_MEAN_Rr (0,0,0))
+  ALLOCATE(XLES_MEAN_RF (0,0,0))
 END IF
 IF (LUSERI ) THEN
   ALLOCATE(XLES_MEAN_Ri (NLES_K,NLES_TIMES,NLES_MASKS))
@@ -646,6 +648,7 @@ IF (LUSERC ) XLES_MEAN_KHt = XUNDEF
 IF (LUSERC ) XLES_MEAN_Rt  = XUNDEF
 IF (LUSERC ) XLES_MEAN_Rc  = XUNDEF
 IF (LUSERC ) XLES_MEAN_Cf  = XUNDEF
+IF (LUSERC ) XLES_MEAN_RF  = XUNDEF
 IF (LUSERC ) XLES_MEAN_INDCf  = XUNDEF
 IF (LUSERC ) XLES_MEAN_INDCf2 = XUNDEF
 IF (LUSERR ) XLES_MEAN_Rr  = XUNDEF
diff --git a/src/MNH/lesn.f90 b/src/MNH/lesn.f90
index eea67385b..3eae3fc04 100644
--- a/src/MNH/lesn.f90
+++ b/src/MNH/lesn.f90
@@ -42,6 +42,7 @@
 !!                10/14    (C.Lac) Correction on user masks
 !!                10/16    (C.Lac) Add ground droplet deposition amount
 !!  Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
+!!                     02/2019 (C. Lac) Add rain fraction as a LES diagnostic
 !!
 !! --------------------------------------------------------------------------
 !
@@ -107,6 +108,7 @@ REAL, DIMENSION(:,:,:),   ALLOCATABLE :: ZEW
 REAL, DIMENSION(:,:,:),   ALLOCATABLE :: ZINDCLD   !indice cloud si rc>0
 REAL, DIMENSION(:,:,:),   ALLOCATABLE :: ZINDCLD2  !indice cloud rc>1E-5
 REAL, DIMENSION(:,:,:),   ALLOCATABLE :: ZCLDFR_LES! CLDFR    on LES vertical grid
+REAL, DIMENSION(:,:,:),   ALLOCATABLE :: ZRAINFR_LES! RAINFR   on LES vertical grid
 REAL, DIMENSION(:,:,:),   ALLOCATABLE :: ZMASSF    ! massflux=rho*w
 REAL, DIMENSION(:,:,:),   ALLOCATABLE :: ZREHU     ! relative humidity
 
@@ -333,12 +335,14 @@ IF (LUSERR) THEN
   ALLOCATE(ZRWP_LES(IIU,IJU))
   ALLOCATE(ZINPRR3D_LES (IIU,IJU,NLES_K))
   ALLOCATE(ZEVAP3D_LES  (IIU,IJU,NLES_K))
+  ALLOCATE(ZRAINFR_LES(IIU,IJU,NLES_K))
 ELSE
   ALLOCATE(ZRR_LES  (0,0,0))
   ALLOCATE(ZMAXWRR2D(0,0))
   ALLOCATE(ZRWP_LES(0,0))
   ALLOCATE(ZINPRR3D_LES(0,0,0))
   ALLOCATE(ZEVAP3D_LES(0,0,0))
+  ALLOCATE(ZRAINFR_LES(0,0,0))
 END IF
 IF (LUSERI) THEN
   ALLOCATE(ZRI_LES    (IIU,IJU,NLES_K))
@@ -554,6 +558,7 @@ IF (LUSERR) THEN
   CALL LES_VER_INT(     XRT(:,:,:,IRR)  ,ZRR_LES )
   CALL LES_VER_INT(     XINPRR3D(:,:,:), ZINPRR3D_LES)
   CALL LES_VER_INT(    XEVAP3D(:,:,:), ZEVAP3D_LES)
+  CALL LES_VER_INT( XRAINFR(:,:,:)  ,ZRAINFR_LES )
 END IF
 IF (LUSERC) THEN
     DO JJ=1,IJU
@@ -779,6 +784,8 @@ END IF
                      XLES_ACPRR(NLES_CURRENT_TCOUNT)    )
 !   conversion de m en mm
     XLES_ACPRR(NLES_CURRENT_TCOUNT)=XLES_ACPRR(NLES_CURRENT_TCOUNT)*1000.
+    CALL LES_MEAN_ll ( ZRAINFR_LES, LLES_CURRENT_CART_MASK,            &
+                    XLES_MEAN_RF(:,NLES_CURRENT_TCOUNT,1)        )
 
   ENDIF
 !
@@ -1041,6 +1048,7 @@ DEALLOCATE(ZINDCLD2  )
 DEALLOCATE(ZINDCLD2D )
 DEALLOCATE(ZINDCLD2D2)
 DEALLOCATE(ZCLDFR_LES)
+DEALLOCATE(ZRAINFR_LES)
 DEALLOCATE(ZMASSF    )  
 DEALLOCATE(ZTEMP     )
 DEALLOCATE(ZREHU     )
diff --git a/src/MNH/modd_lesn.f90 b/src/MNH/modd_lesn.f90
index 582a56618..9fe76c3f8 100644
--- a/src/MNH/modd_lesn.f90
+++ b/src/MNH/modd_lesn.f90
@@ -40,6 +40,7 @@
 !!       O.Thouron  June,     2008  New radiation diagnostics
 !!                    10/2016 (C.Lac) Add droplet deposition
 !  P. Wautelet 08/02/2019: add missing NULL association for pointers
+!!                    02/2019 (C. Lac) Add rain fraction as a LES diagnostic
 !-------------------------------------------------------------------------------
 !
 !*       0.   DECLARATIONS
@@ -113,6 +114,7 @@ TYPE LES_t
   REAL, DIMENSION(:,:,:), POINTER :: XLES_MEAN_Cf=>NULL()  ! <CLDFR>
   REAL, DIMENSION(:,:,:), POINTER :: XLES_MEAN_INDCf=>NULL()  ! <Cf> tq rc>0 (0 OU 1)
   REAL, DIMENSION(:,:,:), POINTER :: XLES_MEAN_INDCf2=>NULL()  ! <Cf> tq rc>1E-5 (0 OU 1)
+  REAL, DIMENSION(:,:,:), POINTER :: XLES_MEAN_RF=>NULL()  ! <RAINFR>
   REAL, DIMENSION(:,:,:), POINTER :: XLES_MEAN_Mf=>NULL()  ! <Mf> 
   REAL, DIMENSION(:,:,:), POINTER :: XLES_MEAN_KHt=>NULL()! <Kh for thet
   REAL, DIMENSION(:,:,:), POINTER :: XLES_MEAN_KHr=>NULL()! <Kh for qr>
@@ -694,6 +696,7 @@ REAL, DIMENSION(:,:,:), POINTER :: XLES_MEAN_Rc=>NULL()
 REAL, DIMENSION(:,:,:), POINTER :: XLES_MEAN_Cf=>NULL()
 REAL, DIMENSION(:,:,:), POINTER :: XLES_MEAN_INDCf=>NULL()
 REAL, DIMENSION(:,:,:), POINTER :: XLES_MEAN_INDCf2=>NULL()
+REAL, DIMENSION(:,:,:), POINTER :: XLES_MEAN_RF=>NULL()
 REAL, DIMENSION(:,:,:), POINTER :: XLES_MEAN_Mf=>NULL()
 REAL, DIMENSION(:,:,:), POINTER :: XLES_MEAN_KHt=>NULL()
 REAL, DIMENSION(:,:,:), POINTER :: XLES_MEAN_KHr=>NULL()
@@ -1121,6 +1124,7 @@ LES_MODEL(KFROM)%XLES_MEAN_Rc=>XLES_MEAN_Rc
 LES_MODEL(KFROM)%XLES_MEAN_Cf=>XLES_MEAN_Cf
 LES_MODEL(KFROM)%XLES_MEAN_INDCf=>XLES_MEAN_INDCf
 LES_MODEL(KFROM)%XLES_MEAN_INDCf2=>XLES_MEAN_INDCf2
+LES_MODEL(KFROM)%XLES_MEAN_RF=>XLES_MEAN_RF
 LES_MODEL(KFROM)%XLES_MEAN_Mf=>XLES_MEAN_Mf
 LES_MODEL(KFROM)%XLES_MEAN_KHt=>XLES_MEAN_KHt
 LES_MODEL(KFROM)%XLES_MEAN_KHr=>XLES_MEAN_KHr
@@ -1549,6 +1553,7 @@ XLES_MEAN_Rc=>LES_MODEL(KTO)%XLES_MEAN_Rc
 XLES_MEAN_Cf=>LES_MODEL(KTO)%XLES_MEAN_Cf
 XLES_MEAN_INDCf=>LES_MODEL(KTO)%XLES_MEAN_INDCf
 XLES_MEAN_INDCf2=>LES_MODEL(KTO)%XLES_MEAN_INDCf2
+XLES_MEAN_RF=>LES_MODEL(KTO)%XLES_MEAN_RF
 XLES_MEAN_Mf=>LES_MODEL(KTO)%XLES_MEAN_Mf
 XLES_MEAN_KHt=>LES_MODEL(KTO)%XLES_MEAN_KHt
 XLES_MEAN_KHr=>LES_MODEL(KTO)%XLES_MEAN_KHr
diff --git a/src/MNH/write_lesn.f90 b/src/MNH/write_lesn.f90
index 260b53bf0..033e38661 100644
--- a/src/MNH/write_lesn.f90
+++ b/src/MNH/write_lesn.f90
@@ -56,7 +56,8 @@ END MODULE MODI_WRITE_LES_n
 !!                          11/15 (C.Lac) Add production terms of TKE
 !!                    10/2016 (C.Lac) Add droplet deposition
 !!  Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
-!!
+!!!!                     02/2019 (C. Lac) Add rain fraction as a LES diagnostic
+
 !! --------------------------------------------------------------------------
 !       
 !*      0. DECLARATIONS
@@ -382,6 +383,10 @@ IF (LUSERR) &
 CALL LES_DIACHRO_MASKS(TPDIAFILE,"MEAN_RR ",YSUBTITLE(:), &
   "Mean Rr Profile"//YSUBTITLE(:),"kg kg-1",XLES_MEAN_Rr,HLES_AVG)
 
+IF (LUSERR) &
+CALL LES_DIACHRO_MASKS(TPDIAFILE,"MEAN_RF ",YSUBTITLE(:), &
+  "Mean RF Profile"//YSUBTITLE(:),"1",XLES_MEAN_RF,HLES_AVG)
+
 IF (LUSERI) &
 CALL LES_DIACHRO_MASKS(TPDIAFILE,"MEAN_RI ",YSUBTITLE(:), &
   "Mean Ri Profile"//YSUBTITLE(:),"kg kg-1",XLES_MEAN_Ri,HLES_AVG)
-- 
GitLab