diff --git a/src/arome/gmkpack_ignored_files b/src/arome/gmkpack_ignored_files index 3202323fea72842f2f8bbb0b7cd78ff0e5756322..3d2cd872cff308539b8fafdc32676ab533d5c23f 100644 --- a/src/arome/gmkpack_ignored_files +++ b/src/arome/gmkpack_ignored_files @@ -58,15 +58,21 @@ phyex/micro/modi_gamma.F90 phyex/micro/modi_gamma_inc.F90 phyex/micro/modi_general_gamma.F90 phyex/micro/moddb_intbudget.F90 -arome/micro/read_xker_gweth.F90 -arome/micro/read_xker_raccs.F90 -arome/micro/read_xker_rdryg.F90 -arome/micro/read_xker_rweth.F90 -arome/micro/read_xker_sdryg.F90 -arome/micro/read_xker_sweth.F90 -arome/micro/modi_read_xker_gweth.F90 -arome/micro/modi_read_xker_raccs.F90 -arome/micro/modi_read_xker_rdryg.F90 -arome/micro/modi_read_xker_rweth.F90 -arome/micro/modi_read_xker_sdryg.F90 -arome/micro/modi_read_xker_sweth.F90 +phyex/micro/read_xker_gweth.F90 +phyex/micro/read_xker_raccs.F90 +phyex/micro/read_xker_rdryg.F90 +phyex/micro/read_xker_rweth.F90 +phyex/micro/read_xker_sdryg.F90 +phyex/micro/read_xker_sweth.F90 +phyex/micro/modi_read_xker_gweth.F90 +phyex/micro/modi_read_xker_raccs.F90 +phyex/micro/modi_read_xker_rdryg.F90 +phyex/micro/modi_read_xker_rweth.F90 +phyex/micro/modi_read_xker_sdryg.F90 +phyex/micro/modi_read_xker_sweth.F90 +phyex/micro/modi_rrcolss.F90 +phyex/micro/modi_rscolrg.F90 +phyex/micro/modi_rzcolx.F90 +phyex/micro/rrcolss.F90 +phyex/micro/rscolrg.F90 +phyex/micro/rzcolx.F90 diff --git a/src/arome/micro/ini_lima_cold_mixed.F90 b/src/arome/micro/ini_lima_cold_mixed.F90 index e7382825fa3348162c6cbd1cfd5d8a1248683718..79d0d993b046665c30eac5c64644429fe2e6921c 100644 --- a/src/arome/micro/ini_lima_cold_mixed.F90 +++ b/src/arome/micro/ini_lima_cold_mixed.F90 @@ -53,9 +53,9 @@ USE MODD_LUNIT USE MODI_LIMA_FUNCTIONS USE MODI_GAMMA USE MODI_GAMMA_INC -USE MODI_RRCOLSS -USE MODI_RZCOLX -USE MODI_RSCOLRG +USE MODE_RRCOLSS, ONLY: RRCOLSS +USE MODE_RZCOLX, ONLY: RZCOLX +USE MODE_RSCOLRG, ONLY: RSCOLRG USE MODI_READ_XKER_RACCS, ONLY: READ_XKER_RACCS USE MODI_READ_XKER_SDRYG, ONLY: READ_XKER_SDRYG USE MODI_READ_XKER_RDRYG, ONLY: READ_XKER_RDRYG diff --git a/src/arome/micro/ini_rain_ice.F90 b/src/arome/micro/ini_rain_ice.F90 index 906baadaa94f51f4fab1cd10385a7eb1cd4704f0..023e0e268dc0507e998380b9619e65efcd457542 100644 --- a/src/arome/micro/ini_rain_ice.F90 +++ b/src/arome/micro/ini_rain_ice.F90 @@ -91,9 +91,9 @@ USE MODD_REF ! USE MODI_GAMMA USE MODI_GAMMA_INC -USE MODI_RRCOLSS -USE MODI_RZCOLX -USE MODI_RSCOLRG +USE MODE_RRCOLSS, ONLY: RRCOLSS +USE MODE_RZCOLX, ONLY: RZCOLX +USE MODE_RSCOLRG, ONLY: RSCOLRG USE MODE_READ_XKER_RACCS, ONLY: READ_XKER_RACCS USE MODE_READ_XKER_SDRYG, ONLY: READ_XKER_SDRYG USE MODE_READ_XKER_RDRYG, ONLY: READ_XKER_RDRYG diff --git a/src/arome/micro/modi_rrcolss.F90 b/src/arome/micro/modi_rrcolss.F90 deleted file mode 100644 index 0b338486c21079fb79f285142718b73ce373c9cc..0000000000000000000000000000000000000000 --- a/src/arome/micro/modi_rrcolss.F90 +++ /dev/null @@ -1,44 +0,0 @@ -! ######spl - MODULE MODI_RRCOLSS -! ################### -! -INTERFACE -! - SUBROUTINE RRCOLSS( KND, PALPHAS, PNUS, PALPHAR, PNUR, & - PESR, PEXMASSR, PFALLS, PEXFALLS, PFALLR, PEXFALLR, & - PLBDASMAX, PLBDARMAX, PLBDASMIN, PLBDARMIN, & - PDINFTY, PRRCOLSS, PAG, PBS, PAS ) -! -INTEGER, INTENT(IN) :: KND ! Number of discrete size intervals in DS and DR -! -REAL, INTENT(IN) :: PALPHAS ! First shape parameter of the aggregates - ! size distribution (generalized gamma law) -REAL, INTENT(IN) :: PNUS ! Second shape parameter of the aggregates - ! size distribution (generalized gamma law) -REAL, INTENT(IN) :: PALPHAR ! First shape parameter of the rain - ! size distribution (generalized gamma law) -REAL, INTENT(IN) :: PNUR ! Second shape parameter of the rain - ! size distribution (generalized gamma law) -REAL, INTENT(IN) :: PESR ! Efficiency of aggregates collecting rain -REAL, INTENT(IN) :: PEXMASSR ! Mass exponent of rain -REAL, INTENT(IN) :: PFALLS ! Fall speed constant of aggregates -REAL, INTENT(IN) :: PEXFALLS ! Fall speed exponent of aggregates -REAL, INTENT(IN) :: PFALLR ! Fall speed constant of rain -REAL, INTENT(IN) :: PEXFALLR ! Fall speed exponent of rain -REAL, INTENT(IN) :: PLBDASMAX ! Maximun slope of size distribution of aggregates -REAL, INTENT(IN) :: PLBDARMAX ! Maximun slope of size distribution of rain -REAL, INTENT(IN) :: PLBDASMIN ! Minimun slope of size distribution of aggregates -REAL, INTENT(IN) :: PLBDARMIN ! Minimun slope of size distribution of rain -REAL, INTENT(IN) :: PDINFTY ! Factor to define the largest diameter up to - ! which the diameter integration is performed -REAL, INTENT(IN) :: PAG, PBS, PAS -! -REAL, DIMENSION(:,:), INTENT(INOUT) :: PRRCOLSS! Scaled fall speed difference in - ! the mass collection kernel as a - ! function of LAMBDAX and LAMBDAZ -! - END SUBROUTINE RRCOLSS -! -END INTERFACE -! - END MODULE MODI_RRCOLSS diff --git a/src/arome/micro/modi_rscolrg.F90 b/src/arome/micro/modi_rscolrg.F90 deleted file mode 100644 index b757707eef6fefdd7a1ae725b6beebf20fb33fc5..0000000000000000000000000000000000000000 --- a/src/arome/micro/modi_rscolrg.F90 +++ /dev/null @@ -1,44 +0,0 @@ -! ######spl - MODULE MODI_RSCOLRG -! ################### -! -INTERFACE -! - SUBROUTINE RSCOLRG( KND, PALPHAS, PZNUS, PALPHAR, PNUR, & - PESR, PEXMASSS, PFALLS, PEXFALLS, PFALLR, PEXFALLR, & - PLBDASMAX, PLBDARMAX, PLBDASMIN, PLBDARMIN, & - PDINFTY, PRSCOLRG,PAG, PBS, PAS ) -! -INTEGER, INTENT(IN) :: KND ! Number of discrete size intervals in DS and DR -! -REAL, INTENT(IN) :: PALPHAS ! First shape parameter of the aggregates - ! size distribution (generalized gamma law) -REAL, INTENT(IN) :: PZNUS ! Second shape parameter of the aggregates - ! size distribution (generalized gamma law) -REAL, INTENT(IN) :: PALPHAR ! First shape parameter of the rain - ! size distribution (generalized gamma law) -REAL, INTENT(IN) :: PNUR ! Second shape parameter of the rain - ! size distribution (generalized gamma law) -REAL, INTENT(IN) :: PESR ! Efficiency of the aggregates collecting rain -REAL, INTENT(IN) :: PEXMASSS ! Mass exponent of the aggregates -REAL, INTENT(IN) :: PFALLS ! Fall speed constant of the aggregates -REAL, INTENT(IN) :: PEXFALLS ! Fall speed exponent of the aggregates -REAL, INTENT(IN) :: PFALLR ! Fall speed constant of rain -REAL, INTENT(IN) :: PEXFALLR ! Fall speed exponent of rain -REAL, INTENT(IN) :: PLBDASMAX ! Maximun slope of size distribution of the aggregates -REAL, INTENT(IN) :: PLBDARMAX ! Maximun slope of size distribution of rain -REAL, INTENT(IN) :: PLBDASMIN ! Minimun slope of size distribution of the aggregates -REAL, INTENT(IN) :: PLBDARMIN ! Minimun slope of size distribution of rain -REAL, INTENT(IN) :: PDINFTY ! Factor to define the largest diameter up to - ! which the diameter integration is performed -REAL, INTENT(IN) :: PAG, PBS, PAS -! -REAL, DIMENSION(:,:), INTENT(INOUT) :: PRSCOLRG! Scaled fall speed difference in - ! the mass collection kernel as a - ! function of LAMBDAX and LAMBDAZ -! - END SUBROUTINE RSCOLRG -! -END INTERFACE -! - END MODULE MODI_RSCOLRG diff --git a/src/arome/micro/modi_rzcolx.F90 b/src/arome/micro/modi_rzcolx.F90 deleted file mode 100644 index c097817abc59fbb7a639aa556c51d14a89fd791a..0000000000000000000000000000000000000000 --- a/src/arome/micro/modi_rzcolx.F90 +++ /dev/null @@ -1,44 +0,0 @@ -! ######spl - MODULE MODI_RZCOLX -! ################## -! -INTERFACE -! - SUBROUTINE RZCOLX( KND, PALPHAX, PNUX, PALPHAZ, PNUZ, & - PEXZ, PEXMASSZ, PFALLX, PEXFALLX, PFALLZ, PEXFALLZ, & - PLBDAXMAX, PLBDAZMAX, PLBDAXMIN, PLBDAZMIN, & - PDINFTY, PRZCOLX ) -! -INTEGER, INTENT(IN) :: KND ! Number of discrete size intervals in DX and DZ -! -! -REAL, INTENT(IN) :: PALPHAX ! First shape parameter of the specy X - ! size distribution (generalized gamma law) -REAL, INTENT(IN) :: PNUX ! Second shape parameter of the specy X - ! size distribution (generalized gamma law) -REAL, INTENT(IN) :: PALPHAZ ! First shape parameter of the specy Z - ! size distribution (generalized gamma law) -REAL, INTENT(IN) :: PNUZ ! Second shape parameter of the specy Z - ! size distribution (generalized gamma law) -REAL, INTENT(IN) :: PEXZ ! Efficiency of specy X collecting specy Z -REAL, INTENT(IN) :: PEXMASSZ ! Mass exponent of specy Z -REAL, INTENT(IN) :: PFALLX ! Fall speed constant of specy X -REAL, INTENT(IN) :: PEXFALLX ! Fall speed exponent of specy X -REAL, INTENT(IN) :: PFALLZ ! Fall speed constant of specy Z -REAL, INTENT(IN) :: PEXFALLZ ! Fall speed exponent of specy Z -REAL, INTENT(IN) :: PLBDAXMAX ! Maximun slope of size distribution of specy X -REAL, INTENT(IN) :: PLBDAZMAX ! Maximun slope of size distribution of specy Z -REAL, INTENT(IN) :: PLBDAXMIN ! Minimun slope of size distribution of specy X -REAL, INTENT(IN) :: PLBDAZMIN ! Minimun slope of size distribution of specy Z -REAL, INTENT(IN) :: PDINFTY ! Factor to define the largest diameter up to - ! which the diameter integration is performed -! -REAL, DIMENSION(:,:), INTENT(INOUT) :: PRZCOLX ! Scaled fall speed difference in - ! the mass collection kernel as a - ! function of LAMBDAX and LAMBDAZ -! - END SUBROUTINE RZCOLX -! -END INTERFACE -! - END MODULE MODI_RZCOLX diff --git a/src/arome/micro/rrcolss.F90 b/src/common/micro/mode_rrcolss.F90 similarity index 91% rename from src/arome/micro/rrcolss.F90 rename to src/common/micro/mode_rrcolss.F90 index 75c4b26730177b75b97195f90b787cd4871f7fc7..44a16802ef42e948190ee07ba3d84d6f6fde5c1b 100644 --- a/src/arome/micro/rrcolss.F90 +++ b/src/common/micro/mode_rrcolss.F90 @@ -1,4 +1,14 @@ -! ######spl +!MNH_LIC Copyright 1995-2019 CNRS, Meteo-France and Universite Paul Sabatier +!MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence +!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt +!MNH_LIC for details. version 1. +!----------------------------------------------------------------- +! ################### + MODULE MODE_RRCOLSS +! ################### +! +IMPLICIT NONE +CONTAINS SUBROUTINE RRCOLSS( KND, PALPHAS, PNUS, PALPHAR, PNUR, & PESR, PEXMASSR, PFALLS, PEXFALLS, PFALLR, PEXFALLR, & PLBDASMAX, PLBDARMAX, PLBDASMIN, PLBDARMIN, & @@ -69,7 +79,8 @@ !! ------------- !! Original 8/11/95 !! -!! +! P. Wautelet 26/04/2019: replace non-standard FLOAT function by REAL function +! !------------------------------------------------------------------------------- ! ! @@ -171,8 +182,8 @@ ZCST1 = (3.0/XPI)/XRHOLW ! !* 1.1 Compute the growth rate of the slope factors LAMBDA ! -ZDLBDAS = EXP( LOG(PLBDASMAX/PLBDASMIN)/FLOAT(SIZE(PRRCOLSS(:,:),1)-1) ) -ZDLBDAR = EXP( LOG(PLBDARMAX/PLBDARMIN)/FLOAT(SIZE(PRRCOLSS(:,:),2)-1) ) +ZDLBDAS = EXP( LOG(PLBDASMAX/PLBDASMIN)/REAL(SIZE(PRRCOLSS(:,:),1)-1) ) +ZDLBDAR = EXP( LOG(PLBDARMAX/PLBDARMIN)/REAL(SIZE(PRRCOLSS(:,:),2)-1) ) ! !* 1.2 Scan the slope factors LAMBDAX and LAMBDAZ ! @@ -181,7 +192,7 @@ DO JLBDAS = 1,SIZE(PRRCOLSS(:,:),1) ! !* 1.3 Compute the diameter steps ! - ZDDS = PDINFTY / (FLOAT(KND) * ZLBDAS) + ZDDS = PDINFTY / (REAL(KND) * ZLBDAS) DO JLBDAR = 1,SIZE(PRRCOLSS(:,:),2) ZLBDAR = PLBDARMIN * ZDLBDAR ** (JLBDAR-1) ! @@ -192,16 +203,16 @@ DO JLBDAS = 1,SIZE(PRRCOLSS(:,:),1) ! !* 1.5 Compute the diameter steps ! - ZDDSCALR = PDINFTY / (FLOAT(KND) * ZLBDAR) + ZDDSCALR = PDINFTY / (REAL(KND) * ZLBDAR) ! !* 1.6 Scan over the diameters DS and DR ! DO JDS = 1,KND-1 - ZDS = ZDDS * FLOAT(JDS) + ZDS = ZDDS * REAL(JDS) ZSCALR = 0.0 ZCOLLR = 0.0 DO JDR = 1,KND-1 - ZDR = ZDDSCALR * FLOAT(JDR) + ZDR = ZDDSCALR * REAL(JDR) ! !* 1.7 Compute the normalization factor by integration over the ! dimensional spectrum of rain @@ -223,13 +234,13 @@ DO JLBDAS = 1,SIZE(PRRCOLSS(:,:),1) ! corresponding to a maximal density of the aggregates of XRHOLW IF( ZDRMAX >= 0.5*ZDDSCALR ) THEN INR = CEILING( ZDRMAX/ZDDSCALR ) - ZDDCOLLR = ZDRMAX / FLOAT(INR) + ZDDCOLLR = ZDRMAX / REAL(INR) IF (INR>=KND ) THEN INR = KND ZDDCOLLR = ZDDSCALR END IF DO JDR = 1,INR-1 - ZDR = ZDDCOLLR * FLOAT(JDR) + ZDR = ZDDCOLLR * REAL(JDR) ZCOLLR = ZCOLLR + (ZDS+ZDR)**2 * ZDR**PEXMASSR & * PESR * ABS(PFALLS*ZDS**PEXFALLS-PFALLR*ZDR**PEXFALLR) & * GENERAL_GAMMA(PALPHAR,PNUR,ZLBDAR,ZDR) @@ -265,3 +276,4 @@ END DO ! IF (LHOOK) CALL DR_HOOK('RRCOLSS',1,ZHOOK_HANDLE) END SUBROUTINE RRCOLSS +END MODULE MODE_RRCOLSS diff --git a/src/arome/micro/rscolrg.F90 b/src/common/micro/mode_rscolrg.F90 similarity index 91% rename from src/arome/micro/rscolrg.F90 rename to src/common/micro/mode_rscolrg.F90 index 8889cbe57f6632b67bf383f7fecb811a685f667f..127bb24f14874a40fa1b5c9000d33d560532521e 100644 --- a/src/arome/micro/rscolrg.F90 +++ b/src/common/micro/mode_rscolrg.F90 @@ -1,4 +1,14 @@ -! ######spl +!MNH_LIC Copyright 1995-2019 CNRS, Meteo-France and Universite Paul Sabatier +!MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence +!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt +!MNH_LIC for details. version 1. +!----------------------------------------------------------------- +! ################### + MODULE MODE_RSCOLRG +! ################### +! +IMPLICIT NONE +CONTAINS SUBROUTINE RSCOLRG( KND, PALPHAS, PZNUS, PALPHAR, PNUR, & PESR, PEXMASSS, PFALLS, PEXFALLS, PFALLR, PEXFALLR, & PLBDASMAX, PLBDARMAX, PLBDASMIN, PLBDARMIN, & @@ -69,7 +79,8 @@ !! ------------- !! Original 8/11/95 !! -!! +! P. Wautelet 26/04/2019: replace non-standard FLOAT function by REAL function +! !------------------------------------------------------------------------------- ! ! @@ -168,8 +179,8 @@ ZCST1 = (3.0/XPI)/XRHOLW ! !* 1.1 Compute the growth rate of the slope factors LAMBDA ! -ZDLBDAR = EXP( LOG(PLBDARMAX/PLBDARMIN)/FLOAT(SIZE(PRSCOLRG(:,:),1)-1) ) -ZDLBDAS = EXP( LOG(PLBDASMAX/PLBDASMIN)/FLOAT(SIZE(PRSCOLRG(:,:),2)-1) ) +ZDLBDAR = EXP( LOG(PLBDARMAX/PLBDARMIN)/REAL(SIZE(PRSCOLRG(:,:),1)-1) ) +ZDLBDAS = EXP( LOG(PLBDASMAX/PLBDASMIN)/REAL(SIZE(PRSCOLRG(:,:),2)-1) ) ! !* 1.2 Scan the slope factors LAMBDAX and LAMBDAZ ! @@ -179,7 +190,7 @@ DO JLBDAR = 1,SIZE(PRSCOLRG(:,:),1) ! !* 1.3 Compute the diameter steps ! - ZDDSCALR = PDINFTY / (FLOAT(KND) * ZLBDAR) + ZDDSCALR = PDINFTY / (REAL(KND) * ZLBDAR) DO JLBDAS = 1,SIZE(PRSCOLRG(:,:),2) ZLBDAS = PLBDASMIN * ZDLBDAS ** (JLBDAS-1) ! @@ -190,16 +201,16 @@ DO JLBDAR = 1,SIZE(PRSCOLRG(:,:),1) ! !* 1.5 Compute the diameter steps ! - ZDDS = PDINFTY / (FLOAT(KND) * ZLBDAS) + ZDDS = PDINFTY / (REAL(KND) * ZLBDAS) ! !* 1.6 Scan over the diameters DS and DR ! DO JDS = 1,KND-1 - ZDS = ZDDS * FLOAT(JDS) + ZDS = ZDDS * REAL(JDS) ZSCALR = 0.0 ZCOLLR = 0.0 DO JDR = 1,KND-1 - ZDR = ZDDSCALR * FLOAT(JDR) + ZDR = ZDDSCALR * REAL(JDR) ! !* 1.7 Compute the normalization factor by integration over the ! dimensional spectrum of rain @@ -220,9 +231,9 @@ DO JLBDAR = 1,SIZE(PRSCOLRG(:,:),1) ! corresponding to a maximal density of the aggregates of XRHOLW IF( (ZDRMAX-ZDRMIN) >= 0.5*ZDDSCALR ) THEN INR = CEILING( (ZDRMAX-ZDRMIN)/ZDDSCALR ) - ZDDCOLLR = (ZDRMAX-ZDRMIN) / FLOAT(INR) + ZDDCOLLR = (ZDRMAX-ZDRMIN) / REAL(INR) DO JDR = 1,INR-1 - ZDR = ZDDCOLLR * FLOAT(JDR) + ZDRMIN + ZDR = ZDDCOLLR * REAL(JDR) + ZDRMIN ZCOLLR = ZCOLLR + (ZDS+ZDR)**2 & * GENERAL_GAMMA(PALPHAR,PNUR,ZLBDAR,ZDR) & * PESR * ABS(PFALLS*ZDS**PEXFALLS-PFALLR*ZDR**PEXFALLR) @@ -265,3 +276,4 @@ END DO ! IF (LHOOK) CALL DR_HOOK('RSCOLRG',1,ZHOOK_HANDLE) END SUBROUTINE RSCOLRG +END MODULE MODE_RSCOLRG diff --git a/src/arome/micro/rzcolx.F90 b/src/common/micro/mode_rzcolx.F90 similarity index 89% rename from src/arome/micro/rzcolx.F90 rename to src/common/micro/mode_rzcolx.F90 index 76b291335fcc1d1420e00726bc4f8e4f80ddc0e6..72e419b41be420d803fd324f6be91c8f55b6e160 100644 --- a/src/arome/micro/rzcolx.F90 +++ b/src/common/micro/mode_rzcolx.F90 @@ -1,4 +1,14 @@ -! ######spl +!MNH_LIC Copyright 1995-2019 CNRS, Meteo-France and Universite Paul Sabatier +!MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence +!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt +!MNH_LIC for details. version 1. +!----------------------------------------------------------------- +! ################## + MODULE MODE_RZCOLX +! ################## +! +IMPLICIT NONE +CONTAINS SUBROUTINE RZCOLX( KND, PALPHAX, PNUX, PALPHAZ, PNUZ, & PEXZ, PEXMASSZ, PFALLX, PEXFALLX, PFALLZ, PEXFALLZ, & PLBDAXMAX, PLBDAZMAX, PLBDAXMIN, PLBDAZMIN, & @@ -73,7 +83,8 @@ !! ------------- !! Original 8/11/95 !! -!! +! P. Wautelet 26/04/2019: replace non-standard FLOAT function by REAL function +! !------------------------------------------------------------------------------- ! ! @@ -114,8 +125,8 @@ REAL, INTENT(IN) :: PDINFTY ! Factor to define the largest diameter up to ! which the diameter integration is performed ! REAL, DIMENSION(:,:), INTENT(INOUT) :: PRZCOLX ! Scaled fall speed difference in - ! the mass collection kernel as a - ! function of LAMBDAX and LAMBDAZ + ! the mass collection kernel as a + ! function of LAMBDAX and LAMBDAZ ! ! !* 0.2 Declarations of local variables @@ -160,8 +171,8 @@ REAL :: ZFUNC ! Ancillary function ! REAL(KIND=JPRB) :: ZHOOK_HANDLE IF (LHOOK) CALL DR_HOOK('RZCOLX',0,ZHOOK_HANDLE) -ZDLBDAX = EXP( LOG(PLBDAXMAX/PLBDAXMIN)/FLOAT(SIZE(PRZCOLX(:,:),1)-1) ) -ZDLBDAZ = EXP( LOG(PLBDAZMAX/PLBDAZMIN)/FLOAT(SIZE(PRZCOLX(:,:),2)-1) ) +ZDLBDAX = EXP( LOG(PLBDAXMAX/PLBDAXMIN)/REAL(SIZE(PRZCOLX(:,:),1)-1) ) +ZDLBDAZ = EXP( LOG(PLBDAZMAX/PLBDAZMIN)/REAL(SIZE(PRZCOLX(:,:),2)-1) ) ! !* 1.2 Scan the slope factors LAMBDAX and LAMBDAZ ! @@ -177,18 +188,18 @@ DO JLBDAX = 1,SIZE(PRZCOLX(:,:),1) ! !* 1.4 Compute the diameter steps ! - ZDDX = PDINFTY / (FLOAT(KND) * ZLBDAX) - ZDDZ = PDINFTY / (FLOAT(KND) * ZLBDAZ) + ZDDX = PDINFTY / (REAL(KND) * ZLBDAX) + ZDDZ = PDINFTY / (REAL(KND) * ZLBDAZ) ! !* 1.5 Scan over the diameters DX and DZ ! DO JDX = 1,KND-1 - ZDX = ZDDX * FLOAT(JDX) + ZDX = ZDDX * REAL(JDX) ! ZSCALZ = 0.0 ZCOLLZ = 0.0 DO JDZ = 1,KND-1 - ZDZ = ZDDZ * FLOAT(JDZ) + ZDZ = ZDDZ * REAL(JDZ) ! !* 1.6 Compute the normalization factor by integration over the ! dimensional spectrum of specy Z @@ -224,3 +235,4 @@ END DO ! IF (LHOOK) CALL DR_HOOK('RZCOLX',1,ZHOOK_HANDLE) END SUBROUTINE RZCOLX +END MODULE MODE_RZCOLX diff --git a/src/mesonh/micro/ini_lima_cold_mixed.f90 b/src/mesonh/micro/ini_lima_cold_mixed.f90 index cb427cdb434982b229095adb417eee3d1071b73e..101626b4d3ca5cebb4859c8fb29e3e65cf4cebd2 100644 --- a/src/mesonh/micro/ini_lima_cold_mixed.f90 +++ b/src/mesonh/micro/ini_lima_cold_mixed.f90 @@ -61,9 +61,9 @@ use mode_msg USE MODI_LIMA_FUNCTIONS USE MODI_GAMMA USE MODI_GAMMA_INC -USE MODI_RRCOLSS -USE MODI_RZCOLX -USE MODI_RSCOLRG +USE MODE_RRCOLSS, ONLY: RRCOLSS +USE MODE_RZCOLX, ONLY: RZCOLX +USE MODE_RSCOLRG, ONLY: RSCOLRG USE MODI_LIMA_READ_XKER_RACCS USE MODI_LIMA_READ_XKER_SDRYG USE MODI_LIMA_READ_XKER_RDRYG diff --git a/src/mesonh/micro/ini_rain_ice.f90 b/src/mesonh/micro/ini_rain_ice.f90 index e07e02723c1cc6278d4bca007e5db0c32b3459ed..7f8bb85b01422106019deeb22ce4fa3f9c10f3cb 100644 --- a/src/mesonh/micro/ini_rain_ice.f90 +++ b/src/mesonh/micro/ini_rain_ice.f90 @@ -118,9 +118,9 @@ USE MODD_REF ! USE MODI_GAMMA USE MODI_GAMMA_INC -USE MODI_RRCOLSS -USE MODI_RZCOLX -USE MODI_RSCOLRG +USE MODE_RRCOLSS, ONLY: RRCOLSS +USE MODE_RZCOLX, ONLY: RZCOLX +USE MODE_RSCOLRG, ONLY: RSCOLRG USE MODE_READ_XKER_RACCS, ONLY: READ_XKER_RACCS USE MODE_READ_XKER_SDRYG, ONLY: READ_XKER_SDRYG USE MODE_READ_XKER_RDRYG, ONLY: READ_XKER_RDRYG diff --git a/src/mesonh/micro/ini_rain_ice_elec.f90 b/src/mesonh/micro/ini_rain_ice_elec.f90 index 9a98c8b0f7ece3f5b47e19df7a042240d39f6f6c..85fbe6feaa20817f71223cf7af268cc2cc6a5286 100644 --- a/src/mesonh/micro/ini_rain_ice_elec.f90 +++ b/src/mesonh/micro/ini_rain_ice_elec.f90 @@ -106,9 +106,9 @@ USE MODD_ELEC_DESCR, ONLY : XFS USE MODI_MOMG USE MODI_GAMMA USE MODI_GAMMA_INC -USE MODI_RRCOLSS -USE MODI_RZCOLX -USE MODI_RSCOLRG +USE MODE_RRCOLSS, ONLY: RRCOLSS +USE MODE_RZCOLX, ONLY: RZCOLX +USE MODE_RSCOLRG, ONLY: RSCOLRG USE MODE_READ_XKER_RACCS, ONLY: READ_XKER_RACCS USE MODE_READ_XKER_SDRYG, ONLY: READ_XKER_SDRYG USE MODE_READ_XKER_RDRYG, ONLY: READ_XKER_RDRYG diff --git a/src/mesonh/micro/rrcolss.f90 b/src/mesonh/micro/rrcolss.f90 deleted file mode 100644 index 527165111ecf4d225ce5ec0117c09846d2116b9e..0000000000000000000000000000000000000000 --- a/src/mesonh/micro/rrcolss.f90 +++ /dev/null @@ -1,312 +0,0 @@ -!MNH_LIC Copyright 1995-2019 CNRS, Meteo-France and Universite Paul Sabatier -!MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence -!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt -!MNH_LIC for details. version 1. -!----------------------------------------------------------------- -! ################### - MODULE MODI_RRCOLSS -! ################### -! -INTERFACE -! - SUBROUTINE RRCOLSS( KND, PALPHAS, PNUS, PALPHAR, PNUR, & - PESR, PEXMASSR, PFALLS, PEXFALLS, PFALLR, PEXFALLR, & - PLBDASMAX, PLBDARMAX, PLBDASMIN, PLBDARMIN, & - PDINFTY, PRRCOLSS, PAG, PBS, PAS ) -! -INTEGER, INTENT(IN) :: KND ! Number of discrete size intervals in DS and DR -! -REAL, INTENT(IN) :: PALPHAS ! First shape parameter of the aggregates - ! size distribution (generalized gamma law) -REAL, INTENT(IN) :: PNUS ! Second shape parameter of the aggregates - ! size distribution (generalized gamma law) -REAL, INTENT(IN) :: PALPHAR ! First shape parameter of the rain - ! size distribution (generalized gamma law) -REAL, INTENT(IN) :: PNUR ! Second shape parameter of the rain - ! size distribution (generalized gamma law) -REAL, INTENT(IN) :: PESR ! Efficiency of aggregates collecting rain -REAL, INTENT(IN) :: PEXMASSR ! Mass exponent of rain -REAL, INTENT(IN) :: PFALLS ! Fall speed constant of aggregates -REAL, INTENT(IN) :: PEXFALLS ! Fall speed exponent of aggregates -REAL, INTENT(IN) :: PFALLR ! Fall speed constant of rain -REAL, INTENT(IN) :: PEXFALLR ! Fall speed exponent of rain -REAL, INTENT(IN) :: PLBDASMAX ! Maximun slope of size distribution of aggregates -REAL, INTENT(IN) :: PLBDARMAX ! Maximun slope of size distribution of rain -REAL, INTENT(IN) :: PLBDASMIN ! Minimun slope of size distribution of aggregates -REAL, INTENT(IN) :: PLBDARMIN ! Minimun slope of size distribution of rain -REAL, INTENT(IN) :: PDINFTY ! Factor to define the largest diameter up to - ! which the diameter integration is performed -REAL, INTENT(IN) :: PAG, PBS, PAS -! -REAL, DIMENSION(:,:), INTENT(INOUT) :: PRRCOLSS! Scaled fall speed difference in - ! the mass collection kernel as a - ! function of LAMBDAX and LAMBDAZ -! - END SUBROUTINE RRCOLSS -! -END INTERFACE -! - END MODULE MODI_RRCOLSS -! ######################################################################## - SUBROUTINE RRCOLSS( KND, PALPHAS, PNUS, PALPHAR, PNUR, & - PESR, PEXMASSR, PFALLS, PEXFALLS, PFALLR, PEXFALLR, & - PLBDASMAX, PLBDARMAX, PLBDASMIN, PLBDARMIN, & - PDINFTY, PRRCOLSS, PAG, PBS, PAS ) -! ######################################################################## -! -! -! -!!**** * - Build up a look-up table containing the scaled fall speed -!! difference between size distributed particles of aggregates and Z -!! -!! -!! PURPOSE -!! ------- -!! The purpose of this routine is to integrate numerically the scaled fall -!! speed difference between aggregates and rain for use in collection -!! kernels. A first integral of the form -!! -!! infty Dz_max -!! / / -!! |{| } -!! |{| E_xz (Dx+Dz)^2 |cxDx^dx-czDz^dz| Dz^bz n(Dz) dDz} n(Dx) dDx -!! |{| } -!! / / -!! 0 Dz_min -!! -!! is evaluated and normalised by a second integral of the form -!! -!! infty -!! / / -!! |{| } -!! |{| (Dx+Dz)^2 Dz^bz n(Dz) dDz} n(Dx) dDx -!! |{| } -!! / / -!! 0 -!! -!! The result is stored in a two-dimensional array. -!! -!!** METHOD -!! ------ -!! The free parameters of the size distribution function of aggregates and Z -!! (slope parameter LAMBDA) are discretized with a geometrical rate in a -!! specific range -!! LAMBDA = exp( (Log(LAMBDA_max) - Log(LAMBDA_min))/N_interval ) -!! The two above integrals are performed using the trapezoidal scheme. -!! -!! EXTERNAL -!! -------- -!! MODI_GENERAL_GAMMA: Generalized gamma distribution law -!! -!! IMPLICIT ARGUMENTS -!! ------------------ -!! MODD_CST : XPI,XRHOLW -!! MODD_RAIN_ICE_DESCR: XAS,XAS,XBS -!! -!! REFERENCE -!! --------- -!! B.S. Ferrier , 1994 : A Double-Moment Multiple-Phase Four-Class -!! Bulk Ice Scheme,JAS,51,249-280. -!! -!! AUTHOR -!! ------ -!! J.-P. Pinty * Laboratoire d'Aerologie * -!! -!! MODIFICATIONS -!! ------------- -!! Original 8/11/95 -!! -! P. Wautelet 26/04/2019: replace non-standard FLOAT function by REAL function -! -!------------------------------------------------------------------------------- -! -! -!* 0. DECLARATIONS -! ------------ -! -! -USE MODI_GENERAL_GAMMA -! -USE MODD_CST -USE MODD_RAIN_ICE_DESCR -! -IMPLICIT NONE -! -! -!* 0.1 Declarations of dummy arguments -! ------------------------------- -! -! -INTEGER, INTENT(IN) :: KND ! Number of discrete size intervals in DS and DR -! -REAL, INTENT(IN) :: PALPHAS ! First shape parameter of the aggregates - ! size distribution (generalized gamma law) -REAL, INTENT(IN) :: PNUS ! Second shape parameter of the aggregates - ! size distribution (generalized gamma law) -REAL, INTENT(IN) :: PALPHAR ! First shape parameter of the rain - ! size distribution (generalized gamma law) -REAL, INTENT(IN) :: PNUR ! Second shape parameter of the rain - ! size distribution (generalized gamma law) -REAL, INTENT(IN) :: PESR ! Efficiency of aggregates collecting rain -REAL, INTENT(IN) :: PEXMASSR ! Mass exponent of rain -REAL, INTENT(IN) :: PFALLS ! Fall speed constant of aggregates -REAL, INTENT(IN) :: PEXFALLS ! Fall speed exponent of aggregates -REAL, INTENT(IN) :: PFALLR ! Fall speed constant of rain -REAL, INTENT(IN) :: PEXFALLR ! Fall speed exponent of rain -REAL, INTENT(IN) :: PLBDASMAX ! Maximun slope of size distribution of aggregates -REAL, INTENT(IN) :: PLBDARMAX ! Maximun slope of size distribution of rain -REAL, INTENT(IN) :: PLBDASMIN ! Minimun slope of size distribution of aggregates -REAL, INTENT(IN) :: PLBDARMIN ! Minimun slope of size distribution of rain -REAL, INTENT(IN) :: PDINFTY ! Factor to define the largest diameter up to - ! which the diameter integration is performed -REAL, INTENT(IN) :: PAG, PBS, PAS -! -REAL, DIMENSION(:,:), INTENT(INOUT) :: PRRCOLSS! Scaled fall speed difference in - ! the mass collection kernel as a - ! function of LAMBDAX and LAMBDAZ -! -! -!* 0.2 Declarations of local variables -! ------------------------------- -! -! -INTEGER :: JLBDAS ! Slope index of the size distribution of aggregates -INTEGER :: JLBDAR ! Slope index of the size distribution of rain -INTEGER :: JDS ! Diameter index of a particle of aggregates -INTEGER :: JDR ! Diameter index of a particle of rain -! -INTEGER :: INR ! Number of diameter step for the partial integration -! -! -REAL :: ZLBDAS ! Current slope parameter LAMBDA of aggregates -REAL :: ZLBDAR ! Current slope parameter LAMBDA of rain -REAL :: ZDLBDAS ! Growth rate of the slope parameter LAMBDA of aggregates -REAL :: ZDLBDAR ! Growth rate of the slope parameter LAMBDA of rain -REAL :: ZDDS ! Integration step of the diameter of aggregates -REAL :: ZDDSCALR! Integration step of the diameter of rain (scaling integral) -REAL :: ZDDCOLLR! Integration step of the diameter of rain (fallspe integral) -REAL :: ZDS ! Current diameter of the particle aggregates -REAL :: ZDR ! Current diameter of the rain -REAL :: ZDRMAX ! Maximal diameter of the raindrops where the integration ends -REAL :: ZCOLLR ! Single integral of the mass weighted fall speed difference - ! over the spectrum of rain -REAL :: ZCOLLDRMAX ! Maximum ending point for the partial integral -REAL :: ZCOLLSR ! Double integral of the mass weighted fall speed difference - ! over the spectra of aggregates and rain -REAL :: ZSCALR ! Single integral of the scaling factor over - ! the spectrum of rain -REAL :: ZSCALSR ! Double integral of the scaling factor over - ! the spectra of aggregates and rain -REAL :: ZFUNC ! Ancillary function -REAL :: ZCST1 -! -! -!------------------------------------------------------------------------------- -! -! -!* 1 COMPUTE THE SCALED VELOCITY DIFFERENCE IN THE MASS -!* COLLECTION KERNEL, -! ------------------------------------------------- -! -! -! -!* 1.0 Initialization -! -PRRCOLSS(:,:) = 0.0 -ZCST1 = (3.0/XPI)/XRHOLW -! -!* 1.1 Compute the growth rate of the slope factors LAMBDA -! -ZDLBDAS = EXP( LOG(PLBDASMAX/PLBDASMIN)/REAL(SIZE(PRRCOLSS(:,:),1)-1) ) -ZDLBDAR = EXP( LOG(PLBDARMAX/PLBDARMIN)/REAL(SIZE(PRRCOLSS(:,:),2)-1) ) -! -!* 1.2 Scan the slope factors LAMBDAX and LAMBDAZ -! -DO JLBDAS = 1,SIZE(PRRCOLSS(:,:),1) - ZLBDAS = PLBDASMIN * ZDLBDAS ** (JLBDAS-1) -! -!* 1.3 Compute the diameter steps -! - ZDDS = PDINFTY / (REAL(KND) * ZLBDAS) - DO JLBDAR = 1,SIZE(PRRCOLSS(:,:),2) - ZLBDAR = PLBDARMIN * ZDLBDAR ** (JLBDAR-1) -! -!* 1.4 Initialize the collection integrals -! - ZSCALSR = 0.0 - ZCOLLSR = 0.0 -! -!* 1.5 Compute the diameter steps -! - ZDDSCALR = PDINFTY / (REAL(KND) * ZLBDAR) -! -!* 1.6 Scan over the diameters DS and DR -! - DO JDS = 1,KND-1 - ZDS = ZDDS * REAL(JDS) - ZSCALR = 0.0 - ZCOLLR = 0.0 - DO JDR = 1,KND-1 - ZDR = ZDDSCALR * REAL(JDR) -! -!* 1.7 Compute the normalization factor by integration over the -! dimensional spectrum of rain -! - ZSCALR = ZSCALR + (ZDS+ZDR)**2 * ZDR**PEXMASSR & - * GENERAL_GAMMA(PALPHAR,PNUR,ZLBDAR,ZDR) - END DO -! -!* 1.8 Compute the scaled fall speed difference by partial -! integration over the dimensional spectrum of rain -! - ZFUNC = PAG - PAS*ZDS**(PBS-3.0) ! approximate limit is Ds=240 microns - IF( ZFUNC>0.0 ) THEN - ZDRMAX = ZDS*( ZCST1*ZFUNC )**0.3333333 - ELSE - ZDRMAX = PDINFTY / ZLBDAR - END IF - IF( ZDS>1.0E-4 ) THEN ! allow computation if Ds>100 microns - ! corresponding to a maximal density of the aggregates of XRHOLW - IF( ZDRMAX >= 0.5*ZDDSCALR ) THEN - INR = CEILING( ZDRMAX/ZDDSCALR ) - ZDDCOLLR = ZDRMAX / REAL(INR) - IF (INR>=KND ) THEN - INR = KND - ZDDCOLLR = ZDDSCALR - END IF - DO JDR = 1,INR-1 - ZDR = ZDDCOLLR * REAL(JDR) - ZCOLLR = ZCOLLR + (ZDS+ZDR)**2 * ZDR**PEXMASSR & - * PESR * ABS(PFALLS*ZDS**PEXFALLS-PFALLR*ZDR**PEXFALLR) & - * GENERAL_GAMMA(PALPHAR,PNUR,ZLBDAR,ZDR) - END DO - ZCOLLDRMAX = (ZDS+ZDRMAX)**2 * ZDRMAX**PEXMASSR & - * PESR * ABS(PFALLS*ZDS**PEXFALLS-PFALLR*ZDRMAX**PEXFALLR) & - * GENERAL_GAMMA(PALPHAR,PNUR,ZLBDAR,ZDRMAX) - ZCOLLR = (ZCOLLR + 0.5*ZCOLLDRMAX)*(ZDDCOLLR/ZDDSCALR) -! -!* 1.9 Compute the normalization factor by integration over the -! dimensional spectrum of aggregates -! - ZFUNC = GENERAL_GAMMA(PALPHAS,PNUS,ZLBDAS,ZDS) - ZSCALSR = ZSCALSR + ZSCALR * ZFUNC -! -!* 1.10 Compute the scaled fall speed difference by integration over -! the dimensional spectrum of aggregates -! - ZCOLLSR = ZCOLLSR + ZCOLLR * ZFUNC - END IF -! -! Otherwise ZDRMAX = 0.0 so the density of the graupel cannot be reached -! and so PRRCOLSS(JLBDAS,JLBDAR) = 0.0 ! -! - END IF - END DO -! -!* 1.11 Scale the fall speed difference -! - IF( ZSCALSR>0.0 ) PRRCOLSS(JLBDAS,JLBDAR) = ZCOLLSR / ZSCALSR - END DO -END DO -! -END SUBROUTINE RRCOLSS diff --git a/src/mesonh/micro/rscolrg.f90 b/src/mesonh/micro/rscolrg.f90 deleted file mode 100644 index caa868e91d39cbe12010bfa2c265ffe35304dba4..0000000000000000000000000000000000000000 --- a/src/mesonh/micro/rscolrg.f90 +++ /dev/null @@ -1,312 +0,0 @@ -!MNH_LIC Copyright 1995-2019 CNRS, Meteo-France and Universite Paul Sabatier -!MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence -!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt -!MNH_LIC for details. version 1. -!----------------------------------------------------------------- -! ################### - MODULE MODI_RSCOLRG -! ################### -! -INTERFACE -! - SUBROUTINE RSCOLRG( KND, PALPHAS, PZNUS, PALPHAR, PNUR, & - PESR, PEXMASSS, PFALLS, PEXFALLS, PFALLR, PEXFALLR, & - PLBDASMAX, PLBDARMAX, PLBDASMIN, PLBDARMIN, & - PDINFTY, PRSCOLRG,PAG, PBS, PAS ) -! -INTEGER, INTENT(IN) :: KND ! Number of discrete size intervals in DS and DR -! -REAL, INTENT(IN) :: PALPHAS ! First shape parameter of the aggregates - ! size distribution (generalized gamma law) -REAL, INTENT(IN) :: PZNUS ! Second shape parameter of the aggregates - ! size distribution (generalized gamma law) -REAL, INTENT(IN) :: PALPHAR ! First shape parameter of the rain - ! size distribution (generalized gamma law) -REAL, INTENT(IN) :: PNUR ! Second shape parameter of the rain - ! size distribution (generalized gamma law) -REAL, INTENT(IN) :: PESR ! Efficiency of the aggregates collecting rain -REAL, INTENT(IN) :: PEXMASSS ! Mass exponent of the aggregates -REAL, INTENT(IN) :: PFALLS ! Fall speed constant of the aggregates -REAL, INTENT(IN) :: PEXFALLS ! Fall speed exponent of the aggregates -REAL, INTENT(IN) :: PFALLR ! Fall speed constant of rain -REAL, INTENT(IN) :: PEXFALLR ! Fall speed exponent of rain -REAL, INTENT(IN) :: PLBDASMAX ! Maximun slope of size distribution of the aggregates -REAL, INTENT(IN) :: PLBDARMAX ! Maximun slope of size distribution of rain -REAL, INTENT(IN) :: PLBDASMIN ! Minimun slope of size distribution of the aggregates -REAL, INTENT(IN) :: PLBDARMIN ! Minimun slope of size distribution of rain -REAL, INTENT(IN) :: PDINFTY ! Factor to define the largest diameter up to - ! which the diameter integration is performed -REAL, INTENT(IN) :: PAG, PBS, PAS -! -REAL, DIMENSION(:,:), INTENT(INOUT) :: PRSCOLRG! Scaled fall speed difference in - ! the mass collection kernel as a - ! function of LAMBDAX and LAMBDAZ -! - END SUBROUTINE RSCOLRG -! -END INTERFACE -! - END MODULE MODI_RSCOLRG -! ######################################################################## - SUBROUTINE RSCOLRG( KND, PALPHAS, PZNUS, PALPHAR, PNUR, & - PESR, PEXMASSS, PFALLS, PEXFALLS, PFALLR, PEXFALLR, & - PLBDASMAX, PLBDARMAX, PLBDASMIN, PLBDARMIN, & - PDINFTY, PRSCOLRG,PAG, PBS, PAS ) -! ######################################################################## -! -! -! -!!**** * - Build up a look-up table containing the scaled fall speed -!! difference between size distributed particles of the aggregates and Z -!! -!! -!! PURPOSE -!! ------- -!! The purpose of this routine is to integrate numerically the scaled fall -!! speed difference between aggregates and rain for use in collection -!! kernels. A first integral of the form -!! -!! infty Dz_max -!! / / -!! |{| } -!! |{| E_xz (Dx+Dz)^2 |cxDx^dx-czDz^dz| Dz^bz n(Dz) dDz} n(Dx) dDx -!! |{| } -!! / / -!! 0 Dz_min -!! -!! is evaluated and normalised by a second integral of the form -!! -!! infty -!! / / -!! |{| } -!! |{| (Dx+Dz)^2 Dz^bz n(Dz) dDz} n(Dx) dDx -!! |{| } -!! / / -!! 0 -!! -!! The result is stored in a two-dimensional array. -!! -!!** METHOD -!! ------ -!! The free parameters of the size distribution function of the aggregates -!! and Z (slope parameter LAMBDA) are discretized with a geometrical rate -!! in a specific range -!! LAMBDA = exp( (Log(LAMBDA_max) - Log(LAMBDA_min))/N_interval ) -!! The two above integrals are performed using the trapezoidal scheme. -!! -!! EXTERNAL -!! -------- -!! MODI_GENERAL_GAMMA: Generalized gamma distribution law -!! -!! IMPLICIT ARGUMENTS -!! ------------------ -!! MODD_CST : XPI,XRHOLW -!! MODD_RAIN_ICE_DESCR: XAS,XAS,XBS -!! -!! REFERENCE -!! --------- -!! B.S. Ferrier , 1994 : A Double-Moment Multiple-Phase Four-Class -!! Bulk Ice Scheme,JAS,51,249-280. -!! -!! AUTHOR -!! ------ -!! J.-P. Pinty * Laboratoire d'Aerologie * -!! -!! MODIFICATIONS -!! ------------- -!! Original 8/11/95 -!! -! P. Wautelet 26/04/2019: replace non-standard FLOAT function by REAL function -! -!------------------------------------------------------------------------------- -! -! -!* 0. DECLARATIONS -! ------------ -! -USE MODI_GENERAL_GAMMA -! -USE MODD_CST -USE MODD_RAIN_ICE_DESCR -! -IMPLICIT NONE -! -!* 0.1 Declarations of dummy arguments -! ------------------------------- -! -! -INTEGER, INTENT(IN) :: KND ! Number of discrete size intervals in DS and DR -! -REAL, INTENT(IN) :: PALPHAS ! First shape parameter of the aggregates - ! size distribution (generalized gamma law) -REAL, INTENT(IN) :: PZNUS ! Second shape parameter of the aggregates - ! size distribution (generalized gamma law) -REAL, INTENT(IN) :: PALPHAR ! First shape parameter of the rain - ! size distribution (generalized gamma law) -REAL, INTENT(IN) :: PNUR ! Second shape parameter of the rain - ! size distribution (generalized gamma law) -REAL, INTENT(IN) :: PESR ! Efficiency of the aggregates collecting rain -REAL, INTENT(IN) :: PEXMASSS ! Mass exponent of the aggregates -REAL, INTENT(IN) :: PFALLS ! Fall speed constant of the aggregates -REAL, INTENT(IN) :: PEXFALLS ! Fall speed exponent of the aggregates -REAL, INTENT(IN) :: PFALLR ! Fall speed constant of rain -REAL, INTENT(IN) :: PEXFALLR ! Fall speed exponent of rain -REAL, INTENT(IN) :: PLBDASMAX ! Maximun slope of size distribution of the aggregates -REAL, INTENT(IN) :: PLBDARMAX ! Maximun slope of size distribution of rain -REAL, INTENT(IN) :: PLBDASMIN ! Minimun slope of size distribution of the aggregates -REAL, INTENT(IN) :: PLBDARMIN ! Minimun slope of size distribution of rain -REAL, INTENT(IN) :: PDINFTY ! Factor to define the largest diameter up to - ! which the diameter integration is performed -REAL, INTENT(IN) :: PAG, PBS, PAS -! -REAL, DIMENSION(:,:), INTENT(INOUT) :: PRSCOLRG! Scaled fall speed difference in - ! the mass collection kernel as a - ! function of LAMBDAX and LAMBDAZ -! -! -!* 0.2 Declarations of local variables -! ------------------------------- -! -! -INTEGER :: JLBDAS ! Slope index of the size distribution of the aggregates -INTEGER :: JLBDAR ! Slope index of the size distribution of rain -INTEGER :: JDS ! Diameter index of a particle of the aggregates -INTEGER :: JDR ! Diameter index of a particle of rain -! -INTEGER :: INR ! Number of diameter step for the partial integration -! -REAL :: ZLBDAS ! Current slope parameter LAMBDA of the aggregates -REAL :: ZLBDAR ! Current slope parameter LAMBDA of rain -REAL :: ZDLBDAS ! Growth rate of the slope parameter LAMBDA of the aggregates -REAL :: ZDLBDAR ! Growth rate of the slope parameter LAMBDA of rain -REAL :: ZDDS ! Integration step of the diameter of the aggregates -REAL :: ZDDSCALR! Integration step of the diameter of rain (scaling integral) -REAL :: ZDDCOLLR! Integration step of the diameter of rain (fallspe integral) -REAL :: ZDS ! Current diameter of the particle aggregates -REAL :: ZDR ! Current diameter of the raindrops -REAL :: ZDRMIN ! Minimal diameter of the raindrops where the integration starts -REAL :: ZDRMAX ! Maximal diameter of the raindrops where the integration ends -REAL :: ZCOLLR ! Single integral of the mass weighted fall speed difference - ! over the spectrum of rain -REAL :: ZCOLLDRMIN ! Minimum ending point for the partial integral -REAL :: ZCOLLSR ! Double integral of the mass weighted fall speed difference - ! over the spectra of the aggregates and rain -REAL :: ZSCALR ! Single integral of the scaling factor over - ! the spectrum of rain -REAL :: ZSCALSR ! Double integral of the scaling factor over - ! the spectra of the aggregates and rain -REAL :: ZFUNC ! Ancillary function -REAL :: ZCST1 -! -! -!------------------------------------------------------------------------------- -! -! -!* 1 COMPUTE THE SCALED VELOCITY DIFFERENCE IN THE MASS -!* COLLECTION KERNEL, -! ------------------------------------------------- -! -! -!* 1.0 Initialization -! -PRSCOLRG(:,:) = 0.0 -ZCST1 = (3.0/XPI)/XRHOLW -! -!* 1.1 Compute the growth rate of the slope factors LAMBDA -! -ZDLBDAR = EXP( LOG(PLBDARMAX/PLBDARMIN)/REAL(SIZE(PRSCOLRG(:,:),1)-1) ) -ZDLBDAS = EXP( LOG(PLBDASMAX/PLBDASMIN)/REAL(SIZE(PRSCOLRG(:,:),2)-1) ) -! -!* 1.2 Scan the slope factors LAMBDAX and LAMBDAZ -! -DO JLBDAR = 1,SIZE(PRSCOLRG(:,:),1) - ZLBDAR = PLBDARMIN * ZDLBDAR ** (JLBDAR-1) - ZDRMAX = PDINFTY / ZLBDAR -! -!* 1.3 Compute the diameter steps -! - ZDDSCALR = PDINFTY / (REAL(KND) * ZLBDAR) - DO JLBDAS = 1,SIZE(PRSCOLRG(:,:),2) - ZLBDAS = PLBDASMIN * ZDLBDAS ** (JLBDAS-1) -! -!* 1.4 Initialize the collection integrals -! - ZSCALSR = 0.0 - ZCOLLSR = 0.0 -! -!* 1.5 Compute the diameter steps -! - ZDDS = PDINFTY / (REAL(KND) * ZLBDAS) -! -!* 1.6 Scan over the diameters DS and DR -! - DO JDS = 1,KND-1 - ZDS = ZDDS * REAL(JDS) - ZSCALR = 0.0 - ZCOLLR = 0.0 - DO JDR = 1,KND-1 - ZDR = ZDDSCALR * REAL(JDR) -! -!* 1.7 Compute the normalization factor by integration over the -! dimensional spectrum of rain -! - ZSCALR = ZSCALR + (ZDS+ZDR)**2 * GENERAL_GAMMA(PALPHAR,PNUR,ZLBDAR,ZDR) - END DO -! -!* 1.8 Compute the scaled fall speed difference by partial -! integration over the dimensional spectrum of rain -! - ZFUNC = PAG - PAS*ZDS**(PBS-3.0) ! approximate limit is Ds=240 microns - IF( ZFUNC>0.0 ) THEN - ZDRMIN = ZDS*( ZCST1*ZFUNC )**0.3333333 - ELSE - ZDRMIN = 0.0 - END IF - IF( ZDS>1.0E-4 ) THEN ! allow computation if Ds>100 microns - ! corresponding to a maximal density of the aggregates of XRHOLW - IF( (ZDRMAX-ZDRMIN) >= 0.5*ZDDSCALR ) THEN - INR = CEILING( (ZDRMAX-ZDRMIN)/ZDDSCALR ) - ZDDCOLLR = (ZDRMAX-ZDRMIN) / REAL(INR) - DO JDR = 1,INR-1 - ZDR = ZDDCOLLR * REAL(JDR) + ZDRMIN - ZCOLLR = ZCOLLR + (ZDS+ZDR)**2 & - * GENERAL_GAMMA(PALPHAR,PNUR,ZLBDAR,ZDR) & - * PESR * ABS(PFALLS*ZDS**PEXFALLS-PFALLR*ZDR**PEXFALLR) - END DO - IF( ZDRMIN>0.0 ) THEN - ZCOLLDRMIN = (ZDS+ZDRMIN)**2 & - * GENERAL_GAMMA(PALPHAR,PNUR,ZLBDAR,ZDRMIN) & - * PESR * ABS(PFALLS*ZDS**PEXFALLS-PFALLR*ZDRMIN**PEXFALLR) - ELSE - ZCOLLDRMIN = 0.0 - END IF - ZCOLLR = (ZCOLLR + 0.5*ZCOLLDRMIN)*(ZDDCOLLR/ZDDSCALR) -! -!* 1.9 Compute the normalization factor by integration over the -! dimensional spectrum of the aggregates -! - ZFUNC = (ZDS**PEXMASSS) * GENERAL_GAMMA(PALPHAS,PZNUS,ZLBDAS,ZDS) - ZSCALSR = ZSCALSR + ZSCALR * ZFUNC -! -!* 1.10 Compute the scaled fall speed difference by integration over -! the dimensional spectrum of the aggregates -! - ZCOLLSR = ZCOLLSR + ZCOLLR * ZFUNC -! -! Otherwise ZDRMIN>ZDRMAX so PRRCOLSS(JLBDAS,JLBDAR) = 0.0 ! -! - END IF -! -! Otherwise ZDRMAX = 0.0 so the density of the graupel cannot be reached -! and so PRRCOLSS(JLBDAS,JLBDAR) = 0.0 ! -! - END IF - END DO -! -!* 1.10 Scale the fall speed difference -! - IF( ZSCALSR>0.0 ) PRSCOLRG(JLBDAR,JLBDAS) = ZCOLLSR / ZSCALSR - END DO -END DO -! -END SUBROUTINE RSCOLRG diff --git a/src/mesonh/micro/rzcolx.f90 b/src/mesonh/micro/rzcolx.f90 deleted file mode 100644 index 28658241cf1021a29de694cd5a99b85e9c3340d9..0000000000000000000000000000000000000000 --- a/src/mesonh/micro/rzcolx.f90 +++ /dev/null @@ -1,271 +0,0 @@ -!MNH_LIC Copyright 1995-2019 CNRS, Meteo-France and Universite Paul Sabatier -!MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence -!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt -!MNH_LIC for details. version 1. -!----------------------------------------------------------------- -! ################## - MODULE MODI_RZCOLX -! ################## -! -INTERFACE -! - SUBROUTINE RZCOLX( KND, PALPHAX, PNUX, PALPHAZ, PNUZ, & - PEXZ, PEXMASSZ, PFALLX, PEXFALLX, PFALLZ, PEXFALLZ, & - PLBDAXMAX, PLBDAZMAX, PLBDAXMIN, PLBDAZMIN, & - PDINFTY, PRZCOLX ) -! -INTEGER, INTENT(IN) :: KND ! Number of discrete size intervals in DX and DZ -! -! -REAL, INTENT(IN) :: PALPHAX ! First shape parameter of the specy X - ! size distribution (generalized gamma law) -REAL, INTENT(IN) :: PNUX ! Second shape parameter of the specy X - ! size distribution (generalized gamma law) -REAL, INTENT(IN) :: PALPHAZ ! First shape parameter of the specy Z - ! size distribution (generalized gamma law) -REAL, INTENT(IN) :: PNUZ ! Second shape parameter of the specy Z - ! size distribution (generalized gamma law) -REAL, INTENT(IN) :: PEXZ ! Efficiency of specy X collecting specy Z -REAL, INTENT(IN) :: PEXMASSZ ! Mass exponent of specy Z -REAL, INTENT(IN) :: PFALLX ! Fall speed constant of specy X -REAL, INTENT(IN) :: PEXFALLX ! Fall speed exponent of specy X -REAL, INTENT(IN) :: PFALLZ ! Fall speed constant of specy Z -REAL, INTENT(IN) :: PEXFALLZ ! Fall speed exponent of specy Z -REAL, INTENT(IN) :: PLBDAXMAX ! Maximun slope of size distribution of specy X -REAL, INTENT(IN) :: PLBDAZMAX ! Maximun slope of size distribution of specy Z -REAL, INTENT(IN) :: PLBDAXMIN ! Minimun slope of size distribution of specy X -REAL, INTENT(IN) :: PLBDAZMIN ! Minimun slope of size distribution of specy Z -REAL, INTENT(IN) :: PDINFTY ! Factor to define the largest diameter up to - ! which the diameter integration is performed -! -REAL, DIMENSION(:,:), INTENT(INOUT) :: PRZCOLX ! Scaled fall speed difference in - ! the mass collection kernel as a - ! function of LAMBDAX and LAMBDAZ -! - END SUBROUTINE RZCOLX -! -END INTERFACE -! - END MODULE MODI_RZCOLX -! ######################################################################## - SUBROUTINE RZCOLX( KND, PALPHAX, PNUX, PALPHAZ, PNUZ, & - PEXZ, PEXMASSZ, PFALLX, PEXFALLX, PFALLZ, PEXFALLZ, & - PLBDAXMAX, PLBDAZMAX, PLBDAXMIN, PLBDAZMIN, & - PDINFTY, PRZCOLX ) -! ######################################################################## -! -! -! -!!**** * - Build up a look-up table containing the scaled fall speed -!! difference between size distributed particles of specy X and Z -!! -!! -!! PURPOSE -!! ------- -!! The purpose of this routine is to integrate numerically the scaled fall -!! speed difference between specy X and specy Z for use in collection -!! kernels. A first integral of the form -!! -!! infty -!! / / -!! |{| } -!! |{| E_xz (Dx+Dz)^2 |cxDx^dx-czDz^dz| Dz^bz g(Dz) dDz} g(Dx) dDx -!! |{| } -!! / / -!! 0 -!! -!! is evaluated and normalised by a second integral of the form -!! -!! infty -!! / / -!! |{| } -!! |{| (Dx+Dz)^2 Dz^bz g(Dz) dDz} g(Dx) dDx -!! |{| } -!! / / -!! 0 -!! -!! where E_xz is a collection efficiency, g(D) is the generalized Gamma -!! distribution law. The 'infty' diameter is defined according to the -!! current value of the Lbda that is D_x=PDINFTY/Lbda_x or -!! D_z=PINFTY/Lbda_z. -!! The result is stored in a two-dimensional array. -!! -!!** METHOD -!! ------ -!! The free parameters of the size distribution function of specy X and Z -!! (slope parameter LAMBDA) are discretized with a geometrical rate in a -!! specific range -!! LAMBDA = exp( (Log(LAMBDA_max) - Log(LAMBDA_min))/N_interval ) -!! The two above integrals are performed using the trapezoidal scheme and -!! the [0,infty] interval is discretized over KND values of D_x or D_z. -!! -!! EXTERNAL -!! -------- -!! MODI_GENERAL_GAMMA: Generalized gamma distribution law -!! -!! IMPLICIT ARGUMENTS -!! ------------------ -!! None -!! -!! REFERENCE -!! --------- -!! B.S. Ferrier , 1994 : A Double-Moment Multiple-Phase Four-Class -!! Bulk Ice Scheme,JAS,51,249-280. -!! -!! AUTHOR -!! ------ -!! J.-P. Pinty * Laboratoire d'Aerologie * -!! -!! MODIFICATIONS -!! ------------- -!! Original 8/11/95 -!! -! P. Wautelet 26/04/2019: replace non-standard FLOAT function by REAL function -! -!------------------------------------------------------------------------------- -! -! -!* 0. DECLARATIONS -! ------------ -! -USE MODI_GENERAL_GAMMA -! -IMPLICIT NONE -! -! -!* 0.1 Declarations of dummy arguments -! ------------------------------- -! -! -INTEGER, INTENT(IN) :: KND ! Number of discrete size intervals in DX and DZ -! -! -REAL, INTENT(IN) :: PALPHAX ! First shape parameter of the specy X - ! size distribution (generalized gamma law) -REAL, INTENT(IN) :: PNUX ! Second shape parameter of the specy X - ! size distribution (generalized gamma law) -REAL, INTENT(IN) :: PALPHAZ ! First shape parameter of the specy Z - ! size distribution (generalized gamma law) -REAL, INTENT(IN) :: PNUZ ! Second shape parameter of the specy Z - ! size distribution (generalized gamma law) -REAL, INTENT(IN) :: PEXZ ! Efficiency of specy X collecting specy Z -REAL, INTENT(IN) :: PEXMASSZ ! Mass exponent of specy Z -REAL, INTENT(IN) :: PFALLX ! Fall speed constant of specy X -REAL, INTENT(IN) :: PEXFALLX ! Fall speed exponent of specy X -REAL, INTENT(IN) :: PFALLZ ! Fall speed constant of specy Z -REAL, INTENT(IN) :: PEXFALLZ ! Fall speed exponent of specy Z -REAL, INTENT(IN) :: PLBDAXMAX ! Maximun slope of size distribution of specy X -REAL, INTENT(IN) :: PLBDAZMAX ! Maximun slope of size distribution of specy Z -REAL, INTENT(IN) :: PLBDAXMIN ! Minimun slope of size distribution of specy X -REAL, INTENT(IN) :: PLBDAZMIN ! Minimun slope of size distribution of specy Z -REAL, INTENT(IN) :: PDINFTY ! Factor to define the largest diameter up to - ! which the diameter integration is performed -! -REAL, DIMENSION(:,:), INTENT(INOUT) :: PRZCOLX ! Scaled fall speed difference in - ! the mass collection kernel as a - ! function of LAMBDAX and LAMBDAZ -! -! -!* 0.2 Declarations of local variables -! ------------------------------- -! -! -INTEGER :: JLBDAX ! Slope index of the size distribution of specy X -INTEGER :: JLBDAZ ! Slope index of the size distribution of specy Z -INTEGER :: JDX ! Diameter index of a particle of specy X -INTEGER :: JDZ ! Diameter index of a particle of specy Z -! -! -REAL :: ZLBDAX ! Current slope parameter LAMBDA of specy X -REAL :: ZLBDAZ ! Current slope parameter LAMBDA of specy Z -REAL :: ZDLBDAX ! Growth rate of the slope parameter LAMBDA of specy X -REAL :: ZDLBDAZ ! Growth rate of the slope parameter LAMBDA of specy Z -REAL :: ZDDX ! Integration step of the diameter of specy X -REAL :: ZDDZ ! Integration step of the diameter of specy Z -REAL :: ZDX ! Current diameter of the particle specy X -REAL :: ZDZ ! Current diameter of the particle specy Z -REAL :: ZCOLLZ ! Single integral of the mass weighted fall speed difference - ! over the spectrum of specy Z -REAL :: ZCOLLXZ ! Double integral of the mass weighted fall speed difference - ! over the spectra of specy X and specy Z -REAL :: ZSCALZ ! Single integral of the scaling factor over - ! the spectrum of specy Z -REAL :: ZSCALXZ ! Double integral of the scaling factor over - ! the spectra of specy X and specy Z -REAL :: ZFUNC ! Ancillary function -! -! -!------------------------------------------------------------------------------- -! -! -!* 1 COMPUTE THE SCALED VELOCITZ DIFFERENCE IN THE MASS -!* COLLECTION KERNEL, -! ------------------------------------------------- -! -! -! -!* 1.1 Compute the growth rate of the slope factors LAMBDA -! -ZDLBDAX = EXP( LOG(PLBDAXMAX/PLBDAXMIN)/REAL(SIZE(PRZCOLX(:,:),1)-1) ) -ZDLBDAZ = EXP( LOG(PLBDAZMAX/PLBDAZMIN)/REAL(SIZE(PRZCOLX(:,:),2)-1) ) -! -!* 1.2 Scan the slope factors LAMBDAX and LAMBDAZ -! -DO JLBDAX = 1,SIZE(PRZCOLX(:,:),1) - ZLBDAX = PLBDAXMIN * ZDLBDAX ** (JLBDAX-1) - DO JLBDAZ = 1,SIZE(PRZCOLX(:,:),2) - ZLBDAZ = PLBDAZMIN * ZDLBDAZ ** (JLBDAZ-1) -! -!* 1.3 Initialize the collection integrals -! - ZSCALXZ = 0.0 - ZCOLLXZ = 0.0 -! -!* 1.4 Compute the diameter steps -! - ZDDX = PDINFTY / (REAL(KND) * ZLBDAX) - ZDDZ = PDINFTY / (REAL(KND) * ZLBDAZ) -! -!* 1.5 Scan over the diameters DX and DZ -! - DO JDX = 1,KND-1 - ZDX = ZDDX * REAL(JDX) -! - ZSCALZ = 0.0 - ZCOLLZ = 0.0 - DO JDZ = 1,KND-1 - ZDZ = ZDDZ * REAL(JDZ) -! -!* 1.6 Compute the normalization factor by integration over the -! dimensional spectrum of specy Z -! - ZFUNC = (ZDX+ZDZ)**2 * ZDZ**PEXMASSZ & - * GENERAL_GAMMA(PALPHAZ,PNUZ,ZLBDAZ,ZDZ) - ZSCALZ = ZSCALZ + ZFUNC -! -!* 1.7 Compute the scaled fall speed difference by integration over -! the dimensional spectrum of specy Z -! - ZCOLLZ = ZCOLLZ + ZFUNC & - * PEXZ * ABS(PFALLX*ZDX**PEXFALLX-PFALLZ*ZDZ**PEXFALLZ) - END DO -! -!* 1.8 Compute the normalization factor by integration over the -! dimensional spectrum of specy X -! - ZFUNC = GENERAL_GAMMA(PALPHAX,PNUX,ZLBDAX,ZDX) - ZSCALXZ = ZSCALXZ + ZSCALZ * ZFUNC -! -!* 1.9 Compute the scaled fall speed difference by integration over -! the dimensional spectrum of specy X -! - ZCOLLXZ = ZCOLLXZ + ZCOLLZ * ZFUNC - END DO -! -!* 1.10 Scale the fall speed difference -! - PRZCOLX(JLBDAX,JLBDAZ) = ZCOLLXZ / ZSCALXZ - END DO -END DO -! -END SUBROUTINE RZCOLX