From 002e41962837005800aca4b5862d720f854a7cc2 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?S=C3=A9bastien=20Riette?= <sebastien.riette@meteo.fr>
Date: Wed, 29 Jun 2022 11:05:39 +0200
Subject: [PATCH] S. Riette 29/06/2022 first version of main_rain_ice test
 program

---
 src/common/micro/ini_rain_ice.F90             |  62 ++--
 src/mesonh/micro/ini_rain_ice.f90             |   4 +-
 ...ata_mod.F90 => getdata_ice_adjust_mod.F90} |   4 +-
 src/testprogs/ice_adjust/main_ice_adjust.F90  |   4 +-
 src/testprogs/rain_ice/main_rain_ice.F90      | 304 ++++++++++++++++++
 .../xrd_getoptions.F90                        |   0
 .../{ice_adjust => support}/xrd_unix_env.F90  |   0
 7 files changed, 341 insertions(+), 37 deletions(-)
 rename src/testprogs/ice_adjust/{getdata_mod.F90 => getdata_ice_adjust_mod.F90} (99%)
 create mode 100644 src/testprogs/rain_ice/main_rain_ice.F90
 rename src/testprogs/{ice_adjust => support}/xrd_getoptions.F90 (100%)
 rename src/testprogs/{ice_adjust => support}/xrd_unix_env.F90 (100%)

diff --git a/src/common/micro/ini_rain_ice.F90 b/src/common/micro/ini_rain_ice.F90
index 85eb2f093..ecb3b4244 100644
--- a/src/common/micro/ini_rain_ice.F90
+++ b/src/common/micro/ini_rain_ice.F90
@@ -166,9 +166,12 @@ REAL     :: PWETLBDAR_MAX,PWETLBDAH_MAX,PWETLBDAR_MIN,PWETLBDAH_MIN
 !
 REAL(KIND=JPRB) :: ZHOOK_HANDLE
 !-------------------------------------------------------------------------------
-!
 IF (LHOOK) CALL DR_HOOK('INI_RAIN_ICE',0,ZHOOK_HANDLE)
 !
+IF(.NOT.ASSOCIATED(XCEXVT)) CALL RAIN_ICE_DESCR_ASSOCIATE()
+IF(.NOT.ASSOCIATED(XFSEDC)) CALL RAIN_ICE_PARAM_ASSOCIATE()
+!
+!
 !*       0.     FUNCTION STATEMENTS
 !               -------------------
 !
@@ -178,13 +181,27 @@ IF (LHOOK) CALL DR_HOOK('INI_RAIN_ICE',0,ZHOOK_HANDLE)
 !
 !
 !
-IF (ALLOCATED(XRTMIN)) THEN       ! In case of nesting microphysics constants of
+IF (ASSOCIATED(XRTMIN)) THEN       ! In case of nesting microphysics constants of
                                   ! MODD_RAIN_ICE_PARAM are computed only once,
                                   ! but if INI_RAIN_ICE has been called already
                                   ! one must change the XRTMIN size.
-  DEALLOCATE(XRTMIN)
+  CALL RAIN_ICE_DESCR_DEALLOCATE()
+END IF
+!
+IF (HCLOUD == 'ICE4') THEN
+  CALL RAIN_ICE_DESCR_ALLOCATE(7)
+ELSE IF (HCLOUD == 'ICE3') THEN
+  CALL RAIN_ICE_DESCR_ALLOCATE(6)
 END IF
 !
+XRTMIN(1) = 1.0E-20
+XRTMIN(2) = 1.0E-20
+XRTMIN(3) = 1.0E-20
+XRTMIN(4) = 1.0E-20
+XRTMIN(5) = 1.0E-15
+XRTMIN(6) = 1.0E-15
+IF (HCLOUD == 'ICE4') XRTMIN(7) = 1.0E-15
+!
 !-------------------------------------------------------------------------------
 !
 !*       2.     CHARACTERISTICS OF THE SPECIES
@@ -370,20 +387,6 @@ XLBDAG_MAX = 100000.0
 ZCONC_MAX  = 1.E6 ! Maximal concentration for falling particules set to 1 per cc
 XLBDAS_MAX = ( ZCONC_MAX/XCCS )**(1./XCXS)
 !
-IF (HCLOUD == 'ICE4') THEN
-  ALLOCATE( XRTMIN(7) )
-ELSE IF (HCLOUD == 'ICE3') THEN
-  ALLOCATE( XRTMIN(6) )
-END IF
-!
-XRTMIN(1) = 1.0E-20
-XRTMIN(2) = 1.0E-20
-XRTMIN(3) = 1.0E-20
-XRTMIN(4) = 1.0E-20
-XRTMIN(5) = 1.0E-15
-XRTMIN(6) = 1.0E-15
-IF (HCLOUD == 'ICE4') XRTMIN(7) = 1.0E-15
-!
 XCONC_SEA=1E8 ! 100/cm3
 XCONC_LAND=3E8 ! 300/cm3
 XCONC_URBAN=5E8 ! 500/cm3
@@ -545,8 +548,7 @@ IF (GFLAG) THEN
   WRITE(UNIT=KLUOUT,FMT='(" Crit. ice cont. XCRIAUTI=",E13.6)') XCRIAUTI
   WRITE(UNIT=KLUOUT,FMT='(" A Coef. for cirrus law XACRIAUTI=",E13.6)')XACRIAUTI
   WRITE(UNIT=KLUOUT,FMT='(" B Coef. for cirrus law XBCRIAUTI=",E13.6)')XBCRIAUTI
-  WRITE(UNIT=KLUOUT, &
-   & FMT='(" Temp degC at which cirrus law starts to be used=",E13.6)') XT0CRIAUTI
+  WRITE(UNIT=KLUOUT,FMT='(" Temp degC at which cirrus law starts to be used=",E13.6)') XT0CRIAUTI
 END IF
 !
 !
@@ -628,9 +630,9 @@ XGAMINC_BOUND_MIN = 1.0E-1 ! Minimal value of (Lbda * D_cs^lim)**alpha
 XGAMINC_BOUND_MAX = 1.0E7  ! Maximal value of (Lbda * D_cs^lim)**alpha
 ZRATE = EXP(LOG(XGAMINC_BOUND_MAX/XGAMINC_BOUND_MIN)/REAL(NGAMINC-1))
 !
-IF( .NOT.ALLOCATED(XGAMINC_RIM1) ) ALLOCATE( XGAMINC_RIM1(NGAMINC) )
-IF( .NOT.ALLOCATED(XGAMINC_RIM2) ) ALLOCATE( XGAMINC_RIM2(NGAMINC) )
-IF( .NOT.ALLOCATED(XGAMINC_RIM4) ) ALLOCATE( XGAMINC_RIM4(NGAMINC) )
+IF( .NOT.ASSOCIATED(XGAMINC_RIM1) ) CALL RAIN_ICE_PARAM_ALLOCATE('XGAMINC_RIM1', NGAMINC)
+IF( .NOT.ASSOCIATED(XGAMINC_RIM2) ) CALL RAIN_ICE_PARAM_ALLOCATE('XGAMINC_RIM2', NGAMINC)
+IF( .NOT.ASSOCIATED(XGAMINC_RIM4) ) CALL RAIN_ICE_PARAM_ALLOCATE('XGAMINC_RIM4', NGAMINC)
 !
 DO J1=1,NGAMINC
   ZBOUND = XGAMINC_BOUND_MIN*ZRATE**(J1-1)
@@ -680,9 +682,9 @@ IND      = 50    ! Interval number, collection efficiency and infinite diameter
 ZESR     = 1.0   ! factor used to integrate the dimensional distributions when
 ZFDINFTY = 20.0  ! computing the kernels XKER_RACCSS, XKER_RACCS and XKER_SACCRG
 !
-IF( .NOT.ALLOCATED(XKER_RACCSS) ) ALLOCATE( XKER_RACCSS(NACCLBDAS,NACCLBDAR) )
-IF( .NOT.ALLOCATED(XKER_RACCS ) ) ALLOCATE( XKER_RACCS (NACCLBDAS,NACCLBDAR) )
-IF( .NOT.ALLOCATED(XKER_SACCRG) ) ALLOCATE( XKER_SACCRG(NACCLBDAR,NACCLBDAS) )
+IF( .NOT.ASSOCIATED(XKER_RACCSS) ) CALL RAIN_ICE_PARAM_ALLOCATE('XKER_RACCSS', NACCLBDAS,NACCLBDAR)
+IF( .NOT.ASSOCIATED(XKER_RACCS ) ) CALL RAIN_ICE_PARAM_ALLOCATE('XKER_RACCS', NACCLBDAS,NACCLBDAR)
+IF( .NOT.ASSOCIATED(XKER_SACCRG) ) CALL RAIN_ICE_PARAM_ALLOCATE('XKER_SACCRG', NACCLBDAR,NACCLBDAS)
 !
 CALL READ_XKER_RACCS (KACCLBDAS,KACCLBDAR,KND,                                &
                       PALPHAS,PNUS,PALPHAR,PNUR,PESR,PBS,PBR,PCS,PDS,PCR,PDR, &
@@ -890,7 +892,7 @@ IND      = 50    ! Interval number, collection efficiency and infinite diameter
 ZEGS     = 1.0   ! factor used to integrate the dimensional distributions when
 ZFDINFTY = 20.0  ! computing the kernels XKER_SDRYG
 !
-IF( .NOT.ALLOCATED(XKER_SDRYG) ) ALLOCATE( XKER_SDRYG(NDRYLBDAG,NDRYLBDAS) )
+IF( .NOT.ASSOCIATED(XKER_SDRYG) ) CALL RAIN_ICE_PARAM_ALLOCATE('XKER_SDRYG', NDRYLBDAG,NDRYLBDAS)
 !
 CALL READ_XKER_SDRYG (KDRYLBDAG,KDRYLBDAS,KND,                              &
                    PALPHAG,PNUG,PALPHAS,PNUS,PEGS,PBS,PCG,PDG,PCS,PDS,      &
@@ -956,7 +958,7 @@ IND      = 50    ! Number of interval used to integrate the dimensional
 ZEGR     = 1.0   ! distributions when computing the kernel XKER_RDRYG
 ZFDINFTY = 20.0
 !
-IF( .NOT.ALLOCATED(XKER_RDRYG) ) ALLOCATE( XKER_RDRYG(NDRYLBDAG,NDRYLBDAR) )
+IF( .NOT.ASSOCIATED(XKER_RDRYG) ) CALL RAIN_ICE_PARAM_ALLOCATE('XKER_RDRYG', NDRYLBDAG,NDRYLBDAR)
 !
 CALL READ_XKER_RDRYG (KDRYLBDAG,KDRYLBDAR,KND,                              &
                    PALPHAG,PNUG,PALPHAR,PNUR,PEGR,PBR,PCG,PDG,PCR,PDR,      &
@@ -1094,7 +1096,7 @@ IND      = 50    ! Interval number, collection efficiency and infinite diameter
 ZEHS     = 1.0   ! factor used to integrate the dimensional distributions when
 ZFDINFTY = 20.0  ! computing the kernels XKER_SWETH
 !
-IF( .NOT.ALLOCATED(XKER_SWETH) ) ALLOCATE( XKER_SWETH(NWETLBDAH,NWETLBDAS) )
+IF( .NOT.ASSOCIATED(XKER_SWETH) ) CALL RAIN_ICE_PARAM_ALLOCATE('XKER_SWETH', NWETLBDAH,NWETLBDAS)
 !
 CALL READ_XKER_SWETH (KWETLBDAH,KWETLBDAS,KND,                              &
                    PALPHAH,PNUH,PALPHAS,PNUS,PEHS,PBS,PCH,PDH,PCS,PDS,      &
@@ -1160,7 +1162,7 @@ IND      = 50    ! Number of interval used to integrate the dimensional
 ZEHG     = 1.0   ! distributions when computing the kernel XKER_GWETH
 ZFDINFTY = 20.0
 !
-IF( .NOT.ALLOCATED(XKER_GWETH) ) ALLOCATE( XKER_GWETH(NWETLBDAH,NWETLBDAG) )
+IF( .NOT.ASSOCIATED(XKER_GWETH) ) CALL RAIN_ICE_PARAM_ALLOCATE('XKER_GWETH', NWETLBDAH,NWETLBDAG)
 !
 CALL READ_XKER_GWETH (KWETLBDAH,KWETLBDAG,KND,                              &
                    PALPHAH,PNUH,PALPHAG,PNUG,PEHG,PBG,PCH,PDH,PCG,PDG,      &
@@ -1226,7 +1228,7 @@ IND      = 50    ! Number of interval used to integrate the dimensional
 ZEHR     = 1.0   ! distributions when computing the kernel XKER_RWETH
 ZFDINFTY = 20.0
 !
-IF( .NOT.ALLOCATED(XKER_RWETH) ) ALLOCATE( XKER_RWETH(NWETLBDAH,NWETLBDAR) )
+IF( .NOT.ASSOCIATED(XKER_RWETH) ) CALL RAIN_ICE_PARAM_ALLOCATE('XKER_RWETH', NWETLBDAH,NWETLBDAR)
 !
 CALL READ_XKER_RWETH (KWETLBDAH,KWETLBDAR,KND,                              &
                    PALPHAH,PNUH,PALPHAR,PNUR,PEHR,PBR,PCH,PDH,PCR,PDR,      &
diff --git a/src/mesonh/micro/ini_rain_ice.f90 b/src/mesonh/micro/ini_rain_ice.f90
index 4e9c50f03..18b47a203 100644
--- a/src/mesonh/micro/ini_rain_ice.f90
+++ b/src/mesonh/micro/ini_rain_ice.f90
@@ -178,7 +178,6 @@ IF (LHOOK) CALL DR_HOOK('INI_RAIN_ICE',0,ZHOOK_HANDLE)
 !
 IF(.NOT.ASSOCIATED(XCEXVT)) CALL RAIN_ICE_DESCR_ASSOCIATE()
 IF(.NOT.ASSOCIATED(XFSEDC)) CALL RAIN_ICE_PARAM_ASSOCIATE()
-
 !
 !
 !*       0.     FUNCTION STATEMENTS
@@ -578,8 +577,7 @@ IF (GFLAG) THEN
   WRITE(UNIT=KLUOUT,FMT='(" Crit. ice cont. XCRIAUTI=",E13.6)') XCRIAUTI
   WRITE(UNIT=KLUOUT,FMT='(" A Coef. for cirrus law XACRIAUTI=",E13.6)')XACRIAUTI
   WRITE(UNIT=KLUOUT,FMT='(" B Coef. for cirrus law XBCRIAUTI=",E13.6)')XBCRIAUTI
-  WRITE(UNIT=KLUOUT, &
-   & FMT='(" Temp degC at which cirrus law starts to be used=",E13.6)') XT0CRIAUTI
+  WRITE(UNIT=KLUOUT,FMT='(" Temp degC at which cirrus law starts to be used=",E13.6)') XT0CRIAUTI
 END IF
 !
 !
diff --git a/src/testprogs/ice_adjust/getdata_mod.F90 b/src/testprogs/ice_adjust/getdata_ice_adjust_mod.F90
similarity index 99%
rename from src/testprogs/ice_adjust/getdata_mod.F90
rename to src/testprogs/ice_adjust/getdata_ice_adjust_mod.F90
index fa2a6ebcf..faf5d03f6 100644
--- a/src/testprogs/ice_adjust/getdata_mod.F90
+++ b/src/testprogs/ice_adjust/getdata_ice_adjust_mod.F90
@@ -1,4 +1,4 @@
-MODULE GETDATA_MOD
+MODULE GETDATA_ICE_ADJUST_MOD
 
 USE OMP_LIB
 
@@ -25,7 +25,7 @@ END INTERFACE
 
 CONTAINS
 
-SUBROUTINE GETDATA (NPROMA, NGPBLKS, NFLEVG, PRHODJ_B, PEXNREF_B, PRHODREF_B, PPABSM_B, PTHT_B, ZICE_CLD_WGT_B, &
+SUBROUTINE GETDATA_ICE_ADJUST (NPROMA, NGPBLKS, NFLEVG, PRHODJ_B, PEXNREF_B, PRHODREF_B, PPABSM_B, PTHT_B, ZICE_CLD_WGT_B, &
 & ZSIGQSAT_B, PSIGS_B, PMFCONV_B, PRC_MF_B, PRI_MF_B, PCF_MF_B, PTHS_B, PRS_B, PSRCS_B, PCLDFR_B, PHLC_HRC_B, PHLC_HCF_B,   &
 & PHLI_HRI_B, PHLI_HCF_B, ZRS_B, ZZZ_B, PRS_OUT_B, PSRCS_OUT_B, PCLDFR_OUT_B, PHLC_HRC_OUT_B, PHLC_HCF_OUT_B,         &
 & PHLI_HRI_OUT_B, PHLI_HCF_OUT_B, LDVERBOSE)
diff --git a/src/testprogs/ice_adjust/main_ice_adjust.F90 b/src/testprogs/ice_adjust/main_ice_adjust.F90
index 27dd585df..1a074e1f8 100644
--- a/src/testprogs/ice_adjust/main_ice_adjust.F90
+++ b/src/testprogs/ice_adjust/main_ice_adjust.F90
@@ -1,7 +1,7 @@
 PROGRAM MAIN_ICE_ADJUST
 
 USE XRD_GETOPTIONS
-USE GETDATA_MOD
+USE GETDATA_ICE_ADJUST_MOD
 USE MODI_ICE_ADJUST
 USE MODD_DIMPHYEX,   ONLY: DIMPHYEX_t
 USE MODD_CST,        ONLY: CST_t, CST
@@ -118,7 +118,7 @@ IF (LLBIND) THEN
   CALL LINUX_BIND_DUMP (IRANK, ISIZE)
 ENDIF
 
-CALL GETDATA (NPROMA, NGPBLKS, NFLEVG, PRHODJ, PEXNREF, PRHODREF, PPABSM, PTHT, ZICE_CLD_WGT,     &
+CALL GETDATA_ICE_ADJUST (NPROMA, NGPBLKS, NFLEVG, PRHODJ, PEXNREF, PRHODREF, PPABSM, PTHT, ZICE_CLD_WGT,     &
 & ZSIGQSAT, PSIGS, PMFCONV, PRC_MF, PRI_MF, PCF_MF, PTHS, PRS, PSRCS, PCLDFR, PHLC_HRC, PHLC_HCF, &
 & PHLI_HRI, PHLI_HCF, ZRS, ZZZ, PRS_OUT, PSRCS_OUT, PCLDFR_OUT, PHLC_HRC_OUT, PHLC_HCF_OUT,       &
 & PHLI_HRI_OUT, PHLI_HCF_OUT, LLVERBOSE)
diff --git a/src/testprogs/rain_ice/main_rain_ice.F90 b/src/testprogs/rain_ice/main_rain_ice.F90
new file mode 100644
index 000000000..580e36e5c
--- /dev/null
+++ b/src/testprogs/rain_ice/main_rain_ice.F90
@@ -0,0 +1,304 @@
+PROGRAM MAIN_RAIN_ICE
+
+USE MODD_CONF
+USE MODD_CST, ONLY: CST
+USE MODD_RAIN_ICE_DESCR, ONLY: RAIN_ICE_DESCR
+USE MODD_RAIN_ICE_PARAM, ONLY: RAIN_ICE_PARAM
+USE MODD_PARAM_ICE,      ONLY: PARAM_ICE
+USE MODD_DIMPHYEX,   ONLY: DIMPHYEX_t
+
+USE MODD_BUDGET, ONLY: TBUDGETDATA, NBUDGET_RH, TBUCONF
+
+USE MODI_RAIN_ICE
+
+IMPLICIT NONE
+
+INTEGER   :: KPROMA  
+INTEGER   :: KKA  
+INTEGER   :: KKU  
+INTEGER   :: KKL  
+INTEGER   :: KLON    
+INTEGER   :: KLEV     
+INTEGER   :: KRR      
+INTEGER   :: KDUM
+
+CHARACTER (LEN=4)   :: CSUBG_AUCV_RC
+CHARACTER (LEN=80)  :: CSUBG_AUCV_RI
+LOGICAL             :: OSEDIC 
+CHARACTER (LEN=4)   :: CSEDIM  
+CHARACTER (LEN=4)   :: CMICRO  
+REAL                :: PTSTEP 
+
+
+REAL,    ALLOCATABLE, DIMENSION(:,:,:) :: PRS, PRS_1
+REAL,    ALLOCATABLE, DIMENSION(:,:,:) :: PFPR, PFPR_1
+REAL,    ALLOCATABLE, DIMENSION(:,:,:) :: PRT   
+REAL,    ALLOCATABLE, DIMENSION(:,:)   :: PDZZ     
+REAL,    ALLOCATABLE, DIMENSION(:,:)   :: PRHODJ  
+REAL,    ALLOCATABLE, DIMENSION(:,:)   :: PRHODREF
+REAL,    ALLOCATABLE, DIMENSION(:,:)   :: PEXNREF 
+REAL,    ALLOCATABLE, DIMENSION(:,:)   :: PPABSM  
+REAL,    ALLOCATABLE, DIMENSION(:,:)   :: PHLC_HRC
+REAL,    ALLOCATABLE, DIMENSION(:,:)   :: PHLC_HCF
+REAL,    ALLOCATABLE, DIMENSION(:,:)   :: PHLI_HRI
+REAL,    ALLOCATABLE, DIMENSION(:,:)   :: PHLI_HCF
+REAL,    ALLOCATABLE, DIMENSION(:,:)   :: PTHT    
+REAL,    ALLOCATABLE, DIMENSION(:,:)   :: PSIGS   
+REAL,    ALLOCATABLE, DIMENSION(:,:)   :: PCLDFR  
+REAL,    ALLOCATABLE, DIMENSION(:,:)   :: PTHS    
+REAL,    ALLOCATABLE, DIMENSION(:,:)   :: PEVAP, PEVAP_1
+REAL,    ALLOCATABLE, DIMENSION(:,:)   :: PCIT, PCIT_1
+REAL,    ALLOCATABLE, DIMENSION(:)     :: PSEA  
+REAL,    ALLOCATABLE, DIMENSION(:)     :: PTOWN  
+REAL,    ALLOCATABLE, DIMENSION(:)     :: PINPRR, PINPRR_1
+REAL,    ALLOCATABLE, DIMENSION(:)     :: PINPRS, PINPRS_1
+REAL,    ALLOCATABLE, DIMENSION(:)     :: PINPRG, PINPRG_1
+REAL,    ALLOCATABLE, DIMENSION(:)     :: ZINDEP, ZINDEP_1
+REAL,    ALLOCATABLE, DIMENSION(:,:)   :: ZRAINFR, ZRAINFR_1
+REAL,    ALLOCATABLE, DIMENSION(:)     :: ZINPRC, ZINPRC_1
+LOGICAL, ALLOCATABLE, DIMENSION(:,:) :: LLMICRO 
+
+LOGICAL :: OWARM 
+LOGICAL :: OCND2 
+
+INTEGER :: IFILE
+
+LOGICAL :: LCRIAUTI
+REAL :: ZCRIAUTI, ZT0CRIAUTI, ZCRIAUTC
+
+TYPE(TBUDGETDATA), DIMENSION(NBUDGET_RH) :: YLBUDGET 
+TYPE(DIMPHYEX_t) :: D
+
+INTEGER :: IPROMA, ISIZE
+INTEGER :: JLON, JLEV
+
+CHARACTER(LEN=128) :: CLFILE
+
+
+
+CMICRO='ICE3'
+
+CALL GETARG (1, CLFILE)
+
+PTSTEP = 25.0000000000000
+KRR = 6
+OSEDIC = .TRUE.
+OCND2 = .FALSE.
+CSEDIM = 'STAT'
+CSUBG_AUCV_RC = 'PDF'
+CSUBG_AUCV_RI = 'NONE'
+OWARM = .TRUE.
+
+LCRIAUTI=.TRUE.
+ZCRIAUTI=0.2E-3
+ZT0CRIAUTI=-5.
+ZCRIAUTC=0.1E-2
+
+CALL INIT_PHYEX (20, OWARM, CMICRO, CSEDIM, &
+            & LCRIAUTI, ZCRIAUTI, ZT0CRIAUTI, ZCRIAUTC)
+
+IFILE = 77
+OPEN (IFILE, FILE=TRIM (CLFILE), FORM='UNFORMATTED') 
+READ (IFILE) IPROMA, ISIZE
+READ (IFILE) KLON, KDUM, KLEV, KRR
+
+PRINT *, KLON, KDUM, KLEV, KRR
+
+ALLOCATE (PRT       (KLON,KLEV,KRR))
+ALLOCATE (PRS       (KLON,KLEV,KRR), PRS_1  (KLON,KLEV,KRR))
+ALLOCATE (PFPR      (KLON,KLEV,KRR), PFPR_1 (KLON,KLEV,KRR))
+ALLOCATE (PDZZ      (KLON,KLEV))
+ALLOCATE (PRHODJ    (KLON,KLEV))
+ALLOCATE (PRHODREF  (KLON,KLEV))
+ALLOCATE (PEXNREF   (KLON,KLEV))
+ALLOCATE (PPABSM    (KLON,KLEV))
+ALLOCATE (PHLC_HRC  (KLON,KLEV))
+ALLOCATE (PHLC_HCF  (KLON,KLEV))
+ALLOCATE (PHLI_HRI  (KLON,KLEV))
+ALLOCATE (PHLI_HCF  (KLON,KLEV))
+ALLOCATE (PTHT      (KLON,KLEV))
+ALLOCATE (PSIGS     (KLON,KLEV))
+ALLOCATE (PCLDFR    (KLON,KLEV))
+ALLOCATE (PTHS      (KLON,KLEV))
+ALLOCATE (PEVAP     (KLON,KLEV),     PEVAP_1 (KLON,KLEV))
+ALLOCATE (PCIT      (KLON,KLEV),     PCIT_1 (KLON,KLEV))
+ALLOCATE (PSEA      (KLON))
+ALLOCATE (PTOWN     (KLON))
+ALLOCATE (PINPRR    (KLON))
+ALLOCATE (PINPRS    (KLON),          PINPRS_1 (KLON))
+ALLOCATE (PINPRG    (KLON),          PINPRG_1 (KLON))
+ALLOCATE (LLMICRO   (KLON,KLEV))
+ALLOCATE (ZINDEP    (KLON),          ZINDEP_1 (KLON))
+ALLOCATE (ZRAINFR   (KLON,KLEV),     ZRAINFR_1 (KLON,KLEV))
+ALLOCATE (ZINPRC    (KLON),          ZINPRC_1 (KLON))
+
+READ (IFILE) LLMICRO
+READ (IFILE) PEXNREF
+READ (IFILE) PDZZ
+READ (IFILE) PRHODJ
+READ (IFILE) PRHODREF
+READ (IFILE) PEXNREF
+READ (IFILE) PPABSM
+READ (IFILE) PCIT
+READ (IFILE) PCLDFR
+READ (IFILE) PHLC_HRC
+READ (IFILE) PHLC_HCF
+READ (IFILE) PHLI_HRI
+READ (IFILE) PHLI_HCF
+READ (IFILE) PTHT
+READ (IFILE) PRT
+READ (IFILE) PTHS
+READ (IFILE) PRS
+READ (IFILE) PSIGS
+READ (IFILE) PSEA
+READ (IFILE) PTOWN
+
+READ (IFILE) PCIT_1
+READ (IFILE) PRS_1
+READ (IFILE) ZINPRC_1
+READ (IFILE) PINPRR_1
+READ (IFILE) PEVAP_1
+READ (IFILE) PINPRS_1
+READ (IFILE) PINPRG_1
+READ (IFILE) ZINDEP_1
+READ (IFILE) ZRAINFR_1
+READ (IFILE) PFPR_1
+CLOSE (IFILE)
+
+D%NIT  = KLON
+D%NIB  = 1                                                                                                                         
+D%NIE  = KLON
+D%NJT  = 1                                                                                                                         
+D%NJB  = 1                                                                                                                         
+D%NJE  = 1                                                                                                                         
+D%NKL  = -1                                                                                                                        
+D%NKT  = KLEV                                                                                                                      
+D%NKA  = KLEV                                                                                                                      
+D%NKU  = 1                                                                                                                         
+D%NKB  = KLEV                                                                                                                      
+D%NKE  = 1                                                                                                                         
+D%NKTB = 1                                                                                                                         
+D%NKTE = KLEV   
+
+CALL RAIN_ICE (D, CST, PARAM_ICE, RAIN_ICE_PARAM, &
+             & RAIN_ICE_DESCR, TBUCONF, &
+             & IPROMA, ISIZE, &
+             & OSEDIC=OSEDIC, OCND2=OCND2, HSEDIM=CSEDIM, &
+             & HSUBG_AUCV_RC=CSUBG_AUCV_RC, HSUBG_AUCV_RI=CSUBG_AUCV_RI,&
+             & OWARM=OWARM, &
+             & PTSTEP=2*PTSTEP, &
+             & KRR=KRR, ODMICRO=LLMICRO, PEXN=PEXNREF,            &
+             & PDZZ=PDZZ, PRHODJ=PRHODJ, PRHODREF=PRHODREF,PEXNREF=PEXNREF,&
+             & PPABST=PPABSM, PCIT=PCIT, PCLDFR=PCLDFR,  &
+             & PHLC_HRC=PHLC_HRC, PHLC_HCF=PHLC_HCF, &
+             & PHLI_HRI=PHLI_HRI, PHLI_HCF=PHLI_HCF, &
+             & PTHT=PTHT,PRVT=PRT(1,1,1),PRCT=PRT(1,1,2), &
+             & PRRT=PRT(1,1,3), &
+             & PRIT=PRT(1,1,4), PRST=PRT(1,1,5), &
+             & PRGT=PRT(1,1,6),       &
+             & PTHS=PTHS, PRVS=PRS(1,1,1),PRCS=PRS(1,1,2),&
+             & PRRS=PRS(1,1,3),&
+             & PRIS=PRS(1,1,4),PRSS= PRS(1,1,5),PRGS= PRS(1,1,6),&
+             & PINPRC=ZINPRC,PINPRR=PINPRR,PEVAP3D=PEVAP,&
+             & PINPRS=PINPRS, PINPRG=PINPRG, PINDEP=ZINDEP, PRAINFR=ZRAINFR, &
+             & PSIGS=PSIGS, &
+             & TBUDGETS=YLBUDGET, KBUDGETS=SIZE(YLBUDGET), &
+             & PSEA=PSEA, PTOWN=PTOWN, PFPR=PFPR)
+
+DO JLEV = 1, KLEV
+  WRITE (*, '(I4," | ")', ADVANCE='NO') JLEV
+  DO JLON = 1, KLON
+    WRITE (*, '(E12.5)', ADVANCE='NO') ZRAINFR_1 (JLON, JLEV)
+  ENDDO
+  WRITE (*, *)
+ENDDO
+
+
+CONTAINS
+
+SUBROUTINE INIT_PHYEX(KULOUT,LDWARM,CMICRO,CCSEDIM,LDCRIAUTI,&
+                   PCRIAUTI,PT0CRIAUTI,PCRIAUTC)
+
+USE MODD_RAIN_ICE_DESCR
+USE MODD_RAIN_ICE_PARAM
+USE MODD_PARAM_ICE
+USE MODD_TURB_N, ONLY: TURB_GOTO_MODEL, CSUBG_MF_PDF
+
+USE MODD_REF
+USE MODI_INI_RAIN_ICE
+
+IMPLICIT NONE
+! -----------------------------------------------------------------------
+!     DUMMY INTEGER SCALARS
+INTEGER, INTENT (IN) :: KULOUT
+LOGICAL, INTENT (IN) :: LDWARM
+CHARACTER(4), INTENT (IN) :: CMICRO 
+CHARACTER(4), INTENT (IN) :: CCSEDIM
+LOGICAL, INTENT (IN) :: LDCRIAUTI
+REAL, INTENT (IN) :: PCRIAUTI
+REAL, INTENT (IN) :: PT0CRIAUTI
+REAL, INTENT (IN) :: PCRIAUTC
+!-----------------------------------------------------------------------
+!    LOCAL VARIABLES
+REAL :: ZCRI0, ZTCRI0    
+! -----------------------------------------------------------------------
+
+CALL INI_CST
+CALL TURB_GOTO_MODEL(1,1)
+CALL PARAM_ICE_ASSOCIATE
+
+!        1. Set implicit default values for MODD_PARAM_ICE
+LWARM=LDWARM
+CPRISTINE_ICE='PLAT'
+CSEDIM=CCSEDIM
+CSUBG_AUCV_RC='PDF'
+CSUBG_AUCV_RI='NONE'
+CSUBG_RC_RR_ACCR='NONE'
+CSUBG_RR_EVAP='NONE'
+CSUBG_PR_PDF='SIGM'
+CSUBG_MF_PDF='TRIANGLE'
+! Snow riming                                                                                                                       
+CSNOWRIMING='M90 '
+XFRACM90=0.1 ! Fraction used for the Murakami 1990 formulation
+!                                                                                                                                   
+LFEEDBACKT=.TRUE. ! When .TRUE. feed back on temperature is taken into account
+LEVLIMIT=.TRUE.   ! When .TRUE. water vapour pressure is limited by saturation
+LNULLWETG=.TRUE.  ! When .TRUE. graupel wet growth is activated with null rate (to allow water shedding)
+LWETGPOST=.TRUE.  ! When .TRUE. graupel wet growth is activated with positive temperature (to allow water shedding)
+LNULLWETH=.TRUE.  ! Same as LNULLWETG but for hail
+LWETHPOST=.TRUE.  ! Same as LWETGPOST but for hail
+LCONVHG=.TRUE. ! TRUE to allow the conversion from hail to graupel
+LCRFLIMIT=.TRUE. !True to limit rain contact freezing to possible heat exchange
+CFRAC_ICE_ADJUST='S' ! Ice/liquid partition rule to use in adjustment
+CFRAC_ICE_SHALLOW_MF='S' ! Ice/liquid partition rule to use in shallow_mf
+LSEDIM_AFTER=.FALSE. ! Sedimentation done after microphysics
+XSPLIT_MAXCFL=0.8
+LDEPOSC=.FALSE.  ! water deposition on vegetation
+XVDEPOSC=0.02    ! deposition speed (2 cm.s-1)
+!
+!        2. Set implicit default values for MODD_RAIN_ICE_DESCR 
+!                     et MODD_RAIN_ICE_PARAM
+XTHVREFZ=300.
+!
+CALL INI_RAIN_ICE (KULOUT, CMICRO)
+!update values from namparar
+IF (LDCRIAUTI) THEN
+
+  XCRIAUTI=PCRIAUTI
+  XCRIAUTC=PCRIAUTC
+  XT0CRIAUTI=PT0CRIAUTI
+  !second point to determine 10**(aT+b) law
+  ZTCRI0=-40.0
+  ZCRI0=1.25E-6
+  
+  XBCRIAUTI=-( LOG10(XCRIAUTI) - LOG10(ZCRI0)*PT0CRIAUTI/ZTCRI0 )&
+                   *ZTCRI0/(XT0CRIAUTI-ZTCRI0)
+  XACRIAUTI=(LOG10(ZCRI0)-XBCRIAUTI)/ZTCRI0
+  
+ENDIF
+! -----------------------------------------------------------------------
+
+END SUBROUTINE INIT_PHYEX
+
+END PROGRAM
+
diff --git a/src/testprogs/ice_adjust/xrd_getoptions.F90 b/src/testprogs/support/xrd_getoptions.F90
similarity index 100%
rename from src/testprogs/ice_adjust/xrd_getoptions.F90
rename to src/testprogs/support/xrd_getoptions.F90
diff --git a/src/testprogs/ice_adjust/xrd_unix_env.F90 b/src/testprogs/support/xrd_unix_env.F90
similarity index 100%
rename from src/testprogs/ice_adjust/xrd_unix_env.F90
rename to src/testprogs/support/xrd_unix_env.F90
-- 
GitLab