diff --git a/docs/Interfaces b/docs/Interfaces index 058e4f878ce35ea769b9e2950372185e49d10de8..acaadbf12975c70e5f9999c1e8375c64062d514f 100644 --- a/docs/Interfaces +++ b/docs/Interfaces @@ -15,9 +15,22 @@ PHYEX interfaces: - ini_... Dependencies: -- budget +- mode_budget - mode_msg, modd_io - modd_precision - yomhook, parkind1 +Specificities: +- in AROME, BUDGET_SORE_INIT does nothing: it is impossible to compute a tendencie + from the difference of a temporary variable. + Invalid: + budget_store_init(tempo_s) + modification of tempo_s + budget_store_end(tempo_s) + Valid: + budget_store_init(pronostic_s) #useless but valid + modification of pronostic_s + budget_store_end(pronostic_s) + Also valid: + budget_store_add(delta tempo_s) diff --git a/docs/TODO b/docs/TODO index 02d50d4cc3829797d16c16f4493add307bfc8432..a6a30bb9b71b49ad63795052a009ae1da7ab2206 100644 --- a/docs/TODO +++ b/docs/TODO @@ -19,19 +19,29 @@ Merge pb: - ice4_nucleation_wrapper: Tableaux allocatable introduits par Philippe dans meso-nh. Pas introduits (pour l'instant?) dans version common. - Ryad doit faire des tests pour regarder impact des allaocatble sur CPU. - si test OK, on passe en alloacatble - si test KO, arbitrage entre Philippe et Riad -- ice4_sedimentation_*: - Philippe a déclaré PINPRC et PINDEP en (:,:) à la place de (KIT,KJT) - En commentaire (version split), il met "dimensions of PINPRC and PINDEP not necessarily KIT,KJT" - Comprendre pourquoi, comment ça peut marcher dans la sédimentation - Code dans common en (KIT,KJT) - repasser code en (:,:) si besoin, ou passer en arg les dimensions effectives - ou modifier MNH pour toujours avoir KIT,KJT - une partie du code est maintentant dans rain_ice (déposition) + Ryad a fait des tests pour regarder impact des allocatable sur CPU => temps * 2 + Code à nettoyer quelque soit l'option retenue Etape 2: array syntax -> loop - en profiter pour supprimer args PA/PB des routines appelées depuis ice4_tendencies, comme pour nucleation +- regarder si pcompute et llcompute sont toujours tous deux nécessaires dans les mode_ice4* avec le passage en do - si possible, modifier ice4_sedimentation_split* dans le même esprit que stat - transformer sedimentation_split_momentum comme sedimentation_split + +Pb identifiés à corriger plus tard: +- deposition devrait être déplacée dans ice4_tendencies +- non reproduction en changeant le nombre de procs +- avec les optimisations de Ryad, les tableaux 3D de precip passés à ice4_tendencies + lorsque HSUBG_RC_RR_ACCR=='PRFR' ne sont pas utilisables puisque les K1, K2 et K3 + sont relatifs à la boucle IMICRO et que les calculs faits en debut de routine ne + concernent qu'une partie des points + => à corriger +- avec découpage en KPROMA, le code ne produit plus les memes resultats +- seules les options oper ont été testées, il manque des test pour sedim_after, nmaxiter, xmrstep, xtstep, autoconv, rainfr + +Répertoire arome/ext contient les codes non PHYEX qu'il faut modifier dans le pack pour qu'il puisse être compilé. +Ce répertoire devra être vidé à la fin du phasage, les modifications nécessaires ayant été fournies par ailleurs + +Budgets/DDH +- Le code dans budget_DDH devra être transféré dans mode_budget +- les routines arome specifiques aux budgets sont dans mpa/micro, il faudrait les mettre ailleurs diff --git a/src/arome/aux/budget.F90 b/src/arome/aux/budget_DDH.F90 similarity index 72% rename from src/arome/aux/budget.F90 rename to src/arome/aux/budget_DDH.F90 index 244a3a879b84bfbb6234a17d12d89302b200f22a..f934798c0b769d8f9ea4845f8144d585700a8def 100644 --- a/src/arome/aux/budget.F90 +++ b/src/arome/aux/budget_DDH.F90 @@ -1,6 +1,6 @@ ! ######spl ! ##################################### - SUBROUTINE BUDGET(PVARS,KBUDN,HBUVAR,YDDDH, YDLDDH, YDMDDH) + SUBROUTINE BUDGET_DDH(PVARS,KBUDN,HBUVAR,YDDDH, YDLDDH, YDMDDH, LDISDIFF) USE PARKIND1, ONLY : JPRB USE YOMHOOK , ONLY : LHOOK, DR_HOOK ! ##################################### @@ -52,6 +52,7 @@ !! MODIFICATIONS !! ------------- !! F.Voitus 16/05/17 : Introduction of new DDH superstructure for budget +!! S.Riette Jan 2022 : LDISDIFF case !! !------------------------------------------------------------------------------- @@ -78,6 +79,7 @@ TYPE(TYP_DDH) , INTENT(INOUT) :: YDDDH TYPE(TLDDH) , INTENT(IN) :: YDLDDH TYPE(TMDDH) , INTENT(IN) :: YDMDDH +LOGICAL, OPTIONAL , INTENT(IN) :: LDISDIFF ! PVARS contains the increment (default is .FALSE.) !* 0.2 Declaration of local variables: REAL,DIMENSION(NPROMADDH,NFLEVGDDH):: ZVARS @@ -85,10 +87,16 @@ LOGICAL :: LINST,LDDH INTEGER::IINCR,JLON,JLEV,IFDIA,IOFF CHARACTER (LEN=4) :: CLPROC CHARACTER (LEN=11) :: CLDDH +LOGICAL :: LISDIFF REAL(KIND=JPRB) :: ZHOOK_HANDLE -IF (LHOOK) CALL DR_HOOK('BUDGET',0,ZHOOK_HANDLE) +IF (LHOOK) CALL DR_HOOK('BUDGET_DDH',0,ZHOOK_HANDLE) +IF (PRESENT(LDISDIFF)) THEN + LISDIFF=LDISDIFF +ELSE + LISDIFF=.FALSE. +ENDIF IFDIA=SIZE(PVARS,1) ZVARS(:,:)=0. @@ -98,7 +106,7 @@ ELSE IOFF=0 ENDIF -CLPROC=HBUVAR(1:4) +CLPROC=HBUVAR(1:MIN(4, LEN(HBUVAR)))//REPEAT('_', MAX(0, 4-LEN(HBUVAR))) !if length is less than 4, fill with '_' IF (YDLDDH%LDDH_OMP) THEN CLDDH='T'//YDDDH%YVARMULT(KBUDN)%CNAME//CLPROC ELSE @@ -107,7 +115,7 @@ ENDIF ! depi not stored through call to budget but add_field IF ((CLPROC=='DEPI').OR.(CLPROC=='CEDS')) THEN - IF (LHOOK) CALL DR_HOOK('BUDGET',1,ZHOOK_HANDLE) + IF (LHOOK) CALL DR_HOOK('BUDGET_DDH',1,ZHOOK_HANDLE) RETURN ENDIF @@ -122,12 +130,21 @@ IF (YDLDDH%LDDH_OMP) THEN ENDDO ENDDO ELSE - DO JLEV=1,NFLEVGDDH - DO JLON=1,IFDIA - ZVARS(JLON,JLEV)=PVARS(JLON,1,JLEV+IOFF)-YDDDH%RVARSM(JLON,1,JLEV,KBUDN) - YDDDH%RVARSM(JLON,1,JLEV,KBUDN)=PVARS(JLON,1,JLEV+IOFF) + IF (LISDIFF) THEN + DO JLEV=1,NFLEVGDDH + DO JLON=1,IFDIA + ZVARS(JLON,JLEV)=PVARS(JLON,1,JLEV+IOFF) + YDDDH%RVARSM(JLON,1,JLEV,KBUDN)=YDDDH%RVARSM(JLON,1,JLEV,KBUDN)+PVARS(JLON,1,JLEV+IOFF) + ENDDO ENDDO - ENDDO + ELSE + DO JLEV=1,NFLEVGDDH + DO JLON=1,IFDIA + ZVARS(JLON,JLEV)=PVARS(JLON,1,JLEV+IOFF)-YDDDH%RVARSM(JLON,1,JLEV,KBUDN) + YDDDH%RVARSM(JLON,1,JLEV,KBUDN)=PVARS(JLON,1,JLEV+IOFF) + ENDDO + ENDDO + ENDIF ENDIF ELSE IF (CLPROC=='INIF') THEN @@ -138,12 +155,21 @@ ELSE ENDDO ENDDO ELSE - DO JLEV=1,NFLEVGDDH - DO JLON=1,IFDIA - ZVARS(JLON,JLEV)=PVARS(JLON,1,JLEV+IOFF)-TVARSM(JLON,1,JLEV,KBUDN) - TVARSM(JLON,1,JLEV,KBUDN)=PVARS(JLON,1,JLEV+IOFF) + IF (LISDIFF) THEN + DO JLEV=1,NFLEVGDDH + DO JLON=1,IFDIA + ZVARS(JLON,JLEV)=PVARS(JLON,1,JLEV+IOFF) + TVARSM(JLON,1,JLEV,KBUDN)=TVARSM(JLON,1,JLEV,KBUDN)+PVARS(JLON,1,JLEV+IOFF) + ENDDO ENDDO - ENDDO + ELSE + DO JLEV=1,NFLEVGDDH + DO JLON=1,IFDIA + ZVARS(JLON,JLEV)=PVARS(JLON,1,JLEV+IOFF)-TVARSM(JLON,1,JLEV,KBUDN) + TVARSM(JLON,1,JLEV,KBUDN)=PVARS(JLON,1,JLEV+IOFF) + ENDDO + ENDDO + ENDIF ENDIF ENDIF @@ -178,6 +204,6 @@ IF (CLPROC/='INIF') THEN ENDIF ENDIF -IF (LHOOK) CALL DR_HOOK('BUDGET',1,ZHOOK_HANDLE) -END SUBROUTINE BUDGET +IF (LHOOK) CALL DR_HOOK('BUDGET_DDH',1,ZHOOK_HANDLE) +END SUBROUTINE BUDGET_DDH diff --git a/src/arome/micro/ini_budget.F90 b/src/arome/aux/ini_budget.F90 similarity index 100% rename from src/arome/micro/ini_budget.F90 rename to src/arome/aux/ini_budget.F90 diff --git a/src/arome/micro/modd_budget.F90 b/src/arome/aux/modd_budget.F90 similarity index 94% rename from src/arome/micro/modd_budget.F90 rename to src/arome/aux/modd_budget.F90 index 51d6efd753d84372dbb729413ab0e8a428564f31..1f033601270a4834d15609054afe5c6dd418449a 100644 --- a/src/arome/micro/modd_budget.F90 +++ b/src/arome/aux/modd_budget.F90 @@ -38,11 +38,36 @@ !* 0. DECLARATIONS ! ------------ USE MODD_PARAMETERS, ONLY :JPBUMAX, JPBUPROMAX +USE DDH_MIX, ONLY : TYP_DDH +USE YOMLDDH, ONLY : TLDDH +USE YOMMDDH, ONLY : TMDDH ! IMPLICIT NONE SAVE ! +INTEGER, PARAMETER:: NBUDGET_RHO = 0 ! Reference number for budget of RhoJ +INTEGER, PARAMETER:: NBUDGET_U = 1 ! Reference number for budget of RhoJu and/or LES budgets with u +INTEGER, PARAMETER:: NBUDGET_V = 2 ! Reference number for budget of RhoJv and/or LES budgets with u +INTEGER, PARAMETER:: NBUDGET_W = 3 ! Reference number for budget of RhoJw and/or LES budgets with u +INTEGER, PARAMETER:: NBUDGET_TH = 4 ! Reference number for budget of RhoJTh and/or LES budgets with th +INTEGER, PARAMETER:: NBUDGET_TKE = 5 ! Reference number for budget of RhoJTke and/or LES budgets with Tke +INTEGER, PARAMETER:: NBUDGET_RV = 6 ! Reference number for budget of RhoJrv and/or LES budgets with rv +INTEGER, PARAMETER:: NBUDGET_RC = 7 ! Reference number for budget of RhoJrc and/or LES budgets with rc +INTEGER, PARAMETER:: NBUDGET_RR = 8 ! Reference number for budget of RhoJrr and/or LES budgets with rr +INTEGER, PARAMETER:: NBUDGET_RI = 9 ! Reference number for budget of RhoJri and/or LES budgets with ri +INTEGER, PARAMETER:: NBUDGET_RS = 10 ! Reference number for budget of RhoJrs and/or LES budgets with rs +INTEGER, PARAMETER:: NBUDGET_RG = 11 ! Reference number for budget of RhoJrg and/or LES budgets with rg +INTEGER, PARAMETER:: NBUDGET_RH = 12 ! Reference number for budget of RhoJrh and/or LES budgets with rh +INTEGER, PARAMETER:: NBUDGET_SV1 = 13 ! Reference number for 1st budget of RhoJsv and/or LES budgets with sv +! +TYPE TBUDGETDATA + INTEGER :: NBUDGET + TYPE(TYP_DDH), POINTER :: YDDDH=>NULL() + TYPE(TLDDH), POINTER :: YDLDDH=>NULL() + TYPE(TMDDH), POINTER :: YDMDDH=>NULL() +ENDTYPE +! ! General variables LOGICAL :: LBU_ENABLE=.FALSE. ! diff --git a/src/arome/aux/mode_budget.F90 b/src/arome/aux/mode_budget.F90 new file mode 100644 index 0000000000000000000000000000000000000000..bd59b9e97c988d013433b202c9428efdb58382ef --- /dev/null +++ b/src/arome/aux/mode_budget.F90 @@ -0,0 +1,52 @@ +MODULE MODE_BUDGET +USE MODD_BUDGET, ONLY : TBUDGETDATA +USE MODI_BUDGET_DDH, ONLY: BUDGET_DDH +IMPLICIT NONE +CONTAINS + +SUBROUTINE BUDGET_STORE_INIT(TPBUDGET, HSOURCE, PVARS) + TYPE(TBUDGETDATA), INTENT(INOUT) :: TPBUDGET ! Budget datastructure + CHARACTER(LEN=*), INTENT(IN) :: HSOURCE ! Name of the source term + REAL, DIMENSION(:,:,:), INTENT(IN) :: PVARS ! Current value to be stored +END SUBROUTINE BUDGET_STORE_INIT + +SUBROUTINE BUDGET_STORE_END(TPBUDGET, HSOURCE, PVARS) + TYPE(TBUDGETDATA), INTENT(INOUT) :: TPBUDGET ! Budget datastructure + CHARACTER(LEN=*), INTENT(IN) :: HSOURCE ! Name of the source term + REAL, DIMENSION(:,:,:), INTENT(IN) :: PVARS ! Current value to be stored + CALL BUDGET_DDH(PVARS, TPBUDGET%NBUDGET, HSOURCE, TPBUDGET%YDDDH, TPBUDGET%YDLDDH, TPBUDGET%YDMDDH) +END SUBROUTINE BUDGET_STORE_END + +SUBROUTINE BUDGET_STORE_ADD(TPBUDGET, HSOURCE, PVARS) +#ifdef REPRO48 +USE DDH_MIX, ONLY:NFLEVGDDH +USE MODDB_INTBUDGET, ONLY:TVARSM +#endif + TYPE(TBUDGETDATA), INTENT(INOUT) :: TPBUDGET ! Budget datastructure + CHARACTER(LEN=*), INTENT(IN) :: HSOURCE ! Name of the source term + REAL, DIMENSION(:,:,:), INTENT(IN) :: PVARS ! Current value to be stored +#ifdef REPRO48 + REAL, DIMENSION(SIZE(PVARS, 1), SIZE(PVARS, 2), SIZE(PVARS, 3)) :: ZVARS + INTEGER :: JLON, JLEV, IOFF + IF (SIZE(PVARS,3)==NFLEVGDDH+2) THEN + IOFF=1 + ELSE + IOFF=0 + ENDIF + ZVARS=PVARS + DO JLEV=1, NFLEVGDDH + DO JLON=1, SIZE(PVARS,1) + IF (TPBUDGET%YDLDDH%LDDH_OMP) THEN + ZVARS(JLON,1,JLEV+IOFF)=TPBUDGET%YDDDH%RVARSM(JLON,1,JLEV,TPBUDGET%NBUDGET)+ZVARS(JLON,1,JLEV+IOFF) + ELSE + ZVARS(JLON,1,JLEV+IOFF)=TVARSM(JLON,1,JLEV,TPBUDGET%NBUDGET)+ZVARS(JLON,1,JLEV+IOFF) + ENDIF + ENDDO + ENDDO + CALL BUDGET_DDH(ZVARS, TPBUDGET%NBUDGET, HSOURCE, TPBUDGET%YDDDH, TPBUDGET%YDLDDH, TPBUDGET%YDMDDH) +#else + CALL BUDGET_DDH(PVARS, TPBUDGET%NBUDGET, HSOURCE, TPBUDGET%YDDDH, TPBUDGET%YDLDDH, TPBUDGET%YDMDDH, & + &LDISDIFF=.TRUE.) +#endif +END SUBROUTINE BUDGET_STORE_ADD +END MODULE MODE_BUDGET diff --git a/src/arome/aux/mode_ll.F90 b/src/arome/aux/mode_ll.F90 new file mode 100644 index 0000000000000000000000000000000000000000..790a3acac9312351c098993143fe731baf8f60e7 --- /dev/null +++ b/src/arome/aux/mode_ll.F90 @@ -0,0 +1,14 @@ +MODULE MODE_ll +IMPLICIT NONE +CONTAINS + SUBROUTINE GET_INDICE_ll(KXOR, KYOR, KXEND, KYEND, KSIZE1, KSIZE2) + USE MODD_PARAMETERS, ONLY : JPHEXT + IMPLICIT NONE + INTEGER, INTENT(IN) :: KSIZE1, KSIZE2 + INTEGER, INTENT(OUT) :: KXOR, KYOR, KXEND, KYEND + KXOR=1+JPHEXT + KYOR=1+JPHEXT + KXEND=KSIZE1-JPHEXT + KYEND=KSIZE2-JPHEXT + END SUBROUTINE GET_INDICE_ll +END MODULE MODE_ll diff --git a/src/arome/micro/modi_budget.F90 b/src/arome/aux/modi_budget_DDH.F90 similarity index 70% rename from src/arome/micro/modi_budget.F90 rename to src/arome/aux/modi_budget_DDH.F90 index 968ae2c198adfcf60bc4666d3a5a148e5c07a939..888d53d8e920075753245d64b5e6406d4eabce6a 100644 --- a/src/arome/micro/modi_budget.F90 +++ b/src/arome/aux/modi_budget_DDH.F90 @@ -1,10 +1,10 @@ ! ######spl - MODULE MODI_BUDGET + MODULE MODI_BUDGET_DDH !################## ! INTERFACE ! -SUBROUTINE BUDGET(PVARS,KBUDN,HBUVAR,YDDDH, YDLDDH, YDMDDH) +SUBROUTINE BUDGET_DDH(PVARS,KBUDN,HBUVAR,YDDDH, YDLDDH, YDMDDH, LDISDIFF) ! USE DDH_MIX, ONLY : TYP_DDH USE YOMLDDH, ONLY : TLDDH @@ -17,9 +17,10 @@ CHARACTER (LEN=*) , INTENT(IN) :: HBUVAR ! Identifier of the Budget of the TYPE(TYP_DDH), INTENT(INOUT) :: YDDDH TYPE(TLDDH), INTENT(IN) :: YDLDDH TYPE(TMDDH), INTENT(IN) :: YDMDDH +LOGICAL, OPTIONAL, INTENT(IN) :: LDISDIFF ! PVARS contains the increment ! -END SUBROUTINE BUDGET +END SUBROUTINE BUDGET_DDH ! END INTERFACE ! -END MODULE MODI_BUDGET +END MODULE MODI_BUDGET_DDH diff --git a/src/arome/micro/modi_ini_budget.F90 b/src/arome/aux/modi_ini_budget.F90 similarity index 100% rename from src/arome/micro/modi_ini_budget.F90 rename to src/arome/aux/modi_ini_budget.F90 diff --git a/src/arome/modset_Ryad/arpifs/phys_dmn/apl_arome.F90 b/src/arome/ext/apl_arome.F90 similarity index 99% rename from src/arome/modset_Ryad/arpifs/phys_dmn/apl_arome.F90 rename to src/arome/ext/apl_arome.F90 index a1209595358fa3d8550fa78ee881b0c455aa6b76..0601ffe03abe1e2b001738fd7eb7ed1ac77fa6fe 100644 --- a/src/arome/modset_Ryad/arpifs/phys_dmn/apl_arome.F90 +++ b/src/arome/ext/apl_arome.F90 @@ -648,6 +648,9 @@ REAL(KIND=JPRB) :: ZUS__(KFDIA,0:KLEV+1), ZVS__(KFDIA,0:KLEV+1), REAL(KIND=JPRB) :: ZTKES_OUT__(KFDIA,0:KLEV+1), ZMF_UP__(KFDIA,0:KLEV+1), ZTHVREFM__(KFDIA,0:KLEV+1) ! thetav de l etat REAL(KIND=JPRB) :: ZTENDU_TURB__(KFDIA,0:KLEV+1), ZTENDV_TURB__(KFDIA,0:KLEV+1), ZTENDTHL_TURB__(KFDIA,0:KLEV+1) REAL(KIND=JPRB) :: ZTENDRT_TURB__(KFDIA,0:KLEV+1), ZTKEM__(KFDIA,0:KLEV+1), ZSRCS__(KFDIA,0:KLEV+1) +REAL(KIND=JPRB) :: ZHLC_HRC__(KFDIA,0:KLEV+1), ZHLC_HCF__(KFDIA,0:KLEV+1), & + & ZHLI_HRI__(KFDIA,0:KLEV+1), ZHLI_HCF__(KFDIA,0:KLEV+1) + REAL(KIND=JPRB) :: ZSIGS__(KFDIA,0:KLEV+1), ZEDR__(KFDIA,0:KLEV+1) ! THE DDH budgets REAL(KIND=JPRB) :: ZDP__(KFDIA,0:KLEV+1), ZTP__(KFDIA,0:KLEV+1), ZTPMF__(KFDIA,0:KLEV+1) @@ -1001,6 +1004,8 @@ ASSOCIATE(MINPRR=>YDPARAR%MINPRR, MINPRS=>YDPARAR%MINPRS, MVQS=>YDPARAR%MVQS, & & MINPRG=>YDPARAR%MINPRG, LOTOWNC=>YDPARAR%LOTOWNC, LFPREC3D=>YDPARAR%LFPREC3D, & & NGPAR=>YDPARAR%NGPAR, CSUBG_PR_PDF=>YDPARAR%CSUBG_PR_PDF, & & NRRI=>YDPARAR%NRRI, NRRL=>YDPARAR%NRRL, CSUBG_AUCV_RC=>YDPARAR%CSUBG_AUCV_RC, & + & CSUBG_AUCV_RI=>YDPARAR%CSUBG_AUCV_RI, CCONDENS=>YDPARAR%CCONDENS, & + & CSUBG_MF_PDF=>YDPARAR%CSUBG_MF_PDF, & & LTOTPREC=>YDPARAR%LTOTPREC, CSUBG_RC_RR_ACCR=>YDPARAR%CSUBG_RC_RR_ACCR, CSUBG_RR_EVAP=>YDPARAR%CSUBG_RR_EVAP, & & NPRINTFR=>YDPARAR%NPRINTFR, CMF_CLOUD=>YDPARAR%CMF_CLOUD, & & MALBDIR=>YDPARAR%MALBDIR, NSWB_MNH=>YDPARAR%NSWB_MNH, & @@ -1010,7 +1015,7 @@ ASSOCIATE(MINPRR=>YDPARAR%MINPRR, MINPRS=>YDPARAR%MINPRS, MVQS=>YDPARAR%MVQS, & & LSQUALL=>YDPARAR%LSQUALL, VSIGQSAT=>YDPARAR%VSIGQSAT, & & MALBSCA=>YDPARAR%MALBSCA,& & RADSN=>YDPARAR%RADSN, LOSEDIC=>YDPARAR%LOSEDIC, LDIAGWMAX=>YDPARAR%LDIAGWMAX, & - & CSEDIM=>YDPARAR%CSEDIM, & + & CSEDIM=>YDPARAR%CSEDIM, CLAMBDA3=>YDPARAR%CLAMBDA3, & & NPTP=>YDPARAR%NPTP, NSPLITR=>YDPARAR%NSPLITR, NSPLITG=>YDPARAR%NSPLITG, NSV=>YDPARAR%NSV, & & CFRAC_ICE_SHALLOW_MF=>YDPARAR%CFRAC_ICE_SHALLOW_MF, CFRAC_ICE_ADJUST=>YDPARAR%CFRAC_ICE_ADJUST, & & MVTS=>YDPARAR%MVTS, NREFROI2=>YDPARAR%NREFROI2, NREFROI1=>YDPARAR%NREFROI1, & @@ -3285,8 +3290,10 @@ IF (LMICRO) THEN & YDDDH, YDMODEL%YRML_DIAG%YRLDDH, YDMODEL%YRML_DIAG%YRMDDH ) ELSE CALL ARO_RAIN_ICE (NPROMICRO,KLEV,IKU,IKL,KFDIA,KLEV,NRR,KSTEP+1,NSPLITR,NGFL_EZDIAG,& - & LOSUBG_COND, CSUBG_AUCV_RC, LOSEDIC,CSEDIM, CMICRO, ZDT,ZDZZ_ ,& + & LOSUBG_COND, CSUBG_AUCV_RC, CSUBG_AUCV_RI, LOSEDIC,CSEDIM, CMICRO, ZDT,ZDZZ_ ,& & ZRHODJM__(:,1:KLEV),ZRHODREFM__(:,1:KLEV), ZEXNREFM_, ZPABSM__(:,1:KLEV),& + & ZHLC_HRC__(:,1:KLEV), ZHLC_HCF__(KIDIA:KFDIA,1:KLEV),& + & ZHLI_HRI__(:,1:KLEV), ZHLI_HCF__(KIDIA:KFDIA,1:KLEV),& & ZTHM__(:,1:KLEV),ZRM_, ZSIGS__(:,1:KLEV), ZNEBMNH_, ZTHS__(:,1:KLEV),ZRS_,& & ZEVAP_, ZCIT_,LOWARM,ZSEA_,ZTOWN_, LOCND2,LGRSN,& & ZINPRR_NOTINCR_, ZINPRS_NOTINCR_, ZINPRG_NOTINCR_, ZINPRH_NOTINCR_,ZPFPR_,& diff --git a/src/arome/ext/aro_convbu.F90 b/src/arome/ext/aro_convbu.F90 new file mode 100644 index 0000000000000000000000000000000000000000..d6e320a50f83cb2b48fe5cb5567c1da76faf0c68 --- /dev/null +++ b/src/arome/ext/aro_convbu.F90 @@ -0,0 +1,37 @@ +SUBROUTINE ARO_CONVBU(KFDIA,KLEV,KRR,PRHODJ,PRRS,PTHS,YDDDH, YDLDDH, YDMDDH) +USE PARKIND1, ONLY : JPRB +USE YOMHOOK , ONLY : LHOOK, DR_HOOK + +USE MODD_BUDGET,ONLY: LBU_ENABLE, LBUDGET_TH, LBUDGET_RV, LBUDGET_RC, LBUDGET_RI +USE MODI_BUDGET_DDH +USE DDH_MIX, ONLY : TYP_DDH +USE YOMLDDH, ONLY : TLDDH +USE YOMMDDH, ONLY : TMDDH + +IMPLICIT NONE + +INTEGER, INTENT(IN) :: KFDIA +INTEGER, INTENT(IN) :: KLEV +INTEGER, INTENT(IN) :: KRR +REAL, DIMENSION (KFDIA,1,KLEV), INTENT(IN) :: PRHODJ +REAL, DIMENSION(KFDIA,1,KLEV), INTENT(IN) :: PTHS +REAL, DIMENSION(KFDIA,1,KLEV,KRR), INTENT(IN) :: PRRS +TYPE(TYP_DDH), INTENT(INOUT) :: YDDDH +TYPE(TLDDH), INTENT(IN) :: YDLDDH +TYPE(TMDDH), INTENT(IN) :: YDMDDH + +REAL(KIND=JPRB) :: ZHOOK_HANDLE +IF (LHOOK) CALL DR_HOOK('ARO_CONVBU',0,ZHOOK_HANDLE) +IF (LBU_ENABLE) THEN + IF (LBUDGET_TH) CALL BUDGET_DDH (PTHS(:,:,:)*PRHODJ(:,:,:),4,'DCONV_BU_RTH',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_RV) CALL BUDGET_DDH (PRRS(:,:,:,1)*PRHODJ(:,:,:),6,'DCONV_BU_RRV',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_RC) CALL BUDGET_DDH (PRRS(:,:,:,2)*PRHODJ(:,:,:),7,'DCONV_BU_RRC',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_RI) CALL BUDGET_DDH (PRRS(:,:,:,4)*PRHODJ(:,:,:),9,'DCONV_BU_RRI',YDDDH, YDLDDH, YDMDDH) + !IF (LCHTRANS .AND. LBUDGET_SV) THEN + ! DO JSV = 1, SIZE(PRSVS,4) + ! CALL BUDGET_DDH (PRSVS(:,:,:,JSV),JSV+12,'DCONV_BU_RSV',YDDDH, YDLDDH, YDMDDH) + ! END DO + !END IF +END IF +IF (LHOOK) CALL DR_HOOK('ARO_CONVBU',1,ZHOOK_HANDLE) +END SUBROUTINE ARO_CONVBU diff --git a/src/arome/ext/aro_lima.F90 b/src/arome/ext/aro_lima.F90 new file mode 100644 index 0000000000000000000000000000000000000000..2bcc226d32dac8816e267357c208a42bd61cd58f --- /dev/null +++ b/src/arome/ext/aro_lima.F90 @@ -0,0 +1,326 @@ +! ######spl + SUBROUTINE ARO_LIMA(KKA,KKU,KKL,KLON,KLEV, KRR, KSV, KTCOUNT, KSPLITR, KSPLITG, & + PTSTEP, PDZZ, PRHODJ, PRHODREF, PEXNREF,& + PPABSM, PW_NU, PTHT, PRT, PSVT, & + PTHS, PRS, PSVS, PEVAP, & + PINPRR,PINPRS, & + PINPRG,PINPRH,PFPR, & + YDDDH, YDLDDH, YDMDDH ) + + USE PARKIND1, ONLY : JPRB + USE YOMHOOK , ONLY : LHOOK, DR_HOOK +! ########################################################################## +! +!!**** * - compute the resolved clouds and precipitation +!! +!! PURPOSE +!! ------- +!! The purpose of this routine is to compute the microphysical sources +!! related to the resolved clouds and precipitation in LIMA +!! +!! +!! REFERENCE +!! --------- +!! +!! Vie et al., 2015 GMD +!! +!! AUTHOR +!! ------ +!! B. Vie +!! +!! MODIFICATIONS +!! ------------- +!! Original 17/09/13 +!! +!------------------------------------------------------------------------------- +! +!* 0. DECLARATIONS +! ------------ +! +! +USE MODD_CONF +USE MODD_CST +USE MODD_PARAMETERS +USE MODD_RAIN_ICE_DESCR +! +USE MODD_PARAM_ICE +USE MODD_PARAM_LIMA +USE MODD_NSV +! +USE MODD_BUDGET +USE MODI_BUDGET_DDH +! +USE MODI_LIMA +! +USE MODI_LIMA_WARM +USE MODI_LIMA_COLD +USE MODI_LIMA_MIXED +! +USE DDH_MIX, ONLY : TYP_DDH +USE YOMLDDH, ONLY : TLDDH +USE YOMMDDH, ONLY : TMDDH +! +IMPLICIT NONE +! +!* 0.1 Declarations of dummy arguments : +! +! + +! +INTEGER, INTENT(IN) :: KKA !near ground array index +INTEGER, INTENT(IN) :: KKU !uppest atmosphere array index +INTEGER, INTENT(IN) :: KKL !vert. levels type 1=MNH -1=ARO +INTEGER, INTENT(IN) :: KLON !NPROMA under CPG +INTEGER, INTENT(IN) :: KLEV !Number of vertical levels +INTEGER, INTENT(IN) :: KRR ! Number of moist variables +INTEGER, INTENT(IN) :: KSV ! Number of LIMA variables +INTEGER, INTENT(IN) :: KTCOUNT ! Temporal loop counter +INTEGER, INTENT(IN) :: KSPLITR ! Number of small time step + ! integrations for rain sedimendation +INTEGER, INTENT(IN) :: KSPLITG ! Number of small time step + ! integrations for graupel/hail sedimendation +REAL, INTENT(IN) :: PTSTEP ! Time step +! +! +REAL, DIMENSION(KLON,1,KLEV), INTENT(IN) :: PDZZ ! Height (z) +REAL, DIMENSION(KLON,1,KLEV), INTENT(IN) :: PRHODJ !Dry density * Jacobian +REAL, DIMENSION(KLON,1,KLEV), INTENT(IN) :: PRHODREF! Reference dry air density +REAL, DIMENSION(KLON,1,KLEV), INTENT(IN) :: PEXNREF ! Reference Exner function +! +! +REAL, DIMENSION(KLON,1,KLEV), INTENT(IN) :: PPABSM ! abs. pressure at time t-dt +REAL, DIMENSION(KLON,1,KLEV), INTENT(IN) :: PW_NU ! w for CCN activation +REAL, DIMENSION(KLON,1,KLEV), INTENT(IN) :: PTHT ! Theta at time t +REAL, DIMENSION(KLON,1,KLEV,KRR), INTENT(INOUT):: PRT ! Moist variables at time t +REAL, DIMENSION(KLON,1,KLEV,KSV), INTENT(INOUT):: PSVT ! LIMA variables at time t +! +! +REAL, DIMENSION(KLON,1,KLEV), INTENT(INOUT) :: PTHS ! Theta source +REAL, DIMENSION(KLON,1,KLEV,KRR), INTENT(INOUT) :: PRS ! Moist variable sources +REAL, DIMENSION(KLON,1,KLEV,KSV), INTENT(INOUT) :: PSVS ! LIMA variable sources +REAL, DIMENSION(KLON,1,KLEV), INTENT(INOUT) :: PEVAP ! Rain evap profile +! +! + +REAL, DIMENSION(KLON,1), INTENT(INOUT) :: PINPRR! Rain instant precip +REAL, DIMENSION(KLON,1), INTENT(INOUT) :: PINPRS! Snow instant precip +REAL, DIMENSION(KLON,1), INTENT(INOUT) :: PINPRG! Graupel instant precip +REAL, DIMENSION(KLON,1), INTENT(INOUT) :: PINPRH! Hail instant precip +REAL, DIMENSION(KLON,1,KLEV,KRR), INTENT(INOUT) :: PFPR ! upper-air precip +! +TYPE(TYP_DDH), INTENT(INOUT) :: YDDDH +TYPE(TLDDH), INTENT(IN) :: YDLDDH +TYPE(TMDDH), INTENT(IN) :: YDMDDH +! +! +!* 0.2 Declarations of local variables : + +CHARACTER(LEN=4) :: HCLOUD ! kind of cloud + ! paramerization + +INTEGER :: KMI ! Model index + +! +INTEGER :: JRR, JL ! Loop index for the moist and scalar variables +! +! +! +REAL, DIMENSION(KLON,1,KLEV):: ZT,ZLV,ZLS,ZCPH +REAL, DIMENSION(KLON,1,KLEV):: ZCOR,ZDUM3DC,ZDUM3DR,ZDUM3DS,ZDUM3DG,ZDUM3DH +REAL, DIMENSION(KLON,1,KLEV):: & + & ZRAINFR, ZHLC_HCF, ZHLC_LCF, ZHLC_HRC, ZHLC_LRC +REAL, DIMENSION(KLON,1):: ZINPRC ! surf cloud sedimentation + ! for the correction of negative rv +REAL, DIMENSION(KLON,1):: ZINPRI ! surf cloud ice sedimentation +REAL :: ZMASSTOT ! total mass for one water category + ! including the negative values +REAL :: ZMASSPOS ! total mass for one water category + ! after removing the negative values +REAL :: ZRATIO ! ZMASSTOT / ZMASSCOR + +LOGICAL :: LL_RRR_BUDGET +! +! +!------------------------------------------------------------------------------ +! +!* 1. PRELIMINARY COMPUTATIONS +! ------------------------ +! +REAL(KIND=JPRB) :: ZHOOK_HANDLE +IF (LHOOK) CALL DR_HOOK('ARO_LIMA',0,ZHOOK_HANDLE) + +HCLOUD='LIMA' +KMI=1 +ZINPRC=0. +ZDUM3DC=0. +ZDUM3DR=0. +ZDUM3DS=0. +ZDUM3DG=0. +ZDUM3DH=0. +PINPRH=0. + + +! +!* 2. TRANSFORMATION INTO PHYSICAL TENDENCIES +! --------------------------------------- +! +! +! complete the vertical boundaries +! +! +! personal comment: tranfering these variables to the +! microphysical routines would save +! computing time +! +ZT(:,:,:)= PTHT(:,:,:)*PEXNREF(:,:,:) +ZLV(:,:,:)=XLVTT +(XCPV-XCL) *(ZT(:,:,:)-XTT) +ZLS(:,:,:)=XLSTT +(XCPV-XCI) *(ZT(:,:,:)-XTT) +ZCPH(:,:,:)=XCPD +XCPV*2.*PTSTEP*PRS(:,:,:,1) +! + +! +!* 3. REMOVE NEGATIVE VALUES +! ---------------------- +! +!* 3.1 Non local correction for 1-moment precipitating species (Rood 87) +! +DO JRR = 3,KRR + SELECT CASE (JRR) + CASE(5,6,7) ! snow, graupel and hail + WHERE (PRS(:,:,:,JRR) < 1.E-15 ) + PRS(:,:,:,JRR) = 0. + END WHERE + END SELECT +END DO + +! +!* 3.2 Correct negative values +! +! Correction where rc<0 + IF (LWARM_LIMA) THEN + WHERE (PRS(:,:,:,2) < 1.E-15 .OR. PSVS(:,:,:,NSV_LIMA_NC) < 1.E-15) + PRS(:,:,:,1) = PRS(:,:,:,1) + PRS(:,:,:,2) + PTHS(:,:,:) = PTHS(:,:,:) - PRS(:,:,:,2) * ZLV(:,:,:) / & + ZCPH(:,:,:) / PEXNREF(:,:,:) + PRS(:,:,:,2) = 0.0 + PSVS(:,:,:,NSV_LIMA_NC) = 0.0 + END WHERE + END IF +! Correction where rr<0 + IF (LWARM_LIMA .AND. LRAIN_LIMA) THEN + WHERE (PRS(:,:,:,3) < 1.E-15 .OR. PSVS(:,:,:,NSV_LIMA_NR) < 1.E-15) + PRS(:,:,:,1) = PRS(:,:,:,1) + PRS(:,:,:,3) + PTHS(:,:,:) = PTHS(:,:,:) - PRS(:,:,:,3) * ZLV(:,:,:) / & + ZCPH(:,:,:) / PEXNREF(:,:,:) + PRS(:,:,:,3) = 0.0 + PSVS(:,:,:,NSV_LIMA_NR) = 0.0 + END WHERE + END IF +! Correction of IFN concentrations where ri<0 or Ni<0 +! IF (LCOLD_LIMA) THEN +! DO JMOD = 1, NMOD_IFN +! WHERE (PRS(:,:,:,4) < 0. .OR. PSVS(:,:,:,NSV_LIMA_NI) < 0.) ! ri or Ni < 0. +! PSVS(:,:,:,NSV_LIMA_IFN_FREE+JMOD-1) = & +! PSVS(:,:,:,NSV_LIMA_IFN_FREE+JMOD-1) + & +! PSVS(:,:,:,NSV_LIMA_IFN_NUCL+JMOD-1) ! N_IF =N_IF+N_IN +! PSVS(:,:,:,NSV_LIMA_IFN_NUCL+JMOD-1) = 0.0 ! N_IN =0. +! END WHERE +! ENDDO +! END IF +! Correction where ri<0 + IF (LCOLD_LIMA) THEN + WHERE (PRS(:,:,:,4) < 1.E-15 .OR. PSVS(:,:,:,NSV_LIMA_NI) < 1.E-15) + PRS(:,:,:,1) = PRS(:,:,:,1) + PRS(:,:,:,4) + PTHS(:,:,:) = PTHS(:,:,:) - PRS(:,:,:,4) * ZLS(:,:,:) / & + ZCPH(:,:,:) / PEXNREF(:,:,:) + PRS(:,:,:,4) = 0.0 + PSVS(:,:,:,NSV_LIMA_NI) = 0.0 + END WHERE + END IF +! + PSVS(:,:,:,:) = MAX( 0.0,PSVS(:,:,:,:) ) +! +! +!* 3.3 STORE THE BUDGET TERMS +! ---------------------- + +LL_RRR_BUDGET = (LBUDGET_RV).OR.(LBUDGET_RC).OR.(LBUDGET_RR).OR.(LBUDGET_RI) & + & .OR.(LBUDGET_RS).OR.(LBUDGET_RG).OR.(LBUDGET_RH) + +IF (LL_RRR_BUDGET) THEN + DO JRR=1,KRR + CALL BUDGET_DDH (PRS(:,:,:,JRR) * PRHODJ(:,:,:), JRR+5,'NEGA_BU_RRR',YDDDH,YDLDDH, YDMDDH) + END DO +END IF +IF (LBUDGET_TH) CALL BUDGET_DDH (PTHS(:,:,:) * PRHODJ(:,:,:),4,'NEGA_BU_RTH',YDDDH, YDLDDH, YDMDDH) +IF (LBUDGET_SV) THEN + CALL BUDGET_DDH (PSVS(:,:,:,NSV_LIMA_NC)*PRHODJ(:,:,:),12+NSV_LIMA_NC,'NEGA_BU_RSV',YDDDH, YDLDDH, YDMDDH) + CALL BUDGET_DDH (PSVS(:,:,:,NSV_LIMA_NR)*PRHODJ(:,:,:),12+NSV_LIMA_NR,'NEGA_BU_RSV',YDDDH, YDLDDH, YDMDDH) + CALL BUDGET_DDH (PSVS(:,:,:,NSV_LIMA_NI)*PRHODJ(:,:,:),12+NSV_LIMA_NI,'NEGA_BU_RSV',YDDDH, YDLDDH, YDMDDH) + IF (NMOD_CCN.GE.1) THEN + DO JL=1, NMOD_CCN + CALL BUDGET_DDH ( PSVS(:,:,:,NSV_LIMA_CCN_FREE+JL-1)* & + PRHODJ(:,:,:),12+NSV_LIMA_CCN_FREE+JL-1,'NEGA_BU_RSV',YDDDH,YDLDDH, YDMDDH) + END DO + END IF + IF (NMOD_IFN.GE.1) THEN + DO JL=1, NMOD_IFN + CALL BUDGET_DDH ( PSVS(:,:,:,NSV_LIMA_IFN_FREE+JL-1)* & + PRHODJ(:,:,:),12+NSV_LIMA_IFN_FREE+JL-1,'NEGA_BU_RSV',YDDDH,YDLDDH, YDMDDH) + END DO + END IF +END IF + + +! +! +!------------------------------------------------------------------------------- +! + +!* 9. MIXED-PHASE MICROPHYSICAL SCHEME (WITH 3 ICE SPECIES) +! ----------------------------------------------------- +! +!* Compute the explicit microphysical sources +! +! +! +IF (LPTSPLIT) THEN + CALL LIMA (PTSTEP=2*PTSTEP, HFMFILE='DUMMY', OCLOSE_OUT=.FALSE., & + PRHODREF=PRHODREF, PEXNREF=PEXNREF, PZZ=PDZZ, & + PRHODJ=PRHODJ, PPABST=PPABSM, & + NCCN=NMOD_CCN, NIFN=NMOD_IFN, NIMM=NMOD_IMM, & + PTHM=PTHT, PTHT=PTHT, PRT=PRT, PSVT=PSVT, PW_NU=PW_NU, & + PTHS=PTHS, PRS=PRS, PSVS=PSVS, & + PINPRC=ZINPRC, PINPRR=PINPRR, PINPRI=ZINPRI, PINPRS=PINPRS, PINPRG=PINPRG, PINPRH=PINPRH, & + PEVAP3D=PEVAP, KSPLITR=KSPLITR, KSPLITG=KSPLITG, YDDDH=YDDDH, YDLDDH=YDLDDH, YDMDDH=YDMDDH ) +ELSE + IF (LWARM_LIMA) CALL LIMA_WARM(OACTIT=LACTIT_LIMA, OSEDC=LSEDC_LIMA, ORAIN=LRAIN_LIMA, KSPLITR=KSPLITR, PTSTEP=2*PTSTEP, KMI=KMI, & + HFMFILE='DUMMY', HLUOUT='DUMMY', OCLOSE_OUT=.FALSE., KRR=KRR, PZZ=PDZZ, PRHODJ=PRHODJ, & + PRHODREF=PRHODREF, PEXNREF=PEXNREF, PW_NU=PW_NU, PPABSM=PPABSM, PPABST=PPABSM, & + PTHM=PTHT, PRCM=PRT(:,:,:,2), & + PTHT=PTHT, PRT=PRT, PSVT=PSVT, & + PTHS=PTHS, PRS=PRS, PSVS=PSVS, & + PINPRC=ZINPRC,PINPRR=PINPRR, PINPRR3D=ZDUM3DR, PEVAP3D=PEVAP,YDDDH=YDDDH, YDLDDH=YDLDDH, YDMDDH=YDMDDH ) + ! + IF (LCOLD_LIMA) CALL LIMA_COLD(OSEDI=LSEDI_LIMA, OHHONI=LHHONI_LIMA, KSPLITG=KSPLITG, PTSTEP=2*PTSTEP, KMI=KMI, & + HFMFILE='DUMMY', HLUOUT='DUMMY', OCLOSE_OUT=.FALSE., KRR=KRR, PZZ=PDZZ, PRHODJ=PRHODJ, & + PRHODREF=PRHODREF, PEXNREF=PEXNREF, PPABST=PPABSM, PW_NU=PW_NU, & + PTHM=PTHT, PPABSM=PPABSM, & + PTHT=PTHT, PRT=PRT, PSVT=PSVT, & + PTHS=PTHS, PRS=PRS, PSVS=PSVS, & + PINPRS=PINPRS, PINPRG=PINPRG, PINPRH=PINPRH, YDDDH=YDDDH, YDLDDH=YDLDDH, YDMDDH=YDMDDH) + ! + IF (LWARM_LIMA .AND. LCOLD_LIMA) CALL LIMA_MIXED(OSEDI=LSEDI_LIMA, OHHONI=LHHONI_LIMA, KSPLITG=KSPLITG, PTSTEP=2*PTSTEP, KMI=KMI, & + HFMFILE='DUMMY', HLUOUT='DUMMY', OCLOSE_OUT=.FALSE., KRR=KRR, PZZ=PDZZ, PRHODJ=PRHODJ, & + PRHODREF=PRHODREF, PEXNREF=PEXNREF, PPABST=PPABSM, PW_NU=PW_NU, & + PTHM=PTHT, PPABSM=PPABSM, & + PTHT=PTHT, PRT=PRT, PSVT=PSVT, & + PTHS=PTHS, PRS=PRS, PSVS=PSVS,YDDDH=YDDDH, YDLDDH=YDLDDH, YDMDDH=YDMDDH ) + +ENDIF +!add ZINPRC in PINPRR +PINPRR=PINPRR+ZINPRC +!------------------------------------------------------------------------------- +! +IF (LHOOK) CALL DR_HOOK('ARO_LIMA',1,ZHOOK_HANDLE) +END SUBROUTINE ARO_LIMA diff --git a/src/arome/modset_Ryad/mpa/micro/externals/aro_rain_ice.F90 b/src/arome/ext/aro_rain_ice.F90 similarity index 86% rename from src/arome/modset_Ryad/mpa/micro/externals/aro_rain_ice.F90 rename to src/arome/ext/aro_rain_ice.F90 index f47df9e0098c24df162fb15675495f75eaffa879..009de4a99e54c0888c2308aa7b623b7e83640cf0 100644 --- a/src/arome/modset_Ryad/mpa/micro/externals/aro_rain_ice.F90 +++ b/src/arome/ext/aro_rain_ice.F90 @@ -1,9 +1,9 @@ ! ######spl SUBROUTINE ARO_RAIN_ICE(KPROMA,KKA,KKU,KKL,KLON,KLEV, KRR, KTCOUNT, KSPLITR,& KEZDIAG, & - OSUBG_COND, CSUBG_AUCV_RC,OSEDIC, CSEDIM, CMICRO, & + OSUBG_COND, CSUBG_AUCV_RC, CSUBG_AUCV_RI,OSEDIC, CSEDIM, CMICRO, & PTSTEP, PDZZ, PRHODJ, PRHODREF, PEXNREF,& - PPABSM, PTHT, PRT, PSIGS,PCLDFR, & + PPABSM, PHLC_HRC, PHLC_HCF, PHLI_HRI, PHLI_HCF, PTHT, PRT, PSIGS,PCLDFR, & PTHS, PRS, PEVAP, & PCIT, OWARM, PSEA, PTOWN, & OCND2,LGRSN, & @@ -91,8 +91,9 @@ USE MODD_PARAMETERS USE MODD_RAIN_ICE_DESCR USE MODD_SPP_TYPE ! -USE MODD_BUDGET -USE MODI_BUDGET +USE MODD_BUDGET, ONLY: LBUDGET_RV, LBUDGET_RC, LBUDGET_RR, LBUDGET_RI, LBUDGET_RS, & + & LBUDGET_RG, LBUDGET_RH, LBUDGET_TH, TBUDGETDATA, NBUDGET_RH +USE MODI_BUDGET_DDH ! USE MODI_RAIN_ICE ! @@ -125,6 +126,8 @@ INTEGER, INTENT(IN) :: KEZDIAG ! Size of diagnostics array LOGICAL, INTENT(IN) :: OSUBG_COND ! Switch for Subgrid Cond. CHARACTER (LEN=4), INTENT(IN) :: CSUBG_AUCV_RC ! type of subgrid rc->rr autoconvertion scheme +CHARACTER (LEN=80), INTENT(IN) :: CSUBG_AUCV_RI + ! type of subgrid ri->rs autoconvertion scheme LOGICAL, INTENT(IN) :: OSEDIC ! Switch for cloud sedim. CHARACTER (LEN=4), INTENT(IN) :: CSEDIM ! Sedimentation scheme ! (STAT or EULE) @@ -139,6 +142,10 @@ REAL, DIMENSION(KLON,1,KLEV), INTENT(IN) :: PEXNREF ! Reference Exner functi ! ! REAL, DIMENSION(KLON,1,KLEV), INTENT(IN) :: PPABSM ! abs. pressure at time t-dt +REAL, DIMENSION(KLON,1,KLEV), INTENT(IN) :: PHLC_HRC +REAL, DIMENSION(KLON,1,KLEV), INTENT(IN) :: PHLC_HCF +REAL, DIMENSION(KLON,1,KLEV), INTENT(IN) :: PHLI_HRI +REAL, DIMENSION(KLON,1,KLEV), INTENT(IN) :: PHLI_HCF REAL, DIMENSION(KLON,1,KLEV), INTENT(IN) :: PTHT ! Theta at time t REAL, DIMENSION(KLON,1,KLEV,KRR), INTENT(INOUT):: PRT ! Moist variables at time t REAL, DIMENSION(KLON,1,KLEV), INTENT(IN) :: PSIGS ! Sigma_s at time t @@ -168,9 +175,9 @@ REAL, DIMENSION(KLON,1,KLEV,KRR), INTENT(INOUT) :: PFPR ! upper-air precip REAL, DIMENSION(KLON,YSPP%N2D), TARGET, INTENT(INOUT) :: PGP2DSPP REAL, DIMENSION(KLON,KLEV,KEZDIAG), INTENT(INOUT) :: PEZDIAG ! -TYPE(TYP_DDH), INTENT(INOUT) :: YDDDH -TYPE(TLDDH), INTENT(IN) :: YDLDDH -TYPE(TMDDH), INTENT(IN) :: YDMDDH +TYPE(TYP_DDH), INTENT(INOUT), TARGET :: YDDDH +TYPE(TLDDH), INTENT(IN), TARGET :: YDLDDH +TYPE(TMDDH), INTENT(IN), TARGET :: YDMDDH ! ! !* 0.2 Declarations of local variables : @@ -180,6 +187,8 @@ INTEGER :: JRR ! Loop index for the moist and scalar variables ! REAL, DIMENSION(KLON,1,KLEV):: ZT,ZLV,ZLS,ZCPH REAL, DIMENSION(KLON,1,KLEV):: ZCOR +REAL, DIMENSION(KLON,1):: ZINDEP ! surf cloud deposition (already contained in sedimentation) +REAL, DIMENSION(KLON,1,KLEV):: ZRAINFR REAL, DIMENSION(KLON,1):: ZINPRC ! surf cloud sedimentation ! for the correction of negative rv REAL :: ZMASSTOT ! total mass for one water category @@ -191,6 +200,8 @@ REAL :: ZRATIO ! ZMASSTOT / ZMASSCOR TYPE(TSPP_CONFIG_MPA) :: YSPP_ICENU,YSPP_KGN_ACON,YSPP_KGN_SBGR LOGICAL, DIMENSION(KLON, 1, KLEV) :: LLMICRO !mask to limit computation + +TYPE(TBUDGETDATA), DIMENSION(NBUDGET_RH) :: YLBUDGET !NBUDGET_RH is the one with the highest number ! INTEGER :: IPROMA, ISIZE, IGPBLKS ! cache-blocking management ! @@ -366,15 +377,21 @@ END SELECT ! !* 3.3 STORE THE BUDGET TERMS ! ---------------------- -IF (LBUDGET_RV) CALL BUDGET (PRS(:,:,:,1) * PRHODJ(:,:,:), 6,'NEGA_BU_RRV',YDDDH, YDLDDH, YDMDDH) -IF (LBUDGET_RC) CALL BUDGET (PRS(:,:,:,2) * PRHODJ(:,:,:), 7,'NEGA_BU_RRC',YDDDH, YDLDDH, YDMDDH) -IF (LBUDGET_RR) CALL BUDGET (PRS(:,:,:,3) * PRHODJ(:,:,:), 8,'NEGA_BU_RRR',YDDDH, YDLDDH, YDMDDH) -IF (LBUDGET_RI) CALL BUDGET (PRS(:,:,:,4) * PRHODJ(:,:,:) ,9,'NEGA_BU_RRI',YDDDH, YDLDDH, YDMDDH) -IF (LBUDGET_RS) CALL BUDGET (PRS(:,:,:,5) * PRHODJ(:,:,:),10,'NEGA_BU_RRS',YDDDH, YDLDDH, YDMDDH) -IF (LBUDGET_RG) CALL BUDGET (PRS(:,:,:,6) * PRHODJ(:,:,:),11,'NEGA_BU_RRG',YDDDH, YDLDDH, YDMDDH) -IF (LBUDGET_RH) CALL BUDGET (PRS(:,:,:,7) * PRHODJ(:,:,:),12,'NEGA_BU_RRH',YDDDH, YDLDDH, YDMDDH) -IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:) * PRHODJ(:,:,:), 4,'NEGA_BU_RTH',YDDDH, YDLDDH, YDMDDH) +IF (LBUDGET_RV) CALL BUDGET_DDH (PRS(:,:,:,1) * PRHODJ(:,:,:), 6,'NEGA_BU_RRV',YDDDH, YDLDDH, YDMDDH) +IF (LBUDGET_RC) CALL BUDGET_DDH (PRS(:,:,:,2) * PRHODJ(:,:,:), 7,'NEGA_BU_RRC',YDDDH, YDLDDH, YDMDDH) +IF (LBUDGET_RR) CALL BUDGET_DDH (PRS(:,:,:,3) * PRHODJ(:,:,:), 8,'NEGA_BU_RRR',YDDDH, YDLDDH, YDMDDH) +IF (LBUDGET_RI) CALL BUDGET_DDH (PRS(:,:,:,4) * PRHODJ(:,:,:) ,9,'NEGA_BU_RRI',YDDDH, YDLDDH, YDMDDH) +IF (LBUDGET_RS) CALL BUDGET_DDH (PRS(:,:,:,5) * PRHODJ(:,:,:),10,'NEGA_BU_RRS',YDDDH, YDLDDH, YDMDDH) +IF (LBUDGET_RG) CALL BUDGET_DDH (PRS(:,:,:,6) * PRHODJ(:,:,:),11,'NEGA_BU_RRG',YDDDH, YDLDDH, YDMDDH) +IF (LBUDGET_RH .AND. KRR==7) CALL BUDGET_DDH (PRS(:,:,:,7) * PRHODJ(:,:,:),12,'NEGA_BU_RRH',YDDDH, YDLDDH, YDMDDH) +IF (LBUDGET_TH) CALL BUDGET_DDH (PTHS(:,:,:) * PRHODJ(:,:,:), 4,'NEGA_BU_RTH',YDDDH, YDLDDH, YDMDDH) +DO JRR=1, NBUDGET_RH + YLBUDGET(JRR)%NBUDGET=JRR + YLBUDGET(JRR)%YDDDH=>YDDDH + YLBUDGET(JRR)%YDLDDH=>YDLDDH + YLBUDGET(JRR)%YDMDDH=>YDMDDH +ENDDO ! ! !------------------------------------------------------------------------------- @@ -399,12 +416,15 @@ ELSE ENDIF IF (CMICRO=='ICE4') THEN CALL RAIN_ICE( IPROMA, KLON, 1, KLEV, ISIZE, & - & OSEDIC=OSEDIC, OCND2=OCND2, HSEDIM=CSEDIM, HSUBG_AUCV_RC=CSUBG_AUCV_RC,& + & OSEDIC=OSEDIC, OCND2=OCND2, HSEDIM=CSEDIM, & + & HSUBG_AUCV_RC=CSUBG_AUCV_RC, HSUBG_AUCV_RI=CSUBG_AUCV_RI,& & OWARM=OWARM,KKA=KKA,KKU=KKU,KKL=KKL, & & PTSTEP=2*PTSTEP, & & KRR=KRR, LDMICRO=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),PRCT= PRT(:,:,:,2), & & PRRT=PRT(:,:,:,3), & & PRIT=PRT(:,:,:,4), PRST=PRT(:,:,:,5), & @@ -413,18 +433,21 @@ IF (CMICRO=='ICE4') THEN & PRRS=PRS(:,:,:,3),& & PRIS=PRS(:,:,:,4),PRSS= PRS(:,:,:,5),PRGS= PRS(:,:,:,6),& & PINPRC=ZINPRC,PINPRR=PINPRR,PEVAP3D=PEVAP,& - & PINPRS=PINPRS, PINPRG=PINPRG, & + & PINPRS=PINPRS, PINPRG=PINPRG, PINDEP=ZINDEP, PRAINFR=ZRAINFR, & & PSIGS=PSIGS, PSEA=PSEA, PTOWN=PTOWN, PRHT=PRT(:,:,:,7),& & PRHS=PRS(:,:,:,7), PINPRH=PINPRH, PFPR=PFPR, & - & YDDDH=YDDDH, YDLDDH=YDLDDH, YDMDDH=YDMDDH) + & TBUDGETS=YLBUDGET, KBUDGETS=SIZE(YLBUDGET)) ELSEIF (CMICRO=='ICE3') THEN CALL RAIN_ICE( IPROMA, KLON, 1, KLEV, ISIZE, & - & OSEDIC=OSEDIC, OCND2=OCND2, HSEDIM=CSEDIM, HSUBG_AUCV_RC=CSUBG_AUCV_RC, & + & OSEDIC=OSEDIC, OCND2=OCND2, HSEDIM=CSEDIM, & + & HSUBG_AUCV_RC=CSUBG_AUCV_RC, HSUBG_AUCV_RI=CSUBG_AUCV_RI,& & OWARM=OWARM,KKA=KKA,KKU=KKU,KKL=KKL, & & PTSTEP=2*PTSTEP, & & KRR=KRR, LDMICRO=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),PRCT=PRT(:,:,:,2), & & PRRT=PRT(:,:,:,3), & & PRIT=PRT(:,:,:,4), PRST=PRT(:,:,:,5), & @@ -433,9 +456,9 @@ ELSEIF (CMICRO=='ICE3') THEN & PRRS=PRS(:,:,:,3),& & PRIS=PRS(:,:,:,4),PRSS= PRS(:,:,:,5),PRGS= PRS(:,:,:,6),& & PINPRC=ZINPRC,PINPRR=PINPRR,PEVAP3D=PEVAP,& - & PINPRS=PINPRS, PINPRG=PINPRG, & + & PINPRS=PINPRS, PINPRG=PINPRG, PINDEP=ZINDEP, PRAINFR=ZRAINFR, & & PSIGS=PSIGS, PSEA=PSEA, PTOWN=PTOWN, PFPR=PFPR, & - & YDDDH=YDDDH, YDLDDH=YDLDDH, YDMDDH=YDMDDH) + & TBUDGETS=YLBUDGET, KBUDGETS=SIZE(YLBUDGET)) ELSEIF (CMICRO=='OLD4') THEN CALL RAIN_ICE_OLD( OSEDIC=OSEDIC, OCND2=OCND2, LGRSN=LGRSN, HSEDIM=CSEDIM, HSUBG_AUCV_RC=CSUBG_AUCV_RC,& & OWARM=OWARM,KKA=KKA,KKU=KKU,KKL=KKL,KSPLITR=KSPLITR, & diff --git a/src/arome/modset_Ryad/mpa/micro/interface/aro_rain_ice.h b/src/arome/ext/aro_rain_ice.h similarity index 86% rename from src/arome/modset_Ryad/mpa/micro/interface/aro_rain_ice.h rename to src/arome/ext/aro_rain_ice.h index 85dd58705cccaffe53894af222bb3b6631317acb..825705af01df59841ec6b148606cc092b1d09303 100644 --- a/src/arome/modset_Ryad/mpa/micro/interface/aro_rain_ice.h +++ b/src/arome/ext/aro_rain_ice.h @@ -1,9 +1,9 @@ INTERFACE SUBROUTINE ARO_RAIN_ICE(KPROMA,KKA,KKU,KKL,KLON,KLEV, KRR, KTCOUNT, KSPLITR,& & KEZDIAG, & - & OSUBG_COND, CSUBG_AUCV_RC,OSEDIC,CSEDIM,CMICRO,& + & OSUBG_COND, CSUBG_AUCV_RC, CSUBG_AUCV_RI, OSEDIC,CSEDIM,CMICRO,& & PTSTEP, PDZZ, PRHODJ, PRHODREF, PEXNREF,& - & PPABSM, PTHT, PRT, PSIGS,PCLDFR,& + & PPABSM, PHLC_HRC, PHLC_HCF, PHLI_HRI, PHLI_HCF, PTHT, PRT, PSIGS,PCLDFR,& & PTHS, PRS, PEVAP,& & PCIT, OWARM, PSEA, PTOWN, & & OCND2, LGRSN, & @@ -28,6 +28,7 @@ INTEGER(KIND=JPIM), INTENT(IN) :: KSPLITR INTEGER(KIND=JPIM), INTENT(IN) :: KEZDIAG LOGICAL, INTENT(IN) :: OSUBG_COND CHARACTER(LEN=4), INTENT(IN) :: CSUBG_AUCV_RC +CHARACTER(LEN=80), INTENT(IN) :: CSUBG_AUCV_RI LOGICAL, INTENT(IN) :: OSEDIC CHARACTER(LEN=4), INTENT(IN) :: CSEDIM CHARACTER(LEN=4), INTENT(IN) :: CMICRO @@ -37,6 +38,10 @@ REAL(KIND=JPRB), DIMENSION(KLON,1,KLEV), INTENT(IN) :: PRHODJ REAL(KIND=JPRB), DIMENSION(KLON,1,KLEV), INTENT(IN) :: PRHODREF REAL(KIND=JPRB), DIMENSION(KLON,1,KLEV), INTENT(IN) :: PEXNREF REAL(KIND=JPRB), DIMENSION(KLON,1,KLEV), INTENT(IN) :: PPABSM +REAL(KIND=JPRB), DIMENSION(KLON,1,KLEV), INTENT(IN) :: PHLC_HRC +REAL(KIND=JPRB), DIMENSION(KLON,1,KLEV), INTENT(IN) :: PHLC_HCF +REAL(KIND=JPRB), DIMENSION(KLON,1,KLEV), INTENT(IN) :: PHLI_HRI +REAL(KIND=JPRB), DIMENSION(KLON,1,KLEV), INTENT(IN) :: PHLI_HCF REAL(KIND=JPRB), DIMENSION(KLON,1,KLEV), INTENT(IN) :: PTHT REAL(KIND=JPRB), DIMENSION(KLON,1,KLEV,KRR), INTENT(INOUT):: PRT REAL(KIND=JPRB), DIMENSION(KLON,1,KLEV), INTENT(IN) :: PSIGS diff --git a/src/arome/ext/aro_startbu.F90 b/src/arome/ext/aro_startbu.F90 new file mode 100644 index 0000000000000000000000000000000000000000..f3dd9f9dcd4e2e4e6e34403560d24d6579be9af6 --- /dev/null +++ b/src/arome/ext/aro_startbu.F90 @@ -0,0 +1,107 @@ +! ######spl +SUBROUTINE ARO_STARTBU( KIDIA, KFDIA, KLEV, KRR,KSV,PRHODJ,& + & PRUS,PRVS,PRWS,PRTHS,PRRS,PRTKES,YDDDH, YDLDDH, YDMDDH) +USE PARKIND1, ONLY : JPRB +USE YOMHOOK , ONLY : LHOOK, DR_HOOK + +! Purpose. +! -------- +! Prepare budget arrays at the start of budget calculations. + +!** Interface. +! ---------- +! *CALL* *AROINI_BUDGET + +! Explicit arguments : +! -------------------- +! None + +! Implicit arguments : +! -------------------- +! None + +! Method. +! ------- + +! Externals. +! ---------- + +! Reference. +! ---------- +! +! Author. +! ------- +! T. Kovacic + +! Modifications. +! -------------- +! Original : 05-05-06 +! 19-Sept-08: O.Riviere Removal of unecessary part for new diagnostic data flow +! 30-Janv-19: F.Voitus new DDH superstructure + RR budget correction +! ------------------------------------------------------------------ +! +!* 0. DECLARATIONS +! ------------ +! +USE MODD_BUDGET +USE MODI_BUDGET_DDH +USE DDH_MIX , ONLY : TYP_DDH +USE YOMLDDH , ONLY : TLDDH +USE YOMMDDH , ONLY : TMDDH + +! +IMPLICIT NONE +! +!* 0.1 declarations of argument +! +INTEGER, INTENT(IN) :: KIDIA +INTEGER, INTENT(IN) :: KFDIA +INTEGER, INTENT(IN) :: KLEV +INTEGER, INTENT(IN) :: KRR ! Number of moist variables +INTEGER, INTENT(IN) :: KSV ! Number of Scalar Variables +! +REAL, DIMENSION(KFDIA,1,KLEV), INTENT(IN) :: PRHODJ ! (Rho) dry * Jacobian +! +REAL, DIMENSION(KFDIA,1,KLEV), INTENT(IN) :: PRUS, PRVS, PRWS ! Source +REAL, DIMENSION(KFDIA,1,KLEV), INTENT(IN) :: PRTHS, PRTKES ! - +REAL, DIMENSION(KFDIA,1,KLEV,KRR), INTENT(IN) :: PRRS ! terms + +TYPE(TYP_DDH) , INTENT(INOUT) :: YDDDH +TYPE(TLDDH) , INTENT(IN) :: YDLDDH +TYPE(TMDDH) , INTENT(IN) :: YDMDDH + +! +! +!* 0.2 Declarations of local variables : +! + +LOGICAL :: LL_BUDGET_RR +INTEGER :: JR +REAL(KIND=JPRB) :: ZHOOK_HANDLE + + + + + LL_BUDGET_RR = (LBUDGET_RV).OR.(LBUDGET_RC).OR.(LBUDGET_RR) & + & .OR.(LBUDGET_RI).OR.(LBUDGET_RS) & + & .OR.(LBUDGET_RG).OR.(LBUDGET_RH) + +! + IF (LHOOK) CALL DR_HOOK('ARO_STARTBU',0,ZHOOK_HANDLE) + + IF (LBUDGET_U) CALL BUDGET_DDH (PRUS(:,:,:)*PRHODJ(:,:,:),1,'INIF_BU_RU',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_V) CALL BUDGET_DDH (PRVS(:,:,:)*PRHODJ(:,:,:),2,'INIF_BU_RV',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_W) CALL BUDGET_DDH (PRWS(:,:,:)*PRHODJ(:,:,:),3,'INIF_BU_RW',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_TH) CALL BUDGET_DDH (PRTHS(:,:,:)*PRHODJ(:,:,:),4,'INIF_BU_RTH',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_TKE) CALL BUDGET_DDH (PRTKES(:,:,:)*PRHODJ(:,:,:),5,'INIF_BU_RTKE',YDDDH, YDLDDH, YDMDDH) + + IF (LL_BUDGET_RR) THEN + DO JR = 1,KRR + CALL BUDGET_DDH (PRRS(:,:,:,JR)*PRHODJ(:,:,:),5+JR,'INIF_BU_RR',YDDDH, YDLDDH, YDMDDH) + END DO + END IF + + +! +IF (LHOOK) CALL DR_HOOK('ARO_STARTBU',1,ZHOOK_HANDLE) +END SUBROUTINE ARO_STARTBU diff --git a/src/arome/ext/aro_turb_mnh.F90 b/src/arome/ext/aro_turb_mnh.F90 new file mode 100644 index 0000000000000000000000000000000000000000..caee9cfa67fc6e614a16aedfdc3e32158d782230 --- /dev/null +++ b/src/arome/ext/aro_turb_mnh.F90 @@ -0,0 +1,491 @@ +! ######spl + SUBROUTINE ARO_TURB_MNH( KKA,KKU,KKL,KLON,KLEV,KRR,KRRL,KRRI,KSV, & + KTCOUNT, KGRADIENTS, LDHARATU, PTSTEP, & + PZZ, PZZF, PZZTOP, & + PRHODJ, PTHVREF,PRHODREF,HINST_SFU,HMF_UPDRAFT, & + PSFTH,PSFRV,PSFSV,PSFU,PSFV, & + PPABSM,PUM,PVM,PWM,PTKEM,PEPSM,PSVM,PSRCM, & + PTHM,PRM, & + PRUS,PRVS,PRWS,PRTHS,PRRS,PRSVSIN,PRSVS,PRTKES,PRTKES_OUT,PREPSS, & + ZHGRAD,PSIGS,OSUBG_COND, & + PFLXZTHVMF,PLENGTHM,PLENGTHH,MFMOIST, & + PDRUS_TURB,PDRVS_TURB, & + PDRTHLS_TURB,PDRRTS_TURB,PDRSVS_TURB, & + PDP,PTP,PTPMF,PTDIFF,PTDISS,PEDR,YDDDH,YDLDDH,YDMDDH) + + + USE PARKIND1, ONLY : JPRB + USE YOMHOOK , ONLY : LHOOK, DR_HOOK +! ########################################################################## +! +!!**** * - compute the turbulence sources and the TKE evolution for Arome +!! +!! +!! +!! PURPOSE +!! ------- +!! The purpose of this routine is to compute the turbulence sources +!! and the TKE evolution for the Arome model +!! +!! +!!** METHOD +!! ------ +!! This routine calls the mesoNH turbulence scheme +!! in its 1DIM configutation. +!! +!! +!! EXTERNAL +!! -------- +!! Subroutine TURB (routine de MesoNH) +!! +!! IMPLICIT ARGUMENTS +!! ------------------ +!! Module MODD_PARAMETERS : contains declarations of parameter variables +!! JPHEXT : Horizontal external points number +!! JPVEXT_TURB : Vertical external points number +!! Module MODD_CST +!! XP00 ! Reference pressure +!! XRD ! Gaz constant for dry air +!! XCPD ! Cpd (dry air) +!! +!! REFERENCE +!! --------- +!! +!! Documentation AROME +!! +!! AUTHOR +!! ------ +!! S.Malardel and Y.Seity +!! +!! MODIFICATIONS +!! ------------- +!! Original 10/03/03 +!! 2012-02 Y. Seity, add possibility to run with reversed vertical levels +!! 2015-07 Wim de Rooy possibility to run with LHARATU=TRUE (Racmo turbulence scheme) +!! +!------------------------------------------------------------------------------- +! +!* 0. DECLARATIONS +! ------------ +! +USE MODD_CONF +USE MODD_CST +USE MODD_PARAMETERS + +! +USE MODI_TURB +! +USE DDH_MIX, ONLY : TYP_DDH +USE YOMLDDH, ONLY : TLDDH +USE YOMMDDH, ONLY : TMDDH + +! +IMPLICIT NONE +! +!* 0.1 Declarations of dummy arguments : +! +! +! +INTEGER, INTENT(IN) :: KLON !KFDIA under CPG +INTEGER, INTENT(IN) :: KLEV !Number of vertical levels +INTEGER, INTENT(IN) :: KKA !Index of point near ground +INTEGER, INTENT(IN) :: KKU !Index of point near top +INTEGER, INTENT(IN) :: KKL !vert. levels type 1=MNH -1=ARO +INTEGER, INTENT(IN) :: KRR ! Number of moist variables +INTEGER, INTENT(IN) :: KRRL ! Number of liquide water variables +INTEGER, INTENT(IN) :: KRRI ! Number of ice variables +INTEGER, INTENT(IN) :: KSV ! Number of passive scalar +INTEGER, INTENT(IN) :: KTCOUNT ! Temporal loop counter +INTEGER, INTENT(IN) :: KGRADIENTS ! Number of stored horizontal gradients +LOGICAL, INTENT(IN) :: LDHARATU ! HARATU scheme active + +CHARACTER (LEN=4), INTENT(IN) :: HMF_UPDRAFT ! Type of mass flux scheme +REAL, INTENT(IN) :: PTSTEP ! Time step +! +! +REAL, DIMENSION(KLON,1,KLEV), INTENT(IN) :: PZZ ! Height of layer boundaries +REAL, DIMENSION(KLON,1,KLEV), INTENT(IN) :: PZZF ! Height of level +REAL, DIMENSION(KLON), INTENT(IN) :: PZZTOP ! Height of highest level + +REAL, DIMENSION(KLON,1,KLEV+2), INTENT(INOUT) :: PRHODJ !Dry density * Jacobian +! MFMOIST used in case LHARATU=TRUE +REAL, DIMENSION(KLON,1,KLEV+2), INTENT(INOUT) :: MFMOIST !Moist mass flux from Dual scheme +REAL, DIMENSION(KLON,1,KLEV+2), INTENT(INOUT) :: PTHVREF ! Virtual Potential + ! Temperature of the reference state +REAL, DIMENSION(KLON,1,KLEV+2), INTENT(INOUT) :: PRHODREF ! dry density of the + ! reference state +CHARACTER(LEN=1) , INTENT(IN) :: HINST_SFU ! temporal location of the + ! surface friction flux +! +REAL, DIMENSION(KLON,1), INTENT(INOUT) :: PSFTH,PSFRV +! normal surface fluxes of theta and Rv +REAL, DIMENSION(KLON,1), INTENT(INOUT) :: PSFU,PSFV +! normal surface fluxes of (u,v) parallel to the orography +REAL, DIMENSION(KLON,1,KSV), INTENT(INOUT) :: PSFSV +! normal surface fluxes of Scalar var. +! +! prognostic variables at t- deltat +REAL, DIMENSION(KLON,1,KLEV+2), INTENT(INOUT) :: PPABSM ! Pressure at time t-1 +REAL, DIMENSION(KLON,1,KLEV+2), INTENT(INOUT) :: PUM,PVM,PWM ! wind components +REAL, DIMENSION(KLON,1,KLEV+2), INTENT(INOUT) :: PTKEM ! TKE +REAL, DIMENSION(0,0,0), INTENT(INOUT) :: PEPSM ! dissipation of TKE +REAL, DIMENSION(KLON,1,KLEV,KSV), INTENT(INOUT) :: PSVM ! passive scal. var. +REAL, DIMENSION(KLON,1,KLEV+2), INTENT(INOUT) :: PSRCM ! Second-order flux + ! s'rc'/2Sigma_s2 at time t-1 multiplied by Lambda_3 +! +! PLENGTHM, PLENGTH used in case LHARATU=true +REAL, DIMENSION(KLON,1,KLEV+2), INTENT(INOUT) :: PLENGTHM, PLENGTHH ! length scales vdfexcu + +! +! thermodynamical variables which are transformed in conservative var. +REAL, DIMENSION(KLON,1,KLEV+2), INTENT(INOUT) :: PTHM ! pot. temp. +REAL, DIMENSION(KLON,1,KLEV,KRR), INTENT(INOUT) :: PRM ! mixing ratio +! +! sources of momentum, conservative potential temperature, Turb. Kin. Energy, +! TKE dissipation +REAL, DIMENSION(KLON,1,KLEV+2), INTENT(INOUT) :: PRUS,PRVS,PRWS +REAL, DIMENSION(KLON,1,KLEV+2), INTENT(INOUT) :: PRTHS +REAL, DIMENSION(KLON,1,KLEV), INTENT(IN) :: PRTKES +REAL, DIMENSION(KLON,1,KLEV+2), INTENT(OUT) :: PRTKES_OUT +REAL, DIMENSION(0,0,0) , INTENT(INOUT) ::PREPSS +! Source terms for all water kinds, PRRS(:,:,:,1) is used for the conservative +! mixing ratio +REAL, DIMENSION(KLON,1,KLEV,KRR), INTENT(INOUT) :: PRRS +! Source terms for all passive scalar variables +REAL, DIMENSION(KLON,1,KLEV,KSV), INTENT(IN) :: PRSVSIN +REAL, DIMENSION(KLON,1,KLEV,KSV), INTENT(OUT) :: PRSVS +! Sigma_s at time t+1 : square root of the variance of the deviation to the +! saturation +REAL, DIMENSION(KLON,1,KLEV+2), INTENT(OUT) :: PSIGS +REAL, DIMENSION(KLON,1,KLEV+2), INTENT(OUT) :: PDRUS_TURB ! evolution of rhoJ*U by turbulence only +REAL, DIMENSION(KLON,1,KLEV+2), INTENT(OUT) :: PDRVS_TURB ! evolution of rhoJ*V by turbulence only +REAL, DIMENSION(KLON,1,KLEV+2), INTENT(OUT) :: PDRTHLS_TURB ! evolution of rhoJ*thl by turbulence only +REAL, DIMENSION(KLON,1,KLEV+2), INTENT(OUT) :: PDRRTS_TURB ! evolution of rhoJ*rt by turbulence only +REAL, DIMENSION(KLON,1,KLEV,KSV), INTENT(OUT) :: PDRSVS_TURB ! evolution of rhoJ*Sv by turbulence only +REAL, DIMENSION(KLON,1,KLEV+2), INTENT(INOUT) :: PFLXZTHVMF +REAL, DIMENSION(KLON,1,KLEV+2), INTENT(OUT) :: PEDR ! EDR +! +LOGICAL , INTENT(IN) :: OSUBG_COND ! switch +! !for SUBGrid CONDensation +REAL, DIMENSION(KLON,1,KLEV+2), INTENT(OUT) :: PDP, PTP, PTPMF, PTDIFF, PTDISS +! !for TKE DDH budgets +! +TYPE(TYP_DDH), INTENT(INOUT) :: YDDDH +TYPE(TLDDH), INTENT(IN) :: YDLDDH +TYPE(TMDDH), INTENT(IN) :: YDMDDH +! +! +!* 0.2 Declarations of local variables : +! +INTEGER :: JRR,JSV ! Loop index for the moist and scalar variables +INTEGER :: IIB ! Define the physical domain +INTEGER :: IIE ! +INTEGER :: IJB ! +INTEGER :: IJE ! +INTEGER :: IKB ! +INTEGER :: IKE ! +INTEGER :: IKTB ! +INTEGER :: IKTE ! +INTEGER :: IKT ! +INTEGER :: JL, JK, JLON +! +INTEGER ::II +! +! +INTEGER :: IMI ! model index number + +CHARACTER(LEN=4),DIMENSION(2) :: HLBCX, HLBCY ! X- and Y-direc LBC + +INTEGER :: ISPLIT ! number of time-splitting + +LOGICAL :: OCLOSE_OUT ! Conditional closure of + ! the OUTPUT FM-file +LOGICAL :: OTURB_FLX ! switch to write the + ! turbulent fluxes in the syncronous FM-file +LOGICAL :: OTURB_DIAG ! switch to write some + ! diagnostic fields in the syncronous FM-file +LOGICAL :: ORMC01 ! switch for RMC01 lengths in SBL + +CHARACTER(LEN=4) :: HTURBDIM ! dimensionality of the + ! turbulence scheme +CHARACTER(LEN=4) :: HTURBLEN ! kind of mixing length + +REAL :: ZIMPL ! degree of implicitness + +CHARACTER(LEN=4) :: HFMFILE ! Name of the output + ! FM-file +CHARACTER(LEN=4) :: HLUOUT ! Output-listing name for + ! model n +! +REAL, DIMENSION(KLON,1,KLEV+2) :: ZDXX,ZDYY,ZDZZ,ZDZX,ZDZY + ! metric coefficients +REAL, POINTER :: ZDIRCOSXW(:,:), ZDIRCOSYW(:,:), ZDIRCOSZW(:,:) +! Director Cosinus along x, y and z directions at surface w-point +REAL, POINTER :: ZCOSSLOPE(:,:) ! cosinus of the anglebetween i and the slope vector +REAL, POINTER :: ZSINSLOPE(:,:) ! sinus of the angle between i and the slope vector + +REAL,DIMENSION(KLON,1,KLEV+2) :: ZCEI +REAL :: ZCEI_MIN,ZCEI_MAX,ZCOEF_AMPL_SAT +REAL, DIMENSION(KLON,1) :: ZBL_DEPTH, ZSBL_DEPTH +REAL,DIMENSION(KLON,1,KLEV+2) :: ZWTH ! heat flux +REAL,DIMENSION(KLON,1,KLEV+2) :: ZWRC ! cloud water flux +REAL,DIMENSION(KLON,1,KLEV+2,KSV) :: ZWSV,ZSVM,ZRSVS,ZDRSVS_TURB ! scalar flux +REAL,DIMENSION(KLON,1,KLEV+2) :: ZZZ ! Local value of PZZ +REAL,DIMENSION(KLON,1,KLEV+2,KRR) :: ZRM,ZRRS +REAL,DIMENSION(KLON,1,KLEV+2,KGRADIENTS) :: ZHGRAD ! Horizontal Gradients +! +REAL, DIMENSION(KLON,1), TARGET :: ZERO, ZONE +! +CHARACTER(LEN=4) :: CL +!------------------------------------------------------------------------------ +! +!* 1. PRELIMINARY COMPUTATIONS +! ------------------------ +! +REAL(KIND=JPRB) :: ZHOOK_HANDLE +IF (LHOOK) CALL DR_HOOK('ARO_TURB_MNH',0,ZHOOK_HANDLE) +IIB=1+JPHEXT +IIE=SIZE(PZZ,1) - JPHEXT +IJB=1+JPHEXT +IJE=SIZE(PZZ,2) - JPHEXT +IKTB=1+JPVEXT_TURB +IKT=SIZE(PZZ,3)+2*JPVEXT_TURB +IKTE=IKT - JPVEXT_TURB +IKB=KKA+JPVEXT_TURB*KKL +IKE=KKU-JPVEXT_TURB*KKL + +! +! +!------------------------------------------------------------------------------ +! +!* 2. INITIALISATION (CAS DU MODELE 1D) +! +! --------------------------------- +! Numero du modele si grid nestind, toujours egal a 1 +IMI=1 + +! Type de condition � la limite. En 1D, sans importance. A etudier en 3D. +HLBCX(:)='CYCL' +HLBCY(:)='CYCL' + +! en dur a 1 dans MNH +ISPLIT=1 + +! pour ecriture et diagnostic dans mesoNH, � priori les switches toujours � .F. +OCLOSE_OUT=.FALSE. +HFMFILE=' ' +HLUOUT= ' ' +OTURB_FLX=.FALSE. +OTURB_DIAG=.FALSE. + +! a mettre en namelist +ORMC01=.FALSE. + +HTURBDIM='1DIM' +HTURBLEN='BL89' + +ZIMPL=1. + + +! tableau a recalculer a chaque pas de temps +! attention, ZDZZ est l'altitude entre deux niveaux (et pas l'�paisseur de la couche) + +!WRITE(20,*)'sous aro_turb_mnh PZZF', PZZF(1,1,58:60) +!WRITE(20,*)'sous aro_turb_mnh PZZ', PZZ(1,1,58:60) + + + +ZZZ(IIB:IIE,1,2:KLEV+1)=PZZ(IIB:IIE,1,1:KLEV) +ZZZ(IIB:IIE,1,1) = PZZTOP(IIB:IIE) +ZDZZ(IIB:IIE,1,KLEV+2)=-999. + +DO JK = 2 , KLEV + DO JL = IIB,IIE + ZDZZ(JL,1,JK)=PZZF(JL,1,JK-1)-PZZF(JL,1,JK) + ENDDO +ENDDO + +DO JL = IIB,IIE + ZZZ(JL,1,KLEV+2) = 2*PZZ(JL,1,KLEV)-PZZ(JL,1,KLEV-1) + ZDZZ(JL,1,1)=ZZZ(JL,1,KKU)-ZZZ(JL,1,IKE) + ZDZZ(JL,1,KLEV+1)=PZZF(JL,1,KLEV)-(1.5*ZZZ(JL,1,KLEV+1)-0.5*ZZZ(JL,1,KLEV)) +ENDDO + +! tableaux qui devront etre initialis�s plus en amont dans Aladin s'il +! n'existent pas d�ja. Dans le cas du 1D, il n'y a pas de relief, +! ils ont donc des valeurs triviales. + +ZERO(:,:) = 0. +ZONE(:,:) = 1. + +ZDIRCOSXW=>ZONE(:,:) +ZDIRCOSYW=>ZONE(:,:) +ZDIRCOSZW=>ZONE(:,:) +ZCOSSLOPE=>ZONE(:,:) +ZSINSLOPE=>ZERO(:,:) + +!------------------------------------------------------------------------------ +! +! +!* 4. MULTIPLICATION PAR RHODJ +! POUR OBTENIR LES TERMES SOURCES DE MESONH +! +! ----------------------------------------------- + +! WRITE (15,*)'PRUS debut AC_TURB_MNH=',PRUS +! WRITE (15,*)'PRVS debut AC_TURB_MNH=',PRVS +! WRITE (15,*)'PRWS debut AC_TURB_MNH=',PRWS +! WRITE (15,*)'PRTHS debut AC_TURB_MNH=',PRTHS +! WRITE (15,*)'PRRS debut AC_TURB_MNH=',PRRS + +DO JK=2,KLEV+1 + DO JL = 1,KLON + PRUS(JL,1,JK) = PRUS(JL,1,JK) *PRHODJ(JL,1,JK) + PRVS(JL,1,JK) = PRVS(JL,1,JK) *PRHODJ(JL,1,JK) + PRWS(JL,1,JK) = PRWS(JL,1,JK) *PRHODJ(JL,1,JK) + PRTHS(JL,1,JK) = PRTHS(JL,1,JK) *PRHODJ(JL,1,JK) + PRTKES_OUT(JL,1,JK) = PRTKES(JL,1,JK-1)*PRHODJ(JL,1,JK) + ENDDO +ENDDO +DO JRR=1,KRR + DO JK=2,KLEV+1 + DO JL = 1,KLON + ZRRS(JL,1,JK,JRR) = PRRS(JL,1,JK-1,JRR)*PRHODJ(JL,1,JK) + ENDDO + ZRM(:,1,JK,JRR) = PRM(:,1,JK-1,JRR) + ENDDO + ZRRS(:,1,1,JRR )= ZRRS(:,1,2,JRR) + ZRRS(:,1,KLEV+2,JRR)= ZRRS(:,1,KLEV+1,JRR) + ZRM(:,1,1,JRR )= ZRM(:,1,2,JRR) + ZRM(:,1,KLEV+2,JRR)= ZRM(:,1,KLEV+1,JRR) +ENDDO +DO JSV=1,KSV + DO JK=2,KLEV+1 + DO JL = 1,KLON + ZRSVS(JL,1,JK,JSV) = PRSVSIN(JL,1,JK-1,JSV)*PRHODJ(JL,1,JK) + ENDDO + ZSVM(:,1,JK,JSV) = PSVM(:,1,JK-1,JSV) + ENDDO + ZRSVS(:,1,1,JSV )= ZRSVS(:,1,2,JSV) + ZRSVS(:,1,KLEV+2,JSV)= ZRSVS(:,1,KLEV+1,JSV) + ZSVM(:,1,1,JSV )= ZSVM(:,1,2,JSV) + ZSVM(:,1,KLEV+2,JSV)= ZSVM(:,1,KLEV+1,JSV) +ENDDO + +!------------------------------------------------------------------------------ +! +!* 3. Add 2*JPVEXT_TURB values on the vertical +! +! +CALL VERTICAL_EXTEND(PRHODJ) +CALL VERTICAL_EXTEND(PTHVREF) +CALL VERTICAL_EXTEND(PRHODREF) +CALL VERTICAL_EXTEND(PPABSM) +CALL VERTICAL_EXTEND(PUM) +CALL VERTICAL_EXTEND(PVM) +CALL VERTICAL_EXTEND(PWM) +CALL VERTICAL_EXTEND(PTKEM) +PSRCM(:,:,1)=0. +PSRCM(:,:,KLEV+2)=0. +CALL VERTICAL_EXTEND(PTHM) +CALL VERTICAL_EXTEND(PFLXZTHVMF) +IF (LDHARATU) THEN + CALL VERTICAL_EXTEND(PLENGTHM) + CALL VERTICAL_EXTEND(PLENGTHH) +ENDIF +CALL VERTICAL_EXTEND(MFMOIST) +CALL VERTICAL_EXTEND(PRUS) +CALL VERTICAL_EXTEND(PRVS) +CALL VERTICAL_EXTEND(PRWS) +CALL VERTICAL_EXTEND(PRTHS) +CALL VERTICAL_EXTEND(PRTKES_OUT) + +!------------------------------------------------------------------------------ +! +! +!* 5. APPEL DE LA TURBULENCE MESONH +! +! --------------------------------- +!pour AROME, on n'utilise pas les modifs de Mireille pour la turb au bord des nuages +ZCEI_MAX=1.0 +ZCEI_MIN=0.0 +ZCEI=0.0 +ZCOEF_AMPL_SAT=0.0 + +CL=HINST_SFU +CALL TURB (KLEV+2,1,KKL,IMI, KRR, KRRL, KRRI, HLBCX, HLBCY, ISPLIT,IMI, & + & OCLOSE_OUT,OTURB_FLX,OTURB_DIAG,OSUBG_COND,ORMC01, & + & HTURBDIM,HTURBLEN,'NONE','NONE', CL, & + & HMF_UPDRAFT,ZIMPL, & + & 2*PTSTEP, 2*PTSTEP, 2*PTSTEP, & + & HFMFILE,HLUOUT,ZDXX,ZDYY,ZDZZ,ZDZX,ZDZY,ZZZ, & + & ZDIRCOSXW,ZDIRCOSYW,ZDIRCOSZW,ZCOSSLOPE,ZSINSLOPE, & + & PRHODJ,PTHVREF,PRHODREF, & + & PSFTH,PSFRV,PSFSV,PSFU,PSFV, & + & PPABSM,PUM,PVM,PWM,PTKEM,ZSVM,PSRCM, & + & PLENGTHM,PLENGTHH,MFMOIST, & + & ZBL_DEPTH,ZSBL_DEPTH, & + & PUM,PVM,PWM,ZCEI,ZCEI_MIN,ZCEI_MAX,ZCOEF_AMPL_SAT, & + & PTHM,ZRM, & + & PRUS,PRVS,PRWS,PRTHS,ZRRS,ZRSVS,PRTKES_OUT, & + & ZHGRAD,PSIGS, & + & PDRUS_TURB,PDRVS_TURB, & + & PDRTHLS_TURB,PDRRTS_TURB,ZDRSVS_TURB, & + & PFLXZTHVMF,ZWTH,ZWRC,ZWSV,PDP,PTP,PTPMF,PTDIFF, & + & PTDISS,PEDR,YDDDH,YDLDDH,YDMDDH) +! +! +!------------------------------------------------------------------------------ +! +! +!* 5. DIVISION PAR RHODJ DES TERMES SOURCES DE MESONH +! (on obtient des termes homog�nes � des tendances) +! +! ----------------------------------------------- + +DO JK=2,KLEV+1 + DO JL = 1,KLON + PRUS(JL,1,JK) = PRUS(JL,1,JK) /PRHODJ(JL,1,JK) + PRVS(JL,1,JK) = PRVS(JL,1,JK) /PRHODJ(JL,1,JK) + PRTHS(JL,1,JK) = PRTHS(JL,1,JK) /PRHODJ(JL,1,JK) + PRTKES_OUT(JL,1,JK) = PRTKES_OUT(JL,1,JK) /PRHODJ(JL,1,JK) + PDRUS_TURB(JL,1,JK) = PDRUS_TURB(JL,1,JK) /PRHODJ(JL,1,JK) + PDRVS_TURB(JL,1,JK) = PDRVS_TURB(JL,1,JK) /PRHODJ(JL,1,JK) + PDRTHLS_TURB(JL,1,JK) = PDRTHLS_TURB(JL,1,JK) /PRHODJ(JL,1,JK) + PDRRTS_TURB(JL,1,JK) = PDRRTS_TURB(JL,1,JK) /PRHODJ(JL,1,JK) + ENDDO +ENDDO + +DO JRR=1,KRR + DO JK=2,KLEV+1 + DO JL = 1,KLON + PRRS(JL,1,JK-1,JRR) = ZRRS(JL,1,JK,JRR)/PRHODJ(JL,1,JK) + ENDDO + PRM(:,1,JK-1,JRR) = ZRM(:,1,JK,JRR) + ENDDO +ENDDO + +DO JSV=1,KSV + DO JK=2,KLEV+1 + DO JL = 1,KLON + PRSVS(JL,1,JK-1,JSV) = ZRSVS(JL,1,JK,JSV)/PRHODJ(JL,1,JK) + PDRSVS_TURB(JL,1,JK-1,JSV) = ZDRSVS_TURB(JL,1,JK,JSV)/PRHODJ(JL,1,JK) + ENDDO + ENDDO +ENDDO + +IF (LHOOK) CALL DR_HOOK('ARO_TURB_MNH',1,ZHOOK_HANDLE) + +CONTAINS + +SUBROUTINE VERTICAL_EXTEND(PX) + + ! fill extra vetical levels to fit MNH interface + +REAL, DIMENSION(KLON,1,KLEV+2), INTENT(INOUT) :: PX +! NO DR_HOOK, PLEASE ! Rek +PX(:,1,1 )= PX(:,1,2) +PX(:,1,KLEV+2)= PX(:,1,KLEV+1) +END SUBROUTINE VERTICAL_EXTEND + +END SUBROUTINE ARO_TURB_MNH diff --git a/src/arome/modset_Ryad/arpifs/namelist/namparar.nam.h b/src/arome/ext/namparar.nam.h similarity index 86% rename from src/arome/modset_Ryad/arpifs/namelist/namparar.nam.h rename to src/arome/ext/namparar.nam.h index 6032758b85cf496f9c303b39c63d0fbd72dbf15e..6f667ceae148f1b5de544b4d20f371dfae738a82 100644 --- a/src/arome/modset_Ryad/arpifs/namelist/namparar.nam.h +++ b/src/arome/ext/namparar.nam.h @@ -1,5 +1,5 @@ ! ------------------------------------------------------------------ -NAMELIST/NAMPARAR/LOSUBG_COND,CSUBG_AUCV_RC,LOSIGMAS,NSWB_MNH,NPRINTFR,LSQUALL,& +NAMELIST/NAMPARAR/LOSUBG_COND,CSUBG_AUCV_RC,CSUBG_AUCV_RI,LOSIGMAS,NSWB_MNH,NPRINTFR,LSQUALL,& &NREFROI1,NREFROI2,VSQUALL,NPTP,LDIAGWMAX,NDIAGWMAX,CMICRO,CSEDIM,& &LAROBU_ENABLE,CMF_UPDRAFT,CMF_CLOUD,LMIXUV,LLCRIT,LTOTPREC,LOSEDIC,& &VSIGQSAT,XLINI,LOLSMC,LOTOWNC,LOCND2,RADGR,RADSN,LHARATU,& @@ -13,5 +13,5 @@ NAMELIST/NAMPARAR/LOSUBG_COND,CSUBG_AUCV_RC,LOSIGMAS,NSWB_MNH,NPRINTFR,LSQUALL,& &LFEEDBACKT,LEVLIMIT,LNULLWETG,LWETGPOST,LNULLWETH,LWETHPOST, & &XFRACM90, LCONVHG, LCRFLIMIT, & &CFRAC_ICE_ADJUST, XSPLIT_MAXCFL, CFRAC_ICE_SHALLOW_MF, LSEDIM_AFTER,& - &LDEPOSC, XVDEPOSC + &LDEPOSC, XVDEPOSC, CCONDENS, CLAMBDA3, CSUBG_MF_PDF ! ------------------------------------------------------------------ diff --git a/src/arome/modset_Ryad/arpifs/phys_dmn/suparar.F90 b/src/arome/ext/suparar.F90 similarity index 93% rename from src/arome/modset_Ryad/arpifs/phys_dmn/suparar.F90 rename to src/arome/ext/suparar.F90 index 93f26ca1795e1f62eee25742f680e2fc0e88e97f..286a2edca755160f19a3265b4244e68d07a770f4 100644 --- a/src/arome/modset_Ryad/arpifs/phys_dmn/suparar.F90 +++ b/src/arome/ext/suparar.F90 @@ -112,6 +112,7 @@ REAL(KIND=JPRB) , POINTER :: VSIGQSAT REAL(KIND=JPRB) , POINTER :: XKRC_MF INTEGER(KIND=JPIM) , POINTER :: NDIAGWMAX CHARACTER(LEN=80) :: CSUBG_PR_PDF +CHARACTER(LEN=80) :: CSUBG_MF_PDF REAL(KIND=JPRB) , POINTER :: XFRAC_UP_MAX CHARACTER(LEN=80) :: CSUBG_RR_EVAP REAL(KIND=JPRB) , POINTER :: XCMF @@ -119,6 +120,7 @@ INTEGER(KIND=JPIM) , POINTER :: NSWB_MNH LOGICAL , POINTER :: LDIAGWMAX REAL(KIND=JPRB) , POINTER :: XPRES_UV CHARACTER (LEN=4) :: CSUBG_AUCV_RC +CHARACTER (LEN=80) :: CSUBG_AUCV_RI REAL(KIND=JPRB) , POINTER :: XALP_PERT LOGICAL , POINTER :: LOCND2 LOGICAL , POINTER :: LHARATU @@ -126,6 +128,8 @@ LOGICAL , POINTER :: LGRSN INTEGER(KIND=JPIM) , POINTER :: NPRINTFR REAL(KIND=JPRB) , POINTER :: XCQVR CHARACTER(LEN=4) :: CMICRO +CHARACTER(LEN=80) :: CCONDENS +CHARACTER(LEN=4) :: CLAMBDA3 REAL(KIND=JPRB) , POINTER :: XDETR_LUP REAL(KIND=JPRB) , POINTER :: GQVTOP REAL(KIND=JPRB) , POINTER :: GQVPLIM @@ -304,6 +308,8 @@ LOSIGMAS=.FALSE. LOSEDIC=.FALSE. NSWB_MNH=6 NPRINTFR=3600*36 +CCONDENS='CB02' +CLAMBDA3='CB' ! for squall line academic case LSQUALL=.FALSE. NREFROI1=1 @@ -376,9 +382,11 @@ NDTCHEM=1_JPIM LAROBU_ENABLE=.FALSE. ! Subgrid rain scheme 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 @@ -424,8 +432,12 @@ YDPARAR%CMF_CLOUD=CMF_CLOUD YDPARAR%CSUBG_PR_PDF=CSUBG_PR_PDF YDPARAR%CSUBG_RR_EVAP=CSUBG_RR_EVAP YDPARAR%CSUBG_AUCV_RC=CSUBG_AUCV_RC +YDPARAR%CSUBG_AUCV_RI=CSUBG_AUCV_RI +YDPARAR%CSUBG_MF_PDF=CSUBG_MF_PDF YDPARAR%CSUBG_RC_RR_ACCR=CSUBG_RC_RR_ACCR YDPARAR%CMICRO=CMICRO +YDPARAR%CCONDENS=CCONDENS +YDPARAR%CLAMBDA3=CLAMBDA3 YDPARAR%CSEDIM=CSEDIM YDPARAR%CSNOWRIMING=CSNOWRIMING YDPARAR%CFRAC_ICE_ADJUST=CFRAC_ICE_ADJUST @@ -444,12 +456,26 @@ ENDIF IF ( (CMICRO == 'ICE4' .OR. CMICRO == 'OLD4') .AND. .NOT.YH%LACTIVE ) THEN CALL ABOR1("ICE4 and OLD4 microphysics requires activation of YH in NAMGFL") ENDIF +IF ( CCONDENS /= 'CB02' .AND. CCONDENS /= 'GAUS') THEN + CALL ABOR1("CCONDENS must be CB02 or GAUS") +ENDIF +IF ( CLAMBDA3 /= 'CB' .AND. CLAMBDA3 /= 'NONE') THEN + CALL ABOR1("CLAMNDA3 must be CB or NONE") +ENDIF IF ( CSEDIM /= 'SPLI' .AND. CSEDIM /= 'STAT' ) THEN CALL ABOR1("AROME Microphysics sedimentation must be EULE or STAT") ENDIF IF ( CSUBG_AUCV_RC /= 'PDF ' .AND. CSUBG_AUCV_RC /= 'CLFR' .AND.& - & CSUBG_AUCV_RC /= 'NONE' ) THEN - CALL ABOR1("switch for autoconvertion CSUBG_AUCV_RC must be 'PDF ', 'CLFR' or 'NONE'") + & CSUBG_AUCV_RC /= 'NONE' .AND. CSUBG_AUCV_RC /= 'ADJU' ) THEN + CALL ABOR1("switch for autoconvertion CSUBG_AUCV_RC must be 'PDF ', 'ADJU', 'CLFR' or 'NONE'") +ENDIF +IF ( CSUBG_AUCV_RI /= 'NONE' .AND. CSUBG_AUCV_RI /= 'CLFR' .AND.& + & CSUBG_AUCV_RI /= 'ADJU') THEN + CALL ABOR1("switch for autoconvertion CSUBG_AUCV_RI must be 'CLFR', 'ADJU' or 'NONE'") +ENDIF +IF ((CSUBG_AUCV_RC == 'ADJU' .OR. CSUBG_AUCV_RI == 'ADJU') .AND.& + & CCONDENS /= 'GAUS') THEN + CALL ABOR1("CSUBG_AUCV_RC and/or CSUBG_AUCV_RI cannot be 'ADJU' if CCONDENS is not 'GAUS'") ENDIF IF ( CSUBG_RC_RR_ACCR(1:4)/='NONE' .AND. CSUBG_RC_RR_ACCR(1:4)/='PRFR' ) THEN CALL ABOR1("switch for rc rr accretion (CSUBG_RC_RR_ACCR) must be NONE or PRFR") @@ -463,6 +489,9 @@ IF ( CSUBG_PR_PDF(1:4)/= 'SIGM' .AND. CSUBG_PR_PDF(1:9) /= 'HLCRECTPD' .AND.& & .AND. CSUBG_PR_PDF(1:12) /= 'HLCISOTRIPDF' ) THEN CALL ABOR1("CSUBG_PR_PDF must be SIGM, HLCRECTPD, HLCTRIANGPDF, HLCQUADRAPDF or HLCISOTRIPDF") ENDIF +IF ( CSUBG_MF_PDF(1:4)/= 'NONE' .AND. CSUBG_MF_PDF(1:8)/= 'TRIANGLE' ) THEN + CALL ABOR1("CSUBG_MF_PDF must be NONE or TRIANGLE") +ENDIF IF(XTSTEP_TS<0._JPRB) THEN CALL ABOR1("XTSTEP_TS must be positive or null") ENDIF @@ -561,13 +590,15 @@ ENDIF ! 4. Write in kulout WRITE(UNIT=KULOUT,FMT='('' COMMON YOMPARAR '')') -WRITE(UNIT=KULOUT,FMT='('' LOSUBG_COND = '',L5,'' CSUBG_AUCV_RC = '',A4,& +WRITE(UNIT=KULOUT,FMT='('' LOSUBG_COND = '',L5,'' CSUBG_AUCV_RC = '',A4,'' CSUBG_AUCV_RI = '',A4,& & '' LOSEDIC = '',L5,'' LOSIGMAS ='',L5,'' LSQUALL = '',L5,& & '' LOLSMC = '',L5,'' LOTOWNC = '',L5,'' VSIGQSAT = '',F6.2)')& - & LOSUBG_COND, CSUBG_AUCV_RC, LOSEDIC, LOSIGMAS,LSQUALL,LOLSMC,LOTOWNC,VSIGQSAT + & LOSUBG_COND, CSUBG_AUCV_RC, CSUBG_AUCV_RI, LOSEDIC, LOSIGMAS,LSQUALL,LOLSMC,LOTOWNC,VSIGQSAT WRITE(UNIT=KULOUT,FMT='('' CSUBG_RC_RR_ACCR = '',A80,& -& '' CSUBG_RR_EVAP = '',A80, '' CSUBG_PR_PDF = '',A80)')& -& CSUBG_RC_RR_ACCR, CSUBG_RR_EVAP, CSUBG_PR_PDF +& '' CSUBG_RR_EVAP = '',A80, '' CSUBG_PR_PDF = '',A80, '' CCONDENS = '', A80, '' CSUBG_MF_PDF = '', A80)')& +& CSUBG_RC_RR_ACCR, CSUBG_RR_EVAP, CSUBG_PR_PDF, CCONDENS, CSUBG_MF_PDF +WRITE(UNIT=KULOUT,FMT='('' CLAMBDA3 = '',A80)')& +& CLAMBDA3 WRITE(UNIT=KULOUT,FMT='('' NREFROI1 = '',I3,& & '' NREFROI2 = '',I3,'' VSQUALL = '',E13.6)')NREFROI1, NREFROI2,VSQUALL WRITE(UNIT=KULOUT,FMT='('' NGPAR = '',I3,& diff --git a/src/arome/modset_Ryad/arpifs/module/yomparar.F90 b/src/arome/ext/yomparar.F90 similarity index 95% rename from src/arome/modset_Ryad/arpifs/module/yomparar.F90 rename to src/arome/ext/yomparar.F90 index d7e985748654b062d62bd654c707629ac5cf9e66..8c07934b948e9d72b4861a978f0925b6619fe707 100644 --- a/src/arome/modset_Ryad/arpifs/module/yomparar.F90 +++ b/src/arome/ext/yomparar.F90 @@ -149,6 +149,10 @@ CHARACTER(LEN=80) :: CSUBG_RR_EVAP ! type of evaporation scheme ! 'PRFR, 'CLFR' or 'NONE' CHARACTER(LEN=80) :: CSUBG_PR_PDF ! PDF chosen for precipitation production ! (NONE, SIGM, HLCRECTPD, HLCTRIANGPDF, HLCQUADRAPDF or HLCISOTRIPDF) +CHARACTER(LEN=80) :: CSUBG_AUCV_RI ! type of ri->rs autoconversion scheme + ! 'NONE', 'CLFR' or 'ADJU' +CHARACTER(LEN=80) :: CSUBG_MF_PDF ! PDF to use on MF cloud to retrieve low and high cloud parts + ! 'NONE' or 'TRIANGLE' !* for autoconversion qi,qc REAL(KIND=JPRB) :: RCRIAUTI ! ice autoconversion threshold @@ -191,6 +195,9 @@ LOGICAL :: LQVTOP ! to activate modification of qv in input to radiation. INTEGER(KIND=JPIM) :: NPROMICRO ! special cache-blocking factor for microphysics +CHARACTER(LEN=80) :: CCONDENS !condensation formulation. 'GAUS' or 'CB02' +CHARACTER(LEN=4) :: CLAMBDA3 !formulation for the lambda3 coeff used with s'r'. 'CB' or 'NONE' + END TYPE TPARAR !!TYPE(TPARAR), POINTER :: YRPARAR => NULL() diff --git a/src/arome/gmkpack_ignored_files b/src/arome/gmkpack_ignored_files index 6abe5cdf82a32041cdd1a48a945fb33b1d4511f1..10c5e38ab406d69febb7865b66c5c4114f6bc608 100644 --- a/src/arome/gmkpack_ignored_files +++ b/src/arome/gmkpack_ignored_files @@ -81,3 +81,7 @@ phyex/micro/cart_compress.F90 phyex/micro/modi_add_bounds.F90 phyex/micro/modi_cart_compress.F90 phyex/micro/modi_mask_compress.F90 +phyex/micro/ini_budget.F90 +phyex/micro/modd_budget.F90 +phyex/micro/modi_budget.F90 +phyex/micro/modi_ini_budget.F90 diff --git a/src/arome/micro/ice_adjust.F90 b/src/arome/micro/ice_adjust.F90 index 3a1658256cfa31154d0f790969a04560968612c3..8e23954f699f644bcd96ec1ca4ba06c859380b39 100644 --- a/src/arome/micro/ice_adjust.F90 +++ b/src/arome/micro/ice_adjust.F90 @@ -107,7 +107,7 @@ USE MODD_CONF USE MODD_BUDGET ! USE MODI_CONDENSATION -USE MODI_BUDGET +USE MODI_BUDGET_DDH USE MODE_FMWRIT ! IMPLICIT NONE @@ -378,10 +378,10 @@ ENDIF !* 6. STORE THE BUDGET TERMS ! ---------------------- ! -IF (LBUDGET_RV) CALL BUDGET (PRVS(:,:,:) * PRHODJ(:,:,:),6,HBUNAME//'_BU_RRV',YDDDH, YDLDDH, YDMDDH) -IF (LBUDGET_RC) CALL BUDGET (PRCS(:,:,:) * PRHODJ(:,:,:),7,HBUNAME//'_BU_RRC',YDDDH, YDLDDH, YDMDDH) -IF (LBUDGET_RI) CALL BUDGET (PRIS(:,:,:) * PRHODJ(:,:,:),9,HBUNAME//'_BU_RRI',YDDDH, YDLDDH, YDMDDH) -IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:) * PRHODJ(:,:,:),4,HBUNAME//'_BU_RTH',YDDDH, YDLDDH, YDMDDH) +IF (LBUDGET_RV) CALL BUDGET_DDH (PRVS(:,:,:) * PRHODJ(:,:,:),6,HBUNAME//'_BU_RRV',YDDDH, YDLDDH, YDMDDH) +IF (LBUDGET_RC) CALL BUDGET_DDH (PRCS(:,:,:) * PRHODJ(:,:,:),7,HBUNAME//'_BU_RRC',YDDDH, YDLDDH, YDMDDH) +IF (LBUDGET_RI) CALL BUDGET_DDH (PRIS(:,:,:) * PRHODJ(:,:,:),9,HBUNAME//'_BU_RRI',YDDDH, YDLDDH, YDMDDH) +IF (LBUDGET_TH) CALL BUDGET_DDH (PTHS(:,:,:) * PRHODJ(:,:,:),4,HBUNAME//'_BU_RTH',YDDDH, YDLDDH, YDMDDH) ! !------------------------------------------------------------------------------ ! diff --git a/src/arome/micro/lima.F90 b/src/arome/micro/lima.F90 index a1e6ca67028b8ac968a44e55700064e15c04a80f..e6a9ef41186419563223a1ba422a9af6c8bf16f6 100644 --- a/src/arome/micro/lima.F90 +++ b/src/arome/micro/lima.F90 @@ -109,7 +109,7 @@ USE MODD_NSV, ONLY : NSV_LIMA_NC, NSV_LIMA_NR, NSV_LIMA_CCN_FREE, NSV NSV_LIMA_IFN_NUCL, NSV_LIMA_IMM_NUCL, NSV_LIMA_HOM_HAZE USE MODD_CST, ONLY : XCI, XCL, XCPD, XCPV, XLSTT, XLVTT, XTT ! -USE MODI_BUDGET +USE MODI_BUDGET_DDH USE MODI_LIMA_FUNCTIONS, ONLY : COUNTJV USE MODI_LIMA_WARM_SEDIMENTATION USE MODI_LIMA_COLD_SEDIMENTATION @@ -617,16 +617,16 @@ IF ( LCOLD_LIMA ) ZCIT(:,:,:) = ZCIS(:,:,:) * PTSTEP ! Call budgets ! IF(LBU_ENABLE) THEN - IF (LBUDGET_RC .AND. LSEDC_LIMA) CALL BUDGET (ZRCS(:,:,:)*PRHODJ(:,:,:), 7 , 'SEDI_BU_RRC',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RR) CALL BUDGET (ZRRS(:,:,:)*PRHODJ(:,:,:), 8 , 'SEDI_BU_RRR',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RI .AND. LSEDI_LIMA) CALL BUDGET (ZRIS(:,:,:)*PRHODJ(:,:,:), 9 , 'SEDI_BU_RRI',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RS) CALL BUDGET (ZRSS(:,:,:)*PRHODJ(:,:,:), 10 , 'SEDI_BU_RRS',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RG) CALL BUDGET (ZRGS(:,:,:)*PRHODJ(:,:,:), 11 , 'SEDI_BU_RRG',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RH) CALL BUDGET (ZRHS(:,:,:)*PRHODJ(:,:,:), 12 , 'SEDI_BU_RRH',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_RC .AND. LSEDC_LIMA) CALL BUDGET_DDH (ZRCS(:,:,:)*PRHODJ(:,:,:), 7 , 'SEDI_BU_RRC',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_RR) CALL BUDGET_DDH (ZRRS(:,:,:)*PRHODJ(:,:,:), 8 , 'SEDI_BU_RRR',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_RI .AND. LSEDI_LIMA) CALL BUDGET_DDH (ZRIS(:,:,:)*PRHODJ(:,:,:), 9 , 'SEDI_BU_RRI',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_RS) CALL BUDGET_DDH (ZRSS(:,:,:)*PRHODJ(:,:,:), 10 , 'SEDI_BU_RRS',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_RG) CALL BUDGET_DDH (ZRGS(:,:,:)*PRHODJ(:,:,:), 11 , 'SEDI_BU_RRG',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_RH) CALL BUDGET_DDH (ZRHS(:,:,:)*PRHODJ(:,:,:), 12 , 'SEDI_BU_RRH',YDDDH, YDLDDH, YDMDDH) IF (LBUDGET_SV) THEN - IF (LSEDC_LIMA) CALL BUDGET (ZCCS(:,:,:)*PRHODJ(:,:,:), 12+NSV_LIMA_NC , 'SEDI_BU_RSV',YDDDH, YDLDDH, YDMDDH) - IF (LRAIN_LIMA) CALL BUDGET (ZCRS(:,:,:)*PRHODJ(:,:,:), 12+NSV_LIMA_NR , 'SEDI_BU_RSV',YDDDH, YDLDDH, YDMDDH) - IF (LSEDI_LIMA) CALL BUDGET (ZCIS(:,:,:)*PRHODJ(:,:,:), 12+NSV_LIMA_NI , 'SEDI_BU_RSV',YDDDH, YDLDDH, YDMDDH) + IF (LSEDC_LIMA) CALL BUDGET_DDH (ZCCS(:,:,:)*PRHODJ(:,:,:), 12+NSV_LIMA_NC , 'SEDI_BU_RSV',YDDDH, YDLDDH, YDMDDH) + IF (LRAIN_LIMA) CALL BUDGET_DDH (ZCRS(:,:,:)*PRHODJ(:,:,:), 12+NSV_LIMA_NR , 'SEDI_BU_RSV',YDDDH, YDLDDH, YDMDDH) + IF (LSEDI_LIMA) CALL BUDGET_DDH (ZCIS(:,:,:)*PRHODJ(:,:,:), 12+NSV_LIMA_NI , 'SEDI_BU_RSV',YDDDH, YDLDDH, YDMDDH) END IF END IF ! @@ -1558,159 +1558,159 @@ PTHS(:,:,:) = ZW_THS(:,:,:) IF(LBU_ENABLE) THEN IF (LBUDGET_TH) THEN ZTHS(:,:,:) = ZTHS(:,:,:) + ZTOT_TH_EVAP(:,:,:)/PTSTEP - CALL BUDGET (ZTHS(:,:,:)*PRHODJ(:,:,:), 4 , 'REVA_BU_RTH',YDDDH, YDLDDH, YDMDDH) + CALL BUDGET_DDH (ZTHS(:,:,:)*PRHODJ(:,:,:), 4 , 'REVA_BU_RTH',YDDDH, YDLDDH, YDMDDH) ZTHS(:,:,:) = ZTHS(:,:,:) + ZTOT_TH_HONC(:,:,:)/PTSTEP - CALL BUDGET (ZTHS(:,:,:)*PRHODJ(:,:,:), 4 , 'HONC_BU_RTH',YDDDH, YDLDDH, YDMDDH) + CALL BUDGET_DDH (ZTHS(:,:,:)*PRHODJ(:,:,:), 4 , 'HONC_BU_RTH',YDDDH, YDLDDH, YDMDDH) ZTHS(:,:,:) = ZTHS(:,:,:) + ZTOT_TH_HONR(:,:,:)/PTSTEP - CALL BUDGET (ZTHS(:,:,:)*PRHODJ(:,:,:), 4 , 'HONR_BU_RTH',YDDDH, YDLDDH, YDMDDH) + CALL BUDGET_DDH (ZTHS(:,:,:)*PRHODJ(:,:,:), 4 , 'HONR_BU_RTH',YDDDH, YDLDDH, YDMDDH) ZTHS(:,:,:) = ZTHS(:,:,:) + ZTOT_TH_DEPS(:,:,:)/PTSTEP - CALL BUDGET (ZTHS(:,:,:)*PRHODJ(:,:,:), 4 , 'DEPS_BU_RTH',YDDDH, YDLDDH, YDMDDH) + CALL BUDGET_DDH (ZTHS(:,:,:)*PRHODJ(:,:,:), 4 , 'DEPS_BU_RTH',YDDDH, YDLDDH, YDMDDH) ZTHS(:,:,:) = ZTHS(:,:,:) + ZTOT_TH_DEPG(:,:,:)/PTSTEP - CALL BUDGET (ZTHS(:,:,:)*PRHODJ(:,:,:), 4 , 'DEPG_BU_RTH',YDDDH, YDLDDH, YDMDDH) + CALL BUDGET_DDH (ZTHS(:,:,:)*PRHODJ(:,:,:), 4 , 'DEPG_BU_RTH',YDDDH, YDLDDH, YDMDDH) ZTHS(:,:,:) = ZTHS(:,:,:) + ZTOT_TH_IMLT(:,:,:)/PTSTEP - CALL BUDGET (ZTHS(:,:,:)*PRHODJ(:,:,:), 4 , 'IMLT_BU_RTH',YDDDH, YDLDDH, YDMDDH) + CALL BUDGET_DDH (ZTHS(:,:,:)*PRHODJ(:,:,:), 4 , 'IMLT_BU_RTH',YDDDH, YDLDDH, YDMDDH) ZTHS(:,:,:) = ZTHS(:,:,:) + ZTOT_TH_BERFI(:,:,:)/PTSTEP - CALL BUDGET (ZTHS(:,:,:)*PRHODJ(:,:,:), 4 , 'BERFI_BU_RTH',YDDDH, YDLDDH, YDMDDH) + CALL BUDGET_DDH (ZTHS(:,:,:)*PRHODJ(:,:,:), 4 , 'BERFI_BU_RTH',YDDDH, YDLDDH, YDMDDH) ZTHS(:,:,:) = ZTHS(:,:,:) + ZTOT_TH_RIM(:,:,:)/PTSTEP - CALL BUDGET (ZTHS(:,:,:)*PRHODJ(:,:,:), 4 , 'RIM_BU_RTH',YDDDH, YDLDDH, YDMDDH) + CALL BUDGET_DDH (ZTHS(:,:,:)*PRHODJ(:,:,:), 4 , 'RIM_BU_RTH',YDDDH, YDLDDH, YDMDDH) ZTHS(:,:,:) = ZTHS(:,:,:) + ZTOT_TH_ACC(:,:,:)/PTSTEP - CALL BUDGET (ZTHS(:,:,:)*PRHODJ(:,:,:), 4 , 'ACC_BU_RTH',YDDDH, YDLDDH, YDMDDH) + CALL BUDGET_DDH (ZTHS(:,:,:)*PRHODJ(:,:,:), 4 , 'ACC_BU_RTH',YDDDH, YDLDDH, YDMDDH) ZTHS(:,:,:) = ZTHS(:,:,:) + ZTOT_TH_CFRZ(:,:,:)/PTSTEP - CALL BUDGET (ZTHS(:,:,:)*PRHODJ(:,:,:), 4 , 'CFRZ_BU_RTH',YDDDH, YDLDDH, YDMDDH) + CALL BUDGET_DDH (ZTHS(:,:,:)*PRHODJ(:,:,:), 4 , 'CFRZ_BU_RTH',YDDDH, YDLDDH, YDMDDH) ZTHS(:,:,:) = ZTHS(:,:,:) + ZTOT_TH_WETG(:,:,:)/PTSTEP - CALL BUDGET (ZTHS(:,:,:)*PRHODJ(:,:,:), 4 , 'WETG_BU_RTH',YDDDH, YDLDDH, YDMDDH) + CALL BUDGET_DDH (ZTHS(:,:,:)*PRHODJ(:,:,:), 4 , 'WETG_BU_RTH',YDDDH, YDLDDH, YDMDDH) ZTHS(:,:,:) = ZTHS(:,:,:) + ZTOT_TH_DRYG(:,:,:)/PTSTEP - CALL BUDGET (ZTHS(:,:,:)*PRHODJ(:,:,:), 4 , 'DRYG_BU_RTH',YDDDH, YDLDDH, YDMDDH) + CALL BUDGET_DDH (ZTHS(:,:,:)*PRHODJ(:,:,:), 4 , 'DRYG_BU_RTH',YDDDH, YDLDDH, YDMDDH) ZTHS(:,:,:) = ZTHS(:,:,:) + ZTOT_TH_GMLT(:,:,:)/PTSTEP - CALL BUDGET (ZTHS(:,:,:)*PRHODJ(:,:,:), 4 , 'GMLT_BU_RTH',YDDDH, YDLDDH, YDMDDH) + CALL BUDGET_DDH (ZTHS(:,:,:)*PRHODJ(:,:,:), 4 , 'GMLT_BU_RTH',YDDDH, YDLDDH, YDMDDH) END IF IF (LBUDGET_RV) THEN ZRVS(:,:,:) = ZRVS(:,:,:) - ZTOT_RR_EVAP(:,:,:)/PTSTEP - CALL BUDGET (ZRVS(:,:,:)*PRHODJ(:,:,:), 6 , 'REVA_BU_RRV',YDDDH, YDLDDH, YDMDDH) + CALL BUDGET_DDH (ZRVS(:,:,:)*PRHODJ(:,:,:), 6 , 'REVA_BU_RRV',YDDDH, YDLDDH, YDMDDH) ZRVS(:,:,:) = ZRVS(:,:,:) - ZTOT_RS_DEPS(:,:,:)/PTSTEP - CALL BUDGET (ZRVS(:,:,:)*PRHODJ(:,:,:), 6 , 'DEPS_BU_RRV',YDDDH, YDLDDH, YDMDDH) + CALL BUDGET_DDH (ZRVS(:,:,:)*PRHODJ(:,:,:), 6 , 'DEPS_BU_RRV',YDDDH, YDLDDH, YDMDDH) ZRVS(:,:,:) = ZRVS(:,:,:) - ZTOT_RG_DEPG(:,:,:)/PTSTEP - CALL BUDGET (ZRVS(:,:,:)*PRHODJ(:,:,:), 6 , 'DEPG_BU_RRV',YDDDH, YDLDDH, YDMDDH) + CALL BUDGET_DDH (ZRVS(:,:,:)*PRHODJ(:,:,:), 6 , 'DEPG_BU_RRV',YDDDH, YDLDDH, YDMDDH) END IF IF (LBUDGET_RC) THEN ZRCS(:,:,:) = ZRCS(:,:,:) + ZTOT_RC_AUTO(:,:,:)/PTSTEP - CALL BUDGET (ZRCS(:,:,:)*PRHODJ(:,:,:), 7 , 'AUTO_BU_RRC',YDDDH, YDLDDH, YDMDDH) + CALL BUDGET_DDH (ZRCS(:,:,:)*PRHODJ(:,:,:), 7 , 'AUTO_BU_RRC',YDDDH, YDLDDH, YDMDDH) ZRCS(:,:,:) = ZRCS(:,:,:) + ZTOT_RC_ACCR(:,:,:)/PTSTEP - CALL BUDGET (ZRCS(:,:,:)*PRHODJ(:,:,:), 7 , 'ACCR_BU_RRC',YDDDH, YDLDDH, YDMDDH) + CALL BUDGET_DDH (ZRCS(:,:,:)*PRHODJ(:,:,:), 7 , 'ACCR_BU_RRC',YDDDH, YDLDDH, YDMDDH) ! impact of rain evap !!!!!! ZRCS(:,:,:) = ZRCS(:,:,:) - CALL BUDGET (ZRCS(:,:,:)*PRHODJ(:,:,:), 7 , 'REVA_BU_RRC',YDDDH, YDLDDH, YDMDDH) + CALL BUDGET_DDH (ZRCS(:,:,:)*PRHODJ(:,:,:), 7 , 'REVA_BU_RRC',YDDDH, YDLDDH, YDMDDH) ZRCS(:,:,:) = ZRCS(:,:,:) + ZTOT_RC_HONC(:,:,:)/PTSTEP - CALL BUDGET (ZRCS(:,:,:)*PRHODJ(:,:,:), 7 , 'HONC_BU_RRC',YDDDH, YDLDDH, YDMDDH) + CALL BUDGET_DDH (ZRCS(:,:,:)*PRHODJ(:,:,:), 7 , 'HONC_BU_RRC',YDDDH, YDLDDH, YDMDDH) ZRCS(:,:,:) = ZRCS(:,:,:) + ZTOT_RC_IMLT(:,:,:)/PTSTEP - CALL BUDGET (ZRCS(:,:,:)*PRHODJ(:,:,:), 7 , 'IMLT_BU_RRC',YDDDH, YDLDDH, YDMDDH) + CALL BUDGET_DDH (ZRCS(:,:,:)*PRHODJ(:,:,:), 7 , 'IMLT_BU_RRC',YDDDH, YDLDDH, YDMDDH) ZRCS(:,:,:) = ZRCS(:,:,:) + ZTOT_RC_BERFI(:,:,:)/PTSTEP - CALL BUDGET (ZRCS(:,:,:)*PRHODJ(:,:,:), 7 , 'BERFI_BU_RRC',YDDDH, YDLDDH, YDMDDH) + CALL BUDGET_DDH (ZRCS(:,:,:)*PRHODJ(:,:,:), 7 , 'BERFI_BU_RRC',YDDDH, YDLDDH, YDMDDH) ZRCS(:,:,:) = ZRCS(:,:,:) + ZTOT_RC_RIM(:,:,:)/PTSTEP - CALL BUDGET (ZRCS(:,:,:)*PRHODJ(:,:,:), 7 , 'RIM_BU_RRC',YDDDH, YDLDDH, YDMDDH) + CALL BUDGET_DDH (ZRCS(:,:,:)*PRHODJ(:,:,:), 7 , 'RIM_BU_RRC',YDDDH, YDLDDH, YDMDDH) ZRCS(:,:,:) = ZRCS(:,:,:) + ZTOT_RC_WETG(:,:,:)/PTSTEP - CALL BUDGET (ZRCS(:,:,:)*PRHODJ(:,:,:), 7 , 'WETG_BU_RRC',YDDDH, YDLDDH, YDMDDH) + CALL BUDGET_DDH (ZRCS(:,:,:)*PRHODJ(:,:,:), 7 , 'WETG_BU_RRC',YDDDH, YDLDDH, YDMDDH) ZRCS(:,:,:) = ZRCS(:,:,:) + ZTOT_RC_DRYG(:,:,:)/PTSTEP - CALL BUDGET (ZRCS(:,:,:)*PRHODJ(:,:,:), 7 , 'DRYG_BU_RRC',YDDDH, YDLDDH, YDMDDH) + CALL BUDGET_DDH (ZRCS(:,:,:)*PRHODJ(:,:,:), 7 , 'DRYG_BU_RRC',YDDDH, YDLDDH, YDMDDH) END IF IF (LBUDGET_RR) THEN ZRRS(:,:,:) = ZRRS(:,:,:) - ZTOT_RC_AUTO(:,:,:)/PTSTEP - CALL BUDGET (ZRRS(:,:,:)*PRHODJ(:,:,:), 8 , 'AUTO_BU_RRR',YDDDH, YDLDDH, YDMDDH) + CALL BUDGET_DDH (ZRRS(:,:,:)*PRHODJ(:,:,:), 8 , 'AUTO_BU_RRR',YDDDH, YDLDDH, YDMDDH) ZRRS(:,:,:) = ZRRS(:,:,:) - ZTOT_RC_ACCR(:,:,:)/PTSTEP - CALL BUDGET (ZRRS(:,:,:)*PRHODJ(:,:,:), 8 , 'ACCR_BU_RRR',YDDDH, YDLDDH, YDMDDH) + CALL BUDGET_DDH (ZRRS(:,:,:)*PRHODJ(:,:,:), 8 , 'ACCR_BU_RRR',YDDDH, YDLDDH, YDMDDH) ZRRS(:,:,:) = ZRRS(:,:,:) + ZTOT_RR_EVAP(:,:,:)/PTSTEP - CALL BUDGET (ZRRS(:,:,:)*PRHODJ(:,:,:), 8 , 'REVA_BU_RRR',YDDDH, YDLDDH, YDMDDH) + CALL BUDGET_DDH (ZRRS(:,:,:)*PRHODJ(:,:,:), 8 , 'REVA_BU_RRR',YDDDH, YDLDDH, YDMDDH) ZRRS(:,:,:) = ZRRS(:,:,:) + ZTOT_RR_HONR(:,:,:)/PTSTEP - CALL BUDGET (ZRRS(:,:,:)*PRHODJ(:,:,:), 8 , 'HONR_BU_RRR',YDDDH, YDLDDH, YDMDDH) + CALL BUDGET_DDH (ZRRS(:,:,:)*PRHODJ(:,:,:), 8 , 'HONR_BU_RRR',YDDDH, YDLDDH, YDMDDH) ZRRS(:,:,:) = ZRRS(:,:,:) + ZTOT_RR_ACC(:,:,:)/PTSTEP - CALL BUDGET (ZRRS(:,:,:)*PRHODJ(:,:,:), 8 , 'ACC_BU_RRR',YDDDH, YDLDDH, YDMDDH) + CALL BUDGET_DDH (ZRRS(:,:,:)*PRHODJ(:,:,:), 8 , 'ACC_BU_RRR',YDDDH, YDLDDH, YDMDDH) ZRRS(:,:,:) = ZRRS(:,:,:) + ZTOT_RR_CFRZ(:,:,:)/PTSTEP - CALL BUDGET (ZRRS(:,:,:)*PRHODJ(:,:,:), 8 , 'CFRZ_BU_RRR',YDDDH, YDLDDH, YDMDDH) + CALL BUDGET_DDH (ZRRS(:,:,:)*PRHODJ(:,:,:), 8 , 'CFRZ_BU_RRR',YDDDH, YDLDDH, YDMDDH) ZRRS(:,:,:) = ZRRS(:,:,:) + ZTOT_RR_WETG(:,:,:)/PTSTEP - CALL BUDGET (ZRRS(:,:,:)*PRHODJ(:,:,:), 8 , 'WETG_BU_RRR',YDDDH, YDLDDH, YDMDDH) + CALL BUDGET_DDH (ZRRS(:,:,:)*PRHODJ(:,:,:), 8 , 'WETG_BU_RRR',YDDDH, YDLDDH, YDMDDH) ZRRS(:,:,:) = ZRRS(:,:,:) + ZTOT_RR_DRYG(:,:,:)/PTSTEP - CALL BUDGET (ZRRS(:,:,:)*PRHODJ(:,:,:), 8 , 'DRYG_BU_RRR',YDDDH, YDLDDH, YDMDDH) + CALL BUDGET_DDH (ZRRS(:,:,:)*PRHODJ(:,:,:), 8 , 'DRYG_BU_RRR',YDDDH, YDLDDH, YDMDDH) ZRRS(:,:,:) = ZRRS(:,:,:) + ZTOT_RR_GMLT(:,:,:)/PTSTEP - CALL BUDGET (ZRRS(:,:,:)*PRHODJ(:,:,:), 8 , 'GMLT_BU_RRR',YDDDH, YDLDDH, YDMDDH) + CALL BUDGET_DDH (ZRRS(:,:,:)*PRHODJ(:,:,:), 8 , 'GMLT_BU_RRR',YDDDH, YDLDDH, YDMDDH) END IF IF (LBUDGET_RI) THEN ZRIS(:,:,:) = ZRIS(:,:,:) - ZTOT_RC_HONC(:,:,:)/PTSTEP - CALL BUDGET (ZRIS(:,:,:)*PRHODJ(:,:,:), 9 , 'HONC_BU_RRI',YDDDH, YDLDDH, YDMDDH) + CALL BUDGET_DDH (ZRIS(:,:,:)*PRHODJ(:,:,:), 9 , 'HONC_BU_RRI',YDDDH, YDLDDH, YDMDDH) ZRIS(:,:,:) = ZRIS(:,:,:) + ZTOT_RI_CNVI(:,:,:)/PTSTEP - CALL BUDGET (ZRIS(:,:,:)*PRHODJ(:,:,:), 9 , 'CNVI_BU_RRI',YDDDH, YDLDDH, YDMDDH) + CALL BUDGET_DDH (ZRIS(:,:,:)*PRHODJ(:,:,:), 9 , 'CNVI_BU_RRI',YDDDH, YDLDDH, YDMDDH) ZRIS(:,:,:) = ZRIS(:,:,:) + ZTOT_RI_CNVS(:,:,:)/PTSTEP - CALL BUDGET (ZRIS(:,:,:)*PRHODJ(:,:,:), 9 , 'CNVS_BU_RRI',YDDDH, YDLDDH, YDMDDH) + CALL BUDGET_DDH (ZRIS(:,:,:)*PRHODJ(:,:,:), 9 , 'CNVS_BU_RRI',YDDDH, YDLDDH, YDMDDH) ZRIS(:,:,:) = ZRIS(:,:,:) + ZTOT_RI_AGGS(:,:,:)/PTSTEP - CALL BUDGET (ZRIS(:,:,:)*PRHODJ(:,:,:), 9 , 'AGGS_BU_RRI',YDDDH, YDLDDH, YDMDDH) + CALL BUDGET_DDH (ZRIS(:,:,:)*PRHODJ(:,:,:), 9 , 'AGGS_BU_RRI',YDDDH, YDLDDH, YDMDDH) ZRIS(:,:,:) = ZRIS(:,:,:) - ZTOT_RC_IMLT(:,:,:)/PTSTEP - CALL BUDGET (ZRIS(:,:,:)*PRHODJ(:,:,:), 9 , 'IMLT_BU_RRI',YDDDH, YDLDDH, YDMDDH) + CALL BUDGET_DDH (ZRIS(:,:,:)*PRHODJ(:,:,:), 9 , 'IMLT_BU_RRI',YDDDH, YDLDDH, YDMDDH) ZRIS(:,:,:) = ZRIS(:,:,:) - ZTOT_RC_BERFI(:,:,:)/PTSTEP - CALL BUDGET (ZRIS(:,:,:)*PRHODJ(:,:,:), 9 , 'BERFI_BU_RRI',YDDDH, YDLDDH, YDMDDH) + CALL BUDGET_DDH (ZRIS(:,:,:)*PRHODJ(:,:,:), 9 , 'BERFI_BU_RRI',YDDDH, YDLDDH, YDMDDH) ZRIS(:,:,:) = ZRIS(:,:,:) + ZTOT_RI_HMS(:,:,:)/PTSTEP - CALL BUDGET (ZRIS(:,:,:)*PRHODJ(:,:,:), 9 , 'HMS_BU_RRI',YDDDH, YDLDDH, YDMDDH) + CALL BUDGET_DDH (ZRIS(:,:,:)*PRHODJ(:,:,:), 9 , 'HMS_BU_RRI',YDDDH, YDLDDH, YDMDDH) ZRIS(:,:,:) = ZRIS(:,:,:) + ZTOT_RI_CFRZ(:,:,:)/PTSTEP - CALL BUDGET (ZRIS(:,:,:)*PRHODJ(:,:,:), 9 , 'CFRZ_BU_RRI',YDDDH, YDLDDH, YDMDDH) + CALL BUDGET_DDH (ZRIS(:,:,:)*PRHODJ(:,:,:), 9 , 'CFRZ_BU_RRI',YDDDH, YDLDDH, YDMDDH) ZRIS(:,:,:) = ZRIS(:,:,:) + ZTOT_RI_WETG(:,:,:)/PTSTEP - CALL BUDGET (ZRIS(:,:,:)*PRHODJ(:,:,:), 9 , 'WETG_BU_RRI',YDDDH, YDLDDH, YDMDDH) + CALL BUDGET_DDH (ZRIS(:,:,:)*PRHODJ(:,:,:), 9 , 'WETG_BU_RRI',YDDDH, YDLDDH, YDMDDH) ZRIS(:,:,:) = ZRIS(:,:,:) + ZTOT_RI_DRYG(:,:,:)/PTSTEP - CALL BUDGET (ZRIS(:,:,:)*PRHODJ(:,:,:), 9 , 'DRYG_BU_RRI',YDDDH, YDLDDH, YDMDDH) + CALL BUDGET_DDH (ZRIS(:,:,:)*PRHODJ(:,:,:), 9 , 'DRYG_BU_RRI',YDDDH, YDLDDH, YDMDDH) ZRIS(:,:,:) = ZRIS(:,:,:) + ZTOT_RI_HMG(:,:,:)/PTSTEP - CALL BUDGET (ZRIS(:,:,:)*PRHODJ(:,:,:), 9 , 'HMG_BU_RRI',YDDDH, YDLDDH, YDMDDH) + CALL BUDGET_DDH (ZRIS(:,:,:)*PRHODJ(:,:,:), 9 , 'HMG_BU_RRI',YDDDH, YDLDDH, YDMDDH) END IF IF (LBUDGET_RS) THEN ZRSS(:,:,:) = ZRSS(:,:,:) - ZTOT_RI_CNVI(:,:,:)/PTSTEP - CALL BUDGET (ZRSS(:,:,:)*PRHODJ(:,:,:), 10 , 'CNVI_BU_RRS',YDDDH, YDLDDH, YDMDDH) + CALL BUDGET_DDH (ZRSS(:,:,:)*PRHODJ(:,:,:), 10 , 'CNVI_BU_RRS',YDDDH, YDLDDH, YDMDDH) ZRSS(:,:,:) = ZRSS(:,:,:) + ZTOT_RS_DEPS(:,:,:)/PTSTEP - CALL BUDGET (ZRSS(:,:,:)*PRHODJ(:,:,:), 10 , 'DEPS_BU_RRS',YDDDH, YDLDDH, YDMDDH) + CALL BUDGET_DDH (ZRSS(:,:,:)*PRHODJ(:,:,:), 10 , 'DEPS_BU_RRS',YDDDH, YDLDDH, YDMDDH) ZRSS(:,:,:) = ZRSS(:,:,:) - ZTOT_RI_CNVS(:,:,:)/PTSTEP - CALL BUDGET (ZRSS(:,:,:)*PRHODJ(:,:,:), 10 , 'CNVS_BU_RRS',YDDDH, YDLDDH, YDMDDH) + CALL BUDGET_DDH (ZRSS(:,:,:)*PRHODJ(:,:,:), 10 , 'CNVS_BU_RRS',YDDDH, YDLDDH, YDMDDH) ZRSS(:,:,:) = ZRSS(:,:,:) - ZTOT_RI_AGGS(:,:,:)/PTSTEP - CALL BUDGET (ZRSS(:,:,:)*PRHODJ(:,:,:), 10 , 'AGGS_BU_RRS',YDDDH, YDLDDH, YDMDDH) + CALL BUDGET_DDH (ZRSS(:,:,:)*PRHODJ(:,:,:), 10 , 'AGGS_BU_RRS',YDDDH, YDLDDH, YDMDDH) ZRSS(:,:,:) = ZRSS(:,:,:) + ZTOT_RS_RIM(:,:,:)/PTSTEP - CALL BUDGET (ZRSS(:,:,:)*PRHODJ(:,:,:), 10 , 'RIM_BU_RRS',YDDDH, YDLDDH, YDMDDH) + CALL BUDGET_DDH (ZRSS(:,:,:)*PRHODJ(:,:,:), 10 , 'RIM_BU_RRS',YDDDH, YDLDDH, YDMDDH) ZRSS(:,:,:) = ZRSS(:,:,:) + ZTOT_RS_HMS(:,:,:)/PTSTEP - CALL BUDGET (ZRSS(:,:,:)*PRHODJ(:,:,:), 10 , 'HMS_BU_RRS',YDDDH, YDLDDH, YDMDDH) + CALL BUDGET_DDH (ZRSS(:,:,:)*PRHODJ(:,:,:), 10 , 'HMS_BU_RRS',YDDDH, YDLDDH, YDMDDH) ZRSS(:,:,:) = ZRSS(:,:,:) + ZTOT_RS_ACC(:,:,:)/PTSTEP - CALL BUDGET (ZRSS(:,:,:)*PRHODJ(:,:,:), 10 , 'ACC_BU_RRS',YDDDH, YDLDDH, YDMDDH) + CALL BUDGET_DDH (ZRSS(:,:,:)*PRHODJ(:,:,:), 10 , 'ACC_BU_RRS',YDDDH, YDLDDH, YDMDDH) ZRSS(:,:,:) = ZRSS(:,:,:) + ZTOT_RS_CMEL(:,:,:)/PTSTEP - CALL BUDGET (ZRSS(:,:,:)*PRHODJ(:,:,:), 10 , 'CMEL_BU_RRS',YDDDH, YDLDDH, YDMDDH) + CALL BUDGET_DDH (ZRSS(:,:,:)*PRHODJ(:,:,:), 10 , 'CMEL_BU_RRS',YDDDH, YDLDDH, YDMDDH) ZRSS(:,:,:) = ZRSS(:,:,:) + ZTOT_RS_WETG(:,:,:)/PTSTEP - CALL BUDGET (ZRSS(:,:,:)*PRHODJ(:,:,:), 10 , 'WETG_BU_RRS',YDDDH, YDLDDH, YDMDDH) + CALL BUDGET_DDH (ZRSS(:,:,:)*PRHODJ(:,:,:), 10 , 'WETG_BU_RRS',YDDDH, YDLDDH, YDMDDH) ZRSS(:,:,:) = ZRSS(:,:,:) + ZTOT_RS_DRYG(:,:,:)/PTSTEP - CALL BUDGET (ZRSS(:,:,:)*PRHODJ(:,:,:), 10 , 'DRYG_BU_RRS',YDDDH, YDLDDH, YDMDDH) + CALL BUDGET_DDH (ZRSS(:,:,:)*PRHODJ(:,:,:), 10 , 'DRYG_BU_RRS',YDDDH, YDLDDH, YDMDDH) END IF IF (LBUDGET_RG) THEN ZRGS(:,:,:) = ZRGS(:,:,:) - ZTOT_RR_HONR(:,:,:)/PTSTEP - CALL BUDGET (ZRGS(:,:,:)*PRHODJ(:,:,:), 11 , 'HONR_BU_RRG',YDDDH, YDLDDH, YDMDDH) + CALL BUDGET_DDH (ZRGS(:,:,:)*PRHODJ(:,:,:), 11 , 'HONR_BU_RRG',YDDDH, YDLDDH, YDMDDH) ZRGS(:,:,:) = ZRGS(:,:,:) + ZTOT_RG_DEPG(:,:,:)/PTSTEP - CALL BUDGET (ZRGS(:,:,:)*PRHODJ(:,:,:), 11 , 'DEPG_BU_RRG',YDDDH, YDLDDH, YDMDDH) + CALL BUDGET_DDH (ZRGS(:,:,:)*PRHODJ(:,:,:), 11 , 'DEPG_BU_RRG',YDDDH, YDLDDH, YDMDDH) ZRGS(:,:,:) = ZRGS(:,:,:) + ZTOT_RG_RIM(:,:,:)/PTSTEP - CALL BUDGET (ZRGS(:,:,:)*PRHODJ(:,:,:), 11 , 'RIM_BU_RRG',YDDDH, YDLDDH, YDMDDH) + CALL BUDGET_DDH (ZRGS(:,:,:)*PRHODJ(:,:,:), 11 , 'RIM_BU_RRG',YDDDH, YDLDDH, YDMDDH) ZRGS(:,:,:) = ZRGS(:,:,:) + ZTOT_RG_ACC(:,:,:)/PTSTEP - CALL BUDGET (ZRGS(:,:,:)*PRHODJ(:,:,:), 11 , 'ACC_BU_RRG',YDDDH, YDLDDH, YDMDDH) + CALL BUDGET_DDH (ZRGS(:,:,:)*PRHODJ(:,:,:), 11 , 'ACC_BU_RRG',YDDDH, YDLDDH, YDMDDH) ZRGS(:,:,:) = ZRGS(:,:,:) - ZTOT_RS_CMEL(:,:,:)/PTSTEP - CALL BUDGET (ZRGS(:,:,:)*PRHODJ(:,:,:), 11 , 'CMEL_BU_RRG',YDDDH, YDLDDH, YDMDDH) + CALL BUDGET_DDH (ZRGS(:,:,:)*PRHODJ(:,:,:), 11 , 'CMEL_BU_RRG',YDDDH, YDLDDH, YDMDDH) ZRGS(:,:,:) = ZRGS(:,:,:) - ZTOT_RR_CFRZ(:,:,:)/PTSTEP - ZTOT_RI_CFRZ(:,:,:)/PTSTEP - CALL BUDGET (ZRGS(:,:,:)*PRHODJ(:,:,:), 11 , 'CFRZ_BU_RRG',YDDDH, YDLDDH, YDMDDH) + CALL BUDGET_DDH (ZRGS(:,:,:)*PRHODJ(:,:,:), 11 , 'CFRZ_BU_RRG',YDDDH, YDLDDH, YDMDDH) ZRGS(:,:,:) = ZRGS(:,:,:) + ZTOT_RG_WETG(:,:,:)/PTSTEP - CALL BUDGET (ZRGS(:,:,:)*PRHODJ(:,:,:), 11 , 'WETG_BU_RRG',YDDDH, YDLDDH, YDMDDH) + CALL BUDGET_DDH (ZRGS(:,:,:)*PRHODJ(:,:,:), 11 , 'WETG_BU_RRG',YDDDH, YDLDDH, YDMDDH) ZRGS(:,:,:) = ZRGS(:,:,:) + ZTOT_RG_DRYG(:,:,:)/PTSTEP - CALL BUDGET (ZRGS(:,:,:)*PRHODJ(:,:,:), 11 , 'DRYG_BU_RRG',YDDDH, YDLDDH, YDMDDH) + CALL BUDGET_DDH (ZRGS(:,:,:)*PRHODJ(:,:,:), 11 , 'DRYG_BU_RRG',YDDDH, YDLDDH, YDMDDH) ZRGS(:,:,:) = ZRGS(:,:,:) + ZTOT_RG_HMG(:,:,:)/PTSTEP - CALL BUDGET (ZRGS(:,:,:)*PRHODJ(:,:,:), 11 , 'HMG_BU_RRG',YDDDH, YDLDDH, YDMDDH) + CALL BUDGET_DDH (ZRGS(:,:,:)*PRHODJ(:,:,:), 11 , 'HMG_BU_RRG',YDDDH, YDLDDH, YDMDDH) ZRGS(:,:,:) = ZRGS(:,:,:) - ZTOT_RR_GMLT(:,:,:)/PTSTEP - CALL BUDGET (ZRGS(:,:,:)*PRHODJ(:,:,:), 11 , 'GMLT_BU_RRG',YDDDH, YDLDDH, YDMDDH) + CALL BUDGET_DDH (ZRGS(:,:,:)*PRHODJ(:,:,:), 11 , 'GMLT_BU_RRG',YDDDH, YDLDDH, YDMDDH) END IF IF (LBUDGET_RH) THEN ZRHS(:,:,:) = ZRHS(:,:,:) + ZTOT_RH_WETG(:,:,:)/PTSTEP - CALL BUDGET (ZRHS(:,:,:)*PRHODJ(:,:,:), 12 , 'WETG_BU_RRH',YDDDH, YDLDDH, YDMDDH) + CALL BUDGET_DDH (ZRHS(:,:,:)*PRHODJ(:,:,:), 12 , 'WETG_BU_RRH',YDDDH, YDLDDH, YDMDDH) END IF IF (LBUDGET_SV) THEN @@ -1718,71 +1718,71 @@ IF(LBU_ENABLE) THEN ! Cloud droplets ! ZCCS(:,:,:) = ZCCS(:,:,:) + ZTOT_CC_SELF(:,:,:)/PTSTEP - CALL BUDGET (ZCCS(:,:,:)*PRHODJ(:,:,:), 12+NSV_LIMA_NC , 'SELF_BU_RSV',YDDDH, YDLDDH, YDMDDH) + CALL BUDGET_DDH (ZCCS(:,:,:)*PRHODJ(:,:,:), 12+NSV_LIMA_NC , 'SELF_BU_RSV',YDDDH, YDLDDH, YDMDDH) ZCCS(:,:,:) = ZCCS(:,:,:) + ZTOT_CC_AUTO(:,:,:)/PTSTEP - CALL BUDGET (ZCCS(:,:,:)*PRHODJ(:,:,:), 12+NSV_LIMA_NC , 'AUTO_BU_RSV',YDDDH, YDLDDH, YDMDDH) + CALL BUDGET_DDH (ZCCS(:,:,:)*PRHODJ(:,:,:), 12+NSV_LIMA_NC , 'AUTO_BU_RSV',YDDDH, YDLDDH, YDMDDH) ZCCS(:,:,:) = ZCCS(:,:,:) + ZTOT_CC_ACCR(:,:,:)/PTSTEP - CALL BUDGET (ZCCS(:,:,:)*PRHODJ(:,:,:), 12+NSV_LIMA_NC , 'ACCR_BU_RSV',YDDDH, YDLDDH, YDMDDH) + CALL BUDGET_DDH (ZCCS(:,:,:)*PRHODJ(:,:,:), 12+NSV_LIMA_NC , 'ACCR_BU_RSV',YDDDH, YDLDDH, YDMDDH) ! impact of rain evap !!!!!! ZCCS(:,:,:) = ZCCS(:,:,:) - CALL BUDGET (ZCCS(:,:,:)*PRHODJ(:,:,:), 12+NSV_LIMA_NC , 'REVA_BU_RSV',YDDDH, YDLDDH, YDMDDH) + CALL BUDGET_DDH (ZCCS(:,:,:)*PRHODJ(:,:,:), 12+NSV_LIMA_NC , 'REVA_BU_RSV',YDDDH, YDLDDH, YDMDDH) ZCCS(:,:,:) = ZCCS(:,:,:) + ZTOT_CC_HONC(:,:,:)/PTSTEP - CALL BUDGET (ZCCS(:,:,:)*PRHODJ(:,:,:), 12+NSV_LIMA_NC , 'HONC_BU_RSV',YDDDH, YDLDDH, YDMDDH) + CALL BUDGET_DDH (ZCCS(:,:,:)*PRHODJ(:,:,:), 12+NSV_LIMA_NC , 'HONC_BU_RSV',YDDDH, YDLDDH, YDMDDH) ZCCS(:,:,:) = ZCCS(:,:,:) + ZTOT_CC_IMLT(:,:,:)/PTSTEP - CALL BUDGET (ZCCS(:,:,:)*PRHODJ(:,:,:), 12+NSV_LIMA_NC , 'IMLT_BU_RSV',YDDDH, YDLDDH, YDMDDH) + CALL BUDGET_DDH (ZCCS(:,:,:)*PRHODJ(:,:,:), 12+NSV_LIMA_NC , 'IMLT_BU_RSV',YDDDH, YDLDDH, YDMDDH) ZCCS(:,:,:) = ZCCS(:,:,:) + ZTOT_CC_RIM(:,:,:)/PTSTEP - CALL BUDGET (ZCCS(:,:,:)*PRHODJ(:,:,:), 12+NSV_LIMA_NC , 'RIM_BU_RSV',YDDDH, YDLDDH, YDMDDH) + CALL BUDGET_DDH (ZCCS(:,:,:)*PRHODJ(:,:,:), 12+NSV_LIMA_NC , 'RIM_BU_RSV',YDDDH, YDLDDH, YDMDDH) ZCCS(:,:,:) = ZCCS(:,:,:) + ZTOT_CC_WETG(:,:,:)/PTSTEP - CALL BUDGET (ZCCS(:,:,:)*PRHODJ(:,:,:), 12+NSV_LIMA_NC , 'WETG_BU_RSV',YDDDH, YDLDDH, YDMDDH) + CALL BUDGET_DDH (ZCCS(:,:,:)*PRHODJ(:,:,:), 12+NSV_LIMA_NC , 'WETG_BU_RSV',YDDDH, YDLDDH, YDMDDH) ZCCS(:,:,:) = ZCCS(:,:,:) + ZTOT_CC_DRYG(:,:,:)/PTSTEP - CALL BUDGET (ZCCS(:,:,:)*PRHODJ(:,:,:), 12+NSV_LIMA_NC , 'DRYG_BU_RSV',YDDDH, YDLDDH, YDMDDH) + CALL BUDGET_DDH (ZCCS(:,:,:)*PRHODJ(:,:,:), 12+NSV_LIMA_NC , 'DRYG_BU_RSV',YDDDH, YDLDDH, YDMDDH) ! ! Rain drops ! ZCRS(:,:,:) = ZCRS(:,:,:) + ZTOT_CR_AUTO(:,:,:)/PTSTEP - CALL BUDGET (ZCRS(:,:,:)*PRHODJ(:,:,:), 12+NSV_LIMA_NR , 'AUTO_BU_RSV',YDDDH, YDLDDH, YDMDDH) + CALL BUDGET_DDH (ZCRS(:,:,:)*PRHODJ(:,:,:), 12+NSV_LIMA_NR , 'AUTO_BU_RSV',YDDDH, YDLDDH, YDMDDH) ZCRS(:,:,:) = ZCRS(:,:,:) + ZTOT_CR_SCBU(:,:,:)/PTSTEP - CALL BUDGET (ZCRS(:,:,:)*PRHODJ(:,:,:), 12+NSV_LIMA_NR , 'SCBU_BU_RSV',YDDDH, YDLDDH, YDMDDH) + CALL BUDGET_DDH (ZCRS(:,:,:)*PRHODJ(:,:,:), 12+NSV_LIMA_NR , 'SCBU_BU_RSV',YDDDH, YDLDDH, YDMDDH) ! Rain evaporation !!!!!!!!!!!!! ZCRS(:,:,:) = ZCRS(:,:,:) - CALL BUDGET (ZCRS(:,:,:)*PRHODJ(:,:,:), 12+NSV_LIMA_NR , 'REVA_BU_RSV',YDDDH, YDLDDH, YDMDDH) + CALL BUDGET_DDH (ZCRS(:,:,:)*PRHODJ(:,:,:), 12+NSV_LIMA_NR , 'REVA_BU_RSV',YDDDH, YDLDDH, YDMDDH) ZCRS(:,:,:) = ZCRS(:,:,:) + ZTOT_CR_BRKU(:,:,:)/PTSTEP - CALL BUDGET (ZCRS(:,:,:)*PRHODJ(:,:,:), 12+NSV_LIMA_NR , 'BRKU_BU_RSV',YDDDH, YDLDDH, YDMDDH) + CALL BUDGET_DDH (ZCRS(:,:,:)*PRHODJ(:,:,:), 12+NSV_LIMA_NR , 'BRKU_BU_RSV',YDDDH, YDLDDH, YDMDDH) ZCRS(:,:,:) = ZCRS(:,:,:) + ZTOT_CR_HONR(:,:,:)/PTSTEP - CALL BUDGET (ZCRS(:,:,:)*PRHODJ(:,:,:), 12+NSV_LIMA_NR , 'HONR_BU_RSV',YDDDH, YDLDDH, YDMDDH) + CALL BUDGET_DDH (ZCRS(:,:,:)*PRHODJ(:,:,:), 12+NSV_LIMA_NR , 'HONR_BU_RSV',YDDDH, YDLDDH, YDMDDH) ZCRS(:,:,:) = ZCRS(:,:,:) + ZTOT_CR_ACC(:,:,:)/PTSTEP - CALL BUDGET (ZCRS(:,:,:)*PRHODJ(:,:,:), 12+NSV_LIMA_NR , 'ACC_BU_RSV',YDDDH, YDLDDH, YDMDDH) + CALL BUDGET_DDH (ZCRS(:,:,:)*PRHODJ(:,:,:), 12+NSV_LIMA_NR , 'ACC_BU_RSV',YDDDH, YDLDDH, YDMDDH) ZCRS(:,:,:) = ZCRS(:,:,:) + ZTOT_CR_CFRZ(:,:,:)/PTSTEP - CALL BUDGET (ZCRS(:,:,:)*PRHODJ(:,:,:), 12+NSV_LIMA_NR , 'CFRZ_BU_RSV',YDDDH, YDLDDH, YDMDDH) + CALL BUDGET_DDH (ZCRS(:,:,:)*PRHODJ(:,:,:), 12+NSV_LIMA_NR , 'CFRZ_BU_RSV',YDDDH, YDLDDH, YDMDDH) ZCRS(:,:,:) = ZCRS(:,:,:) + ZTOT_CR_WETG(:,:,:)/PTSTEP - CALL BUDGET (ZCRS(:,:,:)*PRHODJ(:,:,:), 12+NSV_LIMA_NR , 'WETG_BU_RSV',YDDDH, YDLDDH, YDMDDH) + CALL BUDGET_DDH (ZCRS(:,:,:)*PRHODJ(:,:,:), 12+NSV_LIMA_NR , 'WETG_BU_RSV',YDDDH, YDLDDH, YDMDDH) ZCRS(:,:,:) = ZCRS(:,:,:) + ZTOT_CR_DRYG(:,:,:)/PTSTEP - CALL BUDGET (ZCRS(:,:,:)*PRHODJ(:,:,:), 12+NSV_LIMA_NR , 'DRYG_BU_RSV',YDDDH, YDLDDH, YDMDDH) + CALL BUDGET_DDH (ZCRS(:,:,:)*PRHODJ(:,:,:), 12+NSV_LIMA_NR , 'DRYG_BU_RSV',YDDDH, YDLDDH, YDMDDH) ZCRS(:,:,:) = ZCRS(:,:,:) + ZTOT_CR_GMLT(:,:,:)/PTSTEP - CALL BUDGET (ZCRS(:,:,:)*PRHODJ(:,:,:), 12+NSV_LIMA_NR , 'GMLT_BU_RSV',YDDDH, YDLDDH, YDMDDH) + CALL BUDGET_DDH (ZCRS(:,:,:)*PRHODJ(:,:,:), 12+NSV_LIMA_NR , 'GMLT_BU_RSV',YDDDH, YDLDDH, YDMDDH) ! ! Ice crystals ! ZCIS(:,:,:) = ZCIS(:,:,:) - ZTOT_CC_HONC(:,:,:)/PTSTEP - CALL BUDGET (ZCIS(:,:,:)*PRHODJ(:,:,:), 12+NSV_LIMA_NI , 'HONC_BU_RSV',YDDDH, YDLDDH, YDMDDH) + CALL BUDGET_DDH (ZCIS(:,:,:)*PRHODJ(:,:,:), 12+NSV_LIMA_NI , 'HONC_BU_RSV',YDDDH, YDLDDH, YDMDDH) ZCIS(:,:,:) = ZCIS(:,:,:) + ZTOT_CI_CNVI(:,:,:)/PTSTEP - CALL BUDGET (ZCIS(:,:,:)*PRHODJ(:,:,:), 12+NSV_LIMA_NI , 'CNVI_BU_RSV',YDDDH, YDLDDH, YDMDDH) + CALL BUDGET_DDH (ZCIS(:,:,:)*PRHODJ(:,:,:), 12+NSV_LIMA_NI , 'CNVI_BU_RSV',YDDDH, YDLDDH, YDMDDH) ZCIS(:,:,:) = ZCIS(:,:,:) + ZTOT_CI_CNVS(:,:,:)/PTSTEP - CALL BUDGET (ZCIS(:,:,:)*PRHODJ(:,:,:), 12+NSV_LIMA_NI , 'CNVS_BU_RSV',YDDDH, YDLDDH, YDMDDH) + CALL BUDGET_DDH (ZCIS(:,:,:)*PRHODJ(:,:,:), 12+NSV_LIMA_NI , 'CNVS_BU_RSV',YDDDH, YDLDDH, YDMDDH) ZCIS(:,:,:) = ZCIS(:,:,:) + ZTOT_CI_AGGS(:,:,:)/PTSTEP - CALL BUDGET (ZCIS(:,:,:)*PRHODJ(:,:,:), 12+NSV_LIMA_NI , 'AGGS_BU_RSV',YDDDH, YDLDDH, YDMDDH) + CALL BUDGET_DDH (ZCIS(:,:,:)*PRHODJ(:,:,:), 12+NSV_LIMA_NI , 'AGGS_BU_RSV',YDDDH, YDLDDH, YDMDDH) ZCIS(:,:,:) = ZCIS(:,:,:) - ZTOT_CC_IMLT(:,:,:)/PTSTEP - CALL BUDGET (ZCIS(:,:,:)*PRHODJ(:,:,:), 12+NSV_LIMA_NI , 'IMLT_BU_RSV',YDDDH, YDLDDH, YDMDDH) + CALL BUDGET_DDH (ZCIS(:,:,:)*PRHODJ(:,:,:), 12+NSV_LIMA_NI , 'IMLT_BU_RSV',YDDDH, YDLDDH, YDMDDH) ZCIS(:,:,:) = ZCIS(:,:,:) + ZTOT_CI_HMS(:,:,:)/PTSTEP - CALL BUDGET (ZCIS(:,:,:)*PRHODJ(:,:,:), 12+NSV_LIMA_NI , 'HMS_BU_RSV',YDDDH, YDLDDH, YDMDDH) + CALL BUDGET_DDH (ZCIS(:,:,:)*PRHODJ(:,:,:), 12+NSV_LIMA_NI , 'HMS_BU_RSV',YDDDH, YDLDDH, YDMDDH) ZCIS(:,:,:) = ZCIS(:,:,:) + ZTOT_CI_CFRZ(:,:,:)/PTSTEP - CALL BUDGET (ZCIS(:,:,:)*PRHODJ(:,:,:), 12+NSV_LIMA_NI , 'CFRZ_BU_RSV',YDDDH, YDLDDH, YDMDDH) + CALL BUDGET_DDH (ZCIS(:,:,:)*PRHODJ(:,:,:), 12+NSV_LIMA_NI , 'CFRZ_BU_RSV',YDDDH, YDLDDH, YDMDDH) ZCIS(:,:,:) = ZCIS(:,:,:) + ZTOT_CI_WETG(:,:,:)/PTSTEP - CALL BUDGET (ZCIS(:,:,:)*PRHODJ(:,:,:), 12+NSV_LIMA_NI , 'WETG_BU_RSV',YDDDH, YDLDDH, YDMDDH) + CALL BUDGET_DDH (ZCIS(:,:,:)*PRHODJ(:,:,:), 12+NSV_LIMA_NI , 'WETG_BU_RSV',YDDDH, YDLDDH, YDMDDH) ZCIS(:,:,:) = ZCIS(:,:,:) + ZTOT_CI_DRYG(:,:,:)/PTSTEP - CALL BUDGET (ZCIS(:,:,:)*PRHODJ(:,:,:), 12+NSV_LIMA_NI , 'DRYG_BU_RSV',YDDDH, YDLDDH, YDMDDH) + CALL BUDGET_DDH (ZCIS(:,:,:)*PRHODJ(:,:,:), 12+NSV_LIMA_NI , 'DRYG_BU_RSV',YDDDH, YDLDDH, YDMDDH) ZCIS(:,:,:) = ZCIS(:,:,:) + ZTOT_CI_HMG(:,:,:)/PTSTEP - CALL BUDGET (ZCIS(:,:,:)*PRHODJ(:,:,:), 12+NSV_LIMA_NI , 'HMG_BU_RSV',YDDDH, YDLDDH, YDMDDH) + CALL BUDGET_DDH (ZCIS(:,:,:)*PRHODJ(:,:,:), 12+NSV_LIMA_NI , 'HMG_BU_RSV',YDDDH, YDLDDH, YDMDDH) END IF !!$ ZTOT_RC_EVAP(I1(II),I2(II),I3(II)) = ZTOT_RC_EVAP(I1(II),I2(II),I3(II)) + Z_RC_EVAP(II) * ZMAXTIME(II) !!$ ZTOT_CC_EVAP(I1(II),I2(II),I3(II)) = ZTOT_CC_EVAP(I1(II),I2(II),I3(II)) + Z_CC_EVAP(II) * ZMAXTIME(II) diff --git a/src/arome/micro/lima_adjust.F90 b/src/arome/micro/lima_adjust.F90 index cb98be5a312bcb9e58d9fe4b2264c39aa8b3a86a..195cc8b1e7acb9caee488be28cfee2e8324cb70a 100644 --- a/src/arome/micro/lima_adjust.F90 +++ b/src/arome/micro/lima_adjust.F90 @@ -157,7 +157,7 @@ USE DDH_MIX, ONLY : TYP_DDH USE YOMLDDH, ONLY : TLDDH USE YOMMDDH, ONLY : TMDDH ! -USE MODI_BUDGET +USE MODI_BUDGET_DDH USE MODI_LIMA_FUNCTIONS ! USE MODE_FM @@ -1199,21 +1199,21 @@ END IF ! ! IF (NBUMOD==KMI .AND. LBU_ENABLE) THEN - IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:) * PRHODJ(:,:,:),4,'CEDS_BU_RTH',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RV) CALL BUDGET (PRVS(:,:,:) * PRHODJ(:,:,:),6,'CEDS_BU_RRV',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RC) CALL BUDGET (PRCS(:,:,:) * PRHODJ(:,:,:),7,'CEDS_BU_RRC',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RI) CALL BUDGET (PRIS(:,:,:) * PRHODJ(:,:,:),9,'CEDS_BU_RRI',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_TH) CALL BUDGET_DDH (PTHS(:,:,:) * PRHODJ(:,:,:),4,'CEDS_BU_RTH',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_RV) CALL BUDGET_DDH (PRVS(:,:,:) * PRHODJ(:,:,:),6,'CEDS_BU_RRV',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_RC) CALL BUDGET_DDH (PRCS(:,:,:) * PRHODJ(:,:,:),7,'CEDS_BU_RRC',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_RI) CALL BUDGET_DDH (PRIS(:,:,:) * PRHODJ(:,:,:),9,'CEDS_BU_RRI',YDDDH, YDLDDH, YDMDDH) IF (LBUDGET_SV) THEN - CALL BUDGET (PCCS(:,:,:) * PRHODJ(:,:,:),12+NSV_LIMA_NC,'CEDS_BU_RSV',YDDDH, YDLDDH, YDMDDH) ! RCC - CALL BUDGET (PCIS(:,:,:) * PRHODJ(:,:,:),12+NSV_LIMA_NI,'CEDS_BU_RSV',YDDDH, YDLDDH, YDMDDH) ! RCI + CALL BUDGET_DDH (PCCS(:,:,:) * PRHODJ(:,:,:),12+NSV_LIMA_NC,'CEDS_BU_RSV',YDDDH, YDLDDH, YDMDDH) ! RCC + CALL BUDGET_DDH (PCIS(:,:,:) * PRHODJ(:,:,:),12+NSV_LIMA_NI,'CEDS_BU_RSV',YDDDH, YDLDDH, YDMDDH) ! RCI IF (NMOD_CCN .GE. 1) THEN DO JL = 1, NMOD_CCN - CALL BUDGET (PNFS(:,:,:,JL)*PRHODJ(:,:,:),12+NSV_LIMA_CCN_FREE+JL-1,'CEDS_BU_RSV',YDDDH, YDLDDH, YDMDDH) ! RCC + CALL BUDGET_DDH (PNFS(:,:,:,JL)*PRHODJ(:,:,:),12+NSV_LIMA_CCN_FREE+JL-1,'CEDS_BU_RSV',YDDDH, YDLDDH, YDMDDH) ! RCC END DO END IF IF (NMOD_IFN .GE. 1) THEN DO JL = 1, NMOD_IFN - CALL BUDGET (PIFS(:,:,:,JL)*PRHODJ(:,:,:),12+NSV_LIMA_IFN_FREE+JL-1,'CEDS_BU_RSV',YDDDH, YDLDDH, YDMDDH) ! RCC + CALL BUDGET_DDH (PIFS(:,:,:,JL)*PRHODJ(:,:,:),12+NSV_LIMA_IFN_FREE+JL-1,'CEDS_BU_RSV',YDDDH, YDLDDH, YDMDDH) ! RCC END DO END IF END IF diff --git a/src/arome/micro/lima_ccn_hom_freezing.F90 b/src/arome/micro/lima_ccn_hom_freezing.F90 index efb24778eb0d62c0b3be96eb5e9b271f801b68ae..2b1c25c4459de6bcbed03d519bc6a3b0988117cf 100644 --- a/src/arome/micro/lima_ccn_hom_freezing.F90 +++ b/src/arome/micro/lima_ccn_hom_freezing.F90 @@ -83,7 +83,7 @@ USE MODI_LIMA_FUNCTIONS, ONLY : COUNTJV ! USE MODD_NSV USE MODD_BUDGET -USE MODI_BUDGET +USE MODI_BUDGET_DDH ! IMPLICIT NONE ! diff --git a/src/arome/micro/lima_cold.F90 b/src/arome/micro/lima_cold.F90 index e9b3a2e616ddfa550156e92bdd8e6903bbeb8f00..ff4827fda1741b219c3b234979259c54f7e86013 100644 --- a/src/arome/micro/lima_cold.F90 +++ b/src/arome/micro/lima_cold.F90 @@ -124,7 +124,7 @@ USE MODD_NSV USE MODD_PARAM_LIMA ! USE MODD_BUDGET -USE MODI_BUDGET +USE MODI_BUDGET_DDH ! USE MODI_LIMA_COLD_SEDIMENTATION USE MODI_LIMA_MEYERS @@ -331,12 +331,12 @@ CALL LIMA_COLD_SEDIMENTATION (OSEDI, KSPLITG, PTSTEP, KMI, & PINPRH ) IF (LBU_ENABLE) THEN IF (LBUDGET_RI .AND. OSEDI) & - CALL BUDGET (PRIS(:,:,:)*PRHODJ(:,:,:),9 ,'SEDI_BU_RRI',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RS) CALL BUDGET (PRSS(:,:,:)*PRHODJ(:,:,:),10 ,'SEDI_BU_RRS',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RG) CALL BUDGET (PRGS(:,:,:)*PRHODJ(:,:,:),11 ,'SEDI_BU_RRG',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RH) CALL BUDGET (PRHS(:,:,:)*PRHODJ(:,:,:),12 ,'SEDI_BU_RRH',YDDDH, YDLDDH, YDMDDH) + CALL BUDGET_DDH (PRIS(:,:,:)*PRHODJ(:,:,:),9 ,'SEDI_BU_RRI',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_RS) CALL BUDGET_DDH (PRSS(:,:,:)*PRHODJ(:,:,:),10 ,'SEDI_BU_RRS',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_RG) CALL BUDGET_DDH (PRGS(:,:,:)*PRHODJ(:,:,:),11 ,'SEDI_BU_RRG',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_RH) CALL BUDGET_DDH (PRHS(:,:,:)*PRHODJ(:,:,:),12 ,'SEDI_BU_RRH',YDDDH, YDLDDH, YDMDDH) IF (LBUDGET_SV) THEN - IF (OSEDI) CALL BUDGET (PCIS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_NI,'SEDI_BU_RSV',YDDDH, YDLDDH, YDMDDH) ! RCI + IF (OSEDI) CALL BUDGET_DDH (PCIS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_NI,'SEDI_BU_RSV',YDDDH, YDLDDH, YDMDDH) ! RCI END IF END IF !------------------------------------------------------------------------------- diff --git a/src/arome/micro/lima_cold_hom_nucl.F90 b/src/arome/micro/lima_cold_hom_nucl.F90 index c8e2775e04e3940c05195eccc14a61e0db417095..74d950fa1c55dbfb07cf2b3155b00b600fcade1f 100644 --- a/src/arome/micro/lima_cold_hom_nucl.F90 +++ b/src/arome/micro/lima_cold_hom_nucl.F90 @@ -126,7 +126,7 @@ USE YOMMDDH, ONLY : TMDDH ! USE MODD_NSV USE MODD_BUDGET -USE MODI_BUDGET +USE MODI_BUDGET_DDH ! IMPLICIT NONE ! @@ -468,24 +468,24 @@ IF (INEGT.GT.0) THEN ! ! Budget storage IF (NBUMOD==KMI .AND. LBU_ENABLE .AND. OHHONI) THEN - IF (LBUDGET_TH) CALL BUDGET ( & + IF (LBUDGET_TH) CALL BUDGET_DDH ( & UNPACK(ZTHS(:),MASK=GNEGT(:,:,:),FIELD=PTHS)*PRHODJ(:,:,:),& 4,'HONH_BU_RTH',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RV) CALL BUDGET ( & + IF (LBUDGET_RV) CALL BUDGET_DDH ( & UNPACK(ZRVS(:),MASK=GNEGT(:,:,:),FIELD=PRVS)*PRHODJ(:,:,:),& 6,'HONH_BU_RRV',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RI) CALL BUDGET ( & + IF (LBUDGET_RI) CALL BUDGET_DDH ( & UNPACK(ZRIS(:),MASK=GNEGT(:,:,:),FIELD=PRIS)*PRHODJ(:,:,:),& 9,'HONH_BU_RRI',YDDDH, YDLDDH, YDMDDH) IF (LBUDGET_SV) THEN - CALL BUDGET ( UNPACK(ZCIS(:),MASK=GNEGT(:,:,:),FIELD=PCIS)*PRHODJ(:,:,:),& + CALL BUDGET_DDH ( UNPACK(ZCIS(:),MASK=GNEGT(:,:,:),FIELD=PCIS)*PRHODJ(:,:,:),& 12+NSV_LIMA_NI,'HONH_BU_RSV',YDDDH, YDLDDH, YDMDDH) ! RCI IF (NMOD_CCN.GE.1) THEN DO JL=1, NMOD_CCN - CALL BUDGET ( UNPACK(ZNFS(:,JL),MASK=GNEGT(:,:,:),FIELD=PNFS(:,:,:,JL))*PRHODJ(:,:,:),& + CALL BUDGET_DDH ( UNPACK(ZNFS(:,JL),MASK=GNEGT(:,:,:),FIELD=PNFS(:,:,:,JL))*PRHODJ(:,:,:),& 12+NSV_LIMA_CCN_FREE+JL-1,'HONH_BU_RSV',YDDDH, YDLDDH, YDMDDH) END DO - CALL BUDGET ( UNPACK(ZZNHS(:),MASK=GNEGT(:,:,:),FIELD=ZNHS(:,:,:))*PRHODJ(:,:,:),& + CALL BUDGET_DDH ( UNPACK(ZZNHS(:),MASK=GNEGT(:,:,:),FIELD=ZNHS(:,:,:))*PRHODJ(:,:,:),& 12+NSV_LIMA_HOM_HAZE,'HONH_BU_RSV',YDDDH, YDLDDH, YDMDDH) END IF @@ -526,19 +526,19 @@ IF (INEGT.GT.0) THEN ! ! Budget storage IF (NBUMOD==KMI .AND. LBU_ENABLE) THEN - IF (LBUDGET_TH) CALL BUDGET ( & + IF (LBUDGET_TH) CALL BUDGET_DDH ( & UNPACK(ZTHS(:),MASK=GNEGT(:,:,:),FIELD=PTHS)*PRHODJ(:,:,:),& 4,'HONC_BU_RTH',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RC) CALL BUDGET ( & + IF (LBUDGET_RC) CALL BUDGET_DDH ( & UNPACK(ZRCS(:),MASK=GNEGT(:,:,:),FIELD=PRCS)*PRHODJ(:,:,:),& 7,'HONC_BU_RRC',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RI) CALL BUDGET ( & + IF (LBUDGET_RI) CALL BUDGET_DDH ( & UNPACK(ZRIS(:),MASK=GNEGT(:,:,:),FIELD=PRIS)*PRHODJ(:,:,:),& 9,'HONC_BU_RRI',YDDDH, YDLDDH, YDMDDH) IF (LBUDGET_SV) THEN - CALL BUDGET ( UNPACK(ZCCS(:),MASK=GNEGT(:,:,:),FIELD=PCCS)*PRHODJ(:,:,:),& + CALL BUDGET_DDH ( UNPACK(ZCCS(:),MASK=GNEGT(:,:,:),FIELD=PCCS)*PRHODJ(:,:,:),& 12+NSV_LIMA_NC,'HONC_BU_RSV',YDDDH, YDLDDH, YDMDDH) - CALL BUDGET ( UNPACK(ZCIS(:),MASK=GNEGT(:,:,:),FIELD=PCIS)*PRHODJ(:,:,:),& + CALL BUDGET_DDH ( UNPACK(ZCIS(:),MASK=GNEGT(:,:,:),FIELD=PCIS)*PRHODJ(:,:,:),& 12+NSV_LIMA_NI,'HONC_BU_RSV',YDDDH, YDLDDH, YDMDDH) END IF END IF @@ -565,17 +565,17 @@ IF (INEGT.GT.0) THEN ! ! Budget storage IF (NBUMOD==KMI .AND. LBU_ENABLE) THEN - IF (LBUDGET_TH) CALL BUDGET ( & + IF (LBUDGET_TH) CALL BUDGET_DDH ( & UNPACK(ZTHS(:),MASK=GNEGT(:,:,:),FIELD=PTHS)*PRHODJ(:,:,:),& 4,'HONR_BU_RTH',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RR) CALL BUDGET ( & + IF (LBUDGET_RR) CALL BUDGET_DDH ( & UNPACK(ZRRS(:),MASK=GNEGT(:,:,:),FIELD=PRRS)*PRHODJ(:,:,:),& 8,'HONR_BU_RRR',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RG) CALL BUDGET ( & + IF (LBUDGET_RG) CALL BUDGET_DDH ( & UNPACK(ZRGS(:),MASK=GNEGT(:,:,:),FIELD=PRGS)*PRHODJ(:,:,:),& 11,'HONR_BU_RRG',YDDDH, YDLDDH, YDMDDH) IF (LBUDGET_SV) THEN - CALL BUDGET ( UNPACK(ZCRS(:),MASK=GNEGT(:,:,:),FIELD=PCRS)*PRHODJ(:,:,:),& + CALL BUDGET_DDH ( UNPACK(ZCRS(:),MASK=GNEGT(:,:,:),FIELD=PCRS)*PRHODJ(:,:,:),& 12+NSV_LIMA_NR,'HONR_BU_RSV',YDDDH, YDLDDH, YDMDDH) END IF END IF @@ -656,31 +656,31 @@ ELSE IF (NBUMOD==KMI .AND. LBU_ENABLE) THEN IF ( OHHONI ) THEN - IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)*PRHODJ(:,:,:),4,'HONH_BU_RTH',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RV) CALL BUDGET (PRVS(:,:,:)*PRHODJ(:,:,:),6,'HONH_BU_RRV',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RI) CALL BUDGET (PRIS(:,:,:)*PRHODJ(:,:,:),9,'HONH_BU_RRI',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_TH) CALL BUDGET_DDH (PTHS(:,:,:)*PRHODJ(:,:,:),4,'HONH_BU_RTH',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_RV) CALL BUDGET_DDH (PRVS(:,:,:)*PRHODJ(:,:,:),6,'HONH_BU_RRV',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_RI) CALL BUDGET_DDH (PRIS(:,:,:)*PRHODJ(:,:,:),9,'HONH_BU_RRI',YDDDH, YDLDDH, YDMDDH) IF (LBUDGET_SV) THEN - CALL BUDGET (PCIS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_NI,'HONH_BU_RSV',YDDDH, YDLDDH, YDMDDH) + CALL BUDGET_DDH (PCIS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_NI,'HONH_BU_RSV',YDDDH, YDLDDH, YDMDDH) IF (NMOD_CCN.GE.1) THEN DO JL=1, NMOD_CCN - CALL BUDGET ( UNPACK(ZNFS(:,JL),MASK=GNEGT(:,:,:),FIELD=PNFS(:,:,:,JL))*PRHODJ(:,:,:),& + CALL BUDGET_DDH ( UNPACK(ZNFS(:,JL),MASK=GNEGT(:,:,:),FIELD=PNFS(:,:,:,JL))*PRHODJ(:,:,:),& & 12+NSV_LIMA_CCN_FREE+JL-1,'HONH_BU_RSV',YDDDH, YDLDDH, YDMDDH) END DO - CALL BUDGET (ZNHS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_HOM_HAZE,'HONH_BU_RSV',YDDDH, YDLDDH, YDMDDH) + CALL BUDGET_DDH (ZNHS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_HOM_HAZE,'HONH_BU_RSV',YDDDH, YDLDDH, YDMDDH) END IF END IF END IF - IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)*PRHODJ(:,:,:),4,'HONC_BU_RTH',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RC) CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:),7,'HONC_BU_RRC',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RI) CALL BUDGET (PRIS(:,:,:)*PRHODJ(:,:,:),9,'HONC_BU_RRI',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_TH) CALL BUDGET_DDH (PTHS(:,:,:)*PRHODJ(:,:,:),4,'HONC_BU_RTH',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_RC) CALL BUDGET_DDH (PRCS(:,:,:)*PRHODJ(:,:,:),7,'HONC_BU_RRC',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_RI) CALL BUDGET_DDH (PRIS(:,:,:)*PRHODJ(:,:,:),9,'HONC_BU_RRI',YDDDH, YDLDDH, YDMDDH) IF (LBUDGET_SV) THEN - CALL BUDGET (PCCS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_NC,'HONC_BU_RSV',YDDDH, YDLDDH, YDMDDH) - CALL BUDGET (PCIS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_NI,'HONC_BU_RSV',YDDDH, YDLDDH, YDMDDH) + CALL BUDGET_DDH (PCCS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_NC,'HONC_BU_RSV',YDDDH, YDLDDH, YDMDDH) + CALL BUDGET_DDH (PCIS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_NI,'HONC_BU_RSV',YDDDH, YDLDDH, YDMDDH) END IF - IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)*PRHODJ(:,:,:),4,'HONR_BU_RTH',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:)*PRHODJ(:,:,:),8,'HONR_BU_RRR',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RG) CALL BUDGET (PRGS(:,:,:)*PRHODJ(:,:,:),11,'HONR_BU_RRG',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_SV) CALL BUDGET (PCRS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_NR,'HONR_BU_RSV',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_TH) CALL BUDGET_DDH (PTHS(:,:,:)*PRHODJ(:,:,:),4,'HONR_BU_RTH',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_RR) CALL BUDGET_DDH (PRRS(:,:,:)*PRHODJ(:,:,:),8,'HONR_BU_RRR',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_RG) CALL BUDGET_DDH (PRGS(:,:,:)*PRHODJ(:,:,:),11,'HONR_BU_RRG',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_SV) CALL BUDGET_DDH (PCRS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_NR,'HONR_BU_RSV',YDDDH, YDLDDH, YDMDDH) diff --git a/src/arome/micro/lima_cold_slow_processes.F90 b/src/arome/micro/lima_cold_slow_processes.F90 index 3792940c327c6936163560a9dcc74e4bd2b31ffa..dda09872cbf3ef68cd4e09fac8e9bf801c845346 100644 --- a/src/arome/micro/lima_cold_slow_processes.F90 +++ b/src/arome/micro/lima_cold_slow_processes.F90 @@ -112,7 +112,7 @@ USE MODD_PARAM_LIMA_COLD, ONLY : XLBI, XLBEXI, XLBS, XLBEXS, XBI, XCXS, XCCS, & USE MODI_LIMA_FUNCTIONS, ONLY : COUNTJV USE MODD_BUDGET USE MODD_NSV, ONLY : NSV_LIMA_NI -USE MODI_BUDGET +USE MODI_BUDGET_DDH USE DDH_MIX, ONLY : TYP_DDH USE YOMLDDH, ONLY : TLDDH @@ -379,13 +379,13 @@ IF( IMICRO >= 1 ) THEN ! ! Budget storage IF (NBUMOD==KMI .AND. LBU_ENABLE) THEN - IF (LBUDGET_RI) CALL BUDGET ( & + IF (LBUDGET_RI) CALL BUDGET_DDH ( & UNPACK(ZRIS(:),MASK=GMICRO(:,:,:),FIELD=PRIS)*PRHODJ(:,:,:),& 9,'CNVI_BU_RRI',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RS) CALL BUDGET ( & + IF (LBUDGET_RS) CALL BUDGET_DDH ( & UNPACK(ZRSS(:),MASK=GMICRO(:,:,:),FIELD=PRSS)*PRHODJ(:,:,:),& 10,'CNVI_BU_RRS',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_SV) CALL BUDGET ( & + IF (LBUDGET_SV) CALL BUDGET_DDH ( & UNPACK(ZCIS(:),MASK=GMICRO(:,:,:),FIELD=PCIS)*PRHODJ(:,:,:), & 12+NSV_LIMA_NI,'CNVI_BU_RSV',YDDDH, YDLDDH, YDMDDH) END IF @@ -410,13 +410,13 @@ IF( IMICRO >= 1 ) THEN ! ! Budget storage IF (NBUMOD==KMI .AND. LBU_ENABLE) THEN - IF (LBUDGET_TH) CALL BUDGET ( & + IF (LBUDGET_TH) CALL BUDGET_DDH ( & UNPACK(ZTHS(:),MASK=GMICRO(:,:,:),FIELD=PTHS)*PRHODJ(:,:,:),& 4,'DEPS_BU_RTH',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RV) CALL BUDGET ( & + IF (LBUDGET_RV) CALL BUDGET_DDH ( & UNPACK(ZRVS(:),MASK=GMICRO(:,:,:),FIELD=PRVS)*PRHODJ(:,:,:),& 6,'DEPS_BU_RRV',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RS) CALL BUDGET ( & + IF (LBUDGET_RS) CALL BUDGET_DDH ( & UNPACK(ZRSS(:),MASK=GMICRO(:,:,:),FIELD=PRSS)*PRHODJ(:,:,:),& 10,'DEPS_BU_RRS',YDDDH, YDLDDH, YDMDDH) END IF @@ -446,13 +446,13 @@ IF( IMICRO >= 1 ) THEN ! ! Budget storage IF (NBUMOD==KMI .AND. LBU_ENABLE) THEN - IF (LBUDGET_RI) CALL BUDGET ( & + IF (LBUDGET_RI) CALL BUDGET_DDH ( & UNPACK(ZRIS(:),MASK=GMICRO(:,:,:),FIELD=PRIS)*PRHODJ(:,:,:),& 9,'CNVS_BU_RRI',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RS) CALL BUDGET ( & + IF (LBUDGET_RS) CALL BUDGET_DDH ( & UNPACK(ZRSS(:),MASK=GMICRO(:,:,:),FIELD=PRSS)*PRHODJ(:,:,:),& 10,'CNVS_BU_RRS',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_SV) CALL BUDGET ( & + IF (LBUDGET_SV) CALL BUDGET_DDH ( & UNPACK(ZCIS(:),MASK=GMICRO(:,:,:),FIELD=PCIS)*PRHODJ(:,:,:), & 12+NSV_LIMA_NI,'CNVS_BU_RSV',YDDDH, YDLDDH, YDMDDH) END IF @@ -478,13 +478,13 @@ IF( IMICRO >= 1 ) THEN ! ! Budget storage IF (NBUMOD==KMI .AND. LBU_ENABLE) THEN - IF (LBUDGET_RI) CALL BUDGET ( & + IF (LBUDGET_RI) CALL BUDGET_DDH ( & UNPACK(ZRIS(:),MASK=GMICRO(:,:,:),FIELD=PRIS)*PRHODJ(:,:,:), & 9,'AGGS_BU_RRI',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RS) CALL BUDGET ( & + IF (LBUDGET_RS) CALL BUDGET_DDH ( & UNPACK(ZRSS(:),MASK=GMICRO(:,:,:),FIELD=PRSS)*PRHODJ(:,:,:), & 10,'AGGS_BU_RRS',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_SV) CALL BUDGET ( & + IF (LBUDGET_SV) CALL BUDGET_DDH ( & UNPACK(ZCIS(:),MASK=GMICRO(:,:,:),FIELD=PCIS)*PRHODJ(:,:,:), & 12+NSV_LIMA_NI,'AGGS_BU_RSV',YDDDH, YDLDDH, YDMDDH) END IF @@ -548,30 +548,30 @@ ELSE IF (NBUMOD==KMI .AND. LBU_ENABLE) THEN IF (LBUDGET_TH) THEN ZW(:,:,:) = PTHS(:,:,:)*PRHODJ(:,:,:) - CALL BUDGET (ZW,4,'DEPS_BU_RTH',YDDDH, YDLDDH, YDMDDH) + CALL BUDGET_DDH (ZW,4,'DEPS_BU_RTH',YDDDH, YDLDDH, YDMDDH) ENDIF IF (LBUDGET_RV) THEN ZW(:,:,:) = PRVS(:,:,:)*PRHODJ(:,:,:) - CALL BUDGET (ZW,6,'DEPS_BU_RRV',YDDDH, YDLDDH, YDMDDH) + CALL BUDGET_DDH (ZW,6,'DEPS_BU_RRV',YDDDH, YDLDDH, YDMDDH) ENDIF IF (LBUDGET_RI) THEN ZW(:,:,:) = PRIS(:,:,:)*PRHODJ(:,:,:) - CALL BUDGET (ZW,9,'CNVI_BU_RRI',YDDDH, YDLDDH, YDMDDH) - CALL BUDGET (ZW,9,'CNVS_BU_RRI',YDDDH, YDLDDH, YDMDDH) - CALL BUDGET (ZW,9,'AGGS_BU_RRI',YDDDH, YDLDDH, YDMDDH) + CALL BUDGET_DDH (ZW,9,'CNVI_BU_RRI',YDDDH, YDLDDH, YDMDDH) + CALL BUDGET_DDH (ZW,9,'CNVS_BU_RRI',YDDDH, YDLDDH, YDMDDH) + CALL BUDGET_DDH (ZW,9,'AGGS_BU_RRI',YDDDH, YDLDDH, YDMDDH) ENDIF IF (LBUDGET_RS) THEN ZW(:,:,:) = PRSS(:,:,:)*PRHODJ(:,:,:) - CALL BUDGET (ZW,10,'CNVI_BU_RRS',YDDDH, YDLDDH, YDMDDH) - CALL BUDGET (ZW,10,'DEPS_BU_RRS',YDDDH, YDLDDH, YDMDDH) - CALL BUDGET (ZW,10,'CNVS_BU_RRS',YDDDH, YDLDDH, YDMDDH) - CALL BUDGET (ZW,10,'AGGS_BU_RRS',YDDDH, YDLDDH, YDMDDH) + CALL BUDGET_DDH (ZW,10,'CNVI_BU_RRS',YDDDH, YDLDDH, YDMDDH) + CALL BUDGET_DDH (ZW,10,'DEPS_BU_RRS',YDDDH, YDLDDH, YDMDDH) + CALL BUDGET_DDH (ZW,10,'CNVS_BU_RRS',YDDDH, YDLDDH, YDMDDH) + CALL BUDGET_DDH (ZW,10,'AGGS_BU_RRS',YDDDH, YDLDDH, YDMDDH) ENDIF IF (LBUDGET_SV) THEN ZW(:,:,:) = PCIS(:,:,:)*PRHODJ(:,:,:) - CALL BUDGET (ZW,12+NSV_LIMA_NI,'CNVI_BU_RSV',YDDDH, YDLDDH, YDMDDH) - CALL BUDGET (ZW,12+NSV_LIMA_NI,'CNVS_BU_RSV',YDDDH, YDLDDH, YDMDDH) - CALL BUDGET (ZW,12+NSV_LIMA_NI,'AGGS_BU_RSV',YDDDH, YDLDDH, YDMDDH) + CALL BUDGET_DDH (ZW,12+NSV_LIMA_NI,'CNVI_BU_RSV',YDDDH, YDLDDH, YDMDDH) + CALL BUDGET_DDH (ZW,12+NSV_LIMA_NI,'CNVS_BU_RSV',YDDDH, YDLDDH, YDMDDH) + CALL BUDGET_DDH (ZW,12+NSV_LIMA_NI,'AGGS_BU_RSV',YDDDH, YDLDDH, YDMDDH) ENDIF ENDIF ! diff --git a/src/arome/micro/lima_meyers.F90 b/src/arome/micro/lima_meyers.F90 index ed4e749644a524b2f810879446fa638af1f97a67..06ac11de3917f156d4506e0c2d7ff776b080c799 100644 --- a/src/arome/micro/lima_meyers.F90 +++ b/src/arome/micro/lima_meyers.F90 @@ -126,7 +126,7 @@ USE MODD_CST USE MODD_PARAM_LIMA USE MODD_PARAM_LIMA_COLD USE MODD_BUDGET -USE MODI_BUDGET +USE MODI_BUDGET_DDH USE MODD_NSV, ONLY : NSV_LIMA_NC, NSV_LIMA_NI ! USE DDH_MIX, ONLY : TYP_DDH @@ -357,17 +357,17 @@ IF( INEGT >= 1 ) THEN ! ! Budget storage IF (NBUMOD==KMI .AND. LBU_ENABLE) THEN - IF (LBUDGET_TH) CALL BUDGET ( & + IF (LBUDGET_TH) CALL BUDGET_DDH ( & UNPACK(ZTHS(:),MASK=GNEGT(:,:,:),FIELD=PTHS)*PRHODJ(:,:,:),& 4,'HIND_BU_RTH',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RV) CALL BUDGET ( & + IF (LBUDGET_RV) CALL BUDGET_DDH ( & UNPACK(ZRVS(:),MASK=GNEGT(:,:,:),FIELD=PRVS)*PRHODJ(:,:,:),& 6,'HIND_BU_RRV',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RI) CALL BUDGET ( & + IF (LBUDGET_RI) CALL BUDGET_DDH ( & UNPACK(ZRIS(:),MASK=GNEGT(:,:,:),FIELD=PRIS)*PRHODJ(:,:,:),& 9,'HIND_BU_RRI',YDDDH, YDLDDH, YDMDDH) IF (LBUDGET_SV) THEN - CALL BUDGET ( UNPACK(ZCIS(:),MASK=GNEGT(:,:,:),FIELD=PCIS)*PRHODJ(:,:,:),& + CALL BUDGET_DDH ( UNPACK(ZCIS(:),MASK=GNEGT(:,:,:),FIELD=PCIS)*PRHODJ(:,:,:),& 12+NSV_LIMA_NI,'HIND_BU_RSV',YDDDH, YDLDDH, YDMDDH) END IF END IF @@ -415,12 +415,12 @@ IF( INEGT >= 1 ) THEN ! ! Budget storage IF (NBUMOD==KMI .AND. LBU_ENABLE) THEN - IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)*PRHODJ(:,:,:), 4,'HINC_BU_RTH',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RC) CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:), 7,'HINC_BU_RRC',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RI) CALL BUDGET (PRIS(:,:,:)*PRHODJ(:,:,:), 9,'HINC_BU_RRI',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_TH) CALL BUDGET_DDH (PTHS(:,:,:)*PRHODJ(:,:,:), 4,'HINC_BU_RTH',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_RC) CALL BUDGET_DDH (PRCS(:,:,:)*PRHODJ(:,:,:), 7,'HINC_BU_RRC',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_RI) CALL BUDGET_DDH (PRIS(:,:,:)*PRHODJ(:,:,:), 9,'HINC_BU_RRI',YDDDH, YDLDDH, YDMDDH) IF (LBUDGET_SV) THEN - CALL BUDGET ( PCCS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_NC,'HINC_BU_RSV',YDDDH, YDLDDH, YDMDDH) - CALL BUDGET ( PCIS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_NI,'HINC_BU_RSV',YDDDH, YDLDDH, YDMDDH) + CALL BUDGET_DDH ( PCCS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_NC,'HINC_BU_RSV',YDDDH, YDLDDH, YDMDDH) + CALL BUDGET_DDH ( PCIS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_NI,'HINC_BU_RSV',YDDDH, YDLDDH, YDMDDH) END IF END IF @@ -461,17 +461,17 @@ ELSE ! Advance the budget calls ! IF (NBUMOD==KMI .AND. LBU_ENABLE) THEN - IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)*PRHODJ(:,:,:),4,'HIND_BU_RTH',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RV) CALL BUDGET (PRVS(:,:,:)*PRHODJ(:,:,:),6,'HIND_BU_RRV',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RI) CALL BUDGET (PRIS(:,:,:)*PRHODJ(:,:,:),9,'HIND_BU_RRI',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_SV) CALL BUDGET (PCIS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_NI,'HIND_BU_RSV',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_TH) CALL BUDGET_DDH (PTHS(:,:,:)*PRHODJ(:,:,:),4,'HIND_BU_RTH',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_RV) CALL BUDGET_DDH (PRVS(:,:,:)*PRHODJ(:,:,:),6,'HIND_BU_RRV',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_RI) CALL BUDGET_DDH (PRIS(:,:,:)*PRHODJ(:,:,:),9,'HIND_BU_RRI',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_SV) CALL BUDGET_DDH (PCIS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_NI,'HIND_BU_RSV',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)*PRHODJ(:,:,:),4,'HINC_BU_RTH',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RC) CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:),7,'HINC_BU_RRC',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RI) CALL BUDGET (PRIS(:,:,:)*PRHODJ(:,:,:),9,'HINC_BU_RRI',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_TH) CALL BUDGET_DDH (PTHS(:,:,:)*PRHODJ(:,:,:),4,'HINC_BU_RTH',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_RC) CALL BUDGET_DDH (PRCS(:,:,:)*PRHODJ(:,:,:),7,'HINC_BU_RRC',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_RI) CALL BUDGET_DDH (PRIS(:,:,:)*PRHODJ(:,:,:),9,'HINC_BU_RRI',YDDDH, YDLDDH, YDMDDH) IF (LBUDGET_SV) THEN - CALL BUDGET (PCCS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_NC,'HINC_BU_RSV',YDDDH, YDLDDH, YDMDDH) - CALL BUDGET (PCIS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_NI,'HINC_BU_RSV',YDDDH, YDLDDH, YDMDDH) + CALL BUDGET_DDH (PCCS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_NC,'HINC_BU_RSV',YDDDH, YDLDDH, YDMDDH) + CALL BUDGET_DDH (PCIS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_NI,'HINC_BU_RSV',YDDDH, YDLDDH, YDMDDH) END IF END IF ! diff --git a/src/arome/micro/lima_meyers_nucleation.F90 b/src/arome/micro/lima_meyers_nucleation.F90 index 03bef71a66a4e083ddf8525fa3871968c8196232..f27af7a6b0bf2db32269a824c12e45c2bd382d1e 100644 --- a/src/arome/micro/lima_meyers_nucleation.F90 +++ b/src/arome/micro/lima_meyers_nucleation.F90 @@ -108,7 +108,7 @@ USE MODD_CST USE MODD_PARAM_LIMA USE MODD_PARAM_LIMA_COLD USE MODD_BUDGET -USE MODI_BUDGET +USE MODI_BUDGET_DDH USE MODD_NSV, ONLY : NSV_LIMA_NC, NSV_LIMA_NI ! USE MODI_LIMA_FUNCTIONS, ONLY : COUNTJV diff --git a/src/arome/micro/lima_mixed.F90 b/src/arome/micro/lima_mixed.F90 index e9d05c37085de3f3b80ea6bea06b09c2c59ef780..1e073298670d6a1748283c507a900ed5d968af18 100644 --- a/src/arome/micro/lima_mixed.F90 +++ b/src/arome/micro/lima_mixed.F90 @@ -123,7 +123,7 @@ USE MODD_PARAM_LIMA_MIXED, ONLY : XLBG, XLBEXG, XLBH, XLBEXH USE MODD_NSV ! USE MODD_BUDGET -USE MODI_BUDGET +USE MODI_BUDGET_DDH ! USE MODI_LIMA_FUNCTIONS, ONLY : COUNTJV USE MODI_LIMA_MIXED_SLOW_PROCESSES @@ -675,95 +675,95 @@ ELSE ! IF (NBUMOD==KMI .AND. LBU_ENABLE) THEN - IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)*PRHODJ(:,:,:),4,'DEPG_BU_RTH',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RV) CALL BUDGET (PRVS(:,:,:)*PRHODJ(:,:,:),6,'DEPG_BU_RRV',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RG) CALL BUDGET (PRGS(:,:,:)*PRHODJ(:,:,:),11,'DEPG_BU_RRG',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_TH) CALL BUDGET_DDH (PTHS(:,:,:)*PRHODJ(:,:,:),4,'DEPG_BU_RTH',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_RV) CALL BUDGET_DDH (PRVS(:,:,:)*PRHODJ(:,:,:),6,'DEPG_BU_RRV',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_RG) CALL BUDGET_DDH (PRGS(:,:,:)*PRHODJ(:,:,:),11,'DEPG_BU_RRG',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)*PRHODJ(:,:,:),4,'IMLT_BU_RTH',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RC) CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:),7,'IMLT_BU_RRC',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RI) CALL BUDGET (PRIS(:,:,:)*PRHODJ(:,:,:),9,'IMLT_BU_RRI',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_SV) CALL BUDGET (PCCS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_NC,'IMLT_BU_RSV',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_SV) CALL BUDGET (PCIS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_NI,'IMLT_BU_RSV',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_TH) CALL BUDGET_DDH (PTHS(:,:,:)*PRHODJ(:,:,:),4,'IMLT_BU_RTH',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_RC) CALL BUDGET_DDH (PRCS(:,:,:)*PRHODJ(:,:,:),7,'IMLT_BU_RRC',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_RI) CALL BUDGET_DDH (PRIS(:,:,:)*PRHODJ(:,:,:),9,'IMLT_BU_RRI',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_SV) CALL BUDGET_DDH (PCCS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_NC,'IMLT_BU_RSV',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_SV) CALL BUDGET_DDH (PCIS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_NI,'IMLT_BU_RSV',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)*PRHODJ(:,:,:),4,'BERFI_BU_RTH',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RC) CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:),7,'BERFI_BU_RRC',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RI) CALL BUDGET (PRIS(:,:,:)*PRHODJ(:,:,:),9,'BERFI_BU_RRI',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_TH) CALL BUDGET_DDH (PTHS(:,:,:)*PRHODJ(:,:,:),4,'BERFI_BU_RTH',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_RC) CALL BUDGET_DDH (PRCS(:,:,:)*PRHODJ(:,:,:),7,'BERFI_BU_RRC',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_RI) CALL BUDGET_DDH (PRIS(:,:,:)*PRHODJ(:,:,:),9,'BERFI_BU_RRI',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)*PRHODJ(:,:,:),4,'RIM_BU_RTH',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RC) CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:),7,'RIM_BU_RRC',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RS) CALL BUDGET (PRSS(:,:,:)*PRHODJ(:,:,:),10,'RIM_BU_RRS',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RG) CALL BUDGET (PRGS(:,:,:)*PRHODJ(:,:,:),11,'RIM_BU_RRG',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_SV) CALL BUDGET (PCCS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_NC,'RIM_BU_RSV',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_TH) CALL BUDGET_DDH (PTHS(:,:,:)*PRHODJ(:,:,:),4,'RIM_BU_RTH',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_RC) CALL BUDGET_DDH (PRCS(:,:,:)*PRHODJ(:,:,:),7,'RIM_BU_RRC',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_RS) CALL BUDGET_DDH (PRSS(:,:,:)*PRHODJ(:,:,:),10,'RIM_BU_RRS',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_RG) CALL BUDGET_DDH (PRGS(:,:,:)*PRHODJ(:,:,:),11,'RIM_BU_RRG',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_SV) CALL BUDGET_DDH (PCCS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_NC,'RIM_BU_RSV',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RI) CALL BUDGET (PRIS(:,:,:)*PRHODJ(:,:,:),9,'HMS_BU_RRI',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RS) CALL BUDGET (PRSS(:,:,:)*PRHODJ(:,:,:),10,'HMS_BU_RRS',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_SV) CALL BUDGET (PCIS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_NI,'HMS_BU_RSV',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_RI) CALL BUDGET_DDH (PRIS(:,:,:)*PRHODJ(:,:,:),9,'HMS_BU_RRI',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_RS) CALL BUDGET_DDH (PRSS(:,:,:)*PRHODJ(:,:,:),10,'HMS_BU_RRS',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_SV) CALL BUDGET_DDH (PCIS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_NI,'HMS_BU_RSV',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)*PRHODJ(:,:,:),4,'ACC_BU_RTH',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:)*PRHODJ(:,:,:),8,'ACC_BU_RRR',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RS) CALL BUDGET (PRSS(:,:,:)*PRHODJ(:,:,:),10,'ACC_BU_RRS',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RG) CALL BUDGET (PRGS(:,:,:)*PRHODJ(:,:,:),11,'ACC_BU_RRG',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_SV) CALL BUDGET (PCRS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_NR,'ACC_BU_RSV',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_TH) CALL BUDGET_DDH (PTHS(:,:,:)*PRHODJ(:,:,:),4,'ACC_BU_RTH',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_RR) CALL BUDGET_DDH (PRRS(:,:,:)*PRHODJ(:,:,:),8,'ACC_BU_RRR',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_RS) CALL BUDGET_DDH (PRSS(:,:,:)*PRHODJ(:,:,:),10,'ACC_BU_RRS',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_RG) CALL BUDGET_DDH (PRGS(:,:,:)*PRHODJ(:,:,:),11,'ACC_BU_RRG',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_SV) CALL BUDGET_DDH (PCRS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_NR,'ACC_BU_RSV',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RS) CALL BUDGET (PRSS(:,:,:)*PRHODJ(:,:,:),10,'CMEL_BU_RRS',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RG) CALL BUDGET (PRGS(:,:,:)*PRHODJ(:,:,:),11,'CMEL_BU_RRG',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_RS) CALL BUDGET_DDH (PRSS(:,:,:)*PRHODJ(:,:,:),10,'CMEL_BU_RRS',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_RG) CALL BUDGET_DDH (PRGS(:,:,:)*PRHODJ(:,:,:),11,'CMEL_BU_RRG',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)*PRHODJ(:,:,:),4,'CFRZ_BU_RTH',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:)*PRHODJ(:,:,:),8,'CFRZ_BU_RRR',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RI) CALL BUDGET (PRIS(:,:,:)*PRHODJ(:,:,:),9,'CFRZ_BU_RRI',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RG) CALL BUDGET (PRGS(:,:,:)*PRHODJ(:,:,:),11,'CFRZ_BU_RRG',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_SV) CALL BUDGET (PCRS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_NR,'CFRZ_BU_RSV',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_SV) CALL BUDGET (PCIS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_NI,'CFRZ_BU_RSV',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_TH) CALL BUDGET_DDH (PTHS(:,:,:)*PRHODJ(:,:,:),4,'CFRZ_BU_RTH',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_RR) CALL BUDGET_DDH (PRRS(:,:,:)*PRHODJ(:,:,:),8,'CFRZ_BU_RRR',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_RI) CALL BUDGET_DDH (PRIS(:,:,:)*PRHODJ(:,:,:),9,'CFRZ_BU_RRI',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_RG) CALL BUDGET_DDH (PRGS(:,:,:)*PRHODJ(:,:,:),11,'CFRZ_BU_RRG',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_SV) CALL BUDGET_DDH (PCRS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_NR,'CFRZ_BU_RSV',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_SV) CALL BUDGET_DDH (PCIS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_NI,'CFRZ_BU_RSV',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)*PRHODJ(:,:,:),4,'WETG_BU_RTH',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RC) CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:),7,'WETG_BU_RRC',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:)*PRHODJ(:,:,:),8,'WETG_BU_RRR',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RI) CALL BUDGET (PRIS(:,:,:)*PRHODJ(:,:,:),9,'WETG_BU_RRI',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RS) CALL BUDGET (PRSS(:,:,:)*PRHODJ(:,:,:),10,'WETG_BU_RRS',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RG) CALL BUDGET (PRGS(:,:,:)*PRHODJ(:,:,:),11,'WETG_BU_RRG',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RH) CALL BUDGET (PRHS(:,:,:)*PRHODJ(:,:,:),12,'WETG_BU_RRH',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_SV) CALL BUDGET (PCCS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_NC,'WETG_BU_RSV',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_SV) CALL BUDGET (PCRS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_NR,'WETG_BU_RSV',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_SV) CALL BUDGET (PCIS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_NI,'WETG_BU_RSV',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_TH) CALL BUDGET_DDH (PTHS(:,:,:)*PRHODJ(:,:,:),4,'WETG_BU_RTH',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_RC) CALL BUDGET_DDH (PRCS(:,:,:)*PRHODJ(:,:,:),7,'WETG_BU_RRC',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_RR) CALL BUDGET_DDH (PRRS(:,:,:)*PRHODJ(:,:,:),8,'WETG_BU_RRR',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_RI) CALL BUDGET_DDH (PRIS(:,:,:)*PRHODJ(:,:,:),9,'WETG_BU_RRI',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_RS) CALL BUDGET_DDH (PRSS(:,:,:)*PRHODJ(:,:,:),10,'WETG_BU_RRS',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_RG) CALL BUDGET_DDH (PRGS(:,:,:)*PRHODJ(:,:,:),11,'WETG_BU_RRG',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_RH) CALL BUDGET_DDH (PRHS(:,:,:)*PRHODJ(:,:,:),12,'WETG_BU_RRH',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_SV) CALL BUDGET_DDH (PCCS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_NC,'WETG_BU_RSV',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_SV) CALL BUDGET_DDH (PCRS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_NR,'WETG_BU_RSV',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_SV) CALL BUDGET_DDH (PCIS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_NI,'WETG_BU_RSV',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)*PRHODJ(:,:,:),4,'DRYG_BU_RTH',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RC) CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:),7,'DRYG_BU_RRC',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:)*PRHODJ(:,:,:),8,'DRYG_BU_RRR',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RI) CALL BUDGET (PRIS(:,:,:)*PRHODJ(:,:,:),9,'DRYG_BU_RRI',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RS) CALL BUDGET (PRSS(:,:,:)*PRHODJ(:,:,:),10,'DRYG_BU_RRS',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RG) CALL BUDGET (PRGS(:,:,:)*PRHODJ(:,:,:),11,'DRYG_BU_RRG',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_SV) CALL BUDGET (PCCS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_NC,'DRYG_BU_RSV',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_SV) CALL BUDGET (PCRS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_NR,'DRYG_BU_RSV',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_SV) CALL BUDGET (PCIS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_NI,'DRYG_BU_RSV',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_TH) CALL BUDGET_DDH (PTHS(:,:,:)*PRHODJ(:,:,:),4,'DRYG_BU_RTH',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_RC) CALL BUDGET_DDH (PRCS(:,:,:)*PRHODJ(:,:,:),7,'DRYG_BU_RRC',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_RR) CALL BUDGET_DDH (PRRS(:,:,:)*PRHODJ(:,:,:),8,'DRYG_BU_RRR',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_RI) CALL BUDGET_DDH (PRIS(:,:,:)*PRHODJ(:,:,:),9,'DRYG_BU_RRI',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_RS) CALL BUDGET_DDH (PRSS(:,:,:)*PRHODJ(:,:,:),10,'DRYG_BU_RRS',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_RG) CALL BUDGET_DDH (PRGS(:,:,:)*PRHODJ(:,:,:),11,'DRYG_BU_RRG',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_SV) CALL BUDGET_DDH (PCCS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_NC,'DRYG_BU_RSV',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_SV) CALL BUDGET_DDH (PCRS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_NR,'DRYG_BU_RSV',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_SV) CALL BUDGET_DDH (PCIS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_NI,'DRYG_BU_RSV',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RI) CALL BUDGET (PRIS(:,:,:)*PRHODJ(:,:,:),9,'HMG_BU_RRI',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RG) CALL BUDGET (PRGS(:,:,:)*PRHODJ(:,:,:),11,'HMG_BU_RRG',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_SV) CALL BUDGET (PCIS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_NI,'HMG_BU_RSV',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_RI) CALL BUDGET_DDH (PRIS(:,:,:)*PRHODJ(:,:,:),9,'HMG_BU_RRI',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_RG) CALL BUDGET_DDH (PRGS(:,:,:)*PRHODJ(:,:,:),11,'HMG_BU_RRG',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_SV) CALL BUDGET_DDH (PCIS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_NI,'HMG_BU_RSV',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)*PRHODJ(:,:,:),4,'GMLT_BU_RTH',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:)*PRHODJ(:,:,:),8,'GMLT_BU_RRR',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RG) CALL BUDGET (PRGS(:,:,:)*PRHODJ(:,:,:),11,'GMLT_BU_RRG',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_SV) CALL BUDGET (PCRS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_NR,'GMLT_BU_RSV',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_TH) CALL BUDGET_DDH (PTHS(:,:,:)*PRHODJ(:,:,:),4,'GMLT_BU_RTH',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_RR) CALL BUDGET_DDH (PRRS(:,:,:)*PRHODJ(:,:,:),8,'GMLT_BU_RRR',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_RG) CALL BUDGET_DDH (PRGS(:,:,:)*PRHODJ(:,:,:),11,'GMLT_BU_RRG',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_SV) CALL BUDGET_DDH (PCRS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_NR,'GMLT_BU_RSV',YDDDH, YDLDDH, YDMDDH) IF (LHAIL_LIMA) THEN - IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)*PRHODJ(:,:,:),4,'WETH_BU_RTH',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RC) CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:),7,'WETH_BU_RRC',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:)*PRHODJ(:,:,:),8,'WETH_BU_RRR',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RI) CALL BUDGET (PRIS(:,:,:)*PRHODJ(:,:,:),9,'WETH_BU_RRI',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RS) CALL BUDGET (PRSS(:,:,:)*PRHODJ(:,:,:),10,'WETH_BU_RRS',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RG) CALL BUDGET (PRGS(:,:,:)*PRHODJ(:,:,:),11,'WETH_BU_RRG',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RH) CALL BUDGET (PRHS(:,:,:)*PRHODJ(:,:,:),12,'WETH_BU_RRH',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_SV) CALL BUDGET (PCCS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_NC,'WETH_BU_RSV',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_SV) CALL BUDGET (PCRS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_NR,'WETH_BU_RSV',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_SV) CALL BUDGET (PCIS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_NI,'WETH_BU_RSV',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_TH) CALL BUDGET_DDH (PTHS(:,:,:)*PRHODJ(:,:,:),4,'WETH_BU_RTH',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_RC) CALL BUDGET_DDH (PRCS(:,:,:)*PRHODJ(:,:,:),7,'WETH_BU_RRC',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_RR) CALL BUDGET_DDH (PRRS(:,:,:)*PRHODJ(:,:,:),8,'WETH_BU_RRR',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_RI) CALL BUDGET_DDH (PRIS(:,:,:)*PRHODJ(:,:,:),9,'WETH_BU_RRI',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_RS) CALL BUDGET_DDH (PRSS(:,:,:)*PRHODJ(:,:,:),10,'WETH_BU_RRS',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_RG) CALL BUDGET_DDH (PRGS(:,:,:)*PRHODJ(:,:,:),11,'WETH_BU_RRG',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_RH) CALL BUDGET_DDH (PRHS(:,:,:)*PRHODJ(:,:,:),12,'WETH_BU_RRH',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_SV) CALL BUDGET_DDH (PCCS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_NC,'WETH_BU_RSV',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_SV) CALL BUDGET_DDH (PCRS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_NR,'WETH_BU_RSV',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_SV) CALL BUDGET_DDH (PCIS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_NI,'WETH_BU_RSV',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RG) CALL BUDGET (PRGS(:,:,:)*PRHODJ(:,:,:),11,'COHG_BU_RRG',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RH) CALL BUDGET (PRHS(:,:,:)*PRHODJ(:,:,:),12,'COHG_BU_RRH',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_RG) CALL BUDGET_DDH (PRGS(:,:,:)*PRHODJ(:,:,:),11,'COHG_BU_RRG',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_RH) CALL BUDGET_DDH (PRHS(:,:,:)*PRHODJ(:,:,:),12,'COHG_BU_RRH',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)*PRHODJ(:,:,:),4,'HMLT_BU_RTH',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:)*PRHODJ(:,:,:),8,'HMLT_BU_RRR',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RH) CALL BUDGET (PRHS(:,:,:)*PRHODJ(:,:,:),12,'HMLT_BU_RRH',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_SV) CALL BUDGET (PCRS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_NR,'HMLT_BU_RSV',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_TH) CALL BUDGET_DDH (PTHS(:,:,:)*PRHODJ(:,:,:),4,'HMLT_BU_RTH',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_RR) CALL BUDGET_DDH (PRRS(:,:,:)*PRHODJ(:,:,:),8,'HMLT_BU_RRR',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_RH) CALL BUDGET_DDH (PRHS(:,:,:)*PRHODJ(:,:,:),12,'HMLT_BU_RRH',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_SV) CALL BUDGET_DDH (PCRS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_NR,'HMLT_BU_RSV',YDDDH, YDLDDH, YDMDDH) ENDIF ENDIF diff --git a/src/arome/micro/lima_mixed_fast_processes.F90 b/src/arome/micro/lima_mixed_fast_processes.F90 index a0197e5fb99522cb536ab3017a075a58ffcddc61..d50dbd2d47e782471eca6b3766119cbc3f7f6089 100644 --- a/src/arome/micro/lima_mixed_fast_processes.F90 +++ b/src/arome/micro/lima_mixed_fast_processes.F90 @@ -160,7 +160,7 @@ USE MODD_PARAM_LIMA_MIXED ! USE MODD_NSV USE MODD_BUDGET -USE MODI_BUDGET +USE MODI_BUDGET_DDH ! USE DDH_MIX, ONLY : TYP_DDH USE YOMLDDH, ONLY : TLDDH @@ -341,20 +341,20 @@ END IF ! ! Budget storage IF (NBUMOD==KMI .AND. LBU_ENABLE) THEN - IF (LBUDGET_TH) CALL BUDGET ( & + IF (LBUDGET_TH) CALL BUDGET_DDH ( & UNPACK(ZTHS(:),MASK=GMICRO(:,:,:),FIELD=PTHS)*PRHODJ(:,:,:), & 4,'RIM_BU_RTH',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RC) CALL BUDGET ( & + IF (LBUDGET_RC) CALL BUDGET_DDH ( & UNPACK(ZRCS(:),MASK=GMICRO(:,:,:),FIELD=PRCS)*PRHODJ(:,:,:), & 7,'RIM_BU_RRC',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RS) CALL BUDGET ( & + IF (LBUDGET_RS) CALL BUDGET_DDH ( & UNPACK(ZRSS(:),MASK=GMICRO(:,:,:),FIELD=PRSS)*PRHODJ(:,:,:), & 10,'RIM_BU_RRS',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RG) CALL BUDGET ( & + IF (LBUDGET_RG) CALL BUDGET_DDH ( & UNPACK(ZRGS(:),MASK=GMICRO(:,:,:),FIELD=PRGS)*PRHODJ(:,:,:), & 11,'RIM_BU_RRG',YDDDH, YDLDDH, YDMDDH) IF (LBUDGET_SV) THEN - CALL BUDGET (UNPACK(ZCCS(:),MASK=GMICRO(:,:,:),FIELD=PCCS)*PRHODJ(:,:,:), & + CALL BUDGET_DDH (UNPACK(ZCCS(:),MASK=GMICRO(:,:,:),FIELD=PCCS)*PRHODJ(:,:,:), & 12+NSV_LIMA_NC,'RIM_BU_RSV',YDDDH, YDLDDH, YDMDDH) END IF END IF @@ -398,13 +398,13 @@ END IF ! ! Budget storage IF (NBUMOD==KMI .AND. LBU_ENABLE) THEN - IF (LBUDGET_RI) CALL BUDGET ( & + IF (LBUDGET_RI) CALL BUDGET_DDH ( & UNPACK(ZRIS(:),MASK=GMICRO,FIELD=PRIS)*PRHODJ(:,:,:), & 9,'HMS_BU_RRI',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RS) CALL BUDGET ( & + IF (LBUDGET_RS) CALL BUDGET_DDH ( & UNPACK(ZRSS(:),MASK=GMICRO,FIELD=PRSS)*PRHODJ(:,:,:), & 10,'HMS_BU_RRS',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_SV) CALL BUDGET ( & + IF (LBUDGET_SV) CALL BUDGET_DDH ( & UNPACK(ZCIS(:),MASK=GMICRO,FIELD=PCIS)*PRHODJ(:,:,:), & 12+NSV_LIMA_NI,'HMS_BU_RSV',YDDDH, YDLDDH, YDMDDH) END IF @@ -527,20 +527,20 @@ IF( IGACC>0 ) THEN END IF ! IF (NBUMOD==KMI .AND. LBU_ENABLE) THEN - IF (LBUDGET_TH) CALL BUDGET ( & + IF (LBUDGET_TH) CALL BUDGET_DDH ( & UNPACK(ZTHS(:),MASK=GMICRO(:,:,:),FIELD=PTHS)*PRHODJ(:,:,:),& 4,'ACC_BU_RTH',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RR) CALL BUDGET ( & + IF (LBUDGET_RR) CALL BUDGET_DDH ( & UNPACK(ZRRS(:),MASK=GMICRO(:,:,:),FIELD=PRRS)*PRHODJ(:,:,:), & 8,'ACC_BU_RRR',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RS) CALL BUDGET ( & + IF (LBUDGET_RS) CALL BUDGET_DDH ( & UNPACK(ZRSS(:),MASK=GMICRO(:,:,:),FIELD=PRSS)*PRHODJ(:,:,:), & 10,'ACC_BU_RRS',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RG) CALL BUDGET ( & + IF (LBUDGET_RG) CALL BUDGET_DDH ( & UNPACK(ZRGS(:),MASK=GMICRO(:,:,:),FIELD=PRGS)*PRHODJ(:,:,:), & 11,'ACC_BU_RRG',YDDDH, YDLDDH, YDMDDH) IF (LBUDGET_SV) THEN - CALL BUDGET (UNPACK(ZCRS(:),MASK=GMICRO(:,:,:),FIELD=PCRS)*PRHODJ(:,:,:), & + CALL BUDGET_DDH (UNPACK(ZCRS(:),MASK=GMICRO(:,:,:),FIELD=PCRS)*PRHODJ(:,:,:), & 12+NSV_LIMA_NR,'ACC_BU_RSV',YDDDH, YDLDDH, YDMDDH) END IF END IF @@ -575,10 +575,10 @@ END WHERE ! ! Budget storage IF (NBUMOD==KMI .AND. LBU_ENABLE) THEN - IF (LBUDGET_RS) CALL BUDGET ( & + IF (LBUDGET_RS) CALL BUDGET_DDH ( & UNPACK(ZRSS(:),MASK=GMICRO(:,:,:),FIELD=PRSS)*PRHODJ(:,:,:), & 10,'CMEL_BU_RRS',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RG) CALL BUDGET ( & + IF (LBUDGET_RG) CALL BUDGET_DDH ( & UNPACK(ZRGS(:),MASK=GMICRO(:,:,:),FIELD=PRGS)*PRHODJ(:,:,:), & 11,'CMEL_BU_RRG',YDDDH, YDLDDH, YDMDDH) END IF @@ -615,22 +615,22 @@ WHERE( (ZRIT(:)>XRTMIN(4)) .AND. (ZRRT(:)>XRTMIN(3)) .AND. (ZRIS(:)>XRTMIN(4)/PT END WHERE ! IF (NBUMOD==KMI .AND. LBU_ENABLE) THEN - IF (LBUDGET_TH) CALL BUDGET ( & + IF (LBUDGET_TH) CALL BUDGET_DDH ( & UNPACK(ZTHS(:),MASK=GMICRO(:,:,:),FIELD=PTHS)*PRHODJ(:,:,:), & 4,'CFRZ_BU_RTH',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RR) CALL BUDGET ( & + IF (LBUDGET_RR) CALL BUDGET_DDH ( & UNPACK(ZRRS(:),MASK=GMICRO(:,:,:),FIELD=PRRS)*PRHODJ(:,:,:), & 8,'CFRZ_BU_RRR',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RI) CALL BUDGET ( & + IF (LBUDGET_RI) CALL BUDGET_DDH ( & UNPACK(ZRIS(:),MASK=GMICRO(:,:,:),FIELD=PRIS)*PRHODJ(:,:,:), & 9,'CFRZ_BU_RRI',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RG) CALL BUDGET ( & + IF (LBUDGET_RG) CALL BUDGET_DDH ( & UNPACK(ZRGS(:),MASK=GMICRO(:,:,:),FIELD=PRGS)*PRHODJ(:,:,:), & 11,'CFRZ_BU_RRG',YDDDH, YDLDDH, YDMDDH) IF (LBUDGET_SV) THEN - CALL BUDGET ( UNPACK(ZCRS(:),MASK=GMICRO(:,:,:),FIELD=PCRS)*PRHODJ(:,:,:), & + CALL BUDGET_DDH ( UNPACK(ZCRS(:),MASK=GMICRO(:,:,:),FIELD=PCRS)*PRHODJ(:,:,:), & 12+NSV_LIMA_NR,'CFRZ_BU_RSV',YDDDH, YDLDDH, YDMDDH) - CALL BUDGET ( UNPACK(ZCIS(:),MASK=GMICRO(:,:,:),FIELD=PCIS)*PRHODJ(:,:,:), & + CALL BUDGET_DDH ( UNPACK(ZCIS(:),MASK=GMICRO(:,:,:),FIELD=PCIS)*PRHODJ(:,:,:), & 12+NSV_LIMA_NI,'CFRZ_BU_RSV',YDDDH, YDLDDH, YDMDDH) END IF END IF @@ -851,33 +851,33 @@ END WHERE ! ! Budget storage IF (NBUMOD==KMI .AND. LBU_ENABLE) THEN - IF (LBUDGET_TH) CALL BUDGET ( & + IF (LBUDGET_TH) CALL BUDGET_DDH ( & UNPACK(ZTHS(:),MASK=GMICRO(:,:,:),FIELD=PTHS)*PRHODJ(:,:,:),& 4,'WETG_BU_RTH',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RC) CALL BUDGET ( & + IF (LBUDGET_RC) CALL BUDGET_DDH ( & UNPACK(ZRCS(:),MASK=GMICRO(:,:,:),FIELD=PRCS)*PRHODJ(:,:,:), & 7,'WETG_BU_RRC',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RR) CALL BUDGET ( & + IF (LBUDGET_RR) CALL BUDGET_DDH ( & UNPACK(ZRRS(:),MASK=GMICRO(:,:,:),FIELD=PRRS)*PRHODJ(:,:,:), & 8,'WETG_BU_RRR',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RI) CALL BUDGET ( & + IF (LBUDGET_RI) CALL BUDGET_DDH ( & UNPACK(ZRIS(:),MASK=GMICRO(:,:,:),FIELD=PRIS)*PRHODJ(:,:,:), & 9,'WETG_BU_RRI',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RS) CALL BUDGET ( & + IF (LBUDGET_RS) CALL BUDGET_DDH ( & UNPACK(ZRSS(:),MASK=GMICRO(:,:,:),FIELD=PRSS)*PRHODJ(:,:,:), & 10,'WETG_BU_RRS',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RG) CALL BUDGET ( & + IF (LBUDGET_RG) CALL BUDGET_DDH ( & UNPACK(ZRGS(:),MASK=GMICRO(:,:,:),FIELD=PRGS)*PRHODJ(:,:,:), & 11,'WETG_BU_RRG',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RH) CALL BUDGET ( & + IF (LBUDGET_RH) CALL BUDGET_DDH ( & UNPACK(ZRHS(:),MASK=GMICRO(:,:,:),FIELD=PRHS)*PRHODJ(:,:,:), & 12,'WETG_BU_RRH',YDDDH, YDLDDH, YDMDDH) IF (LBUDGET_SV) THEN - CALL BUDGET (UNPACK(ZCCS(:),MASK=GMICRO(:,:,:),FIELD=PCCS)*PRHODJ(:,:,:), & + CALL BUDGET_DDH (UNPACK(ZCCS(:),MASK=GMICRO(:,:,:),FIELD=PCCS)*PRHODJ(:,:,:), & 12+NSV_LIMA_NC,'WETG_BU_RSV',YDDDH, YDLDDH, YDMDDH) - CALL BUDGET (UNPACK(ZCRS(:),MASK=GMICRO(:,:,:),FIELD=PCRS)*PRHODJ(:,:,:), & + CALL BUDGET_DDH (UNPACK(ZCRS(:),MASK=GMICRO(:,:,:),FIELD=PCRS)*PRHODJ(:,:,:), & 12+NSV_LIMA_NR,'WETG_BU_RSV',YDDDH, YDLDDH, YDMDDH) - CALL BUDGET (UNPACK(ZCIS(:),MASK=GMICRO(:,:,:),FIELD=PCIS)*PRHODJ(:,:,:), & + CALL BUDGET_DDH (UNPACK(ZCIS(:),MASK=GMICRO(:,:,:),FIELD=PCIS)*PRHODJ(:,:,:), & 12+NSV_LIMA_NI,'WETG_BU_RSV',YDDDH, YDLDDH, YDMDDH) END IF END IF @@ -902,30 +902,30 @@ END WHERE ! ! Budget storage IF (NBUMOD==KMI .AND. LBU_ENABLE) THEN - IF (LBUDGET_TH) CALL BUDGET ( & + IF (LBUDGET_TH) CALL BUDGET_DDH ( & UNPACK(ZTHS(:),MASK=GMICRO(:,:,:),FIELD=PTHS)*PRHODJ(:,:,:),& 4,'DRYG_BU_RTH',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RC) CALL BUDGET ( & + IF (LBUDGET_RC) CALL BUDGET_DDH ( & UNPACK(ZRCS(:),MASK=GMICRO(:,:,:),FIELD=PRCS)*PRHODJ(:,:,:), & 7,'DRYG_BU_RRC',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RR) CALL BUDGET ( & + IF (LBUDGET_RR) CALL BUDGET_DDH ( & UNPACK(ZRRS(:),MASK=GMICRO(:,:,:),FIELD=PRRS)*PRHODJ(:,:,:), & 8,'DRYG_BU_RRR',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RI) CALL BUDGET ( & + IF (LBUDGET_RI) CALL BUDGET_DDH ( & UNPACK(ZRIS(:),MASK=GMICRO(:,:,:),FIELD=PRIS)*PRHODJ(:,:,:), & 9,'DRYG_BU_RRI',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RS) CALL BUDGET ( & + IF (LBUDGET_RS) CALL BUDGET_DDH ( & UNPACK(ZRSS(:),MASK=GMICRO(:,:,:),FIELD=PRSS)*PRHODJ(:,:,:), & 10,'DRYG_BU_RRS',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RG) CALL BUDGET ( & + IF (LBUDGET_RG) CALL BUDGET_DDH ( & UNPACK(ZRGS(:),MASK=GMICRO(:,:,:),FIELD=PRGS)*PRHODJ(:,:,:), & 11,'DRYG_BU_RRG',YDDDH, YDLDDH, YDMDDH) IF (LBUDGET_SV) THEN - CALL BUDGET ( UNPACK(ZCCS(:),MASK=GMICRO(:,:,:),FIELD=PCCS)*PRHODJ(:,:,:), & + CALL BUDGET_DDH ( UNPACK(ZCCS(:),MASK=GMICRO(:,:,:),FIELD=PCCS)*PRHODJ(:,:,:), & 12+NSV_LIMA_NC,'DRYG_BU_RSV',YDDDH, YDLDDH, YDMDDH) - CALL BUDGET ( UNPACK(ZCRS(:),MASK=GMICRO(:,:,:),FIELD=PCRS)*PRHODJ(:,:,:), & + CALL BUDGET_DDH ( UNPACK(ZCRS(:),MASK=GMICRO(:,:,:),FIELD=PCRS)*PRHODJ(:,:,:), & 12+NSV_LIMA_NR,'DRYG_BU_RSV',YDDDH, YDLDDH, YDMDDH) - CALL BUDGET ( UNPACK(ZCIS(:),MASK=GMICRO(:,:,:),FIELD=PCIS)*PRHODJ(:,:,:), & + CALL BUDGET_DDH ( UNPACK(ZCIS(:),MASK=GMICRO(:,:,:),FIELD=PCIS)*PRHODJ(:,:,:), & 12+NSV_LIMA_NI,'DRYG_BU_RSV',YDDDH, YDLDDH, YDMDDH) END IF END IF @@ -968,13 +968,13 @@ END IF ! ! Budget storage IF (NBUMOD==KMI .AND. LBU_ENABLE) THEN - IF (LBUDGET_RI) CALL BUDGET ( & + IF (LBUDGET_RI) CALL BUDGET_DDH ( & UNPACK(ZRIS(:),MASK=GMICRO,FIELD=PRIS)*PRHODJ(:,:,:), & 9,'HMG_BU_RRI',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RG) CALL BUDGET ( & + IF (LBUDGET_RG) CALL BUDGET_DDH ( & UNPACK(ZRGS(:),MASK=GMICRO,FIELD=PRGS)*PRHODJ(:,:,:), & 11,'HMG_BU_RRG',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_SV) CALL BUDGET ( & + IF (LBUDGET_SV) CALL BUDGET_DDH ( & UNPACK(ZCIS(:),MASK=GMICRO,FIELD=PCIS)*PRHODJ(:,:,:), & 12+NSV_LIMA_NI,'HMG_BU_RSV',YDDDH, YDLDDH, YDMDDH) END IF @@ -1009,17 +1009,17 @@ WHERE( (ZRGT(:)>XRTMIN(6)) .AND. (ZRGS(:)>XRTMIN(6)/PTSTEP) .AND. (ZZT(:)>XTT) ) END WHERE ! IF (NBUMOD==KMI .AND. LBU_ENABLE) THEN - IF (LBUDGET_TH) CALL BUDGET ( & + IF (LBUDGET_TH) CALL BUDGET_DDH ( & UNPACK(ZTHS(:),MASK=GMICRO(:,:,:),FIELD=PTHS)*PRHODJ(:,:,:),& 4,'GMLT_BU_RTH',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RR) CALL BUDGET ( & + IF (LBUDGET_RR) CALL BUDGET_DDH ( & UNPACK(ZRRS(:),MASK=GMICRO(:,:,:),FIELD=PRRS)*PRHODJ(:,:,:), & 8,'GMLT_BU_RRR',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RG) CALL BUDGET ( & + IF (LBUDGET_RG) CALL BUDGET_DDH ( & UNPACK(ZRGS(:),MASK=GMICRO(:,:,:),FIELD=PRGS)*PRHODJ(:,:,:), & 11,'GMLT_BU_RRG',YDDDH, YDLDDH, YDMDDH) IF (LBUDGET_SV) THEN - CALL BUDGET ( UNPACK(ZCRS(:),MASK=GMICRO(:,:,:),FIELD=PCRS)*PRHODJ(:,:,:), & + CALL BUDGET_DDH ( UNPACK(ZCRS(:),MASK=GMICRO(:,:,:),FIELD=PCRS)*PRHODJ(:,:,:), & 12+NSV_LIMA_NR,'GMLT_BU_RSV',YDDDH, YDLDDH, YDMDDH) END IF END IF @@ -1228,33 +1228,33 @@ END IF ! IHAIL>0 ! ! IF (NBUMOD==KMI .AND. LBU_ENABLE) THEN - IF (LBUDGET_TH) CALL BUDGET ( & + IF (LBUDGET_TH) CALL BUDGET_DDH ( & UNPACK(ZTHS(:),MASK=GMICRO(:,:,:),FIELD=PTHS)*PRHODJ(:,:,:), & 4,'WETH_BU_RTH',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RC) CALL BUDGET ( & + IF (LBUDGET_RC) CALL BUDGET_DDH ( & UNPACK(ZRCS(:),MASK=GMICRO(:,:,:),FIELD=PRCS)*PRHODJ(:,:,:), & 7,'WETH_BU_RRC',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RR) CALL BUDGET ( & + IF (LBUDGET_RR) CALL BUDGET_DDH ( & UNPACK(ZRRS(:),MASK=GMICRO(:,:,:),FIELD=PRRS)*PRHODJ(:,:,:), & 8,'WETH_BU_RRR',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RI) CALL BUDGET ( & + IF (LBUDGET_RI) CALL BUDGET_DDH ( & UNPACK(ZRIS(:),MASK=GMICRO(:,:,:),FIELD=PRIS)*PRHODJ(:,:,:), & 9,'WETH_BU_RRI',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RS) CALL BUDGET ( & + IF (LBUDGET_RS) CALL BUDGET_DDH ( & UNPACK(ZRSS(:),MASK=GMICRO(:,:,:),FIELD=PRSS)*PRHODJ(:,:,:), & 10,'WETH_BU_RRS',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RG) CALL BUDGET ( & + IF (LBUDGET_RG) CALL BUDGET_DDH ( & UNPACK(ZRGS(:),MASK=GMICRO(:,:,:),FIELD=PRGS)*PRHODJ(:,:,:), & 11,'WETH_BU_RRG',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RH) CALL BUDGET ( & + IF (LBUDGET_RH) CALL BUDGET_DDH ( & UNPACK(ZRHS(:),MASK=GMICRO(:,:,:),FIELD=PRHS)*PRHODJ(:,:,:), & 12,'WETH_BU_RRH',YDDDH, YDLDDH, YDMDDH) IF (LBUDGET_SV) THEN - CALL BUDGET (UNPACK(ZCCS(:),MASK=GMICRO(:,:,:),FIELD=PCCS)*PRHODJ(:,:,:), & + CALL BUDGET_DDH (UNPACK(ZCCS(:),MASK=GMICRO(:,:,:),FIELD=PCCS)*PRHODJ(:,:,:), & 12+NSV_LIMA_NC,'WETH_BU_RSV',YDDDH, YDLDDH, YDMDDH) - CALL BUDGET (UNPACK(ZCRS(:),MASK=GMICRO(:,:,:),FIELD=PCRS)*PRHODJ(:,:,:), & + CALL BUDGET_DDH (UNPACK(ZCRS(:),MASK=GMICRO(:,:,:),FIELD=PCRS)*PRHODJ(:,:,:), & 12+NSV_LIMA_NR,'WETH_BU_RSV',YDDDH, YDLDDH, YDMDDH) - CALL BUDGET (UNPACK(ZCIS(:),MASK=GMICRO(:,:,:),FIELD=PCIS)*PRHODJ(:,:,:), & + CALL BUDGET_DDH (UNPACK(ZCIS(:),MASK=GMICRO(:,:,:),FIELD=PCIS)*PRHODJ(:,:,:), & 12+NSV_LIMA_NI,'WETH_BU_RSV',YDDDH, YDLDDH, YDMDDH) END IF END IF @@ -1283,10 +1283,10 @@ IF ( IHAIL>0 ) THEN END IF ! IF (NBUMOD==KMI .AND. LBU_ENABLE) THEN - IF (LBUDGET_RG) CALL BUDGET ( & + IF (LBUDGET_RG) CALL BUDGET_DDH ( & UNPACK(ZRGS(:),MASK=GMICRO(:,:,:),FIELD=PRGS)*PRHODJ(:,:,:), & 11,'COHG_BU_RRG',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RH) CALL BUDGET ( & + IF (LBUDGET_RH) CALL BUDGET_DDH ( & UNPACK(ZRHS(:),MASK=GMICRO(:,:,:),FIELD=PRHS)*PRHODJ(:,:,:), & 12,'COHG_BU_RRH',YDDDH, YDLDDH, YDMDDH) END IF @@ -1319,17 +1319,17 @@ IF ( IHAIL>0 ) THEN END IF ! IF (NBUMOD==KMI .AND. LBU_ENABLE) THEN - IF (LBUDGET_TH) CALL BUDGET ( & + IF (LBUDGET_TH) CALL BUDGET_DDH ( & UNPACK(ZTHS(:),MASK=GMICRO(:,:,:),FIELD=PTHS)*PRHODJ(:,:,:),& 4,'HMLT_BU_RTH',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RR) CALL BUDGET ( & + IF (LBUDGET_RR) CALL BUDGET_DDH ( & UNPACK(ZRRS(:),MASK=GMICRO(:,:,:),FIELD=PRRS)*PRHODJ(:,:,:), & 8,'HMLT_BU_RRR',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RH) CALL BUDGET ( & + IF (LBUDGET_RH) CALL BUDGET_DDH ( & UNPACK(ZRHS(:),MASK=GMICRO(:,:,:),FIELD=PRHS)*PRHODJ(:,:,:), & 12,'HMLT_BU_RRH',YDDDH, YDLDDH, YDMDDH) IF (LBUDGET_SV) THEN - CALL BUDGET ( UNPACK(ZCRS(:),MASK=GMICRO(:,:,:),FIELD=PCRS)*PRHODJ(:,:,:), & + CALL BUDGET_DDH ( UNPACK(ZCRS(:),MASK=GMICRO(:,:,:),FIELD=PCRS)*PRHODJ(:,:,:), & 12+NSV_LIMA_NR,'HMLT_BU_RSV',YDDDH, YDLDDH, YDMDDH) END IF END IF diff --git a/src/arome/micro/lima_mixed_slow_processes.F90 b/src/arome/micro/lima_mixed_slow_processes.F90 index a086e4437878fdb235d2bc635661faaa57e83573..566145a72bbdfb947487ce4850d2d1e07d73604c 100644 --- a/src/arome/micro/lima_mixed_slow_processes.F90 +++ b/src/arome/micro/lima_mixed_slow_processes.F90 @@ -130,7 +130,7 @@ USE MODD_PARAM_LIMA_MIXED, ONLY : XLBG, XLBEXG, XLBDAG_MAX, & ! USE MODD_NSV USE MODD_BUDGET -USE MODI_BUDGET +USE MODI_BUDGET_DDH ! USE DDH_MIX, ONLY : TYP_DDH USE YOMLDDH, ONLY : TLDDH @@ -211,13 +211,13 @@ INTEGER :: JMOD_IFN ! ! Budget storage IF (NBUMOD==KMI .AND. LBU_ENABLE) THEN - IF (LBUDGET_TH) CALL BUDGET ( & + IF (LBUDGET_TH) CALL BUDGET_DDH ( & UNPACK(ZTHS(:),MASK=GMICRO(:,:,:),FIELD=PTHS)*PRHODJ(:,:,:),& 4,'DEPG_BU_RTH',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RV) CALL BUDGET ( & + IF (LBUDGET_RV) CALL BUDGET_DDH ( & UNPACK(ZRVS(:),MASK=GMICRO(:,:,:),FIELD=PRVS)*PRHODJ(:,:,:),& 6,'DEPG_BU_RRV',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RG) CALL BUDGET ( & + IF (LBUDGET_RG) CALL BUDGET_DDH ( & UNPACK(ZRGS(:),MASK=GMICRO(:,:,:),FIELD=PRGS)*PRHODJ(:,:,:), & 11,'DEPG_BU_RRG',YDDDH, YDLDDH, YDMDDH) END IF @@ -245,19 +245,19 @@ INTEGER :: JMOD_IFN ! ! Budget storage IF (NBUMOD==KMI .AND. LBU_ENABLE) THEN - IF (LBUDGET_TH) CALL BUDGET ( & + IF (LBUDGET_TH) CALL BUDGET_DDH ( & UNPACK(ZTHS(:),MASK=GMICRO(:,:,:),FIELD=PTHS)*PRHODJ(:,:,:),& 4,'IMLT_BU_RTH',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RC) CALL BUDGET ( & + IF (LBUDGET_RC) CALL BUDGET_DDH ( & UNPACK(ZRCS(:),MASK=GMICRO(:,:,:),FIELD=PRCS)*PRHODJ(:,:,:), & 7,'IMLT_BU_RRC',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RI) CALL BUDGET ( & + IF (LBUDGET_RI) CALL BUDGET_DDH ( & UNPACK(ZRIS(:),MASK=GMICRO(:,:,:),FIELD=PRIS)*PRHODJ(:,:,:), & 9,'IMLT_BU_RRI',YDDDH, YDLDDH, YDMDDH) IF (LBUDGET_SV) THEN - CALL BUDGET (UNPACK(ZCCS(:),MASK=GMICRO(:,:,:),FIELD=PCCS)*PRHODJ(:,:,:), & + CALL BUDGET_DDH (UNPACK(ZCCS(:),MASK=GMICRO(:,:,:),FIELD=PCCS)*PRHODJ(:,:,:), & 12+NSV_LIMA_NC,'IMLT_BU_RSV',YDDDH, YDLDDH, YDMDDH) - CALL BUDGET (UNPACK(ZCIS(:),MASK=GMICRO(:,:,:),FIELD=PCIS)*PRHODJ(:,:,:), & + CALL BUDGET_DDH (UNPACK(ZCIS(:),MASK=GMICRO(:,:,:),FIELD=PCIS)*PRHODJ(:,:,:), & 12+NSV_LIMA_NI,'IMLT_BU_RSV',YDDDH, YDLDDH, YDMDDH) END IF END IF @@ -281,13 +281,13 @@ INTEGER :: JMOD_IFN ! ! Budget storage IF (NBUMOD==KMI .AND. LBU_ENABLE) THEN - IF (LBUDGET_TH) CALL BUDGET ( & + IF (LBUDGET_TH) CALL BUDGET_DDH ( & UNPACK(ZTHS(:),MASK=GMICRO(:,:,:),FIELD=PTHS)*PRHODJ(:,:,:),& 4,'BERFI_BU_RTH',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RC) CALL BUDGET ( & + IF (LBUDGET_RC) CALL BUDGET_DDH ( & UNPACK(ZRCS(:),MASK=GMICRO(:,:,:),FIELD=PRCS)*PRHODJ(:,:,:), & 7,'BERFI_BU_RRC',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RI) CALL BUDGET ( & + IF (LBUDGET_RI) CALL BUDGET_DDH ( & UNPACK(ZRIS(:),MASK=GMICRO(:,:,:),FIELD=PRIS)*PRHODJ(:,:,:), & 9,'BERFI_BU_RRI',YDDDH, YDLDDH, YDMDDH) END IF diff --git a/src/arome/micro/lima_nucleation_procs.F90 b/src/arome/micro/lima_nucleation_procs.F90 index 81b6c9e5b09d2c20d3e5d0a7230148b4d3db7a71..a00ee56f72bf754c0e0129edb85e35f3a0218933 100644 --- a/src/arome/micro/lima_nucleation_procs.F90 +++ b/src/arome/micro/lima_nucleation_procs.F90 @@ -68,7 +68,7 @@ USE MODD_BUDGET, ONLY : LBU_ENABLE, LBUDGET_TH, LBUDGET_RV, LBUDGET_RC, LBUD USE MODD_NSV, ONLY : NSV_LIMA_NC, NSV_LIMA_NR, NSV_LIMA_CCN_FREE, & NSV_LIMA_NI, NSV_LIMA_IFN_FREE ! -USE MODI_BUDGET +USE MODI_BUDGET_DDH USE MODI_LIMA_CCN_ACTIVATION USE MODI_LIMA_PHILLIPS_IFN_NUCLEATION USE MODI_LIMA_MEYERS_NUCLEATION @@ -165,14 +165,14 @@ IF (LWARM_LIMA .AND. LACTI_LIMA) THEN ! Call budgets ! IF (LBU_ENABLE) THEN - IF (LBUDGET_TH) CALL BUDGET (PTHT(:,:,:)*PRHODJ(:,:,:)/PTSTEP, 4, 'HENU_BU_RTH',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RV) CALL BUDGET (PRVT(:,:,:)*PRHODJ(:,:,:)/PTSTEP, 6, 'HENU_BU_RRV',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RC) CALL BUDGET (PRCT(:,:,:)*PRHODJ(:,:,:)/PTSTEP, 7, 'HENU_BU_RRC',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_TH) CALL BUDGET_DDH (PTHT(:,:,:)*PRHODJ(:,:,:)/PTSTEP, 4, 'HENU_BU_RTH',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_RV) CALL BUDGET_DDH (PRVT(:,:,:)*PRHODJ(:,:,:)/PTSTEP, 6, 'HENU_BU_RRV',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_RC) CALL BUDGET_DDH (PRCT(:,:,:)*PRHODJ(:,:,:)/PTSTEP, 7, 'HENU_BU_RRC',YDDDH, YDLDDH, YDMDDH) IF (LBUDGET_SV) THEN - CALL BUDGET (PCCT(:,:,:)*PRHODJ(:,:,:)/PTSTEP, 12+NSV_LIMA_NC, 'HENU_BU_RSV',YDDDH, YDLDDH, YDMDDH) + CALL BUDGET_DDH (PCCT(:,:,:)*PRHODJ(:,:,:)/PTSTEP, 12+NSV_LIMA_NC, 'HENU_BU_RSV',YDDDH, YDLDDH, YDMDDH) IF (NMOD_CCN.GE.1) THEN DO JL=1, NMOD_CCN - CALL BUDGET (PNFT(:,:,:,JL)*PRHODJ(:,:,:)/PTSTEP,12+NSV_LIMA_CCN_FREE+JL-1,'HENU_BU_RSV',YDDDH, YDLDDH, YDMDDH) + CALL BUDGET_DDH (PNFT(:,:,:,JL)*PRHODJ(:,:,:)/PTSTEP,12+NSV_LIMA_CCN_FREE+JL-1,'HENU_BU_RSV',YDDDH, YDLDDH, YDMDDH) END DO END IF END IF @@ -192,24 +192,24 @@ IF (LCOLD_LIMA .AND. LNUCL_LIMA .AND. .NOT.LMEYERS_LIMA .AND. NMOD_IFN.GE.1) THE ! Call budgets ! IF (LBU_ENABLE) THEN - IF (LBUDGET_TH) CALL BUDGET ((PTHT(:,:,:)+Z_TH_HIND(:,:,:))*PRHODJ(:,:,:)/PTSTEP,4, 'HIND_BU_RTH',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RV) CALL BUDGET ((PRVT(:,:,:)-Z_RI_HIND(:,:,:))*PRHODJ(:,:,:)/PTSTEP,6, 'HIND_BU_RRV',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RI) CALL BUDGET ((PRIT(:,:,:)+Z_RI_HIND(:,:,:))*PRHODJ(:,:,:)/PTSTEP,9, 'HIND_BU_RRI',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_TH) CALL BUDGET_DDH ((PTHT(:,:,:)+Z_TH_HIND(:,:,:))*PRHODJ(:,:,:)/PTSTEP,4, 'HIND_BU_RTH',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_RV) CALL BUDGET_DDH ((PRVT(:,:,:)-Z_RI_HIND(:,:,:))*PRHODJ(:,:,:)/PTSTEP,6, 'HIND_BU_RRV',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_RI) CALL BUDGET_DDH ((PRIT(:,:,:)+Z_RI_HIND(:,:,:))*PRHODJ(:,:,:)/PTSTEP,9, 'HIND_BU_RRI',YDDDH, YDLDDH, YDMDDH) IF (LBUDGET_SV) THEN - CALL BUDGET ((PCIT(:,:,:)+Z_CI_HIND(:,:,:))*PRHODJ(:,:,:)/PTSTEP,12+NSV_LIMA_NI, 'HIND_BU_RSV',YDDDH, YDLDDH, YDMDDH) + CALL BUDGET_DDH ((PCIT(:,:,:)+Z_CI_HIND(:,:,:))*PRHODJ(:,:,:)/PTSTEP,12+NSV_LIMA_NI, 'HIND_BU_RSV',YDDDH, YDLDDH, YDMDDH) IF (NMOD_IFN.GE.1) THEN DO JL=1, NMOD_IFN - CALL BUDGET ((ZIFT(:,:,:,JL))*PRHODJ(:,:,:)/PTSTEP, 12+NSV_LIMA_IFN_FREE+JL-1,'HIND_BU_RSV',YDDDH, YDLDDH, YDMDDH) + CALL BUDGET_DDH ((ZIFT(:,:,:,JL))*PRHODJ(:,:,:)/PTSTEP, 12+NSV_LIMA_IFN_FREE+JL-1,'HIND_BU_RSV',YDDDH, YDLDDH, YDMDDH) END DO END IF END IF ! - IF (LBUDGET_TH) CALL BUDGET (ZTHT(:,:,:)*PRHODJ(:,:,:)/PTSTEP,4,'HINC_BU_RTH',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RC) CALL BUDGET (ZRCT(:,:,:)*PRHODJ(:,:,:)/PTSTEP,7,'HINC_BU_RRC',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RI) CALL BUDGET (ZRIT(:,:,:)*PRHODJ(:,:,:)/PTSTEP,9,'HINC_BU_RRI',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_TH) CALL BUDGET_DDH (ZTHT(:,:,:)*PRHODJ(:,:,:)/PTSTEP,4,'HINC_BU_RTH',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_RC) CALL BUDGET_DDH (ZRCT(:,:,:)*PRHODJ(:,:,:)/PTSTEP,7,'HINC_BU_RRC',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_RI) CALL BUDGET_DDH (ZRIT(:,:,:)*PRHODJ(:,:,:)/PTSTEP,9,'HINC_BU_RRI',YDDDH, YDLDDH, YDMDDH) IF (LBUDGET_SV) THEN - CALL BUDGET (ZCCT(:,:,:)*PRHODJ(:,:,:)/PTSTEP,12+NSV_LIMA_NC,'HINC_BU_RSV',YDDDH, YDLDDH, YDMDDH) - CALL BUDGET (ZCIT(:,:,:)*PRHODJ(:,:,:)/PTSTEP,12+NSV_LIMA_NI,'HINC_BU_RSV',YDDDH, YDLDDH, YDMDDH) + CALL BUDGET_DDH (ZCCT(:,:,:)*PRHODJ(:,:,:)/PTSTEP,12+NSV_LIMA_NC,'HINC_BU_RSV',YDDDH, YDLDDH, YDMDDH) + CALL BUDGET_DDH (ZCIT(:,:,:)*PRHODJ(:,:,:)/PTSTEP,12+NSV_LIMA_NI,'HINC_BU_RSV',YDDDH, YDLDDH, YDMDDH) END IF END IF ! @@ -238,17 +238,17 @@ IF (LCOLD_LIMA .AND. LNUCL_LIMA .AND. LMEYERS_LIMA) THEN ! Call budgets ! IF (LBU_ENABLE) THEN - IF (LBUDGET_TH) CALL BUDGET ((PTHT(:,:,:)+Z_TH_HIND(:,:,:))*PRHODJ(:,:,:)/PTSTEP,4, 'HIND_BU_RTH',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RV) CALL BUDGET ((PRVT(:,:,:)-Z_RI_HIND(:,:,:))*PRHODJ(:,:,:)/PTSTEP,6, 'HIND_BU_RRV',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RI) CALL BUDGET ((PRIT(:,:,:)+Z_RI_HIND(:,:,:))*PRHODJ(:,:,:)/PTSTEP,9, 'HIND_BU_RRI',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_SV) CALL BUDGET ((PCIT(:,:,:)+Z_CI_HIND(:,:,:))*PRHODJ(:,:,:)/PTSTEP,12+NSV_LIMA_NI,'HIND_BU_RSV',YDDDH, YDLDDH, YDMDDH) -! - IF (LBUDGET_TH) CALL BUDGET (ZTHT(:,:,:)*PRHODJ(:,:,:)/PTSTEP,4,'HINC_BU_RTH',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RC) CALL BUDGET (ZRCT(:,:,:)*PRHODJ(:,:,:)/PTSTEP,7,'HINC_BU_RRC',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RI) CALL BUDGET (ZRIT(:,:,:)*PRHODJ(:,:,:)/PTSTEP,9,'HINC_BU_RRI',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_TH) CALL BUDGET_DDH ((PTHT(:,:,:)+Z_TH_HIND(:,:,:))*PRHODJ(:,:,:)/PTSTEP,4, 'HIND_BU_RTH',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_RV) CALL BUDGET_DDH ((PRVT(:,:,:)-Z_RI_HIND(:,:,:))*PRHODJ(:,:,:)/PTSTEP,6, 'HIND_BU_RRV',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_RI) CALL BUDGET_DDH ((PRIT(:,:,:)+Z_RI_HIND(:,:,:))*PRHODJ(:,:,:)/PTSTEP,9, 'HIND_BU_RRI',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_SV) CALL BUDGET_DDH ((PCIT(:,:,:)+Z_CI_HIND(:,:,:))*PRHODJ(:,:,:)/PTSTEP,12+NSV_LIMA_NI,'HIND_BU_RSV',YDDDH, YDLDDH, YDMDDH) +! + IF (LBUDGET_TH) CALL BUDGET_DDH (ZTHT(:,:,:)*PRHODJ(:,:,:)/PTSTEP,4,'HINC_BU_RTH',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_RC) CALL BUDGET_DDH (ZRCT(:,:,:)*PRHODJ(:,:,:)/PTSTEP,7,'HINC_BU_RRC',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_RI) CALL BUDGET_DDH (ZRIT(:,:,:)*PRHODJ(:,:,:)/PTSTEP,9,'HINC_BU_RRI',YDDDH, YDLDDH, YDMDDH) IF (LBUDGET_SV) THEN - CALL BUDGET (ZCCT(:,:,:)*PRHODJ(:,:,:)/PTSTEP,12+NSV_LIMA_NC,'HINC_BU_RSV',YDDDH, YDLDDH, YDMDDH) - CALL BUDGET (ZCIT(:,:,:)*PRHODJ(:,:,:)/PTSTEP,12+NSV_LIMA_NI,'HINC_BU_RSV',YDDDH, YDLDDH, YDMDDH) + CALL BUDGET_DDH (ZCCT(:,:,:)*PRHODJ(:,:,:)/PTSTEP,12+NSV_LIMA_NC,'HINC_BU_RSV',YDDDH, YDLDDH, YDMDDH) + CALL BUDGET_DDH (ZCIT(:,:,:)*PRHODJ(:,:,:)/PTSTEP,12+NSV_LIMA_NI,'HINC_BU_RSV',YDDDH, YDLDDH, YDMDDH) END IF END IF ! @@ -272,14 +272,14 @@ IF (LCOLD_LIMA .AND. LHHONI_LIMA .AND. NMOD_CCN.GE.1) THEN ! Call budgets ! IF (LBU_ENABLE .AND. LHHONI_LIMA) THEN - IF (LBUDGET_TH) CALL BUDGET (ZTHT(:,:,:)*PRHODJ(:,:,:)/PTSTEP, 4, 'HONH_BU_RTH',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RV) CALL BUDGET (ZRVT(:,:,:)*PRHODJ(:,:,:)/PTSTEP, 6, 'HONH_BU_RRV',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RI) CALL BUDGET (ZRIT(:,:,:)*PRHODJ(:,:,:)/PTSTEP, 9, 'HONH_BU_RRI',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_TH) CALL BUDGET_DDH (ZTHT(:,:,:)*PRHODJ(:,:,:)/PTSTEP, 4, 'HONH_BU_RTH',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_RV) CALL BUDGET_DDH (ZRVT(:,:,:)*PRHODJ(:,:,:)/PTSTEP, 6, 'HONH_BU_RRV',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_RI) CALL BUDGET_DDH (ZRIT(:,:,:)*PRHODJ(:,:,:)/PTSTEP, 9, 'HONH_BU_RRI',YDDDH, YDLDDH, YDMDDH) IF (LBUDGET_SV) THEN - CALL BUDGET (ZCIT(:,:,:)*PRHODJ(:,:,:)/PTSTEP, 12+NSV_LIMA_NI, 'HONH_BU_RSV',YDDDH, YDLDDH, YDMDDH) + CALL BUDGET_DDH (ZCIT(:,:,:)*PRHODJ(:,:,:)/PTSTEP, 12+NSV_LIMA_NI, 'HONH_BU_RSV',YDDDH, YDLDDH, YDMDDH) IF (NMOD_CCN.GE.1) THEN DO JL=1, NMOD_CCN - CALL BUDGET (ZNFT(:,:,:,JL)*PRHODJ(:,:,:)/PTSTEP,12+NSV_LIMA_CCN_FREE+JL-1,'HONH_BU_RSV',YDDDH, YDLDDH, YDMDDH) + CALL BUDGET_DDH (ZNFT(:,:,:,JL)*PRHODJ(:,:,:)/PTSTEP,12+NSV_LIMA_CCN_FREE+JL-1,'HONH_BU_RSV',YDDDH, YDLDDH, YDMDDH) END DO END IF END IF diff --git a/src/arome/micro/lima_phillips.F90 b/src/arome/micro/lima_phillips.F90 index 63b44a28bb7738eb907964f412f78394616f9569..9726b5c920f9e345fbdc020034e58ffe2ad348d1 100644 --- a/src/arome/micro/lima_phillips.F90 +++ b/src/arome/micro/lima_phillips.F90 @@ -145,7 +145,7 @@ USE MODI_LIMA_PHILLIPS_REF_SPECTRUM USE MODI_LIMA_PHILLIPS_INTEG ! USE MODD_BUDGET -USE MODI_BUDGET +USE MODI_BUDGET_DDH USE MODD_NSV, ONLY : NSV_LIMA_NC, NSV_LIMA_NI, NSV_LIMA_IFN_FREE ! USE DDH_MIX, ONLY : TYP_DDH @@ -489,21 +489,21 @@ END DO ! ! Budget storage IF (NBUMOD==KMI .AND. LBU_ENABLE) THEN - IF (LBUDGET_TH) CALL BUDGET ( & + IF (LBUDGET_TH) CALL BUDGET_DDH ( & UNPACK(ZTHS(:),MASK=GNEGT(:,:,:),FIELD=PTHS)*PRHODJ(:,:,:),& 4,'HIND_BU_RTH',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RV) CALL BUDGET ( & + IF (LBUDGET_RV) CALL BUDGET_DDH ( & UNPACK(ZRVS(:),MASK=GNEGT(:,:,:),FIELD=PRVS)*PRHODJ(:,:,:),& 6,'HIND_BU_RRV',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RI) CALL BUDGET ( & + IF (LBUDGET_RI) CALL BUDGET_DDH ( & UNPACK(ZRIS(:),MASK=GNEGT(:,:,:),FIELD=PRIS)*PRHODJ(:,:,:),& 9,'HIND_BU_RRI',YDDDH, YDLDDH, YDMDDH) IF (LBUDGET_SV) THEN - CALL BUDGET ( UNPACK(ZCIS(:),MASK=GNEGT(:,:,:),FIELD=PCIS)*PRHODJ(:,:,:),& + CALL BUDGET_DDH ( UNPACK(ZCIS(:),MASK=GNEGT(:,:,:),FIELD=PCIS)*PRHODJ(:,:,:),& 12+NSV_LIMA_NI,'HIND_BU_RSV',YDDDH, YDLDDH, YDMDDH) IF (NMOD_IFN.GE.1) THEN DO JL=1, NMOD_IFN - CALL BUDGET ( PIFS(:,:,:,JL)*PRHODJ(:,:,:),12+NSV_LIMA_IFN_FREE+JL-1,'HIND_BU_RSV',YDDDH, YDLDDH, YDMDDH) + CALL BUDGET_DDH ( PIFS(:,:,:,JL)*PRHODJ(:,:,:),12+NSV_LIMA_IFN_FREE+JL-1,'HIND_BU_RSV',YDDDH, YDLDDH, YDMDDH) END DO END IF END IF @@ -559,19 +559,19 @@ END DO ! ! Budget storage IF (NBUMOD==KMI .AND. LBU_ENABLE) THEN - IF (LBUDGET_TH) CALL BUDGET ( & + IF (LBUDGET_TH) CALL BUDGET_DDH ( & UNPACK(ZTHS(:),MASK=GNEGT(:,:,:),FIELD=PTHS)*PRHODJ(:,:,:),& 4,'HINC_BU_RTH',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RC) CALL BUDGET ( & + IF (LBUDGET_RC) CALL BUDGET_DDH ( & UNPACK(ZRCS(:),MASK=GNEGT(:,:,:),FIELD=PRCS)*PRHODJ(:,:,:),& 7,'HINC_BU_RRC',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RI) CALL BUDGET ( & + IF (LBUDGET_RI) CALL BUDGET_DDH ( & UNPACK(ZRIS(:),MASK=GNEGT(:,:,:),FIELD=PRIS)*PRHODJ(:,:,:),& 9,'HINC_BU_RRI',YDDDH, YDLDDH, YDMDDH) IF (LBUDGET_SV) THEN - CALL BUDGET ( UNPACK(ZCCS(:),MASK=GNEGT(:,:,:),FIELD=PCCS)*PRHODJ(:,:,:),& + CALL BUDGET_DDH ( UNPACK(ZCCS(:),MASK=GNEGT(:,:,:),FIELD=PCCS)*PRHODJ(:,:,:),& 12+NSV_LIMA_NC,'HINC_BU_RSV',YDDDH, YDLDDH, YDMDDH) - CALL BUDGET ( UNPACK(ZCIS(:),MASK=GNEGT(:,:,:),FIELD=PCIS)*PRHODJ(:,:,:),& + CALL BUDGET_DDH ( UNPACK(ZCIS(:),MASK=GNEGT(:,:,:),FIELD=PCIS)*PRHODJ(:,:,:),& 12+NSV_LIMA_NI,'HINC_BU_RSV',YDDDH, YDLDDH, YDMDDH) END IF END IF @@ -644,26 +644,26 @@ ELSE ! Advance the budget calls ! IF (NBUMOD==KMI .AND. LBU_ENABLE) THEN - IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)*PRHODJ(:,:,:),4,'HIND_BU_RTH',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RV) CALL BUDGET (PRVS(:,:,:)*PRHODJ(:,:,:),6,'HIND_BU_RRV',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RI) CALL BUDGET (PRIS(:,:,:)*PRHODJ(:,:,:),9,'HIND_BU_RRI',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_TH) CALL BUDGET_DDH (PTHS(:,:,:)*PRHODJ(:,:,:),4,'HIND_BU_RTH',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_RV) CALL BUDGET_DDH (PRVS(:,:,:)*PRHODJ(:,:,:),6,'HIND_BU_RRV',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_RI) CALL BUDGET_DDH (PRIS(:,:,:)*PRHODJ(:,:,:),9,'HIND_BU_RRI',YDDDH, YDLDDH, YDMDDH) IF (LBUDGET_SV) THEN !print*, 'LBUDGET_SV dans lima_phillips = ', LBUDGET_SV - CALL BUDGET (PCIS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_NI,'HIND_BU_RSV',YDDDH, YDLDDH, YDMDDH) + CALL BUDGET_DDH (PCIS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_NI,'HIND_BU_RSV',YDDDH, YDLDDH, YDMDDH) IF (NMOD_IFN.GE.1) THEN DO JL=1, NMOD_IFN - CALL BUDGET ( PIFS(:,:,:,JL)*PRHODJ(:,:,:),12+NSV_LIMA_IFN_FREE+JL-1,'HIND_BU_RSV',YDDDH, YDLDDH, YDMDDH) + CALL BUDGET_DDH ( PIFS(:,:,:,JL)*PRHODJ(:,:,:),12+NSV_LIMA_IFN_FREE+JL-1,'HIND_BU_RSV',YDDDH, YDLDDH, YDMDDH) END DO END IF END IF - IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)*PRHODJ(:,:,:),4,'HINC_BU_RTH',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RC) CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:),7,'HINC_BU_RRC',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RI) CALL BUDGET (PRIS(:,:,:)*PRHODJ(:,:,:),9,'HINC_BU_RRI',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_TH) CALL BUDGET_DDH (PTHS(:,:,:)*PRHODJ(:,:,:),4,'HINC_BU_RTH',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_RC) CALL BUDGET_DDH (PRCS(:,:,:)*PRHODJ(:,:,:),7,'HINC_BU_RRC',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_RI) CALL BUDGET_DDH (PRIS(:,:,:)*PRHODJ(:,:,:),9,'HINC_BU_RRI',YDDDH, YDLDDH, YDMDDH) IF (LBUDGET_SV) THEN !print*, 'LBUDGET_SV dans lima_phillips = ', LBUDGET_SV - CALL BUDGET (PCCS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_NC,'HINC_BU_RSV',YDDDH, YDLDDH, YDMDDH) - CALL BUDGET (PCIS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_NI,'HINC_BU_RSV',YDDDH, YDLDDH, YDMDDH) + CALL BUDGET_DDH (PCCS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_NC,'HINC_BU_RSV',YDDDH, YDLDDH, YDMDDH) + CALL BUDGET_DDH (PCIS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_NI,'HINC_BU_RSV',YDDDH, YDLDDH, YDMDDH) END IF END IF ! diff --git a/src/arome/micro/lima_phillips_ifn_nucleation.F90 b/src/arome/micro/lima_phillips_ifn_nucleation.F90 index 7f1100d55d847f7835eae86956b4bc5ab375b277..a86129119290962d62c07450ddb28a0101db6b02 100644 --- a/src/arome/micro/lima_phillips_ifn_nucleation.F90 +++ b/src/arome/micro/lima_phillips_ifn_nucleation.F90 @@ -120,7 +120,7 @@ USE MODI_LIMA_PHILLIPS_REF_SPECTRUM USE MODI_LIMA_PHILLIPS_INTEG ! USE MODD_BUDGET -USE MODI_BUDGET +USE MODI_BUDGET_DDH USE MODD_NSV, ONLY : NSV_LIMA_NC, NSV_LIMA_NI, NSV_LIMA_IFN_FREE ! ! diff --git a/src/arome/micro/lima_precip_scavenging.F90 b/src/arome/micro/lima_precip_scavenging.F90 index 808624d9855df6ade0fa8e14191d8676bf82806f..cafea718c39f7270556d40f32b3898b5b7e37bed 100644 --- a/src/arome/micro/lima_precip_scavenging.F90 +++ b/src/arome/micro/lima_precip_scavenging.F90 @@ -127,7 +127,7 @@ USE MODD_PARAM_LIMA, ONLY : NMOD_IFN, NSPECIE, XFRAC, USE MODD_PARAM_LIMA_WARM, ONLY : XCR, XDR ! USE MODD_BUDGET -USE MODI_BUDGET +USE MODI_BUDGET_DDH ! IMPLICIT NONE ! @@ -568,13 +568,13 @@ ENDDO IF (LBUDGET_SV) THEN IF (NMOD_CCN.GE.1) THEN DO JL=1, NMOD_CCN - CALL BUDGET ( PRSVS(:,:,:,NSV_LIMA_CCN_FREE+JL-1), & + CALL BUDGET_DDH ( PRSVS(:,:,:,NSV_LIMA_CCN_FREE+JL-1), & 12+NSV_LIMA_CCN_FREE+JL-1,'SCAV_BU_RSV',YDDDH, YDLDDH, YDMDDH) END DO END IF IF (NMOD_IFN.GE.1) THEN DO JL=1, NMOD_IFN - CALL BUDGET ( PRSVS(:,:,:,NSV_LIMA_IFN_FREE+JL-1), & + CALL BUDGET_DDH ( PRSVS(:,:,:,NSV_LIMA_IFN_FREE+JL-1), & 12+NSV_LIMA_IFN_FREE+JL-1,'SCAV_BU_RSV',YDDDH, YDLDDH, YDMDDH) END DO END IF diff --git a/src/arome/micro/lima_warm.F90 b/src/arome/micro/lima_warm.F90 index 0d9eb83125c74a8f27a273ee819c8fb0c4d1572e..1a74e7b2ef6d0b044332adc5c93d7e8ed447f440 100644 --- a/src/arome/micro/lima_warm.F90 +++ b/src/arome/micro/lima_warm.F90 @@ -146,7 +146,7 @@ USE MODD_NSV ! ! USE MODD_BUDGET -USE MODI_BUDGET +USE MODI_BUDGET_DDH ! USE MODE_FM USE MODE_FMWRIT @@ -337,12 +337,12 @@ CALL LIMA_WARM_SEDIMENTATION (OSEDC, KSPLITR, PTSTEP, KMI, & PINPRR3D ) ! IF (LBUDGET_RC .AND. OSEDC) & - CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:),7 ,'SEDI_BU_RRC',YDDDH, YDLDDH, YDMDDH) -IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:)*PRHODJ(:,:,:),8 ,'SEDI_BU_RRR',YDDDH, YDLDDH, YDMDDH) + CALL BUDGET_DDH (PRCS(:,:,:)*PRHODJ(:,:,:),7 ,'SEDI_BU_RRC',YDDDH, YDLDDH, YDMDDH) +IF (LBUDGET_RR) CALL BUDGET_DDH (PRRS(:,:,:)*PRHODJ(:,:,:),8 ,'SEDI_BU_RRR',YDDDH, YDLDDH, YDMDDH) IF (LBUDGET_SV) THEN - IF (OSEDC) CALL BUDGET (PCCS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_NC,& + IF (OSEDC) CALL BUDGET_DDH (PCCS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_NC,& &'SEDI_BU_RSV',YDDDH, YDLDDH, YDMDDH) ! RCC - IF (ORAIN) CALL BUDGET (PCRS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_NR,& + IF (ORAIN) CALL BUDGET_DDH (PCRS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_NR,& &'SEDI_BU_RSV',YDDDH, YDLDDH, YDMDDH) ! RCR END IF ! @@ -360,14 +360,14 @@ IF (LACTI_LIMA) THEN PRCM, PRVT, PRCT, PRRT, & PTHS, PRVS, PRCS, PCCS, PNFS, PNAS ) ! - IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)*PRHODJ(:,:,:),4,'HENU_BU_RTH',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RV) CALL BUDGET (PRVS(:,:,:)*PRHODJ(:,:,:),6,'HENU_BU_RRV',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RC) CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:),7,'HENU_BU_RRC',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_TH) CALL BUDGET_DDH (PTHS(:,:,:)*PRHODJ(:,:,:),4,'HENU_BU_RTH',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_RV) CALL BUDGET_DDH (PRVS(:,:,:)*PRHODJ(:,:,:),6,'HENU_BU_RRV',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_RC) CALL BUDGET_DDH (PRCS(:,:,:)*PRHODJ(:,:,:),7,'HENU_BU_RRC',YDDDH, YDLDDH, YDMDDH) IF (LBUDGET_SV) THEN - CALL BUDGET (PCCS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_NC,'HENU_BU_RSV',YDDDH, YDLDDH, YDMDDH) ! RCN + CALL BUDGET_DDH (PCCS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_NC,'HENU_BU_RSV',YDDDH, YDLDDH, YDMDDH) ! RCN IF (NMOD_CCN.GE.1) THEN DO JL=1, NMOD_CCN - CALL BUDGET ( PNFS(:,:,:,JL)*PRHODJ(:,:,:),12+NSV_LIMA_CCN_FREE+JL-1,'HENU_BU_RSV',YDDDH, YDLDDH, YDMDDH) + CALL BUDGET_DDH ( PNFS(:,:,:,JL)*PRHODJ(:,:,:),12+NSV_LIMA_CCN_FREE+JL-1,'HENU_BU_RSV',YDDDH, YDLDDH, YDMDDH) END DO END IF END IF @@ -403,12 +403,12 @@ IF (ORAIN) THEN PRVS, PRCS, PRRS, PCCS, PCRS, PTHS, & PEVAP3D ) ! - IF (LBUDGET_RV) CALL BUDGET (PRVS(:,:,:)*PRHODJ(:,:,:),6 ,'REVA_BU_RRV',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RC) CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:),7 ,'REVA_BU_RRC',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:)*PRHODJ(:,:,:),8 ,'REVA_BU_RRR',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)*PRHODJ(:,:,:),4 ,'REVA_BU_RTH',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_SV) CALL BUDGET (PCCS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_NC,'REVA_BU_RSV',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_SV) CALL BUDGET (PCRS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_NR,'REVA_BU_RSV',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_RV) CALL BUDGET_DDH (PRVS(:,:,:)*PRHODJ(:,:,:),6 ,'REVA_BU_RRV',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_RC) CALL BUDGET_DDH (PRCS(:,:,:)*PRHODJ(:,:,:),7 ,'REVA_BU_RRC',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_RR) CALL BUDGET_DDH (PRRS(:,:,:)*PRHODJ(:,:,:),8 ,'REVA_BU_RRR',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_TH) CALL BUDGET_DDH (PTHS(:,:,:)*PRHODJ(:,:,:),4 ,'REVA_BU_RTH',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_SV) CALL BUDGET_DDH (PCCS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_NC,'REVA_BU_RSV',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_SV) CALL BUDGET_DDH (PCRS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_NR,'REVA_BU_RSV',YDDDH, YDLDDH, YDMDDH) ! ! !------------------------------------------------------------------------------- @@ -428,7 +428,7 @@ IF (ORAIN) THEN ! ! Budget storage IF (LBUDGET_SV) & - CALL BUDGET (PCRS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_NR,& + CALL BUDGET_DDH (PCRS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_NR,& &'BRKU_BU_RSV',YDDDH, YDLDDH, YDMDDH) ! diff --git a/src/arome/micro/lima_warm_coal.F90 b/src/arome/micro/lima_warm_coal.F90 index 9980b3785324830f0292f581dff6f3d45c5f751c..b71c5476cb770ee3c772e1c391dc6632951cd6b2 100644 --- a/src/arome/micro/lima_warm_coal.F90 +++ b/src/arome/micro/lima_warm_coal.F90 @@ -117,7 +117,7 @@ USE MODD_PARAM_LIMA_WARM ! USE MODD_NSV, ONLY : NSV_LIMA_NC, NSV_LIMA_NR USE MODD_BUDGET -USE MODI_BUDGET +USE MODI_BUDGET_DDH ! USE MODI_LIMA_FUNCTIONS, ONLY : COUNTJV ! @@ -280,7 +280,7 @@ IF( IMICRO >= 1 ) THEN ! ! ZW(:,:,:) = PCCS(:,:,:) - IF (LBUDGET_SV) CALL BUDGET ( & + IF (LBUDGET_SV) CALL BUDGET_DDH ( & UNPACK(ZCCS(:),MASK=GMICRO(:,:,:),FIELD=ZW(:,:,:))& &*PRHODJ(:,:,:),12+NSV_LIMA_NC,'SELF_BU_RSV',YDDDH, YDLDDH, YDMDDH) ! @@ -316,21 +316,21 @@ IF (LRAIN_LIMA) THEN ! ! ZW(:,:,:) = PRCS(:,:,:) - IF (LBUDGET_RC) CALL BUDGET ( & + IF (LBUDGET_RC) CALL BUDGET_DDH ( & UNPACK(ZRCS(:),MASK=GMICRO(:,:,:),FIELD=ZW(:,:,:)) & *PRHODJ(:,:,:),7 ,'AUTO_BU_RRC',YDDDH, YDLDDH, YDMDDH) ZW(:,:,:) = PRRS(:,:,:) - IF (LBUDGET_RR) CALL BUDGET ( & + IF (LBUDGET_RR) CALL BUDGET_DDH ( & UNPACK(ZRRS(:),MASK=GMICRO(:,:,:),FIELD=ZW(:,:,:)) & *PRHODJ(:,:,:),8 ,'AUTO_BU_RRR',YDDDH, YDLDDH, YDMDDH) ZW(:,:,:) = PCRS(:,:,:) IF (LBUDGET_SV) THEN ZW(:,:,:) = PCRS(:,:,:) - CALL BUDGET (UNPACK(ZCRS(:),MASK=GMICRO(:,:,:),FIELD=ZW(:,:,:)) & + CALL BUDGET_DDH (UNPACK(ZCRS(:),MASK=GMICRO(:,:,:),FIELD=ZW(:,:,:)) & *PRHODJ(:,:,:),12+NSV_LIMA_NR,'AUTO_BU_RSV',YDDDH, YDLDDH, YDMDDH) ZW(:,:,:) = PCCS(:,:,:) - CALL BUDGET (UNPACK(ZCCS(:),MASK=GMICRO(:,:,:),FIELD=ZW(:,:,:)) & + CALL BUDGET_DDH (UNPACK(ZCCS(:),MASK=GMICRO(:,:,:),FIELD=ZW(:,:,:)) & *PRHODJ(:,:,:),12+NSV_LIMA_NC,'AUTO_BU_RSV',YDDDH, YDLDDH, YDMDDH) END IF ! @@ -382,15 +382,15 @@ IF (LRAIN_LIMA) THEN ! ! ZW(:,:,:) = PRCS(:,:,:) - IF (LBUDGET_RC) CALL BUDGET ( & + IF (LBUDGET_RC) CALL BUDGET_DDH ( & UNPACK(ZRCS(:),MASK=GMICRO(:,:,:),FIELD=ZW(:,:,:)) & *PRHODJ(:,:,:),7 ,'ACCR_BU_RRC',YDDDH, YDLDDH, YDMDDH) ZW(:,:,:) = PRRS(:,:,:) - IF (LBUDGET_RR) CALL BUDGET ( & + IF (LBUDGET_RR) CALL BUDGET_DDH ( & UNPACK(ZRRS(:),MASK=GMICRO(:,:,:),FIELD=ZW(:,:,:)) & *PRHODJ(:,:,:),8 ,'ACCR_BU_RRR',YDDDH, YDLDDH, YDMDDH) ZW(:,:,:) = PCCS(:,:,:) - IF (LBUDGET_SV) CALL BUDGET ( & + IF (LBUDGET_SV) CALL BUDGET_DDH ( & UNPACK(ZCCS(:),MASK=GMICRO(:,:,:),FIELD=ZW(:,:,:)) & *PRHODJ(:,:,:),12+NSV_LIMA_NC,'ACCR_BU_RSV',YDDDH, YDLDDH, YDMDDH) ! @@ -440,7 +440,7 @@ IF (LRAIN_LIMA) THEN ! ! ZW(:,:,:) = PCRS(:,:,:) - IF (LBUDGET_SV) CALL BUDGET ( & + IF (LBUDGET_SV) CALL BUDGET_DDH ( & UNPACK(ZCRS(:),MASK=GMICRO(:,:,:),FIELD=ZW(:,:,:)) & *PRHODJ(:,:,:),12+NSV_LIMA_NR,'SCBU_BU_RSV',YDDDH, YDLDDH, YDMDDH) ! @@ -493,18 +493,18 @@ ELSE ! ------------------------ ! ! - IF (LBUDGET_SV) CALL BUDGET (PCCS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_NC,'SELF_BU_RSV',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_SV) CALL BUDGET_DDH (PCCS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_NC,'SELF_BU_RSV',YDDDH, YDLDDH, YDMDDH) ! - IF (LBUDGET_RC) CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:),7 ,'AUTO_BU_RRC',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:)*PRHODJ(:,:,:),8 ,'AUTO_BU_RRR',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_SV) CALL BUDGET (PCRS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_NR,'AUTO_BU_RSV',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_SV) CALL BUDGET (PCCS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_NC,'AUTO_BU_RSV',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_RC) CALL BUDGET_DDH (PRCS(:,:,:)*PRHODJ(:,:,:),7 ,'AUTO_BU_RRC',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_RR) CALL BUDGET_DDH (PRRS(:,:,:)*PRHODJ(:,:,:),8 ,'AUTO_BU_RRR',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_SV) CALL BUDGET_DDH (PCRS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_NR,'AUTO_BU_RSV',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_SV) CALL BUDGET_DDH (PCCS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_NC,'AUTO_BU_RSV',YDDDH, YDLDDH, YDMDDH) ! - IF (LBUDGET_RC) CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:),7 ,'ACCR_BU_RRC',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:)*PRHODJ(:,:,:),8 ,'ACCR_BU_RRR',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_SV) CALL BUDGET (PCCS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_NC,'ACCR_BU_RSV',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_RC) CALL BUDGET_DDH (PRCS(:,:,:)*PRHODJ(:,:,:),7 ,'ACCR_BU_RRC',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_RR) CALL BUDGET_DDH (PRRS(:,:,:)*PRHODJ(:,:,:),8 ,'ACCR_BU_RRR',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_SV) CALL BUDGET_DDH (PCCS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_NC,'ACCR_BU_RSV',YDDDH, YDLDDH, YDMDDH) ! - IF (LBUDGET_SV) CALL BUDGET (PCRS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_NR,'SCBU_BU_RSV',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_SV) CALL BUDGET_DDH (PCRS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_NR,'SCBU_BU_RSV',YDDDH, YDLDDH, YDMDDH) END IF ! IMICRO ! diff --git a/src/arome/micro/modi_rain_ice.F90 b/src/arome/micro/modi_rain_ice.F90 deleted file mode 100644 index d1b7e3edd7c731ff30f4f9bc5166c18096a5c5c1..0000000000000000000000000000000000000000 --- a/src/arome/micro/modi_rain_ice.F90 +++ /dev/null @@ -1,86 +0,0 @@ -! ######spl - MODULE MODI_RAIN_ICE -! #################### -! -INTERFACE - SUBROUTINE RAIN_ICE ( KIT, KJT, KKT, KSIZE, & - OSEDIC,OCND2, HSEDIM, HSUBG_AUCV_RC, OWARM, KKA, KKU, KKL, & - PTSTEP, KRR, LDMICRO, PEXN, & - PDZZ, PRHODJ, PRHODREF, PEXNREF, PPABST, PCIT, PCLDFR,& - PTHT, PRVT, PRCT, PRRT, PRIT, PRST, & - PRGT, PTHS, PRVS, PRCS, PRRS, PRIS, PRSS, PRGS, & - PINPRC, PINPRR, PEVAP3D, & - PINPRS, PINPRG, PSIGS, PSEA, PTOWN, & - PRHT, PRHS, PINPRH, PFPR, & - YDDDH, YDLDDH, YDMDDH ) -! -USE DDH_MIX, ONLY : TYP_DDH -USE YOMLDDH, ONLY : TLDDH -USE YOMMDDH, ONLY : TMDDH -! -INTEGER, INTENT(IN) :: KIT, KJT, KKT ! arrays size -INTEGER, INTENT(IN) :: KSIZE -LOGICAL, INTENT(IN) :: OSEDIC ! Switch for droplet sedim. -LOGICAL :: OCND2 ! Logical switch to separate liquid and ice -CHARACTER(LEN=4), INTENT(IN) :: HSEDIM ! Sedimentation scheme -CHARACTER(LEN=4), INTENT(IN) :: HSUBG_AUCV_RC ! Switch for rc->rr Subgrid autoconversion - ! Kind of Subgrid autoconversion method -LOGICAL, INTENT(IN) :: OWARM ! .TRUE. allows raindrops to - ! form by warm processes - ! (Kessler scheme) -! -INTEGER, INTENT(IN) :: KKA !near ground array index -INTEGER, INTENT(IN) :: KKU !uppest atmosphere array index -INTEGER, INTENT(IN) :: KKL !vert. levels type 1=MNH -1=ARO -REAL, INTENT(IN) :: PTSTEP ! Double Time step - ! (single if cold start) -INTEGER, INTENT(IN) :: KRR ! Number of moist variable -LOGICAL, DIMENSION(KIT,KJT,KKT), INTENT(IN) :: LDMICRO ! mask to limit computation -! -REAL, DIMENSION(KIT,KJT,KKT), INTENT(IN) :: PEXN ! Exner function -REAL, DIMENSION(KIT,KJT,KKT), INTENT(IN) :: PDZZ ! Layer thikness (m) -REAL, DIMENSION(KIT,KJT,KKT), INTENT(IN) :: PRHODJ ! Dry density * Jacobian -REAL, DIMENSION(KIT,KJT,KKT), INTENT(IN) :: PRHODREF! Reference density -REAL, DIMENSION(KIT,KJT,KKT), INTENT(IN) :: PEXNREF ! Reference Exner function -REAL, DIMENSION(KIT,KJT,KKT), INTENT(IN) :: PPABST ! absolute pressure at t -! -REAL, DIMENSION(KIT,KJT,KKT), INTENT(INOUT) :: PCIT ! Pristine ice n.c. at t -REAL, DIMENSION(KIT,KJT,KKT), INTENT(IN) :: PCLDFR ! Cloud fraction -! -REAL, DIMENSION(KIT,KJT,KKT), INTENT(IN) :: PTHT ! Theta at time t -REAL, DIMENSION(KIT,KJT,KKT), INTENT(IN) :: PRVT ! Water vapor m.r. at t -REAL, DIMENSION(KIT,KJT,KKT), INTENT(IN) :: PRCT ! Cloud water m.r. at t -REAL, DIMENSION(KIT,KJT,KKT), INTENT(IN) :: PRRT ! Rain water m.r. at t -REAL, DIMENSION(KIT,KJT,KKT), INTENT(IN) :: PRIT ! Pristine ice m.r. at t -REAL, DIMENSION(KIT,KJT,KKT), INTENT(IN) :: PRST ! Snow/aggregate m.r. at t -REAL, DIMENSION(KIT,KJT,KKT), INTENT(IN) :: PRGT ! Graupel/hail m.r. at t -! -REAL, DIMENSION(KIT,KJT,KKT), INTENT(IN) :: PSIGS ! Sigma_s at t -! -REAL, DIMENSION(KIT,KJT,KKT), INTENT(INOUT) :: PTHS ! Theta source -REAL, DIMENSION(KIT,KJT,KKT), INTENT(INOUT) :: PRVS ! Water vapor m.r. source -REAL, DIMENSION(KIT,KJT,KKT), INTENT(INOUT) :: PRCS ! Cloud water m.r. source -REAL, DIMENSION(KIT,KJT,KKT), INTENT(INOUT) :: PRRS ! Rain water m.r. source -REAL, DIMENSION(KIT,KJT,KKT), INTENT(INOUT) :: PRIS ! Pristine ice m.r. source -REAL, DIMENSION(KIT,KJT,KKT), INTENT(INOUT) :: PRSS ! Snow/aggregate m.r. source -REAL, DIMENSION(KIT,KJT,KKT), INTENT(INOUT) :: PRGS ! Graupel m.r. source - -! -REAL, DIMENSION(KIT,KJT), INTENT(OUT) :: PINPRC! Cloud instant precip -REAL, DIMENSION(KIT,KJT), INTENT(OUT) :: PINPRR! Rain instant precip -REAL, DIMENSION(KIT,KJT,KKT), INTENT(OUT) :: PEVAP3D! Rain evap profile -REAL, DIMENSION(KIT,KJT), INTENT(OUT) :: PINPRS! Snow instant precip -REAL, DIMENSION(KIT,KJT), INTENT(OUT) :: PINPRG! Graupel instant precip -REAL, DIMENSION(KIT,KJT), OPTIONAL, INTENT(IN) :: PSEA ! Sea Mask -REAL, DIMENSION(KIT,KJT), OPTIONAL, INTENT(IN) :: PTOWN! Fraction that is town -REAL, DIMENSION(KIT,KJT,KKT), OPTIONAL, INTENT(IN) :: PRHT ! Hail m.r. at t -REAL, DIMENSION(KIT,KJT,KKT), OPTIONAL, INTENT(INOUT) :: PRHS ! Hail m.r. source -REAL, DIMENSION(KIT,KJT), OPTIONAL, INTENT(OUT) :: PINPRH! Hail instant precip -REAL, DIMENSION(KIT,KJT,KKT,KRR), OPTIONAL, INTENT(OUT) :: PFPR ! upper-air precipitation fluxes -TYPE(TYP_DDH), INTENT(INOUT) :: YDDDH -TYPE(TLDDH), INTENT(IN) :: YDLDDH -TYPE(TMDDH), INTENT(IN) :: YDMDDH -! -END SUBROUTINE RAIN_ICE -END INTERFACE -END MODULE MODI_RAIN_ICE diff --git a/src/arome/micro/rain_ice.F90 b/src/arome/micro/rain_ice.F90 deleted file mode 100644 index 74aa8152e665f9f7e53e83bef85ed7ef042a74a5..0000000000000000000000000000000000000000 --- a/src/arome/micro/rain_ice.F90 +++ /dev/null @@ -1,1837 +0,0 @@ -!MNH_LIC Copyright 1995-2021 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. -!----------------------------------------------------------------- -! ######spl - SUBROUTINE RAIN_ICE ( KIT, KJT, KKT, KSIZE, & - OSEDIC, OCND2, HSEDIM, HSUBG_AUCV_RC, OWARM,KKA,KKU,KKL,& - PTSTEP, KRR, ODMICRO, PEXN, & - PDZZ, PRHODJ, PRHODREF, PEXNREF, PPABST, PCIT, PCLDFR,& - PTHT, PRVT, PRCT, PRRT, PRIT, PRST, & - PRGT, PTHS, PRVS, PRCS, PRRS, PRIS, PRSS, PRGS, & - PINPRC, PINPRR, PEVAP3D, & - PINPRS, PINPRG, PSIGS, PSEA, PTOWN, & - PRHT, PRHS, PINPRH, PFPR, & - YDDDH, YDLDDH, YDMDDH ) - USE PARKIND1, ONLY : JPRB - USE YOMHOOK , ONLY : LHOOK, DR_HOOK -! ###################################################################### -! -!!**** * - compute the explicit microphysical sources -!! -!! PURPOSE -!! ------- -!! The purpose of this routine is to compute the slow microphysical sources -!! which can be computed explicitly -!! -!! -!!** METHOD -!! ------ -!! The autoconversion computation follows Kessler (1969). -!! The sedimentation rate is computed with a time spliting technique and -!! an upstream scheme, written as a difference of non-advective fluxes. This -!! source term is added to the future instant ( split-implicit process ). -!! The others microphysical processes are evaluated at the central instant -!! (split-explicit process ): autoconversion, accretion and rain evaporation. -!! These last 3 terms are bounded in order not to create negative values -!! for the water species at the future instant. -!! -!! EXTERNAL -!! -------- -!! None -!! -!! -!! IMPLICIT ARGUMENTS -!! ------------------ -!! Module MODD_PARAMETERS -!! JPHEXT : Horizontal external points number -!! JPVEXT : Vertical external points number -!! Module MODD_CONF : -!! CCONF configuration of the model for the first time step -!! Module MODD_CST -!! XP00 ! Reference pressure -!! XRD,XRV ! Gaz constant for dry air, vapor -!! XMD,XMV ! Molecular weight for dry air, vapor -!! XCPD ! Cpd (dry air) -!! XCL ! Cl (liquid) -!! XCI ! Ci (solid) -!! XTT ! Triple point temperature -!! XLVTT ! Vaporization heat constant -!! XALPW,XBETAW,XGAMW ! Constants for saturation vapor pressure -!! function over liquid water -!! XALPI,XBETAI,XGAMI ! Constants for saturation vapor pressure -!! function over solid ice -!! Module MODD_BUDGET: -!! NBUMOD : model in which budget is calculated -!! CBUTYPE : type of desired budget -!! 'CART' for cartesian box configuration -!! 'MASK' for budget zone defined by a mask -!! 'NONE' ' for no budget -!! LBU_RTH : logical for budget of RTH (potential temperature) -!! .TRUE. = budget of RTH -!! .FALSE. = no budget of RTH -!! LBU_RRV : logical for budget of RRV (water vapor) -!! .TRUE. = budget of RRV -!! .FALSE. = no budget of RRV -!! LBU_RRC : logical for budget of RRC (cloud water) -!! .TRUE. = budget of RRC -!! .FALSE. = no budget of RRC -!! LBU_RRI : logical for budget of RRI (cloud ice) -!! .TRUE. = budget of RRI -!! .FALSE. = no budget of RRI -!! LBU_RRR : logical for budget of RRR (rain water) -!! .TRUE. = budget of RRR -!! .FALSE. = no budget of RRR -!! LBU_RRS : logical for budget of RRS (aggregates) -!! .TRUE. = budget of RRS -!! .FALSE. = no budget of RRS -!! LBU_RRG : logical for budget of RRG (graupeln) -!! .TRUE. = budget of RRG -!! .FALSE. = no budget of RRG -!! -!! REFERENCE -!! --------- -!! -!! Book1 and Book2 of documentation ( routine RAIN_ICE ) -!! -!! AUTHOR -!! ------ -!! J.-P. Pinty * Laboratoire d'Aerologie* -!! -!! MODIFICATIONS -!! ------------- -!! Original 02/11/95 -!! (J.Viviand) 04/02/97 debug accumulated prcipitation & convert -!! precipitation rate in m/s -!! (J.-P. Pinty) 17/02/97 add budget calls -!! (J.-P. Pinty) 17/11/97 set ice sedim. for cirrus ice, reset RCHONI -!! and RRHONG, reverse order for DEALLOCATE -!! (J.-P. Pinty) 11/02/98 correction of the air dynamical viscosity and -!! add advance of the budget calls -!! (J.-P. Pinty) 18/05/98 correction of the air density in the RIAUTS -!! process -!! (J.-P. Pinty) 18/11/98 split the main routine -!! (V. Masson) 18/11/98 bug in IVEC1 and IVEC2 upper limits -!! (J. Escobar & J.-P. Pinty) -!! 11/12/98 contains and rewrite count+pack -!! (J. Stein & J.-P. Pinty) -!! 14/10/99 correction for very small RIT -!! (J. Escobar & J.-P. Pinty) -!! 24/07/00 correction for very samll m.r. in -!! the sedimentation subroutine -!! (M. Tomasini) 11/05/01 Autoconversion of rc into rr modification to take -!! into account the subgrid variance -!! (cf Redelsperger & Sommeria JAS 86) -!! (G. Molinie) 21/05/99 bug in RRCFRIG process, RHODREF**(-1) missing -!! in RSRIMCG -!! (G. Molinie & J.-P. Pinty) -!! 21/06/99 bug in RACCS process -!! (P. Jabouille) 27/05/04 safety test for case where esw/i(T)> pabs (~Z>40km) -!! (J-.P. Chaboureau) 12/02/05 temperature depending ice-to-snow autocon- -! version threshold (Chaboureau and Pinty GRL 2006) -!! (J.-P. Pinty) 01/01/O1 add the hail category and correction of the -!! wet growth rate of the graupeln -!! (S.Remy & C.Lac) 06/06 Add the cloud sedimentation -!! (S.Remy & C.Lac) 06/06 Sedimentation becoming the last process -!! to settle the precipitating species created during the current time step -!! (S.Remy & C.Lac) 06/06 Modification of the algorithm of sedimentation -!! to settle n times the precipitating species created during Dt/n instead -!! of Dt -!! (C.Lac) 11/06 Optimization of the sedimentation loop for NEC -!! (J.Escobar) 18/01/2008 Parallel Bug in Budget when IMICRO >= 1 -!! --> Path inhibit this test by IMICRO >= 0 allway true -!! (Y.Seity) 03/2008 Add Statistic sedimentation -!! (Y.Seity) 10/2009 Added condition for the raindrop accretion of the aggregates -!! into graupeln process (5.2.6) to avoid negative graupel mixing ratio -!! (V.Masson, C.Lac) 09/2010 Correction in split sedimentation for -!! reproducibility -!! (S. Riette) Oct 2010 Better vectorisation of RAIN_ICE_SEDIMENTATION_STAT -!! (Y. Seity), 02-2012 add possibility to run with reversed vertical levels -!! (L. Bengtsson), 02-2013 Passing in land/sea mask and town fraction in -!! order to use different cloud droplet number conc. over -!! land, sea and urban areas in the cloud sedimentation. -!! (D. Degrauwe), 2013-11: Export upper-air precipitation fluxes PFPR. -!! (S. Riette) Nov 2013 Protection against null sigma -!! (C. Abiven, Y. Léauté, V. Seigner, S. Riette) Phasing of Turner rain subgrid param -!! (S. Riette) Source code split into several files -! -!* 0. DECLARATIONS -! ------------ -! -USE MODD_CST, ONLY: XCI, XCL, XCPD, XCPV, XLSTT, XLVTT, XTT, XRHOLW -USE MODD_PARAMETERS, ONLY: JPVEXT, XUNDEF -USE MODD_PARAM_ICE, ONLY: CSUBG_PR_PDF, CSUBG_RC_RR_ACCR, CSUBG_RR_EVAP, LDEPOSC, LFEEDBACKT, LSEDIM_AFTER, & - & NMAXITER, XMRSTEP, XTSTEP_TS, XVDEPOSC -USE MODD_RAIN_ICE_DESCR, ONLY: XRTMIN -USE MODD_RAIN_ICE_PARAM -USE MODD_FIELDS_ADDRESS, ONLY : & ! common fields adress - & ITH, & ! Potential temperature - & IRV, & ! Water vapor - & IRC, & ! Cloud water - & IRR, & ! Rain water - & IRI, & ! Pristine ice - & IRS, & ! Snow/aggregate - & IRG, & ! Graupel - & IRH ! Hail -USE MODD_BUDGET -USE MODD_LES -USE MODI_BUDGET -USE MODI_ICE4_RAINFR_VERT -USE MODE_ICE4_SEDIMENTATION_STAT, ONLY: ICE4_SEDIMENTATION_STAT -USE MODE_ICE4_SEDIMENTATION_SPLIT, ONLY: ICE4_SEDIMENTATION_SPLIT -USE MODE_ICE4_SEDIMENTATION_SPLIT_MOMENTUM, ONLY: ICE4_SEDIMENTATION_SPLIT_MOMENTUM -USE MODE_ICE4_NUCLEATION_WRAPPER, ONLY: ICE4_NUCLEATION_WRAPPER -USE MODE_ICE4_TENDENCIES, ONLY: ICE4_TENDENCIES -USE DDH_MIX, ONLY : TYP_DDH -USE YOMLDDH, ONLY : TLDDH -USE YOMMDDH, ONLY : TMDDH -! -IMPLICIT NONE -! -!* 0.1 Declarations of dummy arguments : -! -! -! -INTEGER, INTENT(IN) :: KIT, KJT, KKT ! arrays size -INTEGER, INTENT(IN) :: KSIZE -LOGICAL, INTENT(IN) :: OSEDIC ! Switch for droplet sedim. -LOGICAL :: OCND2 ! Logical switch to separate liquid and ice -CHARACTER(LEN=4), INTENT(IN) :: HSEDIM ! Sedimentation scheme -CHARACTER(LEN=4), INTENT(IN) :: HSUBG_AUCV_RC ! Kind of Subgrid autoconversion method -LOGICAL, INTENT(IN) :: OWARM ! .TRUE. allows raindrops to - ! form by warm processes - ! (Kessler scheme) -INTEGER, INTENT(IN) :: KKA !near ground array index -INTEGER, INTENT(IN) :: KKU !uppest atmosphere array index -INTEGER, INTENT(IN) :: KKL !vert. levels type 1=MNH -1=ARO -REAL, INTENT(IN) :: PTSTEP ! Double Time step (single if cold start) -INTEGER, INTENT(IN) :: KRR ! Number of moist variable -LOGICAL, DIMENSION(KIT,KJT,KKT), INTENT(IN) :: ODMICRO ! mask to limit computation -! -REAL, DIMENSION(KIT,KJT,KKT), INTENT(IN) :: PEXN ! Exner function -REAL, DIMENSION(KIT,KJT,KKT), INTENT(IN) :: PDZZ ! Layer thikness (m) -REAL, DIMENSION(KIT,KJT,KKT), INTENT(IN) :: PRHODJ ! Dry density * Jacobian -REAL, DIMENSION(KIT,KJT,KKT), INTENT(IN) :: PRHODREF! Reference density -REAL, DIMENSION(KIT,KJT,KKT), INTENT(IN) :: PEXNREF ! Reference Exner function -REAL, DIMENSION(KIT,KJT,KKT), INTENT(IN) :: PPABST ! absolute pressure at t -! -REAL, DIMENSION(KIT,KJT,KKT), INTENT(INOUT) :: PCIT ! Pristine ice n.c. at t -REAL, DIMENSION(KIT,KJT,KKT), INTENT(IN) :: PCLDFR ! Convective Mass Flux Cloud fraction -REAL, DIMENSION(KIT,KJT,KKT), INTENT(IN) :: PTHT ! Theta at time t -REAL, DIMENSION(KIT,KJT,KKT), INTENT(IN) :: PRVT ! Water vapor m.r. at t -REAL, DIMENSION(KIT,KJT,KKT), INTENT(IN) :: PRCT ! Cloud water m.r. at t -REAL, DIMENSION(KIT,KJT,KKT), INTENT(IN) :: PRRT ! Rain water m.r. at t -REAL, DIMENSION(KIT,KJT,KKT), INTENT(IN) :: PRIT ! Pristine ice m.r. at t -REAL, DIMENSION(KIT,KJT,KKT), INTENT(IN) :: PRST ! Snow/aggregate m.r. at t -REAL, DIMENSION(KIT,KJT,KKT), INTENT(IN) :: PRGT ! Graupel/hail m.r. at t -REAL, DIMENSION(KIT,KJT,KKT), INTENT(IN) :: PSIGS ! Sigma_s at t -! -REAL, DIMENSION(KIT,KJT,KKT), INTENT(INOUT) :: PTHS ! Theta source -REAL, DIMENSION(KIT,KJT,KKT), INTENT(INOUT) :: PRVS ! Water vapor m.r. source -REAL, DIMENSION(KIT,KJT,KKT), INTENT(INOUT) :: PRCS ! Cloud water m.r. source -REAL, DIMENSION(KIT,KJT,KKT), INTENT(INOUT) :: PRRS ! Rain water m.r. source -REAL, DIMENSION(KIT,KJT,KKT), INTENT(INOUT) :: PRIS ! Pristine ice m.r. source -REAL, DIMENSION(KIT,KJT,KKT), INTENT(INOUT) :: PRSS ! Snow/aggregate m.r. source -REAL, DIMENSION(KIT,KJT,KKT), INTENT(INOUT) :: PRGS ! Graupel m.r. source -! -REAL, DIMENSION(KIT,KJT), INTENT(OUT) :: PINPRC! Cloud instant precip -REAL, DIMENSION(KIT,KJT), INTENT(OUT) :: PINPRR! Rain instant precip -REAL, DIMENSION(KIT,KJT,KKT), INTENT(OUT) :: PEVAP3D! Rain evap profile -REAL, DIMENSION(KIT,KJT), INTENT(OUT) :: PINPRS! Snow instant precip -REAL, DIMENSION(KIT,KJT), INTENT(OUT) :: PINPRG! Graupel instant precip -REAL, DIMENSION(KIT,KJT), OPTIONAL, INTENT(IN) :: PSEA ! Sea Mask -REAL, DIMENSION(KIT,KJT), OPTIONAL, INTENT(IN) :: PTOWN! Fraction that is town -REAL, DIMENSION(KIT,KJT,KKT), OPTIONAL, INTENT(IN) :: PRHT ! Hail m.r. at t -REAL, DIMENSION(KIT,KJT,KKT), OPTIONAL, INTENT(INOUT) :: PRHS ! Hail m.r. source -REAL, DIMENSION(KIT,KJT), OPTIONAL, INTENT(OUT) :: PINPRH! Hail instant precip -REAL, DIMENSION(KIT,KJT,KKT,KRR), OPTIONAL, INTENT(OUT) :: PFPR ! upper-air precipitation fluxes -TYPE(TYP_DDH), INTENT(INOUT) :: YDDDH -TYPE(TLDDH), INTENT(IN) :: YDLDDH -TYPE(TMDDH), INTENT(IN) :: YDMDDH -! -!* 0.2 Declarations of local variables : -! -REAL(KIND=JPRB) :: ZHOOK_HANDLE -INTEGER :: IIB ! Define the domain where is -INTEGER :: IIE ! the microphysical sources have to be computed -INTEGER :: IJB ! -INTEGER :: IJE ! -INTEGER :: IKB, IKTB ! -INTEGER :: IKE, IKTE ! -! -INTEGER :: JI, JJ, JK -! -!For packing -INTEGER :: IMICRO ! Case r_x>0 locations -INTEGER, DIMENSION(KSIZE) :: I1,I2,I3 ! Used to replace the COUNT -INTEGER :: JL ! and PACK intrinsics -! -!Arrays for nucleation call outisde of ODMICRO points -REAL, DIMENSION(KIT, KJT, KKT) :: ZW ! work array -REAL, DIMENSION(KIT, KJT, KKT) :: ZT ! Temperature -REAL, DIMENSION(KIT, KJT, KKT) :: & - & ZZ_RVHENI_MR, & ! heterogeneous nucleation mixing ratio change - & ZZ_RVHENI ! heterogeneous nucleation -REAL, DIMENSION(KIT, KJT, KKT) :: ZZ_LVFACT, ZZ_LSFACT -! -!Diagnostics -REAL, DIMENSION(KIT, KJT, KKT) :: ZRAINFR, & - & ZHLC_HCF3D,& ! HLCLOUDS cloud fraction in high water content part - & ZHLC_LCF3D,& ! HLCLOUDS cloud fraction in low water content part - & ZHLC_HRC3D,& ! HLCLOUDS cloud water content in high water content - & ZHLC_LRC3D,& ! HLCLOUDS cloud water content in low water content - & ZHLI_HCF3D,& ! HLCLOUDS cloud fraction in high ice content part - & ZHLI_LCF3D,& ! HLCLOUDS cloud fraction in low ice content part - & ZHLI_HRI3D,& ! HLCLOUDS cloud water content in high ice content - & ZHLI_LRI3D ! HLCLOUDS cloud water content in high ice content -REAL, DIMENSION(SIZE(PTHT,1),SIZE(PTHT,2)) :: ZINPRI ! Pristine ice instant precip -! -!Packed variables -REAL, DIMENSION(KSIZE) :: ZRVT, & ! Water vapor m.r. at t - & ZRCT, & ! Cloud water m.r. at t - & ZRRT, & ! Rain water m.r. at t - & ZRIT, & ! Pristine ice m.r. at t - & ZRST, & ! Snow/aggregate m.r. at t - & ZRGT, & ! Graupel m.r. at t - & ZRHT, & ! Hail m.r. at t - & ZCIT, & ! Pristine ice conc. at t - & ZTHT, & ! Potential temperature - & ZRHODREF, & ! RHO Dry REFerence - & ZZT, & ! Temperature - & ZPRES, & ! Pressure - & ZEXN, & ! EXNer Pressure - & ZLSFACT, & ! L_s/(Pi*C_ph) - & ZLVFACT, & ! L_v/(Pi*C_ph) - & ZSIGMA_RC,& ! Standard deviation of rc at time t - & ZCF, & ! Cloud fraction - & ZHLC_HCF, & ! HLCLOUDS : fraction of High Cloud Fraction in grid - & ZHLC_LCF, & ! HLCLOUDS : fraction of Low Cloud Fraction in grid - ! note that ZCF = ZHLC_HCF + ZHLC_LCF - & ZHLC_HRC, & ! HLCLOUDS : LWC that is High LWC in grid - & ZHLC_LRC, & ! HLCLOUDS : LWC that is Low LWC in grid - ! note that ZRC = ZHLC_HRC + ZHLC_LRC - & ZHLI_HCF, & - & ZHLI_LCF, & - & ZHLI_HRI, & - & ZHLI_LRI -! -!Output packed tendencies (for budgets only) -REAL, DIMENSION(KSIZE) :: ZRVHENI_MR, & ! heterogeneous nucleation mixing ratio change - & ZRCHONI, & ! Homogeneous nucleation - & ZRRHONG_MR, & ! Spontaneous freezing mixing ratio change - & ZRVDEPS, & ! Deposition on r_s, - & ZRIAGGS, & ! Aggregation on r_s - & ZRIAUTS, & ! Autoconversion of r_i for r_s production - & ZRVDEPG, & ! Deposition on r_g - & ZRCAUTR, & ! Autoconversion of r_c for r_r production - & ZRCACCR, & ! Accretion of r_c for r_r production - & ZRREVAV, & ! Evaporation of r_r - & ZRIMLTC_MR, & ! Cloud ice melting mixing ratio change - & ZRCBERI, & ! Bergeron-Findeisen effect - & ZRHMLTR, & ! Melting of the hailstones - & ZRSMLTG, & ! Conversion-Melting of the aggregates - & ZRCMLTSR, & ! Cloud droplet collection onto aggregates by positive temperature - & ZRRACCSS, ZRRACCSG, ZRSACCRG, & ! Rain accretion onto the aggregates - & ZRCRIMSS, ZRCRIMSG, ZRSRIMCG, ZRSRIMCG_MR, & ! Cloud droplet riming of the aggregates - & ZRICFRRG, ZRRCFRIG, ZRICFRR, & ! Rain contact freezing - & ZRCWETG, ZRIWETG, ZRRWETG, ZRSWETG, & ! Graupel wet growth - & ZRCDRYG, ZRIDRYG, ZRRDRYG, ZRSDRYG, & ! Graupel dry growth - & ZRWETGH, & ! Conversion of graupel into hail - & ZRWETGH_MR, & ! Conversion of graupel into hail, mr change - & ZRGMLTR, & ! Melting of the graupel - & ZRCWETH, ZRIWETH, ZRSWETH, ZRGWETH, ZRRWETH, & ! Dry growth of hailstone - & ZRCDRYH, ZRIDRYH, ZRSDRYH, ZRRDRYH, ZRGDRYH, & ! Wet growth of hailstone - & ZRDRYHG ! Conversion of hailstone into graupel -! -!Output packed total mixing ratio change (for budgets only) -REAL, DIMENSION(KSIZE) :: ZTOT_RVHENI, & ! heterogeneous nucleation mixing ratio change - & ZTOT_RCHONI, & ! Homogeneous nucleation - & ZTOT_RRHONG, & ! Spontaneous freezing mixing ratio change - & ZTOT_RVDEPS, & ! Deposition on r_s, - & ZTOT_RIAGGS, & ! Aggregation on r_s - & ZTOT_RIAUTS, & ! Autoconversion of r_i for r_s production - & ZTOT_RVDEPG, & ! Deposition on r_g - & ZTOT_RCAUTR, & ! Autoconversion of r_c for r_r production - & ZTOT_RCACCR, & ! Accretion of r_c for r_r production - & ZTOT_RREVAV, & ! Evaporation of r_r - & ZTOT_RCRIMSS, ZTOT_RCRIMSG, ZTOT_RSRIMCG, & ! Cloud droplet riming of the aggregates - & ZTOT_RIMLTC, & ! Cloud ice melting mixing ratio change - & ZTOT_RCBERI, & ! Bergeron-Findeisen effect - & ZTOT_RHMLTR, & ! Melting of the hailstones - & ZTOT_RSMLTG, & ! Conversion-Melting of the aggregates - & ZTOT_RCMLTSR, & ! Cloud droplet collection onto aggregates by positive temperature - & ZTOT_RRACCSS, ZTOT_RRACCSG, ZTOT_RSACCRG, & ! Rain accretion onto the aggregates - & ZTOT_RICFRRG, ZTOT_RRCFRIG, ZTOT_RICFRR, & ! Rain contact freezing - & ZTOT_RCWETG, ZTOT_RIWETG, ZTOT_RRWETG, ZTOT_RSWETG, & ! Graupel wet growth - & ZTOT_RCDRYG, ZTOT_RIDRYG, ZTOT_RRDRYG, ZTOT_RSDRYG, & ! Graupel dry growth - & ZTOT_RWETGH, & ! Conversion of graupel into hail - & ZTOT_RGMLTR, & ! Melting of the graupel - & ZTOT_RCWETH, ZTOT_RIWETH, ZTOT_RSWETH, ZTOT_RGWETH, ZTOT_RRWETH, & ! Dry growth of hailstone - & ZTOT_RCDRYH, ZTOT_RIDRYH, ZTOT_RSDRYH, ZTOT_RRDRYH, ZTOT_RGDRYH, & ! Wet growth of hailstone - & ZTOT_RDRYHG ! Conversion of hailstone into graupel -! -!For time- or mixing-ratio- splitting -REAL, DIMENSION(KSIZE) :: Z0RVT, & ! Water vapor m.r. at the beginig of the current loop - & Z0RCT, & ! Cloud water m.r. at the beginig of the current loop - & Z0RRT, & ! Rain water m.r. at the beginig of the current loop - & Z0RIT, & ! Pristine ice m.r. at the beginig of the current loop - & Z0RST, & ! Snow/aggregate m.r. at the beginig of the current loop - & Z0RGT, & ! Graupel m.r. at the beginig of the current loop - & Z0RHT ! Hail m.r. at the beginig of the current loop - - - - - -!en attendant phasage on utilise KSIZE à la place de KPROMA -REAL, DIMENSION(KSIZE,0:7) :: & - & ZVART, & !Packed variables - & ZA, ZB - - - - - - -! -!To take into acount external tendencies inside the splitting -REAL, DIMENSION(KSIZE) :: ZEXT_RV, & ! External tendencie for rv - & ZEXT_RC, & ! External tendencie for rc - & ZEXT_RR, & ! External tendencie for rr - & ZEXT_RI, & ! External tendencie for ri - & ZEXT_RS, & ! External tendencie for rs - & ZEXT_RG, & ! External tendencie for rg - & ZEXT_RH, & ! External tendencie for rh - & ZEXT_TH, & ! External tendencie for th - & ZEXT_WW ! Working array -LOGICAL :: GEXT_TEND -! -INTEGER, DIMENSION(KSIZE) :: IITER ! Number of iterations done (with real tendencies computation) -INTEGER :: INB_ITER_MAX ! Maximum number of iterations (with real tendencies computation) -REAL, DIMENSION(KSIZE) :: ZTIME, & ! Current integration time (starts with 0 and ends with PTSTEP) - & ZMAXTIME, & ! Time on which we can apply the current tendencies - & ZTIME_THRESHOLD, & ! Time to reach threshold - & ZTIME_LASTCALL ! Integration time when last tendecies call has been done -REAL, DIMENSION(KSIZE) :: ZW1D -REAL, DIMENSION(KSIZE) :: ZCOMPUTE ! 1. for points where we must compute tendencies, 0. elsewhere -LOGICAL :: LSOFT ! Must we really compute tendencies or only adjust them to new T variables -REAL :: ZTSTEP ! length of sub-timestep in case of time splitting -REAL :: ZINV_TSTEP ! Inverse ov PTSTEP -REAL, DIMENSION(KSIZE, 8) :: ZRS_TEND -REAL, DIMENSION(KSIZE, 8) :: ZRG_TEND -REAL, DIMENSION(KSIZE, 10) :: ZRH_TEND -REAL, DIMENSION(KSIZE) :: ZSSI -! -!For total tendencies computation -REAL, DIMENSION(SIZE(PTHT,1),SIZE(PTHT,2),SIZE(PTHT,3)) :: & - &ZW_RVS, ZW_RCS, ZW_RRS, ZW_RIS, ZW_RSS, ZW_RGS, ZW_RHS, ZW_THS -! -CHARACTER(LEN=80) :: HSUBG_AUCV_RI='NONE' -!------------------------------------------------------------------------------- -IF (LHOOK) CALL DR_HOOK('RAIN_ICE', 0, ZHOOK_HANDLE) -! -!------------------------------------------------------------------------------- -! -IF(OCND2) THEN - WRITE(*,*) ' STOP' - WRITE(*,*) ' OCND2 OPTION NOT CODED IN THIS RAIN_ICE VERSION' - CALL ABORT - STOP -END IF -!* 1. COMPUTE THE LOOP BOUNDS -! ----------------------- -! -IIB=1+JPHEXT -IIE=SIZE(PDZZ,1) - JPHEXT -IJB=1+JPHEXT -IJE=SIZE(PDZZ,2) - JPHEXT -IKB=KKA+JPVEXT*KKL -IKE=KKU-JPVEXT*KKL -IKTB=1+JPVEXT -IKTE=KKT-JPVEXT -! -ZINV_TSTEP=1./PTSTEP -GEXT_TEND=.TRUE. -! -! LSFACT and LVFACT without exner -IF(KRR==7) THEN - DO JK = 1, KKT - DO JJ = 1, KJT - DO JI = 1, KIT - ZT(JI,JJ,JK) = PTHT(JI,JJ,JK) * PEXN(JI,JJ,JK) - ZZ_LSFACT(JI,JJ,JK)=(XLSTT+(XCPV-XCI)*(ZT(JI,JJ,JK)-XTT)) & - /( XCPD + XCPV*PRVT(JI,JJ,JK) + XCL*(PRCT(JI,JJ,JK)+PRRT(JI,JJ,JK)) & - + XCI*(PRIT(JI,JJ,JK)+PRST(JI,JJ,JK)+PRGT(JI,JJ,JK)+PRHT(JI,JJ,JK))) - ZZ_LVFACT(JI,JJ,JK)=(XLVTT+(XCPV-XCL)*(ZT(JI,JJ,JK)-XTT)) & - /( XCPD + XCPV*PRVT(JI,JJ,JK) + XCL*(PRCT(JI,JJ,JK)+PRRT(JI,JJ,JK)) & - + XCI*(PRIT(JI,JJ,JK)+PRST(JI,JJ,JK)+PRGT(JI,JJ,JK)+PRHT(JI,JJ,JK))) - ENDDO - ENDDO - ENDDO -ELSE - DO JK = 1, KKT - DO JJ = 1, KJT - DO JI = 1, KIT - ZT(JI,JJ,JK) = PTHT(JI,JJ,JK) * PEXN(JI,JJ,JK) - ZZ_LSFACT(JI,JJ,JK)=(XLSTT+(XCPV-XCI)*(ZT(JI,JJ,JK)-XTT)) & - /( XCPD + XCPV*PRVT(JI,JJ,JK) + XCL*(PRCT(JI,JJ,JK)+PRRT(JI,JJ,JK)) & - + XCI*(PRIT(JI,JJ,JK)+PRST(JI,JJ,JK)+PRGT(JI,JJ,JK))) - ZZ_LVFACT(JI,JJ,JK)=(XLVTT+(XCPV-XCL)*(ZT(JI,JJ,JK)-XTT)) & - /( XCPD + XCPV*PRVT(JI,JJ,JK) + XCL*(PRCT(JI,JJ,JK)+PRRT(JI,JJ,JK)) & - + XCI*(PRIT(JI,JJ,JK)+PRST(JI,JJ,JK)+PRGT(JI,JJ,JK))) - ENDDO - ENDDO - ENDDO -ENDIF -! -!------------------------------------------------------------------------------- -! -!* 2. COMPUTE THE SEDIMENTATION (RS) SOURCE -! ------------------------------------- -! -IF(.NOT. LSEDIM_AFTER) THEN - ! - !* 2.1 sedimentation - ! - IF(HSEDIM=='STAT') THEN - IF(KRR==7) THEN - CALL ICE4_SEDIMENTATION_STAT(IIB, IIE, KIT, IJB, IJE, KJT, IKB, IKE, IKTB, IKTE, KKT, KKL, & - &PTSTEP, KRR, OSEDIC, & - &PDZZ, & - &PRHODREF, PPABST, PTHT, PRHODJ, & - &PRCS, PRCS*PTSTEP, PRRS, PRRS*PTSTEP, PRIS, PRIS*PTSTEP,& - &PRSS, PRSS*PTSTEP, PRGS, PRGS*PTSTEP,& - &PINPRC, PINPRR, ZINPRI, PINPRS, PINPRG, & - &PSEA=PSEA, PTOWN=PTOWN, & - &PINPRH=PINPRH, PRHT=PRHS*PTSTEP, PRHS=PRHS, PFPR=PFPR) - ELSE - CALL ICE4_SEDIMENTATION_STAT(IIB, IIE, KIT, IJB, IJE, KJT, IKB, IKE, IKTB, IKTE, KKT, KKL, & - &PTSTEP, KRR, OSEDIC, & - &PDZZ, & - &PRHODREF, PPABST, PTHT, PRHODJ, & - &PRCS, PRCS*PTSTEP, PRRS, PRRS*PTSTEP, PRIS, PRIS*PTSTEP,& - &PRSS, PRSS*PTSTEP, PRGS, PRGS*PTSTEP,& - &PINPRC, PINPRR, ZINPRI, PINPRS, PINPRG, & - &PSEA=PSEA, PTOWN=PTOWN, & - &PFPR=PFPR) - ENDIF - PINPRS(:,:) = PINPRS(:,:) + ZINPRI(:,:) - !No negativity correction here as we apply sedimentation on PR.S*PTSTEP variables - ELSEIF(HSEDIM=='SPLI') THEN - IF(KRR==7) THEN - CALL ICE4_SEDIMENTATION_SPLIT(IIB, IIE, KIT, IJB, IJE, KJT, IKB, IKE, IKTB, IKTE, KKT, KKL, & - &PTSTEP, KRR, OSEDIC, PDZZ, & - &PRHODREF, PPABST, PTHT, PRHODJ, & - &PRCS, PRCT, PRRS, PRRT, PRIS, PRIT, PRSS, PRST, PRGS, PRGT,& - &PINPRC, PINPRR, ZINPRI, PINPRS, PINPRG, & - &PSEA=PSEA, PTOWN=PTOWN, & - &PINPRH=PINPRH, PRHT=PRHT, PRHS=PRHS, PFPR=PFPR) - ELSE - CALL ICE4_SEDIMENTATION_SPLIT(IIB, IIE, KIT, IJB, IJE, KJT, IKB, IKE, IKTB, IKTE, KKT, KKL, & - &PTSTEP, KRR, OSEDIC, PDZZ, & - &PRHODREF, PPABST, PTHT, PRHODJ, & - &PRCS, PRCT, PRRS, PRRT, PRIS, PRIT, PRSS, PRST, PRGS, PRGT,& - &PINPRC, PINPRR, ZINPRI, PINPRS, PINPRG, & - &PSEA=PSEA, PTOWN=PTOWN, & - &PFPR=PFPR) - ENDIF - PINPRS(:,:) = PINPRS(:,:) + ZINPRI(:,:) - !We correct negativities with conservation - !SPLI algorith uses a time-splitting. Inside the loop a temporary m.r. is used. - ! It is initialized with the m.r. at T and is modified by two tendencies: - ! sedimentation tendency and an external tendency which represents all other - ! processes (mainly advection and microphysical processes). If both tendencies - ! are negative, sedimentation can remove a specie at a given sub-timestep. From - ! this point sedimentation stops for the remaining sub-timesteps but the other tendency - ! will be still active and will lead to negative values. - ! We could prevent the algorithm to not consume too much a specie, instead we apply - ! a correction here. - CALL CORRECT_NEGATIVITIES(KIT, KJT, KKT, KRR, PRVS, PRCS, PRRS, & - &PRIS, PRSS, PRGS, & - &PTHS, ZZ_LVFACT, ZZ_LSFACT, PRHS) - ELSEIF(HSEDIM=='NONE') THEN - ELSE - WRITE(*,*) ' STOP' - WRITE(*,*) ' NO SEDIMENTATION SCHEME FOR HSEDIM=', HSEDIM - CALL ABORT - STOP - END IF - - - - - - -!!!!! ajouter momentum - - - - - - - - - - - - - - - ! - !* 2.2 budget storage - ! - IF (LBUDGET_RC .AND. OSEDIC) & - CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:), 7 , 'SEDI_BU_RRC',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:)*PRHODJ(:,:,:), 8 , 'SEDI_BU_RRR',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RI) CALL BUDGET (PRIS(:,:,:)*PRHODJ(:,:,:), 9 , 'SEDI_BU_RRI',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RS) CALL BUDGET (PRSS(:,:,:)*PRHODJ(:,:,:), 10, 'SEDI_BU_RRS',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RG) CALL BUDGET (PRGS(:,:,:)*PRHODJ(:,:,:), 11, 'SEDI_BU_RRG',YDDDH, YDLDDH, YDMDDH) - IF ( KRR == 7 .AND. LBUDGET_RH) & - CALL BUDGET (PRHS(:,:,:)*PRHODJ(:,:,:), 12, 'SEDI_BU_RRH',YDDDH, YDLDDH, YDMDDH) -ENDIF -! -!------------------------------------------------------------------------------- -! -!* 3. PACKING -! -------- -! optimization by looking for locations where -! the microphysical fields are larger than a minimal value only !!! -! -IMICRO=0 -IF(KSIZE/=0) IMICRO=RAIN_ICE_COUNTJV(ODMICRO(:,:,:), KIT, KJT, KKT, KSIZE, I1(:), I2(:), I3(:)) -!Packing -IF(IMICRO>0) THEN - DO JL=1, IMICRO - ZRVT(JL) = PRVT(I1(JL),I2(JL),I3(JL)) - ZRCT(JL) = PRCT(I1(JL),I2(JL),I3(JL)) - ZRRT(JL) = PRRT(I1(JL),I2(JL),I3(JL)) - ZRIT(JL) = PRIT(I1(JL),I2(JL),I3(JL)) - ZRST(JL) = PRST(I1(JL),I2(JL),I3(JL)) - ZRGT(JL) = PRGT(I1(JL),I2(JL),I3(JL)) - ZCIT(JL) = PCIT(I1(JL),I2(JL),I3(JL)) - ZCF(JL) = PCLDFR(I1(JL),I2(JL),I3(JL)) - ZRHODREF(JL) = PRHODREF(I1(JL),I2(JL),I3(JL)) - ZTHT(JL) = PTHT(I1(JL),I2(JL),I3(JL)) - ZPRES(JL) = PPABST(I1(JL),I2(JL),I3(JL)) - ZEXN(JL) = PEXN(I1(JL),I2(JL),I3(JL)) - ENDDO - IF(GEXT_TEND) THEN - DO JL=1, IMICRO - ZEXT_RV(JL) = PRVS(I1(JL),I2(JL),I3(JL)) - ZRVT(JL)*ZINV_TSTEP - ZEXT_RC(JL) = PRCS(I1(JL),I2(JL),I3(JL)) - ZRCT(JL)*ZINV_TSTEP - ZEXT_RR(JL) = PRRS(I1(JL),I2(JL),I3(JL)) - ZRRT(JL)*ZINV_TSTEP - ZEXT_RI(JL) = PRIS(I1(JL),I2(JL),I3(JL)) - ZRIT(JL)*ZINV_TSTEP - ZEXT_RS(JL) = PRSS(I1(JL),I2(JL),I3(JL)) - ZRST(JL)*ZINV_TSTEP - ZEXT_RG(JL) = PRGS(I1(JL),I2(JL),I3(JL)) - ZRGT(JL)*ZINV_TSTEP - ZEXT_TH(JL) = PTHS(I1(JL),I2(JL),I3(JL)) - ZTHT(JL)*ZINV_TSTEP - !The th tendency is not related to a mixing ratio change, there is no exn/exnref issue here - ENDDO - ENDIF - IF(HSUBG_AUCV_RC=='PDF ' .AND. CSUBG_PR_PDF=='SIGM') THEN - DO JL=1, IMICRO - ZSIGMA_RC(JL) = PSIGS(I1(JL),I2(JL),I3(JL))*2. - ENDDO - ENDIF - IF(KRR==7) THEN - DO JL=1, IMICRO - ZRHT(JL) = PRHT(I1(JL),I2(JL),I3(JL)) - ENDDO - IF(GEXT_TEND) THEN - DO JL=1, IMICRO - ZEXT_RH(JL) = PRHS(I1(JL),I2(JL),I3(JL)) - ZRHT(JL)*ZINV_TSTEP - ENDDO - ENDIF - ELSE - ZRHT(:)=0. - IF(GEXT_TEND) ZEXT_RH(:)=0. - ENDIF - IF(LBU_ENABLE) THEN - ZTOT_RVHENI(:)=0. - ZTOT_RCHONI(:)=0. - ZTOT_RRHONG(:)=0. - ZTOT_RVDEPS(:)=0. - ZTOT_RIAGGS(:)=0. - ZTOT_RIAUTS(:)=0. - ZTOT_RVDEPG(:)=0. - ZTOT_RCAUTR(:)=0. - ZTOT_RCACCR(:)=0. - ZTOT_RREVAV(:)=0. - ZTOT_RCRIMSS(:)=0. - ZTOT_RCRIMSG(:)=0. - ZTOT_RSRIMCG(:)=0. - ZTOT_RIMLTC(:)=0. - ZTOT_RCBERI(:)=0. - ZTOT_RHMLTR(:)=0. - ZTOT_RSMLTG(:)=0. - ZTOT_RCMLTSR(:)=0. - ZTOT_RRACCSS(:)=0. - ZTOT_RRACCSG(:)=0. - ZTOT_RSACCRG(:)=0. - ZTOT_RICFRRG(:)=0. - ZTOT_RRCFRIG(:)=0. - ZTOT_RICFRR(:)=0. - ZTOT_RCWETG(:)=0. - ZTOT_RIWETG(:)=0. - ZTOT_RRWETG(:)=0. - ZTOT_RSWETG(:)=0. - ZTOT_RCDRYG(:)=0. - ZTOT_RIDRYG(:)=0. - ZTOT_RRDRYG(:)=0. - ZTOT_RSDRYG(:)=0. - ZTOT_RWETGH(:)=0. - ZTOT_RGMLTR(:)=0. - ZTOT_RCWETH(:)=0. - ZTOT_RIWETH(:)=0. - ZTOT_RSWETH(:)=0. - ZTOT_RGWETH(:)=0. - ZTOT_RRWETH(:)=0. - ZTOT_RCDRYH(:)=0. - ZTOT_RIDRYH(:)=0. - ZTOT_RSDRYH(:)=0. - ZTOT_RRDRYH(:)=0. - ZTOT_RGDRYH(:)=0. - ZTOT_RDRYHG(:)=0. - ENDIF -ENDIF -!------------------------------------------------------------------------------- -! -!* 4. LOOP -! ---- -! -!Maximum number of iterations -!We only count real iterations (those for which we *compute* tendencies) -INB_ITER_MAX=NMAXITER -IF(XTSTEP_TS/=0.)THEN - INB_ITER_MAX=MAX(1, INT(PTSTEP/XTSTEP_TS)) !At least the number of iterations needed for the time-splitting - ZTSTEP=PTSTEP/INB_ITER_MAX - INB_ITER_MAX=MAX(NMAXITER, INB_ITER_MAX) !Fot the case XMRSTEP/=0. at the same time -ENDIF -IITER(:)=0 -ZTIME(:)=0. ! Current integration time (all points may have a different integration time) -DO WHILE(ANY(ZTIME(:)<PTSTEP)) ! Loop to *really* compute tendencies - IF(XMRSTEP/=0.) THEN - ! In this case we need to remember the mixing ratios used to compute the tendencies - ! because when mixing ratio has evolved more than a threshold, we must re-compute tendecies - DO JL=1, IMICRO - Z0RVT(JL)=ZRVT(JL) - Z0RCT(JL)=ZRCT(JL) - Z0RRT(JL)=ZRRT(JL) - Z0RIT(JL)=ZRIT(JL) - Z0RST(JL)=ZRST(JL) - Z0RGT(JL)=ZRGT(JL) - Z0RHT(JL)=ZRHT(JL) - ENDDO - ENDIF - IF(XTSTEP_TS/=0.) THEN - ! In this case we need to remember the time when tendencies were computed - ! because when time has evolved more than a limit, we must re-compute tendecies - ZTIME_LASTCALL(:)=ZTIME(:) - ENDIF - ZCOMPUTE(:)=MAX(0., -SIGN(1., ZTIME(:)-PTSTEP)) ! Compuation (1.) only for points for which integration time has not reached the timestep - LSOFT=.FALSE. ! We *really* compute the tendencies - IITER(:)=IITER(:)+INT(ZCOMPUTE(:)) - DO WHILE(SUM(ZCOMPUTE(:))>0.) ! Loop to adjust tendencies when we cross the 0°C or when a specie disappears - IF(KRR==7) THEN - DO JL=1, IMICRO - ZZT(JL) = ZTHT(JL) * ZEXN(JL) - ZLSFACT(JL)=(XLSTT+(XCPV-XCI)*(ZZT(JL)-XTT)) & - &/( (XCPD + XCPV*ZRVT(JL) + XCL*(ZRCT(JL)+ZRRT(JL)) & - &+ XCI*(ZRIT(JL)+ZRST(JL)+ZRGT(JL)+ZRHT(JL)))*ZEXN(JL) ) - ZLVFACT(JL)=(XLVTT+(XCPV-XCL)*(ZZT(JL)-XTT)) & - &/( (XCPD + XCPV*ZRVT(JL) + XCL*(ZRCT(JL)+ZRRT(JL)) & - &+ XCI*(ZRIT(JL)+ZRST(JL)+ZRGT(JL)+ZRHT(JL)))*ZEXN(JL) ) - ENDDO - ELSE - DO JL=1, IMICRO - ZZT(JL) = ZTHT(JL) * ZEXN(JL) - ZLSFACT(JL)=(XLSTT+(XCPV-XCI)*(ZZT(JL)-XTT)) & - &/( (XCPD + XCPV*ZRVT(JL) + XCL*(ZRCT(JL)+ZRRT(JL)) & - &+ XCI*(ZRIT(JL)+ZRST(JL)+ZRGT(JL)))*ZEXN(JL) ) - ZLVFACT(JL)=(XLVTT+(XCPV-XCL)*(ZZT(JL)-XTT)) & - &/( (XCPD + XCPV*ZRVT(JL) + XCL*(ZRCT(JL)+ZRRT(JL)) & - &+ XCI*(ZRIT(JL)+ZRST(JL)+ZRGT(JL)))*ZEXN(JL) ) - ENDDO - ENDIF - ! - !*** 4.1 Tendecies computation - ! - ! Tendencies are *really* computed when LSOFT==.FALSE. and only adjusted otherwise - - - -!KPROMA=IMICRO: temporary merging step -ZVART(:, ITH)=ZTHT(:) -ZVART(:, IRV)=ZRVT(:) -ZVART(:, IRC)=ZRCT(:) -ZVART(:, IRR)=ZRRT(:) -ZVART(:, IRI)=ZRIT(:) -ZVART(:, IRS)=ZRST(:) -ZVART(:, IRG)=ZRGT(:) -IF(KRR==7) ZVART(:, IRH)=ZRHT(:) - - CALL ICE4_TENDENCIES(IMICRO, IMICRO, IIB, IIE, KIT, IJB, IJE, KJT, IKB, IKE, KKT, KKL, & - &KRR, LSOFT, ZCOMPUTE, & - &OWARM, CSUBG_RC_RR_ACCR, CSUBG_RR_EVAP, & - &HSUBG_AUCV_RC, HSUBG_AUCV_RI, CSUBG_PR_PDF, & - &ZEXN, ZRHODREF, ZLVFACT, ZLSFACT, I1, I2, I3, & - &ZPRES, ZCF, ZSIGMA_RC, & - &ZCIT, & - &ZZT, ZVART, & - &ZRVHENI_MR, ZRRHONG_MR, ZRIMLTC_MR, ZRSRIMCG_MR, & - &ZRCHONI, ZRVDEPS, ZRIAGGS, ZRIAUTS, ZRVDEPG, & - &ZRCAUTR, ZRCACCR, ZRREVAV, & - &ZRCRIMSS, ZRCRIMSG, ZRSRIMCG, ZRRACCSS, ZRRACCSG, ZRSACCRG, ZRSMLTG, ZRCMLTSR, & - &ZRICFRRG, ZRRCFRIG, ZRICFRR, ZRCWETG, ZRIWETG, ZRRWETG, ZRSWETG, & - &ZRCDRYG, ZRIDRYG, ZRRDRYG, ZRSDRYG, ZRWETGH, ZRWETGH_MR, ZRGMLTR, & - &ZRCWETH, ZRIWETH, ZRSWETH, ZRGWETH, ZRRWETH, & - &ZRCDRYH, ZRIDRYH, ZRSDRYH, ZRRDRYH, ZRGDRYH, ZRDRYHG, ZRHMLTR, & - &ZRCBERI, & - &ZRS_TEND, ZRG_TEND, ZRH_TEND, ZSSI, & - &ZA, ZB, & - &ZHLC_HCF, ZHLC_LCF, ZHLC_HRC, ZHLC_LRC, & - &ZHLI_HCF, ZHLI_LCF, ZHLI_HRI, ZHLI_LRI, ZRAINFR) -ZTHT(:)=ZVART(:, ITH) -ZRVT(:)=ZVART(:, IRV) -ZRCT(:)=ZVART(:, IRC) -ZRRT(:)=ZVART(:, IRR) -ZRIT(:)=ZVART(:, IRI) -ZRST(:)=ZVART(:, IRS) -ZRGT(:)=ZVART(:, IRG) -IF(KRR==7) ZRHT(:)=ZVART(:, IRH) - ! External tendencies - IF(GEXT_TEND) THEN - DO JL=1, IMICRO - ZA(JL, ITH) = ZA(JL, ITH) + ZEXT_TH(JL) - ZA(JL, IRV) = ZA(JL, IRV) + ZEXT_RV(JL) - ZA(JL, IRC) = ZA(JL, IRC) + ZEXT_RC(JL) - ZA(JL, IRR) = ZA(JL, IRR) + ZEXT_RR(JL) - ZA(JL, IRI) = ZA(JL, IRI) + ZEXT_RI(JL) - ZA(JL, IRS) = ZA(JL, IRS) + ZEXT_RS(JL) - ZA(JL, IRG) = ZA(JL, IRG) + ZEXT_RG(JL) - IF(KRR==7) ZA(JL, IRH) = ZA(JL, IRH) + ZEXT_RH(JL) - ENDDO - ENDIF - ! - !*** 4.2 Integration time - ! - ! If we can, we will use these tendencies until the end of the timestep - ZMAXTIME(:)=ZCOMPUTE(:) * (PTSTEP-ZTIME(:)) ! Remaining time until the end of the timestep - - !We need to adjust tendencies when temperature reaches 0 - IF(LFEEDBACKT) THEN - DO JL=1, IMICRO - !Is ZB(:, ITH) enough to change temperature sign? - ZW1D(JL)=(ZTHT(JL) - XTT/ZEXN(JL)) * (ZTHT(JL) + ZB(JL, ITH) - XTT/ZEXN(JL)) - ZMAXTIME(JL)=ZMAXTIME(JL)*MAX(0., SIGN(1., ZW1D(JL))) - !Can ZA(:, ITH) make temperature change of sign? - ZW1D(JL)=MAX(0., -SIGN(1., 1.E-20 - ABS(ZA(JL, ITH)))) ! WHERE(ABS(ZA(:, ITH))>1.E-20) - ZTIME_THRESHOLD(JL)=(1. - ZW1D(JL))*(-1.) + & - ZW1D(JL) * & - (XTT/ZEXN(JL) - ZB(JL, ITH) - ZTHT(JL))/ & - SIGN(MAX(ABS(ZA(JL, ITH)), 1.E-20), ZA(JL, ITH)) - ZW1D(JL)=MAX(0., -SIGN(1., -ZTIME_THRESHOLD(JL))) ! WHERE(ZTIME_THRESHOLD(:)>0.) - ZMAXTIME(JL)=(1.-ZW1D(JL)) * ZMAXTIME(JL) + & - ZW1D(JL) * MIN(ZMAXTIME(JL), ZTIME_THRESHOLD(JL)) - ENDDO - ENDIF - - !We need to adjust tendencies when a specy disappears - !When a specy is missing, only the external tendencies can be negative (and we must keep track of it) - DO JL=1, IMICRO - ZW1D(JL)=MAX(0., -SIGN(1., ZA(JL, IRV)+1.E-20)) * & ! WHERE(ZA(:, IRV)<-1.E-20) - &MAX(0., -SIGN(1., XRTMIN(1)-ZRVT(JL))) ! WHERE(ZRVT(:)>XRTMIN(1)) - ZMAXTIME(JL)=(1.-ZW1D(JL)) * ZMAXTIME(JL) + & - &ZW1D(JL) * MIN(ZMAXTIME(JL), -(ZB(JL, IRV)+ZRVT(JL))/MIN(ZA(JL, IRV), -1.E-20)) - - ZW1D(JL)=MAX(0., -SIGN(1., ZA(JL, IRC)+1.E-20)) * & ! WHERE(ZA(:, IRC)<-1.E-20) - &MAX(0., -SIGN(1., XRTMIN(2)-ZRCT(JL))) ! WHERE(ZRCT(:)>XRTMIN(2)) - ZMAXTIME(JL)=(1.-ZW1D(JL)) * ZMAXTIME(JL) + & - &ZW1D(JL) * MIN(ZMAXTIME(JL), -(ZB(JL, IRC)+ZRCT(JL))/MIN(ZA(JL, IRC), -1.E-20)) - - ZW1D(JL)=MAX(0., -SIGN(1., ZA(JL, IRR)+1.E-20)) * & ! WHERE(ZA(:, IRR)<-1.E-20) - &MAX(0., -SIGN(1., XRTMIN(3)-ZRRT(JL))) ! WHERE(ZRRT(:)>XRTMIN(3)) - ZMAXTIME(JL)=(1.-ZW1D(JL)) * ZMAXTIME(JL) + & - &ZW1D(JL) * MIN(ZMAXTIME(JL), -(ZB(JL, IRR)+ZRRT(JL))/MIN(ZA(JL, IRR), -1.E-20)) - - ZW1D(JL)=MAX(0., -SIGN(1., ZA(JL, IRI)+1.E-20)) * & ! WHERE(ZA(:, IRI)<-1.E-20) - &MAX(0., -SIGN(1., XRTMIN(4)-ZRIT(JL))) ! WHERE(ZRIT(:)>XRTMIN(4)) - ZMAXTIME(JL)=(1.-ZW1D(JL)) * ZMAXTIME(JL) + & - &ZW1D(JL) * MIN(ZMAXTIME(JL), -(ZB(JL, IRI)+ZRIT(JL))/MIN(ZA(JL, IRI), -1.E-20)) - - ZW1D(JL)=MAX(0., -SIGN(1., ZA(JL, IRS)+1.E-20)) * & ! WHERE(ZA(:, IRS)<-1.E-20) - &MAX(0., -SIGN(1., XRTMIN(5)-ZRST(JL))) ! WHERE(ZRST(:)>XRTMIN(5)) - ZMAXTIME(JL)=(1.-ZW1D(JL)) * ZMAXTIME(JL) + & - &ZW1D(JL) * MIN(ZMAXTIME(JL), -(ZB(JL, IRS)+ZRST(JL))/MIN(ZA(JL, IRS), -1.E-20)) - - ZW1D(JL)=MAX(0., -SIGN(1., ZA(JL, IRG)+1.E-20)) * & ! WHERE(ZA(:, IRG)<-1.E-20) - &MAX(0., -SIGN(1., XRTMIN(6)-ZRGT(JL))) ! WHERE(ZRGT(:)>XRTMIN(6)) - ZMAXTIME(JL)=(1.-ZW1D(JL)) * ZMAXTIME(JL) + & - &ZW1D(JL) * MIN(ZMAXTIME(JL), -(ZB(JL, IRG)+ZRGT(JL))/MIN(ZA(JL, IRG), -1.E-20)) - ENDDO - - IF(KRR==7) THEN - DO JL=1, IMICRO - ZW1D(JL)=MAX(0., -SIGN(1., ZA(JL, IRH)+1.E-20)) * & ! WHERE(ZA(:, IRH)<-1.E-20) - &MAX(0., -SIGN(1., XRTMIN(7)-ZRHT(JL))) ! WHERE(ZRHT(:)>XRTMIN(7)) - ZMAXTIME(JL)=(1.-ZW1D(JL)) * ZMAXTIME(JL) + & - &ZW1D(JL) * MIN(ZMAXTIME(JL), -(ZB(JL, IRH)+ZRHT(JL))/MIN(ZA(JL, IRH), -1.E-20)) - ENDDO - ENDIF - - !We stop when the end of the timestep is reached - ZCOMPUTE(:)=ZCOMPUTE(:) * MAX(0., -SIGN(1., ZTIME(:)+ZMAXTIME(:)-PTSTEP)) - - !We must recompute tendencies when the end of the sub-timestep is reached - IF(XTSTEP_TS/=0.) THEN - DO JL=1, IMICRO - ZW1D(JL)=MAX(0., -SIGN(1., IITER(JL)-INB_ITER_MAX+0.)) * & ! WHERE(IITER(:)<INB_ITER_MAX) - &MAX(0., -SIGN(1., ZTIME_LASTCALL(JL)+ZTSTEP-ZTIME(JL)-ZMAXTIME(JL))) ! WHERE(ZTIME(:)+ZMAXTIME(:)>ZTIME_LASTCALL(:)+ZTSTEP) - ZMAXTIME(JL)=(1.-ZW1D(JL)) * ZMAXTIME(JL) + & - &ZW1D(JL) * (ZTIME_LASTCALL(JL)-ZTIME(JL)+ZTSTEP) - ZCOMPUTE(JL)=ZCOMPUTE(JL) * (1. - ZW1D(JL)) - ENDDO - ENDIF - - !We must recompute tendencies when the maximum allowed change is reached - !When a specy is missing, only the external tendencies can be active and we do not want to recompute - !the microphysical tendencies when external tendencies are negative (results won't change because specy was already missing) - IF(XMRSTEP/=0.) THEN - DO JL=1, IMICRO - ZW1D(JL)=MAX(0., -SIGN(1., IITER(JL)-INB_ITER_MAX+0.)) * & ! WHERE(IITER(:)<INB_ITER_MAX) - &MAX(0., -SIGN(1., 1.E-20-ABS(ZA(JL, IRV)))) ! WHERE(ABS(ZA(:, IRV))>1.E-20) - ZTIME_THRESHOLD(JL)=(1.-ZW1D(JL))*(-1.) + & - &ZW1D(JL)*(SIGN(1., ZA(JL, IRV))*XMRSTEP+Z0RVT(JL)-ZRVT(JL)-ZB(JL, IRV))/ & - &SIGN(MAX(ABS(ZA(JL, IRV)), 1.E-20), ZA(JL, IRV)) - ZW1D(JL)=MAX(0., SIGN(1., ZTIME_THRESHOLD(JL))) * & !WHERE(ZTIME_THRESHOLD(:)>=0.) - &MAX(0., -SIGN(1., ZTIME_THRESHOLD(JL)-ZMAXTIME(JL))) * & !WHERE(ZTIME_THRESHOLD(:)<ZMAXTIME(:)) - &MIN(1., MAX(0., -SIGN(1., XRTMIN(6)-ZRVT(JL))) + & !WHERE(ZRVT(:)>XRTMIN(6)) .OR. - &MAX(0., -SIGN(1., -ZA(JL, IRV)))) !WHERE(ZA(:, IRV)>0.) - ZMAXTIME(JL)=(1.-ZW1D(JL)) * ZMAXTIME(JL) + & - &ZW1D(JL)*MIN(ZMAXTIME(JL), ZTIME_THRESHOLD(JL)) - ZCOMPUTE(JL)=ZCOMPUTE(JL) * (1. - ZW1D(JL)) - - ZW1D(JL)=MAX(0., -SIGN(1., IITER(JL)-INB_ITER_MAX+0.)) * & ! WHERE(IITER(:)<INB_ITER_MAX) - &MAX(0., -SIGN(1., 1.E-20-ABS(ZA(JL, IRC)))) ! WHERE(ABS(ZA(:, IRC))>1.E-20) - ZTIME_THRESHOLD(JL)=(1.-ZW1D(JL))*(-1.) + & - &ZW1D(JL)*(SIGN(1., ZA(JL, IRC))*XMRSTEP+Z0RCT(JL)-ZRCT(JL)-ZB(JL, IRC))/ & - &SIGN(MAX(ABS(ZA(JL, IRC)), 1.E-20), ZA(JL, IRC)) - ZW1D(JL)=MAX(0., SIGN(1., ZTIME_THRESHOLD(JL))) * & !WHERE(ZTIME_THRESHOLD(:)>=0.) - &MAX(0., -SIGN(1., ZTIME_THRESHOLD(JL)-ZMAXTIME(JL))) * & !WHERE(ZTIME_THRESHOLD(:)<ZMAXTIME(:)) - &MIN(1., MAX(0., -SIGN(1., XRTMIN(6)-ZRCT(JL))) + & !WHERE(ZRCT(:)>XRTMIN(6)) .OR. - &MAX(0., -SIGN(1., -ZA(JL, IRC)))) !WHERE(ZA(:, IRC)>0.) - ZMAXTIME(JL)=(1.-ZW1D(JL)) * ZMAXTIME(JL) + & - &ZW1D(JL)*MIN(ZMAXTIME(JL), ZTIME_THRESHOLD(JL)) - ZCOMPUTE(JL)=ZCOMPUTE(JL) * (1. - ZW1D(JL)) - - ZW1D(JL)=MAX(0., -SIGN(1., IITER(JL)-INB_ITER_MAX+0.)) * & ! WHERE(IITER(:)<INB_ITER_MAX) - &MAX(0., -SIGN(1., 1.E-20-ABS(ZA(JL, IRR)))) ! WHERE(ABS(ZA(:, IRR))>1.E-20) - ZTIME_THRESHOLD(JL)=(1.-ZW1D(JL))*(-1.) + & - &ZW1D(JL)*(SIGN(1., ZA(JL, IRR))*XMRSTEP+Z0RRT(JL)-ZRRT(JL)-ZB(JL, IRR))/ & - &SIGN(MAX(ABS(ZA(JL, IRR)), 1.E-20), ZA(JL, IRR)) - ZW1D(JL)=MAX(0., SIGN(1., ZTIME_THRESHOLD(JL))) * & !WHERE(ZTIME_THRESHOLD(:)>=0.) - &MAX(0., -SIGN(1., ZTIME_THRESHOLD(JL)-ZMAXTIME(JL))) * & !WHERE(ZTIME_THRESHOLD(:)<ZMAXTIME(:)) - &MIN(1., MAX(0., -SIGN(1., XRTMIN(6)-ZRRT(JL))) + & !WHERE(ZRRT(:)>XRTMIN(6)) .OR. - &MAX(0., -SIGN(1., -ZA(JL, IRR)))) !WHERE(ZA(:, IRR)>0.) - ZMAXTIME(JL)=(1.-ZW1D(JL)) * ZMAXTIME(JL) + & - &ZW1D(JL)*MIN(ZMAXTIME(JL), ZTIME_THRESHOLD(JL)) - ZCOMPUTE(JL)=ZCOMPUTE(JL) * (1. - ZW1D(JL)) - - ZW1D(JL)=MAX(0., -SIGN(1., IITER(JL)-INB_ITER_MAX+0.)) * & ! WHERE(IITER(:)<INB_ITER_MAX) - &MAX(0., -SIGN(1., 1.E-20-ABS(ZA(JL, IRI)))) ! WHERE(ABS(ZA(:, IRI))>1.E-20) - ZTIME_THRESHOLD(JL)=(1.-ZW1D(JL))*(-1.) + & - &ZW1D(JL)*(SIGN(1., ZA(JL, IRI))*XMRSTEP+Z0RIT(JL)-ZRIT(JL)-ZB(JL, IRI))/ & - &SIGN(MAX(ABS(ZA(JL, IRI)), 1.E-20), ZA(JL, IRI)) - ZW1D(JL)=MAX(0., SIGN(1., ZTIME_THRESHOLD(JL))) * & !WHERE(ZTIME_THRESHOLD(:)>=0.) - &MAX(0., -SIGN(1., ZTIME_THRESHOLD(JL)-ZMAXTIME(JL))) * & !WHERE(ZTIME_THRESHOLD(:)<ZMAXTIME(:)) - &MIN(1., MAX(0., -SIGN(1., XRTMIN(6)-ZRIT(JL))) + & !WHERE(ZRIT(:)>XRTMIN(6)) .OR. - &MAX(0., -SIGN(1., -ZA(JL, IRI)))) !WHERE(ZA(:, IRI)>0.) - ZMAXTIME(JL)=(1.-ZW1D(JL)) * ZMAXTIME(JL) + & - &ZW1D(JL)*MIN(ZMAXTIME(JL), ZTIME_THRESHOLD(JL)) - ZCOMPUTE(JL)=ZCOMPUTE(JL) * (1. - ZW1D(JL)) - - ZW1D(JL)=MAX(0., -SIGN(1., IITER(JL)-INB_ITER_MAX+0.)) * & ! WHERE(IITER(:)<INB_ITER_MAX) - &MAX(0., -SIGN(1., 1.E-20-ABS(ZA(JL, IRS)))) ! WHERE(ABS(ZA(:, IRS))>1.E-20) - ZTIME_THRESHOLD(JL)=(1.-ZW1D(JL))*(-1.) + & - &ZW1D(JL)*(SIGN(1., ZA(JL, IRS))*XMRSTEP+Z0RST(JL)-ZRST(JL)-ZB(JL, IRS))/ & - &SIGN(MAX(ABS(ZA(JL, IRS)), 1.E-20), ZA(JL, IRS)) - ZW1D(JL)=MAX(0., SIGN(1., ZTIME_THRESHOLD(JL))) * & !WHERE(ZTIME_THRESHOLD(:)>=0.) - &MAX(0., -SIGN(1., ZTIME_THRESHOLD(JL)-ZMAXTIME(JL))) * & !WHERE(ZTIME_THRESHOLD(:)<ZMAXTIME(:)) - &MIN(1., MAX(0., -SIGN(1., XRTMIN(6)-ZRST(JL))) + & !WHERE(ZRST(:)>XRTMIN(6)) .OR. - &MAX(0., -SIGN(1., -ZA(JL, IRS)))) !WHERE(ZA(:, IRS)>0.) - ZMAXTIME(JL)=(1.-ZW1D(JL)) * ZMAXTIME(JL) + & - &ZW1D(JL)*MIN(ZMAXTIME(JL), ZTIME_THRESHOLD(JL)) - ZCOMPUTE(JL)=ZCOMPUTE(JL) * (1. - ZW1D(JL)) - - ZW1D(JL)=MAX(0., -SIGN(1., IITER(JL)-INB_ITER_MAX+0.)) * & ! WHERE(IITER(:)<INB_ITER_MAX) - &MAX(0., -SIGN(1., 1.E-20-ABS(ZA(JL, IRG)))) ! WHERE(ABS(ZA(:, IRG))>1.E-20) - ZTIME_THRESHOLD(JL)=(1.-ZW1D(JL))*(-1.) + & - &ZW1D(JL)*(SIGN(1., ZA(JL, IRG))*XMRSTEP+Z0RGT(JL)-ZRGT(JL)-ZB(JL, IRG))/ & - &SIGN(MAX(ABS(ZA(JL, IRG)), 1.E-20), ZA(JL, IRG)) - ZW1D(JL)=MAX(0., SIGN(1., ZTIME_THRESHOLD(JL))) * & !WHERE(ZTIME_THRESHOLD(:)>=0.) - &MAX(0., -SIGN(1., ZTIME_THRESHOLD(JL)-ZMAXTIME(JL))) * & !WHERE(ZTIME_THRESHOLD(:)<ZMAXTIME(:)) - &MIN(1., MAX(0., -SIGN(1., XRTMIN(6)-ZRGT(JL))) + & !WHERE(ZRGT(:)>XRTMIN(6)) .OR. - &MAX(0., -SIGN(1., -ZA(JL, IRG)))) !WHERE(ZA(:, IRG)>0.) - ZMAXTIME(JL)=(1.-ZW1D(JL)) * ZMAXTIME(JL) + & - &ZW1D(JL)*MIN(ZMAXTIME(JL), ZTIME_THRESHOLD(JL)) - ZCOMPUTE(JL)=ZCOMPUTE(JL) * (1. - ZW1D(JL)) - ENDDO - - IF(KRR==7) THEN - DO JL=1, IMICRO - ZW1D(JL)=MAX(0., -SIGN(1., IITER(JL)-INB_ITER_MAX+0.)) * & ! WHERE(IITER(:)<INB_ITER_MAX) - &MAX(0., -SIGN(1., 1.E-20-ABS(ZA(JL, IRH)))) ! WHERE(ABS(ZA(:, IRH))>1.E-20) - ZTIME_THRESHOLD(JL)=(1.-ZW1D(JL))*(-1.) + & - &ZW1D(JL)*(SIGN(1., ZA(JL, IRH))*XMRSTEP+Z0RHT(JL)-ZRHT(JL)-ZB(JL, IRH))/ & - &SIGN(MAX(ABS(ZA(JL, IRH)), 1.E-20), ZA(JL, IRH)) - ZW1D(JL)=MAX(0., SIGN(1., ZTIME_THRESHOLD(JL))) * & !WHERE(ZTIME_THRESHOLD(:)>=0.) - &MAX(0., -SIGN(1., ZTIME_THRESHOLD(JL)-ZMAXTIME(JL))) * & !WHERE(ZTIME_THRESHOLD(:)<ZMAXTIME(:)) - &MIN(1., MAX(0., -SIGN(1., XRTMIN(6)-ZRHT(JL))) + & !WHERE(ZRHT(:)>XRTMIN(6)) .OR. - &MAX(0., -SIGN(1., -ZA(JL, IRH)))) !WHERE(ZA(:, IRH)>0.) - ZMAXTIME(JL)=(1.-ZW1D(JL)) * ZMAXTIME(JL) + & - &ZW1D(JL)*MIN(ZMAXTIME(JL), ZTIME_THRESHOLD(JL)) - ZCOMPUTE(JL)=ZCOMPUTE(JL) * (1. - ZW1D(JL)) - ENDDO - ENDIF - - DO JL=1, IMICRO - IF(KRR==7) THEN - ZW1D(JL)=MAX(ABS(ZB(JL, IRV)), ABS(ZB(JL, IRC)), ABS(ZB(JL, IRR)), ABS(ZB(JL, IRI)), & - &ABS(ZB(JL, IRS)), ABS(ZB(JL, IRG)), ABS(ZB(JL, IRH))) - ELSE - ZW1D(JL)=MAX(ABS(ZB(JL, IRV)), ABS(ZB(JL, IRC)), ABS(ZB(JL, IRR)), ABS(ZB(JL, IRI)), & - &ABS(ZB(JL, IRS)), ABS(ZB(JL, IRG))) - ENDIF - ZW1D(JL)=MAX(0., -SIGN(1., IITER(JL)-INB_ITER_MAX+0.)) * & !WHERE(IITER(:)<INB_ITER_MAX) - &MAX(0., -SIGN(1., XMRSTEP-ZW1D(JL))) !WHERE(ZW1D(:)>XMRSTEP) - ZMAXTIME(JL)=(1.-ZW1D(JL))*ZMAXTIME(JL) - ZCOMPUTE(JL)=ZCOMPUTE(JL) * (1. - ZW1D(JL)) - ENDDO - ENDIF - ! - !*** 4.3 New values of variables for next iteration - ! - DO JL=1, IMICRO - ZTHT(JL)=ZTHT(JL)+ZA(JL, ITH)*ZMAXTIME(JL)+ZB(JL, ITH) - ZRVT(JL)=ZRVT(JL)+ZA(JL, IRV)*ZMAXTIME(JL)+ZB(JL, IRV) - ZRCT(JL)=ZRCT(JL)+ZA(JL, IRC)*ZMAXTIME(JL)+ZB(JL, IRC) - ZRRT(JL)=ZRRT(JL)+ZA(JL, IRR)*ZMAXTIME(JL)+ZB(JL, IRR) - ZRIT(JL)=ZRIT(JL)+ZA(JL, IRI)*ZMAXTIME(JL)+ZB(JL, IRI) - ZRST(JL)=ZRST(JL)+ZA(JL, IRS)*ZMAXTIME(JL)+ZB(JL, IRS) - ZRGT(JL)=ZRGT(JL)+ZA(JL, IRG)*ZMAXTIME(JL)+ZB(JL, IRG) - ZCIT(JL)=ZCIT(JL) * MAX(0., -SIGN(1., -ZRIT(JL))) ! WHERE(ZRIT(:)==0.) ZCIT(:) = 0. - ENDDO - IF(KRR==7) ZRHT(:)=ZRHT(:)+ZA(:, IRH)*ZMAXTIME(:)+ZB(:, IRH) - ! - !*** 4.4 Mixing ratio change due to each process - ! - IF(LBU_ENABLE) THEN - ZTOT_RVHENI(:)= ZTOT_RVHENI(:) +ZRVHENI_MR(:) - ZTOT_RCHONI(:)= ZTOT_RCHONI(:) +ZRCHONI(:) *ZMAXTIME(:) - ZTOT_RRHONG(:)= ZTOT_RRHONG(:) +ZRRHONG_MR(:) - ZTOT_RVDEPS(:)= ZTOT_RVDEPS(:) +ZRVDEPS(:) *ZMAXTIME(:) - ZTOT_RIAGGS(:)= ZTOT_RIAGGS(:) +ZRIAGGS(:) *ZMAXTIME(:) - ZTOT_RIAUTS(:)= ZTOT_RIAUTS(:) +ZRIAUTS(:) *ZMAXTIME(:) - ZTOT_RVDEPG(:)= ZTOT_RVDEPG(:) +ZRVDEPG(:) *ZMAXTIME(:) - ZTOT_RCAUTR(:)= ZTOT_RCAUTR(:) +ZRCAUTR(:) *ZMAXTIME(:) - ZTOT_RCACCR(:)= ZTOT_RCACCR(:) +ZRCACCR(:) *ZMAXTIME(:) - ZTOT_RREVAV(:)= ZTOT_RREVAV(:) +ZRREVAV(:) *ZMAXTIME(:) - ZTOT_RCRIMSS(:)=ZTOT_RCRIMSS(:)+ZRCRIMSS(:)*ZMAXTIME(:) - ZTOT_RCRIMSG(:)=ZTOT_RCRIMSG(:)+ZRCRIMSG(:)*ZMAXTIME(:) - ZTOT_RSRIMCG(:)=ZTOT_RSRIMCG(:)+ZRSRIMCG(:)*ZMAXTIME(:)+ZRSRIMCG_MR(:) - ZTOT_RRACCSS(:)=ZTOT_RRACCSS(:)+ZRRACCSS(:)*ZMAXTIME(:) - ZTOT_RRACCSG(:)=ZTOT_RRACCSG(:)+ZRRACCSG(:)*ZMAXTIME(:) - ZTOT_RSACCRG(:)=ZTOT_RSACCRG(:)+ZRSACCRG(:)*ZMAXTIME(:) - ZTOT_RSMLTG(:)= ZTOT_RSMLTG(:) +ZRSMLTG(:) *ZMAXTIME(:) - ZTOT_RCMLTSR(:)=ZTOT_RCMLTSR(:)+ZRCMLTSR(:) *ZMAXTIME(:) - ZTOT_RICFRRG(:)=ZTOT_RICFRRG(:)+ZRICFRRG(:)*ZMAXTIME(:) - ZTOT_RRCFRIG(:)=ZTOT_RRCFRIG(:)+ZRRCFRIG(:)*ZMAXTIME(:) - ZTOT_RICFRR(:)= ZTOT_RICFRR(:) +ZRICFRR(:) *ZMAXTIME(:) - ZTOT_RCWETG(:)= ZTOT_RCWETG(:) +ZRCWETG(:) *ZMAXTIME(:) - ZTOT_RIWETG(:)= ZTOT_RIWETG(:) +ZRIWETG(:) *ZMAXTIME(:) - ZTOT_RRWETG(:)= ZTOT_RRWETG(:) +ZRRWETG(:) *ZMAXTIME(:) - ZTOT_RSWETG(:)= ZTOT_RSWETG(:) +ZRSWETG(:) *ZMAXTIME(:) - ZTOT_RWETGH(:)= ZTOT_RWETGH(:) +ZRWETGH(:) *ZMAXTIME(:)+ZRWETGH_MR(:) - ZTOT_RCDRYG(:)= ZTOT_RCDRYG(:) +ZRCDRYG(:) *ZMAXTIME(:) - ZTOT_RIDRYG(:)= ZTOT_RIDRYG(:) +ZRIDRYG(:) *ZMAXTIME(:) - ZTOT_RRDRYG(:)= ZTOT_RRDRYG(:) +ZRRDRYG(:) *ZMAXTIME(:) - ZTOT_RSDRYG(:)= ZTOT_RSDRYG(:) +ZRSDRYG(:) *ZMAXTIME(:) - ZTOT_RGMLTR(:)= ZTOT_RGMLTR(:) +ZRGMLTR(:) *ZMAXTIME(:) - ZTOT_RCWETH(:)= ZTOT_RCWETH(:) +ZRCWETH(:) *ZMAXTIME(:) - ZTOT_RIWETH(:)= ZTOT_RIWETH(:) +ZRIWETH(:) *ZMAXTIME(:) - ZTOT_RSWETH(:)= ZTOT_RSWETH(:) +ZRSWETH(:) *ZMAXTIME(:) - ZTOT_RGWETH(:)= ZTOT_RGWETH(:) +ZRGWETH(:) *ZMAXTIME(:) - ZTOT_RRWETH(:)= ZTOT_RRWETH(:) +ZRRWETH(:) *ZMAXTIME(:) - ZTOT_RCDRYH(:)= ZTOT_RCDRYH(:) +ZRCDRYH(:) *ZMAXTIME(:) - ZTOT_RIDRYH(:)= ZTOT_RIDRYH(:) +ZRIDRYH(:) *ZMAXTIME(:) - ZTOT_RSDRYH(:)= ZTOT_RSDRYH(:) +ZRSDRYH(:) *ZMAXTIME(:) - ZTOT_RRDRYH(:)= ZTOT_RRDRYH(:) +ZRRDRYH(:) *ZMAXTIME(:) - ZTOT_RGDRYH(:)= ZTOT_RGDRYH(:) +ZRGDRYH(:) *ZMAXTIME(:) - ZTOT_RDRYHG(:)= ZTOT_RDRYHG(:) +ZRDRYHG(:) *ZMAXTIME(:) - ZTOT_RHMLTR(:)= ZTOT_RHMLTR(:) +ZRHMLTR(:) *ZMAXTIME(:) - ZTOT_RIMLTC(:)= ZTOT_RIMLTC(:) +ZRIMLTC_MR(:) - ZTOT_RCBERI(:)= ZTOT_RCBERI(:) +ZRCBERI(:) *ZMAXTIME(:) - ENDIF - ! - !*** 4.5 Next loop - ! - LSOFT=.TRUE. ! We try to adjust tendencies (inner while loop) - ZTIME(:)=ZTIME(:)+ZMAXTIME(:) - ENDDO -ENDDO -!------------------------------------------------------------------------------- -! -!* 5. UNPACKING DIAGNOSTICS -! --------------------- -! -IF(IMICRO>0) THEN - ZW(:,:,:) = 0. - ZHLC_HCF3D(:,:,:) = UNPACK(ZHLC_HCF(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:)) - ZW(:,:,:) = 0. - ZHLC_LCF3D(:,:,:) = UNPACK(ZHLC_LCF(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:)) - ZW(:,:,:) = 0. - ZHLC_HRC3D(:,:,:) = UNPACK(ZHLC_HRC(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:)) - ZW(:,:,:) = 0. - ZHLC_LRC3D(:,:,:) = UNPACK(ZHLC_LRC(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:)) - PCIT(:,:,:) = UNPACK(ZCIT(:), MASK=ODMICRO(:,:,:), FIELD=PCIT(:,:,:)) -ELSE - ZRAINFR(:,:,:)=0. - ZHLC_HCF3D(:,:,:)=0. - ZHLC_LCF3D(:,:,:)=0. - ZHLC_HRC3D(:,:,:)=0. - ZHLC_LRC3D(:,:,:)=0. - PCIT(:,:,:) = 0. -ENDIF -IF(OWARM) THEN - ZW(:,:,:)=0. - PEVAP3D(:,:,:)=UNPACK(ZRREVAV(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:)) -ENDIF -! -! -!* 6. COMPUTES THE SLOW COLD PROCESS SOURCES OUTSIDE OF ODMICRO POINTS -! ---------------------------------------------------------------- -! -CALL ICE4_NUCLEATION_WRAPPER(KIT, KJT, KKT, .NOT. ODMICRO, & - PTHT, PPABST, PRHODREF, PEXN, ZZ_LSFACT, ZT, & - PRVT, & - PCIT, ZZ_RVHENI_MR) -DO JK = 1, KKT - DO JJ = 1, KJT - DO JI = 1, KIT - ZZ_LSFACT(JI,JJ,JK)=ZZ_LSFACT(JI,JJ,JK)/PEXNREF(JI,JJ,JK) - ZZ_LVFACT(JI,JJ,JK)=ZZ_LVFACT(JI,JJ,JK)/PEXNREF(JI,JJ,JK) - ZZ_RVHENI(JI,JJ,JK) = MIN(PRVS(JI,JJ,JK), ZZ_RVHENI_MR(JI,JJ,JK)/PTSTEP) - PRIS(JI,JJ,JK)=PRIS(JI,JJ,JK)+ZZ_RVHENI(JI,JJ,JK) - PRVS(JI,JJ,JK)=PRVS(JI,JJ,JK)-ZZ_RVHENI(JI,JJ,JK) - PTHS(JI,JJ,JK)=PTHS(JI,JJ,JK) + ZZ_RVHENI(JI,JJ,JK)*ZZ_LSFACT(JI,JJ,JK) - ENDDO - ENDDO -ENDDO -!------------------------------------------------------------------------------- -! -!* 7. UNPACKING AND TOTAL TENDENCIES -! ------------------------------ -! -! -!*** 7.1 total tendencies limited by available species -! -! ZW_??S variables will contain the new S variables values -! -IF(GEXT_TEND) THEN - !Z..T variables contain the exeternal tendency, we substract it - DO JL=1, IMICRO - ZRVT(JL) = ZRVT(JL) - ZEXT_RV(JL) * PTSTEP - ZRCT(JL) = ZRCT(JL) - ZEXT_RC(JL) * PTSTEP - ZRRT(JL) = ZRRT(JL) - ZEXT_RR(JL) * PTSTEP - ZRIT(JL) = ZRIT(JL) - ZEXT_RI(JL) * PTSTEP - ZRST(JL) = ZRST(JL) - ZEXT_RS(JL) * PTSTEP - ZRGT(JL) = ZRGT(JL) - ZEXT_RG(JL) * PTSTEP - ZTHT(JL) = ZTHT(JL) - ZEXT_TH(JL) * PTSTEP - ENDDO - IF (KRR==7) ZRHT(:) = ZRHT(:) - ZEXT_RH(:) * PTSTEP -ENDIF -!Tendencies computed from difference between old state and new state (can be negative) -ZW_RVS(:,:,:) = (UNPACK(ZRVT(:), MASK=ODMICRO(:,:,:), FIELD=PRVT(:,:,:)) - PRVT(:,:,:))*ZINV_TSTEP -ZW_RCS(:,:,:) = (UNPACK(ZRCT(:), MASK=ODMICRO(:,:,:), FIELD=PRCT(:,:,:)) - PRCT(:,:,:))*ZINV_TSTEP -ZW_RRS(:,:,:) = (UNPACK(ZRRT(:), MASK=ODMICRO(:,:,:), FIELD=PRRT(:,:,:)) - PRRT(:,:,:))*ZINV_TSTEP -ZW_RIS(:,:,:) = (UNPACK(ZRIT(:), MASK=ODMICRO(:,:,:), FIELD=PRIT(:,:,:)) - PRIT(:,:,:))*ZINV_TSTEP -ZW_RSS(:,:,:) = (UNPACK(ZRST(:), MASK=ODMICRO(:,:,:), FIELD=PRST(:,:,:)) - PRST(:,:,:))*ZINV_TSTEP -ZW_RGS(:,:,:) = (UNPACK(ZRGT(:), MASK=ODMICRO(:,:,:), FIELD=PRGT(:,:,:)) - PRGT(:,:,:))*ZINV_TSTEP -IF(KRR==7) THEN - ZW_RHS(:,:,:) = (UNPACK(ZRHT(:), MASK=ODMICRO(:,:,:), FIELD=PRHT(:,:,:)) - PRHT(:,:,:))*ZINV_TSTEP -ELSE - ZW_RHS(:,:,:) = 0. -ENDIF -DO JK = 1, KKT - DO JJ = 1, KJT - DO JI = 1, KIT - ZW_THS(JI,JJ,JK) = (ZW_RCS(JI,JJ,JK)+ZW_RRS(JI,JJ,JK))*ZZ_LVFACT(JI,JJ,JK) + & - & (ZW_RIS(JI,JJ,JK)+ZW_RSS(JI,JJ,JK)+ZW_RGS(JI,JJ,JK)+ & - &ZW_RHS(JI,JJ,JK))*ZZ_LSFACT(JI,JJ,JK) - !We apply these tendencies to the S variables - ZW_RVS(JI,JJ,JK) = PRVS(JI,JJ,JK) + ZW_RVS(JI,JJ,JK) - ZW_RCS(JI,JJ,JK) = PRCS(JI,JJ,JK) + ZW_RCS(JI,JJ,JK) - ZW_RRS(JI,JJ,JK) = PRRS(JI,JJ,JK) + ZW_RRS(JI,JJ,JK) - ZW_RIS(JI,JJ,JK) = PRIS(JI,JJ,JK) + ZW_RIS(JI,JJ,JK) - ZW_RSS(JI,JJ,JK) = PRSS(JI,JJ,JK) + ZW_RSS(JI,JJ,JK) - ZW_RGS(JI,JJ,JK) = PRGS(JI,JJ,JK) + ZW_RGS(JI,JJ,JK) - ZW_THS(JI,JJ,JK) = PTHS(JI,JJ,JK) + ZW_THS(JI,JJ,JK) - ENDDO - ENDDO -ENDDO -IF(KRR==7) ZW_RHS(:,:,:) = PRHS(:,:,:) + ZW_RHS(:,:,:) -!We correct negativities with conservation -CALL CORRECT_NEGATIVITIES(KIT, KJT, KKT, KRR, ZW_RVS, ZW_RCS, ZW_RRS, & - &ZW_RIS, ZW_RSS, ZW_RGS, & - &ZW_THS, ZZ_LVFACT, ZZ_LSFACT, ZW_RHS) -! -!*** 7.2 LBU_ENABLE case -! -IF(LBU_ENABLE) THEN - ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RVHENI(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP - PRIS(:,:,:) = PRIS(:,:,:) + ZW(:,:,:) - PRVS(:,:,:) = PRVS(:,:,:) - ZW(:,:,:) - PTHS(:,:,:) = PTHS(:,:,:) + ZW(:,:,:)*ZZ_LSFACT(:,:,:) - IF (LBUDGET_TH) CALL BUDGET(PTHS(:,:,:)*PRHODJ(:,:,:), 4, 'HENU_BU_RTH',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RV) CALL BUDGET(PRVS(:,:,:)*PRHODJ(:,:,:), 6, 'HENU_BU_RRV',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RI) CALL BUDGET(PRIS(:,:,:)*PRHODJ(:,:,:), 9, 'HENU_BU_RRI',YDDDH, YDLDDH, YDMDDH) - - ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RCHONI(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP - PRIS(:,:,:) = PRIS(:,:,:) + ZW(:,:,:) - PRCS(:,:,:) = PRCS(:,:,:) - ZW(:,:,:) - PTHS(:,:,:) = PTHS(:,:,:) + ZW(:,:,:)*(ZZ_LSFACT(:,:,:)-ZZ_LVFACT(:,:,:)) - IF (LBUDGET_TH) CALL BUDGET(PTHS(:,:,:)*PRHODJ(:,:,:), 4, 'HON_BU_RTH',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RC) CALL BUDGET(PRCS(:,:,:)*PRHODJ(:,:,:), 7, 'HON_BU_RRC',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RI) CALL BUDGET(PRIS(:,:,:)*PRHODJ(:,:,:), 9, 'HON_BU_RRI',YDDDH, YDLDDH, YDMDDH) - - ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RRHONG(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP - PRGS(:,:,:) = PRGS(:,:,:) + ZW(:,:,:) - PRRS(:,:,:) = PRRS(:,:,:) - ZW(:,:,:) - PTHS(:,:,:) = PTHS(:,:,:) + ZW(:,:,:)*(ZZ_LSFACT(:,:,:)-ZZ_LVFACT(:,:,:)) - IF (LBUDGET_TH) CALL BUDGET(PTHS(:,:,:)*PRHODJ(:,:,:), 4, 'SFR_BU_RTH',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RR) CALL BUDGET(PRRS(:,:,:)*PRHODJ(:,:,:), 8, 'SFR_BU_RRR',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RG) CALL BUDGET(PRGS(:,:,:)*PRHODJ(:,:,:), 11,'SFR_BU_RRG',YDDDH, YDLDDH, YDMDDH) - - ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RVDEPS(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP - PRSS(:,:,:) = PRSS(:,:,:) + ZW(:,:,:) - PRVS(:,:,:) = PRVS(:,:,:) - ZW(:,:,:) - PTHS(:,:,:) = PTHS(:,:,:) + ZW(:,:,:)*ZZ_LSFACT(:,:,:) - IF (LBUDGET_TH) CALL BUDGET(PTHS(:,:,:)*PRHODJ(:,:,:), 4, 'DEPS_BU_RTH',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RV) CALL BUDGET(PRVS(:,:,:)*PRHODJ(:,:,:), 6, 'DEPS_BU_RRV',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RS) CALL BUDGET(PRSS(:,:,:)*PRHODJ(:,:,:), 10,'DEPS_BU_RRS',YDDDH, YDLDDH, YDMDDH) - - ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RIAGGS(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP - PRSS(:,:,:) = PRSS(:,:,:) + ZW(:,:,:) - PRIS(:,:,:) = PRIS(:,:,:) - ZW(:,:,:) - IF (LBUDGET_RI) CALL BUDGET(PRIS(:,:,:)*PRHODJ(:,:,:), 9, 'AGGS_BU_RRI',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RS) CALL BUDGET(PRSS(:,:,:)*PRHODJ(:,:,:), 10,'AGGS_BU_RRS',YDDDH, YDLDDH, YDMDDH) - - ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RIAUTS(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP - PRSS(:,:,:) = PRSS(:,:,:) + ZW(:,:,:) - PRIS(:,:,:) = PRIS(:,:,:) - ZW(:,:,:) - IF (LBUDGET_RI) CALL BUDGET(PRIS(:,:,:)*PRHODJ(:,:,:), 9, 'AUTS_BU_RRI',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RS) CALL BUDGET(PRSS(:,:,:)*PRHODJ(:,:,:), 10,'AUTS_BU_RRS',YDDDH, YDLDDH, YDMDDH) - - ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RVDEPG(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP - PRGS(:,:,:) = PRGS(:,:,:) + ZW(:,:,:) - PRVS(:,:,:) = PRVS(:,:,:) - ZW(:,:,:) - PTHS(:,:,:) = PTHS(:,:,:) + ZW(:,:,:)*ZZ_LSFACT(:,:,:) - IF (LBUDGET_TH) CALL BUDGET(PTHS(:,:,:)*PRHODJ(:,:,:), 4, 'DEPG_BU_RTH',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RV) CALL BUDGET(PRVS(:,:,:)*PRHODJ(:,:,:), 6, 'DEPG_BU_RRV',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RG) CALL BUDGET(PRGS(:,:,:)*PRHODJ(:,:,:), 11,'DEPG_BU_RRG',YDDDH, YDLDDH, YDMDDH) - - IF(OWARM) THEN - ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RCAUTR(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP - PRCS(:,:,:) = PRCS(:,:,:) - ZW(:,:,:) - PRRS(:,:,:) = PRRS(:,:,:) + ZW(:,:,:) - IF (LBUDGET_RC) CALL BUDGET(PRCS(:,:,:)*PRHODJ(:,:,:), 7, 'AUTO_BU_RRC',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RR) CALL BUDGET(PRRS(:,:,:)*PRHODJ(:,:,:), 8, 'AUTO_BU_RRR',YDDDH, YDLDDH, YDMDDH) - - ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RCACCR(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP - PRCS(:,:,:) = PRCS(:,:,:) - ZW(:,:,:) - PRRS(:,:,:) = PRRS(:,:,:) + ZW(:,:,:) - IF (LBUDGET_RC) CALL BUDGET(PRCS(:,:,:)*PRHODJ(:,:,:), 7, 'ACCR_BU_RRC',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RR) CALL BUDGET(PRRS(:,:,:)*PRHODJ(:,:,:), 8, 'ACCR_BU_RRR',YDDDH, YDLDDH, YDMDDH) - - ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RREVAV(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP - PRRS(:,:,:) = PRRS(:,:,:) - ZW(:,:,:) - PRVS(:,:,:) = PRVS(:,:,:) + ZW(:,:,:) - PTHS(:,:,:) = PTHS(:,:,:) - ZW(:,:,:)*ZZ_LVFACT(:,:,:) - IF (LBUDGET_TH) CALL BUDGET(PTHS(:,:,:)*PRHODJ(:,:,:), 4, 'REVA_BU_RTH',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RV) CALL BUDGET(PRVS(:,:,:)*PRHODJ(:,:,:), 6, 'REVA_BU_RRV',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RR) CALL BUDGET(PRRS(:,:,:)*PRHODJ(:,:,:), 8, 'REVA_BU_RRR',YDDDH, YDLDDH, YDMDDH) - ENDIF - - ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RCRIMSS(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP - PRCS(:,:,:) = PRCS(:,:,:) - ZW(:,:,:) - PRSS(:,:,:) = PRSS(:,:,:) + ZW(:,:,:) - PTHS(:,:,:) = PTHS(:,:,:) + ZW(:,:,:)*(ZZ_LSFACT(:,:,:)-ZZ_LVFACT(:,:,:)) - ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RCRIMSG(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP - PRCS(:,:,:) = PRCS(:,:,:) - ZW(:,:,:) - PRGS(:,:,:) = PRGS(:,:,:) + ZW(:,:,:) - PTHS(:,:,:) = PTHS(:,:,:) + ZW(:,:,:)*(ZZ_LSFACT(:,:,:)-ZZ_LVFACT(:,:,:)) - ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RSRIMCG(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP - PRGS(:,:,:) = PRGS(:,:,:) + ZW(:,:,:) - PRSS(:,:,:) = PRSS(:,:,:) - ZW(:,:,:) - IF (LBUDGET_TH) CALL BUDGET(PTHS(:,:,:)*PRHODJ(:,:,:), 4, 'RIM_BU_RTH',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RC) CALL BUDGET(PRCS(:,:,:)*PRHODJ(:,:,:), 7, 'RIM_BU_RRC',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RS) CALL BUDGET(PRSS(:,:,:)*PRHODJ(:,:,:), 10,'RIM_BU_RRS',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RG) CALL BUDGET(PRGS(:,:,:)*PRHODJ(:,:,:), 11,'RIM_BU_RRG',YDDDH, YDLDDH, YDMDDH) - - ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RRACCSS(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP - PRRS(:,:,:) = PRRS(:,:,:) - ZW(:,:,:) - PRSS(:,:,:) = PRSS(:,:,:) + ZW(:,:,:) - PTHS(:,:,:) = PTHS(:,:,:) + ZW(:,:,:)*(ZZ_LSFACT(:,:,:)-ZZ_LVFACT(:,:,:)) - ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RRACCSG(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP - PRRS(:,:,:) = PRRS(:,:,:) - ZW(:,:,:) - PRGS(:,:,:) = PRGS(:,:,:) + ZW(:,:,:) - PTHS(:,:,:) = PTHS(:,:,:) + ZW(:,:,:)*(ZZ_LSFACT(:,:,:)-ZZ_LVFACT(:,:,:)) - ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RSACCRG(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP - PRSS(:,:,:) = PRSS(:,:,:) - ZW(:,:,:) - PRGS(:,:,:) = PRGS(:,:,:) + ZW(:,:,:) - IF (LBUDGET_TH) CALL BUDGET(PTHS(:,:,:)*PRHODJ(:,:,:), 4, 'ACC_BU_RTH',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RR) CALL BUDGET(PRRS(:,:,:)*PRHODJ(:,:,:), 8, 'ACC_BU_RRR',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RS) CALL BUDGET(PRSS(:,:,:)*PRHODJ(:,:,:), 10,'ACC_BU_RRS',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RG) CALL BUDGET(PRGS(:,:,:)*PRHODJ(:,:,:), 11,'ACC_BU_RRG',YDDDH, YDLDDH, YDMDDH) - - ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RSMLTG(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP - PRSS(:,:,:) = PRSS(:,:,:) - ZW(:,:,:) - PRGS(:,:,:) = PRGS(:,:,:) + ZW(:,:,:) - ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RCMLTSR, MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP - PRCS(:,:,:) = PRCS(:,:,:) - ZW(:,:,:) - PRRS(:,:,:) = PRRS(:,:,:) + ZW(:,:,:) - IF (LBUDGET_RS) CALL BUDGET(PRSS(:,:,:)*PRHODJ(:,:,:), 10,'CMEL_BU_RRS',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RG) CALL BUDGET(PRGS(:,:,:)*PRHODJ(:,:,:), 11,'CMEL_BU_RRG',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RC) CALL BUDGET(PRCS(:,:,:)*PRHODJ(:,:,:), 7, 'CMEL_BU_RRC',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RR) CALL BUDGET(PRRS(:,:,:)*PRHODJ(:,:,:), 8, 'CMEL_BU_RRR',YDDDH, YDLDDH, YDMDDH) - - ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RICFRRG(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP - PRIS(:,:,:) = PRIS(:,:,:) - ZW(:,:,:) - PRGS(:,:,:) = PRGS(:,:,:) + ZW(:,:,:) - ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RRCFRIG(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP - PRRS(:,:,:) = PRRS(:,:,:) - ZW(:,:,:) - PRGS(:,:,:) = PRGS(:,:,:) + ZW(:,:,:) - PTHS(:,:,:) = PTHS(:,:,:) + ZW(:,:,:)*(ZZ_LSFACT(:,:,:)-ZZ_LVFACT(:,:,:)) - ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RICFRR(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP - PRIS(:,:,:) = PRIS(:,:,:) - ZW(:,:,:) - PRRS(:,:,:) = PRRS(:,:,:) + ZW(:,:,:) - IF (LBUDGET_TH) CALL BUDGET(PTHS(:,:,:)*PRHODJ(:,:,:), 4, 'CFRZ_BU_RTH',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RR) CALL BUDGET(PRRS(:,:,:)*PRHODJ(:,:,:), 8, 'CFRZ_BU_RRR',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RI) CALL BUDGET(PRIS(:,:,:)*PRHODJ(:,:,:), 9, 'CFRZ_BU_RRI',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RG) CALL BUDGET(PRGS(:,:,:)*PRHODJ(:,:,:), 11,'CFRZ_BU_RRG',YDDDH, YDLDDH, YDMDDH) - - ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RCWETG(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP - PRCS(:,:,:) = PRCS(:,:,:) - ZW(:,:,:) - PRGS(:,:,:) = PRGS(:,:,:) + ZW(:,:,:) - PTHS(:,:,:) = PTHS(:,:,:) + ZW(:,:,:)*(ZZ_LSFACT(:,:,:)-ZZ_LVFACT(:,:,:)) - ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RRWETG(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP - PRRS(:,:,:) = PRRS(:,:,:) - ZW(:,:,:) - PRGS(:,:,:) = PRGS(:,:,:) + ZW(:,:,:) - PTHS(:,:,:) = PTHS(:,:,:) + ZW(:,:,:)*(ZZ_LSFACT(:,:,:)-ZZ_LVFACT(:,:,:)) - ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RIWETG(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP - PRIS(:,:,:) = PRIS(:,:,:) - ZW(:,:,:) - PRGS(:,:,:) = PRGS(:,:,:) + ZW(:,:,:) - ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RSWETG(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP - PRSS(:,:,:) = PRSS(:,:,:) - ZW(:,:,:) - PRGS(:,:,:) = PRGS(:,:,:) + ZW(:,:,:) - IF (LBUDGET_TH) CALL BUDGET(PTHS(:,:,:)*PRHODJ(:,:,:), 4, 'WETG_BU_RTH',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RC) CALL BUDGET(PRCS(:,:,:)*PRHODJ(:,:,:), 7, 'WETG_BU_RRC',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RR) CALL BUDGET(PRRS(:,:,:)*PRHODJ(:,:,:), 8, 'WETG_BU_RRR',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RI) CALL BUDGET(PRIS(:,:,:)*PRHODJ(:,:,:), 9, 'WETG_BU_RRI',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RS) CALL BUDGET(PRSS(:,:,:)*PRHODJ(:,:,:), 10,'WETG_BU_RRS',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RG) CALL BUDGET(PRGS(:,:,:)*PRHODJ(:,:,:), 11,'WETG_BU_RRG',YDDDH, YDLDDH, YDMDDH) - - IF(KRR==7) THEN - ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RWETGH(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP - PRGS(:,:,:) = PRGS(:,:,:) - ZW(:,:,:) - PRHS(:,:,:) = PRHS(:,:,:) + ZW(:,:,:) - IF (LBUDGET_RG) CALL BUDGET(PRGS(:,:,:)*PRHODJ(:,:,:), 11,'GHCV_BU_RRG',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RH) CALL BUDGET(PRHS(:,:,:)*PRHODJ(:,:,:), 12,'GHCV_BU_RRH',YDDDH, YDLDDH, YDMDDH) - END IF - - ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RCDRYG(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP - PRCS(:,:,:) = PRCS(:,:,:) - ZW(:,:,:) - PRGS(:,:,:) = PRGS(:,:,:) + ZW(:,:,:) - PTHS(:,:,:) = PTHS(:,:,:) + ZW(:,:,:)*(ZZ_LSFACT(:,:,:)-ZZ_LVFACT(:,:,:)) - ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RRDRYG(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP - PRRS(:,:,:) = PRRS(:,:,:) - ZW(:,:,:) - PRGS(:,:,:) = PRGS(:,:,:) + ZW(:,:,:) - PTHS(:,:,:) = PTHS(:,:,:) + ZW(:,:,:)*(ZZ_LSFACT(:,:,:)-ZZ_LVFACT(:,:,:)) - ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RIDRYG(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP - PRIS(:,:,:) = PRIS(:,:,:) - ZW(:,:,:) - PRGS(:,:,:) = PRGS(:,:,:) + ZW(:,:,:) - ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RSDRYG(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP - PRSS(:,:,:) = PRSS(:,:,:) - ZW(:,:,:) - PRGS(:,:,:) = PRGS(:,:,:) + ZW(:,:,:) - IF (LBUDGET_TH) CALL BUDGET(PTHS(:,:,:)*PRHODJ(:,:,:), 4, 'DRYG_BU_RTH',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RC) CALL BUDGET(PRCS(:,:,:)*PRHODJ(:,:,:), 7, 'DRYG_BU_RRC',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RR) CALL BUDGET(PRRS(:,:,:)*PRHODJ(:,:,:), 8, 'DRYG_BU_RRR',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RI) CALL BUDGET(PRIS(:,:,:)*PRHODJ(:,:,:), 9, 'DRYG_BU_RRI',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RS) CALL BUDGET(PRSS(:,:,:)*PRHODJ(:,:,:), 10,'DRYG_BU_RRS',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RG) CALL BUDGET(PRGS(:,:,:)*PRHODJ(:,:,:), 11,'DRYG_BU_RRG',YDDDH, YDLDDH, YDMDDH) - - ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RGMLTR(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP - PRRS(:,:,:) = PRRS(:,:,:) + ZW(:,:,:) - PRGS(:,:,:) = PRGS(:,:,:) - ZW(:,:,:) - PTHS(:,:,:) = PTHS(:,:,:) - ZW(:,:,:)*(ZZ_LSFACT(:,:,:)-ZZ_LVFACT(:,:,:)) - IF (LBUDGET_TH) CALL BUDGET(PTHS(:,:,:)*PRHODJ(:,:,:), 4, 'GMLT_BU_RTH',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RR) CALL BUDGET(PRRS(:,:,:)*PRHODJ(:,:,:), 8, 'GMLT_BU_RRR',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RG) CALL BUDGET(PRGS(:,:,:)*PRHODJ(:,:,:), 11,'GMLT_BU_RRG',YDDDH, YDLDDH, YDMDDH) - - IF(KRR==7) THEN - ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RCWETH(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP - PRCS(:,:,:) = PRCS(:,:,:) - ZW(:,:,:) - PRHS(:,:,:) = PRHS(:,:,:) + ZW(:,:,:) - PTHS(:,:,:) = PTHS(:,:,:) + ZW(:,:,:)*(ZZ_LSFACT(:,:,:)-ZZ_LVFACT(:,:,:)) - ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RRWETH(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP - PRRS(:,:,:) = PRRS(:,:,:) - ZW(:,:,:) - PRHS(:,:,:) = PRHS(:,:,:) + ZW(:,:,:) - PTHS(:,:,:) = PTHS(:,:,:) + ZW(:,:,:)*(ZZ_LSFACT(:,:,:)-ZZ_LVFACT(:,:,:)) - ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RIWETH(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP - PRIS(:,:,:) = PRIS(:,:,:) - ZW(:,:,:) - PRHS(:,:,:) = PRHS(:,:,:) + ZW(:,:,:) - ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RSWETH(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP - PRSS(:,:,:) = PRSS(:,:,:) - ZW(:,:,:) - PRHS(:,:,:) = PRHS(:,:,:) + ZW(:,:,:) - ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RGWETH(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP - PRGS(:,:,:) = PRGS(:,:,:) - ZW(:,:,:) - PRHS(:,:,:) = PRHS(:,:,:) + ZW(:,:,:) - IF (LBUDGET_TH) CALL BUDGET(PTHS(:,:,:)*PRHODJ(:,:,:), 4, 'WETH_BU_RTH',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RC) CALL BUDGET(PRCS(:,:,:)*PRHODJ(:,:,:), 7, 'WETH_BU_RRC',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RR) CALL BUDGET(PRRS(:,:,:)*PRHODJ(:,:,:), 8, 'WETH_BU_RRR',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RI) CALL BUDGET(PRIS(:,:,:)*PRHODJ(:,:,:), 9, 'WETH_BU_RRI',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RS) CALL BUDGET(PRSS(:,:,:)*PRHODJ(:,:,:), 10,'WETH_BU_RRS',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RH) CALL BUDGET(PRHS(:,:,:)*PRHODJ(:,:,:), 12,'WETH_BU_RRH',YDDDH, YDLDDH, YDMDDH) - - ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RGWETH(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP - PRGS(:,:,:) = PRGS(:,:,:) - ZW(:,:,:) - PRHS(:,:,:) = PRHS(:,:,:) + ZW(:,:,:) - IF (LBUDGET_RG) CALL BUDGET(PRGS(:,:,:)*PRHODJ(:,:,:), 11,'HGCV_BU_RRG',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RH) CALL BUDGET(PRHS(:,:,:)*PRHODJ(:,:,:), 12,'HGCV_BU_RRH',YDDDH, YDLDDH, YDMDDH) - - ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RCDRYH(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP - PRCS(:,:,:) = PRCS(:,:,:) - ZW(:,:,:) - PRHS(:,:,:) = PRHS(:,:,:) + ZW(:,:,:) - PTHS(:,:,:) = PTHS(:,:,:) + ZW(:,:,:)*(ZZ_LSFACT(:,:,:)-ZZ_LVFACT(:,:,:)) - ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RRDRYH(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP - PRRS(:,:,:) = PRRS(:,:,:) - ZW(:,:,:) - PRHS(:,:,:) = PRHS(:,:,:) + ZW(:,:,:) - PTHS(:,:,:) = PTHS(:,:,:) + ZW(:,:,:)*(ZZ_LSFACT(:,:,:)-ZZ_LVFACT(:,:,:)) - ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RIDRYH(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP - PRIS(:,:,:) = PRIS(:,:,:) - ZW(:,:,:) - PRHS(:,:,:) = PRHS(:,:,:) + ZW(:,:,:) - ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RSDRYH(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP - PRSS(:,:,:) = PRSS(:,:,:) - ZW(:,:,:) - PRHS(:,:,:) = PRHS(:,:,:) + ZW(:,:,:) - ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RGDRYH(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP - PRGS(:,:,:) = PRGS(:,:,:) - ZW(:,:,:) - PRHS(:,:,:) = PRHS(:,:,:) + ZW(:,:,:) - ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RDRYHG(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP - PRHS(:,:,:) = PRHS(:,:,:) - ZW(:,:,:) - PRGS(:,:,:) = PRGS(:,:,:) + ZW(:,:,:) - IF (LBUDGET_TH) CALL BUDGET(PTHS(:,:,:)*PRHODJ(:,:,:), 4, 'DRYH_BU_RTH',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RC) CALL BUDGET(PRCS(:,:,:)*PRHODJ(:,:,:), 7, 'DRYH_BU_RRC',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RR) CALL BUDGET(PRRS(:,:,:)*PRHODJ(:,:,:), 8, 'DRYH_BU_RRR',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RI) CALL BUDGET(PRIS(:,:,:)*PRHODJ(:,:,:), 9, 'DRYH_BU_RRI',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RS) CALL BUDGET(PRSS(:,:,:)*PRHODJ(:,:,:), 10,'DRYH_BU_RRS',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RG) CALL BUDGET(PRGS(:,:,:)*PRHODJ(:,:,:), 11,'DRYH_BU_RRG',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RH) CALL BUDGET(PRHS(:,:,:)*PRHODJ(:,:,:), 12,'DRYH_BU_RRH',YDDDH, YDLDDH, YDMDDH) - - ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RHMLTR(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP - PRRS(:,:,:) = PRRS(:,:,:) + ZW(:,:,:) - PRHS(:,:,:) = PRHS(:,:,:) - ZW(:,:,:) - PTHS(:,:,:) = PTHS(:,:,:) - ZW(:,:,:)*(ZZ_LSFACT(:,:,:)-ZZ_LVFACT(:,:,:)) - IF (LBUDGET_TH) CALL BUDGET(PTHS(:,:,:)*PRHODJ(:,:,:), 4, 'HMLT_BU_RTH',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RR) CALL BUDGET(PRRS(:,:,:)*PRHODJ(:,:,:), 8, 'HMLT_BU_RRR',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RH) CALL BUDGET(PRHS(:,:,:)*PRHODJ(:,:,:), 12,'HMLT_BU_RRH',YDDDH, YDLDDH, YDMDDH) - ENDIF - - ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RIMLTC(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP - PRIS(:,:,:) = PRIS(:,:,:) - ZW(:,:,:) - PRCS(:,:,:) = PRCS(:,:,:) + ZW(:,:,:) - PTHS(:,:,:) = PTHS(:,:,:) - ZW(:,:,:)*(ZZ_LSFACT(:,:,:)-ZZ_LVFACT(:,:,:)) - IF (LBUDGET_TH) CALL BUDGET(PTHS(:,:,:)*PRHODJ(:,:,:), 4, 'IMLT_BU_RTH',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RC) CALL BUDGET(PRCS(:,:,:)*PRHODJ(:,:,:), 7, 'IMLT_BU_RRC',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RI) CALL BUDGET(PRIS(:,:,:)*PRHODJ(:,:,:), 9, 'IMLT_BU_RRI',YDDDH, YDLDDH, YDMDDH) - - ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RCBERI(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP - PRCS(:,:,:) = PRCS(:,:,:) - ZW(:,:,:) - PRIS(:,:,:) = PRIS(:,:,:) + ZW(:,:,:) - PTHS(:,:,:) = PTHS(:,:,:) + ZW(:,:,:)*(ZZ_LSFACT(:,:,:)-ZZ_LVFACT(:,:,:)) - IF (LBUDGET_TH) CALL BUDGET(PTHS(:,:,:)*PRHODJ(:,:,:), 4, 'BERFI_BU_RTH',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RC) CALL BUDGET(PRCS(:,:,:)*PRHODJ(:,:,:), 7, 'BERFI_BU_RRC',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RI) CALL BUDGET(PRIS(:,:,:)*PRHODJ(:,:,:), 9, 'BERFI_BU_RRI',YDDDH, YDLDDH, YDMDDH) -ENDIF -! -!*** 7.3 Final tendencies -! -DO JK = 1, KKT - DO JJ = 1, KJT - DO JI = 1, KIT - PRVS(JI,JJ,JK) = ZW_RVS(JI,JJ,JK) - PRCS(JI,JJ,JK) = ZW_RCS(JI,JJ,JK) - PRRS(JI,JJ,JK) = ZW_RRS(JI,JJ,JK) - PRIS(JI,JJ,JK) = ZW_RIS(JI,JJ,JK) - PRSS(JI,JJ,JK) = ZW_RSS(JI,JJ,JK) - PRGS(JI,JJ,JK) = ZW_RGS(JI,JJ,JK) - PTHS(JI,JJ,JK) = ZW_THS(JI,JJ,JK) - ENDDO - ENDDO -ENDDO -IF (KRR==7) PRHS(:,:,:) = ZW_RHS(:,:,:) -IF(LBU_ENABLE) THEN - IF (LBUDGET_TH) CALL BUDGET(PTHS(:,:,:)*PRHODJ(:,:,:), 4, 'CORR_BU_RTH',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RV) CALL BUDGET(PRVS(:,:,:)*PRHODJ(:,:,:), 6, 'CORR_BU_RRV',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RC) CALL BUDGET(PRCS(:,:,:)*PRHODJ(:,:,:), 7, 'CORR_BU_RRC',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RR) CALL BUDGET(PRRS(:,:,:)*PRHODJ(:,:,:), 8, 'CORR_BU_RRR',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RI) CALL BUDGET(PRIS(:,:,:)*PRHODJ(:,:,:), 9, 'CORR_BU_RRI',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RS) CALL BUDGET(PRSS(:,:,:)*PRHODJ(:,:,:), 10,'CORR_BU_RRS',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RG) CALL BUDGET(PRGS(:,:,:)*PRHODJ(:,:,:), 11,'CORR_BU_RRG',YDDDH, YDLDDH, YDMDDH) - IF (KRR==7) THEN - IF (LBUDGET_RH) CALL BUDGET(PRHS(:,:,:)*PRHODJ(:,:,:), 12,'CORR_BU_RRH',YDDDH, YDLDDH, YDMDDH) - ENDIF -ENDIF -! -!------------------------------------------------------------------------------- -! -!* 8. COMPUTE THE SEDIMENTATION (RS) SOURCE -! ------------------------------------- -! -IF(LSEDIM_AFTER) THEN - ! - !* 8.1 sedimentation - ! - IF(HSEDIM=='STAT') THEN - !SR: It *seems* that we must have two separate calls for ifort - IF(KRR==7) THEN - CALL ICE4_SEDIMENTATION_STAT(IIB, IIE, KIT, IJB, IJE, KJT, IKB, IKE, IKTB, IKTE, KKT, KKL, & - &PTSTEP, KRR, OSEDIC, & - &PDZZ, & - &PRHODREF, PPABST, PTHT, PRHODJ, & - &PRCS, PRCS*PTSTEP, PRRS, PRRS*PTSTEP, PRIS, PRIS*PTSTEP,& - &PRSS, PRSS*PTSTEP, PRGS, PRGS*PTSTEP,& - &PINPRC, PINPRR, ZINPRI, PINPRS, PINPRG, & - &PSEA=PSEA, PTOWN=PTOWN, & - &PINPRH=PINPRH, PRHT=PRHS*PTSTEP, PRHS=PRHS, PFPR=PFPR) - ELSE - CALL ICE4_SEDIMENTATION_STAT(IIB, IIE, KIT, IJB, IJE, KJT, IKB, IKE, IKTB, IKTE, KKT, KKL, & - &PTSTEP, KRR, OSEDIC, & - &PDZZ, & - &PRHODREF, PPABST, PTHT, PRHODJ, & - &PRCS, PRCS*PTSTEP, PRRS, PRRS*PTSTEP, PRIS, PRIS*PTSTEP,& - &PRSS, PRSS*PTSTEP, PRGS, PRGS*PTSTEP,& - &PINPRC, PINPRR, ZINPRI, PINPRS, PINPRG, & - &PSEA=PSEA, PTOWN=PTOWN, & - &PFPR=PFPR) - ENDIF - PINPRS(:,:) = PINPRS(:,:) + ZINPRI(:,:) - !No negativity correction here as we apply sedimentation on PR.S*PTSTEP variables - ELSEIF(HSEDIM=='SPLI') THEN - !SR: It *seems* that we must have two separate calls for ifort - IF(KRR==7) THEN - CALL ICE4_SEDIMENTATION_SPLIT(IIB, IIE, KIT, IJB, IJE, KJT, IKB, IKE, IKTB, IKTE, KKT, KKL, & - &PTSTEP, KRR, OSEDIC, & - &PDZZ, & - &PRHODREF, PPABST, PTHT, PRHODJ, & - &PRCS, PRCT, PRRS, PRRT, PRIS, PRIT, PRSS, PRST, PRGS, PRGT,& - &PINPRC, PINPRR, ZINPRI, PINPRS, PINPRG, & - &PSEA=PSEA, PTOWN=PTOWN, & - &PINPRH=PINPRH, PRHT=PRHT, PRHS=PRHS, PFPR=PFPR) - ELSE - CALL ICE4_SEDIMENTATION_SPLIT(IIB, IIE, KIT, IJB, IJE, KJT, IKB, IKE, IKTB, IKTE, KKT, KKL, & - &PTSTEP, KRR, OSEDIC, & - &PDZZ, & - &PRHODREF, PPABST, PTHT, PRHODJ, & - &PRCS, PRCT, PRRS, PRRT, PRIS, PRIT, PRSS, PRST, PRGS, PRGT,& - &PINPRC, PINPRR, ZINPRI, PINPRS, PINPRG, & - &PSEA=PSEA, PTOWN=PTOWN, & - &PFPR=PFPR) - ENDIF - PINPRS(:,:) = PINPRS(:,:) + ZINPRI(:,:) - !We correct negativities with conservation - !SPLI algorith uses a time-splitting. Inside the loop a temporary m.r. is used. - ! It is initialized with the m.r. at T and is modified by two tendencies: - ! sedimentation tendency and an external tendency which represents all other - ! processes (mainly advection and microphysical processes). If both tendencies - ! are negative, sedimentation can remove a specie at a given sub-timestep. From - ! this point sedimentation stops for the remaining sub-timesteps but the other tendency - ! will be still active and will lead to negative values. - ! We could prevent the algorithm to not consume too much a specie, instead we apply - ! a correction here. - CALL CORRECT_NEGATIVITIES(KIT, KJT, KKT, KRR, PRVS, PRCS, PRRS, & - &PRIS, PRSS, PRGS, & - &PTHS, ZZ_LVFACT, ZZ_LSFACT, PRHS) - ELSE - WRITE(*,*) ' STOP' - WRITE(*,*) ' NO SEDIMENTATION SCHEME FOR HSEDIM=', HSEDIM - CALL ABORT - STOP - END IF - ! - !* 8.2 budget storage - ! - IF (LBUDGET_RC .AND. OSEDIC) & - CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:), 7 , 'SEDI_BU_RRC',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:)*PRHODJ(:,:,:), 8 , 'SEDI_BU_RRR',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RI) CALL BUDGET (PRIS(:,:,:)*PRHODJ(:,:,:), 9 , 'SEDI_BU_RRI',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RS) CALL BUDGET (PRSS(:,:,:)*PRHODJ(:,:,:), 10, 'SEDI_BU_RRS',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RG) CALL BUDGET (PRGS(:,:,:)*PRHODJ(:,:,:), 11, 'SEDI_BU_RRG',YDDDH, YDLDDH, YDMDDH) - IF ( KRR == 7 .AND. LBUDGET_RH) & - CALL BUDGET (PRHS(:,:,:)*PRHODJ(:,:,:), 12, 'SEDI_BU_RRH',YDDDH, YDLDDH, YDMDDH) - ! - !sedimentation of rain fraction - CALL ICE4_RAINFR_VERT(IIB, IIE, KIT, IJB, IJE, KJT, IKB, IKE, KKT, KKL, ZRAINFR, PRRS(:,:,:)*PTSTEP) - -ENDIF -! -!------------------------------------------------------------------------------- -! -!* 9. COMPUTE THE FOG DEPOSITION TERM -! ------------------------------------- -! -IF (LDEPOSC) THEN !cloud water deposition on vegetation - PRCS(:,:,IKB) = PRCS(:,:,IKB) - XVDEPOSC * PRCT(:,:,IKB) / PDZZ(:,:,IKB) - PINPRC(:,:) = PINPRC(:,:) + XVDEPOSC * PRCT(:,:,IKB) * PRHODREF(:,:,IKB)/XRHOLW - - - - - - - - - - - - - - - - - - - - - !PINDEP(:,:) = XVDEPOSC * PRCT(:,:,KKB) * PRHODREF(:,:,KKB) /XRHOLW - - - - - - - - - - - - - - - IF (LBUDGET_RC) CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:),7,'DEPO_BU_RRC',YDDDH, YDLDDH, YDMDDH) -ENDIF - -IF (LHOOK) CALL DR_HOOK('RAIN_ICE', 1, ZHOOK_HANDLE) -! -CONTAINS - FUNCTION RAIN_ICE_COUNTJV(LTAB, KIT, KJT, KKT, KSIZE, I1,I2,I3) RESULT(IC) - ! - !* 0. DECLARATIONS - ! ------------ - ! - IMPLICIT NONE - ! - !* 0.2 declaration of local variables - ! - ! - INTEGER, INTENT(IN) :: KIT, KJT, KKT, KSIZE - LOGICAL, DIMENSION(KIT,KJT,KKT), INTENT(IN) :: LTAB ! Mask - INTEGER, DIMENSION(KSIZE), INTENT(OUT) :: I1,I2,I3 ! Used to replace the COUNT and PACK - INTEGER :: JI,JJ,JK,IC - ! - !------------------------------------------------------------------------------- - ! - REAL(KIND=JPRB) :: ZHOOK_HANDLE - IF (LHOOK) CALL DR_HOOK('RAIN_ICE:RAIN_ICE_COUNTJV', 0, ZHOOK_HANDLE) - IC = 0 - DO JK = 1, SIZE(LTAB,3) - DO JJ = 1, SIZE(LTAB,2) - DO JI = 1, SIZE(LTAB,1) - IF(LTAB(JI,JJ,JK)) THEN - IC = IC +1 - I1(IC) = JI - I2(IC) = JJ - I3(IC) = JK - END IF - END DO - END DO - END DO - ! - IF (LHOOK) CALL DR_HOOK('RAIN_ICE:RAIN_ICE_COUNTJV', 1, ZHOOK_HANDLE) - ! - END FUNCTION RAIN_ICE_COUNTJV - ! - ! - SUBROUTINE CORRECT_NEGATIVITIES(KIT, KJT, KKT, KRR, PRV, PRC, PRR, & - &PRI, PRS, PRG, & - &PTH, PLVFACT, PLSFACT, PRH) - ! - IMPLICIT NONE - ! - INTEGER, INTENT(IN) :: KIT, KJT, KKT, KRR - REAL, DIMENSION(KIT, KJT, KKT), INTENT(INOUT) :: PRV, PRC, PRR, PRI, PRS, PRG, PTH - REAL, DIMENSION(KIT, KJT, KKT), INTENT(IN) :: PLVFACT, PLSFACT - REAL, DIMENSION(KIT, KJT, KKT), OPTIONAL, INTENT(INOUT) :: PRH - ! - REAL, DIMENSION(KIT, KJT, KKT) :: ZW - INTEGER :: JI, JJ, JK - REAL(KIND=JPRB) :: ZHOOK_HANDLE - ! - IF (LHOOK) CALL DR_HOOK('RAIN_ICE:CORRECT_NEGATIVITIES', 0, ZHOOK_HANDLE) - ! - !We correct negativities with conservation - ! 1) deal with negative values for mixing ratio, except for vapor - DO JK = 1, KKT - DO JJ = 1, KJT - DO JI = 1, KIT - ZW(JI,JJ,JK) =PRC(JI,JJ,JK)-MAX(PRC(JI,JJ,JK), 0.) - PRV(JI,JJ,JK)=PRV(JI,JJ,JK)+ZW(JI,JJ,JK) - PTH(JI,JJ,JK)=PTH(JI,JJ,JK)-ZW(JI,JJ,JK)*PLVFACT(JI,JJ,JK) - PRC(JI,JJ,JK)=PRC(JI,JJ,JK)-ZW(JI,JJ,JK) - - ZW(JI,JJ,JK) =PRR(JI,JJ,JK)-MAX(PRR(JI,JJ,JK), 0.) - PRV(JI,JJ,JK)=PRV(JI,JJ,JK)+ZW(JI,JJ,JK) - PTH(JI,JJ,JK)=PTH(JI,JJ,JK)-ZW(JI,JJ,JK)*PLVFACT(JI,JJ,JK) - PRR(JI,JJ,JK)=PRR(JI,JJ,JK)-ZW(JI,JJ,JK) - - ZW(JI,JJ,JK) =PRI(JI,JJ,JK)-MAX(PRI(JI,JJ,JK), 0.) - PRV(JI,JJ,JK)=PRV(JI,JJ,JK)+ZW(JI,JJ,JK) - PTH(JI,JJ,JK)=PTH(JI,JJ,JK)-ZW(JI,JJ,JK)*PLSFACT(JI,JJ,JK) - PRI(JI,JJ,JK)=PRI(JI,JJ,JK)-ZW(JI,JJ,JK) - - ZW(JI,JJ,JK) =PRS(JI,JJ,JK)-MAX(PRS(JI,JJ,JK), 0.) - PRV(JI,JJ,JK)=PRV(JI,JJ,JK)+ZW(JI,JJ,JK) - PTH(JI,JJ,JK)=PTH(JI,JJ,JK)-ZW(JI,JJ,JK)*PLSFACT(JI,JJ,JK) - PRS(JI,JJ,JK)=PRS(JI,JJ,JK)-ZW(JI,JJ,JK) - - ZW(JI,JJ,JK) =PRG(JI,JJ,JK)-MAX(PRG(JI,JJ,JK), 0.) - PRV(JI,JJ,JK)=PRV(JI,JJ,JK)+ZW(JI,JJ,JK) - PTH(JI,JJ,JK)=PTH(JI,JJ,JK)-ZW(JI,JJ,JK)*PLSFACT(JI,JJ,JK) - PRG(JI,JJ,JK)=PRG(JI,JJ,JK)-ZW(JI,JJ,JK) - ENDDO - ENDDO - ENDDO - - IF(KRR==7) THEN - DO JK = 1, KKT - DO JJ = 1, KJT - DO JI = 1, KIT - ZW(JI,JJ,JK) =PRH(JI,JJ,JK)-MAX(PRH(JI,JJ,JK), 0.) - PRV(JI,JJ,JK)=PRV(JI,JJ,JK)+ZW(JI,JJ,JK) - PTH(JI,JJ,JK)=PTH(JI,JJ,JK)-ZW(JI,JJ,JK)*PLSFACT(JI,JJ,JK) - PRH(JI,JJ,JK)=PRH(JI,JJ,JK)-ZW(JI,JJ,JK) - ENDDO - ENDDO - ENDDO - ENDIF - - ! 2) deal with negative vapor mixing ratio - - DO JK = 1, KKT - DO JJ = 1, KJT - DO JI = 1, KIT - ! for rc and ri, we keep ice fraction constant - ZW(JI,JJ,JK)=MIN(1., MAX(XRTMIN(1)-PRV(JI,JJ,JK), 0.) / & - &MAX(PRC(JI,JJ,JK)+PRI(JI,JJ,JK), 1.E-20)) ! Proportion of rc+ri to convert into rv - PTH(JI,JJ,JK)=PTH(JI,JJ,JK)-ZW(JI,JJ,JK)* & - &(PRC(JI,JJ,JK)*PLVFACT(JI,JJ,JK)+PRI(JI,JJ,JK)*PLSFACT(JI,JJ,JK)) - PRV(JI,JJ,JK)=PRV(JI,JJ,JK)+ZW(JI,JJ,JK)*(PRC(JI,JJ,JK)+PRI(JI,JJ,JK)) - PRC(JI,JJ,JK)=(1.-ZW(JI,JJ,JK))*PRC(JI,JJ,JK) - PRI(JI,JJ,JK)=(1.-ZW(JI,JJ,JK))*PRI(JI,JJ,JK) - - ZW(JI,JJ,JK)=MIN(MAX(PRR(JI,JJ,JK), 0.), & - &MAX(XRTMIN(1)-PRV(JI,JJ,JK), 0.)) ! Quantity of rr to convert into rv - PRV(JI,JJ,JK)=PRV(JI,JJ,JK)+ZW(JI,JJ,JK) - PRR(JI,JJ,JK)=PRR(JI,JJ,JK)-ZW(JI,JJ,JK) - PTH(JI,JJ,JK)=PTH(JI,JJ,JK)-ZW(JI,JJ,JK)*PLVFACT(JI,JJ,JK) - - ZW(JI,JJ,JK)=MIN(MAX(PRS(JI,JJ,JK), 0.), & - &MAX(XRTMIN(1)-PRV(JI,JJ,JK), 0.)) ! Quantity of rs to convert into rv - PRV(JI,JJ,JK)=PRV(JI,JJ,JK)+ZW(JI,JJ,JK) - PRS(JI,JJ,JK)=PRS(JI,JJ,JK)-ZW(JI,JJ,JK) - PTH(JI,JJ,JK)=PTH(JI,JJ,JK)-ZW(JI,JJ,JK)*PLSFACT(JI,JJ,JK) - - ZW(JI,JJ,JK)=MIN(MAX(PRG(JI,JJ,JK), 0.), & - &MAX(XRTMIN(1)-PRV(JI,JJ,JK), 0.)) ! Quantity of rg to convert into rv - PRV(JI,JJ,JK)=PRV(JI,JJ,JK)+ZW(JI,JJ,JK) - PRG(JI,JJ,JK)=PRG(JI,JJ,JK)-ZW(JI,JJ,JK) - PTH(JI,JJ,JK)=PTH(JI,JJ,JK)-ZW(JI,JJ,JK)*PLSFACT(JI,JJ,JK) - ENDDO - ENDDO - ENDDO - - IF(KRR==7) THEN - DO JK = 1, KKT - DO JJ = 1, KJT - DO JI = 1, KIT - ZW(JI,JJ,JK)=MIN(MAX(PRH(JI,JJ,JK), 0.), & - &MAX(XRTMIN(1)-PRV(JI,JJ,JK), 0.)) ! Quantity of rh to convert into rv - PRV(JI,JJ,JK)=PRV(JI,JJ,JK)+ZW(JI,JJ,JK) - PRH(JI,JJ,JK)=PRH(JI,JJ,JK)-ZW(JI,JJ,JK) - PTH(JI,JJ,JK)=PTH(JI,JJ,JK)-ZW(JI,JJ,JK)*PLSFACT(JI,JJ,JK) - ENDDO - ENDDO - ENDDO - ENDIF - ! - IF (LHOOK) CALL DR_HOOK('RAIN_ICE:CORRECT_NEGATIVITIES', 1, ZHOOK_HANDLE) - ! - END SUBROUTINE CORRECT_NEGATIVITIES - -! -END SUBROUTINE RAIN_ICE diff --git a/src/arome/micro/rain_ice_old.F90 b/src/arome/micro/rain_ice_old.F90 index eb1d734b8a1c9b413d38ad608ba67d6fafa7875b..9a83426d0060f359f1bcd9031ee0d6af3232c064 100644 --- a/src/arome/micro/rain_ice_old.F90 +++ b/src/arome/micro/rain_ice_old.F90 @@ -169,7 +169,7 @@ USE MODD_PARAM_ICE USE MODD_BUDGET USE MODD_SPP_TYPE USE MODD_LES -USE MODI_BUDGET +USE MODI_BUDGET_DDH USE MODI_GAMMA USE MODD_TIWMX USE MODI_ICECLOUD @@ -1201,87 +1201,87 @@ IF( IMICRO >= 0 ) THEN ! Reordered for compability with flexible structures like in AROME ! rain_ice_slow - IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)*PRHODJ(:,:,:),4,'HON_BU_RTH',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RC) CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:),7,'HON_BU_RRC',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RI) CALL BUDGET (PRIS(:,:,:)*PRHODJ(:,:,:),9,'HON_BU_RRI',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)*PRHODJ(:,:,:),4,'SFR_BU_RTH',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:)*PRHODJ(:,:,:),8,'SFR_BU_RRR',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RG) CALL BUDGET (PRGS(:,:,:)*PRHODJ(:,:,:),11,'SFR_BU_RRG',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)*PRHODJ(:,:,:),4,'DEPS_BU_RTH',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RV) CALL BUDGET (PRVS(:,:,:)*PRHODJ(:,:,:),6,'DEPS_BU_RRV',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RS) CALL BUDGET (PRSS(:,:,:)*PRHODJ(:,:,:),10,'DEPS_BU_RRS',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RI) CALL BUDGET (PRIS(:,:,:)*PRHODJ(:,:,:),9,'AGGS_BU_RRI',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RS) CALL BUDGET (PRSS(:,:,:)*PRHODJ(:,:,:),10,'AGGS_BU_RRS',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RI) CALL BUDGET (PRIS(:,:,:)*PRHODJ(:,:,:),9,'AUTS_BU_RRI',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RS) CALL BUDGET (PRSS(:,:,:)*PRHODJ(:,:,:),10,'AUTS_BU_RRS',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)*PRHODJ(:,:,:),4,'DEPG_BU_RTH',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RV) CALL BUDGET (PRVS(:,:,:)*PRHODJ(:,:,:),6,'DEPG_BU_RRV',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RG) CALL BUDGET (PRGS(:,:,:)*PRHODJ(:,:,:),11,'DEPG_BU_RRG',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_TH) CALL BUDGET_DDH (PTHS(:,:,:)*PRHODJ(:,:,:),4,'HON_BU_RTH',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_RC) CALL BUDGET_DDH (PRCS(:,:,:)*PRHODJ(:,:,:),7,'HON_BU_RRC',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_RI) CALL BUDGET_DDH (PRIS(:,:,:)*PRHODJ(:,:,:),9,'HON_BU_RRI',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_TH) CALL BUDGET_DDH (PTHS(:,:,:)*PRHODJ(:,:,:),4,'SFR_BU_RTH',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_RR) CALL BUDGET_DDH (PRRS(:,:,:)*PRHODJ(:,:,:),8,'SFR_BU_RRR',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_RG) CALL BUDGET_DDH (PRGS(:,:,:)*PRHODJ(:,:,:),11,'SFR_BU_RRG',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_TH) CALL BUDGET_DDH (PTHS(:,:,:)*PRHODJ(:,:,:),4,'DEPS_BU_RTH',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_RV) CALL BUDGET_DDH (PRVS(:,:,:)*PRHODJ(:,:,:),6,'DEPS_BU_RRV',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_RS) CALL BUDGET_DDH (PRSS(:,:,:)*PRHODJ(:,:,:),10,'DEPS_BU_RRS',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_RI) CALL BUDGET_DDH (PRIS(:,:,:)*PRHODJ(:,:,:),9,'AGGS_BU_RRI',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_RS) CALL BUDGET_DDH (PRSS(:,:,:)*PRHODJ(:,:,:),10,'AGGS_BU_RRS',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_RI) CALL BUDGET_DDH (PRIS(:,:,:)*PRHODJ(:,:,:),9,'AUTS_BU_RRI',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_RS) CALL BUDGET_DDH (PRSS(:,:,:)*PRHODJ(:,:,:),10,'AUTS_BU_RRS',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_TH) CALL BUDGET_DDH (PTHS(:,:,:)*PRHODJ(:,:,:),4,'DEPG_BU_RTH',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_RV) CALL BUDGET_DDH (PRVS(:,:,:)*PRHODJ(:,:,:),6,'DEPG_BU_RRV',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_RG) CALL BUDGET_DDH (PRGS(:,:,:)*PRHODJ(:,:,:),11,'DEPG_BU_RRG',YDDDH, YDLDDH, YDMDDH) IF (OWARM) THEN ! rain_ice_warm - IF (LBUDGET_RC) CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:),7,'AUTO_BU_RRC',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:)*PRHODJ(:,:,:),8,'AUTO_BU_RRR',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RC) CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:),7,'ACCR_BU_RRC',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:)*PRHODJ(:,:,:),8,'ACCR_BU_RRR',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)*PRHODJ(:,:,:),4,'REVA_BU_RTH',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RV) CALL BUDGET (PRVS(:,:,:)*PRHODJ(:,:,:),6,'REVA_BU_RRV',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:)*PRHODJ(:,:,:),8,'REVA_BU_RRR',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_RC) CALL BUDGET_DDH (PRCS(:,:,:)*PRHODJ(:,:,:),7,'AUTO_BU_RRC',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_RR) CALL BUDGET_DDH (PRRS(:,:,:)*PRHODJ(:,:,:),8,'AUTO_BU_RRR',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_RC) CALL BUDGET_DDH (PRCS(:,:,:)*PRHODJ(:,:,:),7,'ACCR_BU_RRC',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_RR) CALL BUDGET_DDH (PRRS(:,:,:)*PRHODJ(:,:,:),8,'ACCR_BU_RRR',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_TH) CALL BUDGET_DDH (PTHS(:,:,:)*PRHODJ(:,:,:),4,'REVA_BU_RTH',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_RV) CALL BUDGET_DDH (PRVS(:,:,:)*PRHODJ(:,:,:),6,'REVA_BU_RRV',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_RR) CALL BUDGET_DDH (PRRS(:,:,:)*PRHODJ(:,:,:),8,'REVA_BU_RRR',YDDDH, YDLDDH, YDMDDH) ENDIF !rain_ice_fast_rs - IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)*PRHODJ(:,:,:),4,'RIM_BU_RTH',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RC) CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:),7,'RIM_BU_RRC',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RS) CALL BUDGET (PRSS(:,:,:)*PRHODJ(:,:,:),10,'RIM_BU_RRS',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RG) CALL BUDGET (PRGS(:,:,:)*PRHODJ(:,:,:),11,'RIM_BU_RRG',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)*PRHODJ(:,:,:),4,'ACC_BU_RTH',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:)*PRHODJ(:,:,:),8,'ACC_BU_RRR',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RS) CALL BUDGET (PRSS(:,:,:)*PRHODJ(:,:,:),10,'ACC_BU_RRS',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RG) CALL BUDGET (PRGS(:,:,:)*PRHODJ(:,:,:),11,'ACC_BU_RRG',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RS) CALL BUDGET (PRSS(:,:,:)*PRHODJ(:,:,:),10,'CMEL_BU_RRS',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RG) CALL BUDGET (PRGS(:,:,:)*PRHODJ(:,:,:),11,'CMEL_BU_RRG',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_TH) CALL BUDGET_DDH (PTHS(:,:,:)*PRHODJ(:,:,:),4,'RIM_BU_RTH',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_RC) CALL BUDGET_DDH (PRCS(:,:,:)*PRHODJ(:,:,:),7,'RIM_BU_RRC',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_RS) CALL BUDGET_DDH (PRSS(:,:,:)*PRHODJ(:,:,:),10,'RIM_BU_RRS',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_RG) CALL BUDGET_DDH (PRGS(:,:,:)*PRHODJ(:,:,:),11,'RIM_BU_RRG',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_TH) CALL BUDGET_DDH (PTHS(:,:,:)*PRHODJ(:,:,:),4,'ACC_BU_RTH',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_RR) CALL BUDGET_DDH (PRRS(:,:,:)*PRHODJ(:,:,:),8,'ACC_BU_RRR',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_RS) CALL BUDGET_DDH (PRSS(:,:,:)*PRHODJ(:,:,:),10,'ACC_BU_RRS',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_RG) CALL BUDGET_DDH (PRGS(:,:,:)*PRHODJ(:,:,:),11,'ACC_BU_RRG',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_RS) CALL BUDGET_DDH (PRSS(:,:,:)*PRHODJ(:,:,:),10,'CMEL_BU_RRS',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_RG) CALL BUDGET_DDH (PRGS(:,:,:)*PRHODJ(:,:,:),11,'CMEL_BU_RRG',YDDDH, YDLDDH, YDMDDH) !rain_ice_fast_rg - IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)*PRHODJ(:,:,:),4,'CFRZ_BU_RTH',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:)*PRHODJ(:,:,:),8,'CFRZ_BU_RRR',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RI) CALL BUDGET (PRIS(:,:,:)*PRHODJ(:,:,:),9,'CFRZ_BU_RRI',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RG) CALL BUDGET (PRGS(:,:,:)*PRHODJ(:,:,:),11,'CFRZ_BU_RRG',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)*PRHODJ(:,:,:),4,'WETG_BU_RTH',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RC) CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:),7,'WETG_BU_RRC',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:)*PRHODJ(:,:,:),8,'WETG_BU_RRR',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RI) CALL BUDGET (PRIS(:,:,:)*PRHODJ(:,:,:),9,'WETG_BU_RRI',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RS) CALL BUDGET (PRSS(:,:,:)*PRHODJ(:,:,:),10,'WETG_BU_RRS',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RG) CALL BUDGET (PRGS(:,:,:)*PRHODJ(:,:,:),11,'WETG_BU_RRG',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RH) CALL BUDGET (PRHS(:,:,:)*PRHODJ(:,:,:),12,'WETG_BU_RRH',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)*PRHODJ(:,:,:),4,'DRYG_BU_RTH',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RC) CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:),7,'DRYG_BU_RRC',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:)*PRHODJ(:,:,:),8,'DRYG_BU_RRR',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RI) CALL BUDGET (PRIS(:,:,:)*PRHODJ(:,:,:),9,'DRYG_BU_RRI',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RS) CALL BUDGET (PRSS(:,:,:)*PRHODJ(:,:,:),10,'DRYG_BU_RRS',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RG) CALL BUDGET (PRGS(:,:,:)*PRHODJ(:,:,:),11,'DRYG_BU_RRG',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)*PRHODJ(:,:,:),4,'GMLT_BU_RTH',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:)*PRHODJ(:,:,:),8,'GMLT_BU_RRR',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RG) CALL BUDGET (PRGS(:,:,:)*PRHODJ(:,:,:),11,'GMLT_BU_RRG',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_TH) CALL BUDGET_DDH (PTHS(:,:,:)*PRHODJ(:,:,:),4,'CFRZ_BU_RTH',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_RR) CALL BUDGET_DDH (PRRS(:,:,:)*PRHODJ(:,:,:),8,'CFRZ_BU_RRR',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_RI) CALL BUDGET_DDH (PRIS(:,:,:)*PRHODJ(:,:,:),9,'CFRZ_BU_RRI',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_RG) CALL BUDGET_DDH (PRGS(:,:,:)*PRHODJ(:,:,:),11,'CFRZ_BU_RRG',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_TH) CALL BUDGET_DDH (PTHS(:,:,:)*PRHODJ(:,:,:),4,'WETG_BU_RTH',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_RC) CALL BUDGET_DDH (PRCS(:,:,:)*PRHODJ(:,:,:),7,'WETG_BU_RRC',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_RR) CALL BUDGET_DDH (PRRS(:,:,:)*PRHODJ(:,:,:),8,'WETG_BU_RRR',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_RI) CALL BUDGET_DDH (PRIS(:,:,:)*PRHODJ(:,:,:),9,'WETG_BU_RRI',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_RS) CALL BUDGET_DDH (PRSS(:,:,:)*PRHODJ(:,:,:),10,'WETG_BU_RRS',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_RG) CALL BUDGET_DDH (PRGS(:,:,:)*PRHODJ(:,:,:),11,'WETG_BU_RRG',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_RH) CALL BUDGET_DDH (PRHS(:,:,:)*PRHODJ(:,:,:),12,'WETG_BU_RRH',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_TH) CALL BUDGET_DDH (PTHS(:,:,:)*PRHODJ(:,:,:),4,'DRYG_BU_RTH',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_RC) CALL BUDGET_DDH (PRCS(:,:,:)*PRHODJ(:,:,:),7,'DRYG_BU_RRC',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_RR) CALL BUDGET_DDH (PRRS(:,:,:)*PRHODJ(:,:,:),8,'DRYG_BU_RRR',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_RI) CALL BUDGET_DDH (PRIS(:,:,:)*PRHODJ(:,:,:),9,'DRYG_BU_RRI',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_RS) CALL BUDGET_DDH (PRSS(:,:,:)*PRHODJ(:,:,:),10,'DRYG_BU_RRS',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_RG) CALL BUDGET_DDH (PRGS(:,:,:)*PRHODJ(:,:,:),11,'DRYG_BU_RRG',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_TH) CALL BUDGET_DDH (PTHS(:,:,:)*PRHODJ(:,:,:),4,'GMLT_BU_RTH',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_RR) CALL BUDGET_DDH (PRRS(:,:,:)*PRHODJ(:,:,:),8,'GMLT_BU_RRR',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_RG) CALL BUDGET_DDH (PRGS(:,:,:)*PRHODJ(:,:,:),11,'GMLT_BU_RRG',YDDDH, YDLDDH, YDMDDH) IF(KRR==7) THEN ! rain_ice_fast_rh - IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)*PRHODJ(:,:,:),4,'WETH_BU_RTH',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RC) CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:),7,'WETH_BU_RRC',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:)*PRHODJ(:,:,:),8,'WETH_BU_RRR',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RI) CALL BUDGET (PRIS(:,:,:)*PRHODJ(:,:,:),9,'WETH_BU_RRI',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RS) CALL BUDGET (PRSS(:,:,:)*PRHODJ(:,:,:),10,'WETH_BU_RRS',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RG) CALL BUDGET (PRGS(:,:,:)*PRHODJ(:,:,:),11,'WETH_BU_RRG',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RH) CALL BUDGET (PRHS(:,:,:)*PRHODJ(:,:,:),12,'WETH_BU_RRH',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)*PRHODJ(:,:,:),4,'HMLT_BU_RTH',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:)*PRHODJ(:,:,:),8,'HMLT_BU_RRR',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RH) CALL BUDGET (PRHS(:,:,:)*PRHODJ(:,:,:),12,'HMLT_BU_RRH',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_TH) CALL BUDGET_DDH (PTHS(:,:,:)*PRHODJ(:,:,:),4,'WETH_BU_RTH',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_RC) CALL BUDGET_DDH (PRCS(:,:,:)*PRHODJ(:,:,:),7,'WETH_BU_RRC',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_RR) CALL BUDGET_DDH (PRRS(:,:,:)*PRHODJ(:,:,:),8,'WETH_BU_RRR',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_RI) CALL BUDGET_DDH (PRIS(:,:,:)*PRHODJ(:,:,:),9,'WETH_BU_RRI',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_RS) CALL BUDGET_DDH (PRSS(:,:,:)*PRHODJ(:,:,:),10,'WETH_BU_RRS',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_RG) CALL BUDGET_DDH (PRGS(:,:,:)*PRHODJ(:,:,:),11,'WETH_BU_RRG',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_RH) CALL BUDGET_DDH (PRHS(:,:,:)*PRHODJ(:,:,:),12,'WETH_BU_RRH',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_TH) CALL BUDGET_DDH (PTHS(:,:,:)*PRHODJ(:,:,:),4,'HMLT_BU_RTH',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_RR) CALL BUDGET_DDH (PRRS(:,:,:)*PRHODJ(:,:,:),8,'HMLT_BU_RRR',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_RH) CALL BUDGET_DDH (PRHS(:,:,:)*PRHODJ(:,:,:),12,'HMLT_BU_RRH',YDDDH, YDLDDH, YDMDDH) ENDIF !rain_ice_fast_ri - IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)*PRHODJ(:,:,:),4,'IMLT_BU_RTH',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RC) CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:),7,'IMLT_BU_RRC',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RI) CALL BUDGET (PRIS(:,:,:)*PRHODJ(:,:,:),9,'IMLT_BU_RRI',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)*PRHODJ(:,:,:),4,'BERFI_BU_RTH',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RC) CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:),7,'BERFI_BU_RRC',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RI) CALL BUDGET (PRIS(:,:,:)*PRHODJ(:,:,:),9,'BERFI_BU_RRI',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_TH) CALL BUDGET_DDH (PTHS(:,:,:)*PRHODJ(:,:,:),4,'IMLT_BU_RTH',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_RC) CALL BUDGET_DDH (PRCS(:,:,:)*PRHODJ(:,:,:),7,'IMLT_BU_RRC',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_RI) CALL BUDGET_DDH (PRIS(:,:,:)*PRHODJ(:,:,:),9,'IMLT_BU_RRI',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_TH) CALL BUDGET_DDH (PTHS(:,:,:)*PRHODJ(:,:,:),4,'BERFI_BU_RTH',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_RC) CALL BUDGET_DDH (PRCS(:,:,:)*PRHODJ(:,:,:),7,'BERFI_BU_RRC',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_RI) CALL BUDGET_DDH (PRIS(:,:,:)*PRHODJ(:,:,:),9,'BERFI_BU_RRI',YDDDH, YDLDDH, YDMDDH) ! END IF ! @@ -1765,13 +1765,13 @@ IF (KRR == 7 .AND. (ILENALLOCH .GT. 0 )) DEALLOCATE(ZRHODREFH,ZRHS,ILISTH) !* 2.3 budget storage ! IF (LBUDGET_RC .AND. OSEDIC) & - CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:),7 ,'SEDI_BU_RRC',YDDDH, YDLDDH, YDMDDH) -IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:)*PRHODJ(:,:,:),8 ,'SEDI_BU_RRR',YDDDH, YDLDDH, YDMDDH) -IF (LBUDGET_RI) CALL BUDGET (PRIS(:,:,:)*PRHODJ(:,:,:),9 ,'SEDI_BU_RRI',YDDDH, YDLDDH, YDMDDH) -IF (LBUDGET_RS) CALL BUDGET (PRSS(:,:,:)*PRHODJ(:,:,:),10,'SEDI_BU_RRS',YDDDH, YDLDDH, YDMDDH) -IF (LBUDGET_RG) CALL BUDGET (PRGS(:,:,:)*PRHODJ(:,:,:),11,'SEDI_BU_RRG',YDDDH, YDLDDH, YDMDDH) + CALL BUDGET_DDH (PRCS(:,:,:)*PRHODJ(:,:,:),7 ,'SEDI_BU_RRC',YDDDH, YDLDDH, YDMDDH) +IF (LBUDGET_RR) CALL BUDGET_DDH (PRRS(:,:,:)*PRHODJ(:,:,:),8 ,'SEDI_BU_RRR',YDDDH, YDLDDH, YDMDDH) +IF (LBUDGET_RI) CALL BUDGET_DDH (PRIS(:,:,:)*PRHODJ(:,:,:),9 ,'SEDI_BU_RRI',YDDDH, YDLDDH, YDMDDH) +IF (LBUDGET_RS) CALL BUDGET_DDH (PRSS(:,:,:)*PRHODJ(:,:,:),10,'SEDI_BU_RRS',YDDDH, YDLDDH, YDMDDH) +IF (LBUDGET_RG) CALL BUDGET_DDH (PRGS(:,:,:)*PRHODJ(:,:,:),11,'SEDI_BU_RRG',YDDDH, YDLDDH, YDMDDH) IF ( KRR == 7 .AND. LBUDGET_RH) & - CALL BUDGET (PRHS(:,:,:)*PRHODJ(:,:,:),12,'SEDI_BU_RRH',YDDDH, YDLDDH, YDMDDH) + CALL BUDGET_DDH (PRHS(:,:,:)*PRHODJ(:,:,:),12,'SEDI_BU_RRH',YDDDH, YDLDDH, YDMDDH) ! IF (LHOOK) CALL DR_HOOK('RAIN_ICE_OLD:RAIN_ICE_SEDIMENTATION_SPLIT',1,ZHOOK_HANDLE) END SUBROUTINE RAIN_ICE_SEDIMENTATION_SPLIT @@ -2214,13 +2214,13 @@ END DO !* 2.3 budget storage ! IF (LBUDGET_RC .AND. OSEDIC) & - CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:),7 ,'SEDI_BU_RRC',YDDDH, YDLDDH, YDMDDH) -IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:)*PRHODJ(:,:,:),8 ,'SEDI_BU_RRR',YDDDH, YDLDDH, YDMDDH) -IF (LBUDGET_RI) CALL BUDGET (PRIS(:,:,:)*PRHODJ(:,:,:),9 ,'SEDI_BU_RRI',YDDDH, YDLDDH, YDMDDH) -IF (LBUDGET_RS) CALL BUDGET (PRSS(:,:,:)*PRHODJ(:,:,:),10,'SEDI_BU_RRS',YDDDH, YDLDDH, YDMDDH) -IF (LBUDGET_RG) CALL BUDGET (PRGS(:,:,:)*PRHODJ(:,:,:),11,'SEDI_BU_RRG',YDDDH, YDLDDH, YDMDDH) + CALL BUDGET_DDH (PRCS(:,:,:)*PRHODJ(:,:,:),7 ,'SEDI_BU_RRC',YDDDH, YDLDDH, YDMDDH) +IF (LBUDGET_RR) CALL BUDGET_DDH (PRRS(:,:,:)*PRHODJ(:,:,:),8 ,'SEDI_BU_RRR',YDDDH, YDLDDH, YDMDDH) +IF (LBUDGET_RI) CALL BUDGET_DDH (PRIS(:,:,:)*PRHODJ(:,:,:),9 ,'SEDI_BU_RRI',YDDDH, YDLDDH, YDMDDH) +IF (LBUDGET_RS) CALL BUDGET_DDH (PRSS(:,:,:)*PRHODJ(:,:,:),10,'SEDI_BU_RRS',YDDDH, YDLDDH, YDMDDH) +IF (LBUDGET_RG) CALL BUDGET_DDH (PRGS(:,:,:)*PRHODJ(:,:,:),11,'SEDI_BU_RRG',YDDDH, YDLDDH, YDMDDH) IF ( KRR == 7 .AND. LBUDGET_RH) & - CALL BUDGET (PRHS(:,:,:)*PRHODJ(:,:,:),12,'SEDI_BU_RRH',YDDDH, YDLDDH, YDMDDH) + CALL BUDGET_DDH (PRHS(:,:,:)*PRHODJ(:,:,:),12,'SEDI_BU_RRH',YDDDH, YDLDDH, YDMDDH) ! IF (LHOOK) CALL DR_HOOK('RAIN_ICE_OLD:RAIN_ICE_SEDIMENTATION_STAT',1,ZHOOK_HANDLE) @@ -2389,9 +2389,9 @@ END IF ! !* 3.1.3 budget storage ! -IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)*PRHODJ(:,:,:),4,'HENU_BU_RTH',YDDDH, YDLDDH, YDMDDH) -IF (LBUDGET_RV) CALL BUDGET (PRVS(:,:,:)*PRHODJ(:,:,:),6,'HENU_BU_RRV',YDDDH, YDLDDH, YDMDDH) -IF (LBUDGET_RI) CALL BUDGET (PRIS(:,:,:)*PRHODJ(:,:,:),9,'HENU_BU_RRI',YDDDH, YDLDDH, YDMDDH) +IF (LBUDGET_TH) CALL BUDGET_DDH (PTHS(:,:,:)*PRHODJ(:,:,:),4,'HENU_BU_RTH',YDDDH, YDLDDH, YDMDDH) +IF (LBUDGET_RV) CALL BUDGET_DDH (PRVS(:,:,:)*PRHODJ(:,:,:),6,'HENU_BU_RRV',YDDDH, YDLDDH, YDMDDH) +IF (LBUDGET_RI) CALL BUDGET_DDH (PRIS(:,:,:)*PRHODJ(:,:,:),9,'HENU_BU_RRI',YDDDH, YDLDDH, YDMDDH) ! IF (LHOOK) CALL DR_HOOK('RAIN_ICE_OLD:RAIN_ICE_NUCLEATION',1,ZHOOK_HANDLE) END SUBROUTINE RAIN_ICE_NUCLEATION @@ -2422,13 +2422,13 @@ IMPLICIT NONE ZTHS(:) = ZTHS(:) + ZZW(:)*(ZLSFACT(:)-ZLVFACT(:)) ! f(L_f*(RCHONI)) ENDWHERE ! - IF (LBUDGET_TH) CALL BUDGET ( & + IF (LBUDGET_TH) CALL BUDGET_DDH ( & UNPACK(ZTHS(:),MASK=GMICRO(:,:,:),FIELD=PTHS)*PRHODJ(:,:,:), & 4,'HON_BU_RTH',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RC) CALL BUDGET ( & + IF (LBUDGET_RC) CALL BUDGET_DDH ( & UNPACK(ZRCS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0), & 7,'HON_BU_RRC',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RI) CALL BUDGET ( & + IF (LBUDGET_RI) CALL BUDGET_DDH ( & UNPACK(ZRIS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0), & 9,'HON_BU_RRI',YDDDH, YDLDDH, YDMDDH) ! @@ -2442,13 +2442,13 @@ IMPLICIT NONE ZTHS(:) = ZTHS(:) + ZZW(:)*(ZLSFACT(:)-ZLVFACT(:)) ! f(L_f*(RRHONG)) ENDWHERE ! - IF (LBUDGET_TH) CALL BUDGET ( & + IF (LBUDGET_TH) CALL BUDGET_DDH ( & UNPACK(ZTHS(:),MASK=GMICRO(:,:,:),FIELD=PTHS)*PRHODJ(:,:,:), & 4,'SFR_BU_RTH',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RR) CALL BUDGET ( & + IF (LBUDGET_RR) CALL BUDGET_DDH ( & UNPACK(ZRRS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0), & 8,'SFR_BU_RRR',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RG) CALL BUDGET ( & + IF (LBUDGET_RG) CALL BUDGET_DDH ( & UNPACK(ZRGS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0), & 11,'SFR_BU_RRG',YDDDH, YDLDDH, YDMDDH) ! @@ -2510,13 +2510,13 @@ IMPLICIT NONE END WHERE ENDIF - IF (LBUDGET_TH) CALL BUDGET ( & + IF (LBUDGET_TH) CALL BUDGET_DDH ( & UNPACK(ZTHS(:),MASK=GMICRO(:,:,:),FIELD=PTHS)*PRHODJ(:,:,:), & 4,'DEPS_BU_RTH',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RV) CALL BUDGET ( & + IF (LBUDGET_RV) CALL BUDGET_DDH ( & UNPACK(ZRVS(:),MASK=GMICRO(:,:,:),FIELD=PRVS)*PRHODJ(:,:,:), & 6,'DEPS_BU_RRV',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RS) CALL BUDGET ( & + IF (LBUDGET_RS) CALL BUDGET_DDH ( & UNPACK(ZRSS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0), & 10,'DEPS_BU_RRS',YDDDH, YDLDDH, YDMDDH) ! @@ -2531,10 +2531,10 @@ IMPLICIT NONE ZRSS(:) = ZRSS(:) + ZZW(:) ZRIS(:) = ZRIS(:) - ZZW(:) END WHERE - IF (LBUDGET_RI) CALL BUDGET ( & + IF (LBUDGET_RI) CALL BUDGET_DDH ( & UNPACK(ZRIS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0), & 9,'AGGS_BU_RRI',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RS) CALL BUDGET ( & + IF (LBUDGET_RS) CALL BUDGET_DDH ( & UNPACK(ZRSS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0), & 10,'AGGS_BU_RRS',YDDDH, YDLDDH, YDMDDH) ! @@ -2570,10 +2570,10 @@ IMPLICIT NONE ENDIF DEALLOCATE(ZCRIAUTI) - IF (LBUDGET_RI) CALL BUDGET ( & + IF (LBUDGET_RI) CALL BUDGET_DDH ( & UNPACK(ZRIS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0), & 9,'AUTS_BU_RRI',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RS) CALL BUDGET ( & + IF (LBUDGET_RS) CALL BUDGET_DDH ( & UNPACK(ZRSS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0), & 10,'AUTS_BU_RRS',YDDDH, YDLDDH, YDMDDH) ! @@ -2616,13 +2616,13 @@ IMPLICIT NONE END IF - IF (LBUDGET_TH) CALL BUDGET ( & + IF (LBUDGET_TH) CALL BUDGET_DDH ( & UNPACK(ZTHS(:),MASK=GMICRO(:,:,:),FIELD=PTHS)*PRHODJ(:,:,:), & 4,'DEPG_BU_RTH',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RV) CALL BUDGET ( & + IF (LBUDGET_RV) CALL BUDGET_DDH ( & UNPACK(ZRVS(:),MASK=GMICRO(:,:,:),FIELD=PRVS)*PRHODJ(:,:,:), & 6,'DEPG_BU_RRV',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RG) CALL BUDGET ( & + IF (LBUDGET_RG) CALL BUDGET_DDH ( & UNPACK(ZRGS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0), & 11,'DEPG_BU_RRG',YDDDH, YDLDDH, YDMDDH) ! @@ -2666,10 +2666,10 @@ IMPLICIT NONE END WHERE ENDIF ! - IF (LBUDGET_RC) CALL BUDGET ( & + IF (LBUDGET_RC) CALL BUDGET_DDH ( & UNPACK(ZRCS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0), & 7,'AUTO_BU_RRC',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RR) CALL BUDGET ( & + IF (LBUDGET_RR) CALL BUDGET_DDH ( & UNPACK(ZRRS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0), & 8,'AUTO_BU_RRR',YDDDH, YDLDDH, YDMDDH) ! @@ -2720,10 +2720,10 @@ IMPLICIT NONE STOP 'wrong CSUBG_RC_RR_ACCR case' ENDIF - IF (LBUDGET_RC) CALL BUDGET ( & + IF (LBUDGET_RC) CALL BUDGET_DDH ( & UNPACK(ZRCS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0), & 7,'ACCR_BU_RRC',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RR) CALL BUDGET ( & + IF (LBUDGET_RR) CALL BUDGET_DDH ( & UNPACK(ZRRS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0), & 8,'ACCR_BU_RRR',YDDDH, YDLDDH, YDMDDH) ! @@ -2836,13 +2836,13 @@ IMPLICIT NONE STOP 'wrong CSUBG_RR_EVAP case' END IF - IF (LBUDGET_TH) CALL BUDGET ( & + IF (LBUDGET_TH) CALL BUDGET_DDH ( & UNPACK(ZTHS(:),MASK=GMICRO(:,:,:),FIELD=PTHS)*PRHODJ(:,:,:), & 4,'REVA_BU_RTH',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RV) CALL BUDGET ( & + IF (LBUDGET_RV) CALL BUDGET_DDH ( & UNPACK(ZRVS(:),MASK=GMICRO(:,:,:),FIELD=PRVS)*PRHODJ(:,:,:), & 6,'REVA_BU_RRV',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RR) CALL BUDGET ( & + IF (LBUDGET_RR) CALL BUDGET_DDH ( & UNPACK(ZRRS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0), & 8,'REVA_BU_RRR',YDDDH, YDLDDH, YDMDDH) ZW(:,:,:)=PEVAP3D(:,:,:) @@ -2974,16 +2974,16 @@ IMPLICIT NONE DEALLOCATE(ZVEC2) DEALLOCATE(ZVEC1) END IF - IF (LBUDGET_TH) CALL BUDGET ( & + IF (LBUDGET_TH) CALL BUDGET_DDH ( & UNPACK(ZTHS(:),MASK=GMICRO(:,:,:),FIELD=PTHS)*PRHODJ(:,:,:), & 4,'RIM_BU_RTH',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RC) CALL BUDGET ( & + IF (LBUDGET_RC) CALL BUDGET_DDH ( & UNPACK(ZRCS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0), & 7,'RIM_BU_RRC',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RS) CALL BUDGET ( & + IF (LBUDGET_RS) CALL BUDGET_DDH ( & UNPACK(ZRSS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0), & 10,'RIM_BU_RRS',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RG) CALL BUDGET ( & + IF (LBUDGET_RG) CALL BUDGET_DDH ( & UNPACK(ZRGS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0), & 11,'RIM_BU_RRG',YDDDH, YDLDDH, YDMDDH) DEALLOCATE(GRIM) @@ -3103,16 +3103,16 @@ IMPLICIT NONE DEALLOCATE(ZVEC1) END IF DEALLOCATE(GACC) - IF (LBUDGET_TH) CALL BUDGET ( & + IF (LBUDGET_TH) CALL BUDGET_DDH ( & UNPACK(ZTHS(:),MASK=GMICRO(:,:,:),FIELD=PTHS)*PRHODJ(:,:,:), & 4,'ACC_BU_RTH',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RR) CALL BUDGET ( & + IF (LBUDGET_RR) CALL BUDGET_DDH ( & UNPACK(ZRRS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0), & 8,'ACC_BU_RRR',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RS) CALL BUDGET ( & + IF (LBUDGET_RS) CALL BUDGET_DDH ( & UNPACK(ZRSS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0), & 10,'ACC_BU_RRS',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RG) CALL BUDGET ( & + IF (LBUDGET_RG) CALL BUDGET_DDH ( & UNPACK(ZRGS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0), & 11,'ACC_BU_RRG',YDDDH, YDLDDH, YDMDDH) ! @@ -3140,10 +3140,10 @@ IMPLICIT NONE ZRSS(:) = ZRSS(:) - ZZW(:) ZRGS(:) = ZRGS(:) + ZZW(:) END WHERE - IF (LBUDGET_RS) CALL BUDGET ( & + IF (LBUDGET_RS) CALL BUDGET_DDH ( & UNPACK(ZRSS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0), & 10,'CMEL_BU_RRS',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RG) CALL BUDGET ( & + IF (LBUDGET_RG) CALL BUDGET_DDH ( & UNPACK(ZRGS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0), & 11,'CMEL_BU_RRG',YDDDH, YDLDDH, YDMDDH) ! @@ -3180,16 +3180,16 @@ IMPLICIT NONE ZRGS(:) = ZRGS(:) + ZZW1(:,3)+ZZW1(:,4) ZTHS(:) = ZTHS(:) + ZZW1(:,4)*(ZLSFACT(:)-ZLVFACT(:)) ! f(L_f*RRCFRIG) END WHERE - IF (LBUDGET_TH) CALL BUDGET ( & + IF (LBUDGET_TH) CALL BUDGET_DDH ( & UNPACK(ZTHS(:),MASK=GMICRO(:,:,:),FIELD=PTHS)*PRHODJ(:,:,:), & 4,'CFRZ_BU_RTH',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RR) CALL BUDGET ( & + IF (LBUDGET_RR) CALL BUDGET_DDH ( & UNPACK(ZRRS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0), & 8,'CFRZ_BU_RRR',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RI) CALL BUDGET ( & + IF (LBUDGET_RI) CALL BUDGET_DDH ( & UNPACK(ZRIS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0), & 9,'CFRZ_BU_RRI',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RG) CALL BUDGET ( & + IF (LBUDGET_RG) CALL BUDGET_DDH ( & UNPACK(ZRGS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0), & 11,'CFRZ_BU_RRG',YDDDH, YDLDDH, YDMDDH) ! @@ -3407,26 +3407,26 @@ IMPLICIT NONE ! f(L_f*(RCWETG+RRWETG)) END WHERE END IF - IF (LBUDGET_TH) CALL BUDGET ( & + IF (LBUDGET_TH) CALL BUDGET_DDH ( & UNPACK(ZTHS(:),MASK=GMICRO(:,:,:),FIELD=PTHS)*PRHODJ(:,:,:), & 4,'WETG_BU_RTH',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RC) CALL BUDGET ( & + IF (LBUDGET_RC) CALL BUDGET_DDH ( & UNPACK(ZRCS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0), & 7,'WETG_BU_RRC',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RR) CALL BUDGET ( & + IF (LBUDGET_RR) CALL BUDGET_DDH ( & UNPACK(ZRRS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0), & 8,'WETG_BU_RRR',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RI) CALL BUDGET ( & + IF (LBUDGET_RI) CALL BUDGET_DDH ( & UNPACK(ZRIS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0), & 9,'WETG_BU_RRI',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RS) CALL BUDGET ( & + IF (LBUDGET_RS) CALL BUDGET_DDH ( & UNPACK(ZRSS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0), & 10,'WETG_BU_RRS',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RG) CALL BUDGET ( & + IF (LBUDGET_RG) CALL BUDGET_DDH ( & UNPACK(ZRGS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0), & 11,'WETG_BU_RRG',YDDDH, YDLDDH, YDMDDH) IF ( KRR == 7 ) THEN - IF (LBUDGET_RH) CALL BUDGET ( & + IF (LBUDGET_RH) CALL BUDGET_DDH ( & UNPACK(ZRHS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0), & 12,'WETG_BU_RRH',YDDDH, YDLDDH, YDMDDH) END IF @@ -3443,22 +3443,22 @@ IMPLICIT NONE ZTHS(:) = ZTHS(:) + (ZZW1(:,1)+ZZW1(:,4))*(ZLSFACT(:)-ZLVFACT(:)) ! ! f(L_f*(RCDRYG+RRDRYG)) END WHERE - IF (LBUDGET_TH) CALL BUDGET ( & + IF (LBUDGET_TH) CALL BUDGET_DDH ( & UNPACK(ZTHS(:),MASK=GMICRO(:,:,:),FIELD=PTHS)*PRHODJ(:,:,:), & 4,'DRYG_BU_RTH',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RC) CALL BUDGET ( & + IF (LBUDGET_RC) CALL BUDGET_DDH ( & UNPACK(ZRCS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0), & 7,'DRYG_BU_RRC',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RR) CALL BUDGET ( & + IF (LBUDGET_RR) CALL BUDGET_DDH ( & UNPACK(ZRRS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0), & 8,'DRYG_BU_RRR',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RI) CALL BUDGET ( & + IF (LBUDGET_RI) CALL BUDGET_DDH ( & UNPACK(ZRIS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0), & 9,'DRYG_BU_RRI',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RS) CALL BUDGET ( & + IF (LBUDGET_RS) CALL BUDGET_DDH ( & UNPACK(ZRSS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0), & 10,'DRYG_BU_RRS',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RG) CALL BUDGET ( & + IF (LBUDGET_RG) CALL BUDGET_DDH ( & UNPACK(ZRGS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0), & 11,'DRYG_BU_RRG',YDDDH, YDLDDH, YDMDDH) ! @@ -3488,13 +3488,13 @@ IMPLICIT NONE ZRGS(:) = ZRGS(:) - ZZW(:) ZTHS(:) = ZTHS(:) - ZZW(:)*(ZLSFACT(:)-ZLVFACT(:)) ! f(L_f*(-RGMLTR)) END WHERE - IF (LBUDGET_TH) CALL BUDGET ( & + IF (LBUDGET_TH) CALL BUDGET_DDH ( & UNPACK(ZTHS(:),MASK=GMICRO(:,:,:),FIELD=PTHS)*PRHODJ(:,:,:), & 4,'GMLT_BU_RTH',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RR) CALL BUDGET ( & + IF (LBUDGET_RR) CALL BUDGET_DDH ( & UNPACK(ZRRS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0), & 8,'GMLT_BU_RRR',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RG) CALL BUDGET ( & + IF (LBUDGET_RG) CALL BUDGET_DDH ( & UNPACK(ZRGS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0), & 11,'GMLT_BU_RRG',YDDDH, YDLDDH, YDMDDH) IF (LHOOK) CALL DR_HOOK('RAIN_ICE_OLD:RAIN_ICE_FAST_RG',1,ZHOOK_HANDLE) @@ -3705,25 +3705,25 @@ IMPLICIT NONE ! f(L_f*(RCWETH+RRWETH)) END WHERE END IF - IF (LBUDGET_TH) CALL BUDGET ( & + IF (LBUDGET_TH) CALL BUDGET_DDH ( & UNPACK(ZTHS(:),MASK=GMICRO(:,:,:),FIELD=PTHS)*PRHODJ(:,:,:),& 4,'WETH_BU_RTH',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RC) CALL BUDGET ( & + IF (LBUDGET_RC) CALL BUDGET_DDH ( & UNPACK(ZRCS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0), & 7,'WETH_BU_RRC',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RR) CALL BUDGET ( & + IF (LBUDGET_RR) CALL BUDGET_DDH ( & UNPACK(ZRRS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0), & 8,'WETH_BU_RRR',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RI) CALL BUDGET ( & + IF (LBUDGET_RI) CALL BUDGET_DDH ( & UNPACK(ZRIS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0), & 9,'WETH_BU_RRI',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RS) CALL BUDGET ( & + IF (LBUDGET_RS) CALL BUDGET_DDH ( & UNPACK(ZRSS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0), & 10,'WETH_BU_RRS',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RG) CALL BUDGET ( & + IF (LBUDGET_RG) CALL BUDGET_DDH ( & UNPACK(ZRGS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0), & 11,'WETH_BU_RRG',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RH) CALL BUDGET ( & + IF (LBUDGET_RH) CALL BUDGET_DDH ( & UNPACK(ZRHS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0), & 12,'WETH_BU_RRH',YDDDH, YDLDDH, YDMDDH) ! @@ -3779,13 +3779,13 @@ IMPLICIT NONE END WHERE END IF DEALLOCATE(GHAIL) - IF (LBUDGET_TH) CALL BUDGET ( & + IF (LBUDGET_TH) CALL BUDGET_DDH ( & UNPACK(ZTHS(:),MASK=GMICRO(:,:,:),FIELD=PTHS)*PRHODJ(:,:,:),& 4,'HMLT_BU_RTH',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RR) CALL BUDGET ( & + IF (LBUDGET_RR) CALL BUDGET_DDH ( & UNPACK(ZRRS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0), & 8,'HMLT_BU_RRR',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RH) CALL BUDGET ( & + IF (LBUDGET_RH) CALL BUDGET_DDH ( & UNPACK(ZRHS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0), & 12,'HMLT_BU_RRH',YDDDH, YDLDDH, YDMDDH) ! @@ -3816,13 +3816,13 @@ IMPLICIT NONE ZRIS(:) = 0.0 ZCIT(:) = 0.0 END WHERE - IF (LBUDGET_TH) CALL BUDGET ( & + IF (LBUDGET_TH) CALL BUDGET_DDH ( & UNPACK(ZTHS(:),MASK=GMICRO(:,:,:),FIELD=PTHS)*PRHODJ(:,:,:), & 4,'IMLT_BU_RTH',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RC) CALL BUDGET ( & + IF (LBUDGET_RC) CALL BUDGET_DDH ( & UNPACK(ZRCS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0), & 7,'IMLT_BU_RRC',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RI) CALL BUDGET ( & + IF (LBUDGET_RI) CALL BUDGET_DDH ( & UNPACK(ZRIS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0), & 9,'IMLT_BU_RRI',YDDDH, YDLDDH, YDMDDH) ! @@ -3889,13 +3889,13 @@ IMPLICIT NONE END WHERE ENDIF - IF (LBUDGET_TH) CALL BUDGET ( & + IF (LBUDGET_TH) CALL BUDGET_DDH ( & UNPACK(ZTHS(:),MASK=GMICRO(:,:,:),FIELD=PTHS)*PRHODJ(:,:,:), & 4,'BERFI_BU_RTH',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RC) CALL BUDGET ( & + IF (LBUDGET_RC) CALL BUDGET_DDH ( & UNPACK(ZRCS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0), & 7,'BERFI_BU_RRC',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RI) CALL BUDGET ( & + IF (LBUDGET_RI) CALL BUDGET_DDH ( & UNPACK(ZRIS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0), & 9,'BERFI_BU_RRI',YDDDH, YDLDDH, YDMDDH) ! diff --git a/src/arome/modset_Ryad/arpifs/phys_dmn/mf_phys.F90 b/src/arome/modset_Ryad/arpifs/phys_dmn/mf_phys.F90 deleted file mode 100644 index f0d6a8ccc5472eae499ec078e0fba3b934e247f0..0000000000000000000000000000000000000000 --- a/src/arome/modset_Ryad/arpifs/phys_dmn/mf_phys.F90 +++ /dev/null @@ -1,2817 +0,0 @@ -#ifdef RS6K -@PROCESS NOCHECK -#endif -SUBROUTINE MF_PHYS(YDGEOMETRY,YDGMV,YDSURF,YDCFU,YDXFU,YDMODEL,& - !--------------------------------------------------------------------- - ! - INPUT and INOUT. - & KBL,KGPCOMP,KST,KEND,KGL1,KGL2,KSTGLO,& - & LDCONFX,PDTPHY,& - & KIBL,POROGL,POROGM,& - & PCUCONVCA,PNLCONVCA,& - & PGMV,PGMVS,PGFL,PWT0,PWT0L,PWT0M,& - & PRCP0,PHI0,PHIF0,PRE0,PRE0F,PREPHY0,PREPHY0F,PXYB0,& - & PWT9,PRCP9,PHI9,PHIF9,PRE9,PRE9F,PREPHY9,PREPHY9F,PXYB9,& - & PKOZO,PGP2DSDT,PGRADH_PHY,& - & PFORCEU,PFORCEV,PFORCET,PFORCEQ,& - & PCTY0,& - & PB1,PB2,PGMVT1,PGMVT1S,PGFLT1,& - & PSP_SB,PSP_SG,PSP_RR,& - & PSD_VF,PSD_VP,PSD_VV,PSD_VH,PSD_VK,PSD_VA,PSD_VC,PSD_DI,PSD_VD,PSD_SFL,& - & PSD_SFO,PSD_XP,PSD_XP2,& - & PEMTD,PEMTU,PTRSW,PRMOON,PGPAR,& - & PGDEOSI,PGUEOSI,PGMU0,PGMU0_MIN,PGMU0_MAX,& - & PGDEOTI,PGDEOTI2,PGUEOTI,PGUEOTI2,PGEOLT,PGEOXT,& - & PGRPROX,PGMIXP,PGFLUXC,PGRSURF,& - !--------------------------------------------------------------------- - ! - OUTPUT . - & PDHSF,PALBDG,PCAPE,PCTOP,PCLCC,PCLCH,PCLCL,PCLCM,PCLCT,PCLPH,PVEIN,PCT,& - & PDIFCQ,PDIFCQI,PDIFCQL,PDIFCS,PDIFTQ,PDIFTQI,PDIFTQL,PDIFTS,& - & PFCCQL,PFCCQN,PFCHOZ,PFCHSP,PFCLL,PFCLN,PFCQING,PFCQLNG,PFCQNG,PFCS,& - & PFCSQL,PFCSQN,PFEVL,PFEVN,PFEVV,PFGEL,PFGELS,PFLWSP,PFONTE,& - & PFPLCL,PFPLCN,PFPLCG,PFPLCHL,PFPLSL,PFPLSN,PFPLSG,PFPLSHL,& - & PMRT,PFRMH,PFRSO,PFRSOC,PFRSODS,PFRSOLU,PFRSGNI,& - & PFRSDNI,PFRSOPS,PFRSOPT,PFRTH,PFRTHC,PFRTHDS,PFTR,PGZ0,PGZ0H,PNEB,& - & PQCLS,PQICE,PQLI,PQS,& - & PRH,PRHCLS,PRUISL,PRUISP,PRUISS,& - & PSTRCU,PSTRCV,PSTRDU,PSTRDV,PSTRMU,PSTRMV,PSTRTU,PSTRTV,& - & PDIFCQLC,PDIFCQIC,PFIMCC,& - & PFEDQLC,PFEDQIC,PFEDQRC,PFEDQSC,PFCNEGQLC,PFCNEGQIC,PFCNEGQRC,PFCNEGQSC,& - & PUCLS,PVCLS,PNUCLS,PNVCLS,PTCLS,PUGST,PVGST,& - & PMOCON,PFDIS,& - & PFHPCL,PFHPCN,PFHPCG,PFHPSL,PFHPSN,PFHPSG,PFHSCL,PFHSCN,PFHSSL,PFHSSN,PFHSSG,& - & PFEPFP, PFCMPCQ, PFCMPSN, PFCMPSL,& - & PTENDU,PTENDV,& - & PQSOL,& - & PFPFPSL,PFPFPSN,PFPFPSG,PFPFPCL,PFPFPCN,PFPEVPSL,PFPEVPSN,PFPEVPSG,& - & PFPEVPCL,PFPEVPCN,PFPEVPCG,PDERNSHF,PFCQRNG, PFCQSNG,PFCQGNG,& - & PDIAGH,PTPWCLS,PVISICLD, PVISIHYDRO,PMXCLWC,& - & PFLASH,PTRAJ_PHYS,YDDDH,PFTCNS) - -!**** *MF_PHYS* METEO-FRANCE PHYSICS. - -! Purpose. -! -------- -! Call METEO-FRANCE physics and physical tendencies. - -!** Interface. -! ---------- -! *CALL* *MF_PHYS(...)* - -! Explicit arguments : -! -------------------- - -! INPUT: -! ------ -! KBL : NPROMA-packets number -! KGPCOMP : total number of grid points in the domain -! KST : first element of work. -! KEND : last element of work. -! KGL1,KGL2 : first and last latitude of computations. -! - bounds NGPTOT-packets for DM calculations. -! KSTGLO : global offset. -! LDCONFX : (see in CPG) -! PDTPHY : timestep used in the physics. -! KIBL : index into YRCSGEOM/YRGSGEOM types in YDGEOMETRY -! POROGL,POROGM: components of grad(orography). -! PCUCONVCA : CA array for interaction with the physics -! PNLCONVCA : CA array for interaction with the physics -! PGMV : GMV at time t and t-dt. -! PGMVS : GMVS at time t and t-dt. -! PGFL : GFL at time t and t-dt. -! PWT0 : w-wind time t. -! PWT0L : zonal derivative of w-wind at time t. -! PWT0M : merid derivative of w-wind at time t. -! PRCP0 : contains "cp", "R" and "Kap=R/Cp" at t. -! PHI0 : geopotential height at half levels at time t. -! PHIF0 : geopotential height at full levels at time t. -! PRE0 : hydrostatic pressure "prehyd" at half levels at time t. -! PRE0F : hydrostatic pressure "prehyd" at full levels at time t. -! PREPHY0 : input pressure "pre" for AROME at half levels at time t. -! PREPHY0F : input pressure "pre" for AROME at full levels at time t. -! PXYB0 : contains pressure depth, "delta", "alpha" at time t. -! PRKQVH : Rasch-Kristjansson scheme - water vapour tendency -! PRKQCH : Rasch-Kristjansson scheme - condensates tendency -! PWT9 : Vertical wind time t-dt. -! PRCP9 : contains "cp", "R" and "Kap=R/Cp" at t-dt. -! PHI9 : geopotential height at half levels at time t-dt. -! PHIF9 : geopotential height at full levels at time t-dt. -! PRE9 : hydrostatic pressure "prehyd" at half levels at time t-dt. -! PRE9F : hydrostatic pressure "prehyd" at full levels at time t-dt. -! PREPHY9 : input pressure "pre" for AROME at half levels at time t-dt. -! PREPHY9F : input pressure "pre" for AROME at full levels at time t-dt. -! PXYB9 : contains pressure depth, "delta", "alpha" at time t-dt. -! PKOZO : fields for photochemistery of ozon. -! PGP2DSDT : stochastic physics random pattern. -! PGRADH_PHY: horizontal gradients for physics - -! INPUT/OUTPUT: -! ------------- -! PCTY0 : contains vertical velocities, vertical integral of divergence at t. -! PB1 : "SLB1"-buffer, used for interpolations in the SL scheme. -! PB2 : "SLB2"-buffer. -! PGFLT1 : GFL t+dt -! PGPAR : surface fields for AROME. -! PGDEOSI : DESCENDING INCREMENTAL OPTICAL DEPTHS, SOLAR -! PGUEOSI : ASCENDING INCREMENTAL OPTICAL DEPTHS, SOLAR -! PGMU0 : COSINE OF SOLAR ZENITH ANGLE, APPROXIMATE ACTUAL VALUE -! PGMU0_MIN : COSINE OF SOLAR ZENITH ANGLE, MIN VALUE -! PGMU0_MAX : COSINE OF SOLAR ZENITH ANGLE, MAX VALUE -! PGDEOTI : descending incremental optical depths, dB/dT(T0) weights -! PGDEOTI2 : descending incremental optical depths, B weights with -! linear T_e correction -! PGUEOTI : ascending incremental optical depths, dB/dT(T0) weights -! PGUEOTI2 : ascending incremental optical depths, B weights with -! linear T_e correction -! PGEOLT : local optical depths, dB/dT(T0) weights -! PGEOXT : maximum optical depths for EBL-EAL, dB/dT(T0) weights -! PGRPROX : correction term for adjacent exchanges -! PGMIXP : non-statistical weights for bracketing -! PGFLUXC : out of bracket part of clearsky EBL, resp. EBL-EAL flux -! PGRSURF : corrective ratio for surface cts contribution - -! OUTPUT: -! ------- -! PDHSF : distribution of horizontal mean weights used for -! simplified radiation scheme. -! ---------------------- output of aplpar ------------------------------ -! PALBDG : modele surface shortwave albedo (diagnostic). -! PCAPE : CAPE. -! PCTOP : top of convective nebulosity (diagnostic). -! PCLCC : convective cloud cover (diagnostic). -! PCLCH : high cloud cover (diagnostic). -! PCLCL : low cloud cover (diagnostic). -! PCLCM : medium cloud cover (diagnostic). -! PCLCT : total cloud cover (diagnostic). -! PCLPH : height (in meters) of the PBL. -! PVEIN : ventilation index in the PBL. -! PCT : thermical coefficient of soil-vegetation middle. -! PDIFCQ : convective flux of specific humidity (not rain/snow). -! PDIFCQI : convective flux of solid water (not rain/snow). -! PDIFCQL : convective flux of liquid water (not rain/snow). -! PDIFCS : convective flux of enthalpy (not rain/snow). -! PDIFTQ : turbulent flux (inc. "q" negative) of specific humidity. -! PDIFTQI : turbulent flux (inc. "q" negative) of solid water. -! PDIFTQL : turbulent flux (inc. "q" negative) of liquid water. -! PDIFTS : turbulent flux of enthalpy (or dry static energy). -! PFCCQL : convective condensation flux for liquid water. -! PFCCQN : convective condensation flux for ice. -! PFCHOZ : ozon photo-chemical flux. -! PFPFPSL : flux of liquid resol. precipitation: the generation term. -! PFPFPSN : flux of solid resolved precipitation: the generation term. -! PFPFPCL : flux of liquid conv. precipitation: the generation term. -! PFPFPCN : flux of solid conv. precipitation: the generation term. -! PFPEVPSL : resolved precipitation flux due to evaporation. -! PFPEVPSN : resolved precipitation flux due to sublimation. -! PFPEVPCL : convective precipitation flux due to evaporation. -! PFPEVPCN : convective precipitation flux due to sublimation. -! PFCHSP : heat flux from surface to deep soil. -! PFCLL : latent heat flux over liquid water (or wet soil). -! PFCLN : latent heat flux over snow (or ice). -! PFCQING : pseudo-flux of ice to correct for "qi"<0. -! PFCQLNG : pseudo-flux of liquid water to correct for "ql"<0. -! PFCQNG : pseudo-flux of water to correct for Q<0. -! PFCS : sensible heat flux at surface level. -! PFCSQL : stratiform condensation flux for liquid water. -! PFCSQN : stratiform condensation flux for ice. -! PFEVL : water vapour flux over liquid water (or wet soil). -! PFEVN : water vapour flux over snow (or ice) and frozen soil. -! PFEVV : evapotranspiration flux. -! PFGEL : freezing flux of soil water. -! PFGELS : freezing flux of soil water at surface level. -! PFLWSP : water flux from surface to deep soil. -! PFONTE : water flux corresponding to surface snow melt. -! PFPLCL : convective precipitation as rain. -! PFPLCN : convective precipitation as snow. -! PFPLCG : convective precipitation as graupel. -! PFPLCHL : convective precipitation as hail. -! PFPLSL : stratiform precipitation as rain. -! PFPLSN : stratiform precipitation as snow. -! PFPLSG : stratiform precipitation as graupel. -! PFPLSHL : stratiform precipitation as hail. -! PMRT : mean radiant temperature. -! PFRMH : mesospheric enthalpy flux. -! PFRSO : shortwave radiative flux. -! PFRSOC : shortwave clear sky radiative flux. -! PFRSODS : surface downwards solar flux. -! PFRSOLU : downward lunar flux at surface. -! PFRSGNI : Global normal irradiance -! PFRSDNI : Direct normal irradiance -! PFRSOPS : surface parallel solar flux. -! PFRSOPT : top parallel solar flux. -! PFRTH : longwave radiative flux. -! PFRTHC : longwave clear sky radiative flux. -! PFRTHDS : surface downwards IR flux. -! PFTR : transpiration flux. -! PGZ0 : g*roughness length (current). -! PGZ0H : current g*thermal roughness length (if KVCLIV >=8). -! PNEB : fractional cloudiness for radiation. -! PQCLS : specific humidity at 2 meters (diagnostic). -! PQICE : specific humidity of solid water for radiation. -! PQLI : specific humidity of liquid water for radiation. -! PQS : specific humidity at surface level. -! PRH : relative humidity. -! PRHCLS : relative humidity at 2 meters (diagnostic). -! PRUISL : run-off flux out the interception water-tank. -! PRUISP : run-off flux in soil. -! PRUISS : run-off flux at surface level. -! PSTRCU : convective flux of momentum "U". -! PSTRCV : convective flux of momentum "V". -! PSTRDU : gravity wave drag flux "U". -! PSTRDV : gravity wave drag flux "V". -! PSTRMU : mesospheric flux for "U"-momentum. -! PSTRMV : mesospheric flux for "V"-momentum. -! PSTRTU : turbulent flux of momentum "U". -! PSTRTV : turbulent flux of momentum "V". -! PDIFCQLC to PFCNEGQSC: -! PUCLS : U-component of wind at 10 meters (diagnostic). -! PVCLS : V-component of wind at 10 meters (diagnostic). -! PNUCLS : U-component of neutral wind at 10 meters (diagnostic). -! PNVCLS : V-component of neutral wind at 10 meters (diagnostic). -! PTCLS : temperature at 2 meters (diagnostic). -! PTPWCLS : wet-bulb temperature at 2 meters (diagnostic) -! PUGST : U-component of gusts (diagnostic). -! PVGST : V-component of gusts (diagnostic). -! PDERNSHF : derivative of the non solar surface with respect to Tsurf -! ---------------------- end of output of aplpar ----------------------- -! PMOCON : moisture convergence. -! PFDIS : enthalpy flux due to dissipation of kinetic energy. -! PFHPCL : liquid water convective condensation enthalpy flux. -! PFHPCN : snow convective condensation enthalpy flux. -! PFHPSL : liquid water stratiform condensation enthalpy flux. -! PFHPSN : snow stratiform condensation enthalpy flux. -! PFHSCL : sensible heat flux due to liquid convective precipitations -! PFHSCN : sensible heat flux due to snow convective precipitations. -! PFHSSL : sensible heat flux due to liquid stratiform precipitations -! PFHSSN : sensible heat flux due to snow stratiform precipitations. -! PTENDU : "U"-wind tendency due to physics. -! PTENDV : "V"-wind tendency due to physics. -! PQSOL : surface specific humidity used in case "delta m=1". -! PFCQRNG : pseudo-flux of rain to correct for Q<0 -! PFCQSNG : pseudo-flux of snow to correct for Q<0 -! PDIAGH : Add Hail diagnostic PDIAGH (AROME) -! PFLASH : Add lightening density (fl/ km2 /s ) -! PVISICLD : Visibility due to ice and/or water cloud -! PVISIHYDRO : Vsibility due to precipitations(rain, graupel, snow) -! PMXCLWC : Cloud Water Liquid Content at HVISI meters - -! Implicit arguments : -! -------------------- - -! Method. -! ------- - -! Externals. -! ---------- - -! Reference. -! ---------- - -! Author. -! ------- -! 2000-12-04: F. Bouyssel & J.M. Piriou - -! Modifications. -! -------------- -! 04-Mar-2009 A.Alias : call CPTEND/INITAPLPAR modified to add -! Humidity Mesopheric flux (ZFRMQ). -! and IVCLIA removed and call to CPNUDG modified as -! Nuding mask is now in SD_VF group -! call HL_APLPAR modified to add PFCQNG for acdifus -! call APL_AROME modified to add Sulfate/Volcano aerosols for radaer -! K. Yessad (Jul 2009): remove CDLOCK + some cleanings -! 2009-10-15 Y. Bouteloup : Store radiative cloud water and ice in GFL (YIRAD and YLRAD) -! F. Vana 15-Oct-2009 : NSPLTHOI option -! K.Yessad (Feb 2010): use YM_RADTC and RFORADTC -! 2010-03-26 Y. Bouteloup : Store radiative cloud water and ice in GFL (AROME case) -! 2010-04-26 Y. Bouteloup : Only one call to cputqy, cputqys and cputqy_arome -! This need the use of ZTENDGFL as argument of cptend, cptend_new and apl_arome. -! 2010-05-11 F. Bouyssel : Use of PINDX, PINDY -! 2010-05-28 C. Geijo : Fix error in IPTR array element referencing -! 2010-06-21 O.Riviere/F. Bouyssel : Fix to have Ts evolving in Fa files with Surfex -! Dec 2010 A.Alias : ZMU0N added to call CPPHINP/APLPAR/APL_AROME/HL_APLPAR -! CALL to CPNUDG with or with LMSE (A.Voldoire) -! K. Yessad (Jan 2011): introduce INTDYN_MOD structures. -! L. Bengtsson-Sedlar & F. Vana 18-Feb-2011 : CA scheme for convection -! F. Vana 22-Feb-2011 : 3D turbulence -! 2011-02-01 M. Mokhtari: Add LMDUST and PEXTT9 and PEXTT0 IN APLPAR -! (treatment of the desert aerosols) -! 2011-03 A.Alias : new argument to for sunshine hours YSD_VD%YSUND -! CPNUDG if LMSE=.T. or LMSE=.F. (bugfix) -! debug ozone GFL (IPO3) (D. St-Martin) -! Humidity Mesopheric flux (ZFRMQ) added in CPTEND_NEW -! F.Bouyssel (26-03-2011): Fix to have Snow in hist file with surfex -! 2011-06: M. Jerczynski - some cleaning to meet norms -! E. Bazile 2011-08-26 : Output for MUSC 1D with LFA files with WRITEPHYSIO -! used previously for extracting profiles from 3D (now also available for AROME). -! K. Yessad (Dec 2011): use YDOROG, YDGSGEOM and YDCSGEOM. -! 2011-11-21 JF Gueremy : dry convective adjustment (LAJUCV) -! F. Vana 26-Jan-2012 : historic Qs for TOM's BBC. -! F.Bouttier Jul 2012: stochastic physics for AROME -! Z. SASSI : 07-Mar-2013 INITIALIZING THE WEIGHT VECTORS PDHSF(NPROMA) -! [DISTRIBUTION OF HORIZONTAL MEANS WEIGHTS] -! F. Vana 28-Nov-2013 : Redesigned trajectory handling -! T. Wilhelmsson (Sept 2013) Geometry and setup refactoring. -! 2013-11, D. Degrauwe: Flexible interface CPTEND_FLEX. -! 2013-11, J. Masek: Passing intermittency arrays for ACRANEB2. -! K. Yessad (July 2014): Move some variables. -! 2016-04, J. Masek: Passing sunshine duration to APL_AROME. -! 2016-09, M. Mokhtari & A. Ambar: replacement of ZEXT and ZEZDIAG by PGFL -! in aplpar.F90 argument. -! 2016-10, P. Marguinaud : Port to single precision -! K. Yessad (Dec 2016): Prune obsolete options. -! K. Yessad (June 2017): Introduce NHQE model. -! 2017-09, J. Masek: Shifted dimensioning of PGMU0. -! K. Yessad (Feb 2018): remove deep-layer formulations. -! K. Yessad (Apr 2018): introduce key L_RDRY_VD (ensure consistent definition of "dver" everywhere). -! 2018-09, F. Duruisseau: add rconv and sconv in gfl for bayrad -! 2018-09, R. Brozkova: Passing of diagnostic hail, global normal -! irradiance and mean radiant temperature from APLPAR. -! 2018-09, D. St-Martin : add NOGWD inputs in aplpar -! 2018-09, M. Michou : add ARPEGE-Climat chemistry call in aplpar -! R. El Khatib 27-02-2019 Use pointer function SC2PRG to avoid bounds violation -! 2019-05, I. Etchevers : add visibilities and precipitation type -! R. El Khatib 27-02-2019 memory bandwidth savings. -! R. El Khatib 30-Oct-2018 IMAXDRAFT -! 2019-09, M. Hrastinski: Dataflow for TKE and TTE terms in ALARO DDH (PFTCNS). -! 2019-09, J. Masek: Modified call to APL_AROME (added argument NFRRC). -! 2019-12, Y. Bouteloup: Introduction of ZTENDU and ZTENDV for computation of ZDEC in cputqy -! diferent from PTENDU and PTENDV in the case of the use of Tiedtke scheme to avoid double counting -! 2020-12, U. Andrae : Introduce SPP for HARMONIE-AROME -! 2021-01, R. Brozkova: ALARO graupel fix. -! R. El Khatib 24-Aug-2021 Fix potentially non-associated pointers -! End Modifications -!------------------------------------------------------------------------------- - -USE GEOMETRY_MOD , ONLY : GEOMETRY -USE SURFACE_FIELDS_MIX , ONLY : TSURF -USE YOMGMV , ONLY : TGMV -USE YOMCFU , ONLY : TCFU -USE YOMXFU , ONLY : TXFU -USE TYPE_MODEL , ONLY : MODEL -USE PARKIND1 , ONLY : JPIM ,JPRB -USE YOMHOOK , ONLY : LHOOK, DR_HOOK -USE SC2PRG_MOD , ONLY : SC2PRG - -USE YOMCT0 , ONLY : LSLAG, LTWOTL, LNHDYN, LAROME, LSFORCS, LNHQE,LCORWAT -USE YOMCT3 , ONLY : NSTEP -USE YOMCVER , ONLY : LVERTFE ,LVFE_GWMPA -USE YOMDYNA , ONLY : LGWADV, L3DTURB, L_RDRY_VD -USE YOMNUD , ONLY : NFNUDG ,LNUDG -USE YOMSNU , ONLY : XPNUDG -USE MODULE_RADTC_MIX , ONLY : YM_RADTC -USE YOMSCM , ONLY : LGSCM -USE YOMCST , ONLY : RG, RD -USE YOMCHET , ONLY : GCHETN -USE INTDYN_MOD , ONLY : YYTCTY0 ,YYTRCP0 ,YYTRCP9 ,YYTXYB0_PHY,YYTXYB9_PHY -USE YOMLSFORC , ONLY : LMUSCLFA -USE YOMSPSDT , ONLY : YSPPT -USE YOMTRAJ , ONLY : TRAJ_PHYS_TYPE, LPRTTRAJ -USE YOMLUN , ONLY : NULOUT - -USE DDH_MIX , ONLY : TYP_DDH -USE INTFLEX_MOD , ONLY : LINTFLEX, TYPE_INTPROCSET, NEWINTPROCSET, CLEANINTPROCSET -USE SPP_MOD , ONLY : YSPP_CONFIG,YSPP -! ------------------------------------------------------------------------- - -IMPLICIT NONE - -TYPE(GEOMETRY) ,INTENT(IN) :: YDGEOMETRY -TYPE(TGMV) ,INTENT(INOUT) :: YDGMV -TYPE(TSURF) ,INTENT(INOUT) :: YDSURF -TYPE(TCFU) ,INTENT(INOUT) :: YDCFU -TYPE(TXFU) ,INTENT(INOUT) :: YDXFU -TYPE(MODEL) ,INTENT(INOUT) :: YDMODEL -INTEGER(KIND=JPIM),INTENT(IN) :: KBL -INTEGER(KIND=JPIM),INTENT(IN) :: KGPCOMP -INTEGER(KIND=JPIM),INTENT(IN) :: KST -INTEGER(KIND=JPIM),INTENT(IN) :: KEND -INTEGER(KIND=JPIM),INTENT(IN) :: KGL1 -INTEGER(KIND=JPIM),INTENT(IN) :: KGL2 -INTEGER(KIND=JPIM),INTENT(IN) :: KSTGLO -LOGICAL ,INTENT(IN) :: LDCONFX -REAL(KIND=JPRB) ,INTENT(IN) :: PDTPHY -INTEGER(KIND=JPIM),INTENT(IN) :: KIBL -REAL(KIND=JPRB) ,INTENT(IN) :: POROGL(YDGEOMETRY%YRDIM%NPROMA) -REAL(KIND=JPRB) ,INTENT(IN) :: POROGM(YDGEOMETRY%YRDIM%NPROMA) -REAL(KIND=JPRB) ,INTENT(INOUT) :: PCUCONVCA(YDGEOMETRY%YRDIM%NPROMA) -REAL(KIND=JPRB) ,INTENT(INOUT) :: PNLCONVCA(YDGEOMETRY%YRDIM%NPROMA) -REAL(KIND=JPRB) ,INTENT(INOUT) :: PGMV(YDGEOMETRY%YRDIM%NPROMA,YDGEOMETRY%YRDIMV%NFLEVG,YDGMV%NDIMGMV) -REAL(KIND=JPRB) ,INTENT(IN) :: PGMVS(YDGEOMETRY%YRDIM%NPROMA,YDGMV%NDIMGMVS) -REAL(KIND=JPRB) ,INTENT(INOUT) :: PGFL(YDGEOMETRY%YRDIM%NPROMA,YDGEOMETRY%YRDIMV%NFLEVG,YDMODEL%YRML_GCONF%YGFL%NDIM) -REAL(KIND=JPRB) ,INTENT(IN) :: PWT0(YDGEOMETRY%YRDIM%NPROMA,YDGEOMETRY%YRDIMV%NFLEVG) -REAL(KIND=JPRB) ,INTENT(IN) :: PWT0L(YDGEOMETRY%YRDIM%NPROMA,YDGEOMETRY%YRDIMV%NFLEVG) -REAL(KIND=JPRB) ,INTENT(IN) :: PWT0M(YDGEOMETRY%YRDIM%NPROMA,YDGEOMETRY%YRDIMV%NFLEVG) -REAL(KIND=JPRB) ,INTENT(INOUT) :: PRCP0(YDGEOMETRY%YRDIM%NPROMA,YDGEOMETRY%YRDIMV%NFLEVG,YYTRCP0%NDIM) -REAL(KIND=JPRB) ,INTENT(IN) :: PHI0(YDGEOMETRY%YRDIM%NPROMA,0:YDGEOMETRY%YRDIMV%NFLEVG) -REAL(KIND=JPRB) ,INTENT(IN) :: PHIF0(YDGEOMETRY%YRDIM%NPROMA,YDGEOMETRY%YRDIMV%NFLEVG) -REAL(KIND=JPRB) ,INTENT(IN) :: PRE0(YDGEOMETRY%YRDIM%NPROMA,0:YDGEOMETRY%YRDIMV%NFLEVG) -REAL(KIND=JPRB) ,INTENT(IN) :: PRE0F(YDGEOMETRY%YRDIM%NPROMA,YDGEOMETRY%YRDIMV%NFLEVG) -REAL(KIND=JPRB) ,INTENT(IN) :: PREPHY0(YDGEOMETRY%YRDIM%NPROMA,0:YDGEOMETRY%YRDIMV%NFLEVG) -REAL(KIND=JPRB) ,INTENT(IN) :: PREPHY0F(YDGEOMETRY%YRDIM%NPROMA,YDGEOMETRY%YRDIMV%NFLEVG) -REAL(KIND=JPRB) ,INTENT(IN) :: PXYB0(YDGEOMETRY%YRDIM%NPROMA,YDGEOMETRY%YRDIMV%NFLEVG,YYTXYB0_PHY%NDIM) -REAL(KIND=JPRB) ,INTENT(IN) :: PWT9(YDGEOMETRY%YRDIM%NPROMA,YDGEOMETRY%YRDIMV%NFLEVG) -REAL(KIND=JPRB) ,INTENT(INOUT) :: PRCP9(YDGEOMETRY%YRDIM%NPROMA,YDGEOMETRY%YRDIMV%NFLEVG,YYTRCP9%NDIM) -REAL(KIND=JPRB) ,INTENT(IN) :: PHI9(YDGEOMETRY%YRDIM%NPROMA,0:YDGEOMETRY%YRDIMV%NFLEVG) -REAL(KIND=JPRB) ,INTENT(IN) :: PHIF9(YDGEOMETRY%YRDIM%NPROMA,YDGEOMETRY%YRDIMV%NFLEVG) -REAL(KIND=JPRB) ,INTENT(IN) :: PRE9(YDGEOMETRY%YRDIM%NPROMA,0:YDGEOMETRY%YRDIMV%NFLEVG) -REAL(KIND=JPRB) ,INTENT(IN) :: PRE9F(YDGEOMETRY%YRDIM%NPROMA,YDGEOMETRY%YRDIMV%NFLEVG) -REAL(KIND=JPRB) ,INTENT(IN) :: PREPHY9(YDGEOMETRY%YRDIM%NPROMA,0:YDGEOMETRY%YRDIMV%NFLEVG) -REAL(KIND=JPRB) ,INTENT(IN) :: PREPHY9F(YDGEOMETRY%YRDIM%NPROMA,YDGEOMETRY%YRDIMV%NFLEVG) -REAL(KIND=JPRB) ,INTENT(IN) :: PXYB9(YDGEOMETRY%YRDIM%NPROMA,YDGEOMETRY%YRDIMV%NFLEVG,YYTXYB9_PHY%NDIM) -REAL(KIND=JPRB) ,INTENT(IN) :: PKOZO(YDGEOMETRY%YRDIM%NPROMA,YDGEOMETRY%YRDIMV%NFLEVG*YDMODEL%YRML_PHY_G%YRDPHY%NVCLIS+1) -REAL(KIND=JPRB) ,INTENT(IN) :: PGP2DSDT(YDGEOMETRY%YRDIM%NPROMA,YSPPT%YGPSDT(1)%NG2D) -REAL(KIND=JPRB) ,INTENT(IN) :: PFORCEU(YDGEOMETRY%YRDIM%NPROMA,YDGEOMETRY%YRDIMV%NFLEVG) -REAL(KIND=JPRB) ,INTENT(IN) :: PFORCEV(YDGEOMETRY%YRDIM%NPROMA,YDGEOMETRY%YRDIMV%NFLEVG) -REAL(KIND=JPRB) ,INTENT(IN) :: PFORCET(YDGEOMETRY%YRDIM%NPROMA,YDGEOMETRY%YRDIMV%NFLEVG) -REAL(KIND=JPRB) ,INTENT(IN) :: PFORCEQ(YDGEOMETRY%YRDIM%NPROMA,YDGEOMETRY%YRDIMV%NFLEVG) -REAL(KIND=JPRB) ,INTENT(INOUT) :: PGRADH_PHY(YDGEOMETRY%YRDIM%NPROMA,YDMODEL%YRML_PHY_MF%YRARPHY%NGRADIENTS,YDGEOMETRY%YRDIMV%NFLEVG) -REAL(KIND=JPRB) ,INTENT(INOUT) :: PCTY0(YDGEOMETRY%YRDIM%NPROMA,0:YDGEOMETRY%YRDIMV%NFLEVG,YYTCTY0%NDIM) -REAL(KIND=JPRB) ,INTENT(INOUT) :: PB1(YDGEOMETRY%YRDIM%NPROMA,YDMODEL%YRML_DYN%YRPTRSLB1%NFLDSLB1) -REAL(KIND=JPRB) ,INTENT(INOUT) :: PB2(YDGEOMETRY%YRDIM%NPROMA,YDMODEL%YRML_DYN%YRPTRSLB2%NFLDSLB2) -REAL(KIND=JPRB) ,INTENT(INOUT) :: PGMVT1(YDGEOMETRY%YRDIM%NPROMA,YDGEOMETRY%YRDIMV%NFLEVG,YDGMV%YT1%NDIM) -REAL(KIND=JPRB) ,INTENT(INOUT) :: PGMVT1S(YDGEOMETRY%YRDIM%NPROMA,YDGMV%YT1%NDIMS) -REAL(KIND=JPRB) ,INTENT(INOUT) :: PGFLT1(YDGEOMETRY%YRDIM%NPROMA,YDGEOMETRY%YRDIMV%NFLEVG,YDMODEL%YRML_GCONF%YGFL%NDIM1) -REAL(KIND=JPRB) ,INTENT(INOUT) :: PSP_SB(YDGEOMETRY%YRDIM%NPROMA,YDSURF%YSP_SBD%NLEVS,YDSURF%YSP_SBD%NDIM) -REAL(KIND=JPRB) ,INTENT(INOUT) :: PSP_SG(YDGEOMETRY%YRDIM%NPROMA,YDSURF%YSP_SGD%NDIM) -REAL(KIND=JPRB) ,INTENT(INOUT) :: PSP_RR(YDGEOMETRY%YRDIM%NPROMA,YDSURF%YSP_RRD%NDIM) -REAL(KIND=JPRB) ,INTENT(INOUT) :: PSD_VF(YDGEOMETRY%YRDIM%NPROMA,YDSURF%YSD_VFD%NDIM) -REAL(KIND=JPRB) ,INTENT(INOUT) :: PSD_VP(YDGEOMETRY%YRDIM%NPROMA,YDSURF%YSD_VPD%NDIM) -REAL(KIND=JPRB) ,INTENT(INOUT) :: PSD_VV(YDGEOMETRY%YRDIM%NPROMA,YDSURF%YSD_VVD%NDIM) -REAL(KIND=JPRB) ,INTENT(INOUT) :: PSD_VH(YDGEOMETRY%YRDIM%NPROMA,YDSURF%YSD_VHD%NDIM) -REAL(KIND=JPRB) ,INTENT(INOUT) :: PSD_VK(YDGEOMETRY%YRDIM%NPROMA,YDSURF%YSD_VKD%NDIM) -REAL(KIND=JPRB) ,INTENT(INOUT) :: PSD_VA(YDGEOMETRY%YRDIM%NPROMA,YDSURF%YSD_VAD%NDIM) -REAL(KIND=JPRB) ,INTENT(INOUT) :: PSD_VC(YDGEOMETRY%YRDIM%NPROMA,YDSURF%YSD_VCD%NDIM) -REAL(KIND=JPRB) ,INTENT(INOUT) :: PSD_DI(YDGEOMETRY%YRDIM%NPROMA,YDSURF%YSD_DID%NLEVS,YDSURF%YSD_DID%NDIM) -REAL(KIND=JPRB) ,INTENT(INOUT) :: PSD_XP(YDGEOMETRY%YRDIM%NPROMA,YDSURF%YSD_XPD%NLEVS,YDSURF%YSD_XPD%NDIM) -REAL(KIND=JPRB) ,INTENT(INOUT) :: PSD_XP2(YDGEOMETRY%YRDIM%NPROMA,YDSURF%YSD_XP2D%NLEVS,YDSURF%YSD_XP2D%NDIM) -REAL(KIND=JPRB) ,INTENT(INOUT) :: PSD_VD(YDGEOMETRY%YRDIM%NPROMA,YDSURF%YSD_VDD%NDIM) -REAL(KIND=JPRB) ,INTENT(INOUT) :: PSD_SFL(YDGEOMETRY%YRDIM%NPROMA,YDSURF%YSD_SFLD%NDIM) -REAL(KIND=JPRB) ,INTENT(INOUT) :: PSD_SFO(YDGEOMETRY%YRDIM%NPROMA,YDSURF%YSD_SFOD%NDIM) -REAL(KIND=JPRB) ,INTENT(INOUT) :: PEMTD(YDGEOMETRY%YRDIM%NPROMA,1:YDGEOMETRY%YRDIMV%NFLEVG+1) -REAL(KIND=JPRB) ,INTENT(INOUT) :: PEMTU(YDGEOMETRY%YRDIM%NPROMA,1:YDGEOMETRY%YRDIMV%NFLEVG+1) -REAL(KIND=JPRB) ,INTENT(INOUT) :: PTRSW(YDGEOMETRY%YRDIM%NPROMA,1:YDGEOMETRY%YRDIMV%NFLEVG+1) -REAL(KIND=JPRB) ,INTENT(INOUT) :: PRMOON(YDGEOMETRY%YRDIM%NPROMA) -REAL(KIND=JPRB) ,INTENT(INOUT) :: PGPAR(YDGEOMETRY%YRDIM%NPROMA,YDMODEL%YRML_PHY_MF%YRPARAR%NGPAR+1) -REAL(KIND=JPRB) ,INTENT(INOUT) :: PDHSF(YDGEOMETRY%YRDIM%NPROMA) -REAL(KIND=JPRB) ,INTENT(OUT) :: PALBDG(YDGEOMETRY%YRDIM%NPROMM) -REAL(KIND=JPRB) ,INTENT(OUT) :: PCAPE(YDGEOMETRY%YRDIM%NPROMM) -REAL(KIND=JPRB) ,INTENT(OUT) :: PCTOP(YDGEOMETRY%YRDIM%NPROMM) -REAL(KIND=JPRB) ,INTENT(OUT) :: PCLCC(YDGEOMETRY%YRDIM%NPROMM) -REAL(KIND=JPRB) ,INTENT(OUT) :: PCLCH(YDGEOMETRY%YRDIM%NPROMM) -REAL(KIND=JPRB) ,INTENT(OUT) :: PCLCL(YDGEOMETRY%YRDIM%NPROMM) -REAL(KIND=JPRB) ,INTENT(OUT) :: PCLCM(YDGEOMETRY%YRDIM%NPROMM) -REAL(KIND=JPRB) ,INTENT(OUT) :: PCLCT(YDGEOMETRY%YRDIM%NPROMA) -REAL(KIND=JPRB) ,INTENT(OUT) :: PCLPH(YDGEOMETRY%YRDIM%NPROMM) -REAL(KIND=JPRB) ,INTENT(OUT) :: PVEIN(YDGEOMETRY%YRDIM%NPROMM) -REAL(KIND=JPRB) ,INTENT(INOUT) :: PCT(YDGEOMETRY%YRDIM%NPROMM) -REAL(KIND=JPRB) ,INTENT(INOUT) :: PDIFCQ(YDGEOMETRY%YRDIM%NPROMM,0:YDGEOMETRY%YRDIMV%NFLEVG) -REAL(KIND=JPRB) ,INTENT(INOUT) :: PDIFCQI(YDGEOMETRY%YRDIM%NPROMM,0:YDGEOMETRY%YRDIMV%NFLEVG) -REAL(KIND=JPRB) ,INTENT(INOUT) :: PDIFCQL(YDGEOMETRY%YRDIM%NPROMM,0:YDGEOMETRY%YRDIMV%NFLEVG) -REAL(KIND=JPRB) ,INTENT(INOUT) :: PDIFCS(YDGEOMETRY%YRDIM%NPROMM,0:YDGEOMETRY%YRDIMV%NFLEVG) -REAL(KIND=JPRB) ,INTENT(INOUT) :: PDIFTQ(YDGEOMETRY%YRDIM%NPROMM,0:YDGEOMETRY%YRDIMV%NFLEVG) -REAL(KIND=JPRB) ,INTENT(INOUT) :: PDIFTQI(YDGEOMETRY%YRDIM%NPROMM,0:YDGEOMETRY%YRDIMV%NFLEVG) -REAL(KIND=JPRB) ,INTENT(INOUT) :: PDIFTQL(YDGEOMETRY%YRDIM%NPROMM,0:YDGEOMETRY%YRDIMV%NFLEVG) -REAL(KIND=JPRB) ,INTENT(INOUT) :: PDIFTS(YDGEOMETRY%YRDIM%NPROMM,0:YDGEOMETRY%YRDIMV%NFLEVG) -REAL(KIND=JPRB) ,INTENT(INOUT) :: PFCCQL(YDGEOMETRY%YRDIM%NPROMM,0:YDGEOMETRY%YRDIMV%NFLEVG) -REAL(KIND=JPRB) ,INTENT(INOUT) :: PFCCQN(YDGEOMETRY%YRDIM%NPROMM,0:YDGEOMETRY%YRDIMV%NFLEVG) -REAL(KIND=JPRB) ,INTENT(INOUT) :: PFCHOZ(YDGEOMETRY%YRDIM%NPROMM,0:YDGEOMETRY%YRDIMV%NFLEVG) -REAL(KIND=JPRB) ,INTENT(INOUT) :: PFPFPSL(YDGEOMETRY%YRDIM%NPROMM,0:YDGEOMETRY%YRDIMV%NFLEVG) -REAL(KIND=JPRB) ,INTENT(INOUT) :: PFPFPSN(YDGEOMETRY%YRDIM%NPROMM,0:YDGEOMETRY%YRDIMV%NFLEVG) -REAL(KIND=JPRB) ,INTENT(INOUT) :: PFPFPSG(YDGEOMETRY%YRDIM%NPROMM,0:YDGEOMETRY%YRDIMV%NFLEVG) -REAL(KIND=JPRB) ,INTENT(INOUT) :: PFPFPCL(YDGEOMETRY%YRDIM%NPROMM,0:YDGEOMETRY%YRDIMV%NFLEVG) -REAL(KIND=JPRB) ,INTENT(INOUT) :: PFPFPCN(YDGEOMETRY%YRDIM%NPROMM,0:YDGEOMETRY%YRDIMV%NFLEVG) -REAL(KIND=JPRB) ,INTENT(INOUT) :: PFPEVPSL(YDGEOMETRY%YRDIM%NPROMM,0:YDGEOMETRY%YRDIMV%NFLEVG) -REAL(KIND=JPRB) ,INTENT(INOUT) :: PFPEVPSN(YDGEOMETRY%YRDIM%NPROMM,0:YDGEOMETRY%YRDIMV%NFLEVG) -REAL(KIND=JPRB) ,INTENT(INOUT) :: PFPEVPSG(YDGEOMETRY%YRDIM%NPROMM,0:YDGEOMETRY%YRDIMV%NFLEVG) -REAL(KIND=JPRB) ,INTENT(INOUT) :: PFPEVPCL(YDGEOMETRY%YRDIM%NPROMM,0:YDGEOMETRY%YRDIMV%NFLEVG) -REAL(KIND=JPRB) ,INTENT(INOUT) :: PFPEVPCN(YDGEOMETRY%YRDIM%NPROMM,0:YDGEOMETRY%YRDIMV%NFLEVG) -REAL(KIND=JPRB) ,INTENT(INOUT) :: PFPEVPCG(YDGEOMETRY%YRDIM%NPROMM,0:YDGEOMETRY%YRDIMV%NFLEVG) -REAL(KIND=JPRB) ,INTENT(INOUT) :: PFCHSP(YDGEOMETRY%YRDIM%NPROMM,YDSURF%YSP_SBD%NLEVS) -REAL(KIND=JPRB) ,INTENT(INOUT) :: PFCLL(YDGEOMETRY%YRDIM%NPROMM,YDMODEL%YRML_PHY_G%YRDPHY%NTSSG+1) -REAL(KIND=JPRB) ,INTENT(INOUT) :: PFCLN(YDGEOMETRY%YRDIM%NPROMM,YDMODEL%YRML_PHY_G%YRDPHY%NTSSG+1) -REAL(KIND=JPRB) ,INTENT(OUT) :: PFCQING(YDGEOMETRY%YRDIM%NPROMM,0:YDGEOMETRY%YRDIMV%NFLEVG) -REAL(KIND=JPRB) ,INTENT(INOUT) :: PFCQLNG(YDGEOMETRY%YRDIM%NPROMM,0:YDGEOMETRY%YRDIMV%NFLEVG) -REAL(KIND=JPRB) ,INTENT(INOUT) :: PFCQNG(YDGEOMETRY%YRDIM%NPROMM,0:YDGEOMETRY%YRDIMV%NFLEVG) -REAL(KIND=JPRB) ,INTENT(INOUT) :: PFCS(YDGEOMETRY%YRDIM%NPROMM,YDMODEL%YRML_PHY_G%YRDPHY%NTSSG+1) -REAL(KIND=JPRB) ,INTENT(INOUT) :: PFCSQL(YDGEOMETRY%YRDIM%NPROMM,0:YDGEOMETRY%YRDIMV%NFLEVG) -REAL(KIND=JPRB) ,INTENT(INOUT) :: PFCSQN(YDGEOMETRY%YRDIM%NPROMM,0:YDGEOMETRY%YRDIMV%NFLEVG) -REAL(KIND=JPRB) ,INTENT(INOUT) :: PFEVL(YDGEOMETRY%YRDIM%NPROMM,YDMODEL%YRML_PHY_G%YRDPHY%NTSSG+1) -REAL(KIND=JPRB) ,INTENT(INOUT) :: PFEVN(YDGEOMETRY%YRDIM%NPROMM,YDMODEL%YRML_PHY_G%YRDPHY%NTSSG+1) -REAL(KIND=JPRB) ,INTENT(INOUT) :: PFEVV(YDGEOMETRY%YRDIM%NPROMM) -REAL(KIND=JPRB) ,INTENT(INOUT) :: PFGEL(YDGEOMETRY%YRDIM%NPROMM) -REAL(KIND=JPRB) ,INTENT(INOUT) :: PFGELS(YDGEOMETRY%YRDIM%NPROMM) -REAL(KIND=JPRB) ,INTENT(INOUT) :: PFLWSP(YDGEOMETRY%YRDIM%NPROMM) -REAL(KIND=JPRB) ,INTENT(INOUT) :: PFONTE(YDGEOMETRY%YRDIM%NPROMM) -REAL(KIND=JPRB) ,INTENT(INOUT) :: PFPLCL(YDGEOMETRY%YRDIM%NPROMM,0:YDGEOMETRY%YRDIMV%NFLEVG) -REAL(KIND=JPRB) ,INTENT(INOUT) :: PFPLCN(YDGEOMETRY%YRDIM%NPROMM,0:YDGEOMETRY%YRDIMV%NFLEVG) -REAL(KIND=JPRB) ,INTENT(INOUT) :: PFPLCG(YDGEOMETRY%YRDIM%NPROMM,0:YDGEOMETRY%YRDIMV%NFLEVG) -REAL(KIND=JPRB) ,INTENT(INOUT) :: PFPLCHL(YDGEOMETRY%YRDIM%NPROMM,0:YDGEOMETRY%YRDIMV%NFLEVG) -REAL(KIND=JPRB) ,INTENT(INOUT) :: PFPLSL(YDGEOMETRY%YRDIM%NPROMM,0:YDGEOMETRY%YRDIMV%NFLEVG) -REAL(KIND=JPRB) ,INTENT(INOUT) :: PFPLSN(YDGEOMETRY%YRDIM%NPROMM,0:YDGEOMETRY%YRDIMV%NFLEVG) -REAL(KIND=JPRB) ,INTENT(INOUT) :: PFPLSG(YDGEOMETRY%YRDIM%NPROMM,0:YDGEOMETRY%YRDIMV%NFLEVG) -REAL(KIND=JPRB) ,INTENT(INOUT) :: PFPLSHL(YDGEOMETRY%YRDIM%NPROMM,0:YDGEOMETRY%YRDIMV%NFLEVG) -REAL(KIND=JPRB) ,INTENT(OUT) :: PMRT(YDGEOMETRY%YRDIM%NPROMM) -REAL(KIND=JPRB) ,INTENT(INOUT) :: PFRMH(YDGEOMETRY%YRDIM%NPROMM,0:YDGEOMETRY%YRDIMV%NFLEVG) -REAL(KIND=JPRB) ,INTENT(INOUT) :: PDIFCQLC(YDGEOMETRY%YRDIM%NPROMM,0:YDGEOMETRY%YRDIMV%NFLEVG) -REAL(KIND=JPRB) ,INTENT(INOUT) :: PDIFCQIC(YDGEOMETRY%YRDIM%NPROMM,0:YDGEOMETRY%YRDIMV%NFLEVG) -REAL(KIND=JPRB) ,INTENT(INOUT) :: PFIMCC (YDGEOMETRY%YRDIM%NPROMM,0:YDGEOMETRY%YRDIMV%NFLEVG) -REAL(KIND=JPRB) ,INTENT(INOUT) :: PFEDQLC(YDGEOMETRY%YRDIM%NPROMM,0:YDGEOMETRY%YRDIMV%NFLEVG) -REAL(KIND=JPRB) ,INTENT(INOUT) :: PFEDQIC(YDGEOMETRY%YRDIM%NPROMM,0:YDGEOMETRY%YRDIMV%NFLEVG) -REAL(KIND=JPRB) ,INTENT(INOUT) :: PFEDQRC(YDGEOMETRY%YRDIM%NPROMM,0:YDGEOMETRY%YRDIMV%NFLEVG) -REAL(KIND=JPRB) ,INTENT(INOUT) :: PFEDQSC(YDGEOMETRY%YRDIM%NPROMM,0:YDGEOMETRY%YRDIMV%NFLEVG) -REAL(KIND=JPRB) ,INTENT(INOUT) :: PFCNEGQLC(YDGEOMETRY%YRDIM%NPROMM,0:YDGEOMETRY%YRDIMV%NFLEVG) -REAL(KIND=JPRB) ,INTENT(INOUT) :: PFCNEGQIC(YDGEOMETRY%YRDIM%NPROMM,0:YDGEOMETRY%YRDIMV%NFLEVG) -REAL(KIND=JPRB) ,INTENT(INOUT) :: PFCNEGQRC(YDGEOMETRY%YRDIM%NPROMM,0:YDGEOMETRY%YRDIMV%NFLEVG) -REAL(KIND=JPRB) ,INTENT(INOUT) :: PFCNEGQSC(YDGEOMETRY%YRDIM%NPROMM,0:YDGEOMETRY%YRDIMV%NFLEVG) -REAL(KIND=JPRB) ,INTENT(INOUT) :: PFRSO(YDGEOMETRY%YRDIM%NPROMM,0:YDGEOMETRY%YRDIMV%NFLEVG,YDMODEL%YRML_PHY_G%YRDPHY%NTSSG+1) -REAL(KIND=JPRB) ,INTENT(OUT) :: PFRSOC(YDGEOMETRY%YRDIM%NPROMM,0:1) -REAL(KIND=JPRB) ,INTENT(OUT) :: PFRSODS(YDGEOMETRY%YRDIM%NPROMM) -REAL(KIND=JPRB) ,INTENT(OUT) :: PFRSOLU(YDGEOMETRY%YRDIM%NPROMM) -REAL(KIND=JPRB) ,INTENT(OUT) :: PFRSGNI(YDGEOMETRY%YRDIM%NPROMM) -REAL(KIND=JPRB) ,INTENT(OUT) :: PFRSDNI(YDGEOMETRY%YRDIM%NPROMM) -REAL(KIND=JPRB) ,INTENT(OUT) :: PFRSOPS(YDGEOMETRY%YRDIM%NPROMM) -REAL(KIND=JPRB) ,INTENT(OUT) :: PFRSOPT(YDGEOMETRY%YRDIM%NPROMM) -REAL(KIND=JPRB) ,INTENT(INOUT) :: PFRTH(YDGEOMETRY%YRDIM%NPROMM,0:YDGEOMETRY%YRDIMV%NFLEVG,YDMODEL%YRML_PHY_G%YRDPHY%NTSSG+1) -REAL(KIND=JPRB) ,INTENT(OUT) :: PFRTHC(YDGEOMETRY%YRDIM%NPROMM,0:1) -REAL(KIND=JPRB) ,INTENT(OUT) :: PFRTHDS(YDGEOMETRY%YRDIM%NPROMM) -REAL(KIND=JPRB) ,INTENT(INOUT) :: PFTR(YDGEOMETRY%YRDIM%NPROMM) -REAL(KIND=JPRB) ,INTENT(INOUT) :: PGZ0(YDGEOMETRY%YRDIM%NPROMM) -REAL(KIND=JPRB) ,INTENT(INOUT) :: PGZ0H(YDGEOMETRY%YRDIM%NPROMM) -REAL(KIND=JPRB) ,INTENT(INOUT) :: PNEB(YDGEOMETRY%YRDIM%NPROMA,YDGEOMETRY%YRDIMV%NFLEVG) -REAL(KIND=JPRB) ,INTENT(INOUT) :: PQCLS(YDGEOMETRY%YRDIM%NPROMM) -REAL(KIND=JPRB) ,INTENT(INOUT) :: PQICE(YDGEOMETRY%YRDIM%NPROMA,YDGEOMETRY%YRDIMV%NFLEVG) -REAL(KIND=JPRB) ,INTENT(INOUT) :: PQLI(YDGEOMETRY%YRDIM%NPROMA,YDGEOMETRY%YRDIMV%NFLEVG) -REAL(KIND=JPRB) ,INTENT(INOUT) :: PQS(YDGEOMETRY%YRDIM%NPROMA) -REAL(KIND=JPRB) ,INTENT(INOUT) :: PRH(YDGEOMETRY%YRDIM%NPROMA,YDGEOMETRY%YRDIMV%NFLEVG) -REAL(KIND=JPRB) ,INTENT(OUT) :: PRHCLS(YDGEOMETRY%YRDIM%NPROMM) -REAL(KIND=JPRB) ,INTENT(INOUT) :: PRUISL(YDGEOMETRY%YRDIM%NPROMM) -REAL(KIND=JPRB) ,INTENT(INOUT) :: PRUISP(YDGEOMETRY%YRDIM%NPROMM) -REAL(KIND=JPRB) ,INTENT(INOUT) :: PRUISS(YDGEOMETRY%YRDIM%NPROMM) -REAL(KIND=JPRB) ,INTENT(INOUT) :: PSTRCU(YDGEOMETRY%YRDIM%NPROMM,0:YDGEOMETRY%YRDIMV%NFLEVG) -REAL(KIND=JPRB) ,INTENT(INOUT) :: PSTRCV(YDGEOMETRY%YRDIM%NPROMM,0:YDGEOMETRY%YRDIMV%NFLEVG) -REAL(KIND=JPRB) ,INTENT(INOUT) :: PSTRDU(YDGEOMETRY%YRDIM%NPROMM,0:YDGEOMETRY%YRDIMV%NFLEVG) -REAL(KIND=JPRB) ,INTENT(INOUT) :: PSTRDV(YDGEOMETRY%YRDIM%NPROMM,0:YDGEOMETRY%YRDIMV%NFLEVG) -REAL(KIND=JPRB) ,INTENT(INOUT) :: PSTRMU(YDGEOMETRY%YRDIM%NPROMM,0:YDGEOMETRY%YRDIMV%NFLEVG) -REAL(KIND=JPRB) ,INTENT(INOUT) :: PSTRMV(YDGEOMETRY%YRDIM%NPROMM,0:YDGEOMETRY%YRDIMV%NFLEVG) -REAL(KIND=JPRB) ,INTENT(INOUT) :: PSTRTU(YDGEOMETRY%YRDIM%NPROMM,0:YDGEOMETRY%YRDIMV%NFLEVG) -REAL(KIND=JPRB) ,INTENT(INOUT) :: PSTRTV(YDGEOMETRY%YRDIM%NPROMM,0:YDGEOMETRY%YRDIMV%NFLEVG) -REAL(KIND=JPRB) ,INTENT(INOUT) :: PUCLS(YDGEOMETRY%YRDIM%NPROMM) -REAL(KIND=JPRB) ,INTENT(INOUT) :: PVCLS(YDGEOMETRY%YRDIM%NPROMM) -REAL(KIND=JPRB) ,INTENT(INOUT) :: PNUCLS(YDGEOMETRY%YRDIM%NPROMM) -REAL(KIND=JPRB) ,INTENT(INOUT) :: PNVCLS(YDGEOMETRY%YRDIM%NPROMM) -REAL(KIND=JPRB) ,INTENT(INOUT) :: PTCLS(YDGEOMETRY%YRDIM%NPROMM) -REAL(KIND=JPRB) ,INTENT(OUT) :: PUGST(YDGEOMETRY%YRDIM%NPROMM) -REAL(KIND=JPRB) ,INTENT(OUT) :: PVGST(YDGEOMETRY%YRDIM%NPROMM) -REAL(KIND=JPRB) ,INTENT(INOUT) :: PMOCON(YDGEOMETRY%YRDIM%NPROMM) -REAL(KIND=JPRB) ,INTENT(OUT) :: PFDIS(YDGEOMETRY%YRDIM%NPROMM,0:YDGEOMETRY%YRDIMV%NFLEVG) -REAL(KIND=JPRB) ,INTENT(OUT) :: PFHPCL(YDGEOMETRY%YRDIM%NPROMM,0:YDGEOMETRY%YRDIMV%NFLEVG) -REAL(KIND=JPRB) ,INTENT(OUT) :: PFHPCN(YDGEOMETRY%YRDIM%NPROMM,0:YDGEOMETRY%YRDIMV%NFLEVG) -REAL(KIND=JPRB) ,INTENT(OUT) :: PFHPCG(YDGEOMETRY%YRDIM%NPROMM,0:YDGEOMETRY%YRDIMV%NFLEVG) -REAL(KIND=JPRB) ,INTENT(OUT) :: PFHPSL(YDGEOMETRY%YRDIM%NPROMM,0:YDGEOMETRY%YRDIMV%NFLEVG) -REAL(KIND=JPRB) ,INTENT(OUT) :: PFHPSN(YDGEOMETRY%YRDIM%NPROMM,0:YDGEOMETRY%YRDIMV%NFLEVG) -REAL(KIND=JPRB) ,INTENT(OUT) :: PFHPSG(YDGEOMETRY%YRDIM%NPROMM,0:YDGEOMETRY%YRDIMV%NFLEVG) -REAL(KIND=JPRB) ,INTENT(OUT) :: PFHSCL(YDGEOMETRY%YRDIM%NPROMM,0:YDGEOMETRY%YRDIMV%NFLEVG) -REAL(KIND=JPRB) ,INTENT(OUT) :: PFHSCN(YDGEOMETRY%YRDIM%NPROMM,0:YDGEOMETRY%YRDIMV%NFLEVG) -REAL(KIND=JPRB) ,INTENT(OUT) :: PFHSSL(YDGEOMETRY%YRDIM%NPROMM,0:YDGEOMETRY%YRDIMV%NFLEVG) -REAL(KIND=JPRB) ,INTENT(OUT) :: PFHSSN(YDGEOMETRY%YRDIM%NPROMM,0:YDGEOMETRY%YRDIMV%NFLEVG) -REAL(KIND=JPRB) ,INTENT(OUT) :: PFHSSG(YDGEOMETRY%YRDIM%NPROMM,0:YDGEOMETRY%YRDIMV%NFLEVG) -REAL(KIND=JPRB) ,INTENT(OUT) :: PFEPFP(YDGEOMETRY%YRDIM%NPROMA,0:YDGEOMETRY%YRDIMV%NFLEVG) -REAL(KIND=JPRB) ,INTENT(OUT) :: PFCMPCQ(YDGEOMETRY%YRDIM%NPROMA,0:YDGEOMETRY%YRDIMV%NFLEVG) -REAL(KIND=JPRB) ,INTENT(OUT) :: PFCMPSN(YDGEOMETRY%YRDIM%NPROMA,0:YDGEOMETRY%YRDIMV%NFLEVG) -REAL(KIND=JPRB) ,INTENT(OUT) :: PFCMPSL(YDGEOMETRY%YRDIM%NPROMA,0:YDGEOMETRY%YRDIMV%NFLEVG) -REAL(KIND=JPRB) ,INTENT(INOUT) :: PTENDU(YDGEOMETRY%YRDIM%NPROMM,YDGEOMETRY%YRDIMV%NFLEVG) -REAL(KIND=JPRB) ,INTENT(INOUT) :: PTENDV(YDGEOMETRY%YRDIM%NPROMM,YDGEOMETRY%YRDIMV%NFLEVG) -REAL(KIND=JPRB) ,INTENT(OUT) :: PQSOL(YDGEOMETRY%YRDIM%NPROMA) -REAL(KIND=JPRB) ,INTENT(OUT) :: PDERNSHF(YDGEOMETRY%YRDIM%NPROMM) -REAL(KIND=JPRB) ,INTENT(OUT) :: PFCQRNG(YDGEOMETRY%YRDIM%NPROMM,0:YDGEOMETRY%YRDIMV%NFLEVG) -REAL(KIND=JPRB) ,INTENT(OUT) :: PFCQSNG(YDGEOMETRY%YRDIM%NPROMM,0:YDGEOMETRY%YRDIMV%NFLEVG) -REAL(KIND=JPRB) ,INTENT(OUT) :: PFCQGNG(YDGEOMETRY%YRDIM%NPROMM,0:YDGEOMETRY%YRDIMV%NFLEVG) -REAL(KIND=JPRB) ,INTENT(OUT) :: PDIAGH(YDGEOMETRY%YRDIM%NPROMA) -REAL(KIND=JPRB) ,INTENT(OUT) :: PFLASH(YDGEOMETRY%YRDIM%NPROMA) -REAL(KIND=JPRB) ,INTENT(INOUT) :: PGDEOSI(YDGEOMETRY%YRDIM%NPROMM,0:YDGEOMETRY%YRDIMV%NFLEVG,2) -REAL(KIND=JPRB) ,INTENT(INOUT) :: PGUEOSI(YDGEOMETRY%YRDIM%NPROMM,0:YDGEOMETRY%YRDIMV%NFLEVG,2) -REAL(KIND=JPRB) ,INTENT(INOUT) :: PGMU0(YDGEOMETRY%YRDIM%NPROMM,0:YDMODEL%YRML_PHY_MF%YRPHY%NSORAYFR-1) -REAL(KIND=JPRB) ,INTENT(INOUT) :: PGMU0_MIN(YDGEOMETRY%YRDIM%NPROMM) -REAL(KIND=JPRB) ,INTENT(INOUT) :: PGMU0_MAX(YDGEOMETRY%YRDIM%NPROMM) -REAL(KIND=JPRB) ,INTENT(INOUT) :: PGDEOTI(YDGEOMETRY%YRDIM%NPROMM,0:YDGEOMETRY%YRDIMV%NFLEVG) -REAL(KIND=JPRB) ,INTENT(INOUT) :: PGDEOTI2(YDGEOMETRY%YRDIM%NPROMM,0:YDGEOMETRY%YRDIMV%NFLEVG) -REAL(KIND=JPRB) ,INTENT(INOUT) :: PGUEOTI(YDGEOMETRY%YRDIM%NPROMM,0:YDGEOMETRY%YRDIMV%NFLEVG) -REAL(KIND=JPRB) ,INTENT(INOUT) :: PGUEOTI2(YDGEOMETRY%YRDIM%NPROMM,0:YDGEOMETRY%YRDIMV%NFLEVG) -REAL(KIND=JPRB) ,INTENT(INOUT) :: PGEOLT(YDGEOMETRY%YRDIM%NPROMM,YDGEOMETRY%YRDIMV%NFLEVG) -REAL(KIND=JPRB) ,INTENT(INOUT) :: PGEOXT(YDGEOMETRY%YRDIM%NPROMM,YDGEOMETRY%YRDIMV%NFLEVG) -REAL(KIND=JPRB) ,INTENT(INOUT) :: PGRPROX(YDGEOMETRY%YRDIM%NPROMM,0:YDGEOMETRY%YRDIMV%NFLEVG) -REAL(KIND=JPRB) ,INTENT(INOUT) :: PGMIXP(YDGEOMETRY%YRDIM%NPROMM,0:YDGEOMETRY%YRDIMV%NFLEVG) -REAL(KIND=JPRB) ,INTENT(INOUT) :: PGFLUXC(YDGEOMETRY%YRDIM%NPROMM,0:YDGEOMETRY%YRDIMV%NFLEVG) -REAL(KIND=JPRB) ,INTENT(INOUT) :: PGRSURF(YDGEOMETRY%YRDIM%NPROMM) -REAL(KIND=JPRB) ,INTENT(OUT) :: PVISICLD(YDGEOMETRY%YRDIM%NPROMM) -REAL(KIND=JPRB) ,INTENT(INOUT) :: PFTCNS(YDGEOMETRY%YRDIM%NPROMA,0:YDGEOMETRY%YRDIMV%NFLEVG,6) -REAL(KIND=JPRB) ,INTENT(OUT) :: PVISIHYDRO(YDGEOMETRY%YRDIM%NPROMM) -REAL(KIND=JPRB) ,INTENT(OUT) :: PMXCLWC(YDGEOMETRY%YRDIM%NPROMM) -REAL(KIND=JPRB) ,INTENT(OUT) :: PTPWCLS(YDGEOMETRY%YRDIM%NPROMM) - -TYPE (TRAJ_PHYS_TYPE), INTENT(INOUT) :: PTRAJ_PHYS -TYPE(TYP_DDH) ,INTENT(INOUT) :: YDDDH - -! ------------------------------------------------------------------ -LOGICAL :: LLDIAB -LOGICAL :: LL_SAVE_PHSURF -LOGICAL :: LLXFUMSE - -INTEGER(KIND=JPIM) :: IFIELDSS -INTEGER(KIND=JPIM) :: IBLK -INTEGER(KIND=JPIM) :: IPQ,IPO3,ITDIA,IPTREXT,IPTR_CONT,IEFB1,IEFB2,IEFB3 -INTEGER(KIND=JPIM) :: IPGFL(YDMODEL%YRML_GCONF%YGFL%NUMFLDS),IPTR(YDMODEL%YRML_GCONF%YGFL%NUMFLDS) - -INTEGER(KIND=JPIM) :: INSTEP_DEB,INSTEP_FIN -INTEGER(KIND=JPIM) :: JLEV, JGFL -INTEGER(KIND=JPIM) :: JROF -INTEGER(KIND=JPIM) :: ISLB1U9 ,ISLB1V9 ,ISLB1T9 ,ISLB1GFL9, ISLB1VD9 - -INTEGER(KIND=JPIM) :: ICLPH(YDGEOMETRY%YRDIM%NPROMA) ! cf. KCLPH in APLPAR. - -! --- UPPER AIR PHYSICAL TENDENCIES. -REAL(KIND=JPRB) :: ZTENDH(YDGEOMETRY%YRDIM%NPROMM,YDGEOMETRY%YRDIMV%NFLEVG) ! Enthalpy tendency. -REAL(KIND=JPRB) :: ZTENDQ(YDGEOMETRY%YRDIM%NPROMM,YDGEOMETRY%YRDIMV%NFLEVG) ! Moisture tendency. -REAL(KIND=JPRB) :: ZTENDPTKE(YDGEOMETRY%YRDIM%NPROMM,YDGEOMETRY%YRDIMV%NFLEVG) ! Pseudo progn. TKE - -! GFL tendencies for APL_AROME (assumes YDMODEL%YRML_GCONF%YGFL%NUMFLDS>=YDMODEL%YRML_PHY_MF%YRPARAR%NRR) -! for now, use Jovi's trick : -REAL(KIND=JPRB) :: ZTENDGFLR(YDGEOMETRY%YRDIM%NPROMM,YDGEOMETRY%YRDIMV%NFLEVG,0:YDMODEL%YRML_GCONF%YGFL%NUMFLDS) -REAL(KIND=JPRB) :: ZTENDGFL(YDGEOMETRY%YRDIM%NPROMM,YDGEOMETRY%YRDIMV%NFLEVG,YDMODEL%YRML_GCONF%YGFL%NUMFLDS) ! GFL tendencies - -REAL(KIND=JPRB) :: ZUDOM(YDGEOMETRY%YRDIM%NPROMA,YDGEOMETRY%YRDIMV%NFLEVG),& - & ZUDAL(YDGEOMETRY%YRDIM%NPROMA,YDGEOMETRY%YRDIMV%NFLEVG) -REAL(KIND=JPRB) :: ZDDOM(YDGEOMETRY%YRDIM%NPROMA,YDGEOMETRY%YRDIMV%NFLEVG),& - & ZDDAL(YDGEOMETRY%YRDIM%NPROMA,YDGEOMETRY%YRDIMV%NFLEVG) -REAL(KIND=JPRB) :: ZUNEBH(YDGEOMETRY%YRDIM%NPROMA,YDGEOMETRY%YRDIMV%NFLEVG),& - & ZENTCH(YDGEOMETRY%YRDIM%NPROMA,YDGEOMETRY%YRDIMV%NFLEVG) - -! --- UPPER AIR PHYSICAL TENDENCIES FOR AROME. -! (the previous one are not used in AROME) -REAL(KIND=JPRB) :: ZTENDT (YDGEOMETRY%YRDIM%NPROMA,YDGEOMETRY%YRDIMV%NFLEVG) ! temperature tendency -REAL(KIND=JPRB) :: ZTENDW (YDGEOMETRY%YRDIM%NPROMA,YDGEOMETRY%YRDIMV%NFLEVG) ! W tendency -REAL(KIND=JPRB) :: ZTENDD (YDGEOMETRY%YRDIM%NPROMA,YDGEOMETRY%YRDIMV%NFLEVG) ! d tendency -REAL(KIND=JPRB) :: ZTENDEXT(YDGEOMETRY%YRDIM%NPROMA,YDGEOMETRY%YRDIMV%NFLEVG,YDMODEL%YRML_GCONF%YGFL%NGFL_EXT) ! GFL EXTRA tendency -REAL(KIND=JPRB) :: ZTENDEXT_DEP(YDGEOMETRY%YRDIM%NPROMA,YDGEOMETRY%YRDIMV%NFLEVG,YDMODEL%YRML_GCONF%YGFL%NGFL_EXT) ! GFL EXTRA tendency -REAL(KIND=JPRB) :: ZDIFEXT(YDGEOMETRY%YRDIM%NPROMA,0:YDGEOMETRY%YRDIMV%NFLEVG,YDMODEL%YRML_GCONF%YGFL%NGFL_EXT) ! Extra-GFL fluxes. - -REAL(KIND=JPRB) :: ZTENDU (YDGEOMETRY%YRDIM%NPROMA,YDGEOMETRY%YRDIMV%NFLEVG) ! U tendency without deep convection contribution -REAL(KIND=JPRB) :: ZTENDV (YDGEOMETRY%YRDIM%NPROMA,YDGEOMETRY%YRDIMV%NFLEVG) ! V tendency without deep convection contribution -! --- SURFACE AND DEEP RESERVOIR PHYSICAL TENDENCIES. -REAL(KIND=JPRB) :: ZTDTS(YDGEOMETRY%YRDIM%NPROMM) ! Surface temperature tendency. -REAL(KIND=JPRB) :: ZTDTP(YDGEOMETRY%YRDIM%NPROMM,YDSURF%YSP_SBD%NLEVS) ! Deep temperature tendency. -REAL(KIND=JPRB) :: ZTDWS(YDGEOMETRY%YRDIM%NPROMM) ! Surface water res. tendency. -REAL(KIND=JPRB) :: ZTDWP(YDGEOMETRY%YRDIM%NPROMM) ! Deep water res. tendency. -REAL(KIND=JPRB) :: ZTDWL(YDGEOMETRY%YRDIM%NPROMM) ! Interception water res. tendency -REAL(KIND=JPRB) :: ZTDSNS(YDGEOMETRY%YRDIM%NPROMM) ! Snow res. tendency. -REAL(KIND=JPRB) :: ZTDWPI(YDGEOMETRY%YRDIM%NPROMM) ! Deep ice res. tendency. -REAL(KIND=JPRB) :: ZTDWSI(YDGEOMETRY%YRDIM%NPROMM) ! Surface ice res. tendency. -REAL(KIND=JPRB) :: ZTDALBNS(YDGEOMETRY%YRDIM%NPROMA) ! Snow albedo tendency. -REAL(KIND=JPRB) :: ZTDRHONS(YDGEOMETRY%YRDIM%NPROMA) ! Snow density tendency. - -! --- FLUXES FROM PARAMETERISATIONS AND TENDENCIES COMP. -REAL(KIND=JPRB) :: ZFP(YDGEOMETRY%YRDIM%NPROMM,0:YDGEOMETRY%YRDIMV%NFLEVG) ! Total rainfall flux. -REAL(KIND=JPRB) :: ZFPLCH(YDGEOMETRY%YRDIM%NPROMM,0:YDGEOMETRY%YRDIMV%NFLEVG) ! convective precipitation flux, - ! local -REAL(KIND=JPRB) :: ZFPLSH(YDGEOMETRY%YRDIM%NPROMM,0:YDGEOMETRY%YRDIMV%NFLEVG) ! stratiform precipitation flux, - ! local -REAL(KIND=JPRB) :: ZFPLSN(YDGEOMETRY%YRDIM%NPROMM,0:YDGEOMETRY%YRDIMV%NFLEVG) ! all solid stratiform precipitation flux, - ! local -REAL(KIND=JPRB) :: ZFTKE(YDGEOMETRY%YRDIM%NPROMM,0:YDGEOMETRY%YRDIMV%NFLEVG) ! TKE flux. -REAL(KIND=JPRB) :: ZFTKEI(YDGEOMETRY%YRDIM%NPROMM,0:YDGEOMETRY%YRDIMV%NFLEVG) ! TKE flux. -REAL(KIND=JPRB) :: ZFEFB1(YDGEOMETRY%YRDIM%NPROMM,0:YDGEOMETRY%YRDIMV%NFLEVG) ! EFB1 flux. -REAL(KIND=JPRB) :: ZFEFB2(YDGEOMETRY%YRDIM%NPROMM,0:YDGEOMETRY%YRDIMV%NFLEVG) ! EFB2 flux. -REAL(KIND=JPRB) :: ZFEFB3(YDGEOMETRY%YRDIM%NPROMM,0:YDGEOMETRY%YRDIMV%NFLEVG) ! EFB3 flux. - -! --- Fields of potential use for HIRLAM . -REAL(KIND=JPRB) :: ZCVGQL(YDGEOMETRY%YRDIM%NPROMM,YDGEOMETRY%YRDIMV%NFLEVG) ! local array for cloud water tendency -REAL(KIND=JPRB) :: ZCVGQI(YDGEOMETRY%YRDIM%NPROMM,YDGEOMETRY%YRDIMV%NFLEVG) ! local array for cloud ice tendency -REAL(KIND=JPRB) :: ZCVGT(YDGEOMETRY%YRDIM%NPROMM,YDGEOMETRY%YRDIMV%NFLEVG) ! local array for temperature tendency - -! --- MISCELLANEOUS PARAMETERISATIONS, 2D ARRAYS --- -REAL(KIND=JPRB) :: ZCVGQ(YDGEOMETRY%YRDIM%NPROMM,YDGEOMETRY%YRDIMV%NFLEVG) ! convergence of humidity - ! ("Kuo" condition). -REAL(KIND=JPRB) :: ZFHP(YDGEOMETRY%YRDIM%NPROMM,0:YDGEOMETRY%YRDIMV%NFLEVG) ! Total enthalpy flux - ! + sensible heat flux. -REAL(KIND=JPRB) :: ZLCVQ(YDGEOMETRY%YRDIM%NPROMA,YDGEOMETRY%YRDIMV%NFLEVG) ! limited physical contribution to - ! the diagnostic of moisture - ! convergence (remove - ! large scale precip. contrib.). -REAL(KIND=JPRB) :: ZLSCPE(YDGEOMETRY%YRDIM%NPROMM,YDGEOMETRY%YRDIMV%NFLEVG) ! cf. PLSCPE in APLPAR. -REAL(KIND=JPRB) :: ZLH(YDGEOMETRY%YRDIM%NPROMM,YDGEOMETRY%YRDIMV%NFLEVG) ! cf. PLH in APLPAR. -REAL(KIND=JPRB) :: ZQW(YDGEOMETRY%YRDIM%NPROMM,YDGEOMETRY%YRDIMV%NFLEVG) ! cf. PQW in APLPAR. -REAL(KIND=JPRB) :: ZTW(YDGEOMETRY%YRDIM%NPROMM,YDGEOMETRY%YRDIMV%NFLEVG) ! cf. PTW in APLPAR. - -REAL(KIND=JPRB) :: ZFRMQ(YDGEOMETRY%YRDIM%NPROMM,0:YDGEOMETRY%YRDIMV%NFLEVG) ! cf. MESOSPHERIC humidity flux in APLPAR. - -! --- 1D DIAGNOSTIC FIELDS, SURFACE FLUXES -REAL(KIND=JPRB) :: ZCD(YDGEOMETRY%YRDIM%NPROMM) ! cf. PCD in APLPAR. -REAL(KIND=JPRB) :: ZCDN(YDGEOMETRY%YRDIM%NPROMM) ! cf. PCDN in APLPAR. -REAL(KIND=JPRB) :: ZCH(YDGEOMETRY%YRDIM%NPROMM) ! cf. PCH in APLPAR. -REAL(KIND=JPRB) :: ZEMIS(YDGEOMETRY%YRDIM%NPROMM) ! cf. PEMIS in APLPAR. -REAL(KIND=JPRB) :: ZFEVI(YDGEOMETRY%YRDIM%NPROMM,YDMODEL%YRML_PHY_G%YRDPHY%NTSSG+1) ! cf. PFEVI in APLPAR. -REAL(KIND=JPRB) :: ZNEIJ(YDGEOMETRY%YRDIM%NPROMM) ! cf. PNEIJ in APLPAR. -REAL(KIND=JPRB) :: ZVEG(YDGEOMETRY%YRDIM%NPROMM) ! cf. PVEG in APLPAR. -REAL(KIND=JPRB) :: ZQSAT(YDGEOMETRY%YRDIM%NPROMA,YDGEOMETRY%YRDIMV%NFLEVG) ! specific humidity at saturation. -REAL(KIND=JPRB) :: ZQSATS(YDGEOMETRY%YRDIM%NPROMA) ! cf. PQSATS in APLPAR. -REAL(KIND=JPRB) :: ZQS1(YDGEOMETRY%YRDIM%NPROMM) ! cf. PQS1 in APLPARS. - -! --- DIAGNOSTIC FIELDS STATE OF SURFACE AIR --- -REAL(KIND=JPRB) :: ZC1(YDGEOMETRY%YRDIM%NPROMM) ! cf. PC1 in APLPAR. -REAL(KIND=JPRB) :: ZC2(YDGEOMETRY%YRDIM%NPROMM) ! cf. PC2 in APLPAR. -REAL(KIND=JPRB) :: ZCPS(YDGEOMETRY%YRDIM%NPROMM) ! cf. PCPS in APLPAR. -REAL(KIND=JPRB) :: ZLHS(YDGEOMETRY%YRDIM%NPROMM) ! cf. PLHS in APLPAR. -REAL(KIND=JPRB) :: ZRS(YDGEOMETRY%YRDIM%NPROMM) ! cf. PRS in APLPAR. - -! --- RADIATION COEFFICIENTS FOR SIMPLIFIED PHYSICS IN GRID-POINT --- -REAL(KIND=JPRB) :: ZAC(YDGEOMETRY%YRDIM%NPROMM,(YDGEOMETRY%YRDIMV%NFLEVG+1)*(YDGEOMETRY%YRDIMV%NFLEVG+1)) ! Curtis matrix. -REAL(KIND=JPRB) :: ZAC_HC(YDGEOMETRY%YRDIMV%NFLEVG+1,YDGEOMETRY%YRDIMV%NFLEVG+1) ! horizontally-constant field for ZAC. -REAL(KIND=JPRB) :: ZRADTC(YDGEOMETRY%YRDIM%NPROMM,YDGEOMETRY%YRDIMV%NFLEVG,YM_RADTC%NDIM) ! others than Curtis matrix. - -! --- GEOMETRY FOR RADIATION --- -REAL(KIND=JPRB) :: ZMMU0(YDGEOMETRY%YRDIM%NPROMA) ! mean solar angle (for given day for - ! simpl. rad. scheme) -REAL(KIND=JPRB) :: ZMU0(YDGEOMETRY%YRDIM%NPROMA) ! local cosine of instantaneous solar zenith - ! angle. -REAL(KIND=JPRB) :: ZMU0LU(YDGEOMETRY%YRDIM%NPROMM) ! local cosine of instantaneous lunar zenith - ! angle. -REAL(KIND=JPRB) :: ZMU0M(YDGEOMETRY%YRDIM%NPROMA) ! local cosine of averaged solar zenith angle -REAL(KIND=JPRB) :: ZMU0N(YDGEOMETRY%YRDIM%NPROMA) ! same as ZMU0 for next time step (used for YDMODEL%YRML_PHY_MF%YRARPHY%LMSE) - -! ---FOR AROME PHYSICS --- -REAL(KIND=JPRB) :: ZDT !pour cputqy_arome, a changer peut etre plus tard... -REAL(KIND=JPRB) :: ZGWT1(YDGEOMETRY%YRDIM%NPROMA,0:YDGEOMETRY%YRDIMV%NFLEVG) ! vertical velocity calculated by - ! cputqy_arome before convertion in d -REAL(KIND=JPRB) :: ZTT1(YDGEOMETRY%YRDIM%NPROMA,YDGEOMETRY%YRDIMV%NFLEVG) ! Temperature at t1 - -! ZRTT1: appropriate version of R*T at t1 for gnhgw2svd -! Version of R must be consistent with definition of vertical divergence. -REAL(KIND=JPRB) :: ZRTT1(YDGEOMETRY%YRDIM%NPROMA,YDGEOMETRY%YRDIMV%NFLEVG) - -! --- Buffers to save the initial value of --- -! --- some pseudo-historical surface buffers --- -REAL(KIND=JPRB) :: ZHV(YDGEOMETRY%YRDIM%NPROMM) -REAL(KIND=JPRB) :: ZGZ0F(YDGEOMETRY%YRDIM%NPROMM) -REAL(KIND=JPRB) :: ZGZ0HF(YDGEOMETRY%YRDIM%NPROMM) -REAL(KIND=JPRB) :: ZPBLH(YDGEOMETRY%YRDIM%NPROMM) -REAL(KIND=JPRB) :: ZFHPS(YDGEOMETRY%YRDIM%NPROMM) -REAL(KIND=JPRB) :: ZQSH (YDGEOMETRY%YRDIM%NPROMM) -REAL(KIND=JPRB) :: ZUDGRO(YDGEOMETRY%YRDIM%NPROMM) - -! --- FOR BAYRAD ALLSKY FRAMEWORK --- -REAL(KIND=JPRB) :: ZQRCONV(YDGEOMETRY%YRDIM%NPROMM,YDGEOMETRY%YRDIMV%NFLEVG) -REAL(KIND=JPRB) :: ZQSCONV(YDGEOMETRY%YRDIM%NPROMM,YDGEOMETRY%YRDIMV%NFLEVG) - -! Horizontal exchange coefficients for 3D turbulence -REAL(KIND=JPRB) :: ZKUROV_H(YDGEOMETRY%YRDIM%NPROMA,YDGEOMETRY%YRDIMV%NFLEVG),& - & ZKTROV_H(YDGEOMETRY%YRDIM%NPROMA,YDGEOMETRY%YRDIMV%NFLEVG) - -! Empty arrays for 3TL scheme (to be coded later) -!!later REAL(KIND=JPRB) :: ZDIVT9(NPROMA,NFLEVG) -!!later REAL(KIND=JPRB) :: ZUT9L(NPROMA,NFLEVG) -!!later REAL(KIND=JPRB) :: ZVT9L(NPROMA,NFLEVG) -REAL(KIND=JPRB) :: ZWT9L(YDGEOMETRY%YRDIM%NPROMA,YDGEOMETRY%YRDIMV%NFLEVG) -REAL(KIND=JPRB) :: ZWT9M(YDGEOMETRY%YRDIM%NPROMA,YDGEOMETRY%YRDIMV%NFLEVG) -REAL(KIND=JPRB) :: ZDPRECIPS(YDGEOMETRY%YRDIM%NPROMA,YDMODEL%YRML_PHY_MF%YRPHY%YRDPRECIPS%NDTPREC) -REAL(KIND=JPRB) :: ZDPRECIPS2(YDGEOMETRY%YRDIM%NPROMA,YDMODEL%YRML_PHY_MF%YRPHY%YRDPRECIPS%NDTPREC2) - -REAL(KIND=JPRB) :: ZTAUX(YDGEOMETRY%YRDIM%NPROMA,YDGEOMETRY%YRDIMV%NFLEVG),& - & ZDTAJU(YDGEOMETRY%YRDIM%NPROMA,YDGEOMETRY%YRDIMV%NFLEVG) - -REAL(KIND=JPRB) :: ZEDR(YDGEOMETRY%YRDIM%NPROMA,YDGEOMETRY%YRDIMV%NFLEVG) - -! To save Tt for NHQE model -REAL(KIND=JPRB) :: ZTT0_SAVE(YDGEOMETRY%YRDIM%NPROMNH,YDGEOMETRY%YRDIMV%NFLEVG) -REAL(KIND=JPRB) :: ZTT0L_SAVE(YDGEOMETRY%YRDIM%NPROMNH,YDGEOMETRY%YRDIMV%NFLEVG) -REAL(KIND=JPRB) :: ZTT0M_SAVE(YDGEOMETRY%YRDIM%NPROMNH,YDGEOMETRY%YRDIMV%NFLEVG) -REAL(KIND=JPRB) :: ZTT9_SAVE(YDGEOMETRY%YRDIM%NPROMNH,YDGEOMETRY%YRDIMV%NFLEVG) - -! required for INTFLEX -TYPE(TYPE_INTPROCSET) :: YLPROCSET - -REAL(KIND=JPRB), TARGET :: ZAESUL_NULL(YDGEOMETRY%YRDIM%NPROMA), ZVAVOL_NULL(YDGEOMETRY%YRDIM%NPROMA) -! SPP -REAL(KIND=JPRB) :: ZGP2DSPP(YDGEOMETRY%YRDIM%NPROMA,YSPP%N2D) - -INTEGER(KIND=JPIM) :: IMAXDRAFT - -INTEGER(KIND=JPIM) :: IPTRLIMA -INTEGER(KIND=JPIM) :: IRR ! pointer of 1st hydrometeors in ZTENDGFLR -INTEGER(KIND=JPIM) :: IPTRTKE ! pointer of TKE in ZTENDGFLR - -REAL(KIND=JPRB), POINTER :: ZT0DIV(:,:), ZT0SP(:), ZT0SPD(:,:), ZT0SPDL(:,:) -REAL(KIND=JPRB), POINTER :: ZT0SPDM(:,:), ZT0SPL(:), ZT0SPM(:), ZT0T(:,:) -REAL(KIND=JPRB), POINTER :: ZT0TL(:,:), ZT0TM(:,:), ZT0U(:,:), ZT0UL(:,:) -REAL(KIND=JPRB), POINTER :: ZT0V(:,:), ZT0VL(:,:), ZT0VOR(:,:), ZT1SP(:) -REAL(KIND=JPRB), POINTER :: ZT9DIV(:,:), ZT9SP(:), ZT9SPD(:,:), ZT9T(:,:) -REAL(KIND=JPRB), POINTER :: ZT9U(:,:), ZT9UL(:,:), ZT9V(:,:), ZT9VL(:,:) -REAL(KIND=JPRB), POINTER :: ZT9VOR(:,:) -REAL(KIND=JPRB), POINTER :: ZDIXEDR(:,:), ZSFLSFL1(:), ZSFOSFO1(:), ZVADES(:) -REAL(KIND=JPRB), POINTER :: ZVALAN(:), ZVASEA(:), ZVASOO(:), ZVASUL(:) -REAL(KIND=JPRB), POINTER :: ZVAVOL(:), ZVCVC1(:), ZVDSUND(:), ZVFALBF(:) -REAL(KIND=JPRB), POINTER :: ZVFALBSF(:), ZVFEMISF(:), ZVFGETRL(:), ZVFLSM(:) -REAL(KIND=JPRB), POINTER :: ZVFNUDM(:), ZVFVEG(:), ZVFVRLAN(:), ZVFVRLDI(:) -REAL(KIND=JPRB), POINTER :: ZVFZ0F(:), ZVFZ0RLF(:), ZVHBCCH(:), ZVHPBLH(:) -REAL(KIND=JPRB), POINTER :: ZVHQSH(:), ZVHSCCH(:), ZVHSPSH(:), ZVHTCCH(:) -REAL(KIND=JPRB), POINTER :: ZVKUDGRO(:), ZVPTPC(:), ZVPWPC(:), ZVVALV(:) -REAL(KIND=JPRB), POINTER :: ZVVARG(:), ZVVD2(:), ZVVHV(:), ZVVIVEG(:) -REAL(KIND=JPRB), POINTER :: ZVVLAI(:), ZVVRSMIN(:), ZVVSAB(:), ZVVZ0H(:) -REAL(KIND=JPRB), POINTER :: ZRRFC0(:), ZRRFC1(:), ZRRFC9(:), ZRRIC0(:) -REAL(KIND=JPRB), POINTER :: ZRRIC1(:), ZRRIC9(:), ZRRT0(:), ZRRT1(:) -REAL(KIND=JPRB), POINTER :: ZRRT9(:), ZRRW0(:), ZRRW1(:), ZRRW9(:) -REAL(KIND=JPRB), POINTER :: ZSBQ0(:,:), ZSBQ1(:,:), ZSBQ9(:,:), ZSBTL0(:,:) -REAL(KIND=JPRB), POINTER :: ZSBTL1(:,:), ZSBTL9(:,:), ZSBT0(:,:), ZSBT1(:,:) -REAL(KIND=JPRB), POINTER :: ZSBT9(:,:), ZSGA0(:), ZSGA1(:), ZSGA9(:) -REAL(KIND=JPRB), POINTER :: ZSGF0(:), ZSGF1(:), ZSGF9(:), ZSGR0(:) -REAL(KIND=JPRB), POINTER :: ZSGR1(:), ZSGR9(:), ZSGT1(:) -REAL(KIND=JPRB), POINTER :: ZMCOR(:,:), ZMRAB3C(:,:), ZMRAB3N(:,:), ZMRAB4C(:,:) -REAL(KIND=JPRB), POINTER :: ZMRAB4N(:,:), ZMRAB6C(:,:), ZMRAB6N(:,:), ZMRAT1C(:,:) -REAL(KIND=JPRB), POINTER :: ZMRAT1N(:,:), ZMRAT2C(:,:), ZMRAT2N(:,:), ZMRAT3C(:,:) -REAL(KIND=JPRB), POINTER :: ZMRAT3N(:,:), ZMRAT4C(:,:), ZMRAT4N(:,:), ZMRAT5C(:,:) -REAL(KIND=JPRB), POINTER :: ZMRAT5N(:,:) -REAL(KIND=JPRB), POINTER :: ZPA1(:,:), ZP1CHEM(:,:), ZP1CHEM9(:,:), ZPCPF(:,:) -REAL(KIND=JPRB), POINTER :: ZPCPF1(:,:), ZPCVGQ(:,:), ZPCVGQL(:,:), ZPCVGQM(:,:) -REAL(KIND=JPRB), POINTER :: ZPCVV(:,:), ZPCVV1(:,:), ZPCVV9(:,:), ZPDAL(:,:) -REAL(KIND=JPRB), POINTER :: ZPDAL1(:,:), ZPDOM(:,:), ZPDOM1(:,:), ZPEFB1(:,:) -REAL(KIND=JPRB), POINTER :: ZPTENDEFB11(:,:), ZPEFB19(:,:), ZPEFB2(:,:), ZPTENDEFB21(:,:) -REAL(KIND=JPRB), POINTER :: ZPEFB29(:,:), ZPEFB3(:,:), ZPTENDEFB31(:,:), ZPEFB39(:,:) -REAL(KIND=JPRB), POINTER :: ZP1EXT(:,:), ZP1EXT9(:,:), ZP1EZDIAG(:,:), ZPFQTUR(:,:) -REAL(KIND=JPRB), POINTER :: ZPFQTUR1(:,:), ZPFSTUR(:,:), ZPFSTUR1(:,:), ZPG(:,:) -REAL(KIND=JPRB), POINTER :: ZPTENDG1(:,:), ZPG9(:,:), ZPH(:,:), ZPH9(:,:) -REAL(KIND=JPRB), POINTER :: ZPICONV(:,:), ZPTENDICONV1(:,:), ZPI(:,:), ZPTENDI1(:,:) -REAL(KIND=JPRB), POINTER :: ZPI9(:,:), ZPIRAD1(:,:), ZPLCONV(:,:), ZPTENDLCONV1(:,:) -REAL(KIND=JPRB), POINTER :: ZP1LIMA(:,:), ZP1LIMA9(:,:), ZPL(:,:), ZPTENDL1(:,:) -REAL(KIND=JPRB), POINTER :: ZPL9(:,:), ZPLRAD1(:,:), ZPMXL(:,:), ZPMXL1(:,:) -REAL(KIND=JPRB), POINTER :: ZP1NOGW(:,:), ZP1NOGW9(:,:), ZP2NOGW(:,:), ZP2NOGW9(:,:) -REAL(KIND=JPRB), POINTER :: ZPO3(:,:), ZPO31(:,:), ZPO39(:,:), ZPQ(:,:) -REAL(KIND=JPRB), POINTER :: ZPTENDQ1(:,:), ZPQ9(:,:), ZPQL(:,:), ZPQM(:,:) -REAL(KIND=JPRB), POINTER :: ZPRCONV(:,:), ZPRCONV1(:,:), ZPTENDRCONV1(:,:), ZPRKTH(:,:) -REAL(KIND=JPRB), POINTER :: ZPRKTH1(:,:), ZPRKTQC(:,:), ZPRKTQC1(:,:), ZPRKTQV(:,:) -REAL(KIND=JPRB), POINTER :: ZPRKTQV1(:,:), ZPR(:,:), ZPTENDR1(:,:), ZPR9(:,:) -REAL(KIND=JPRB), POINTER :: ZPSCONV(:,:), ZPSCONV1(:,:), ZPTENDSCONV1(:,:), ZPSHTUR(:,:) -REAL(KIND=JPRB), POINTER :: ZPSHTUR1(:,:), ZPS(:,:), ZPTENDS1(:,:), ZPS9(:,:) -REAL(KIND=JPRB), POINTER :: ZPSPF(:,:), ZPSPF1(:,:), ZPSRC(:,:), ZPSRC1(:,:) -REAL(KIND=JPRB), POINTER :: ZPSRC9(:,:), ZPTKE(:,:), ZPTENDTKE1(:,:), ZPTKE9(:,:) -REAL(KIND=JPRB), POINTER :: ZPTTE(:,:), ZPTTE1(:,:), ZPUAL(:,:), ZPUAL1(:,:) -REAL(KIND=JPRB), POINTER :: ZPUEN(:,:), ZPUEN1(:,:), ZPUNEBH(:,:), ZPUNEBH1(:,:) -REAL(KIND=JPRB), POINTER :: ZPUOM(:,:), ZPUOM1(:,:) - -REAL(KIND=JPRB) :: ZHOOK_HANDLE - -! ------------------------------------------------------------------ - -#include "abor1.intfb.h" -#include "apl_arome.intfb.h" -#include "aplpar.intfb.h" -#include "aplpar2intflex.intfb.h" -#include "aplpars.intfb.h" -#include "aplpassh.intfb.h" -#include "cpchet.intfb.h" -#include "cpmvvps.intfb.h" -#include "cpnudg.intfb.h" -#include "cpozo.intfb.h" -#include "cpphinp.intfb.h" -#include "cppsolan.intfb.h" -#include "cpqsol.intfb.h" -#include "cptend_new.intfb.h" -#include "cptend_flex.intfb.h" -#include "cptends.intfb.h" -#include "cptendsm.intfb.h" -#include "cputqy_arome.intfb.h" -#include "cputqy.intfb.h" -#include "cputqys.intfb.h" -#include "cpwts.intfb.h" -#include "cp_ptrslb1.intfb.h" -#include "gnhgw2svdarome.intfb.h" -#include "initaplpar.intfb.h" -#include "profilechet.intfb.h" -#include "rdradcoef.intfb.h" -#include "writephysio.intfb.h" -#include "wrphtrajm.intfb.h" -#include "wrradcoef.intfb.h" -#include "acajucv.intfb.h" -#include "gnhqe_conv_tempe.intfb.h" - -! ------------------------------------------------------------------ -IF (LHOOK) CALL DR_HOOK('MF_PHYS',0,ZHOOK_HANDLE) -ASSOCIATE(YDDIM=>YDGEOMETRY%YRDIM,YDDIMV=>YDGEOMETRY%YRDIMV,YDGEM=>YDGEOMETRY%YRGEM, YDVAB=>YDGEOMETRY%YRVAB, & - & YDCSGEOM=>YDGEOMETRY%YRCSGEOM(KIBL), YDGSGEOM=>YDGEOMETRY%YRGSGEOM(KIBL), YDOROG=>YDGEOMETRY%YROROG(KIBL), & - & YDPHY=>YDMODEL%YRML_PHY_MF%YRPHY,YDPTRSLB1=>YDMODEL%YRML_DYN%YRPTRSLB1,YDPTRSLB2=>YDMODEL%YRML_DYN%YRPTRSLB2, & - & YDTOPH=>YDMODEL%YRML_PHY_MF%YRTOPH,YDSIMPHL=>YDMODEL%YRML_PHY_MF%YRSIMPHL,YDRIP=>YDMODEL%YRML_GCONF%YRRIP, & - & YDMDDH=>YDMODEL%YRML_DIAG%YRMDDH,YDRCOEF=>YDMODEL%YRML_PHY_RAD%YRRCOEF, & - & YDARPHY=>YDMODEL%YRML_PHY_MF%YRARPHY,YDDPHY=>YDMODEL%YRML_PHY_G%YRDPHY,YDLDDH=>YDMODEL%YRML_DIAG%YRLDDH, & - & YDPHY2=>YDMODEL%YRML_PHY_MF%YRPHY2,YGFL=>YDMODEL%YRML_GCONF%YGFL,YDEPHY=>YDMODEL%YRML_PHY_EC%YREPHY, & - & YDPARAR=>YDMODEL%YRML_PHY_MF%YRPARAR, YDPRECIPS=>YDMODEL%YRML_PHY_MF%YRPHY%YRDPRECIPS, & - & YDSTOPH=>YDMODEL%YRML_PHY_STOCH%YRSTOPH) - -ASSOCIATE(MVTS=>YDPARAR%MVTS, NRR=>YDPARAR%NRR, NGPAR=>YDPARAR%NGPAR, CMF_UPDRAFT=>YDPARAR%CMF_UPDRAFT,& - & TSPHY=>YDPHY2%TSPHY, & - & NPROMA=>YDDIM%NPROMA, NPROMM=>YDDIM%NPROMM, & - & NTSSG=>YDDPHY%NTSSG, NVCLIS=>YDDPHY%NVCLIS, & - & YT1=>YDGMV%YT1, YT0=>YDGMV%YT0, YT9=>YDGMV%YT9, & - & LMDUST=>YDARPHY%LMDUST, LMPA=>YDARPHY%LMPA, LMSE=>YDARPHY%LMSE, LMFSHAL=>YDARPHY%LMFSHAL,& - & YI=>YGFL%YI, YH=>YGFL%YH, YEZDIAG=>YGFL%YEZDIAG, YL=>YGFL%YL, & - & YEXT=>YGFL%YEXT, YA=>YGFL%YA, YSRC=>YGFL%YSRC, YSPF=>YGFL%YSPF, & - & YUEN=>YGFL%YUEN, YG=>YGFL%YG, YCVGQ=>YGFL%YCVGQ, YMXL=>YGFL%YMXL, & - & YQ=>YGFL%YQ, YCPF=>YGFL%YCPF, YR=>YGFL%YR, YSCONV=>YGFL%YSCONV, YS=>YGFL%YS, & - & YEFB3=>YGFL%YEFB3, YEFB2=>YGFL%YEFB2, YEFB1=>YGFL%YEFB1, YRKTH=>YGFL%YRKTH, & - & YDOM=>YGFL%YDOM, YFQTUR=>YGFL%YFQTUR, YFSTUR=>YGFL%YFSTUR, & - & YUNEBH=>YGFL%YUNEBH, YUOM=>YGFL%YUOM, YCVV=>YGFL%YCVV, YO3=>YGFL%YO3, YNOGW=>YGFL%YNOGW, & - & LCHEM_ARPCLIM=>YDMODEL%YRML_CHEM%YRCHEM%LCHEM_ARPCLIM,& - & YCHEM=>YGFL%YCHEM, NGFL_EXT=>YGFL%NGFL_EXT, YRKTQC=>YGFL%YRKTQC, YTKE=>YGFL%YTKE, & - & YIRAD=>YGFL%YIRAD, YDAL=>YGFL%YDAL, YCOMP=>YGFL%YCOMP, & - & NGFL_EZDIAG=>YGFL%NGFL_EZDIAG, YRKTQV=>YGFL%YRKTQV, YUAL=>YGFL%YUAL, & - & YTTE=>YGFL%YTTE, YLCONV=>YGFL%YLCONV, YSHTUR=>YGFL%YSHTUR, & - & YRCONV=>YGFL%YRCONV, YICONV=>YGFL%YICONV, YLRAD=>YGFL%YLRAD, & - & YSP_SBD=>YDSURF%YSP_SBD, YSD_SFLD=>YDSURF%YSD_SFLD, YSD_VDD=>YDSURF%YSD_VDD, & - & YSP_RR=>YDSURF%YSP_RR, YSD_VFD=>YDSURF%YSD_VFD, YSD_VP=>YDSURF%YSD_VP, & - & YSP_RRD=>YDSURF%YSP_RRD, YSD_VC=>YDSURF%YSD_VC, YSD_VA=>YDSURF%YSD_VA, & - & YSD_VHD=>YDSURF%YSD_VHD, YSD_VKD=>YDSURF%YSD_VKD, & - & YSD_VF=>YDSURF%YSD_VF, YSD_VD=>YDSURF%YSD_VD, YSD_VH=>YDSURF%YSD_VH, & - & YSD_VK=>YDSURF%YSD_VK, YSD_SFOD=>YDSURF%YSD_SFOD, YSP_SG=>YDSURF%YSP_SG, & - & YSP_SB=>YDSURF%YSP_SB, YSP_SGD=>YDSURF%YSP_SGD, YSD_DI=>YDSURF%YSD_DI, & - & YSD_VV=>YDSURF%YSD_VV, YSD_VCD=>YDSURF%YSD_VCD, YSD_SFO=>YDSURF%YSD_SFO, & - & YSD_VVD=>YDSURF%YSD_VVD, YSD_SFL=>YDSURF%YSD_SFL, YSD_VPD=>YDSURF%YSD_VPD, & - & YSD_VAD=>YDSURF%YSD_VAD, YSD_XP=>YDSURF%YSD_XP,YSD_XP2=>YDSURF%YSD_XP2,& - & NFLEVG=>YDDIMV%NFLEVG, NFLSA=>YDDIMV%NFLSA, NFLSUL=>YDDIMV%NFLSUL, & - & LTRAJPS=>YDSIMPHL%LTRAJPS, LSIMPH=>YDSIMPHL%LSIMPH, LRAYSP=>YDSIMPHL%LRAYSP, & - & LNEBR=>YDPHY%LNEBR, LCDDPRO=>YDPHY%LCDDPRO, LNEBN=>YDPHY%LNEBN, & - & LMPHYS=>YDPHY%LMPHYS, NSORAYFR=>YDPHY%NSORAYFR, & - & LCVCSD=>YDPHY%LCVCSD, LCVPRO=>YDPHY%LCVPRO, LNSDO=>YDPHY%LNSDO,& - & LSTRAPRO=>YDPHY%LSTRAPRO, LUDEVOL=>YDPHY%LUDEVOL, LPTKE=>YDPHY%LPTKE, & - & NDPSFI=>YDPHY%NDPSFI, LOZONE=>YDPHY%LOZONE, L3MT=>YDPHY%L3MT, & - & LGPCMT=>YDPHY%LGPCMT, LAJUCV=>YDPHY%LAJUCV, LCVPGY=>YDPHY%LCVPGY, & - & LRRGUST=>YDPHY%LRRGUST, LEDR=>YDPHY%LEDR, & - & NTAJUC=>YDTOPH%NTAJUC, NTPLUI=>YDTOPH%NTPLUI, NDIM=>YGFL%NDIM, & - & NDIM1=>YGFL%NDIM1, NUMFLDS=>YGFL%NUMFLDS, LAGPHY=>YDEPHY%LAGPHY, & - & LEPHYS=>YDEPHY%LEPHYS, NDIMGMV=>YDGMV%NDIMGMV, & - & LDPRECIPS=>YDPHY%LDPRECIPS, LDPRECIPS2=>YDPHY%LDPRECIPS2, & - & NDTPREC=>YDPRECIPS%NDTPREC, NDTPREC2=>YDPRECIPS%NDTPREC2, & - & NDTPRECCUR=>YDPRECIPS%NDTPRECCUR, NDTPRECCUR2=>YDPRECIPS%NDTPRECCUR2,& - & NDIMGMVS=>YDGMV%NDIMGMVS, & - & LSDDH=>YDLDDH%LSDDH, & - & HDSF=>YDMDDH%HDSF, & - & MSLB1SP9=>YDPTRSLB1%MSLB1SP9, & - & NFLDSLB1=>YDPTRSLB1%NFLDSLB1, & - & MSLB2KAPPAH=>YDPTRSLB2%MSLB2KAPPAH, & - & MSLB2KAPPAM=>YDPTRSLB2%MSLB2KAPPAM, & - & NFLDSLB2=>YDPTRSLB2%NFLDSLB2, & - & LRCOEF=>YDRCOEF%LRCOEF, & - & LTLADDIA=>YDRCOEF%LTLADDIA, & - & NG3SR=>YDRCOEF%NG3SR, & - & NSTOP=>YDRIP%NSTOP, NLIMA=>YGFL%NLIMA, YLIMA=>YGFL%YLIMA) - -CALL SC2PRG(YA%MP1 ,PGFLT1 ,ZPA1) -CALL SC2PRG(1,YCHEM(:)%MP,PGFL ,ZP1CHEM) -CALL SC2PRG(1,YCHEM(:)%MP9,PGFL ,ZP1CHEM9) -CALL SC2PRG(YCPF%MP ,PGFL ,ZPCPF) -CALL SC2PRG(YCPF%MP1 ,PGFLT1 ,ZPCPF1) -CALL SC2PRG(YCVGQ%MP ,PGFL ,ZPCVGQ) -CALL SC2PRG(YCVGQ%MPL ,PGFL ,ZPCVGQL) -CALL SC2PRG(YCVGQ%MPM ,PGFL ,ZPCVGQM) -CALL SC2PRG(YCVV%MP ,PGFL ,ZPCVV) -CALL SC2PRG(YCVV%MP1 ,PGFLT1 ,ZPCVV1) -CALL SC2PRG(YCVV%MP9 ,PGFL ,ZPCVV9) -CALL SC2PRG(YDAL%MP ,PGFL ,ZPDAL) -CALL SC2PRG(YDAL%MP1 ,PGFLT1 ,ZPDAL1) -CALL SC2PRG(YDOM%MP ,PGFL ,ZPDOM) -CALL SC2PRG(YDOM%MP1 ,PGFLT1 ,ZPDOM1) -CALL SC2PRG(YEFB1%MP ,PGFL ,ZPEFB1) -CALL SC2PRG(YEFB1%MP1 ,ZTENDGFL ,ZPTENDEFB11) -CALL SC2PRG(YEFB1%MP9 ,PGFL ,ZPEFB19) -CALL SC2PRG(YEFB2%MP ,PGFL ,ZPEFB2) -CALL SC2PRG(YEFB2%MP1 ,ZTENDGFL ,ZPTENDEFB21) -CALL SC2PRG(YEFB2%MP9 ,PGFL ,ZPEFB29) -CALL SC2PRG(YEFB3%MP ,PGFL ,ZPEFB3) -CALL SC2PRG(YEFB3%MP1 ,ZTENDGFL ,ZPTENDEFB31) -CALL SC2PRG(YEFB3%MP9 ,PGFL ,ZPEFB39) -CALL SC2PRG(1,YEXT(:)%MP,PGFL ,ZP1EXT) -CALL SC2PRG(1,YEXT(:)%MP9,PGFL ,ZP1EXT9) -CALL SC2PRG(1,YEZDIAG(:)%MP,PGFL,ZP1EZDIAG) -CALL SC2PRG(YFQTUR%MP ,PGFL ,ZPFQTUR) -CALL SC2PRG(YFQTUR%MP1,PGFLT1 ,ZPFQTUR1) -CALL SC2PRG(YFSTUR%MP ,PGFL ,ZPFSTUR) -CALL SC2PRG(YFSTUR%MP1,PGFLT1 ,ZPFSTUR1) -CALL SC2PRG(YG%MP ,PGFL ,ZPG) -CALL SC2PRG(YG%MP1 ,ZTENDGFL ,ZPTENDG1) -CALL SC2PRG(YG%MP9 ,PGFL ,ZPG9) -CALL SC2PRG(YH%MP ,PGFL ,ZPH) -CALL SC2PRG(YH%MP9 ,PGFL ,ZPH9) -CALL SC2PRG(YICONV%MP ,PGFL ,ZPICONV) -CALL SC2PRG(YICONV%MP1,ZTENDGFL ,ZPTENDICONV1) -CALL SC2PRG(YI%MP ,PGFL ,ZPI) -CALL SC2PRG(YI%MP1 ,ZTENDGFL ,ZPTENDI1) -CALL SC2PRG(YI%MP9 ,PGFL ,ZPI9) -CALL SC2PRG(YIRAD%MP1 ,PGFLT1 ,ZPIRAD1) -CALL SC2PRG(YLCONV%MP ,PGFL ,ZPLCONV) -CALL SC2PRG(YLCONV%MP1,ZTENDGFL ,ZPTENDLCONV1) -CALL SC2PRG(1,YLIMA(:)%MP,PGFL ,ZP1LIMA) -CALL SC2PRG(1,YLIMA(:)%MP9,PGFL ,ZP1LIMA9) -CALL SC2PRG(YL%MP ,PGFL ,ZPL) -CALL SC2PRG(YL%MP1 ,ZTENDGFL ,ZPTENDL1) -CALL SC2PRG(YL%MP9 ,PGFL ,ZPL9) -CALL SC2PRG(YLRAD%MP1 ,PGFLT1 ,ZPLRAD1) -CALL SC2PRG(YMXL%MP ,PGFL ,ZPMXL) -CALL SC2PRG(YMXL%MP1 ,PGFLT1 ,ZPMXL1) -CALL SC2PRG(1,YNOGW(:)%MP,PGFL ,ZP1NOGW) -CALL SC2PRG(1,YNOGW(:)%MP9,PGFL ,ZP1NOGW9) -CALL SC2PRG(2,YNOGW(:)%MP,PGFL ,ZP2NOGW) -CALL SC2PRG(2,YNOGW(:)%MP9,PGFL ,ZP2NOGW9) -CALL SC2PRG(YO3%MP ,PGFL ,ZPO3) -CALL SC2PRG(YO3%MP1 ,PGFLT1 ,ZPO31) -CALL SC2PRG(YO3%MP9 ,PGFL ,ZPO39) -CALL SC2PRG(YQ%MP ,PGFL ,ZPQ) -CALL SC2PRG(YQ%MP1 ,ZTENDGFL ,ZPTENDQ1) -CALL SC2PRG(YQ%MP9 ,PGFL ,ZPQ9) -CALL SC2PRG(YQ%MPL ,PGFL ,ZPQL) -CALL SC2PRG(YQ%MPM ,PGFL ,ZPQM) -CALL SC2PRG(YRCONV%MP ,PGFL ,ZPRCONV) -CALL SC2PRG(YRCONV%MP1,PGFLT1 ,ZPRCONV1) -CALL SC2PRG(YRCONV%MP1,ZTENDGFL ,ZPTENDRCONV1) -CALL SC2PRG(YRKTH%MP ,PGFL ,ZPRKTH) -CALL SC2PRG(YRKTH%MP1 ,PGFLT1 ,ZPRKTH1) -CALL SC2PRG(YRKTQC%MP ,PGFL ,ZPRKTQC) -CALL SC2PRG(YRKTQC%MP1,PGFLT1 ,ZPRKTQC1) -CALL SC2PRG(YRKTQV%MP ,PGFL ,ZPRKTQV) -CALL SC2PRG(YRKTQV%MP1,PGFLT1 ,ZPRKTQV1) -CALL SC2PRG(YR%MP ,PGFL ,ZPR) -CALL SC2PRG(YR%MP1 ,ZTENDGFL ,ZPTENDR1) -CALL SC2PRG(YR%MP9 ,PGFL ,ZPR9) -CALL SC2PRG(YSCONV%MP ,PGFL ,ZPSCONV) -CALL SC2PRG(YSCONV%MP1,PGFLT1 ,ZPSCONV1) -CALL SC2PRG(YSCONV%MP1,ZTENDGFL ,ZPTENDSCONV1) -CALL SC2PRG(YSHTUR%MP ,PGFL ,ZPSHTUR) -CALL SC2PRG(YSHTUR%MP1,PGFLT1 ,ZPSHTUR1) -CALL SC2PRG(YS%MP ,PGFL ,ZPS) -CALL SC2PRG(YS%MP1 ,ZTENDGFL ,ZPTENDS1) -CALL SC2PRG(YS%MP9 ,PGFL ,ZPS9) -CALL SC2PRG(YSPF%MP ,PGFL ,ZPSPF) -CALL SC2PRG(YSPF%MP1 ,PGFLT1 ,ZPSPF1) -CALL SC2PRG(YSRC%MP ,PGFL ,ZPSRC) -CALL SC2PRG(YSRC%MP1 ,PGFLT1 ,ZPSRC1) -CALL SC2PRG(YSRC%MP9 ,PGFL ,ZPSRC9) -CALL SC2PRG(YTKE%MP ,PGFL ,ZPTKE) -CALL SC2PRG(YTKE%MP1 ,ZTENDGFL ,ZPTENDTKE1) -CALL SC2PRG(YTKE%MP9 ,PGFL ,ZPTKE9) -CALL SC2PRG(YTTE%MP ,PGFL ,ZPTTE) -CALL SC2PRG(YTTE%MP1 ,PGFLT1 ,ZPTTE1) -CALL SC2PRG(YUAL%MP ,PGFL ,ZPUAL) -CALL SC2PRG(YUAL%MP1 ,PGFLT1 ,ZPUAL1) -CALL SC2PRG(YUEN%MP ,PGFL ,ZPUEN) -CALL SC2PRG(YUEN%MP1 ,PGFLT1 ,ZPUEN1) -CALL SC2PRG(YUNEBH%MP ,PGFL ,ZPUNEBH) -CALL SC2PRG(YUNEBH%MP1,PGFLT1 ,ZPUNEBH1) -CALL SC2PRG(YUOM%MP ,PGFL ,ZPUOM) -CALL SC2PRG(YUOM%MP1 ,PGFLT1 ,ZPUOM1) -CALL SC2PRG(YM_RADTC%MCOR,ZRADTC ,ZMCOR) -CALL SC2PRG(YM_RADTC%MRAB3C,ZRADTC ,ZMRAB3C) -CALL SC2PRG(YM_RADTC%MRAB3N,ZRADTC ,ZMRAB3N) -CALL SC2PRG(YM_RADTC%MRAB4C,ZRADTC ,ZMRAB4C) -CALL SC2PRG(YM_RADTC%MRAB4N,ZRADTC ,ZMRAB4N) -CALL SC2PRG(YM_RADTC%MRAB6C,ZRADTC ,ZMRAB6C) -CALL SC2PRG(YM_RADTC%MRAB6N,ZRADTC ,ZMRAB6N) -CALL SC2PRG(YM_RADTC%MRAT1C,ZRADTC ,ZMRAT1C) -CALL SC2PRG(YM_RADTC%MRAT1N,ZRADTC ,ZMRAT1N) -CALL SC2PRG(YM_RADTC%MRAT2C,ZRADTC ,ZMRAT2C) -CALL SC2PRG(YM_RADTC%MRAT2N,ZRADTC ,ZMRAT2N) -CALL SC2PRG(YM_RADTC%MRAT3C,ZRADTC ,ZMRAT3C) -CALL SC2PRG(YM_RADTC%MRAT3N,ZRADTC ,ZMRAT3N) -CALL SC2PRG(YM_RADTC%MRAT4C,ZRADTC ,ZMRAT4C) -CALL SC2PRG(YM_RADTC%MRAT4N,ZRADTC ,ZMRAT4N) -CALL SC2PRG(YM_RADTC%MRAT5C,ZRADTC ,ZMRAT5C) -CALL SC2PRG(YM_RADTC%MRAT5N,ZRADTC ,ZMRAT5N) -CALL SC2PRG(YSD_DI%YXEDR%MP,PSD_DI ,ZDIXEDR) -CALL SC2PRG(1,YSD_SFL%YSFL(:)%MP,PSD_SFL ,ZSFLSFL1) -CALL SC2PRG(1,YSD_SFO%YSFO(:)%MP,PSD_SFO ,ZSFOSFO1) -CALL SC2PRG(YSD_VA%YDES%MP,PSD_VA ,ZVADES) -CALL SC2PRG(YSD_VA%YLAN%MP,PSD_VA ,ZVALAN) -CALL SC2PRG(YSD_VA%YSEA%MP,PSD_VA ,ZVASEA) -CALL SC2PRG(YSD_VA%YSOO%MP,PSD_VA ,ZVASOO) -CALL SC2PRG(YSD_VA%YSUL%MP,PSD_VA ,ZVASUL) -CALL SC2PRG(YSD_VA%YVOL%MP,PSD_VA ,ZVAVOL) -CALL SC2PRG(1,YSD_VC%YVC(:)%MP,PSD_VC,ZVCVC1) -CALL SC2PRG(YSD_VD%YSUND%MP,PSD_VD ,ZVDSUND) -CALL SC2PRG(YSD_VF%YALBF%MP,PSD_VF ,ZVFALBF) -CALL SC2PRG(YSD_VF%YALBSF%MP,PSD_VF,ZVFALBSF) -CALL SC2PRG(YSD_VF%YEMISF%MP,PSD_VF,ZVFEMISF) -CALL SC2PRG(YSD_VF%YGETRL%MP,PSD_VF,ZVFGETRL) -CALL SC2PRG(YSD_VF%YLSM%MP,PSD_VF ,ZVFLSM) -CALL SC2PRG(YSD_VF%YNUDM%MP,PSD_VF ,ZVFNUDM) -CALL SC2PRG(YSD_VF%YVEG%MP,PSD_VF ,ZVFVEG) -CALL SC2PRG(YSD_VF%YVRLAN%MP,PSD_VF,ZVFVRLAN) -CALL SC2PRG(YSD_VF%YVRLDI%MP,PSD_VF,ZVFVRLDI) -CALL SC2PRG(YSD_VF%YZ0F%MP,PSD_VF ,ZVFZ0F) -CALL SC2PRG(YSD_VF%YZ0RLF%MP,PSD_VF,ZVFZ0RLF) -CALL SC2PRG(YSD_VH%YBCCH%MP,PSD_VH ,ZVHBCCH) -CALL SC2PRG(YSD_VH%YPBLH%MP,PSD_VH ,ZVHPBLH) -CALL SC2PRG(YSD_VH%YQSH%MP,PSD_VH ,ZVHQSH) -CALL SC2PRG(YSD_VH%YSCCH%MP,PSD_VH ,ZVHSCCH) -CALL SC2PRG(YSD_VH%YSPSH%MP,PSD_VH ,ZVHSPSH) -CALL SC2PRG(YSD_VH%YTCCH%MP,PSD_VH ,ZVHTCCH) -CALL SC2PRG(YSD_VK%YUDGRO%MP,PSD_VK,ZVKUDGRO) -CALL SC2PRG(YSD_VP%YTPC%MP,PSD_VP ,ZVPTPC) -CALL SC2PRG(YSD_VP%YWPC%MP,PSD_VP ,ZVPWPC) -CALL SC2PRG(YSD_VV%YALV%MP,PSD_VV ,ZVVALV) -CALL SC2PRG(YSD_VV%YARG%MP,PSD_VV ,ZVVARG) -CALL SC2PRG(YSD_VV%YD2%MP,PSD_VV ,ZVVD2) -CALL SC2PRG(YSD_VV%YHV%MP,PSD_VV ,ZVVHV) -CALL SC2PRG(YSD_VV%YIVEG%MP,PSD_VV ,ZVVIVEG) -CALL SC2PRG(YSD_VV%YLAI%MP,PSD_VV ,ZVVLAI) -CALL SC2PRG(YSD_VV%YRSMIN%MP,PSD_VV,ZVVRSMIN) -CALL SC2PRG(YSD_VV%YSAB%MP,PSD_VV ,ZVVSAB) -CALL SC2PRG(YSD_VV%YZ0H%MP,PSD_VV ,ZVVZ0H) -CALL SC2PRG(YSP_RR%YFC%MP0,PSP_RR ,ZRRFC0) -CALL SC2PRG(YSP_RR%YFC%MP1,PSP_RR ,ZRRFC1) -CALL SC2PRG(YSP_RR%YFC%MP9,PSP_RR ,ZRRFC9) -CALL SC2PRG(YSP_RR%YIC%MP0,PSP_RR ,ZRRIC0) -CALL SC2PRG(YSP_RR%YIC%MP1,PSP_RR ,ZRRIC1) -CALL SC2PRG(YSP_RR%YIC%MP9,PSP_RR ,ZRRIC9) -CALL SC2PRG(YSP_RR%YT%MP0,PSP_RR ,ZRRT0) -CALL SC2PRG(YSP_RR%YT%MP1,PSP_RR ,ZRRT1) -CALL SC2PRG(YSP_RR%YT%MP9,PSP_RR ,ZRRT9) -CALL SC2PRG(YSP_RR%YW%MP0,PSP_RR ,ZRRW0) -CALL SC2PRG(YSP_RR%YW%MP1,PSP_RR ,ZRRW1) -CALL SC2PRG(YSP_RR%YW%MP9,PSP_RR ,ZRRW9) -CALL SC2PRG(YSP_SB%YQ%MP0,PSP_SB ,ZSBQ0) -CALL SC2PRG(YSP_SB%YQ%MP1,PSP_SB ,ZSBQ1) -CALL SC2PRG(YSP_SB%YQ%MP9,PSP_SB ,ZSBQ9) -CALL SC2PRG(YSP_SB%YTL%MP0,PSP_SB ,ZSBTL0) -CALL SC2PRG(YSP_SB%YTL%MP1,PSP_SB ,ZSBTL1) -CALL SC2PRG(YSP_SB%YTL%MP9,PSP_SB ,ZSBTL9) -CALL SC2PRG(YSP_SB%YT%MP0,PSP_SB ,ZSBT0) -CALL SC2PRG(YSP_SB%YT%MP1,PSP_SB ,ZSBT1) -CALL SC2PRG(YSP_SB%YT%MP9,PSP_SB ,ZSBT9) -CALL SC2PRG(YSP_SG%YA%MP0,PSP_SG ,ZSGA0) -CALL SC2PRG(YSP_SG%YA%MP1,PSP_SG ,ZSGA1) -CALL SC2PRG(YSP_SG%YA%MP9,PSP_SG ,ZSGA9) -CALL SC2PRG(YSP_SG%YF%MP0,PSP_SG ,ZSGF0) -CALL SC2PRG(YSP_SG%YF%MP1,PSP_SG ,ZSGF1) -CALL SC2PRG(YSP_SG%YF%MP9,PSP_SG ,ZSGF9) -CALL SC2PRG(YSP_SG%YR%MP0,PSP_SG ,ZSGR0) -CALL SC2PRG(YSP_SG%YR%MP1,PSP_SG ,ZSGR1) -CALL SC2PRG(YSP_SG%YR%MP9,PSP_SG ,ZSGR9) -CALL SC2PRG(YSP_SG%YT%MP1,PSP_SG ,ZSGT1) -CALL SC2PRG(YT0%MDIV ,PGMV ,ZT0DIV) -CALL SC2PRG(YT0%MSP ,PGMVS ,ZT0SP) -CALL SC2PRG(YT0%MSPD ,PGMV ,ZT0SPD) -CALL SC2PRG(YT0%MSPDL ,PGMV ,ZT0SPDL) -CALL SC2PRG(YT0%MSPDM ,PGMV ,ZT0SPDM) -CALL SC2PRG(YT0%MSPL ,PGMVS ,ZT0SPL) -CALL SC2PRG(YT0%MSPM ,PGMVS ,ZT0SPM) -CALL SC2PRG(YT0%MT ,PGMV ,ZT0T) -CALL SC2PRG(YT0%MTL ,PGMV ,ZT0TL) -CALL SC2PRG(YT0%MTM ,PGMV ,ZT0TM) -CALL SC2PRG(YT0%MU ,PGMV ,ZT0U) -CALL SC2PRG(YT0%MUL ,PGMV ,ZT0UL) -CALL SC2PRG(YT0%MV ,PGMV ,ZT0V) -CALL SC2PRG(YT0%MVL ,PGMV ,ZT0VL) -CALL SC2PRG(YT0%MVOR ,PGMV ,ZT0VOR) -CALL SC2PRG(YT1%MSP ,PGMVT1S ,ZT1SP) -CALL SC2PRG(YT9%MDIV ,PGMV ,ZT9DIV) -CALL SC2PRG(YT9%MSP ,PGMVS ,ZT9SP) -CALL SC2PRG(YT9%MSPD ,PGMV ,ZT9SPD) -CALL SC2PRG(YT9%MT ,PGMV ,ZT9T) -CALL SC2PRG(YT9%MU ,PGMV ,ZT9U) -CALL SC2PRG(YT9%MUL ,PGMV ,ZT9UL) -CALL SC2PRG(YT9%MV ,PGMV ,ZT9V) -CALL SC2PRG(YT9%MVL ,PGMV ,ZT9VL) -CALL SC2PRG(YT9%MVOR ,PGMV ,ZT9VOR) -! ------------------------------------------------------------------ - -! 0. constructor for procset -IF (LINTFLEX) YLPROCSET=NEWINTPROCSET() - -! 1. Preliminary calculations necessary -! for all types of physics. -! ------------------------------------ - -IF (LSLAG) CALL CP_PTRSLB1(YDMODEL%YRML_DYN%YRDYN,YDPTRSLB1,ISLB1U9,ISLB1V9,ISLB1T9,ISLB1VD9,ISLB1GFL9) - -IBLK=(KSTGLO-1)/NPROMA+1 -INSTEP_DEB=1 -INSTEP_FIN=1 - -! initialisation for surfex if XFU -LLXFUMSE=.FALSE. -IF (LDCONFX) THEN - LLXFUMSE=.TRUE. -ENDIF - -! SPP -IF ( YSPP_CONFIG%LSPP ) THEN - DO JROF=1,YSPP%N2D - ZGP2DSPP(:,JROF) = YSPP%GP_ARP(JROF)%GP2D(:,1,KIBL) - ENDDO -ENDIF - -! Complete physics is called. -LLDIAB=(LMPHYS.OR.LEPHYS).AND.(.NOT.LAGPHY) - -! In the NHQE model, MF_PHYS enters with Tt and grad(Tt), where Tt = T * exp(-(R/cp) log(pre/prehyd)). -! But calculations of MF_PHYS must use T and grad(T). -! So we do a conversion Tt -> T. -IF (LNHQE) THEN - ! Valid for NPDVAR=2 only. - ! At instant t (with the derivatives): - DO JLEV=1,NFLEVG - DO JROF=KST,KEND - ZTT0_SAVE(JROF,JLEV)=ZT0T(JROF,JLEV) - ZTT0L_SAVE(JROF,JLEV)=ZT0TL(JROF,JLEV) - ZTT0M_SAVE(JROF,JLEV)=ZT0TM(JROF,JLEV) - ENDDO - ENDDO - CALL GNHQE_CONV_TEMPE(YDGEOMETRY,.TRUE.,YDMODEL%YRML_GCONF%YGFL%NDIM,KST,KEND,& - & ZT0SPD,ZT0SP,ZT0T,& - & KGFLTYP=0,PGFL=PGFL,KDDER=2,PQCHAL=ZT0SPDL,PQCHAM=ZT0SPDM,& - & PTL=ZT0TL,PTM=ZT0TM) - ! At instant t-dt for leap-frog advections (without the derivatives): - IF (.NOT.LTWOTL) THEN - DO JLEV=1,NFLEVG - DO JROF=KST,KEND - ZTT9_SAVE(JROF,JLEV)=ZT9T(JROF,JLEV) - ENDDO - ENDDO - CALL GNHQE_CONV_TEMPE(YDGEOMETRY,.TRUE.,YDMODEL%YRML_GCONF%YGFL%NDIM,KST,KEND,& - & ZT9SPD,ZT9SP,ZT9T,& - & KGFLTYP=9,PGFL=PGFL) - ENDIF -ENDIF - -IF (LRAYSP.AND.(NSTEP >= INSTEP_DEB .AND. NSTEP <= INSTEP_FIN)) THEN - CALL CPPSOLAN(YDGEOMETRY%YRDIM,KST,KEND,YDGSGEOM%GEMU,YDGSGEOM%GELAM,ZMMU0) - IF (.NOT.LSDDH) THEN -!-----------INITIALIZING THE WEIGHT VECTORS------------- -DO JROF=KST,KEND - PDHSF(JROF)=HDSF(JROF+KSTGLO-1) -ENDDO -!------------------------------------------------------- - ENDIF -ENDIF - -IF (LLDIAB.OR.LSIMPH) THEN - CALL CPPHINP(YDGEOMETRY,YDMODEL,KST,KEND,& - & YDGSGEOM%GEMU,YDGSGEOM%GELAM,& - & ZT0U,ZT0V,& - & ZPQ,ZPQL,ZPQM,ZPCVGQL,ZPCVGQM,& - & PXYB0(1,1,YYTXYB0_PHY%M_RDELP),PCTY0(1,0,YYTCTY0%M_EVEL),ZPCVGQ,& - & ZMU0,ZMU0LU,ZMU0M,ZMU0N,ZCVGQ) - ZLCVQ(KST:KEND,1:NFLEVG)=ZCVGQ(KST:KEND,1:NFLEVG) -ENDIF - -DO JLEV=1,NFLEVG - DO JROF=KST,KEND - ZCVGQL(JROF,JLEV)=0._JPRB - ZCVGQI(JROF,JLEV)=0._JPRB - ZCVGT (JROF,JLEV)=0._JPRB - ENDDO -ENDDO - -DO JROF=KST,KEND - ZQSATS(JROF)=0.0_JPRB - ZFPLCH(JROF,0)=0.0_JPRB - ZFPLSH(JROF,0)=0.0_JPRB -ENDDO - -IF(LNEBN.OR.LNEBR.OR.LRRGUST) THEN - DO JLEV=1,NFLEVG - DO JROF=KST,KEND - ZFPLCH(JROF,JLEV)=ZPCPF(JROF,JLEV) - ENDDO - ENDDO -ENDIF -IF(LRRGUST) THEN - DO JLEV=1,NFLEVG - DO JROF=KST,KEND - ZFPLSH(JROF,JLEV)=ZPSPF(JROF,JLEV) - ENDDO - ENDDO -ENDIF - -! * In some cases, some pseudo-historic surface buffers (like z0) should -! not be modified between the entrance and the output of MF_PHYS -! (this is the case for example if LDCONFX=T). -! For the time being, we must save: -! - HV (group VV) : resistance to evapotranspiration -! - Z0F (group VD): gravity * surface roughness length -! - Z0H (group VV): gravity * roughness length for heat -! - PBLH (group VH): PBL height -! - SPSH (group VH): -! - QSH (group VH): -LL_SAVE_PHSURF=LLDIAB.AND.LDCONFX -IF (LL_SAVE_PHSURF) THEN - IF(YSD_VV%YHV%LSET) ZHV(1:NPROMA)=ZVVHV(1:NPROMA) - IF(YSD_VF%YZ0F%LSET) ZGZ0F(1:NPROMA)=ZVFZ0F(1:NPROMA) - IF(YSD_VV%YZ0H%LSET) ZGZ0HF(1:NPROMA)=ZVVZ0H(1:NPROMA) - IF(YSD_VH%YPBLH%LSET) ZPBLH(1:NPROMA)=ZVHPBLH(1:NPROMA) - IF(YSD_VH%YSPSH%LSET) ZFHPS(1:NPROMA)=ZVHSPSH(1:NPROMA) - IF(YSD_VH%YQSH%LSET) ZQSH(1:NPROMA)=ZVHQSH(1:NPROMA) - IF(YSD_VK%YUDGRO%LSET) ZUDGRO(1:NPROMA)=ZVKUDGRO(1:NPROMA) - IF(LCVPRO.OR.LGPCMT) THEN - ZUDAL(:,:)=ZPUAL(:,:) - ZUDOM(:,:)=ZPUOM(:,:) - IF(LCDDPRO) THEN - ZDDAL(:,:)=ZPDAL(:,:) - ZDDOM(:,:)=ZPDOM(:,:) - ENDIF - ENDIF - IF(YUNEBH%LACTIVE) ZUNEBH(:,:)=ZPUNEBH(:,:) - IF(YUEN%LACTIVE) ZENTCH(:,:)=ZPUEN(:,:) -ENDIF - -IF (.NOT.ASSOCIATED(ZVASUL)) THEN - ZAESUL_NULL(:)=0._JPRB - ZVASUL=>ZAESUL_NULL -ENDIF -IF (.NOT.ASSOCIATED(ZVAVOL)) THEN - ZVAVOL_NULL(:)=0._JPRB - ZVAVOL=>ZVAVOL_NULL -ENDIF - -CALL INITAPLPAR ( YGFL, YDARPHY, KST, KEND, NPROMA, NFLEVG, NTSSG, YSP_SBD%NLEVS,& - & ZVFVEG ,& - & PDIFCQ , PDIFCQI, PDIFCQL, PDIFCS , ZDIFEXT, PDIFTQ , PDIFTQI, PDIFTQL,& - & PDIFTS , PFCCQL , PFCCQN , PFCSQL , PFCSQN , PFCQNG , PFCQING,& - & PFCQLNG, PFCQRNG, PFCQSNG,PFCQGNG,& - & PFPLCL , PFPLCN , PFPLCG , PFPLCHL, PFPLSL , PFPLSN ,PFPLSG ,& - & PFPLSHL, PFRSO , PFRSOC ,& - & PFRTH , PFRTHC , PSTRCU , PSTRCV , PSTRDU , PSTRDV , PSTRTU ,& - & PSTRTV , PSTRMU , PSTRMV , PFRMH , ZFRMQ ,& - & PDIFCQLC,PDIFCQIC,PFIMCC,& - & PFEDQLC, PFEDQIC, PFEDQRC, PFEDQSC, PFCNEGQLC,PFCNEGQIC,PFCNEGQRC,PFCNEGQSC,& - & PFCHOZ , ZCPS , ZLHS ,& - & ZRS , ZLH , ZLSCPE , PNEB , PQICE , PQLI , ZQSAT ,& - & ZQW , PRH , ZTW , PALBDG , ZCD , ZCDN , ZCH ,& - & ZC1 , ZC2 , PCT , ZEMIS , PFCHSP , PFCLL , PFCLN ,& - & PFCS , ZFEVI , PFEVL , PFEVN , PFEVV , PFLASH , PFTR , PFLWSP ,& - & PFONTE , PFGEL , PFGELS ,& - & PFRSGNI, PFRSDNI, PFRSODS, PFRSOPS, PFRSOPT, PFRSOLU, PFRTHDS,& - & PFPFPSL, PFPFPSN,PFPFPSG, PFPFPCL, PFPFPCN,PFPEVPSL,PFPEVPSN,PFPEVPSG,PFPEVPCL,& - & PFPEVPCN,PFPEVPCG,ZFTKE , ZFTKEI , ZFEFB1 , ZFEFB2 , ZFEFB3,& - & PGZ0 , PGZ0H , ZNEIJ , ZVEG , PQS , ZQSATS , PRUISL ,& - & PRUISP , PRUISS , PUCLS , PVCLS , PNUCLS , PNVCLS , PTCLS , PMRT,& - & PQCLS , PRHCLS , PCLCT , PCLCH , PCLCM , PCLCL , PCLCC ,& - & PCAPE , PCTOP , ICLPH , PCLPH , PVEIN , PUGST , PVGST ,& - & PDIAGH , ZEDR, PVISICLD, PVISIHYDRO, PMXCLWC) - -!* 2. Complete physics. -! ----------------- - -! 2.2 Complete physics. -! ----------------- - -IF (LLDIAB.AND.(.NOT.LMPA)) THEN - - ! PAS DE TEMPS DE LA PHYSIQUE (/YOMPHY2/) - ! Dans le cas des iterations de l'initialisation par modes normaux, - ! le pas de temps pour la physique ne peux pas etre nul pour APLPAR et - ! CPATY (par contre c'est bien PDTPHY qui est passe en argument aux autres - ! sous-prog. de la physique). Ceci est du a l'impossibilite de prendre en - ! compte des flux qui deviennent infinis pour TSPHY=0 (flux de masse du au - ! reajustement des sursaturations par exemple...). Mais les tendances phys. - ! sont bien nulles dans le cas de la configuration 'E' (Modes Normaux). - ! PHYSICS TIME STEP (/YOMPHY2/) - ! In case of normal mode initialisation iterations, the physics time - ! step cannot be zero for APLPAR and CPATY (nevertheless it is PDTPHY - ! which is passed to other physics subroutines). This is due to the - ! impossibility to take into account fluxes which are infinite for TSPHY=0 - ! (e.g.: mass flux due to oversaturation...). - - TSPHY = MAX(PDTPHY,1.0_JPRB) - - ! CALL PARAMETERISATIONS - - DO JROF=KST,KEND - ZVFLSM(JROF)=REAL(NINT(ZVFLSM(JROF)),JPRB) - ENDDO - - IF (LTWOTL) THEN - - IF (LAJUCV) THEN - DO JLEV=1,NFLEVG - DO JROF=KST,KEND - ZTAUX(JROF,JLEV)=ZT0T(JROF,JLEV) - ENDDO - ENDDO - CALL ACAJUCV(YDMODEL%YRML_PHY_MF%YRPHY0,KST,KEND,NPROMA,NTPLUI,NFLEVG,NTAJUC,& - & PRE0,PXYB0(1,1,YYTXYB0_PHY%M_ALPH),PXYB0(1,1,YYTXYB0_PHY%M_DELP),& - & PXYB0(1,1,YYTXYB0_PHY%M_LNPR),ZT0T) - DO JLEV=1,NFLEVG - DO JROF=KST,KEND - ZDTAJU(JROF,JLEV)=ZT0T(JROF,JLEV)-ZTAUX(JROF,JLEV) - ENDDO - ENDDO - ENDIF - - ITDIA=1_JPIM - CALL APLPAR(YDGEOMETRY,YDSURF, YDXFU, YDCFU, YDMODEL, KST , KEND , NPROMA ,& - & ITDIA , NFLEVG , KSTGLO,& - & NVCLIS , YSD_VVD%NUMFLDS ,& - & NSTEP ,& - & NTSSG , YSP_SBD%NLEVS ,& - & KBL , KGPCOMP, YDCFU%NFRRC, PDTPHY,YDCSGEOM%RINDX,YDCSGEOM%RINDY, LLXFUMSE,& - & PHI0 , PRE0 , PHIF0 , PRE0F ,PXYB0(1,1,YYTXYB0_PHY%M_ALPH),ZVVARG,& - & ZVVD2 ,& - & PXYB0(1,1,YYTXYB0_PHY%M_DELP),ZVVIVEG,ZVVLAI,& - & PXYB0(1,1,YYTXYB0_PHY%M_LNPR),PXYB0(1,1,YYTXYB0_PHY%M_RDELP),& - & ZVVRSMIN , ZVVSAB ,& - & ZVVZ0H , ZVASEA , ZVALAN ,& - & ZVASOO , ZVADES , ZVASUL ,& - & ZVAVOL ,YDGSGEOM%RCORI, ZP1EXT,& - & ZT0U,ZT0V,ZT0T,& - & ZPQ,ZPI,ZPL,& - & ZPLCONV,ZPICONV,ZPRCONV,ZPSCONV,& - & ZPS,ZPR,ZPG,ZPTKE,& - & ZPEFB1,ZPEFB2,ZPEFB3,& - & ZPCVV,ZPO3,ZP1CHEM,ZP1NOGW,ZP2NOGW, PGFL, & - & ZT0VOR,& - & PRCP0(1,1,YYTRCP0%M_CP), ZCVGQ ,PRCP0(1,1,YYTRCP0%M_R), PKOZO , ZFPLCH , ZFPLSH ,& - & ZPDAL,ZPDOM,ZPUEN,ZPUAL,& - & ZPUOM,ZPUNEBH, PCTY0(1,0,YYTCTY0%M_EVEL),& - & ZPRKTH,ZPRKTQV,ZPRKTQC, ZPTTE,& - & ZPMXL,ZPSHTUR,ZPFQTUR, ZPFSTUR,& - & ZVHTCCH , ZVHSCCH , ZVHBCCH ,& - & ZVHSPSH ,ZVHPBLH ,& - & ZVHQSH ,ZVKUDGRO ,& - & PGPAR , PCUCONVCA, PNLCONVCA,& - & ZSGF0 , ZSGA0, ZSGR0,& - & ZSBT0 , ZRRT0 , ZRRFC0 ,& - & ZSBQ0 , ZSBTL0, ZRRW0 ,& - & ZRRIC0,& - & ZVVHV , PCTY0(1,1,YYTCTY0%M_VVEL),& - & PEMTD , PEMTU ,PTRSW ,& - & ZVVALV ,& - & ZVFALBF , ZVFALBSF , ZVFEMISF ,& - & ZVFGETRL , ZVFLSM , ZVFVEG ,& - & ZVFZ0F , ZVFZ0RLF,& - & ZVFVRLAN , ZVFVRLDI , ZVCVC1 ,& - & ZSFLSFL1 , ZSFOSFO1 ,& - & PRMOON ,& - & ZMU0 , ZMU0LU , ZMU0M ,ZMU0N,YDGSGEOM%GELAM,YDGSGEOM%GEMU,YDGSGEOM%GM,& - & ZAC , ZAC_HC , ZMCOR , ZMMU0 , PDHSF ,& - & ZMRAB3C,ZMRAB3N,& - & ZMRAB4C,ZMRAB4N,& - & ZMRAB6C,ZMRAB6N,& - & ZMRAT1C,ZMRAT1N,& - & ZMRAT2C,ZMRAT2N,& - & ZMRAT3C,ZMRAT3N,& - & ZMRAT4C,ZMRAT4N,& - & ZMRAT5C,ZMRAT5N,& - & YDOROG%OROG,& - & PWT0,ZT0DIV,ZT0UL,ZT0VL,PWT0L,PWT0M,& - & PGDEOSI,PGUEOSI,PGMU0,PGMU0_MIN,PGMU0_MAX,& - & PGDEOTI,PGDEOTI2,PGUEOTI,PGUEOTI2,PGEOLT,PGEOXT,& - & PGRPROX,PGMIXP,PGFLUXC,PGRSURF,& - & PDIFCQ , PDIFCQI, PDIFCQL, PDIFCS , ZDIFEXT, PDIFTQ , PDIFTQI,& - & PDIFTQL,& - & PDIFTS , PFCCQL , PFCCQN , PFCSQL , PFCSQN , PFCQNG ,& - & PFCQING, PFCQLNG, PFCQRNG, PFCQSNG, PFCQGNG,& - & PFPLCL , PFPLCN , PFPLCG , PFPLSL , PFPLSN , PFPLSG , PFRSO ,& - & PFRSOC ,& - & PFRTH , PFRTHC , PSTRCU , PSTRCV , PSTRDU , PSTRDV ,& - & PSTRTU ,& - & PSTRTV , PSTRMU , PSTRMV , PFRMH , ZFRMQ ,& - & PDIFCQLC,PDIFCQIC,PFIMCC,& - & PFEDQLC, PFEDQIC, PFEDQRC, PFEDQSC, PFCNEGQLC,PFCNEGQIC,PFCNEGQRC,PFCNEGQSC,& - & PFCHOZ ,& - & ZCPS , ZLHS ,& - & ZRS , ZLH , ZLSCPE , PNEB , PQICE , PQLI ,& - & ZPA1,ZPLRAD1,ZPIRAD1,& - & ZQRCONV, ZQSCONV,& - & ZQSAT ,& - & ZQW , PRH , ZTW , PALBDG , ZCD , ZCDN ,& - & ZCH ,& - & ZC1 , ZC2 , PCT , ZEMIS , PFCHSP , PFCLL ,& - & PFCLN ,& - & PFCS , ZFEVI , PFEVL , PFEVN , PFEVV , PFLASH,PFTR ,& - & PFLWSP , PFONTE , PSP_SG(1,YSP_SG%YT%MP1), PFGEL , PFGELS ,& - & PFRSGNI, PFRSDNI, PFRSODS, PFRSOPS, PFRSOPT, PFRSOLU, PFRTHDS,& - & PFPFPSL, PFPFPSN, PFPFPSG, PFPFPCL, PFPFPCN, PFPEVPSL, PFPEVPSN,PFPEVPSG, PFPEVPCL,& - & PFPEVPCN,PFPEVPCG,ZFTKE , ZFTKEI, ZFEFB1 , ZFEFB2 , ZFEFB3 ,PGZ0 , PGZ0H ,& - & ZNEIJ , ZVEG , PQS,& - & ZQSATS , PRUISL , PRUISP , PRUISS ,& - & PUCLS , PVCLS , PNUCLS , PNVCLS , PTCLS , PMRT ,& - & PQCLS , PRHCLS , PCLCT , PCLCH , PCLCM , PCLCL ,& - & PCLCC , PCAPE , PCTOP , ICLPH , PCLPH , PVEIN , PUGST , PVGST , PDIAGH, & - & ZP1EZDIAG, PTPWCLS,ZDPRECIPS,ZDPRECIPS2,PVISICLD,PVISIHYDRO,PMXCLWC,& - & ZSGF1, ZTENDPTKE, ZKUROV_H, ZKTROV_H,& - & PDERNSHF, ZTENDEXT_DEP, ZVDSUND,PTRAJ_PHYS,& - & ZEDR, YDDDH, ZSBT1, ZRRW1, & - & ZSBQ1,ZRRIC1,ZSBTL1,& - & ZRRFC1,ZSGA1,ZSGR1,PFTCNS,& - & ZGP2DSPP) - - IF (LAJUCV) THEN - DO JLEV=1,NFLEVG - DO JROF=KST,KEND - ZT0T(JROF,JLEV)=ZTAUX(JROF,JLEV) - ENDDO - ENDDO - DO JLEV=1,NFLEVG - DO JROF=KST,KEND - PB1(JROF,ISLB1T9+JLEV-NFLSA)=PB1(JROF,ISLB1T9+JLEV-NFLSA)+ZDTAJU(JROF,JLEV) - ENDDO - ENDDO - ENDIF - - ELSE - - ! IF (LAJUCV) THEN - ! missing code under LAJUCV for leap-frog schemes. - ! ENDIF - - ITDIA=1_JPIM - CALL APLPAR(YDGEOMETRY,YDSURF, YDXFU, YDCFU,YDMODEL, KST, KEND , NPROMA ,& - & ITDIA , NFLEVG , KSTGLO ,& - & NVCLIS , YSD_VVD%NUMFLDS ,& - & NSTEP ,& - & NTSSG , YSP_SBD%NLEVS ,& - & KBL , KGPCOMP, YDCFU%NFRRC, PDTPHY,YDCSGEOM%RINDX,YDCSGEOM%RINDY, LLXFUMSE,& - & PHI9 , PRE9 , PHIF9 , PRE9F , PXYB9(1,1,YYTXYB9_PHY%M_ALPH) , ZVVARG ,& - & ZVVD2 ,& - & PXYB9(1,1,YYTXYB9_PHY%M_DELP),ZVVIVEG,ZVVLAI,& - & PXYB9(1,1,YYTXYB9_PHY%M_LNPR),PXYB9(1,1,YYTXYB9_PHY%M_RDELP),& - & ZVVRSMIN , ZVVSAB ,& - & ZVVZ0H , ZVASEA , ZVALAN ,& - & ZVASOO , ZVADES , ZVASUL ,& - & ZVAVOL,YDGSGEOM%RCORI, ZP1EXT9,& - & ZT9U,ZT9V,ZT9T,& - & ZPQ9,ZPI9,ZPL9,& - & ZPLCONV,ZPICONV,ZPRCONV,ZPSCONV,& - & ZPS9,ZPR9,ZPG9,ZPTKE9,& - & ZPEFB19,ZPEFB29,ZPEFB39,& - & ZPCVV9,ZPO39,ZP1CHEM9,ZP1NOGW9,ZP2NOGW9, PGFL, & - & ZT9VOR,& - & PRCP9(1,1,YYTRCP9%M_CP), ZCVGQ ,PRCP9(1,1,YYTRCP9%M_R), PKOZO , ZFPLCH, ZFPLSH ,& - & ZPDAL,ZPDOM,ZPUEN,ZPUAL,& - & ZPUOM,ZPUNEBH, PCTY0(1,0,YYTCTY0%M_EVEL),& - & ZPRKTH,ZPRKTQV,ZPRKTQC, ZPTTE,& - & ZPMXL,ZPSHTUR,ZPFQTUR,ZPFSTUR,& - & ZVHTCCH , ZVHSCCH , ZVHBCCH ,& - & ZVHSPSH , ZVHPBLH ,& - & ZVHQSH ,ZVKUDGRO ,& - & PGPAR , PCUCONVCA, PNLCONVCA,& - & ZSGF9 , ZSGA9, ZSGR9,& - & ZSBT9 , ZRRT9 , ZRRFC9 ,& - & ZSBQ9 , ZSBTL9, ZRRW9 ,& - & ZRRIC9,& - & ZVVHV , PCTY0(1,1,YYTCTY0%M_VVEL),& - & PEMTD , PEMTU ,PTRSW ,& - & ZVVALV ,& - & ZVFALBF , ZVFALBSF , ZVFEMISF ,& - & ZVFGETRL , ZVFLSM , ZVFVEG ,& - & ZVFZ0F , ZVFZ0RLF,& - & ZVFVRLAN , ZVFVRLDI , ZVCVC1 ,& - & ZSFLSFL1 , ZSFOSFO1 , PRMOON ,& - & ZMU0 , ZMU0LU , ZMU0M , ZMU0N,YDGSGEOM%GELAM,YDGSGEOM%GEMU,YDGSGEOM%GM,& - & ZAC , ZAC_HC , ZMCOR , ZMMU0 , PDHSF ,& - & ZMRAB3C,ZMRAB3N,& - & ZMRAB4C,ZMRAB4N,& - & ZMRAB6C,ZMRAB6N,& - & ZMRAT1C,ZMRAT1N,& - & ZMRAT2C,ZMRAT2N,& - & ZMRAT3C,ZMRAT3N,& - & ZMRAT4C,ZMRAT4N,& - & ZMRAT5C,ZMRAT5N,& - & YDOROG%OROG,& - & PWT9,ZT9DIV,ZT9UL,ZT9VL,ZWT9L,ZWT9M,& - & PGDEOSI,PGUEOSI,PGMU0,PGMU0_MIN,PGMU0_MAX,& - & PGDEOTI,PGDEOTI2,PGUEOTI,PGUEOTI2,PGEOLT,PGEOXT,& - & PGRPROX,PGMIXP,PGFLUXC,PGRSURF,& - & PDIFCQ , PDIFCQI, PDIFCQL, PDIFCS , ZDIFEXT, PDIFTQ , PDIFTQI,& - & PDIFTQL,& - & PDIFTS , PFCCQL , PFCCQN , PFCSQL , PFCSQN , PFCQNG ,& - & PFCQING, PFCQLNG, PFCQRNG, PFCQSNG,PFCQGNG,& - & PFPLCL , PFPLCN , PFPLCG , PFPLSL , PFPLSN , PFPLSG , PFRSO ,& - & PFRSOC ,& - & PFRTH , PFRTHC , PSTRCU , PSTRCV , PSTRDU , PSTRDV ,& - & PSTRTU ,& - & PSTRTV , PSTRMU , PSTRMV , PFRMH , ZFRMQ ,& - & PDIFCQLC,PDIFCQIC,PFIMCC,& - & PFEDQLC, PFEDQIC, PFEDQRC, PFEDQSC, PFCNEGQLC,PFCNEGQIC,PFCNEGQRC,PFCNEGQSC,& - & PFCHOZ ,& - & ZCPS , ZLHS ,& - & ZRS , ZLH , ZLSCPE , PNEB , PQICE , PQLI ,& - & ZPA1,ZPLRAD1,ZPIRAD1,& - & ZQRCONV, ZQSCONV,& - & ZQSAT ,& - & ZQW , PRH , ZTW , PALBDG , ZCD , ZCDN ,& - & ZCH ,& - & ZC1 , ZC2 , PCT , ZEMIS , PFCHSP , PFCLL ,& - & PFCLN ,& - & PFCS , ZFEVI , PFEVL , PFEVN , PFEVV , PFLASH, PFTR ,& - & PFLWSP , PFONTE , ZSGT1, PFGEL , PFGELS ,& - & PFRSGNI, PFRSDNI, PFRSODS, PFRSOPS, PFRSOPT, PFRSOLU, PFRTHDS,& - & PFPFPSL, PFPFPSN, PFPFPSG, PFPFPCL, PFPFPCN, PFPEVPSL,PFPEVPSN,PFPEVPSG, PFPEVPCL,& - & PFPEVPCN,PFPEVPCG,ZFTKE , ZFTKEI, ZFEFB1 , ZFEFB2 , ZFEFB3 ,PGZ0 , PGZ0H ,& - & ZNEIJ , ZVEG , PQS,& - & ZQSATS , PRUISL , PRUISP , PRUISS ,& - & PUCLS , PVCLS , PNUCLS , PNVCLS , PTCLS , PMRT ,& - & PQCLS , PRHCLS , PCLCT , PCLCH , PCLCM , PCLCL ,& - & PCLCC , PCAPE , PCTOP , ICLPH , PCLPH , PVEIN , PUGST , PVGST , PDIAGH, & - & ZP1EZDIAG, PTPWCLS,ZDPRECIPS,ZDPRECIPS2,PVISICLD,PVISIHYDRO,PMXCLWC,& - & ZSGF1, ZTENDPTKE, ZKUROV_H, ZKTROV_H ,& - & PDERNSHF, ZTENDEXT_DEP, ZVDSUND,PTRAJ_PHYS,& - & ZEDR,YDDDH, ZSBT1, ZRRW1, & - & ZSBQ1,ZRRIC1,ZSBTL1,& - & ZRRFC1,ZSGA1,ZSGR1,PFTCNS,& - & ZGP2DSPP) - - ! IF (LAJUCV) THEN - ! missing code under LAJUCV for leap-frog schemes. - ! ENDIF - - ENDIF - - ! convert to flexible interface structure - IF (LINTFLEX) THEN - CALL APLPAR2INTFLEX(YGFL,YDPHY,NPROMA, KST, KEND, NFLEVG,& - & PDIFCQ , PDIFCQI, PDIFCQL, PDIFCS ,ZDIFEXT,& - & PDIFTQ , PDIFTQI, PDIFTQL, PDIFTS ,& - & PFCCQL , PFCCQN , PFCSQL , PFCSQN ,& - & PFPLSL , PFPLSN , PFPLCL, PFPLCN,& - & PFPEVPSL,PFPEVPSN,PFPEVPCL,PFPEVPCN,& - & PFPFPSL, PFPFPSN, PFPFPCL ,PFPFPCN ,& - & PFCQLNG, PFCQING, PFCQRNG, PFCQSNG,& - & PFCQNG , PFRMH , ZFRMQ , PFRSO , PFRTH ,& - & PSTRCU , PSTRCV , PSTRDU , PSTRDV ,& - & PSTRTU , PSTRTV , PSTRMU , PSTRMV ,& - & PDIFCQLC,PDIFCQIC,PFIMCC,& - & PFEDQLC, PFEDQIC, PFEDQRC, PFEDQSC, PFCNEGQLC,PFCNEGQIC,PFCNEGQRC,PFCNEGQSC,& - & ZFTKE,& - & ZTENDPTKE, ZTENDEXT, ZTENDEXT_DEP,& - & YLPROCSET ) - ENDIF - -ENDIF ! LLDIAB.AND..NOT.LMPA - -! 2.3 Computes MOCON in the CLP. -! -------------------------- -PMOCON(KST:KEND)=0.0_JPRB -IF (LLDIAB.AND.(.NOT.LMPA)) THEN - - IF (LTWOTL) THEN - DO JLEV=1,NFLEVG - DO JROF = KST, KEND - PMOCON(JROF) = PMOCON(JROF)+(ZLCVQ(JROF,JLEV)-ZPQ(JROF,JLEV)*& - & ZT0DIV(JROF,JLEV))*PXYB0(JROF,JLEV,YYTXYB0_PHY%M_DELP)& - & *MAX(0,SIGN(1,JLEV-ICLPH(JROF))) - ENDDO - ENDDO - DO JROF = KST, KEND - PMOCON(JROF) = PMOCON(JROF)/(PRE0(JROF,NFLEVG)-PRE0(JROF,ICLPH(JROF)-1)) - ENDDO - ELSE - DO JLEV=1,NFLEVG - DO JROF = KST, KEND - PMOCON(JROF) = PMOCON(JROF)+(ZLCVQ(JROF,JLEV)-ZPQ9(JROF,JLEV)*& - & ZT0DIV(JROF,JLEV))*PXYB9(JROF,JLEV,YYTXYB9_PHY%M_DELP)& - & *MAX(0,SIGN(1,JLEV-ICLPH(JROF))) - ENDDO - ENDDO - DO JROF = KST, KEND - PMOCON(JROF) = PMOCON(JROF)/(PRE9(JROF,NFLEVG)-PRE9(JROF,ICLPH(JROF)-1)) - ENDDO - ENDIF -ENDIF - -! Store surface water flux P and E for water conservation -IF (LCORWAT) THEN - PSD_VH(KST:KEND,YSD_VH%YPSL%MP) = PFPLSL(KST:KEND,NFLEVG) - PSD_VH(KST:KEND,YSD_VH%YPCL%MP) = PFPLCL(KST:KEND,NFLEVG) - PSD_VH(KST:KEND,YSD_VH%YPSN%MP) = PFPLSN(KST:KEND,NFLEVG) - PSD_VH(KST:KEND,YSD_VH%YPCN%MP) = PFPLCN(KST:KEND,NFLEVG) - PSD_VH(KST:KEND,YSD_VH%YEVA%MP) = PFEVN(KST:KEND,1)-PFEVL(KST:KEND,1) -ENDIF - -! 2.4 Stores radiation coefficients. -! ------------------------------ - -! * writes grid-point transmission coefficients for simplified physics. - -IF (LRCOEF.AND.(NSTEP == 1).AND.LLDIAB.AND.(.NOT.LMPA)) THEN - IFIELDSS=NG3SR*NFLEVG - CALL WRRADCOEF(YDGEOMETRY,YDRCOEF,KST,KEND,KSTGLO,IFIELDSS,ZRADTC,ZAC_HC) -ENDIF - -! 2.5 Ozone -! ----- - -IF (LLDIAB.AND.LOZONE.AND.(.NOT.LMPA)) THEN - ! * Caution: this part has not been yet validated relative - ! to the GFL implementation, and LOZONE (the setup of - ! which has not yet been updated) can be true only if - ! the GFL ozone is activated as a prognostic and advected - ! variable. - IPO3=(YO3%MP_SL1-1)*(NFLEVG+2*NFLSUL) - IF (LSLAG) THEN - IF (LTWOTL) THEN - CALL CPOZO (NPROMA,KST,KEND,NFLEVG,PDTPHY,PFCHOZ,& - & PB1(1,ISLB1GFL9+IPO3+1-NFLSA),PXYB0(1,1,YYTXYB0_PHY%M_RDELP)) - ELSE - CALL CPOZO (NPROMA,KST,KEND,NFLEVG,PDTPHY,PFCHOZ,& - & PB1(1,ISLB1GFL9+IPO3+1-NFLSA),PXYB9(1,1,YYTXYB9_PHY%M_RDELP)) - ENDIF - ELSE - CALL CPOZO (NPROMA,KST,KEND,NFLEVG,PDTPHY,PFCHOZ,& - & ZPO31,PXYB9(1,1,YYTXYB9_PHY%M_RDELP)) - ENDIF -ENDIF - -! 2.5.1 Chemical species -! ---------------- -IF (LCHEM_ARPCLIM) THEN - ! Processes described in my_phys ARPEGE-Climat 6.3 : to be added later here - ! Modify also calls in CPTEND_NEW, etc.. as done ARPEGE-Climat 6.3. -ENDIF - -! 2.6 surface specific humidity necessary to compute the vertical -! advection of q in the case "delta m=1" (unlagged physics only). -! --------------------------------------------------------------- - -IF (LLDIAB.AND.(NDPSFI == 1)) THEN - CALL CPQSOL(YDGEOMETRY%YRDIMV,YDPHY,NPROMA,KST,KEND,PRE0,ZRRT0,PQS,ZQSATS,PQSOL) -ENDIF - -! 2.7 Computation of tendencies T,u,v and Q. -! -------------------------------------- - -! Set GFL tendencies to 0 - -ZTENDGFL(:,:,:) = 0.0_JPRB - -IF (LLDIAB.AND.(.NOT.LSIMPH).AND.(.NOT.LMPA)) THEN - - TSPHY = MAX(PDTPHY,1.0_JPRB) - - ! * CPTEND+CPUTQY = Old( CPATY + CPDUP + CPDTHP ) - ! Calcul des tendances de T , U et de Q et modifications - ! eventuelles de W et de OMEGA/P - - IF (LTWOTL) THEN - - IF (LINTFLEX.AND.(.NOT.LDCONFX)) THEN - CALL CPTEND_FLEX( YDLDDH,YDMDDH,YGFL,YDPHY,NPROMA, KST, KEND, NFLEVG,YDGSGEOM%GNORDL,YDGSGEOM%GNORDM,& - & PXYB0(1,1,YYTXYB0_PHY%M_DELP) ,& - & PXYB0(1,1,YYTXYB0_PHY%M_RDELP), PRCP0(1,1,YYTRCP0%M_CP),& - & ZT0U,ZT0V,ZT0T,ZRRT0,& - & PGFL,& - & YLPROCSET,& - & PTENDU , PTENDV , ZTENDH , ZTENDGFL,& - & PFHSCL ,PFHSCN,PFHSSL,PFHSSN,& - & PFHPCL ,PFHPCN,PFHPSL,PFHPSN,& - & ZFHP ,ZFP , PFEPFP, PFCMPCQ, PFCMPSN, PFCMPSL,YDDDH ) - ELSE - CALL CPTEND_NEW( YDMODEL, NPROMA, KST, KEND, NFLEVG,YDGSGEOM%GNORDL,YDGSGEOM%GNORDM,& - & PDIFCQ , PDIFCQI, PDIFCQL, PDIFCS ,ZDIFEXT,& - & PDIFTQ , PDIFTQI, PDIFTQL, PDIFTS ,& - & PFCCQL , PFCCQN , PFCSQL , PFCSQN ,& - & PFPLSL , PFPLSN , PFPLSG , PFPLCL, PFPLCN, PFPLCG,& - & PFPEVPSL,PFPEVPSN,PFPEVPSG,PFPEVPCL,PFPEVPCN,PFPEVPCG,& - & PFPFPSL, PFPFPSN, PFPFPSG, PFPFPCL ,PFPFPCN ,& - & PFCQLNG, PFCQING, PFCQRNG, PFCQSNG, PFCQGNG ,& - & PFCQNG , PFRMH , ZFRMQ , PFRSO , PFRTH ,& - & PSTRCU , PSTRCV , PSTRDU , PSTRDV ,& - & PSTRTU , PSTRTV , PSTRMU , PSTRMV ,& - & PDIFCQLC,PDIFCQIC,PFIMCC,& - & PFEDQLC, PFEDQIC, PFEDQRC, PFEDQSC, PFCNEGQLC,PFCNEGQIC,PFCNEGQRC,PFCNEGQSC,& - & ZFTKE , ZFTKEI, ZFEFB1 , ZFEFB2 , ZFEFB3 ,PXYB0(1,1,YYTXYB0_PHY%M_DELP) ,& - & PXYB0(1,1,YYTXYB0_PHY%M_RDELP), PHIF0 , PRCP0(1,1,YYTRCP0%M_CP),& - & ZT0U,ZT0V,ZT0T,& - & ZPQ,ZPI,ZPL,& - & ZPLCONV,ZPICONV,ZPRCONV,ZPSCONV,& - & ZPR,ZPS,ZPG,& - & ZCPS , ZRRT0 ,& - & PFHSCL ,PFHSCN,PFHSSL,PFHSSN,PFHSSG,& - & PFHPCL ,PFHPCN,PFHPCG,PFHPSL,PFHPSN,PFHPSG,& - & ZFHP ,ZFP , PFEPFP, PFCMPCQ, PFCMPSN, PFCMPSL,& - & PTENDU , PTENDV , ZTENDU, ZTENDV, ZTENDH ,& - & ZPTENDQ1,ZPTENDI1,ZPTENDL1,& - & ZPTENDLCONV1,ZPTENDICONV1,& - & ZPTENDRCONV1,ZPTENDSCONV1,& - & ZPTENDR1,ZPTENDS1,ZPTENDG1,ZPTENDTKE1,& - & ZPTENDEFB11,ZPTENDEFB21,ZPTENDEFB31,& - & ZTENDEXT,YDDDH) - ENDIF - ELSE - IF (LINTFLEX.AND.(.NOT.LDCONFX)) THEN - CALL CPTEND_FLEX( YDLDDH,YDMDDH,YGFL,YDPHY,NPROMA, KST, KEND, NFLEVG,YDGSGEOM%GNORDL,YDGSGEOM%GNORDM,& - & PXYB9(1,1,YYTXYB9_PHY%M_DELP) ,& - & PXYB9(1,1,YYTXYB9_PHY%M_RDELP), PRCP9(1,1,YYTRCP9%M_CP),& - & ZT9U,ZT9V,ZT9T,ZRRT9,& - & PGFL,& - & YLPROCSET,& - & PTENDU , PTENDV , ZTENDH , ZTENDGFL,& - & PFHSCL ,PFHSCN,PFHSSL,PFHSSN,& - & PFHPCL ,PFHPCN,PFHPSL,PFHPSN,& - & ZFHP ,ZFP , PFEPFP, PFCMPCQ, PFCMPSN, PFCMPSL,YDDDH ) - ELSE - CALL CPTEND_NEW( YDMODEL, NPROMA, KST, KEND, NFLEVG,YDGSGEOM%GNORDL,YDGSGEOM%GNORDM,& - & PDIFCQ , PDIFCQI, PDIFCQL, PDIFCS ,ZDIFEXT,& - & PDIFTQ , PDIFTQI, PDIFTQL, PDIFTS ,& - & PFCCQL , PFCCQN , PFCSQL , PFCSQN ,& - & PFPLSL , PFPLSN , PFPLSG , PFPLCL, PFPLCN, PFPLCG,& - & PFPEVPSL,PFPEVPSN,PFPEVPSG,PFPEVPCL,PFPEVPCN,PFPEVPCG,& - & PFPFPSL, PFPFPSN, PFPFPSG, PFPFPCL ,PFPFPCN,& - & PFCQLNG, PFCQING, PFCQRNG, PFCQSNG, PFCQGNG,& - & PFCQNG , PFRMH , ZFRMQ , PFRSO , PFRTH ,& - & PSTRCU , PSTRCV , PSTRDU , PSTRDV ,& - & PSTRTU , PSTRTV , PSTRMU , PSTRMV ,& - & PDIFCQLC,PDIFCQIC,PFIMCC,& - & PFEDQLC, PFEDQIC, PFEDQRC, PFEDQSC, PFCNEGQLC,PFCNEGQIC,PFCNEGQRC,PFCNEGQSC,& - & ZFTKE , ZFTKEI, ZFEFB1 , ZFEFB2 , ZFEFB3 , PXYB9(1,1,YYTXYB9_PHY%M_DELP) ,& - & PXYB9(1,1,YYTXYB9_PHY%M_RDELP), PHIF9 , PRCP9(1,1,YYTRCP9%M_CP),& - & ZT9U,ZT9V,ZT9T,& - & ZPQ9,ZPI9,ZPL9,& - & ZPLCONV,ZPICONV,ZPRCONV,ZPSCONV,& - & ZPR9,ZPS9,ZPG9,& - & ZCPS , ZRRT9,& - & PFHSCL ,PFHSCN,PFHSSL,PFHSSN,PFHSSG,& - & PFHPCL ,PFHPCN,PFHPCG,PFHPSL,PFHPSN,PFHPSG,& - & ZFHP ,ZFP , PFEPFP, PFCMPCQ, PFCMPSN, PFCMPSL,& - & PTENDU , PTENDV , ZTENDU, ZTENDV, ZTENDH ,& - & ZPTENDQ1,ZPTENDI1,ZPTENDL1,& - & ZPTENDLCONV1,ZPTENDICONV1,& - & ZPTENDRCONV1,ZPTENDSCONV1,& - & ZPTENDR1,ZPTENDS1,ZPTENDG1,ZPTENDTKE1,& - & ZPTENDEFB11,ZPTENDEFB21,ZPTENDEFB31,& - & ZTENDEXT,YDDDH) - ENDIF - - IF ( L3MT.OR.LSTRAPRO.OR.(NDPSFI==1)) THEN -! PFEPFP was ZFEPFP in CPTEND_NEW, before, ZFEPFP still in CPFHPFS - DO JLEV= 0, NFLEVG - DO JROF = 1, NPROMA - PFEPFP(JROF,JLEV) = 0.0_JPRB - PFCMPCQ(JROF,JLEV) = 0.0_JPRB - PFCMPSN(JROF,JLEV) = 0.0_JPRB - PFCMPSL(JROF,JLEV) = 0.0_JPRB - ENDDO - ENDDO - ENDIF - - ENDIF ! LTWOTL - - - -! 2.7.1 Diagnostics on physical tendencies -! ---------------------------------- - - IF (.NOT.LDCONFX) THEN - IF ((GCHETN%LFREQD).OR.(GCHETN%LCOORD).OR.(GCHETN%LPROFV)) THEN - IF (LTWOTL) THEN - CALL CPCHET( YDRIP,YDPHY, NPROMA, KST, KEND, NFLEVG, NSTEP,& - & PFHSCL , PFHSCN , PFHSSL , PFHSSN ,& - & PFHPCL , PFHPCN , PFHPSL , PFHPSN ,& - & PDIFCQ , PDIFCQI, PDIFCQL, PDIFCS ,& - & PDIFTQ , PDIFTQI, PDIFTQL, PDIFTS ,& - & PFCCQL , PFCCQN , PFCSQL , PFCSQN ,& - & PFPLCL , PFPLCN , PFPLSL , PFPLSN ,& - & PFPFPSL, PFPFPSN, PFPFPCL, PFPFPCN,& - & PFPEVPSL,PFPEVPSN,PFPEVPCL,PFPEVPCN,& - & PFRMH , ZFRMQ , PFRSO , PFRTH ,& - & PSTRCU , PSTRCV , PSTRDU , PSTRDV ,& - & PSTRTU , PSTRTV , PSTRMU , PSTRMV ,& - & PXYB0(1,1,YYTXYB0_PHY%M_RDELP), PRCP0(1,1,YYTRCP0%M_CP),& - & ZT0T,ZPQ,ZPI,ZPL,& - & ZCPS , ZRRT0 , PQS ,& - & PTENDU , PTENDV , ZTENDH ,& - & ZPTENDQ1,ZPTENDI1,ZPTENDL1,& - & ZPTENDR1,ZPTENDS1,& - & YDGSGEOM%GEMU,YDGSGEOM%GELAM, PHI0 , PHIF0 ) - ELSE - CALL CPCHET( YDRIP,YDPHY, NPROMA, KST, KEND, NFLEVG, NSTEP,& - & PFHSCL , PFHSCN , PFHSSL , PFHSSN ,& - & PFHPCL , PFHPCN , PFHPSL , PFHPSN ,& - & PDIFCQ , PDIFCQI, PDIFCQL, PDIFCS ,& - & PDIFTQ , PDIFTQI, PDIFTQL, PDIFTS ,& - & PFCCQL , PFCCQN , PFCSQL , PFCSQN ,& - & PFPLCL , PFPLCN , PFPLSL , PFPLSN ,& - & PFPFPSL, PFPFPSN, PFPFPCL, PFPFPCN,& - & PFPEVPSL,PFPEVPSN,PFPEVPCL,PFPEVPCN,& - & PFRMH , ZFRMQ , PFRSO , PFRTH ,& - & PSTRCU , PSTRCV , PSTRDU , PSTRDV ,& - & PSTRTU , PSTRTV , PSTRMU , PSTRMV ,& - & PXYB9(1,1,YYTXYB9_PHY%M_RDELP), PRCP9(1,1,YYTRCP9%M_CP),& - & ZT9T,ZPQ9,ZPI9,ZPL9,& - & ZCPS , ZRRT9 , PQS ,& - & PTENDU , PTENDV , ZTENDH ,& - & ZPTENDQ1,ZPTENDI1,ZPTENDL1,& - & ZPTENDR1,ZPTENDS1,& - & YDGSGEOM%GEMU,YDGSGEOM%GELAM, PHI9 , PHIF9 ) - ENDIF - ENDIF - - IF (GCHETN%LPROFV)& - & CALL PROFILECHET(YDGEOMETRY,YDSURF,YDDPHY,YDRIP,YDMODEL%YRML_PHY_MF,& - & KEND,& - & YDGSGEOM%GELAM,YDGSGEOM%GEMU,& - & YDGSGEOM%GM,ZMU0,YDOROG%OROG,POROGL,POROGM,YDGSGEOM%RCORI,YDCSGEOM%RATATH,YDCSGEOM%RATATX,& - & ZVFLSM, ZVVARG, ZVVSAB, ZVFALBF,& - & ZVFALBSF, ZVFEMISF, ZVVD2, ZVVIVEG,& - & ZVVLAI, PCT, ZVFZ0F, ZVVZ0H, ZVFZ0RLF,& - & ZVFGETRL, ZVFVRLAN, ZVFVRLDI, ZVVRSMIN,& - & ZVFVEG, ZVVHV, ZVASEA, ZVALAN,& - & ZVASOO, ZVADES, ZVCVC1,& - & ZT0SP,ZT0SPL,ZT0SPM,& - & ZT0T,ZT0TL,ZT0TM,& - & ZPQ,ZPQL,ZPQM,& - & ZT0U,ZT0V,ZT0VOR,ZT0DIV, ZCVGQ, ZLCVQ,& - & ZRRT9, ZSBT9, ZRRFC9, ZRRW9,& - & ZRRIC9, ZSBQ9, ZSBTL9, ZSGF9,& - & PDIFCQ, PDIFCQI, PDIFCQL, PDIFCS, PDIFTQ, PDIFTQI, PDIFTQL,& - & PDIFTS, PFCCQL, PFCCQN, PFCSQL, PFCSQN, PFCQNG, PFCQING,& - & PFCQLNG, PFPLCL, PFPLCN, PFPLSL, PFPLSN, PFRSO, PFRTH,& - & PSTRCU, PSTRCV, PSTRDU, PSTRDV, PSTRTU, PSTRTV, PSTRMU, PSTRMV,& - & PFRMH, PFCHOZ, PNEB, PQICE, PQLI, PRH,& - & PFCS, PFCLL, PFCLN, PFEVL, PFEVN, PFEVV, PFTR, PFLWSP, PFONTE,& - & PFGEL, PFGELS, PFRSODS, PFRSOPS, PFRSOPT, PFRTHDS,& - & PQS, PRUISL, PRUISP, PRUISS,& - & PUCLS, PVCLS, PTCLS, PQCLS, PRHCLS,& - & PCLCT, PCLCH, PCLCM, PCLCL, PCLCC,& - & ZFPLCH, ZFPLSH,& - & ZVHTCCH, ZVHSCCH, ZVHBCCH, ZVHPBLH ) - - ENDIF - -ENDIF - -! 2.8 Modification of vertical velocities -! by some physics output when required. -! ------------------------------------- - -IF (LLDIAB.AND.(.NOT.LSIMPH)) THEN - - ! * MODIFICATION DE LA VITESSE VERTICALE ET DE LA TENDANCE DE - ! PRESSION DE SURFACE SI NDPSFI=1 ( MASSE VARIABLE ). - ! Ajout de la physique dans l'equation de continuite/Add physics - ! in continuity equation. - - IF (NDPSFI == 1) THEN - IF (LSLAG .AND. LTWOTL) THEN - CALL CPMVVPS(YDVAB,NPROMA,KST,KEND,NFLEVG,PDTPHY,& - & ZFP,PRE0(1,NFLEVG),PFEVL,PFEVN,& - & PCTY0(1,0,YYTCTY0%M_EVEL),PCTY0(1,0,YYTCTY0%M_PSDVBC),PB1(1,MSLB1SP9)) - ELSEIF (LSLAG .AND. (.NOT.LTWOTL)) THEN - CALL CPMVVPS(YDVAB,NPROMA,KST,KEND,NFLEVG,PDTPHY,& - & ZFP,PRE9(1,NFLEVG),PFEVL,PFEVN,& - & PCTY0(1,0,YYTCTY0%M_EVEL),PCTY0(1,0,YYTCTY0%M_PSDVBC),PB1(1,MSLB1SP9)) - ELSE - CALL CPMVVPS(YDVAB,NPROMA,KST,KEND,NFLEVG,PDTPHY,& - & ZFP,PRE9(1,NFLEVG),PFEVL,PFEVN,& - & PCTY0(1,0,YYTCTY0%M_EVEL),PCTY0(1,0,YYTCTY0%M_PSDVBC),ZT1SP) - ENDIF - ENDIF - -ENDIF - -! 2.9 Computation of evolution of T, u, v and Q. -! ------------------------------------------ - -! * Calculation of IPGFL, since the old pointers -! MSLB1[X]9 (=MSLB1GFL9+IP[X]) do not exist any longer in PTRSLB1. - -! usefull pointer for new version of cputqy - -DO JGFL=1,NUMFLDS - IF ((YCOMP(JGFL)%MP1 > 0) .AND. (YCOMP(JGFL)%MP_SL1 > 0)) THEN - IPGFL(YCOMP(JGFL)%MP1) = (YCOMP(JGFL)%MP_SL1-1)*(NFLEVG+2*NFLSUL) - ENDIF -ENDDO - -! ALARO does not respect the coding rules, tendency of pseudo-TKE is computed in APLPAR and not -! in CPTEND_NEW. To use the new version of cputqy it is then necessary to write it in GFL tendencies array. -! This memory transfer is not necessary, please respect coding rules to avoid it. - -! Not necessary for intflex: already done in aplpar2intflex -IF (.NOT.(LINTFLEX.AND.(.NOT.LDCONFX))) THEN - IF (LPTKE) THEN - DO JLEV=1,NFLEVG - DO JROF=KST,KEND - ZPTENDTKE1(JROF,JLEV) = ZTENDPTKE(JROF,JLEV) - ENDDO - ENDDO - ENDIF - ! Extra-GFL - IF(LMDUST.AND.(NGFL_EXT/=0)) THEN - DO JGFL=1, NGFL_EXT - DO JLEV=1,NFLEVG - DO JROF=KST,KEND - ZTENDGFL(JROF,JLEV,YEXT(JGFL)%MP1) = ZTENDEXT(JROF,JLEV,JGFL)+&! turbulent tendency - & ZTENDEXT_DEP(JROF,JLEV,JGFL) ! moist tendency -! moist tendency -! moist tendency -! moist tendency -! moist tendency -! moist tendency -! moist tendency -! moist tendency -! moist tendency - ENDDO - ENDDO - ENDDO - ENDIF -ENDIF - -! ky: non-zero option not yet coded for the time being. -ZTENDD=0.0_JPRB - -IF (LLDIAB.AND.(.NOT.LSIMPH).AND.(.NOT.LMPA)) THEN - ! Calcul de T , Q et du Vent a l'instant 1 - - CALL CPUTQY(YDGEOMETRY%YRDIMV,YDGMV,YGFL,YDPTRSLB1,YDPHY,NPROMA,KST,KEND,NFLEVG,PDTPHY,IPGFL,& - & ISLB1T9,ISLB1U9,ISLB1V9,ISLB1VD9,ISLB1GFL9,& - & ZTENDH, ZTENDT, PTENDU, PTENDV, ZTENDU, ZTENDV, ZTENDD, ZTENDGFL,& - & PRCP0(1,1,YYTRCP0%M_CP),PXYB0(1,1,YYTXYB0_PHY%M_DELP),ZT0T,ZT0U,ZT0V,& - & PRCP9(1,1,YYTRCP9%M_CP),PXYB9(1,1,YYTXYB9_PHY%M_DELP),ZT9T,ZT9U,ZT9V,& - & PB1, PGMVT1, PGFLT1,& - & PFDIS) - -ENDIF - -! 2.9a Evolution of precipitation fluxes -! ------------------------------------------ - -IF(LNEBN.OR.LNEBR.OR.LRRGUST) THEN - DO JLEV=1,NFLEVG - DO JROF=KST,KEND - ZPCPF1(JROF,JLEV)=ZFPLCH(JROF,JLEV) - ENDDO - ENDDO -ENDIF -IF(LRRGUST) THEN - DO JLEV=1,NFLEVG - DO JROF=KST,KEND - ZPSPF1(JROF,JLEV)=ZFPLSH(JROF,JLEV) - ENDDO - ENDDO -ENDIF - -! 2.9b Prognostic convection etc. -! -------------------------- - -! TRANSFER NOT ADVECTED VARIABLES INTO PGFLT1 -IF (LCVPRO.OR.LGPCMT) THEN - IF (.NOT.YUAL%LADV) THEN - ZPUAL1(KST:KEND,1:NFLEVG)=ZPUAL(KST:KEND,1:NFLEVG) - ZPUOM1(KST:KEND,1:NFLEVG)=ZPUOM(KST:KEND,1:NFLEVG) - ENDIF - IF (LCDDPRO) THEN - IF (.NOT.YDAL%LADV) THEN - ZPDAL1(KST:KEND,1:NFLEVG)=ZPDAL(KST:KEND,1:NFLEVG) - ZPDOM1(KST:KEND,1:NFLEVG)=ZPDOM(KST:KEND,1:NFLEVG) - ENDIF - ENDIF -ENDIF -IF (YUNEBH%LACTIVE.AND..NOT.YUNEBH%LADV)THEN - ZPUNEBH1(KST:KEND,1:NFLEVG)=ZPUNEBH(KST:KEND,1:NFLEVG) -ENDIF -IF (YUEN%LACTIVE.AND..NOT.YUEN%LADV) THEN - ZPUEN1(KST:KEND,1:NFLEVG)=ZPUEN(KST:KEND,1:NFLEVG) -ENDIF -IF (YTTE%LACTIVE.AND..NOT.YTTE%LADV) THEN - ZPTTE1(KST:KEND,1:NFLEVG)=ZPTTE(KST:KEND,1:NFLEVG) -ENDIF -IF (YMXL%LACTIVE.AND..NOT.YMXL%LADV) THEN - ZPMXL1(KST:KEND,1:NFLEVG)=ZPMXL(KST:KEND,1:NFLEVG) -ENDIF -IF (YSHTUR%LACTIVE.AND..NOT.YSHTUR%LADV) THEN - ZPSHTUR1(KST:KEND,1:NFLEVG)=ZPSHTUR(KST:KEND,1:NFLEVG) -ENDIF -IF (YFQTUR%LACTIVE.AND..NOT.YFQTUR%LADV) THEN - ZPFQTUR1(KST:KEND,1:NFLEVG)=ZPFQTUR(KST:KEND,1:NFLEVG) -ENDIF -IF (YFSTUR%LACTIVE.AND..NOT.YFSTUR%LADV) THEN - ZPFSTUR1(KST:KEND,1:NFLEVG)=ZPFSTUR(KST:KEND,1:NFLEVG) -ENDIF -IF (YRKTH%LACTIVE)THEN - ZPRKTH1(KST:KEND,1:NFLEVG)=ZPRKTH(KST:KEND,1:NFLEVG) -ENDIF -IF (YRKTQV%LACTIVE)THEN - ZPRKTQV1(KST:KEND,1:NFLEVG)=ZPRKTQV(KST:KEND,1:NFLEVG) -ENDIF -IF (YRKTQC%LACTIVE)THEN - ZPRKTQC1(KST:KEND,1:NFLEVG)=ZPRKTQC(KST:KEND,1:NFLEVG) -ENDIF - -! 2.10 Surface variables. -! ------------------ - -IF (LLDIAB.AND.LMPHYS.AND.(.NOT.LMPA).AND.(.NOT.LSFORCS)) THEN - - IF (.NOT.LMSE) THEN - DO JLEV=0,NFLEVG - DO JROF=KST,KEND - ZFPLSN(JROF,JLEV)=PFPLSN(JROF,JLEV)+PFPLSG(JROF,JLEV) - ENDDO - ENDDO - CALL CPTENDS( YDMODEL%YRML_PHY_MF, NPROMA, KST, KEND, NFLEVG, YSP_SBD%NLEVS, PDTPHY,& - & PFPLCL, PFPLSL, PFPLCN, ZFPLSN,& - & PFRSO, PFRTH,& - & ZSGA1,PCT, ZC1, ZC2,& - & PFCHSP, PFCLL, PFCLN, PFCS,& - & ZFEVI,PFEVL, PFEVN,& - & PFEVV, PFGEL, PFGELS, PFLWSP, PFONTE, PFTR,& - & ZVFLSM, ZSGR1,& - & PRUISL, PRUISP, PRUISS, ZSGF1, ZVEG,& - & ZTDTS, ZTDTP, ZTDWS, ZTDWSI, ZTDWP, ZTDWPI, ZTDWL,& - & ZTDSNS, ZTDALBNS, ZTDRHONS) - - CALL CPWTS(YDSURF, YDMODEL%YRML_AOC%YRMCC,YDPHY,YDMODEL%YRML_PHY_MF%YRPHY1, NPROMA, KST,KEND, YSP_SBD%NLEVS, PDTPHY,& - & ZTDTS, ZTDTP, ZTDWS, ZTDWSI, ZTDWP, ZTDWPI, ZTDWL,& - & ZTDSNS, ZTDALBNS, ZTDRHONS,& - & ZVPTPC,ZVPWPC,ZVFLSM,ZVVIVEG,& - & ZRRT1,ZSBT1,ZRRW1,& - & ZRRIC1,& - & ZSBQ1,ZSBTL1,ZRRFC1,& - & ZSGF1,ZSGA1,ZSGR1) - ELSE - IF (LLXFUMSE) THEN - DO JROF=KST,KEND - ZRRT0(JROF)=PGPAR(JROF,MVTS) - ENDDO - ELSE - DO JROF=KST,KEND - ZRRT1(JROF)=PGPAR(JROF,MVTS) - ENDDO - ENDIF - ENDIF - IF(LNUDG)THEN - - ! * Calculation of IPQ since the old pointers - ! MSLB1[X]9 (=MSLB1GFL9+IP[X]) do not exist any longer in PTRSLB1. - IPQ=(YQ%MP_SL1-1)*(NFLEVG+2*NFLSUL) - - CALL CPNUDG ( NPROMA, KST,KEND, NFNUDG, NFLEVG, IBLK,& - & XPNUDG,& - & ZVFNUDM,& - & ZRRT1,ZRRW1,& - & ZSBQ1,ZSGF1,& - & PB1(1,ISLB1T9+1-NFLSA),PB1(1,ISLB1GFL9+IPQ+1-NFLSA),& - & PB1(1,ISLB1U9+1-NFLSA),PB1(1,ISLB1V9+1-NFLSA),& - & PB1(1,MSLB1SP9),& - & ZT0T,ZPQ,ZT0U,& - & ZT0V,PRE0(1,NFLEVG),YDGSGEOM%GM,ZVFLSM) - ENDIF -ENDIF - -! 2.11 Evolution of CVV (GY) -! --------------------- - -IF(LCVPGY) THEN - DO JLEV=1,NFLEVG - DO JROF=KST,KEND - ZPCVV1(JROF,JLEV)=ZPCVV(JROF,JLEV) - ENDDO - ENDDO -ENDIF - -! ------------------------------------------------------------------- - -!* 3. Simplified physics. -! ------------------- - -! 3.1 Preliminary calculations necessary for simplified physics. -! ---------------------------------------------------------- - -IF (LSIMPH) THEN - - ! * read grid-point transmission coefficients for simplified physics. - IF (LRAYSP.AND.LRCOEF.AND.(NSTEP > 1.OR.LTLADDIA)) THEN - IFIELDSS=NG3SR*NFLEVG - CALL RDRADCOEF(YDGEOMETRY,YDRCOEF,KST,KEND,KSTGLO,IFIELDSS,ZRADTC,ZAC_HC) - ENDIF - -ENDIF - -! 3.2 Simplified physics. -! ------------------- - -IF (LSIMPH) THEN - - TSPHY = MAX(PDTPHY,1.0_JPRB) - - IF (LTWOTL) THEN - - CALL APLPASSH (YDPHY,YDMODEL%YRML_PHY_MF%YRPHY1,KST,KEND,NPROMA,NFLEVG,& - & PRE0,ZPQ,& - & ZSGF1,ZRRT1,ZRRW1,& - & ZVFLSM,ZVFVEG,& - & ZQS1) - - IF (.NOT.LLDIAB) THEN - CALL APLPASSH (YDPHY,YDMODEL%YRML_PHY_MF%YRPHY1,KST,KEND,NPROMA,NFLEVG,& - & PRE0,ZPQ,& - & ZSGF0,ZRRT0,ZRRW0,& - & ZVFLSM,ZVFVEG,& - & PQS) - ENDIF - - CALL APLPARS(YDGEOMETRY,YDRCOEF,YDMODEL%YRML_PHY_MF,KST,KEND,NPROMA,1,NFLEVG,NTSSG,NSTEP,& - & PHI0,PRE0,PHIF0,PRE0F,PXYB0(1,1,YYTXYB0_PHY%M_DELP),PXYB0(1,1,YYTXYB0_PHY%M_RDELP),& - & ZT0U,ZT0V,ZT0T,ZPQ,PRCP0(1,1,YYTRCP0%M_CP),ZCVGQ,& - & ZSGF0,ZRRT0,PQS,& - & ZRRT1,ZQS1,& - & ZVFGETRL,ZVFLSM,& - & ZVFZ0F,ZVFVRLAN,ZVFVRLDI,& - & ZVFALBF,ZMU0,YDGSGEOM%GM,& - & ZAC_HC,ZMCOR,& - & ZMRAB3C,ZMRAB3N,& - & ZMRAB4C,ZMRAB4N,& - & ZMRAB6C,ZMRAB6N,& - & ZMRAT1C,ZMRAT1N,& - & ZMRAT2C,ZMRAT2N,& - & ZMRAT3C,ZMRAT3N,& - & ZMRAT4C,ZMRAT4N,& - & ZMRAT5C,ZMRAT5N,& - & PDIFCQ,PDIFCS,PDIFTQ,PDIFTS,& - & PFCCQL,PFCCQN,PFCSQL,PFCSQN,& - & PFPLCL,PFPLCN,PFPLSL,PFPLSN,PFRSO,PFRTH,& - & PSTRCU,PSTRCV,PSTRDU,PSTRDV,PSTRTU,PSTRTV,& - & PSTRMU,PSTRMV,PFRMH) - - ELSE - - CALL APLPASSH (YDPHY,YDMODEL%YRML_PHY_MF%YRPHY1,KST,KEND,NPROMA,NFLEVG,& - & PRE0,ZPQ,& - & ZSGF1,ZRRT1,ZRRW1,& - & ZVFLSM,ZVFVEG,& - & ZQS1) - - IF (.NOT.LLDIAB) THEN - CALL APLPASSH (YDPHY,YDMODEL%YRML_PHY_MF%YRPHY1,KST,KEND,NPROMA,NFLEVG,& - & PRE9,ZPQ9,& - & ZSGF0,ZRRT9,ZRRW9,& - & ZVFLSM,ZVFVEG,& - & PQS) - ENDIF - - CALL APLPARS(YDGEOMETRY,YDRCOEF,YDMODEL%YRML_PHY_MF,KST,KEND,NPROMA,1,NFLEVG,NTSSG,NSTEP,& - & PHI9,PRE9,PHIF9,PRE9F,PXYB9(1,1,YYTXYB9_PHY%M_DELP),PXYB9(1,1,YYTXYB9_PHY%M_RDELP),& - & ZT9U,ZT9V,ZT9T,ZPQ9,PRCP9(1,1,YYTRCP9%M_CP),ZCVGQ,& - & ZSGF0,ZRRT9,PQS,& - & ZRRT1,ZQS1,& - & ZVFGETRL,ZVFLSM,& - & ZVFZ0F,ZVFVRLAN,ZVFVRLDI,& - & ZVFALBF,ZMU0,YDGSGEOM%GM,& - & ZAC_HC,ZMCOR,& - & ZMRAB3C,ZMRAB3N,& - & ZMRAB4C,ZMRAB4N,& - & ZMRAB6C,ZMRAB6N,& - & ZMRAT1C,ZMRAT1N,& - & ZMRAT2C,ZMRAT2N,& - & ZMRAT3C,ZMRAT3N,& - & ZMRAT4C,ZMRAT4N,& - & ZMRAT5C,ZMRAT5N,& - & PDIFCQ,PDIFCS,PDIFTQ,PDIFTS,& - & PFCCQL,PFCCQN,PFCSQL,PFCSQN,& - & PFPLCL,PFPLCN,PFPLSL,PFPLSN,PFRSO,PFRTH,& - & PSTRCU,PSTRCV,PSTRDU,PSTRDV,PSTRTU,PSTRTV,& - & PSTRMU,PSTRMV,PFRMH) - - ENDIF - -ENDIF - -! 3.3 Store the model trajectory at t-dt (leap-frog) or t (sl2tl). -! ------------------------------------------------------------ - -IF (LTRAJPS) THEN - IF (LTWOTL) THEN - PTRAJ_PHYS%PQSSMF(KST:KEND)=PQS(KST:KEND) - PTRAJ_PHYS%PTSMF(KST:KEND) =ZRRT0(KST:KEND) - PTRAJ_PHYS%PSNSMF(KST:KEND)=ZSGF0(KST:KEND) - ELSE - CALL WRPHTRAJM(YDGEOMETRY,YDSIMPHL,KST,KEND,PTRAJ_PHYS,& - & ZT9U,ZT9V,ZT9T,& - & ZPQ9,ZPL9,ZPI9,ZT9SP) - - PTRAJ_PHYS%PQSSMF(KST:KEND)=PQS(KST:KEND) - PTRAJ_PHYS%PTSMF(KST:KEND) =ZRRT9(KST:KEND) - PTRAJ_PHYS%PSNSMF(KST:KEND)=ZSGF9(KST:KEND) - ENDIF - IF (LPRTTRAJ.AND.PTRAJ_PHYS%LASTCHUNK) WRITE(NULOUT,*)'GREPTRAJ STORE TRAJ_PHYS in MF_PHYS' -ENDIF - -! 3.4 Computation of tendencies T,u,v and Q. -! -------------------------------------- - -IF (LSIMPH) THEN - - TSPHY = MAX(PDTPHY,1.0_JPRB) - - IF (LTWOTL) THEN - CALL CPTENDSM (YDPHY,NPROMA,KST,KEND,NFLEVG,& - & PDIFCQ,PDIFCS,PDIFTQ,PDIFTS,& - & PFCCQL,PFCCQN,PFCSQL,PFCSQN,& - & PFPLCL,PFPLCN,PFPLSL,PFPLSN,& - & PFRSO,PFRTH,& - & PSTRCU,PSTRCV,PSTRDU,PSTRDV,& - & PSTRTU,PSTRTV,& - & PSTRMU,PSTRMV,PFRMH,& - & PXYB0(1,1,YYTXYB0_PHY%M_RDELP),PHIF0,& - & ZT0U,ZT0V,ZT0T,ZPQ,& - & PQS,ZRRT0,YDOROG%OROG,& - & PTENDU,PTENDV,ZTENDH,ZTENDQ,& - & PFHPCL,PFHPCN,PFHPSL,PFHPSN,& - & PFHSCL,PFHSCN,PFHSSL,PFHSSN) - ELSE - CALL CPTENDSM (YDPHY,NPROMA,KST,KEND,NFLEVG,& - & PDIFCQ,PDIFCS,PDIFTQ,PDIFTS,& - & PFCCQL,PFCCQN,PFCSQL,PFCSQN,& - & PFPLCL,PFPLCN,PFPLSL,PFPLSN,& - & PFRSO,PFRTH,& - & PSTRCU,PSTRCV,PSTRDU,PSTRDV,& - & PSTRTU,PSTRTV,& - & PSTRMU,PSTRMV,PFRMH,& - & PXYB9(1,1,YYTXYB9_PHY%M_RDELP),PHIF9,& - & ZT9U,ZT9V,ZT9T,ZPQ9,& - & PQS,ZRRT9,YDOROG%OROG,& - & PTENDU,PTENDV,ZTENDH,ZTENDQ,& - & PFHPCL,PFHPCN,PFHPSL,PFHPSN,& - & PFHSCL,PFHSCN,PFHSSL,PFHSSN) - ENDIF - -ENDIF - -! 3.5 Computation of evolution of T, u, v and Q. -! ------------------------------------------ - -IF (LSIMPH) THEN - - CALL CPUTQYS(YDGEOMETRY%YRDIMV,YDGMV,YGFL,YDPTRSLB1,& - & YDSTOPH, YDPHY2, & - & NPROMA,KST,KEND,NFLEVG,PDTPHY,IPGFL,& - & ISLB1U9,ISLB1V9,ISLB1T9,ISLB1GFL9,& - & ZTENDH, ZTENDQ, PTENDU, PTENDV,& - & PFORCEU, PFORCEV, PFORCET, PFORCEQ, & - & PRCP0(1,1,YYTRCP0%M_CP),PXYB0(1,1,YYTXYB0_PHY%M_DELP),ZT0T,ZT0U,ZT0V,& - & PRCP9(1,1,YYTRCP9%M_CP),PXYB9(1,1,YYTXYB9_PHY%M_DELP),ZT9T,ZT9U,ZT9V,& - & PB1, PGMVT1, PGFLT1,& - & PFDIS) - -ENDIF - -! ------------------------------------------------------------------ - -!* 4. AROME physics. -! --------------- - -IF (LMPA) THEN - - ! 4.1 CALL APL_AROME - ! -------------- - - IPTR(:) = 0 ! means no fields defined in ZGFLTENDR at start ; > 0 means defined. - - ! * ZTENDR - IRR=1 - IPTR_CONT = IRR - IF (YQ%LACTIVE) THEN - IPTR(YQ%MP1) = IPTR_CONT ; IPTR_CONT = IPTR_CONT+1 - ENDIF - IF (YL%LACTIVE) THEN - IPTR(YL%MP1) = IPTR_CONT ; IPTR_CONT = IPTR_CONT+1 - ENDIF - IF (YR%LACTIVE) THEN - IPTR(YR%MP1) = IPTR_CONT ; IPTR_CONT = IPTR_CONT+1 - ENDIF - IF (YI%LACTIVE) THEN - IPTR(YI%MP1) = IPTR_CONT ; IPTR_CONT = IPTR_CONT+1 - ENDIF - IF (YS%LACTIVE) THEN - IPTR(YS%MP1) = IPTR_CONT ; IPTR_CONT = IPTR_CONT+1 - ENDIF - IF (YG%LACTIVE) THEN - IPTR(YG%MP1) = IPTR_CONT ; IPTR_CONT = IPTR_CONT+1 - ENDIF - IF (YH%LACTIVE) THEN - IPTR(YH%MP1) = IPTR_CONT ; IPTR_CONT = IPTR_CONT+1 - ENDIF - - ! * ZTENDTKE - IF (YTKE%LACTIVE) THEN - IPTR(YTKE%MP1) = IPTR_CONT ; IPTR_CONT = IPTR_CONT+1 - IPTRTKE=IPTR(YTKE%MP1) - ELSE - IPTRTKE=0 - ENDIF - ! * ZTENDEFB1 ZTENDEFB2 ZTENDEFB3 - IF (YEFB1%LACTIVE) THEN - IPTR(YEFB1%MP1) = IPTR_CONT ; IPTR_CONT = IPTR_CONT+1 - IEFB1 = IPTR(YEFB1%MP1) - ELSE - IEFB1 = 0 - ENDIF - IF (YEFB2%LACTIVE) THEN - IPTR(YEFB2%MP1) = IPTR_CONT ; IPTR_CONT = IPTR_CONT+1 - IEFB2 = IPTR(YEFB2%MP1) - ELSE - IEFB2 = 0 - ENDIF - IF (YEFB3%LACTIVE) THEN - IPTR(YEFB3%MP1) = IPTR_CONT ; IPTR_CONT = IPTR_CONT+1 - IEFB3 = IPTR(YEFB3%MP1) - ELSE - IEFB3 = 0 - ENDIF - - ! * ZTENDEXT - IF (NGFL_EXT > 0) THEN - DO JGFL=1,NGFL_EXT - IF (YEXT(JGFL)%LACTIVE) THEN - IPTR(YEXT(JGFL)%MP1)=IPTR_CONT - IPTR_CONT = IPTR_CONT+1 - ENDIF - ENDDO - IPTREXT=IPTR(YEXT(1)%MP1) - ELSE - IPTREXT=0 - ENDIF - - ! * LIMA - IF (NLIMA > 0) THEN - DO JGFL=1,NLIMA - IF (YLIMA(JGFL)%LACTIVE) THEN - IPTR(YLIMA(JGFL)%MP1)=IPTR_CONT - IPTR_CONT = IPTR_CONT+1 - ENDIF - ENDDO - IPTRLIMA=IPTR(YLIMA(1)%MP1) - ELSE - IPTRLIMA=0 - ENDIF - - - ! If an incorrect address is used, then the initialization below will detect it : - ZTENDGFLR(:,:,0)=HUGE(1._JPRB) - - IF (LMFSHAL .AND. CMF_UPDRAFT=='DUAL') THEN - IMAXDRAFT=3 - ELSE - IMAXDRAFT=0 - ENDIF - - IF(LTWOTL) THEN - CALL APL_AROME(YDGEOMETRY,YDSURF,YDCFU,YDXFU,YDMODEL, KBL, KGPCOMP, KST , KEND , NPROMA ,& - & 1 , NFLEVG , NSTEP ,& - & IMAXDRAFT, NTSSG, YDCFU%NFRRC, PDTPHY, LLXFUMSE,YDCSGEOM%RINDX,YDCSGEOM%RINDY,& - & YDGSGEOM%GEMU,YDGSGEOM%GELAM,YDOROG%OROG,YDGSGEOM%GM,& - & ZMU0,ZMU0LU,ZMU0M,ZMU0N,& - & YDGSGEOM%GECLO,YDGSGEOM%GESLO,ZVCVC1,ZVFLSM,& - & ZVASEA , ZVALAN ,ZVASOO , ZVADES ,& - & ZVASUL , ZVAVOL ,& - & PGP2DSDT, ZGP2DSPP, & - & PHI0,PHIF0,PREPHY0,PREPHY0F,PXYB0(1,1,YYTXYB0_PHY%M_RDELP),PXYB0(1,1,YYTXYB0_PHY%M_DELP),& - & ZT0T,ZPQ,& - & PRCP0(1,1,YYTRCP0%M_CP),PRCP0(1,1,YYTRCP0%M_R),PXYB0(1,1,YYTXYB0_PHY%M_ALPH),PXYB0(1,1,YYTXYB0_PHY%M_LNPR),& - & ZPL,ZPI,ZPR,ZPS,& - & ZPG,ZPH,ZP1LIMA,ZPTKE,& - & ZPEFB1,ZPEFB2,ZPEFB3,& - & ZPSRC,ZP1EXT,& - & ZT0U,ZT0V, PWT0,ZEDR,& - & PFORCEU,PFORCEV,PFORCET,PFORCEQ,& - & PGPAR,PEMTD,PEMTU,PTRSW,& - & PGDEOSI,PGUEOSI,PGMU0,PGMU0_MIN,PGMU0_MAX,& - & PGDEOTI,PGDEOTI2,PGUEOTI,PGUEOTI2,PGEOLT,PGEOXT,& - & PGRPROX,PGMIXP,PGFLUXC,PGRSURF,& - & PGRADH_PHY,& - ! outputs - & ZPLRAD1,ZPIRAD1,PRH,ZPA1,ZPSRC1,& - & ZTENDT, ZTENDGFLR(1,1,IRR), PTENDU, PTENDV,ZTENDW, ZTENDGFLR(1,1,IPTRLIMA), ZTENDGFLR(1,1,IPTRTKE),& - & ZTENDGFLR(1,1,IEFB1),ZTENDGFLR(1,1,IEFB2),ZTENDGFLR(1,1,IEFB3),& - & ZTENDGFLR(1,1,IPTREXT),& - & PFRTH, PFRSO, PFRTHDS, PFRSODS, PFRSOPS, PFRSDNI, PFRSOPT, PFRTHC, PFRSOC,& - & ZVFALBF, ZVFEMISF,ZP1EZDIAG,& - & PCLCH,PCLCL,PCLCM,PCLCT,PFPLSL,PFPLSN,PFPLSG,PFPLSHL,PSTRTU,PSTRTV,& - & PFCS,PFCLL,PFCLN,PUCLS,PVCLS,PNUCLS,PNVCLS,PTCLS,PQCLS,PRHCLS,PUGST,PVGST,& - & PFEVL,PFEVN,PCLPH,ZSGF1,ZSGR1,ZVDSUND,& - & PDIAGH,PFLASH,ZSFOSFO1,PTPWCLS, ZDPRECIPS, ZDPRECIPS2,& - & PVISICLD, PVISIHYDRO, PMXCLWC,YLPROCSET,YDDDH ) - ELSE - CALL APL_AROME(YDGEOMETRY,YDSURF,YDCFU,YDXFU,YDMODEL, KBL, KGPCOMP, KST , KEND , NPROMA ,& - & 1 , NFLEVG , NSTEP ,& - & IMAXDRAFT, NTSSG, YDCFU%NFRRC, PDTPHY, LLXFUMSE,YDCSGEOM%RINDX,YDCSGEOM%RINDY,& - & YDGSGEOM%GEMU,YDGSGEOM%GELAM,YDOROG%OROG,YDGSGEOM%GM,& - & ZMU0,ZMU0LU,ZMU0M,ZMU0N,& - & YDGSGEOM%GECLO,YDGSGEOM%GESLO,ZVCVC1,ZVFLSM,& - & ZVASEA , ZVALAN ,ZVASOO , ZVADES ,& - & ZVASUL , ZVAVOL ,& - & PGP2DSDT, ZGP2DSPP, & - & PHI9,PHIF9,PREPHY9,PREPHY9F,PXYB9(1,1,YYTXYB9_PHY%M_RDELP),PXYB9(1,1,YYTXYB9_PHY%M_DELP),& - & ZT9T,ZPQ9,& - & PRCP9(1,1,YYTRCP9%M_CP),PRCP9(1,1,YYTRCP9%M_R),PXYB9(1,1,YYTXYB9_PHY%M_ALPH),PXYB9(1,1,YYTXYB9_PHY%M_LNPR),& - & ZPL9,ZPI9,ZPR9,ZPS9,& - & ZPG9,ZPH9,ZP1LIMA9,ZPTKE9,& - & ZPEFB19,ZPEFB29,ZPEFB39,& - & ZPSRC9,ZP1EXT9,& - & ZT9U,ZT9V, PWT9,ZEDR ,& - & PFORCEU,PFORCEV,PFORCET,PFORCEQ,& - & PGPAR,PEMTD,PEMTU,PTRSW,& - & PGDEOSI,PGUEOSI,PGMU0,PGMU0_MIN,PGMU0_MAX,& - & PGDEOTI,PGDEOTI2,PGUEOTI,PGUEOTI2,PGEOLT,PGEOXT,& - & PGRPROX,PGMIXP,PGFLUXC,PGRSURF,& - & PGRADH_PHY,& - ! outputs - & ZPLRAD1,ZPIRAD1,PRH,ZPA1,ZPSRC1,& - & ZTENDT, ZTENDGFLR(1,1,IRR), PTENDU, PTENDV,ZTENDW, ZTENDGFLR(1,1,IPTRLIMA), ZTENDGFLR(1,1,IPTRTKE),& - & ZTENDGFLR(1,1,IEFB1),ZTENDGFLR(1,1,IEFB2),ZTENDGFLR(1,1,IEFB3),& - & ZTENDGFLR(1,1,IPTREXT),& - & PFRTH, PFRSO, PFRTHDS, PFRSODS, PFRSOPS, PFRSDNI, PFRSOPT, PFRTHC, PFRSOC,& - & ZVFALBF, ZVFEMISF,ZP1EZDIAG,& - & PCLCH,PCLCL,PCLCM,PCLCT,PFPLSL,PFPLSN,PFPLSG,PFPLSHL,PSTRTU,PSTRTV,& - & PFCS,PFCLL,PFCLN,PUCLS,PVCLS,PNUCLS,PNVCLS,PTCLS,PQCLS,PRHCLS,PUGST,PVGST,& - & PFEVL,PFEVN,PCLPH,ZSGF1,ZSGR1,ZVDSUND,& - & PDIAGH,PFLASH,ZSFOSFO1, PTPWCLS, ZDPRECIPS, ZDPRECIPS2,& - & PVISICLD, PVISIHYDRO, PMXCLWC,YLPROCSET,YDDDH ) - ENDIF - !Save surface temperature - IF (LMSE.OR.LSFORCS) THEN - IF (LLXFUMSE) THEN - DO JROF=KST,KEND - ZRRT0(JROF)=PGPAR(JROF,MVTS) - ENDDO - ELSE - DO JROF=KST,KEND - ZRRT1(JROF)=PGPAR(JROF,MVTS) - ENDDO - ENDIF - ENDIF - ! 4.2 COMPUTE THE PHYS. TENDENCY FOR "T" AND "w" - ! ------------------------------------------ - - - IF (LVERTFE.AND.LVFE_GWMPA) THEN - ! * case LVFE_GWMPA not yet coded. - ! (in this case ZGWT1 must be computed at full levels and - ! not at half levels) - CALL ABOR1(' MF_PHYS: case LVFE_GWMPA not yet coded if LMPA=T!') - ENDIF - - ZDT = PDTPHY - - ZTENDD=0.0_JPRB - - ! * compute ZTT1: - IF (LSLAG.AND.LTWOTL) THEN - DO JLEV=1,NFLEVG - DO JROF=KST,KEND - ZTT1(JROF,JLEV)=ZT0T(JROF,JLEV)+ZDT*ZTENDT(JROF,JLEV) - ENDDO - ENDDO - ELSE - DO JLEV=1,NFLEVG - DO JROF=KST,KEND - ZTT1(JROF,JLEV)=ZT9T(JROF,JLEV)+ZDT*ZTENDT(JROF,JLEV) - ENDDO - ENDDO - ENDIF - - ! * compute ZGWT1 = tendency of gw: - IF (LNHDYN) THEN - ! Valid for LVFE_GWMPA=F only; ZGWT1 assumed to be half level values. - DO JLEV=1,NFLEVG-1 - DO JROF=KST,KEND - ZGWT1(JROF,JLEV)=0.5_JPRB*RG*(ZTENDW(JROF,JLEV)+ZTENDW(JROF,JLEV+1)) - ENDDO - ENDDO - DO JROF=KST,KEND - ZGWT1(JROF,NFLEVG)=0.0_JPRB - ZGWT1(JROF,0)=0.0_JPRB - ENDDO - ENDIF - - ! * convert gw tendency in d tendency: - IF(LNHDYN) THEN - - IF (LGWADV) THEN - ZTENDD(KST:KEND,1:NFLEVG)=ZGWT1(KST:KEND,1:NFLEVG) - ELSE - - ! * Provide the appropriate version of (RT) at t+dt for GNHGW2SVDAROME: - IF (L_RDRY_VD) THEN - ! Use Rd because "dver" is currently defined with Rd. - ZRTT1(KST:KEND,1:NFLEVG)=RD*ZTT1(KST:KEND,1:NFLEVG) - ELSE - ! Use "moist R" because "dver" is defined with "moist R". - ! Unfortunately, R(t+dt) is not yet available there, use R(t) instead. - ! "Moist R" tendency is neglected in the below call to GNHGW2SVDAROME. - DO JLEV=1,NFLEVG - DO JROF=KST,KEND - ZRTT1(JROF,JLEV)=PRCP0(JROF,JLEV,YYTRCP0%M_R)*ZTT1(JROF,JLEV) - ENDDO - ENDDO - ENDIF - - ! * Do conversion: - IF (LSLAG.AND.LTWOTL) THEN - CALL GNHGW2SVDAROME(YDGEOMETRY,KST,KEND,PRE0F,PXYB0(1,1,YYTXYB0_PHY%M_LNPR),ZRTT1,PREPHY0F,ZGWT1,& - & ZTENDD) - ELSE - CALL GNHGW2SVDAROME(YDGEOMETRY,KST,KEND,PRE9F,PXYB9(1,1,YYTXYB9_PHY%M_LNPR),ZRTT1,PREPHY9F,ZGWT1,& - & ZTENDD) - ENDIF - - ENDIF - ELSE - ZTENDD=0.0_JPRB - ENDIF - - ! 4.3 PUT THE TENDENCIES IN PB1/GFLT1/GMVT1. - ! -------------------------------------- - - - IF ( LINTFLEX ) THEN - IF (LTWOTL) THEN - CALL CPTEND_FLEX( YDLDDH,YDMDDH,YGFL,YDPHY,NPROMA, KST, KEND, NFLEVG,YDGSGEOM%GNORDL,YDGSGEOM%GNORDM,& - & PXYB0(1,1,YYTXYB0_PHY%M_DELP) ,& - & PXYB0(1,1,YYTXYB0_PHY%M_RDELP), PRCP0(1,1,YYTRCP0%M_CP),& - & ZT0U,ZT0V,ZT0T,ZRRT0,& - & PGFL,& - & YLPROCSET,& - & PTENDU , PTENDV , ZTENDH , ZTENDGFL,& - & PFHSCL ,PFHSCN,PFHSSL,PFHSSN,& - & PFHPCL ,PFHPCN,PFHPSL,PFHPSN,& - & ZFHP ,ZFP , PFEPFP, PFCMPCQ, PFCMPSN, PFCMPSL,YDDDH ) - ELSE - CALL CPTEND_FLEX( YDLDDH,YDMDDH,YGFL,YDPHY,NPROMA, KST, KEND, NFLEVG,YDGSGEOM%GNORDL,YDGSGEOM%GNORDM,& - & PXYB9(1,1,YYTXYB9_PHY%M_DELP) ,& - & PXYB9(1,1,YYTXYB9_PHY%M_RDELP), PRCP9(1,1,YYTRCP9%M_CP),& - & ZT9U,ZT9V,ZT9T,ZRRT9,& - & PGFL,& - & YLPROCSET,& - & PTENDU , PTENDV , ZTENDH , ZTENDGFL,& - & PFHSCL ,PFHSCN,PFHSSL,PFHSSN,& - & PFHPCL ,PFHPCN,PFHPSL,PFHPSN,& - & ZFHP ,ZFP , PFEPFP, PFCMPCQ, PFCMPSN, PFCMPSL,YDDDH ) - ENDIF - - CALL CPUTQY(YDGEOMETRY%YRDIMV,YDGMV,YGFL,YDPTRSLB1,YDPHY,NPROMA,KST,KEND,NFLEVG,PDTPHY,IPGFL,& - & ISLB1T9,ISLB1U9,ISLB1V9,ISLB1VD9,ISLB1GFL9,& - & ZTENDH, ZTENDT, PTENDU, PTENDV, ZTENDU, ZTENDV, ZTENDD, ZTENDGFL,& - & PRCP0(1,1,YYTRCP0%M_CP),PXYB0(1,1,YYTXYB0_PHY%M_DELP),ZT0T,ZT0U,ZT0V,& - & PRCP9(1,1,YYTRCP9%M_CP),PXYB9(1,1,YYTXYB9_PHY%M_DELP),ZT9T,ZT9U,ZT9V,& - & PB1, PGMVT1, PGFLT1,& - & PFDIS) - - ELSE - - ! start ZTENDGFLR at 1 because it is dimensionned (:,:,0:n) - CALL CPUTQY_AROME(YDGEOMETRY%YRDIMV,YDGMV,YGFL,YDPTRSLB1,NPROMA,KST,KEND,NFLEVG,ZDT,IPGFL,IPTR,& - & ISLB1U9,ISLB1V9,ISLB1T9,ISLB1GFL9,ISLB1VD9 ,& - & ZTENDT, ZTENDGFLR(:,:,1), PTENDU, PTENDV, ZTENDD ,& - & PB1, PGMVT1, PGFLT1) - ENDIF - -ENDIF - -! ------------------------------------------------------------------ - -!* 5. Final calculations. -! ------------------- - -! * Restore the initial value of some pseudo-historical surface buffers -! if relevant. -IF (LL_SAVE_PHSURF) THEN - IF(YSD_VV%YHV%LSET) ZVVHV(1:NPROMA)=ZHV(1:NPROMA) - IF(YSD_VF%YZ0F%LSET) ZVFZ0F(1:NPROMA)=ZGZ0F(1:NPROMA) - IF(YSD_VV%YZ0H%LSET) ZVVZ0H(1:NPROMA)=ZGZ0HF(1:NPROMA) - IF(YSD_VH%YPBLH%LSET) ZVHPBLH(1:NPROMA)=ZPBLH(1:NPROMA) - IF(YSD_VH%YSPSH%LSET) ZVHSPSH(1:NPROMA)=ZFHPS(1:NPROMA) - IF(YSD_VH%YQSH%LSET) ZVHQSH(1:NPROMA)=ZQSH(1:NPROMA) - IF(YSD_VK%YUDGRO%LSET) ZVKUDGRO(1:NPROMA)=ZUDGRO(1:NPROMA) - IF(LCVPRO.OR.LGPCMT) THEN - ZPUAL(:,:)=ZUDAL(:,:) - ZPUOM(:,:)=ZUDOM(:,:) - IF(LCDDPRO) THEN - ZPDAL(:,:)=ZDDAL(:,:) - ZPDOM(:,:)=ZDDOM(:,:) - ENDIF - ENDIF - IF(YUNEBH%LACTIVE) ZPUNEBH(:,:)=ZUNEBH(:,:) - IF(YUEN%LACTIVE) ZPUEN(:,:)=ZENTCH(:,:) -ENDIF - -! Store horizontal exchange coefficients (3D turbulence) to SL2 buffers -IF (L3DTURB) THEN - DO JLEV=1,NFLEVG - PB2(KST:KEND,MSLB2KAPPAM+JLEV-1)=ZKUROV_H(KST:KEND,JLEV) - PB2(KST:KEND,MSLB2KAPPAH+JLEV-1)=ZKTROV_H(KST:KEND,JLEV) - ENDDO -ENDIF - -!-------------------------------------------------------------------- -! BAYRAD -! Fill convective hydrometeors mixing ratio in GFL -!-------------------------------------------------------------------- -IF((.NOT.LGPCMT).AND.(.NOT.LAROME)) THEN - IF(YRCONV%LACTIVE) THEN - ZPRCONV1(:,:) = ZQRCONV(:,:) - ENDIF - IF(YSCONV%LACTIVE) THEN - ZPSCONV1(:,:) = ZQSCONV(:,:) - ENDIF -ENDIF - - - -!------------------------------------------------- -! Extract Single Column Model profiles from 3D run or -! write LFA file for MUSC (1D model) -!------------------------------------------------- -IF(LGSCM.OR.LMUSCLFA) THEN - IF (LAROME) THEN - DO JLEV=1,NFLEVG - DO JROF=KST,KEND - PNEB(JROF,JLEV)=ZPA1(JROF,JLEV) - ENDDO - ENDDO - ENDIF - CALL WRITEPHYSIO(YDGEOMETRY,YDSURF,YDDPHY,YDRIP,YDMODEL%YRML_PHY_MF,& - & KEND,& - & KST, KGL1, KGL2, KSTGLO,& - & NSTEP , NTSSG , YSP_SBD%NLEVS ,& - & YDGSGEOM%GELAM,YDGSGEOM%GEMU,& - & YDGSGEOM%GM, ZMU0,YDOROG%OROG,POROGL,POROGM,YDGSGEOM%RCORI,YDCSGEOM%RATATH,YDCSGEOM%RATATX,& - & PHI0 , PRE0 , PHIF0 , PRE0F , PXYB0(1,1,YYTXYB0_PHY%M_ALPH), PXYB0(1,1,YYTXYB0_PHY%M_DELP),& - & PXYB0(1,1,YYTXYB0_PHY%M_LNPR), PXYB0(1,1,YYTXYB0_PHY%M_RDELP),& - & ZVFLSM, ZVVARG, ZVVSAB,& - & ZVVD2, ZVVIVEG, ZVVLAI, PCT,& - & ZVVALV, PALBDG, ZVFALBF, ZVFALBSF, ZSGT1,& - & ZVFEMISF,& - & ZVFZ0F, ZVVZ0H, ZVFZ0RLF,& - & ZVFGETRL, ZVFVRLAN, ZVFVRLDI, ZVVRSMIN,& - & ZVFVEG, ZVVHV, ZVASEA, ZVALAN,& - & ZVASOO, ZVADES, ZVCVC1,& - & ZT0SP,ZT0SPL,ZT0SPM,& - & ZT0T,ZT0TL,ZT0TM,& - & ZPQ,ZPQL,ZPQM,& - & ZPI,ZPL, ZPS,ZPR,ZPG,ZPTKE,& - & ZPEFB1,ZPEFB2,ZPEFB3,& - & PRCP0(1,1,YYTRCP0%M_CP), PRCP0(1,1,YYTRCP0%M_R),& - & ZT0U,ZT0V,ZT0VOR,ZT0DIV, ZCVGQ, ZLCVQ,& - & ZRRT9, ZSBT9, ZRRFC9, ZRRW9,& - & ZRRIC9, ZSBQ9, ZSBTL9, ZSGF9,& - & ZSGA0, ZSGR0, PCTY0(1,1,YYTCTY0%M_VVEL),& - & PEMTD , PEMTU ,PTRSW ,YDGSGEOM%GECLO,YDGSGEOM%GESLO,& - & PDIFCQ, PDIFCQI, PDIFCQL, PDIFCS, PDIFTQ, PDIFTQI, PDIFTQL,& - & PDIFTS, PFCCQL, PFCCQN, PFCSQL, PFCSQN, PFCQNG, PFCQING,& - & PFCQLNG, PFCQRNG, PFCQSNG, PFPLCL, PFPLCN, PFPLSL, PFPLSN, PFPLSG, PFPLSHL,& - & PFPFPSL, PFPFPSN, PFPFPCL, PFPFPCN, PFPEVPSL,PFPEVPSN,PFPEVPCL, PFPEVPCN,& - & ZFTKE, ZFEFB1, ZFEFB2, ZFEFB3, PFRSO, PFRSOC, PFRTH, PFRTHC, PFRSOLU,& - & PSTRCU, PSTRCV, PSTRDU, PSTRDV, PSTRTU, PSTRTV, PSTRMU, PSTRMV,& - & PFRMH, ZFRMQ, PFCHOZ, PNEB, PQICE, PQLI, PRH,& - & PFCS, PFCLL, PFCLN, PFEVL, PFEVN, ZFEVI, PFEVV, PFTR, PFLWSP, PFONTE,& - & PFGEL, PFGELS, PFCHSP, PFRSODS, PFRSOPS, PFRSOPT, PFRTHDS,& - & ZCD, ZCDN, ZCH, ZC1, ZC2, ZEMIS, PGZ0 , PGZ0H , ZNEIJ , ZVEG,& - & ZCPS, ZLHS, ZRS, ZLH, ZLSCPE, ZQSAT, ZQW, ZTW,& - & PQS, ZQSATS, PRUISL, PRUISP, PRUISS,& - & PUCLS, PVCLS, PTCLS, PQCLS, PRHCLS,& - & PCLCT, PCLCH, PCLCM, PCLCL, PCLCC,& - & PCAPE , PCTOP, ICLPH , PCLPH , PUGST , PVGST,& - & ZFPLCH, ZFPLSH,& - & ZVHTCCH, ZVHSCCH, ZVHBCCH, ZVHPBLH ) -ENDIF - -IF (LEDR) THEN - ZDIXEDR(:,:)=ZEDR(:,:) -ENDIF - -IF (LDPRECIPS) THEN - PSD_XP(KST:KEND,NDTPRECCUR,YSD_XP%YPRECIP%MP)=ZDPRECIPS(KST:KEND,NDTPRECCUR) -ENDIF - -IF (LDPRECIPS2) THEN - PSD_XP2(KST:KEND,NDTPRECCUR2,YSD_XP2%YPRECIP2%MP)=ZDPRECIPS2(KST:KEND,NDTPRECCUR2) -ENDIF - -! Restore Tt and grad(Tt) for NHQE model. -IF (LNHQE) THEN - ! At instant t (with the derivatives): - DO JLEV=1,NFLEVG - DO JROF=KST,KEND - ZT0T(JROF,JLEV)=ZTT0_SAVE(JROF,JLEV) - ZT0TL(JROF,JLEV)=ZTT0L_SAVE(JROF,JLEV) - ZT0TM(JROF,JLEV)=ZTT0M_SAVE(JROF,JLEV) - ENDDO - ENDDO - ! At instant t-dt for leap-frog advections (without the derivatives): - IF (.NOT.LTWOTL) THEN - DO JLEV=1,NFLEVG - DO JROF=KST,KEND - ZT9T(JROF,JLEV)=ZTT9_SAVE(JROF,JLEV) - ENDDO - ENDDO - ENDIF -ENDIF - -! ------------------------------------------------------------------ - -! 6. destructor for procset -IF (LINTFLEX) CALL CLEANINTPROCSET(YLPROCSET) - -! ------------------------------------------------------------------ - -END ASSOCIATE -END ASSOCIATE -IF (LHOOK) CALL DR_HOOK('MF_PHYS',1,ZHOOK_HANDLE) -END SUBROUTINE MF_PHYS diff --git a/src/arome/modset_Ryad/arpifs/programs/master.F90 b/src/arome/modset_Ryad/arpifs/programs/master.F90 deleted file mode 100644 index ba909e5177a9387c5ee4e78ded824b953c9be963..0000000000000000000000000000000000000000 --- a/src/arome/modset_Ryad/arpifs/programs/master.F90 +++ /dev/null @@ -1,287 +0,0 @@ -PROGRAM MASTER - -USE, INTRINSIC :: ISO_FORTRAN_ENV, ONLY : STDOUT=>OUTPUT_UNIT -#ifdef WITH_FCKIT -USE FCKIT_MODULE, ONLY : FCKIT_MAIN, FCKIT_LOG, FCKIT_EXCEPTION, FCKIT_EXCEPTION_HANDLER -#endif -USE PARKIND1 ,ONLY : JPIM, JPIB, JPRB, JPRD -USE YOMHOOK ,ONLY : LHOOK, DR_HOOK -USE MPL_MODULE ,ONLY : MPL_END -USE OML_MOD ,ONLY : OML_MAX_THREADS -USE STACK_MIX ,ONLY : INIT_STACK -USE YOMIO_SERV ,ONLY : IO_SERV_C001 -USE YOMFP_SERV ,ONLY : FP_SERV_C001 -#ifdef RS6K -USE YOMERRTRAP ,ONLY : SET_ERR_TRAP -#endif -USE MPL_MPIF, ONLY : MPI_COMM_WORLD, MPI_THREAD_MULTIPLE, MPI_THREAD_SINGLE, MPI_WTIME -USE MPL_MODULE, ONLY : LMPLUSERCOMM, MPLUSERCOMM, LTHSAFEMPI, LINITMPI_VIA_MPL -#if defined WITH_OASIS || defined WITH_NEMO -USE COUPLING -#endif -#ifdef __INTEL_COMPILER -USE IFPORT, ONLY : GETPID -#endif -IMPLICIT NONE - -! P. Marguinaud : 01-Jan-2001 : Support for IO server -! R. El Khatib : 22-Mar-2011 : conditional support for IBM high perf monitoring -! P. Marguinaud : 10-Oct-2013 : Change IO server init & exit routines -! F. Suzat : 14-Avr-2020 : print pid in output file -REAL(KIND=JPRB) :: ZHOOK_HANDLE -LOGICAL :: LLHOOK_SAVE -INTEGER (KIND=JPIM) :: ICOMM_IFS_PLUS_IFS_IO_SERV -INTEGER (KIND=JPIM) :: ICOMM_IFS_PLUS_NEMO_IO_SERV - -LOGICAL :: LLINIT, LLSERV, LLCOUPACTIVE, LLMPI1, LLSTARTUPCOST -INTEGER :: IERR, ICOL, INUM, IREQUIRED,IPROVIDED,IME - -#ifdef RS6K -INTEGER(KIND=JPIB) :: IRTC,JI -#endif -LOGICAL :: LLNEMOIO, LLNEMOIOSERVER -CHARACTER(LEN=512) :: CLIOSERV_LOGFILE -#ifdef WITH_FCKIT -PROCEDURE(FCKIT_EXCEPTION_HANDLER), POINTER :: FUNPTR -#endif -INTEGER(KIND=JPIM) :: IER -CHARACTER(LEN=20) :: CL_MPI_EPOCH ! 10-digits in seconds + dot + 9-digits nanosecs -CHARACTER(LEN=32) :: CLENV -REAL(KIND=JPRD) :: ZMPI_INIT(2) - -#include "abor1.intfb.h" -#include "cnt0.intfb.h" -!#include "couplo4_inimpi.intfb.h" -!#include "couplo4_endmpi.intfb.h" -#include "io_serv_init_part1.intfb.h" -#include "io_serv_init_part2.intfb.h" -#include "io_serv_exit.intfb.h" -#include "io_serv_run.intfb.h" -#include "fp_serv_init_part1.intfb.h" -#include "fp_serv_init_part2.intfb.h" -#include "fp_serv_exit.intfb.h" -#include "ininemoio.intfb.h" -#include "ininemoio2.intfb.h" -#include "ec_meminfo.intfb.h" - -LLHOOK_SAVE = LHOOK -LHOOK = .FALSE. -LLNEMOIOSERVER = .FALSE. -LLNEMOIO = .FALSE. - -IME = -1 -LLSTARTUPCOST = .FALSE. ! If true, then display MPI startup cost (only ever to happen on the global master task IME == 0) -ZMPI_INIT(:) = 0 - -! OASIS3 or OASIS4 interface must be initialized before any DR_HOOK call. - -#ifdef WITH_OASIS -CALL CPL_INIT(LLCOUPACTIVE) -#else -#ifdef CPLOASIS -!! Setup OASIS for coupling through SURFEX -CALL INI_OASIS3_SFX -#endif -#endif - -#ifdef WITH_NEMO -CALL ININEMOIO (LLNEMOIO, LLNEMOIOSERVER) -#endif - -CALL MPI_INITIALIZED (LLINIT, IERR) -IF (IERR /= 0) CALL ABOR1 ('MASTER: MPI_INITIALIZED FAILED') - -IF (.NOT. LLINIT) THEN -#ifndef MPI1 - LLMPI1 = .FALSE. - IREQUIRED = MPI_THREAD_MULTIPLE - IPROVIDED = MPI_THREAD_SINGLE - CALL MPI_INIT_THREAD(IREQUIRED,IPROVIDED,IERR) - IF (IERR /= 0) CALL ABOR1 ('MASTER: MPI_INIT_THREAD FAILED') - LTHSAFEMPI = (IPROVIDED >= IREQUIRED) -#else - LLMPI1 = .TRUE. - IREQUIRED = -1 - IPROVIDED = -1 - CALL MPI_INIT(IERR) - IF (IERR /= 0) CALL ABOR1 ('MASTER: MPI_INIT FAILED') - LTHSAFEMPI = .FALSE. -#endif - LINITMPI_VIA_MPL = .TRUE. ! To re-instate ec_meminfo-call from within ec_mpi_finalize @ mpl_end() - - CALL MPI_Comm_rank(MPI_COMM_WORLD, IME, IERR) - - ! MPI_Init* overhead -- reference time from MPI_EPOCH variable (obtained via command date +%s.%N) - CALL EC_GETENV('MPI_EPOCH',CL_MPI_EPOCH) - IF (CL_MPI_EPOCH /= ' ') THEN - CALL MPI_Barrier(MPI_COMM_WORLD, IERR) - IF (IME == 0) THEN - ZMPI_INIT(2) = MPI_Wtime() ! *not* from ifsaux/support/env.c - !READ(CL_MPI_EPOCH,'(f20.0)',err=999,end=999) ZMPI_INIT(1) - READ(CL_MPI_EPOCH,'(f20.0)') ZMPI_INIT(1) - LLSTARTUPCOST = .TRUE. -!999 CONTINUE - ENDIF - ENDIF - - ! Print out thread safety etc. messages -- must use MPI_Comm_rank since MPL not initialized just yet - IF (IME == 0) THEN - WRITE(0,'(1X,A,4(1X,I0),2(1X,L1))') & - & 'MAIN: IREQUIRED, MPI_THREAD_MULTIPLE, MPI_THREAD_SINGLE, IPROVIDED, LTHSAFEMPI, LLMPI1 =',& - & IREQUIRED, MPI_THREAD_MULTIPLE, MPI_THREAD_SINGLE, IPROVIDED, LTHSAFEMPI, LLMPI1 - ENDIF -ENDIF - -! Every program needs to be initialised -#ifdef WITH_FCKIT -IF(.NOT.LLNEMOIOSERVER) THEN - CALL FCKIT_MAIN%INITIALISE() - -#ifndef ONT_REGISTER_FCKIT_HANDLER - ! Register ABOR1 as fckit's exception handler - FUNPTR => ABOR1_EXCEPTION_HANDLER - CALL FCKIT_EXCEPTION%SET_HANDLER( FUNPTR ) -#endif -ENDIF -#endif - -IF (LMPLUSERCOMM) THEN - ICOMM_IFS_PLUS_IFS_IO_SERV = MPLUSERCOMM -ELSE - ICOMM_IFS_PLUS_IFS_IO_SERV = MPI_COMM_WORLD -ENDIF - -! IO_SERV has to be initialized before any DR_HOOK call. -CALL IO_SERV_INIT_PART1 (IO_SERV_C001, ICOMM_IFS_PLUS_IFS_IO_SERV) - -! Setup default for eckit/fckit enabled logging -! - Worker with proc==1 writes to STDOUT, others disabled -! - IO-servers write each to a server specific file IOSERV.<IOPROC> -! In further routines this may be ammended to write to NULOUT (see SU0YOMA) -#ifdef WITH_FCKIT -IF(.NOT.LLNEMOIOSERVER) THEN - IF( FCKIT_MAIN%TASKID()+1 == 1 ) THEN - CALL FCKIT_LOG%SET_FORTRAN_UNIT(UNIT=STDOUT,STYLE=FCKIT_LOG%PREFIX) - ELSEIF( IO_SERV_C001%LIO_SERVER ) THEN - WRITE(CLIOSERV_LOGFILE,'(A,I0)') "IOSERV.",IO_SERV_C001%MYPROC_IO - CALL FCKIT_LOG%SET_FILE(TRIM(CLIOSERV_LOGFILE),STYLE=FCKIT_LOG%PREFIX) - ELSE - CALL FCKIT_LOG%RESET() - ENDIF -ENDIF -#endif - -! FP_SERV has to be initialized before any DR_HOOK call. -CALL FP_SERV_INIT_PART1 (FP_SERV_C001, ICOMM_IFS_PLUS_IFS_IO_SERV) - -LLSERV = IO_SERV_C001%LIO_SERVER .OR. FP_SERV_C001%LFP_SERVER - -! Create a communicator for IFS compute tasks and NEMO/IO server - -IF (LLSERV) THEN - ICOL = 2 - INUM = 0 -ELSE - ICOL = 1 - CALL MPI_COMM_RANK (MPI_COMM_WORLD, INUM, IERR) -ENDIF -#ifndef CPLOASIS -CALL MPI_COMM_SPLIT (MPI_COMM_WORLD, ICOL, INUM, ICOMM_IFS_PLUS_NEMO_IO_SERV, IERR) -#endif -IF (.NOT.LLSERV .AND. LLNEMOIO) THEN -#ifdef WITH_NEMO - CALL ININEMOIO2 (ICOMM_IFS_PLUS_NEMO_IO_SERV) -#endif -ENDIF - -IF (.NOT.LLNEMOIOSERVER) THEN - -CALL IO_SERV_INIT_PART2 (IO_SERV_C001, ICOMM_IFS_PLUS_IFS_IO_SERV) - -CALL FP_SERV_INIT_PART2 (FP_SERV_C001, ICOMM_IFS_PLUS_IFS_IO_SERV) - -#ifdef RS6K -! Must be first for signal handlers -!$OMP PARALLEL DO PRIVATE(JI),SCHEDULE(STATIC,1) -DO JI=1,OML_MAX_THREADS() - CALL SET_ERR_TRAP -ENDDO -!$OMP END PARALLEL DO -#endif - -IF (LLSTARTUPCOST) THEN - WRITE(0,'(1X,A,F30.6,A)') 'MAIN: MPI startup cost = ',ZMPI_INIT(2) - ZMPI_INIT(1),' secs' - !WRITE(0,'(1X,A,3F30.9,A)') 'MAIN: MPI startup cost = ',ZMPI_INIT(1),ZMPI_INIT(2),ZMPI_INIT(2) - ZMPI_INIT(1),' secs' -ENDIF - -LHOOK = LLHOOK_SAVE - -IF (IO_SERV_C001%LIO_SERVER) THEN - - CALL EC_MEMINFO(-1,"master:io-server",ICOMM_IFS_PLUS_IFS_IO_SERV,KBARR=1,KIOTASK=1,KCALL=0) - CALL IO_SERV_RUN(IO_SERV_C001) - -ELSE - - IF (LHOOK) CALL DR_HOOK('MASTER',0,ZHOOK_HANDLE) - CALL INIT_STACK(1) - -#ifdef IBM_HPM - CALL HPM_BEGT(99) -#endif - -#ifdef RS6K -WRITE(0,'(A,I20)') "JIO1 SYNC time=",IRTC() -#endif - - CALL EC_MEMINFO(-1,"master:computation",ICOMM_IFS_PLUS_IFS_IO_SERV,KBARR=1,KIOTASK=0,KCALL=0) - - CALL GET_ENVIRONMENT_VARIABLE('EC_DISPLAY_PID',CLENV) - IF (CLENV == '1' .OR. CLENV == 'true' .OR. CLENV == 'TRUE') THEN -#ifdef __INTEL_COMPILER - WRITE (0, *) __FILE__, ':', __LINE__ , '######### PID',GETPID() -#endif - ENDIF - -#ifdef CPLOASIS - CALL CNT0(LDCOUPACTIVE=LLCOUPACTIVE,KCOMM=ICOMM_IFS_PLUS_IFS_IO_SERV) -#else - CALL CNT0(LDCOUPACTIVE=LLCOUPACTIVE,KCOMM=ICOMM_IFS_PLUS_NEMO_IO_SERV) -#endif - -#ifdef IBM_HPM - CALL HPM_ENDT(99) - CALL HPM_PRNT(99) -#endif - - IF (LHOOK) CALL DR_HOOK('MASTER',1,ZHOOK_HANDLE) - -ENDIF - -! Every program needs to be finalised (optional, but good practise) -#ifdef WITH_FCKIT -CALL FCKIT_MAIN%FINALISE() -#endif - -! OASIS3 or OASIS4 interface must be finalised after last DR_HOOK call. - -CALL IO_SERV_EXIT(IO_SERV_C001) - -CALL FP_SERV_EXIT (FP_SERV_C001) - -#ifdef WITH_OASIS -CALL CPL_FINALIZE(LLCOUPACTIVE) -#else -#ifdef CPLOASIS -!! end coupling with OASIS through SURFEX - CALL END_OASIS3_SFX -#endif -#endif - -! CALL COUPLO4_ENDMPI - -CALL MPL_END(KERROR=IER) ! Does not fail - -ENDIF - -END PROGRAM MASTER diff --git a/src/arome/modset_Ryad/mpa/micro/module/modi_ice4_rimltc.F90 b/src/arome/modset_Ryad/mpa/micro/module/modi_ice4_rimltc.F90 deleted file mode 100644 index 2eef6d1aeab2e954a89900dfda071f4bc1b85deb..0000000000000000000000000000000000000000 --- a/src/arome/modset_Ryad/mpa/micro/module/modi_ice4_rimltc.F90 +++ /dev/null @@ -1,3 +0,0 @@ -MODULE MODI_ICE4_RIMLTC -! dead code -END MODULE MODI_ICE4_RIMLTC diff --git a/src/arome/turb/tke_eps_sources.F90 b/src/arome/turb/tke_eps_sources.F90 index fc586dd609be380c5933c7cbe98e21d746e2adaf..672987f182e17653c639b6206b88e93acd184127 100644 --- a/src/arome/turb/tke_eps_sources.F90 +++ b/src/arome/turb/tke_eps_sources.F90 @@ -131,7 +131,7 @@ USE MODI_GRADIENT_W USE MODI_SHUMAN , ONLY : DZM, DZF, MZM, MZF USE MODI_TRIDIAG USE MODI_TRIDIAG_TKE -USE MODI_BUDGET +USE MODI_BUDGET_DDH USE MODE_FMWRIT USE MODI_LES_MEAN_SUBGRID ! @@ -335,18 +335,18 @@ IF (LBUDGET_TKE) THEN ! add the dynamical production ! PRTKES(:,:,:) = PRTKES(:,:,:) + PDP(:,:,:) * PRHODJ(:,:,:) - CALL BUDGET (PRTKES(:,:,:),5,'DP_BU_RTKE',YDDDH, YDLDDH, YDMDDH) + CALL BUDGET_DDH (PRTKES(:,:,:),5,'DP_BU_RTKE',YDDDH, YDLDDH, YDMDDH) ! ! add the thermal production ! PRTKES(:,:,:) = PRTKES(:,:,:) + PTP(:,:,:) * PRHODJ(:,:,:) - CALL BUDGET (PRTKES(:,:,:),5,'TP_BU_RTKE',YDDDH, YDLDDH, YDMDDH) + CALL BUDGET_DDH (PRTKES(:,:,:),5,'TP_BU_RTKE',YDDDH, YDLDDH, YDMDDH) ! ! add the dissipation ! PRTKES(:,:,:) = PRTKES(:,:,:) - XCED * SQRT(PTKEM(:,:,:)) / PLEPS(:,:,:) * & (PEXPL*PTKEM(:,:,:) + PIMPL*ZRES(:,:,:)) * PRHODJ(:,:,:) -CALL BUDGET (PRTKES(:,:,:),5,'DISS_BU_RTKE',YDDDH, YDLDDH, YDMDDH) +CALL BUDGET_DDH (PRTKES(:,:,:),5,'DISS_BU_RTKE',YDDDH, YDLDDH, YDMDDH) END IF ! !* 2.5 computes the final RTKE and stores the whole turbulent transport @@ -359,7 +359,7 @@ PRTKES(:,:,:) = ZRES(:,:,:) * PRHODJ(:,:,:) / PTSTEP ! ! stores the whole turbulent transport ! -IF (LBUDGET_TKE) CALL BUDGET (PRTKES(:,:,:),5,'TR_BU_RTKE',YDDDH, YDLDDH, YDMDDH) +IF (LBUDGET_TKE) CALL BUDGET_DDH (PRTKES(:,:,:),5,'TR_BU_RTKE',YDDDH, YDLDDH, YDMDDH) ! ! !---------------------------------------------------------------------------- diff --git a/src/arome/turb/turb.F90 b/src/arome/turb/turb.F90 index 3a0b480d85d7ed81bfdc6d4c77b3d13c56725ca2..68fec59f897017987d8cc13e0546e88f392ca912 100644 --- a/src/arome/turb/turb.F90 +++ b/src/arome/turb/turb.F90 @@ -234,7 +234,7 @@ USE MODI_TURB_VER USE MODI_TKE_EPS_SOURCES USE MODI_SHUMAN, ONLY : MZF, MXF, MYF USE MODI_GRADIENT_M -USE MODI_BUDGET +USE MODI_BUDGET_DDH USE MODI_LES_MEAN_SUBGRID USE MODI_RMC01 USE MODI_GRADIENT_W @@ -818,34 +818,34 @@ CALL TURB_VER(KKA,KKU,KKL,KRR, KRRL, KRRI, & PDP,PTP,PSIGS,PWTH,PWRC,PWSV ) ! -IF (LBUDGET_U) CALL BUDGET (PRUS,1,'VTURB_BU_RU',YDDDH, YDLDDH, YDMDDH) -IF (LBUDGET_V) CALL BUDGET (PRVS,2,'VTURB_BU_RV',YDDDH, YDLDDH, YDMDDH) -IF (LBUDGET_W) CALL BUDGET (PRWS,3,'VTURB_BU_RW',YDDDH, YDLDDH, YDMDDH) +IF (LBUDGET_U) CALL BUDGET_DDH (PRUS,1,'VTURB_BU_RU',YDDDH, YDLDDH, YDMDDH) +IF (LBUDGET_V) CALL BUDGET_DDH (PRVS,2,'VTURB_BU_RV',YDDDH, YDLDDH, YDMDDH) +IF (LBUDGET_W) CALL BUDGET_DDH (PRWS,3,'VTURB_BU_RW',YDDDH, YDLDDH, YDMDDH) IF (LBUDGET_TH) THEN IF ( KRRI >= 1 .AND. KRRL >= 1 ) THEN - CALL BUDGET (PRTHLS+ ZLVOCPEXNM * PRRS(:,:,:,2) + ZLSOCPEXNM * PRRS(:,:,:,4),4,'VTURB_BU_RTH',YDDDH, YDLDDH, YDMDDH) + CALL BUDGET_DDH (PRTHLS+ ZLVOCPEXNM * PRRS(:,:,:,2) + ZLSOCPEXNM * PRRS(:,:,:,4),4,'VTURB_BU_RTH',YDDDH, YDLDDH, YDMDDH) ELSE IF ( KRRL >= 1 ) THEN - CALL BUDGET (PRTHLS+ ZLOCPEXNM * PRRS(:,:,:,2),4,'VTURB_BU_RTH',YDDDH, YDLDDH, YDMDDH) + CALL BUDGET_DDH (PRTHLS+ ZLOCPEXNM * PRRS(:,:,:,2),4,'VTURB_BU_RTH',YDDDH, YDLDDH, YDMDDH) ELSE - CALL BUDGET (PRTHLS,4,'VTURB_BU_RTH',YDDDH, YDLDDH, YDMDDH) + CALL BUDGET_DDH (PRTHLS,4,'VTURB_BU_RTH',YDDDH, YDLDDH, YDMDDH) END IF END IF IF (LBUDGET_SV) THEN DO JSV = 1,NSV - CALL BUDGET (PRSVS(:,:,:,JSV),JSV+12,'VTURB_BU_RSV',YDDDH, YDLDDH, YDMDDH) + CALL BUDGET_DDH (PRSVS(:,:,:,JSV),JSV+12,'VTURB_BU_RSV',YDDDH, YDLDDH, YDMDDH) END DO END IF IF (LBUDGET_RV) THEN IF ( KRRI >= 1 .AND. KRRL >= 1) THEN - CALL BUDGET (PRRS(:,:,:,1)-PRRS(:,:,:,2)-PRRS(:,:,:,4),6,'VTURB_BU_RRV',YDDDH, YDLDDH, YDMDDH) + CALL BUDGET_DDH (PRRS(:,:,:,1)-PRRS(:,:,:,2)-PRRS(:,:,:,4),6,'VTURB_BU_RRV',YDDDH, YDLDDH, YDMDDH) ELSE IF ( KRRL >= 1 ) THEN - CALL BUDGET (PRRS(:,:,:,1)-PRRS(:,:,:,2),6,'VTURB_BU_RRV',YDDDH, YDLDDH, YDMDDH) + CALL BUDGET_DDH (PRRS(:,:,:,1)-PRRS(:,:,:,2),6,'VTURB_BU_RRV',YDDDH, YDLDDH, YDMDDH) ELSE - CALL BUDGET (PRRS(:,:,:,1),6,'VTURB_BU_RRV',YDDDH, YDLDDH, YDMDDH) + CALL BUDGET_DDH (PRRS(:,:,:,1),6,'VTURB_BU_RRV',YDDDH, YDLDDH, YDMDDH) END IF END IF -IF (LBUDGET_RC) CALL BUDGET (PRRS(:,:,:,2),7,'VTURB_BU_RRC',YDDDH, YDLDDH, YDMDDH) -IF (LBUDGET_RI) CALL BUDGET (PRRS(:,:,:,4),9,'VTURB_BU_RRI',YDDDH, YDLDDH, YDMDDH) +IF (LBUDGET_RC) CALL BUDGET_DDH (PRRS(:,:,:,2),7,'VTURB_BU_RRC',YDDDH, YDLDDH, YDMDDH) +IF (LBUDGET_RI) CALL BUDGET_DDH (PRRS(:,:,:,4),9,'VTURB_BU_RRI',YDDDH, YDLDDH, YDMDDH) ! ! IF (HTURBDIM=='3DIM') THEN @@ -870,34 +870,34 @@ IF (HTURBDIM=='3DIM') THEN END IF ! ! -IF (LBUDGET_U) CALL BUDGET (PRUS,1,'HTURB_BU_RU',YDDDH, YDLDDH, YDMDDH) -IF (LBUDGET_V) CALL BUDGET (PRVS,2,'HTURB_BU_RV',YDDDH, YDLDDH, YDMDDH) -IF (LBUDGET_W) CALL BUDGET (PRWS,3,'HTURB_BU_RW',YDDDH, YDLDDH, YDMDDH) +IF (LBUDGET_U) CALL BUDGET_DDH (PRUS,1,'HTURB_BU_RU',YDDDH, YDLDDH, YDMDDH) +IF (LBUDGET_V) CALL BUDGET_DDH (PRVS,2,'HTURB_BU_RV',YDDDH, YDLDDH, YDMDDH) +IF (LBUDGET_W) CALL BUDGET_DDH (PRWS,3,'HTURB_BU_RW',YDDDH, YDLDDH, YDMDDH) IF (LBUDGET_TH) THEN IF ( KRRI >= 1 .AND. KRRL >= 1 ) THEN - CALL BUDGET (PRTHLS+ ZLVOCPEXNM * PRRS(:,:,:,2) + ZLSOCPEXNM * PRRS(:,:,:,4),4,'HTURB_BU_RTH',YDDDH, YDLDDH, YDMDDH) + CALL BUDGET_DDH (PRTHLS+ ZLVOCPEXNM * PRRS(:,:,:,2) + ZLSOCPEXNM * PRRS(:,:,:,4),4,'HTURB_BU_RTH',YDDDH, YDLDDH, YDMDDH) ELSE IF ( KRRL >= 1 ) THEN - CALL BUDGET (PRTHLS+ ZLOCPEXNM * PRRS(:,:,:,2),4,'HTURB_BU_RTH',YDDDH, YDLDDH, YDMDDH) + CALL BUDGET_DDH (PRTHLS+ ZLOCPEXNM * PRRS(:,:,:,2),4,'HTURB_BU_RTH',YDDDH, YDLDDH, YDMDDH) ELSE - CALL BUDGET (PRTHLS,4,'HTURB_BU_RTH',YDDDH, YDLDDH, YDMDDH) + CALL BUDGET_DDH (PRTHLS,4,'HTURB_BU_RTH',YDDDH, YDLDDH, YDMDDH) END IF END IF IF (LBUDGET_SV) THEN DO JSV = 1,NSV - CALL BUDGET (PRSVS(:,:,:,JSV),JSV+12,'HTURB_BU_RSV',YDDDH, YDLDDH, YDMDDH) + CALL BUDGET_DDH (PRSVS(:,:,:,JSV),JSV+12,'HTURB_BU_RSV',YDDDH, YDLDDH, YDMDDH) END DO END IF IF (LBUDGET_RV) THEN IF ( KRRI >= 1 .AND. KRRL >= 1) THEN - CALL BUDGET (PRRS(:,:,:,1)-PRRS(:,:,:,2)-PRRS(:,:,:,4),6,'HTURB_BU_RRV',YDDDH, YDLDDH, YDMDDH) + CALL BUDGET_DDH (PRRS(:,:,:,1)-PRRS(:,:,:,2)-PRRS(:,:,:,4),6,'HTURB_BU_RRV',YDDDH, YDLDDH, YDMDDH) ELSE IF ( KRRL >= 1 ) THEN - CALL BUDGET (PRRS(:,:,:,1)-PRRS(:,:,:,2),6,'HTURB_BU_RRV',YDDDH, YDLDDH, YDMDDH) + CALL BUDGET_DDH (PRRS(:,:,:,1)-PRRS(:,:,:,2),6,'HTURB_BU_RRV',YDDDH, YDLDDH, YDMDDH) ELSE - CALL BUDGET (PRRS(:,:,:,1),6,'HTURB_BU_RRV',YDDDH, YDLDDH, YDMDDH) + CALL BUDGET_DDH (PRRS(:,:,:,1),6,'HTURB_BU_RRV',YDDDH, YDLDDH, YDMDDH) END IF END IF -IF (LBUDGET_RC) CALL BUDGET (PRRS(:,:,:,2),7,'HTURB_BU_RRC',YDDDH, YDLDDH, YDMDDH) -IF (LBUDGET_RI) CALL BUDGET (PRRS(:,:,:,4),9,'HTURB_BU_RRI',YDDDH, YDLDDH, YDMDDH) +IF (LBUDGET_RC) CALL BUDGET_DDH (PRRS(:,:,:,2),7,'HTURB_BU_RRC',YDDDH, YDLDDH, YDMDDH) +IF (LBUDGET_RI) CALL BUDGET_DDH (PRRS(:,:,:,4),9,'HTURB_BU_RRI',YDDDH, YDLDDH, YDMDDH) ! !---------------------------------------------------------------------------- ! @@ -924,11 +924,11 @@ CALL TKE_EPS_SOURCES(KKA,KKU,KKL,KMI,PTKEM,ZLM,ZLEPS,PDP,ZTRH, & & PTDISS,PEDR,YDDDH, YDLDDH, YDMDDH) IF (LBUDGET_TH) THEN IF ( KRRI >= 1 .AND. KRRL >= 1 ) THEN - CALL BUDGET (PRTHLS+ ZLVOCPEXNM * PRRS(:,:,:,2) + ZLSOCPEXNM * PRRS(:,:,:,4),4,'DISSH_BU_RTH',YDDDH, YDLDDH, YDMDDH) + CALL BUDGET_DDH (PRTHLS+ ZLVOCPEXNM * PRRS(:,:,:,2) + ZLSOCPEXNM * PRRS(:,:,:,4),4,'DISSH_BU_RTH',YDDDH, YDLDDH, YDMDDH) ELSE IF ( KRRL >= 1 ) THEN - CALL BUDGET (PRTHLS+ ZLOCPEXNM * PRRS(:,:,:,2),4,'DISSH_BU_RTH',YDDDH, YDLDDH, YDMDDH) + CALL BUDGET_DDH (PRTHLS+ ZLOCPEXNM * PRRS(:,:,:,2),4,'DISSH_BU_RTH',YDDDH, YDLDDH, YDMDDH) ELSE - CALL BUDGET (PRTHLS,4,'DISSH_BU_RTH',YDDDH, YDLDDH, YDMDDH) + CALL BUDGET_DDH (PRTHLS,4,'DISSH_BU_RTH',YDDDH, YDLDDH, YDMDDH) END IF END IF diff --git a/src/common/micro/mode_ice4_sedimentation_stat.F90 b/src/common/micro/mode_ice4_sedimentation_stat.F90 index 26b25e10350bb349df94d7d16c95a67d264e0f2a..22d76575dac5b87e81803f5ccd27b49c0e853c64 100644 --- a/src/common/micro/mode_ice4_sedimentation_stat.F90 +++ b/src/common/micro/mode_ice4_sedimentation_stat.F90 @@ -209,7 +209,7 @@ DO JK = KKE , KKB, -1*KKL IF (JK==KKB) THEN DO JJ = KJB, KJE DO JI = KIB, KIE - PINPRC(JI,JJ) = ZSED(JI,JJ,IK,2)/XRHOLW + IF(OSEDIC) PINPRC(JI,JJ) = ZSED(JI,JJ,IK,2)/XRHOLW PINPRR(JI,JJ) = ZSED(JI,JJ,IK,3)/XRHOLW PINPRI(JI,JJ) = ZSED(JI,JJ,IK,4)/XRHOLW PINPRS(JI,JJ) = ZSED(JI,JJ,IK,5)/XRHOLW diff --git a/src/common/micro/mode_ice4_tendencies.F90 b/src/common/micro/mode_ice4_tendencies.F90 index f9af1458deaa289095f6d610f2b463368ee2eb5f..50f8ae0a4624f1b26adaec490c549a358100304b 100644 --- a/src/common/micro/mode_ice4_tendencies.F90 +++ b/src/common/micro/mode_ice4_tendencies.F90 @@ -6,22 +6,6 @@ MODULE MODE_ICE4_TENDENCIES IMPLICIT NONE CONTAINS -! -! -! -! -! -! -!!! NOTE: *quand l'array syntax sera remplacée par des boucles, en profiter -!!! pour supprimer les arguments PA et PB des différentes routines -!!! pour generaliser le fonctionnement de nucleation, rimltc et rrhong -!!! *avec loop, pcompute *et* llcompute utiles tous les deux? -! -! -! -! -! -! SUBROUTINE ICE4_TENDENCIES(KPROMA, KSIZE, KIB, KIE, KIT, KJB, KJE, KJT, KKB, KKE, KKT, KKL, & &KRR, ODSOFT, PCOMPUTE, & &OWARM, HSUBG_RC_RR_ACCR, HSUBG_RR_EVAP, & @@ -64,6 +48,7 @@ SUBROUTINE ICE4_TENDENCIES(KPROMA, KSIZE, KIB, KIE, KIT, KJB, KJE, KJT, KKB, KKE ! ------------ ! USE MODD_BUDGET, ONLY : LBU_ENABLE +USE MODE_MSG, ONLY: PRINT_MSG, NVERB_FATAL USE MODD_CST, ONLY: XALPI, XBETAI, XCI, XCPV, XEPSILO, XGAMI, XLSTT, XMD, XMV, XP00, XRV, XTT USE MODD_PARAM_ICE, ONLY: CSNOWRIMING USE MODD_RAIN_ICE_DESCR, ONLY: XLBDAS_MAX, XLBEXG, XLBEXH, XLBEXR, XLBEXS, XLBG, XLBH, XLBR, XLBS, XRTMIN @@ -175,14 +160,14 @@ REAL, DIMENSION(KPROMA, 10), INTENT(INOUT) :: PRH_TEND REAL, DIMENSION(KPROMA), INTENT(OUT) :: PSSI REAL, DIMENSION(KPROMA,0:KRR), INTENT(OUT) :: PA REAL, DIMENSION(KPROMA,0:KRR), INTENT(OUT) :: PB -REAL, DIMENSION(KPROMA), INTENT(OUT) :: PHLC_HCF -REAL, DIMENSION(KPROMA), INTENT(OUT) :: PHLC_LCF -REAL, DIMENSION(KPROMA), INTENT(OUT) :: PHLC_HRC -REAL, DIMENSION(KPROMA), INTENT(OUT) :: PHLC_LRC -REAL, DIMENSION(KPROMA), INTENT(OUT) :: PHLI_HCF -REAL, DIMENSION(KPROMA), INTENT(OUT) :: PHLI_LCF -REAL, DIMENSION(KPROMA), INTENT(OUT) :: PHLI_HRI -REAL, DIMENSION(KPROMA), INTENT(OUT) :: PHLI_LRI +REAL, DIMENSION(KPROMA), INTENT(INOUT) :: PHLC_HCF +REAL, DIMENSION(KPROMA), INTENT(INOUT) :: PHLC_LCF +REAL, DIMENSION(KPROMA), INTENT(INOUT) :: PHLC_HRC +REAL, DIMENSION(KPROMA), INTENT(INOUT) :: PHLC_LRC +REAL, DIMENSION(KPROMA), INTENT(INOUT) :: PHLI_HCF +REAL, DIMENSION(KPROMA), INTENT(INOUT) :: PHLI_LCF +REAL, DIMENSION(KPROMA), INTENT(INOUT) :: PHLI_HRI +REAL, DIMENSION(KPROMA), INTENT(INOUT) :: PHLI_LRI REAL, DIMENSION(KIT,KJT,KKT), INTENT(OUT) :: PRAINFR ! Rain fraction ! !* 0.2 declaration of local variables @@ -319,6 +304,15 @@ CALL ICE4_COMPUTE_PDF(KSIZE, HSUBG_AUCV_RC, HSUBG_AUCV_RI, HSUBG_PR_PDF,& PHLI_HCF, PHLI_LCF, PHLI_HRI, PHLI_LRI, ZRAINFR) LLRFR=HSUBG_RC_RR_ACCR=='PRFR' .OR. HSUBG_RR_EVAP=='PRFR' IF (LLRFR) THEN + CALL PRINT_MSG(NVERB_FATAL, 'GEN', 'MODE_ICE4_TENDENCIES', 'LLRFR case broken by optimisation, see comments in mode_ice4_tendencies to knwon why (and how to reapir)....') + !Microphyscs was optimized by introducing chunks of KPROMA size + !Thus, in ice4_tendencies, the 1D array represent only a fraction of the points where microphisical species are present + !We cannot rebuild the entire 3D arrays here, so we cannot call ice4_rainfr_vert here + !A solution would be to suppress optimisation in this case by setting KPROMA=KSIZE in rain_ice + !Another solution would be to compute column by column? + !Another one would be to cut tendencies in 3 parts: before rainfr_vert, rainfr_vert, after rainfr_vert + + !Diagnostic of precipitation fraction PRAINFR(:,:,:) = 0. ZRRT3D (:,:,:) = 0. diff --git a/src/arome/modset_Ryad/mpa/micro/module/modi_rain_ice.F90 b/src/common/micro/modi_rain_ice.F90 similarity index 81% rename from src/arome/modset_Ryad/mpa/micro/module/modi_rain_ice.F90 rename to src/common/micro/modi_rain_ice.F90 index 66776ce91f19b5ed06fe7b2591dca37d5ca41afd..d0f1cef0460e13d564d6ce5cc476494b82685fa5 100644 --- a/src/arome/modset_Ryad/mpa/micro/module/modi_rain_ice.F90 +++ b/src/common/micro/modi_rain_ice.F90 @@ -4,19 +4,20 @@ ! INTERFACE SUBROUTINE RAIN_ICE ( KPROMA, KIT, KJT, KKT, KSIZE, & - OSEDIC,OCND2, HSEDIM, HSUBG_AUCV_RC, OWARM, KKA, KKU, KKL, & + OSEDIC,OCND2, HSEDIM, HSUBG_AUCV_RC, HSUBG_AUCV_RI, & + OWARM, KKA, KKU, KKL, & PTSTEP, KRR, LDMICRO, PEXN, & PDZZ, PRHODJ, PRHODREF, PEXNREF, PPABST, PCIT, PCLDFR,& + PHLC_HRC, PHLC_HCF, PHLI_HRI, PHLI_HCF, & PTHT, PRVT, PRCT, PRRT, PRIT, PRST, & PRGT, PTHS, PRVS, PRCS, PRRS, PRIS, PRSS, PRGS, & PINPRC, PINPRR, PEVAP3D, & - PINPRS, PINPRG, PSIGS, PSEA, PTOWN, & + PINPRS, PINPRG, PINDEP, PRAINFR, PSIGS, PSEA, PTOWN, & PRHT, PRHS, PINPRH, PFPR, & - YDDDH, YDLDDH, YDMDDH ) + TBUDGETS, KBUDGETS) ! -USE DDH_MIX, ONLY : TYP_DDH -USE YOMLDDH, ONLY : TLDDH -USE YOMMDDH, ONLY : TMDDH +USE MODD_BUDGET, ONLY : TBUDGETDATA +USE MODD_PARAM_ICE, ONLY: LDEPOSC ! INTEGER, INTENT(IN) :: KPROMA ! cache-blocking factor for microphysic loop INTEGER, INTENT(IN) :: KIT, KJT, KKT ! arrays size @@ -26,6 +27,8 @@ LOGICAL :: OCND2 ! Logical switch to separate l CHARACTER(LEN=4), INTENT(IN) :: HSEDIM ! Sedimentation scheme CHARACTER(LEN=4), INTENT(IN) :: HSUBG_AUCV_RC ! Switch for rc->rr Subgrid autoconversion ! Kind of Subgrid autoconversion method +CHARACTER(LEN=80), INTENT(IN) :: HSUBG_AUCV_RI ! Switch for ri->rs Subgrid autoconversion + ! Kind of Subgrid autoconversion method LOGICAL, INTENT(IN) :: OWARM ! .TRUE. allows raindrops to ! form by warm processes ! (Kessler scheme) @@ -47,6 +50,10 @@ REAL, DIMENSION(KIT,KJT,KKT), INTENT(IN) :: PPABST ! absolute pressure at ! REAL, DIMENSION(KIT,KJT,KKT), INTENT(INOUT) :: PCIT ! Pristine ice n.c. at t REAL, DIMENSION(KIT,KJT,KKT), INTENT(IN) :: PCLDFR ! Cloud fraction +REAL, DIMENSION(KIT,KJT,KKT), INTENT(IN) :: PHLC_HRC +REAL, DIMENSION(KIT,KJT,KKT), INTENT(IN) :: PHLC_HCF +REAL, DIMENSION(KIT,KJT,KKT), INTENT(IN) :: PHLI_HRI +REAL, DIMENSION(KIT,KJT,KKT), INTENT(IN) :: PHLI_HCF ! REAL, DIMENSION(KIT,KJT,KKT), INTENT(IN) :: PTHT ! Theta at time t REAL, DIMENSION(KIT,KJT,KKT), INTENT(IN) :: PRVT ! Water vapor m.r. at t @@ -72,15 +79,17 @@ REAL, DIMENSION(KIT,KJT), INTENT(OUT) :: PINPRR! Rain instant precip REAL, DIMENSION(KIT,KJT,KKT), INTENT(OUT) :: PEVAP3D! Rain evap profile REAL, DIMENSION(KIT,KJT), INTENT(OUT) :: PINPRS! Snow instant precip REAL, DIMENSION(KIT,KJT), INTENT(OUT) :: PINPRG! Graupel instant precip +REAL, DIMENSION(MERGE(KIT, 0, LDEPOSC), MERGE(KJT, 0, LDEPOSC)), INTENT(OUT) :: PINDEP ! Cloud instant deposition +REAL, DIMENSION(KIT,KJT,KKT), INTENT(OUT) :: PRAINFR !Precipitation fraction REAL, DIMENSION(KIT,KJT), OPTIONAL, INTENT(IN) :: PSEA ! Sea Mask REAL, DIMENSION(KIT,KJT), OPTIONAL, INTENT(IN) :: PTOWN! Fraction that is town REAL, DIMENSION(KIT,KJT,KKT), OPTIONAL, INTENT(IN) :: PRHT ! Hail m.r. at t REAL, DIMENSION(KIT,KJT,KKT), OPTIONAL, INTENT(INOUT) :: PRHS ! Hail m.r. source REAL, DIMENSION(KIT,KJT), OPTIONAL, INTENT(OUT) :: PINPRH! Hail instant precip REAL, DIMENSION(KIT,KJT,KKT,KRR), OPTIONAL, INTENT(OUT) :: PFPR ! upper-air precipitation fluxes -TYPE(TYP_DDH), INTENT(INOUT) :: YDDDH -TYPE(TLDDH), INTENT(IN) :: YDLDDH -TYPE(TMDDH), INTENT(IN) :: YDMDDH +! +TYPE(TBUDGETDATA), DIMENSION(KBUDGETS), INTENT(INOUT) :: TBUDGETS +INTEGER, INTENT(IN) :: KBUDGETS ! END SUBROUTINE RAIN_ICE END INTERFACE diff --git a/src/arome/modset_Ryad/mpa/micro/internals/rain_ice.F90 b/src/common/micro/rain_ice.F90 similarity index 55% rename from src/arome/modset_Ryad/mpa/micro/internals/rain_ice.F90 rename to src/common/micro/rain_ice.F90 index d5f1bb22b9e1c19f130b9f3529924ceab5dff08c..952e54e53c6a2bc10323bdd57b406e5194c36adb 100644 --- a/src/arome/modset_Ryad/mpa/micro/internals/rain_ice.F90 +++ b/src/common/micro/rain_ice.F90 @@ -4,18 +4,18 @@ !MNH_LIC for details. version 1. !----------------------------------------------------------------- ! ######spl - SUBROUTINE RAIN_ICE ( KPROMA, KIT, KJT, KKT, KSIZE, & - OSEDIC, OCND2, HSEDIM, HSUBG_AUCV_RC, OWARM,KKA,KKU,KKL,& + SUBROUTINE RAIN_ICE ( KPROMA, KIT, KJT, KKT, KSIZE, & + OSEDIC, OCND2, HSEDIM, HSUBG_AUCV_RC, HSUBG_AUCV_RI, & + OWARM, KKA, KKU, KKL, & PTSTEP, KRR, ODMICRO, PEXN, & PDZZ, PRHODJ, PRHODREF, PEXNREF, PPABST, PCIT, PCLDFR,& + PHLC_HRC, PHLC_HCF, PHLI_HRI, PHLI_HCF, & PTHT, PRVT, PRCT, PRRT, PRIT, PRST, & PRGT, PTHS, PRVS, PRCS, PRRS, PRIS, PRSS, PRGS, & PINPRC, PINPRR, PEVAP3D, & - PINPRS, PINPRG, PSIGS, PSEA, PTOWN, & + PINPRS, PINPRG, PINDEP, PRAINFR, PSIGS, PSEA, PTOWN, & PRHT, PRHS, PINPRH, PFPR, & - YDDDH, YDLDDH, YDMDDH ) - USE PARKIND1, ONLY : JPRB - USE YOMHOOK , ONLY : LHOOK, DR_HOOK + TBUDGETS, KBUDGETS) ! ###################################################################### ! !!**** * - compute the explicit microphysical sources @@ -153,21 +153,40 @@ !! land, sea and urban areas in the cloud sedimentation. !! (D. Degrauwe), 2013-11: Export upper-air precipitation fluxes PFPR. !! (S. Riette) Nov 2013 Protection against null sigma +!! (C. Lac) FIT temporal scheme : instant M removed +!! (JP Pinty), 01-2014 : ICE4 : partial reconversion of hail to graupel +!! July, 2015 (O.Nuissier/F.Duffourg) Add microphysics diagnostic for +!! aircraft, ballon and profiler +!! J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 +!! C.Lac : 10/2016 : add droplet deposition +!! C.Lac : 01/2017 : correction on droplet deposition +!! J.Escobar : 10/2017 : for real*4 , limit exp() in RAIN_ICE_SLOW with XMNH_HUGE_12_LOG !! (C. Abiven, Y. Léauté, V. Seigner, S. Riette) Phasing of Turner rain subgrid param !! (S. Riette) Source code split into several files +!! 02/2019 C.Lac add rain fraction as an output field +! P. Wautelet 10/04/2019: replace ABORT and STOP calls by Print_msg +! P. Wautelet 28/05/2019: move COUNTJV function to tools.f90 +! P. Wautelet 29/05/2019: remove PACK/UNPACK intrinsics (to get more performance and better OpenACC support) +! P. Wautelet 17/01/2020: move Quicksort to tools.f90 +! P. Wautelet 02/2020: use the new data structures and subroutines for budgets +! P. Wautelet 25/02/2020: bugfix: add missing budget: WETH_BU_RRG !! R. El Khatib 24-Aug-2021 Optimizations +!----------------------------------------------------------------- ! !* 0. DECLARATIONS ! ------------ ! +USE PARKIND1, ONLY : JPRB +USE YOMHOOK , ONLY : LHOOK, DR_HOOK + +USE MODD_BUDGET, ONLY: TBUDGETDATA, LBU_ENABLE, & + & LBUDGET_TH, LBUDGET_RV, LBUDGET_RC, LBUDGET_RR, LBUDGET_RI, LBUDGET_RS, LBUDGET_RG, LBUDGET_RH, & + & NBUDGET_TH, NBUDGET_RV, NBUDGET_RC, NBUDGET_RR, NBUDGET_RI, NBUDGET_RS, NBUDGET_RG, NBUDGET_RH USE MODD_CST, ONLY: XCI, XCL, XCPD, XCPV, XLSTT, XLVTT, XTT, XRHOLW -USE MODD_PARAMETERS, ONLY: JPVEXT, XUNDEF +USE MODD_PARAMETERS, ONLY: JPVEXT USE MODD_PARAM_ICE, ONLY: CSUBG_PR_PDF, CSUBG_RC_RR_ACCR, CSUBG_RR_EVAP, LDEPOSC, LFEEDBACKT, LSEDIM_AFTER, & & NMAXITER, XMRSTEP, XTSTEP_TS, XVDEPOSC USE MODD_RAIN_ICE_DESCR, ONLY: XRTMIN -USE MODD_RAIN_ICE_PARAM -USE MODD_BUDGET -USE MODD_LES USE MODD_FIELDS_ADDRESS, ONLY : & ! common fields adress & ITH, & ! Potential temperature & IRV, & ! Water vapor @@ -177,16 +196,17 @@ USE MODD_FIELDS_ADDRESS, ONLY : & ! common fields adress & IRS, & ! Snow/aggregate & IRG, & ! Graupel & IRH ! Hail -USE MODI_BUDGET -USE MODI_ICE4_RAINFR_VERT + +USE MODE_BUDGET, ONLY: BUDGET_STORE_ADD, BUDGET_STORE_INIT, BUDGET_STORE_END +USE MODE_ll +USE MODE_MSG, ONLY: PRINT_MSG, NVERB_FATAL + +USE MODE_ICE4_RAINFR_VERT, ONLY: ICE4_RAINFR_VERT USE MODE_ICE4_SEDIMENTATION_STAT, ONLY: ICE4_SEDIMENTATION_STAT USE MODE_ICE4_SEDIMENTATION_SPLIT, ONLY: ICE4_SEDIMENTATION_SPLIT USE MODE_ICE4_SEDIMENTATION_SPLIT_MOMENTUM, ONLY: ICE4_SEDIMENTATION_SPLIT_MOMENTUM USE MODE_ICE4_NUCLEATION_WRAPPER, ONLY: ICE4_NUCLEATION_WRAPPER USE MODE_ICE4_TENDENCIES, ONLY: ICE4_TENDENCIES -USE DDH_MIX, ONLY : TYP_DDH -USE YOMLDDH, ONLY : TLDDH -USE YOMMDDH, ONLY : TMDDH ! IMPLICIT NONE ! @@ -201,6 +221,7 @@ LOGICAL, INTENT(IN) :: OSEDIC ! Switch for droplet sedim. LOGICAL :: OCND2 ! Logical switch to separate liquid and ice CHARACTER(LEN=4), INTENT(IN) :: HSEDIM ! Sedimentation scheme CHARACTER(LEN=4), INTENT(IN) :: HSUBG_AUCV_RC ! Kind of Subgrid autoconversion method +CHARACTER(LEN=80), INTENT(IN) :: HSUBG_AUCV_RI ! Kind of Subgrid autoconversion method LOGICAL, INTENT(IN) :: OWARM ! .TRUE. allows raindrops to ! form by warm processes ! (Kessler scheme) @@ -220,6 +241,10 @@ REAL, DIMENSION(KIT,KJT,KKT), INTENT(IN) :: PPABST ! absolute pressure at ! REAL, DIMENSION(KIT,KJT,KKT), INTENT(INOUT) :: PCIT ! Pristine ice n.c. at t REAL, DIMENSION(KIT,KJT,KKT), INTENT(IN) :: PCLDFR ! Convective Mass Flux Cloud fraction +REAL, DIMENSION(KIT,KJT,KKT), INTENT(IN) :: PHLC_HRC +REAL, DIMENSION(KIT,KJT,KKT), INTENT(IN) :: PHLC_HCF +REAL, DIMENSION(KIT,KJT,KKT), INTENT(IN) :: PHLI_HRI +REAL, DIMENSION(KIT,KJT,KKT), INTENT(IN) :: PHLI_HCF REAL, DIMENSION(KIT,KJT,KKT), INTENT(IN) :: PTHT ! Theta at time t REAL, DIMENSION(KIT,KJT,KKT), INTENT(IN) :: PRVT ! Water vapor m.r. at t REAL, DIMENSION(KIT,KJT,KKT), INTENT(IN) :: PRCT ! Cloud water m.r. at t @@ -227,7 +252,6 @@ REAL, DIMENSION(KIT,KJT,KKT), INTENT(IN) :: PRRT ! Rain water m.r. at t REAL, DIMENSION(KIT,KJT,KKT), INTENT(IN) :: PRIT ! Pristine ice m.r. at t REAL, DIMENSION(KIT,KJT,KKT), INTENT(IN) :: PRST ! Snow/aggregate m.r. at t REAL, DIMENSION(KIT,KJT,KKT), INTENT(IN) :: PRGT ! Graupel/hail m.r. at t -REAL, DIMENSION(KIT,KJT,KKT), INTENT(IN) :: PSIGS ! Sigma_s at t ! REAL, DIMENSION(KIT,KJT,KKT), INTENT(INOUT) :: PTHS ! Theta source REAL, DIMENSION(KIT,KJT,KKT), INTENT(INOUT) :: PRVS ! Water vapor m.r. source @@ -242,25 +266,24 @@ REAL, DIMENSION(KIT,KJT), INTENT(OUT) :: PINPRR! Rain instant precip REAL, DIMENSION(KIT,KJT,KKT), INTENT(OUT) :: PEVAP3D! Rain evap profile REAL, DIMENSION(KIT,KJT), INTENT(OUT) :: PINPRS! Snow instant precip REAL, DIMENSION(KIT,KJT), INTENT(OUT) :: PINPRG! Graupel instant precip +REAL, DIMENSION(KIT,KJT), INTENT(OUT) :: PINDEP ! Cloud instant deposition +REAL, DIMENSION(KIT,KJT,KKT), INTENT(OUT) :: PRAINFR !Precipitation fraction +REAL, DIMENSION(KIT,KJT,KKT), INTENT(IN) :: PSIGS ! Sigma_s at t REAL, DIMENSION(KIT,KJT), OPTIONAL, INTENT(IN) :: PSEA ! Sea Mask REAL, DIMENSION(KIT,KJT), OPTIONAL, INTENT(IN) :: PTOWN! Fraction that is town REAL, DIMENSION(KIT,KJT,KKT), OPTIONAL, INTENT(IN) :: PRHT ! Hail m.r. at t REAL, DIMENSION(KIT,KJT,KKT), OPTIONAL, INTENT(INOUT) :: PRHS ! Hail m.r. source REAL, DIMENSION(KIT,KJT), OPTIONAL, INTENT(OUT) :: PINPRH! Hail instant precip REAL, DIMENSION(KIT,KJT,KKT,KRR), OPTIONAL, INTENT(OUT) :: PFPR ! upper-air precipitation fluxes -TYPE(TYP_DDH), INTENT(INOUT) :: YDDDH -TYPE(TLDDH), INTENT(IN) :: YDLDDH -TYPE(TMDDH), INTENT(IN) :: YDMDDH +! +TYPE(TBUDGETDATA), DIMENSION(KBUDGETS), INTENT(INOUT) :: TBUDGETS +INTEGER, INTENT(IN) :: KBUDGETS ! !* 0.2 Declarations of local variables : ! REAL(KIND=JPRB) :: ZHOOK_HANDLE -!REAL(KIND=JPRB) :: ZHOOK_HANDLE1 -!REAL(KIND=JPRB) :: ZHOOK_HANDLE2 -!REAL(KIND=JPRB) :: ZHOOK_HANDLE3 -!REAL(KIND=JPRB) :: ZHOOK_HANDLE4 -!REAL(KIND=JPRB) :: ZHOOK_HANDLE5 - +INTEGER :: IIU +INTEGER :: IJU INTEGER :: IIB ! Define the domain where is INTEGER :: IIE ! the microphysical sources have to be computed INTEGER :: IJB ! @@ -274,10 +297,12 @@ INTEGER :: ISTI, ISTJ, ISTK !Arrays for nucleation call outisde of ODMICRO points REAL, DIMENSION(KIT, KJT, KKT) :: ZW ! work array REAL, DIMENSION(KIT, KJT, KKT) :: ZT ! Temperature -REAL, DIMENSION(KIT, KJT, KKT) :: & - & ZZ_RVHENI_MR ! heterogeneous nucleation mixing ratio change -REAL, DIMENSION(KIT, KJT, KKT) :: ZZ_LVFACT, ZZ_LSFACT -REAL :: ZZ_RVHENI ! heterogeneous nucleation +REAL, DIMENSION(KIT, KJT, KKT) :: ZZ_RVHENI_MR, & ! heterogeneous nucleation mixing ratio change + & ZZ_RVHENI ! heterogeneous nucleation +REAL, DIMENSION(MERGE(KIT, 0, LBU_ENABLE), & + &MERGE(KJT, 0, LBU_ENABLE), & + &MERGE(KKT, 0, LBU_ENABLE)) :: ZW1, ZW2, ZW3, ZW4, ZW5, ZW6 !Work arrays +REAL, DIMENSION(KIT, KJT, KKT) :: ZZ_LVFACT, ZZ_LSFACT, ZZ_DIFF ! REAL, DIMENSION(KIT,KJT,KKT) :: ZRCT ! Cloud water m.r. source at t REAL, DIMENSION(KIT,KJT,KKT) :: ZRRT ! Rain water m.r. source at t @@ -285,20 +310,9 @@ REAL, DIMENSION(KIT,KJT,KKT) :: ZRIT ! Pristine ice m.r. source at t REAL, DIMENSION(KIT,KJT,KKT) :: ZRST ! Snow/aggregate m.r. source at t REAL, DIMENSION(KIT,KJT,KKT) :: ZRGT ! Graupel m.r. source at t REAL, DIMENSION(KIT,KJT,KKT) :: ZRHT ! Hail m.r. source at t +REAL, DIMENSION(KIT,KJT,KKT) :: ZCITOUT ! Output value for CIT !Diagnostics -LOGICAL :: LLRAIN_FRACTION=.FALSE. ! activate or rain fraction -REAL, DIMENSION(KIT, KJT, KKT) :: ZRAINFR3D -LOGICAL :: LLHLC=.FALSE. ! activate or not HLCLOUDS -REAL, DIMENSION(KIT, KJT, KKT) :: & - & ZHLC_HCF3D,& ! HLCLOUDS cloud fraction in high water content part - & ZHLC_LCF3D,& ! HLCLOUDS cloud fraction in low water content part - & ZHLC_HRC3D,& ! HLCLOUDS cloud water content in high water content - & ZHLC_LRC3D,& ! HLCLOUDS cloud water content in low water content - & ZHLI_HCF3D,& ! HLCLOUDS cloud fraction in high ice content part - & ZHLI_LCF3D,& ! HLCLOUDS cloud fraction in low ice content part - & ZHLI_HRI3D,& ! HLCLOUDS cloud water content in high ice content - & ZHLI_LRI3D ! HLCLOUDS cloud water content in high ice content REAL, DIMENSION(SIZE(PTHT,1),SIZE(PTHT,2)) :: ZINPRI ! Pristine ice instant precip ! LOGICAL :: GEXT_TEND @@ -341,8 +355,8 @@ REAL, DIMENSION(KSIZE) :: ZTOT_RVHENI, & ! heterogeneous nucleation mixing ratio !For packing INTEGER :: IMICRO ! Case r_x>0 locations INTEGER :: JL, JV -REAL, DIMENSION(KPROMA) :: ZTIME ! Current integration time (starts with 0 and ends with PTSTEP) -REAL, DIMENSION(KPROMA) :: & +REAL, DIMENSION(KPROMA) :: ZTIME ! Current integration time (starts with 0 and ends with PTSTEP) +REAL, DIMENSION(KPROMA) :: & & ZMAXTIME, & ! Time on which we can apply the current tendencies & ZTIME_LASTCALL, & ! Integration time when last tendecies call has been done & ZCOMPUTE, & ! 1. for points where we must compute tendencies, 0. elsewhere @@ -366,7 +380,6 @@ REAL, DIMENSION(KPROMA) :: & & ZHLI_LCF, & & ZHLI_HRI, & & ZHLI_LRI - & ZRAINFR ! rain fraction ! !Output packed tendencies (for budgets only) REAL, DIMENSION(KPROMA) :: ZRVHENI_MR, & ! heterogeneous nucleation mixing ratio change @@ -396,9 +409,9 @@ REAL, DIMENSION(KPROMA) :: ZRVHENI_MR, & ! heterogeneous nucleation mixing ratio & ZRCDRYH, ZRIDRYH, ZRSDRYH, ZRRDRYH, ZRGDRYH, & ! Wet growth of hailstone & ZRDRYHG ! Conversion of hailstone into graupel ! -!For time- or mixing-ratio- splitting at the begining of the current loop -LOGICAL, DIMENSION(KRR) :: LLCPZ0T -REAL, DIMENSION(KPROMA) :: Z0T +!For mixing-ratio-splitting +LOGICAL :: LLCPZ0RT +REAL, DIMENSION(KPROMA, KRR) :: Z0RT ! Mixing-ratios at the beginig of the current loop ! REAL, DIMENSION(KPROMA,0:7) :: & & ZVART, & !Packed variables @@ -411,33 +424,41 @@ REAL, DIMENSION(KPROMA,10) :: ZRH_TEND INTEGER, DIMENSION(KPROMA) :: & & I1,I2,I3, & ! Used to replace the COUNT and PACK intrinsics on variables & IITER ! Number of iterations done (with real tendencies computation) +INTEGER, DIMENSION(KSIZE) :: I1TOT, I2TOT, I3TOT ! Used to replace the COUNT and PACK intrinsics ! -REAL, DIMENSION(KPROMA) :: ZSUM2, ZMAXB, ZTHRESHOLD -REAL :: ZDEVIDE, ZX, ZSUM1 +REAL, DIMENSION(KPROMA) :: ZSUM2, ZMAXB +REAL :: ZDEVIDE, ZX, ZRICE ! -INTEGER :: IOFF, IC, JMICRO -LOGICAL :: LLSIGMA_RC, LL_ANY_ITER - -#include "abor1.intfb.h" +INTEGER :: IC, JMICRO +LOGICAL :: LLSIGMA_RC, LL_ANY_ITER, LL_AUCV_ADJU +! !------------------------------------------------------------------------------- IF (LHOOK) CALL DR_HOOK('RAIN_ICE', 0, ZHOOK_HANDLE) +! !------------------------------------------------------------------------------- ! -!IF (LHOOK) CALL DR_HOOK('RAIN_ICE:ANTE_MICRO', 0, ZHOOK_HANDLE1) IF(OCND2) THEN - WRITE(*,*) ' STOP' - WRITE(*,*) ' OCND2 OPTION NOT CODED IN THIS RAIN_ICE VERSION' - CALL ABORT - STOP + CALL PRINT_MSG(NVERB_FATAL, 'GEN', 'RAIN_ICE', 'OCND2 OPTION NOT CODED IN THIS RAIN_ICE VERSION') END IF +IF(KPROMA /= KSIZE) THEN + CALL PRINT_MSG(NVERB_FATAL, 'GEN', 'RAIN_ICE', 'For now, KPROMA must be equal to KSIZE, see code for explanation') + ! 2 issues + ! * Microphyscs was optimized by introducing chunks of KPROMA size + ! Thus, in ice4_tendencies, the 1D array represent only a fraction of the points where microphisical species are present + ! We cannot rebuild the entire 3D arrays in the subroutine, so we cannot call ice4_rainfr_vert in it + ! A solution would be to suppress optimisation in this case by setting KPROMA=KSIZE in rain_ice + ! Another solution would be to compute column by column? + ! Another one would be to cut tendencies in 3 parts: before rainfr_vert, rainfr_vert, after rainfr_vert + ! * When chuncks are used, result is different +ENDIF +! !* 1. COMPUTE THE LOOP BOUNDS ! ----------------------- ! -IIB=1+JPHEXT -IIE=SIZE(PDZZ,1) - JPHEXT -IJB=1+JPHEXT -IJE=SIZE(PDZZ,2) - JPHEXT +IIU=SIZE(PDZZ,1) +IJU=SIZE(PDZZ,2) +CALL GET_INDICE_ll(IIB,IJB,IIE,IJE,IIU,IJU) IKB=KKA+JPVEXT*KKL IKE=KKU-JPVEXT*KKL IKTB=1+JPVEXT @@ -451,11 +472,11 @@ DO JK = 1, KKT DO JJ = 1, KJT DO JI = 1, KIT IF (KRR==7) THEN - ZSUM1=PRIT(JI,JJ,JK)+PRST(JI,JJ,JK)+PRGT(JI,JJ,JK)+PRHT(JI,JJ,JK) + ZRICE=PRIT(JI,JJ,JK)+PRST(JI,JJ,JK)+PRGT(JI,JJ,JK)+PRHT(JI,JJ,JK) ELSE - ZSUM1=PRIT(JI,JJ,JK)+PRST(JI,JJ,JK)+PRGT(JI,JJ,JK) + ZRICE=PRIT(JI,JJ,JK)+PRST(JI,JJ,JK)+PRGT(JI,JJ,JK) ENDIF - ZDEVIDE = XCPD + XCPV*PRVT(JI,JJ,JK) + XCL*(PRCT(JI,JJ,JK)+PRRT(JI,JJ,JK)) + XCI*ZSUM1 + ZDEVIDE = XCPD + XCPV*PRVT(JI,JJ,JK) + XCL*(PRCT(JI,JJ,JK)+PRRT(JI,JJ,JK)) + XCI*ZRICE ZT(JI,JJ,JK) = PTHT(JI,JJ,JK) * PEXN(JI,JJ,JK) ZZ_LSFACT(JI,JJ,JK)=(XLSTT+(XCPV-XCI)*(ZT(JI,JJ,JK)-XTT)) / ZDEVIDE ZZ_LVFACT(JI,JJ,JK)=(XLVTT+(XCPV-XCL)*(ZT(JI,JJ,JK)-XTT)) / ZDEVIDE @@ -472,6 +493,13 @@ IF(.NOT. LSEDIM_AFTER) THEN ! !* 2.1 sedimentation ! + IF (LBUDGET_RC .AND. OSEDIC) CALL BUDGET_STORE_INIT(TBUDGETS(NBUDGET_RC), 'SEDI', PRCS(:, :, :) * PRHODJ(:, :, :)) + IF (LBUDGET_RR) CALL BUDGET_STORE_INIT(TBUDGETS(NBUDGET_RR), 'SEDI', PRRS(:, :, :) * PRHODJ(:, :, :)) + IF (LBUDGET_RI) CALL BUDGET_STORE_INIT(TBUDGETS(NBUDGET_RI), 'SEDI', PRIS(:, :, :) * PRHODJ(:, :, :)) + IF (LBUDGET_RS) CALL BUDGET_STORE_INIT(TBUDGETS(NBUDGET_RS), 'SEDI', PRSS(:, :, :) * PRHODJ(:, :, :)) + IF (LBUDGET_RG) CALL BUDGET_STORE_INIT(TBUDGETS(NBUDGET_RG), 'SEDI', PRGS(:, :, :) * PRHODJ(:, :, :)) + IF (LBUDGET_RH .AND. KRR==7) CALL BUDGET_STORE_INIT(TBUDGETS(NBUDGET_RH), 'SEDI', PRHS(:, :, :) * PRHODJ(:, :, :)) + IF(HSEDIM=='STAT') THEN IF(KRR==7) THEN DO JK = 1, KKT @@ -487,8 +515,7 @@ IF(.NOT. LSEDIM_AFTER) THEN ENDDO ENDDO CALL ICE4_SEDIMENTATION_STAT(IIB, IIE, KIT, IJB, IJE, KJT, IKB, IKE, IKTB, IKTE, KKT, KKL, & - &PTSTEP, KRR, OSEDIC, & - &PDZZ, & + &PTSTEP, KRR, OSEDIC, PDZZ, & &PRHODREF, PPABST, PTHT, PRHODJ, & &PRCS, ZRCT, PRRS, ZRRT, PRIS, ZRIT,& &PRSS, ZRST, PRGS, ZRGT,& @@ -508,8 +535,7 @@ IF(.NOT. LSEDIM_AFTER) THEN ENDDO ENDDO CALL ICE4_SEDIMENTATION_STAT(IIB, IIE, KIT, IJB, IJE, KJT, IKB, IKE, IKTB, IKTE, KKT, KKL, & - &PTSTEP, KRR, OSEDIC, & - &PDZZ, & + &PTSTEP, KRR, OSEDIC, PDZZ, & &PRHODREF, PPABST, PTHT, PRHODJ, & &PRCS, ZRCT, PRRS, ZRRT, PRIS, ZRIT,& &PRSS, ZRST, PRGS, ZRGT,& @@ -518,13 +544,11 @@ IF(.NOT. LSEDIM_AFTER) THEN &PFPR=PFPR) ENDIF PINPRS(:,:) = PINPRS(:,:) + ZINPRI(:,:) - !No negativity correction here as we apply sedimentation on ZR.T variables + !No negativity correction here as we apply sedimentation on PR.S*PTSTEP variables ELSEIF(HSEDIM=='SPLI') THEN - !SR: It *seems* that we must have two separate calls for ifort IF(KRR==7) THEN CALL ICE4_SEDIMENTATION_SPLIT(IIB, IIE, KIT, IJB, IJE, KJT, IKB, IKE, IKTB, IKTE, KKT, KKL, & - &PTSTEP, KRR, OSEDIC, & - &PDZZ, & + &PTSTEP, KRR, OSEDIC, PDZZ, & &PRHODREF, PPABST, PTHT, PRHODJ, & &PRCS, PRCT, PRRS, PRRT, PRIS, PRIT, PRSS, PRST, PRGS, PRGT,& &PINPRC, PINPRR, ZINPRI, PINPRS, PINPRG, & @@ -532,8 +556,7 @@ IF(.NOT. LSEDIM_AFTER) THEN &PINPRH=PINPRH, PRHT=PRHT, PRHS=PRHS, PFPR=PFPR) ELSE CALL ICE4_SEDIMENTATION_SPLIT(IIB, IIE, KIT, IJB, IJE, KJT, IKB, IKE, IKTB, IKTE, KKT, KKL, & - &PTSTEP, KRR, OSEDIC, & - &PDZZ, & + &PTSTEP, KRR, OSEDIC, PDZZ, & &PRHODREF, PPABST, PTHT, PRHODJ, & &PRCS, PRCT, PRRS, PRRT, PRIS, PRIT, PRSS, PRST, PRGS, PRGT,& &PINPRC, PINPRR, ZINPRI, PINPRS, PINPRG, & @@ -556,27 +579,43 @@ IF(.NOT. LSEDIM_AFTER) THEN &PTHS, ZZ_LVFACT, ZZ_LSFACT, PRHS) ELSEIF(HSEDIM=='NONE') THEN ELSE - WRITE(*,*) ' STOP' - WRITE(*,*) ' NO SEDIMENTATION SCHEME FOR HSEDIM=', HSEDIM - CALL ABORT - STOP + CALL PRINT_MSG(NVERB_FATAL, 'GEN', 'RAIN_ICE', 'no sedimentation scheme for HSEDIM='//HSEDIM) END IF + + + + + + +!!!!! ajouter momentum + + + + + + + + + + + + + + ! !* 2.2 budget storage ! - IF (LBUDGET_RC .AND. OSEDIC) & - CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:), 7 , 'SEDI_BU_RRC',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:)*PRHODJ(:,:,:), 8 , 'SEDI_BU_RRR',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RI) CALL BUDGET (PRIS(:,:,:)*PRHODJ(:,:,:), 9 , 'SEDI_BU_RRI',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RS) CALL BUDGET (PRSS(:,:,:)*PRHODJ(:,:,:), 10, 'SEDI_BU_RRS',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RG) CALL BUDGET (PRGS(:,:,:)*PRHODJ(:,:,:), 11, 'SEDI_BU_RRG',YDDDH, YDLDDH, YDMDDH) - IF ( KRR == 7 .AND. LBUDGET_RH) & - CALL BUDGET (PRHS(:,:,:)*PRHODJ(:,:,:), 12, 'SEDI_BU_RRH',YDDDH, YDLDDH, YDMDDH) + IF (LBUDGET_RC .AND. OSEDIC) CALL BUDGET_STORE_END(TBUDGETS(NBUDGET_RC), 'SEDI', PRCS(:, :, :) * PRHODJ(:, :, :)) + IF (LBUDGET_RR) CALL BUDGET_STORE_END(TBUDGETS(NBUDGET_RR), 'SEDI', PRRS(:, :, :) * PRHODJ(:, :, :)) + IF (LBUDGET_RI) CALL BUDGET_STORE_END(TBUDGETS(NBUDGET_RI), 'SEDI', PRIS(:, :, :) * PRHODJ(:, :, :)) + IF (LBUDGET_RS) CALL BUDGET_STORE_END(TBUDGETS(NBUDGET_RS), 'SEDI', PRSS(:, :, :) * PRHODJ(:, :, :)) + IF (LBUDGET_RG) CALL BUDGET_STORE_END(TBUDGETS(NBUDGET_RG), 'SEDI', PRGS(:, :, :) * PRHODJ(:, :, :)) + IF (LBUDGET_RH .AND. KRR==7) CALL BUDGET_STORE_END(TBUDGETS(NBUDGET_RH), 'SEDI', PRHS(:, :, :) * PRHODJ(:, :, :)) ENDIF ! -! Bakup of tendencies + PEVAP3D preset : DO JK = 1,KKT + !Backup of T variables ZWR(:,:,JK,IRV)=PRVT(:,:,JK) ZWR(:,:,JK,IRC)=PRCT(:,:,JK) ZWR(:,:,JK,IRR)=PRRT(:,:,JK) @@ -588,18 +627,13 @@ DO JK = 1,KKT ELSE ZWR(:,:,JK,IRH)=0. ENDIF + + !Preset for output 3D variables IF(OWARM) THEN PEVAP3D(:,:,JK)=0. ENDIF - IF (KSIZE==0) THEN - PCIT(:,:,JK) = 0. - ENDIF - IF (LLHLC) THEN - ZHLC_HCF3D(:,:,JK)=0. - ZHLC_LCF3D(:,:,JK)=0. - ZHLC_HRC3D(:,:,JK)=0. - ZHLC_LRC3D(:,:,JK)=0. - ENDIF + PRAINFR(:,:,JK)=0. + ZCITOUT(:,:,JK)=0. ENDDO IF(LBU_ENABLE) THEN @@ -650,12 +684,13 @@ IF(LBU_ENABLE) THEN ZTOT_RDRYHG(:)=0. ENDIF -!IF (LHOOK) CALL DR_HOOK('RAIN_ICE:ANTE_MICRO', 1, ZHOOK_HANDLE1) !------------------------------------------------------------------------------- ! optimization by looking for locations where ! the microphysical fields are larger than a minimal value only !!! ! -IF (KSIZE /= COUNT(ODMICRO)) CALL ABOR1('RAIN_ICE : KSIZE /= COUNT(ODMICRO)') +IF (KSIZE /= COUNT(ODMICRO)) THEN + CALL PRINT_MSG(NVERB_FATAL, 'GEN', 'RAIN_ICE', 'RAIN_ICE : KSIZE /= COUNT(ODMICRO)') +ENDIF IF (KSIZE > 0) THEN @@ -665,13 +700,14 @@ IF (KSIZE > 0) THEN IF(XTSTEP_TS/=0.)THEN INB_ITER_MAX=MAX(1, INT(PTSTEP/XTSTEP_TS)) !At least the number of iterations needed for the time-splitting ZTSTEP=PTSTEP/INB_ITER_MAX - INB_ITER_MAX=MAX(NMAXITER, INB_ITER_MAX) !Fot the case XMRSTEP/=0. at the same time + INB_ITER_MAX=MAX(NMAXITER, INB_ITER_MAX) !For the case XMRSTEP/=0. at the same time ENDIF !=============================================================================================================== ! Cache-blocking loop : LLSIGMA_RC=(HSUBG_AUCV_RC=='PDF ' .AND. CSUBG_PR_PDF=='SIGM') + LL_AUCV_ADJU=(HSUBG_AUCV_RC=='ADJU' .OR. HSUBG_AUCV_RI=='ADJU') ! starting indexes : IC=0 @@ -685,7 +721,6 @@ IF (KSIZE > 0) THEN ! !* 3. PACKING ! -------- - !IF (LHOOK) CALL DR_HOOK('RAIN_ICE:PACK', 0, ZHOOK_HANDLE4) ! Setup packing parameters OUTER_LOOP: DO JK = ISTK, KKT @@ -695,41 +730,50 @@ IF (KSIZE > 0) THEN IF (ODMICRO(JI,JJ,JK)) THEN IC=IC+1 ! Initialization of variables in packed format : - ZVART(IC,ITH)=PTHT(JI,JJ,JK) - ZVART(IC,IRV)=PRVT(JI,JJ,JK) - ZVART(IC,IRC)=PRCT(JI,JJ,JK) - ZVART(IC,IRR)=PRRT(JI,JJ,JK) - ZVART(IC,IRI)=PRIT(JI,JJ,JK) - ZVART(IC,IRS)=PRST(JI,JJ,JK) - ZVART(IC,IRG)=PRGT(JI,JJ,JK) + ZVART(IC, ITH)=PTHT(JI, JJ, JK) + ZVART(IC, IRV)=PRVT(JI, JJ, JK) + ZVART(IC, IRC)=PRCT(JI, JJ, JK) + ZVART(IC, IRR)=PRRT(JI, JJ, JK) + ZVART(IC, IRI)=PRIT(JI, JJ, JK) + ZVART(IC, IRS)=PRST(JI, JJ, JK) + ZVART(IC, IRG)=PRGT(JI, JJ, JK) IF (KRR==7) THEN - ZVART(IC,IRH)=PRHT(JI,JJ,JK) + ZVART(IC, IRH)=PRHT(JI, JJ, JK) ENDIF IF (GEXT_TEND) THEN - ZEXTPK(IC,ITH)=PTHS(JI,JJ,JK) - ZEXTPK(IC,IRV)=PRVS(JI,JJ,JK) - ZEXTPK(IC,IRC)=PRCS(JI,JJ,JK) - ZEXTPK(IC,IRR)=PRRS(JI,JJ,JK) - ZEXTPK(IC,IRI)=PRIS(JI,JJ,JK) - ZEXTPK(IC,IRS)=PRSS(JI,JJ,JK) - ZEXTPK(IC,IRG)=PRGS(JI,JJ,JK) + !The th tendency is not related to a mixing ratio change, there is no exn/exnref issue here + ZEXTPK(IC, ITH)=PTHS(JI, JJ, JK) + ZEXTPK(IC, IRV)=PRVS(JI, JJ, JK) + ZEXTPK(IC, IRC)=PRCS(JI, JJ, JK) + ZEXTPK(IC, IRR)=PRRS(JI, JJ, JK) + ZEXTPK(IC, IRI)=PRIS(JI, JJ, JK) + ZEXTPK(IC, IRS)=PRSS(JI, JJ, JK) + ZEXTPK(IC, IRG)=PRGS(JI, JJ, JK) IF (KRR==7) THEN - ZEXTPK(IC,IRH)=PRHS(JI,JJ,JK) + ZEXTPK(IC, IRH)=PRHS(JI, JJ, JK) ENDIF - !The th tendency is not related to a mixing ratio change, there is no exn/exnref issue here ENDIF - ZCIT (IC)=PCIT (JI,JJ,JK) - ZCF (IC)=PCLDFR (JI,JJ,JK) - ZRHODREF (IC)=PRHODREF(JI,JJ,JK) - ZPRES (IC)=PPABST (JI,JJ,JK) - ZEXN (IC)=PEXN (JI,JJ,JK) + ZCIT (IC)=PCIT (JI, JJ, JK) + ZCF (IC)=PCLDFR (JI, JJ, JK) + ZRHODREF (IC)=PRHODREF(JI, JJ, JK) + ZPRES (IC)=PPABST (JI, JJ, JK) + ZEXN (IC)=PEXN (JI, JJ, JK) IF(LLSIGMA_RC) THEN - ZSIGMA_RC(IC)=PSIGS (JI,JJ,JK) + ZSIGMA_RC(IC)=PSIGS (JI, JJ, JK) + ENDIF + IF (LL_AUCV_ADJU) THEN + ZHLC_HCF(IC) = PHLC_HCF(JI, JJ, JK) + ZHLC_HRC(IC) = PHLC_HRC(JI, JJ, JK) + ZHLI_HCF(IC) = PHLI_HCF(JI, JJ, JK) + ZHLI_HRI(IC) = PHLI_HRI(JI, JJ, JK) ENDIF ! Save indices for later usages: I1(IC) = JI I2(IC) = JJ I3(IC) = JK + I1TOT(JMICRO+IC-1)=JI + I2TOT(JMICRO+IC-1)=JJ + I3TOT(JMICRO+IC-1)=JK IF (IC==IMICRO) THEN ! the end of the chunk has been reached, then reset the starting index : ISTI=JI+1 @@ -766,39 +810,44 @@ IF (KSIZE > 0) THEN ENDDO OUTER_LOOP IF (GEXT_TEND) THEN - DO JL = 1,IMICRO - ZEXTPK(JL,ITH)=ZEXTPK(JL,ITH)-ZVART(JL,ITH)*ZINV_TSTEP - ZEXTPK(JL,IRV)=ZEXTPK(JL,IRV)-ZVART(JL,IRV)*ZINV_TSTEP - ZEXTPK(JL,IRC)=ZEXTPK(JL,IRC)-ZVART(JL,IRC)*ZINV_TSTEP - ZEXTPK(JL,IRR)=ZEXTPK(JL,IRR)-ZVART(JL,IRR)*ZINV_TSTEP - ZEXTPK(JL,IRI)=ZEXTPK(JL,IRI)-ZVART(JL,IRI)*ZINV_TSTEP - ZEXTPK(JL,IRS)=ZEXTPK(JL,IRS)-ZVART(JL,IRS)*ZINV_TSTEP - ZEXTPK(JL,IRG)=ZEXTPK(JL,IRG)-ZVART(JL,IRG)*ZINV_TSTEP - IF (KRR==7) THEN - ZEXTPK(JL,IRH)=ZEXTPK(JL,IRH)-ZVART(JL,IRH)*ZINV_TSTEP - ENDIF - ENDDO + DO JV=0, KRR + DO JL=1, IMICRO + ZEXTPK(JL, JV)=ZEXTPK(JL, JV)-ZVART(JL, JV)*ZINV_TSTEP + ENDDO + ENDDO ENDIF IF (LLSIGMA_RC) THEN - DO JL = 1,IMICRO + DO JL=1, IMICRO ZSIGMA_RC(JL)=ZSIGMA_RC(JL)*2. ENDDO ENDIF - - !IF (LHOOK) CALL DR_HOOK('RAIN_ICE:PACK', 1, ZHOOK_HANDLE4) + IF (LL_AUCV_ADJU) THEN + DO JL=1, IMICRO + ZHLC_LRC(JL) = ZVART(JL, IRC) - ZHLC_HRC(JL) + ZHLI_LRI(JL) = ZVART(JL, IRI) - ZHLI_HRI(JL) + IF(ZVART(JL, IRC)>0.) THEN + ZHLC_LCF(JL) = ZCF(JL)- ZHLC_HCF(JL) + ELSE + ZHLC_LCF(JL)=0. + ENDIF + IF(ZVART(JL, IRI)>0.) THEN + ZHLI_LCF(JL) = ZCF(JL)- ZHLI_HCF(JL) + ELSE + ZHLI_LCF(JL)=0. + ENDIF + ENDDO + ENDIF !------------------------------------------------------------------------------- ! !* 4. LOOP ! ---- ! - !IF (LHOOK) CALL DR_HOOK('RAIN_ICE:IMICRO', 0, ZHOOK_HANDLE2) - IITER(1:IMICRO)=0 ZTIME(1:IMICRO)=0. ! Current integration time (all points may have a different integration time) DO WHILE(ANY(ZTIME(1:IMICRO)<PTSTEP)) ! Loop to *really* compute tendencies - + IF(XTSTEP_TS/=0.) THEN ! In this case we need to remember the time when tendencies were computed ! because when time has evolved more than a limit, we must re-compute tendencies @@ -813,18 +862,17 @@ IF (KSIZE > 0) THEN ENDIF ENDDO LL_ANY_ITER=ANY(IITER(1:IMICRO) < INB_ITER_MAX) - LLCPZ0T(:)=XMRSTEP/=0. .AND. LL_ANY_ITER + LLCPZ0RT=.TRUE. LSOFT=.FALSE. ! We *really* compute the tendencies - - DO WHILE(ANY(ZCOMPUTE(1:IMICRO)==1.)) ! Loop to adjust tendencies when we cross the 0°C or when a species disappears + DO WHILE(ANY(ZCOMPUTE(1:IMICRO)==1.)) ! Loop to adjust tendencies when we cross the 0°C or when a species disappears !$OMP SIMD DO JL=1, IMICRO ZSUM2(JL)=SUM(ZVART(JL,IRI:KRR)) ENDDO DO JL=1, IMICRO - ZDEVIDE=(XCPD + XCPV*ZVART(JL,IRV) + XCL*(ZVART(JL,IRC)+ZVART(JL,IRR)) + XCI*ZSUM2(JL)) * ZEXN(JL) - ZZT(JL) = ZVART(JL,ITH) * ZEXN(JL) + ZDEVIDE=(XCPD + XCPV*ZVART(JL, IRV) + XCL*(ZVART(JL, IRC)+ZVART(JL, IRR)) + XCI*ZSUM2(JL)) * ZEXN(JL) + ZZT(JL) = ZVART(JL, ITH) * ZEXN(JL) ZLSFACT(JL)=(XLSTT+(XCPV-XCI)*(ZZT(JL)-XTT)) / ZDEVIDE ZLVFACT(JL)=(XLVTT+(XCPV-XCL)*(ZZT(JL)-XTT)) / ZDEVIDE ENDDO @@ -832,7 +880,7 @@ IF (KSIZE > 0) THEN !*** 4.1 Tendencies computation ! ! Tendencies are *really* computed when LSOFT==.FALSE. and only adjusted otherwise - CALL ICE4_TENDENCIES(KPROMA,IMICRO, IIB, IIE, KIT, IJB, IJE, KJT, IKB, IKE, KKT, KKL, & + CALL ICE4_TENDENCIES(KPROMA, IMICRO, IIB, IIE, KIT, IJB, IJE, KJT, IKB, IKE, KKT, KKL, & &KRR, LSOFT, ZCOMPUTE, & &OWARM, CSUBG_RC_RR_ACCR, CSUBG_RR_EVAP, & &HSUBG_AUCV_RC, HSUBG_AUCV_RI, CSUBG_PR_PDF, & @@ -840,7 +888,6 @@ IF (KSIZE > 0) THEN &ZPRES, ZCF, ZSIGMA_RC, & &ZCIT, & &ZZT, ZVART, & - &PRRT, & &ZRVHENI_MR, ZRRHONG_MR, ZRIMLTC_MR, ZRSRIMCG_MR, & &ZRCHONI, ZRVDEPS, ZRIAGGS, ZRIAUTS, ZRVDEPG, & &ZRCAUTR, ZRCACCR, ZRREVAV, & @@ -857,9 +904,9 @@ IF (KSIZE > 0) THEN ! External tendencies IF(GEXT_TEND) THEN - DO JV=0,KRR + DO JV=0, KRR DO JL=1, IMICRO - ZA(JL,JV) = ZA(JL,JV) + ZEXTPK(JL,JV) + ZA(JL, JV) = ZA(JL, JV) + ZEXTPK(JL, JV) ENDDO ENDDO ENDIF @@ -874,14 +921,14 @@ IF (KSIZE > 0) THEN !We need to adjust tendencies when temperature reaches 0 IF(LFEEDBACKT) THEN DO JL=1, IMICRO - !Is ZB(:,ITH) enough to change temperature sign? + !Is ZB(:, ITH) enough to change temperature sign? ZX=XTT/ZEXN(JL) - IF ( (ZVART(JL,ITH) - ZX)*(ZVART(JL,ITH) + ZB(JL,ITH) - ZX) < 0.) THEN + IF ((ZVART(JL, ITH) - ZX) * (ZVART(JL, ITH) + ZB(JL, ITH) - ZX) < 0.) THEN ZMAXTIME(JL)=0. - ENDIF - !Can ZA(:,ITH) make temperature change of sign? + ENDIF + !Can ZA(:, ITH) make temperature change of sign? IF (ABS(ZA(JL,ITH)) > 1.E-20 ) THEN - ZTIME_THRESHOLD= (ZX - ZB(JL,ITH) - ZVART(JL,ITH))/ZA(JL,ITH) + ZTIME_THRESHOLD=(ZX - ZB(JL, ITH) - ZVART(JL, ITH))/ZA(JL, ITH) IF (ZTIME_THRESHOLD > 0.) THEN ZMAXTIME(JL)=MIN(ZMAXTIME(JL), ZTIME_THRESHOLD) ENDIF @@ -889,26 +936,26 @@ IF (KSIZE > 0) THEN ENDDO ENDIF - !We need to adjust tendencies when a specy disappears - !When a specy is missing, only the external tendencies can be negative (and we must keep track of it) - DO JV=1,KRR + !We need to adjust tendencies when a species disappears + !When a species is missing, only the external tendencies can be negative (and we must keep track of it) + DO JV=1, KRR DO JL=1, IMICRO - IF ( ZA(JL,JV) < -1.E-20 .AND. ZVART(JL,JV) > XRTMIN(JV) ) THEN - ZMAXTIME(JL)=MIN(ZMAXTIME(JL),-(ZB(JL,JV)+ZVART(JL,JV))/ZA(JL,JV)) + IF (ZA(JL, JV) < -1.E-20 .AND. ZVART(JL, JV) > XRTMIN(JV)) THEN + ZMAXTIME(JL)=MIN(ZMAXTIME(JL), -(ZB(JL, JV)+ZVART(JL, JV))/ZA(JL, JV)) ENDIF ENDDO ENDDO - !We must recompute tendencies when the end of the sub-timestep is reached + !We stop when the end of the timestep is reached DO JL=1, IMICRO - !We stop when the end of the timestep is reached IF (ZTIME(JL)+ZMAXTIME(JL) >= PTSTEP) THEN ZCOMPUTE(JL)=0. ENDIF ENDDO + !We must recompute tendencies when the end of the sub-timestep is reached IF (XTSTEP_TS/=0.) THEN DO JL=1, IMICRO - IF ((IITER(JL) < INB_ITER_MAX).AND.(ZTIME(JL)+ZMAXTIME(JL) > ZTIME_LASTCALL(JL)+ZTSTEP)) THEN + IF ((IITER(JL) < INB_ITER_MAX) .AND. (ZTIME(JL)+ZMAXTIME(JL) > ZTIME_LASTCALL(JL)+ZTSTEP)) THEN ZMAXTIME(JL)=ZTIME_LASTCALL(JL)-ZTIME(JL)+ZTSTEP ZCOMPUTE(JL)=0. ENDIF @@ -916,34 +963,33 @@ IF (KSIZE > 0) THEN ENDIF !We must recompute tendencies when the maximum allowed change is reached - !When a specy is missing, only the external tendencies can be active and we do not want to recompute - !the microphysical tendencies when external tendencies are negative (results won't change because specy was already missing) + !When a species is missing, only the external tendencies can be active and we do not want to recompute + !the microphysical tendencies when external tendencies are negative (results won't change because species was already missing) IF (XMRSTEP/=0.) THEN IF (LL_ANY_ITER) THEN - ! In this case we need to remember the mixing ratios used to compute the tendencies + ! In this case we need to remember the initial mixing ratios used to compute the tendencies ! because when mixing ratio has evolved more than a threshold, we must re-compute tendencies + ! Thus, at first iteration (ie when LLCPZ0RT=.TRUE.) we copy ZVART into Z0RT DO JV=1,KRR - IF (LLCPZ0T(JV)) Z0T(:)=ZVART(:,JV) - DO JL=1,IMICRO + IF (LLCPZ0RT) Z0RT(1:IMICRO, JV)=ZVART(1:IMICRO, JV) + DO JL=1, IMICRO IF (IITER(JL)<INB_ITER_MAX .AND. ABS(ZA(JL,JV))>1.E-20) THEN - ZTHRESHOLD(JL)=(XMRSTEP+Z0T(JL)-ZVART(JL,JV)-ZB(JL,JV))/ZA(JL,JV) + ZTIME_THRESHOLD=(SIGN(1., ZA(JL, JV))*XMRSTEP+Z0RT(JL, JV)-ZVART(JL, JV)-ZB(JL, JV))/ZA(JL, JV) ELSE - ZTHRESHOLD(JL)=-1. + ZTIME_THRESHOLD=-1. ENDIF - ENDDO - DO JL=1,IMICRO - IF ( ZTHRESHOLD(JL)>=0. .AND. ZTHRESHOLD(JL)<ZMAXTIME(JL) .AND. (ZVART(JL,JV)>XRTMIN(6) .OR. ZA(JL,JV)>0.) ) THEN - ZMAXTIME(JL)=MIN(ZMAXTIME(JL),ZTHRESHOLD(JL)) + IF (ZTIME_THRESHOLD>=0 .AND. ZTIME_THRESHOLD<ZMAXTIME(JL) .AND. (ZVART(JL, JV)>XRTMIN(JV) .OR. ZA(JL, JV)>0.)) THEN + ZMAXTIME(JL)=MIN(ZMAXTIME(JL), ZTIME_THRESHOLD) ZCOMPUTE(JL)=0. ENDIF ENDDO ENDDO - LLCPZ0T(:)=.FALSE. + LLCPZ0RT=.FALSE. !$OMP SIMD DO JL=1,IMICRO ZMAXB(JL)=MAXVAL(ABS(ZB(JL,1:KRR))) ENDDO - DO JL=1,IMICRO + DO JL=1, IMICRO IF (IITER(JL)<INB_ITER_MAX .AND. ZMAXB(JL)>XMRSTEP) THEN ZMAXTIME(JL)=0. ZCOMPUTE(JL)=0. @@ -954,9 +1000,9 @@ IF (KSIZE > 0) THEN ! !*** 4.3 New values of variables for next iteration ! - DO JV=0,KRR + DO JV=0, KRR DO JL=1, IMICRO - ZVART(JL,JV)=ZVART(JL,JV)+ZA(JL,JV)*ZMAXTIME(JL)+ZB(JL,JV) + ZVART(JL, JV)=ZVART(JL, JV)+ZA(JL, JV)*ZMAXTIME(JL)+ZB(JL, JV) ENDDO ENDDO DO JL=1, IMICRO @@ -969,51 +1015,51 @@ IF (KSIZE > 0) THEN ! IF(LBU_ENABLE) THEN DO JL=1, IMICRO - ZTOT_RVHENI(JMICRO+JL-1)=ZTOT_RVHENI(JMICRO+JL-1)+ZRVHENI_MR(JL) - ZTOT_RCHONI(JMICRO+JL-1)=ZTOT_RCHONI(JMICRO+JL-1)+ZRCHONI(JL)*ZMAXTIME(JL) - ZTOT_RRHONG(JMICRO+JL-1)=ZTOT_RRHONG(JMICRO+JL-1)+ZRRHONG_MR(JL) - ZTOT_RVDEPS(JMICRO+JL-1)=ZTOT_RVDEPS(JMICRO+JL-1)+ZRVDEPS(JL)*ZMAXTIME(JL) - ZTOT_RIAGGS(JMICRO+JL-1)=ZTOT_RIAGGS(JMICRO+JL-1)+ZRIAGGS(JL)*ZMAXTIME(JL) - ZTOT_RIAUTS(JMICRO+JL-1)=ZTOT_RIAUTS(JMICRO+JL-1)+ZRIAUTS(JL)*ZMAXTIME(JL) - ZTOT_RVDEPG(JMICRO+JL-1)=ZTOT_RVDEPG(JMICRO+JL-1)+ZRVDEPG(JL)*ZMAXTIME(JL) - ZTOT_RCAUTR(JMICRO+JL-1)=ZTOT_RCAUTR(JMICRO+JL-1)+ZRCAUTR(JL)*ZMAXTIME(JL) - ZTOT_RCACCR(JMICRO+JL-1)=ZTOT_RCACCR(JMICRO+JL-1)+ZRCACCR(JL)*ZMAXTIME(JL) - ZTOT_RREVAV(JMICRO+JL-1)=ZTOT_RREVAV(JMICRO+JL-1)+ZRREVAV(JL)*ZMAXTIME(JL) - ZTOT_RCRIMSS(JMICRO+JL-1)=ZTOT_RCRIMSS(JMICRO+JL-1)+ZRCRIMSS(JL)*ZMAXTIME(JL) - ZTOT_RCRIMSG(JMICRO+JL-1)=ZTOT_RCRIMSG(JMICRO+JL-1)+ZRCRIMSG(JL)*ZMAXTIME(JL) - ZTOT_RSRIMCG(JMICRO+JL-1)=ZTOT_RSRIMCG(JMICRO+JL-1)+ZRSRIMCG(JL)*ZMAXTIME(JL)+ZRSRIMCG_MR(JL) - ZTOT_RRACCSS(JMICRO+JL-1)=ZTOT_RRACCSS(JMICRO+JL-1)+ZRRACCSS(JL)*ZMAXTIME(JL) - ZTOT_RRACCSG(JMICRO+JL-1)=ZTOT_RRACCSG(JMICRO+JL-1)+ZRRACCSG(JL)*ZMAXTIME(JL) - ZTOT_RSACCRG(JMICRO+JL-1)=ZTOT_RSACCRG(JMICRO+JL-1)+ZRSACCRG(JL)*ZMAXTIME(JL) - ZTOT_RSMLTG(JMICRO+JL-1)=ZTOT_RSMLTG(JMICRO+JL-1)+ZRSMLTG(JL)*ZMAXTIME(JL) - ZTOT_RCMLTSR(JMICRO+JL-1)=ZTOT_RCMLTSR(JMICRO+JL-1)+ZRCMLTSR(JL)*ZMAXTIME(JL) - ZTOT_RICFRRG(JMICRO+JL-1)=ZTOT_RICFRRG(JMICRO+JL-1)+ZRICFRRG(JL)*ZMAXTIME(JL) - ZTOT_RRCFRIG(JMICRO+JL-1)=ZTOT_RRCFRIG(JMICRO+JL-1)+ZRRCFRIG(JL)*ZMAXTIME(JL) - ZTOT_RICFRR(JMICRO+JL-1)=ZTOT_RICFRR(JMICRO+JL-1)+ZRICFRR(JL)*ZMAXTIME(JL) - ZTOT_RCWETG(JMICRO+JL-1)=ZTOT_RCWETG(JMICRO+JL-1)+ZRCWETG(JL)*ZMAXTIME(JL) - ZTOT_RIWETG(JMICRO+JL-1)=ZTOT_RIWETG(JMICRO+JL-1)+ZRIWETG(JL)*ZMAXTIME(JL) - ZTOT_RRWETG(JMICRO+JL-1)=ZTOT_RRWETG(JMICRO+JL-1)+ZRRWETG(JL)*ZMAXTIME(JL) - ZTOT_RSWETG(JMICRO+JL-1)=ZTOT_RSWETG(JMICRO+JL-1)+ZRSWETG(JL)*ZMAXTIME(JL) - ZTOT_RWETGH(JMICRO+JL-1)=ZTOT_RWETGH(JMICRO+JL-1)+ZRWETGH(JL)*ZMAXTIME(JL)+ZRWETGH_MR(JL) - ZTOT_RCDRYG(JMICRO+JL-1)=ZTOT_RCDRYG(JMICRO+JL-1)+ZRCDRYG(JL)*ZMAXTIME(JL) - ZTOT_RIDRYG(JMICRO+JL-1)=ZTOT_RIDRYG(JMICRO+JL-1)+ZRIDRYG(JL)*ZMAXTIME(JL) - ZTOT_RRDRYG(JMICRO+JL-1)=ZTOT_RRDRYG(JMICRO+JL-1)+ZRRDRYG(JL)*ZMAXTIME(JL) - ZTOT_RSDRYG(JMICRO+JL-1)=ZTOT_RSDRYG(JMICRO+JL-1)+ZRSDRYG(JL)*ZMAXTIME(JL) - ZTOT_RGMLTR(JMICRO+JL-1)=ZTOT_RGMLTR(JMICRO+JL-1)+ZRGMLTR(JL)*ZMAXTIME(JL) - ZTOT_RCWETH(JMICRO+JL-1)=ZTOT_RCWETH(JMICRO+JL-1)+ZRCWETH(JL)*ZMAXTIME(JL) - ZTOT_RIWETH(JMICRO+JL-1)=ZTOT_RIWETH(JMICRO+JL-1)+ZRIWETH(JL)*ZMAXTIME(JL) - ZTOT_RSWETH(JMICRO+JL-1)=ZTOT_RSWETH(JMICRO+JL-1)+ZRSWETH(JL)*ZMAXTIME(JL) - ZTOT_RGWETH(JMICRO+JL-1)=ZTOT_RGWETH(JMICRO+JL-1)+ZRGWETH(JL)*ZMAXTIME(JL) - ZTOT_RRWETH(JMICRO+JL-1)=ZTOT_RRWETH(JMICRO+JL-1)+ZRRWETH(JL)*ZMAXTIME(JL) - ZTOT_RCDRYH(JMICRO+JL-1)=ZTOT_RCDRYH(JMICRO+JL-1)+ZRCDRYH(JL)*ZMAXTIME(JL) - ZTOT_RIDRYH(JMICRO+JL-1)=ZTOT_RIDRYH(JMICRO+JL-1)+ZRIDRYH(JL)*ZMAXTIME(JL) - ZTOT_RSDRYH(JMICRO+JL-1)=ZTOT_RSDRYH(JMICRO+JL-1)+ZRSDRYH(JL)*ZMAXTIME(JL) - ZTOT_RRDRYH(JMICRO+JL-1)=ZTOT_RRDRYH(JMICRO+JL-1)+ZRRDRYH(JL)*ZMAXTIME(JL) - ZTOT_RGDRYH(JMICRO+JL-1)=ZTOT_RGDRYH(JMICRO+JL-1)+ZRGDRYH(JL)*ZMAXTIME(JL) - ZTOT_RDRYHG(JMICRO+JL-1)=ZTOT_RDRYHG(JMICRO+JL-1)+ZRDRYHG(JL)*ZMAXTIME(JL) - ZTOT_RHMLTR(JMICRO+JL-1)=ZTOT_RHMLTR(JMICRO+JL-1)+ZRHMLTR(JL)*ZMAXTIME(JL) - ZTOT_RIMLTC(JMICRO+JL-1)=ZTOT_RIMLTC(JMICRO+JL-1)+ZRIMLTC_MR(JL) - ZTOT_RCBERI(JMICRO+JL-1)=ZTOT_RCBERI(JMICRO+JL-1)+ZRCBERI(JL)*ZMAXTIME(JL) + ZTOT_RVHENI (JMICRO+JL-1)=ZTOT_RVHENI (JMICRO+JL-1)+ZRVHENI_MR(JL) + ZTOT_RCHONI (JMICRO+JL-1)=ZTOT_RCHONI (JMICRO+JL-1)+ZRCHONI (JL)*ZMAXTIME(JL) + ZTOT_RRHONG (JMICRO+JL-1)=ZTOT_RRHONG (JMICRO+JL-1)+ZRRHONG_MR(JL) + ZTOT_RVDEPS (JMICRO+JL-1)=ZTOT_RVDEPS (JMICRO+JL-1)+ZRVDEPS (JL)*ZMAXTIME(JL) + ZTOT_RIAGGS (JMICRO+JL-1)=ZTOT_RIAGGS (JMICRO+JL-1)+ZRIAGGS (JL)*ZMAXTIME(JL) + ZTOT_RIAUTS (JMICRO+JL-1)=ZTOT_RIAUTS (JMICRO+JL-1)+ZRIAUTS (JL)*ZMAXTIME(JL) + ZTOT_RVDEPG (JMICRO+JL-1)=ZTOT_RVDEPG (JMICRO+JL-1)+ZRVDEPG (JL)*ZMAXTIME(JL) + ZTOT_RCAUTR (JMICRO+JL-1)=ZTOT_RCAUTR (JMICRO+JL-1)+ZRCAUTR (JL)*ZMAXTIME(JL) + ZTOT_RCACCR (JMICRO+JL-1)=ZTOT_RCACCR (JMICRO+JL-1)+ZRCACCR (JL)*ZMAXTIME(JL) + ZTOT_RREVAV (JMICRO+JL-1)=ZTOT_RREVAV (JMICRO+JL-1)+ZRREVAV (JL)*ZMAXTIME(JL) + ZTOT_RCRIMSS(JMICRO+JL-1)=ZTOT_RCRIMSS(JMICRO+JL-1)+ZRCRIMSS (JL)*ZMAXTIME(JL) + ZTOT_RCRIMSG(JMICRO+JL-1)=ZTOT_RCRIMSG(JMICRO+JL-1)+ZRCRIMSG (JL)*ZMAXTIME(JL) + ZTOT_RSRIMCG(JMICRO+JL-1)=ZTOT_RSRIMCG(JMICRO+JL-1)+ZRSRIMCG (JL)*ZMAXTIME(JL)+ZRSRIMCG_MR(JL) + ZTOT_RRACCSS(JMICRO+JL-1)=ZTOT_RRACCSS(JMICRO+JL-1)+ZRRACCSS (JL)*ZMAXTIME(JL) + ZTOT_RRACCSG(JMICRO+JL-1)=ZTOT_RRACCSG(JMICRO+JL-1)+ZRRACCSG (JL)*ZMAXTIME(JL) + ZTOT_RSACCRG(JMICRO+JL-1)=ZTOT_RSACCRG(JMICRO+JL-1)+ZRSACCRG (JL)*ZMAXTIME(JL) + ZTOT_RSMLTG (JMICRO+JL-1)=ZTOT_RSMLTG (JMICRO+JL-1)+ZRSMLTG (JL)*ZMAXTIME(JL) + ZTOT_RCMLTSR(JMICRO+JL-1)=ZTOT_RCMLTSR(JMICRO+JL-1)+ZRCMLTSR (JL)*ZMAXTIME(JL) + ZTOT_RICFRRG(JMICRO+JL-1)=ZTOT_RICFRRG(JMICRO+JL-1)+ZRICFRRG (JL)*ZMAXTIME(JL) + ZTOT_RRCFRIG(JMICRO+JL-1)=ZTOT_RRCFRIG(JMICRO+JL-1)+ZRRCFRIG (JL)*ZMAXTIME(JL) + ZTOT_RICFRR (JMICRO+JL-1)=ZTOT_RICFRR (JMICRO+JL-1)+ZRICFRR (JL)*ZMAXTIME(JL) + ZTOT_RCWETG (JMICRO+JL-1)=ZTOT_RCWETG (JMICRO+JL-1)+ZRCWETG (JL)*ZMAXTIME(JL) + ZTOT_RIWETG (JMICRO+JL-1)=ZTOT_RIWETG (JMICRO+JL-1)+ZRIWETG (JL)*ZMAXTIME(JL) + ZTOT_RRWETG (JMICRO+JL-1)=ZTOT_RRWETG (JMICRO+JL-1)+ZRRWETG (JL)*ZMAXTIME(JL) + ZTOT_RSWETG (JMICRO+JL-1)=ZTOT_RSWETG (JMICRO+JL-1)+ZRSWETG (JL)*ZMAXTIME(JL) + ZTOT_RWETGH (JMICRO+JL-1)=ZTOT_RWETGH (JMICRO+JL-1)+ZRWETGH (JL)*ZMAXTIME(JL)+ZRWETGH_MR(JL) + ZTOT_RCDRYG (JMICRO+JL-1)=ZTOT_RCDRYG (JMICRO+JL-1)+ZRCDRYG (JL)*ZMAXTIME(JL) + ZTOT_RIDRYG (JMICRO+JL-1)=ZTOT_RIDRYG (JMICRO+JL-1)+ZRIDRYG (JL)*ZMAXTIME(JL) + ZTOT_RRDRYG (JMICRO+JL-1)=ZTOT_RRDRYG (JMICRO+JL-1)+ZRRDRYG (JL)*ZMAXTIME(JL) + ZTOT_RSDRYG (JMICRO+JL-1)=ZTOT_RSDRYG (JMICRO+JL-1)+ZRSDRYG (JL)*ZMAXTIME(JL) + ZTOT_RGMLTR (JMICRO+JL-1)=ZTOT_RGMLTR (JMICRO+JL-1)+ZRGMLTR (JL)*ZMAXTIME(JL) + ZTOT_RCWETH (JMICRO+JL-1)=ZTOT_RCWETH (JMICRO+JL-1)+ZRCWETH (JL)*ZMAXTIME(JL) + ZTOT_RIWETH (JMICRO+JL-1)=ZTOT_RIWETH (JMICRO+JL-1)+ZRIWETH (JL)*ZMAXTIME(JL) + ZTOT_RSWETH (JMICRO+JL-1)=ZTOT_RSWETH (JMICRO+JL-1)+ZRSWETH (JL)*ZMAXTIME(JL) + ZTOT_RGWETH (JMICRO+JL-1)=ZTOT_RGWETH (JMICRO+JL-1)+ZRGWETH (JL)*ZMAXTIME(JL) + ZTOT_RRWETH (JMICRO+JL-1)=ZTOT_RRWETH (JMICRO+JL-1)+ZRRWETH (JL)*ZMAXTIME(JL) + ZTOT_RCDRYH (JMICRO+JL-1)=ZTOT_RCDRYH (JMICRO+JL-1)+ZRCDRYH (JL)*ZMAXTIME(JL) + ZTOT_RIDRYH (JMICRO+JL-1)=ZTOT_RIDRYH (JMICRO+JL-1)+ZRIDRYH (JL)*ZMAXTIME(JL) + ZTOT_RSDRYH (JMICRO+JL-1)=ZTOT_RSDRYH (JMICRO+JL-1)+ZRSDRYH (JL)*ZMAXTIME(JL) + ZTOT_RRDRYH (JMICRO+JL-1)=ZTOT_RRDRYH (JMICRO+JL-1)+ZRRDRYH (JL)*ZMAXTIME(JL) + ZTOT_RGDRYH (JMICRO+JL-1)=ZTOT_RGDRYH (JMICRO+JL-1)+ZRGDRYH (JL)*ZMAXTIME(JL) + ZTOT_RDRYHG (JMICRO+JL-1)=ZTOT_RDRYHG (JMICRO+JL-1)+ZRDRYHG (JL)*ZMAXTIME(JL) + ZTOT_RHMLTR (JMICRO+JL-1)=ZTOT_RHMLTR (JMICRO+JL-1)+ZRHMLTR (JL)*ZMAXTIME(JL) + ZTOT_RIMLTC (JMICRO+JL-1)=ZTOT_RIMLTC (JMICRO+JL-1)+ZRIMLTC_MR(JL) + ZTOT_RCBERI (JMICRO+JL-1)=ZTOT_RCBERI (JMICRO+JL-1)+ZRCBERI (JL)*ZMAXTIME(JL) ENDDO ENDIF ! @@ -1025,59 +1071,70 @@ IF (KSIZE > 0) THEN IF(GEXT_TEND) THEN !Z..T variables contain the external tendency, we substract it - DO JV=0,KRR + DO JV=0, KRR DO JL=1, IMICRO - ZVART(JL,JV) = ZVART(JL,JV) - ZEXTPK(JL,JV) * PTSTEP + ZVART(JL, JV) = ZVART(JL, JV) - ZEXTPK(JL, JV) * PTSTEP ENDDO ENDDO ENDIF - !IF (LHOOK) CALL DR_HOOK('RAIN_ICE:IMICRO', 1, ZHOOK_HANDLE2) !------------------------------------------------------------------------------- ! !* 5. UNPACKING DIAGNOSTICS ! --------------------- - - !IF (LHOOK) CALL DR_HOOK('RAIN_ICE:UNPACK', 0, ZHOOK_HANDLE5) - ! - DO JL = 1,IMICRO - PCIT (I1(JL),I2(JL),I3(JL))=ZCIT (JL) +! + DO JL=1, IMICRO + ZCITOUT (I1(JL),I2(JL),I3(JL))=ZCIT (JL) IF(OWARM) THEN PEVAP3D(I1(JL),I2(JL),I3(JL))=ZRREVAV(JL) ENDIF - IF (LLHLC) THEN - ZHLC_HCF3D(I1(JL),I2(JL),I3(JL))=ZHLC_HCF(JL) - ZHLC_LCF3D(I1(JL),I2(JL),I3(JL))=ZHLC_LCF(JL) - ZHLC_HRC3D(I1(JL),I2(JL),I3(JL))=ZHLC_HRC(JL) - ZHLC_LRC3D(I1(JL),I2(JL),I3(JL))=ZHLC_LRC(JL) - ENDIF - !ZWR variables will contain the new S variables values - ZWR(I1(JL),I2(JL),I3(JL),1)=ZVART(JL,1) - ZWR(I1(JL),I2(JL),I3(JL),2)=ZVART(JL,2) - ZWR(I1(JL),I2(JL),I3(JL),3)=ZVART(JL,3) - ZWR(I1(JL),I2(JL),I3(JL),4)=ZVART(JL,4) - ZWR(I1(JL),I2(JL),I3(JL),5)=ZVART(JL,5) - ZWR(I1(JL),I2(JL),I3(JL),6)=ZVART(JL,6) + ZWR(I1(JL),I2(JL),I3(JL),IRV)=ZVART(JL, IRV) + ZWR(I1(JL),I2(JL),I3(JL),IRC)=ZVART(JL, IRC) + ZWR(I1(JL),I2(JL),I3(JL),IRR)=ZVART(JL, IRR) + ZWR(I1(JL),I2(JL),I3(JL),IRI)=ZVART(JL, IRI) + ZWR(I1(JL),I2(JL),I3(JL),IRS)=ZVART(JL, IRS) + ZWR(I1(JL),I2(JL),I3(JL),IRG)=ZVART(JL, IRG) IF (KRR==7) THEN - ZWR(I1(JL),I2(JL),I3(JL),7)=ZVART(JL,7) + ZWR(I1(JL),I2(JL),I3(JL),IRH)=ZVART(JL, IRH) ENDIF ENDDO - ! - !IF (LHOOK) CALL DR_HOOK('RAIN_ICE:UNPACK', 1, ZHOOK_HANDLE5) ENDDO ! JMICRO ENDIF ! KSIZE > 0 +PCIT(:,:,:)=ZCITOUT(:,:,:) !========================================================================================================== -!IF (LHOOK) CALL DR_HOOK('RAIN_ICE:POST_MICRO', 0, ZHOOK_HANDLE3) +! !* 6. COMPUTES THE SLOW COLD PROCESS SOURCES OUTSIDE OF ODMICRO POINTS ! ---------------------------------------------------------------- ! +CALL ICE4_NUCLEATION_WRAPPER(KIT, KJT, KKT, .NOT. ODMICRO, & + PTHT, PPABST, PRHODREF, PEXN, ZZ_LSFACT, ZT, & + PRVT, & + PCIT, ZZ_RVHENI_MR) +! +!------------------------------------------------------------------------------- +! +!* 7. TOTAL TENDENCIES +! ---------------- +! +! +!*** 7.1 total tendencies limited by available species +! DO JK = 1, KKT DO JJ = 1, KJT +!DEC$ IVDEP DO JI = 1, KIT + !LV/LS + ZZ_LSFACT(JI,JJ,JK)=ZZ_LSFACT(JI,JJ,JK)/PEXNREF(JI,JJ,JK) + ZZ_LVFACT(JI,JJ,JK)=ZZ_LVFACT(JI,JJ,JK)/PEXNREF(JI,JJ,JK) + + !Tendency dure to nucleation on non ODMICRO points + ZZ_RVHENI(JI,JJ,JK) = MIN(PRVS(JI,JJ,JK), ZZ_RVHENI_MR(JI,JJ,JK)/PTSTEP) + + !Hydrometeor tendencies is the difference between old state and new state (can be negative) ZWR(JI,JJ,JK,IRV)=(ZWR(JI,JJ,JK,IRV)-PRVT(JI,JJ,JK))*ZINV_TSTEP ZWR(JI,JJ,JK,IRC)=(ZWR(JI,JJ,JK,IRC)-PRCT(JI,JJ,JK))*ZINV_TSTEP ZWR(JI,JJ,JK,IRR)=(ZWR(JI,JJ,JK,IRR)-PRRT(JI,JJ,JK))*ZINV_TSTEP @@ -1087,399 +1144,386 @@ DO JK = 1, KKT IF(KRR==7) THEN ZWR(JI,JJ,JK,IRH)=(ZWR(JI,JJ,JK,IRH)-PRHT(JI,JJ,JK))*ZINV_TSTEP ENDIF - ENDDO - ENDDO -ENDDO -! -CALL ICE4_NUCLEATION_WRAPPER(KIT, KJT, KKT, .NOT. ODMICRO, & - PTHT, PPABST, PRHODREF, PEXN, ZZ_LSFACT/PEXN, ZT, & - PRVT, & - PCIT, ZZ_RVHENI_MR) -DO JK = 1, KKT - DO JJ = 1, KJT -!DEC$ IVDEP - DO JI = 1, KIT - ZZ_LSFACT(JI,JJ,JK)=ZZ_LSFACT(JI,JJ,JK)/PEXNREF(JI,JJ,JK) - ZZ_LVFACT(JI,JJ,JK)=ZZ_LVFACT(JI,JJ,JK)/PEXNREF(JI,JJ,JK) - ZZ_RVHENI = MIN(PRVS(JI,JJ,JK), ZZ_RVHENI_MR(JI,JJ,JK)/PTSTEP) - PRIS(JI,JJ,JK)=PRIS(JI,JJ,JK)+ZZ_RVHENI - PRVS(JI,JJ,JK)=PRVS(JI,JJ,JK)-ZZ_RVHENI - PTHS(JI,JJ,JK)=PTHS(JI,JJ,JK) + ZZ_RVHENI*ZZ_LSFACT(JI,JJ,JK) -!------------------------------------------------------------------------------- -!* 7. TOTAL TENDENCIES - ZWR(JI,JJ,JK,ITH) = (ZWR(JI,JJ,JK,IRC)+ZWR(JI,JJ,JK,IRR))*ZZ_LVFACT(JI,JJ,JK) & - & + (ZWR(JI,JJ,JK,IRI)+ZWR(JI,JJ,JK,IRS)+ZWR(JI,JJ,JK,IRG)+ZWR(JI,JJ,JK,IRH))*ZZ_LSFACT(JI,JJ,JK) - ZWR(JI,JJ,JK,ITH) = PTHS(JI,JJ,JK) + ZWR(JI,JJ,JK,ITH) + + !Theta tendency computed from hydrometeors tendencies + ZWR(JI,JJ,JK, ITH) = (ZWR(JI,JJ,JK,IRC)+ZWR(JI,JJ,JK,IRR))*ZZ_LVFACT(JI,JJ,JK)+ & + & (ZWR(JI,JJ,JK,IRI)+ZWR(JI,JJ,JK,IRS)+ZWR(JI,JJ,JK,IRG)+ & + & ZWR(JI,JJ,JK,IRH))*ZZ_LSFACT(JI,JJ,JK) + !We apply these tendencies to the S variables - ZWR(JI,JJ,JK,IRV) = PRVS(JI,JJ,JK) + ZWR(JI,JJ,JK,IRV) - ZWR(JI,JJ,JK,IRC) = PRCS(JI,JJ,JK) + ZWR(JI,JJ,JK,IRC) - ZWR(JI,JJ,JK,IRR) = PRRS(JI,JJ,JK) + ZWR(JI,JJ,JK,IRR) - ZWR(JI,JJ,JK,IRI) = PRIS(JI,JJ,JK) + ZWR(JI,JJ,JK,IRI) - ZWR(JI,JJ,JK,IRS) = PRSS(JI,JJ,JK) + ZWR(JI,JJ,JK,IRS) - ZWR(JI,JJ,JK,IRG) = PRGS(JI,JJ,JK) + ZWR(JI,JJ,JK,IRG) + !including the nucleation part + PTHS(JI,JJ,JK) = PTHS(JI,JJ,JK) + ZWR(JI,JJ,JK,ITH)+ZZ_RVHENI(JI,JJ,JK)*ZZ_LSFACT(JI,JJ,JK) + PRVS(JI,JJ,JK) = PRVS(JI,JJ,JK) + ZWR(JI,JJ,JK,IRV)-ZZ_RVHENI(JI,JJ,JK) + PRCS(JI,JJ,JK) = PRCS(JI,JJ,JK) + ZWR(JI,JJ,JK,IRC) + PRRS(JI,JJ,JK) = PRRS(JI,JJ,JK) + ZWR(JI,JJ,JK,IRR) + PRIS(JI,JJ,JK) = PRIS(JI,JJ,JK) + ZWR(JI,JJ,JK,IRI)+ZZ_RVHENI(JI,JJ,JK) + PRSS(JI,JJ,JK) = PRSS(JI,JJ,JK) + ZWR(JI,JJ,JK,IRS) + PRGS(JI,JJ,JK) = PRGS(JI,JJ,JK) + ZWR(JI,JJ,JK,IRG) IF (KRR==7) THEN - ZWR(JI,JJ,JK,IRH) = PRHS(JI,JJ,JK) + ZWR(JI,JJ,JK,IRH) + PRHS(JI,JJ,JK) = PRHS(JI,JJ,JK) + ZWR(JI,JJ,JK,IRH) ENDIF ENDDO ENDDO ENDDO -!We correct negativities with conservation -CALL CORRECT_NEGATIVITIES(KIT, KJT, KKT, KRR, ZWR(:,:,:,IRV), ZWR(:,:,:,IRC), ZWR(:,:,:,IRR), ZWR(:,:,:,IRI), & - &ZWR(:,:,:,IRS), ZWR(:,:,:,IRG), ZWR(:,:,:,ITH), ZZ_LVFACT, ZZ_LSFACT, ZWR(:,:,:,IRH)) ! !*** 7.2 LBU_ENABLE case ! IF(LBU_ENABLE) THEN + IF (LBUDGET_TH) THEN + ZZ_DIFF(:, :, :) = ZZ_LSFACT(:, :, :) - ZZ_LVFACT(:, :, :) + END IF + ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RVHENI(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP - PRIS(:,:,:) = PRIS(:,:,:) + ZW(:,:,:) - PRVS(:,:,:) = PRVS(:,:,:) - ZW(:,:,:) - PTHS(:,:,:) = PTHS(:,:,:) + ZW(:,:,:)*ZZ_LSFACT(:,:,:) - IF (LBUDGET_TH) CALL BUDGET(PTHS(:,:,:)*PRHODJ(:,:,:), 4, 'HENU_BU_RTH',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RV) CALL BUDGET(PRVS(:,:,:)*PRHODJ(:,:,:), 6, 'HENU_BU_RRV',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RI) CALL BUDGET(PRIS(:,:,:)*PRHODJ(:,:,:), 9, 'HENU_BU_RRI',YDDDH, YDLDDH, YDMDDH) + DO JL=1, KSIZE + ZW(I1TOT(JL), I2TOT(JL), I3TOT(JL)) = ZTOT_RVHENI(JL) * ZINV_TSTEP + END DO + ZW(:,:,:)=ZW(:,:,:)+ZZ_RVHENI + IF (LBUDGET_TH) CALL BUDGET_STORE_ADD(TBUDGETS(NBUDGET_TH), 'HENU', ZW(:, :, :)*ZZ_LSFACT(:, :, :)*PRHODJ(:, :, :)) + IF (LBUDGET_RV) CALL BUDGET_STORE_ADD(TBUDGETS(NBUDGET_RV), 'HENU', -ZW(:, :, :) *PRHODJ(:, :, :)) + IF (LBUDGET_RI) CALL BUDGET_STORE_ADD(TBUDGETS(NBUDGET_RI), 'HENU', ZW(:, :, :) *PRHODJ(:, :, :)) ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RCHONI(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP - PRIS(:,:,:) = PRIS(:,:,:) + ZW(:,:,:) - PRCS(:,:,:) = PRCS(:,:,:) - ZW(:,:,:) - PTHS(:,:,:) = PTHS(:,:,:) + ZW(:,:,:)*(ZZ_LSFACT(:,:,:)-ZZ_LVFACT(:,:,:)) - IF (LBUDGET_TH) CALL BUDGET(PTHS(:,:,:)*PRHODJ(:,:,:), 4, 'HON_BU_RTH',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RC) CALL BUDGET(PRCS(:,:,:)*PRHODJ(:,:,:), 7, 'HON_BU_RRC',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RI) CALL BUDGET(PRIS(:,:,:)*PRHODJ(:,:,:), 9, 'HON_BU_RRI',YDDDH, YDLDDH, YDMDDH) + DO JL=1, KSIZE + ZW(I1TOT(JL), I2TOT(JL), I3TOT(JL)) = ZTOT_RCHONI(JL) * ZINV_TSTEP + END DO + IF (LBUDGET_TH) CALL BUDGET_STORE_ADD(TBUDGETS(NBUDGET_TH), 'HON', ZW(:, :, :)*ZZ_DIFF(:, :, :)*PRHODJ(:, :, :)) + IF (LBUDGET_RC) CALL BUDGET_STORE_ADD(TBUDGETS(NBUDGET_RC), 'HON', -ZW(:, :, :) *PRHODJ(:, :, :)) + IF (LBUDGET_RI) CALL BUDGET_STORE_ADD(TBUDGETS(NBUDGET_RI), 'HON', ZW(:, :, :) *PRHODJ(:, :, :)) ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RRHONG(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP - PRGS(:,:,:) = PRGS(:,:,:) + ZW(:,:,:) - PRRS(:,:,:) = PRRS(:,:,:) - ZW(:,:,:) - PTHS(:,:,:) = PTHS(:,:,:) + ZW(:,:,:)*(ZZ_LSFACT(:,:,:)-ZZ_LVFACT(:,:,:)) - IF (LBUDGET_TH) CALL BUDGET(PTHS(:,:,:)*PRHODJ(:,:,:), 4, 'SFR_BU_RTH',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RR) CALL BUDGET(PRRS(:,:,:)*PRHODJ(:,:,:), 8, 'SFR_BU_RRR',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RG) CALL BUDGET(PRGS(:,:,:)*PRHODJ(:,:,:), 11,'SFR_BU_RRG',YDDDH, YDLDDH, YDMDDH) + DO JL=1, KSIZE + ZW(I1TOT(JL), I2TOT(JL), I3TOT(JL)) = ZTOT_RRHONG(JL) * ZINV_TSTEP + END DO + IF (LBUDGET_TH) CALL BUDGET_STORE_ADD(TBUDGETS(NBUDGET_TH), 'SFR', ZW(:, :, :)*ZZ_DIFF(:, :, :)*PRHODJ(:, :, :)) + IF (LBUDGET_RR) CALL BUDGET_STORE_ADD(TBUDGETS(NBUDGET_RR), 'SFR', -ZW(:, :, :) *PRHODJ(:, :, :)) + IF (LBUDGET_RG) CALL BUDGET_STORE_ADD(TBUDGETS(NBUDGET_RG), 'SFR', ZW(:, :, :) *PRHODJ(:, :, :)) ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RVDEPS(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP - PRSS(:,:,:) = PRSS(:,:,:) + ZW(:,:,:) - PRVS(:,:,:) = PRVS(:,:,:) - ZW(:,:,:) - PTHS(:,:,:) = PTHS(:,:,:) + ZW(:,:,:)*ZZ_LSFACT(:,:,:) - IF (LBUDGET_TH) CALL BUDGET(PTHS(:,:,:)*PRHODJ(:,:,:), 4, 'DEPS_BU_RTH',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RV) CALL BUDGET(PRVS(:,:,:)*PRHODJ(:,:,:), 6, 'DEPS_BU_RRV',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RS) CALL BUDGET(PRSS(:,:,:)*PRHODJ(:,:,:), 10,'DEPS_BU_RRS',YDDDH, YDLDDH, YDMDDH) + DO JL=1, KSIZE + ZW(I1TOT(JL), I2TOT(JL), I3TOT(JL)) = ZTOT_RVDEPS(JL) * ZINV_TSTEP + END DO + IF (LBUDGET_TH) CALL BUDGET_STORE_ADD(TBUDGETS(NBUDGET_TH), 'DEPS', ZW(:, :, :)*ZZ_LSFACT(:, :, :)*PRHODJ(:, :, :)) + IF (LBUDGET_RV) CALL BUDGET_STORE_ADD(TBUDGETS(NBUDGET_RV), 'DEPS', -ZW(:, :, :) *PRHODJ(:, :, :)) + IF (LBUDGET_RS) CALL BUDGET_STORE_ADD(TBUDGETS(NBUDGET_RS), 'DEPS', ZW(:, :, :) *PRHODJ(:, :, :)) ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RIAGGS(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP - PRSS(:,:,:) = PRSS(:,:,:) + ZW(:,:,:) - PRIS(:,:,:) = PRIS(:,:,:) - ZW(:,:,:) - IF (LBUDGET_RI) CALL BUDGET(PRIS(:,:,:)*PRHODJ(:,:,:), 9, 'AGGS_BU_RRI',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RS) CALL BUDGET(PRSS(:,:,:)*PRHODJ(:,:,:), 10,'AGGS_BU_RRS',YDDDH, YDLDDH, YDMDDH) + DO JL=1, KSIZE + ZW(I1TOT(JL), I2TOT(JL), I3TOT(JL)) = ZTOT_RIAGGS(JL) * ZINV_TSTEP + END DO + IF (LBUDGET_RI) CALL BUDGET_STORE_ADD(TBUDGETS(NBUDGET_RI), 'AGGS', -ZW(:, :, :)*PRHODJ(:, :, :)) + IF (LBUDGET_RS) CALL BUDGET_STORE_ADD(TBUDGETS(NBUDGET_RS), 'AGGS', ZW(:, :, :)*PRHODJ(:, :, :)) ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RIAUTS(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP - PRSS(:,:,:) = PRSS(:,:,:) + ZW(:,:,:) - PRIS(:,:,:) = PRIS(:,:,:) - ZW(:,:,:) - IF (LBUDGET_RI) CALL BUDGET(PRIS(:,:,:)*PRHODJ(:,:,:), 9, 'AUTS_BU_RRI',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RS) CALL BUDGET(PRSS(:,:,:)*PRHODJ(:,:,:), 10,'AUTS_BU_RRS',YDDDH, YDLDDH, YDMDDH) + DO JL=1, KSIZE + ZW(I1TOT(JL), I2TOT(JL), I3TOT(JL)) = ZTOT_RIAUTS(JL) * ZINV_TSTEP + END DO + IF (LBUDGET_RI) CALL BUDGET_STORE_ADD(TBUDGETS(NBUDGET_RI), 'AUTS', -ZW(:, :, :)*PRHODJ(:, :, :)) + IF (LBUDGET_RS) CALL BUDGET_STORE_ADD(TBUDGETS(NBUDGET_RS), 'AUTS', ZW(:, :, :)*PRHODJ(:, :, :)) ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RVDEPG(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP - PRGS(:,:,:) = PRGS(:,:,:) + ZW(:,:,:) - PRVS(:,:,:) = PRVS(:,:,:) - ZW(:,:,:) - PTHS(:,:,:) = PTHS(:,:,:) + ZW(:,:,:)*ZZ_LSFACT(:,:,:) - IF (LBUDGET_TH) CALL BUDGET(PTHS(:,:,:)*PRHODJ(:,:,:), 4, 'DEPG_BU_RTH',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RV) CALL BUDGET(PRVS(:,:,:)*PRHODJ(:,:,:), 6, 'DEPG_BU_RRV',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RG) CALL BUDGET(PRGS(:,:,:)*PRHODJ(:,:,:), 11,'DEPG_BU_RRG',YDDDH, YDLDDH, YDMDDH) + DO JL=1, KSIZE + ZW(I1TOT(JL), I2TOT(JL), I3TOT(JL)) = ZTOT_RVDEPG(JL) * ZINV_TSTEP + END DO + IF (LBUDGET_TH) CALL BUDGET_STORE_ADD(TBUDGETS(NBUDGET_TH), 'DEPG', ZW(:, :, :)*ZZ_LSFACT(:, :, :)*PRHODJ(:, :, :)) + IF (LBUDGET_RV) CALL BUDGET_STORE_ADD(TBUDGETS(NBUDGET_RV), 'DEPG', -ZW(:, :, :) *PRHODJ(:, :, :)) + IF (LBUDGET_RG) CALL BUDGET_STORE_ADD(TBUDGETS(NBUDGET_RG), 'DEPG', ZW(:, :, :) *PRHODJ(:, :, :)) IF(OWARM) THEN ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RCAUTR(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP - PRCS(:,:,:) = PRCS(:,:,:) - ZW(:,:,:) - PRRS(:,:,:) = PRRS(:,:,:) + ZW(:,:,:) - IF (LBUDGET_RC) CALL BUDGET(PRCS(:,:,:)*PRHODJ(:,:,:), 7, 'AUTO_BU_RRC',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RR) CALL BUDGET(PRRS(:,:,:)*PRHODJ(:,:,:), 8, 'AUTO_BU_RRR',YDDDH, YDLDDH, YDMDDH) + DO JL=1, KSIZE + ZW(I1TOT(JL), I2TOT(JL), I3TOT(JL)) = ZTOT_RCAUTR(JL) * ZINV_TSTEP + END DO + IF (LBUDGET_RC) CALL BUDGET_STORE_ADD(TBUDGETS(NBUDGET_RC), 'AUTO', -ZW(:, :, :)*PRHODJ(:, :, :)) + IF (LBUDGET_RR) CALL BUDGET_STORE_ADD(TBUDGETS(NBUDGET_RR), 'AUTO', ZW(:, :, :)*PRHODJ(:, :, :)) ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RCACCR(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP - PRCS(:,:,:) = PRCS(:,:,:) - ZW(:,:,:) - PRRS(:,:,:) = PRRS(:,:,:) + ZW(:,:,:) - IF (LBUDGET_RC) CALL BUDGET(PRCS(:,:,:)*PRHODJ(:,:,:), 7, 'ACCR_BU_RRC',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RR) CALL BUDGET(PRRS(:,:,:)*PRHODJ(:,:,:), 8, 'ACCR_BU_RRR',YDDDH, YDLDDH, YDMDDH) + DO JL=1, KSIZE + ZW(I1TOT(JL), I2TOT(JL), I3TOT(JL)) = ZTOT_RCACCR(JL) * ZINV_TSTEP + END DO + IF (LBUDGET_RC) CALL BUDGET_STORE_ADD(TBUDGETS(NBUDGET_RC), 'ACCR', -ZW(:, :, :)*PRHODJ(:, :, :)) + IF (LBUDGET_RR) CALL BUDGET_STORE_ADD(TBUDGETS(NBUDGET_RR), 'ACCR', ZW(:, :, :)*PRHODJ(:, :, :)) ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RREVAV(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP - PRRS(:,:,:) = PRRS(:,:,:) - ZW(:,:,:) - PRVS(:,:,:) = PRVS(:,:,:) + ZW(:,:,:) - PTHS(:,:,:) = PTHS(:,:,:) - ZW(:,:,:)*ZZ_LVFACT(:,:,:) - IF (LBUDGET_TH) CALL BUDGET(PTHS(:,:,:)*PRHODJ(:,:,:), 4, 'REVA_BU_RTH',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RV) CALL BUDGET(PRVS(:,:,:)*PRHODJ(:,:,:), 6, 'REVA_BU_RRV',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RR) CALL BUDGET(PRRS(:,:,:)*PRHODJ(:,:,:), 8, 'REVA_BU_RRR',YDDDH, YDLDDH, YDMDDH) + DO JL=1, KSIZE + ZW(I1TOT(JL), I2TOT(JL), I3TOT(JL)) = ZTOT_RREVAV(JL) * ZINV_TSTEP + END DO + IF (LBUDGET_TH) CALL BUDGET_STORE_ADD(TBUDGETS(NBUDGET_TH), 'REVA', -ZW(:, :, :)*ZZ_LVFACT(:, :, :)*PRHODJ(:, :, :)) + IF (LBUDGET_RV) CALL BUDGET_STORE_ADD(TBUDGETS(NBUDGET_RV), 'REVA', ZW(:, :, :) *PRHODJ(:, :, :)) + IF (LBUDGET_RR) CALL BUDGET_STORE_ADD(TBUDGETS(NBUDGET_RR), 'REVA', -ZW(:, :, :) *PRHODJ(:, :, :)) ENDIF - ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RCRIMSS(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP - PRCS(:,:,:) = PRCS(:,:,:) - ZW(:,:,:) - PRSS(:,:,:) = PRSS(:,:,:) + ZW(:,:,:) - PTHS(:,:,:) = PTHS(:,:,:) + ZW(:,:,:)*(ZZ_LSFACT(:,:,:)-ZZ_LVFACT(:,:,:)) - ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RCRIMSG(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP - PRCS(:,:,:) = PRCS(:,:,:) - ZW(:,:,:) - PRGS(:,:,:) = PRGS(:,:,:) + ZW(:,:,:) - PTHS(:,:,:) = PTHS(:,:,:) + ZW(:,:,:)*(ZZ_LSFACT(:,:,:)-ZZ_LVFACT(:,:,:)) - ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RSRIMCG(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP - PRGS(:,:,:) = PRGS(:,:,:) + ZW(:,:,:) - PRSS(:,:,:) = PRSS(:,:,:) - ZW(:,:,:) - IF (LBUDGET_TH) CALL BUDGET(PTHS(:,:,:)*PRHODJ(:,:,:), 4, 'RIM_BU_RTH',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RC) CALL BUDGET(PRCS(:,:,:)*PRHODJ(:,:,:), 7, 'RIM_BU_RRC',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RS) CALL BUDGET(PRSS(:,:,:)*PRHODJ(:,:,:), 10,'RIM_BU_RRS',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RG) CALL BUDGET(PRGS(:,:,:)*PRHODJ(:,:,:), 11,'RIM_BU_RRG',YDDDH, YDLDDH, YDMDDH) - - ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RRACCSS(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP - PRRS(:,:,:) = PRRS(:,:,:) - ZW(:,:,:) - PRSS(:,:,:) = PRSS(:,:,:) + ZW(:,:,:) - PTHS(:,:,:) = PTHS(:,:,:) + ZW(:,:,:)*(ZZ_LSFACT(:,:,:)-ZZ_LVFACT(:,:,:)) - ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RRACCSG(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP - PRRS(:,:,:) = PRRS(:,:,:) - ZW(:,:,:) - PRGS(:,:,:) = PRGS(:,:,:) + ZW(:,:,:) - PTHS(:,:,:) = PTHS(:,:,:) + ZW(:,:,:)*(ZZ_LSFACT(:,:,:)-ZZ_LVFACT(:,:,:)) - ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RSACCRG(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP - PRSS(:,:,:) = PRSS(:,:,:) - ZW(:,:,:) - PRGS(:,:,:) = PRGS(:,:,:) + ZW(:,:,:) - IF (LBUDGET_TH) CALL BUDGET(PTHS(:,:,:)*PRHODJ(:,:,:), 4, 'ACC_BU_RTH',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RR) CALL BUDGET(PRRS(:,:,:)*PRHODJ(:,:,:), 8, 'ACC_BU_RRR',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RS) CALL BUDGET(PRSS(:,:,:)*PRHODJ(:,:,:), 10,'ACC_BU_RRS',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RG) CALL BUDGET(PRGS(:,:,:)*PRHODJ(:,:,:), 11,'ACC_BU_RRG',YDDDH, YDLDDH, YDMDDH) - - ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RSMLTG(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP - PRSS(:,:,:) = PRSS(:,:,:) - ZW(:,:,:) - PRGS(:,:,:) = PRGS(:,:,:) + ZW(:,:,:) - ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RCMLTSR, MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP - PRCS(:,:,:) = PRCS(:,:,:) - ZW(:,:,:) - PRRS(:,:,:) = PRRS(:,:,:) + ZW(:,:,:) - IF (LBUDGET_RS) CALL BUDGET(PRSS(:,:,:)*PRHODJ(:,:,:), 10,'CMEL_BU_RRS',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RG) CALL BUDGET(PRGS(:,:,:)*PRHODJ(:,:,:), 11,'CMEL_BU_RRG',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RC) CALL BUDGET(PRCS(:,:,:)*PRHODJ(:,:,:), 7, 'CMEL_BU_RRC',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RR) CALL BUDGET(PRRS(:,:,:)*PRHODJ(:,:,:), 8, 'CMEL_BU_RRR',YDDDH, YDLDDH, YDMDDH) - - ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RICFRRG(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP - PRIS(:,:,:) = PRIS(:,:,:) - ZW(:,:,:) - PRGS(:,:,:) = PRGS(:,:,:) + ZW(:,:,:) - ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RRCFRIG(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP - PRRS(:,:,:) = PRRS(:,:,:) - ZW(:,:,:) - PRGS(:,:,:) = PRGS(:,:,:) + ZW(:,:,:) - PTHS(:,:,:) = PTHS(:,:,:) + ZW(:,:,:)*(ZZ_LSFACT(:,:,:)-ZZ_LVFACT(:,:,:)) - ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RICFRR(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP - PRIS(:,:,:) = PRIS(:,:,:) - ZW(:,:,:) - PRRS(:,:,:) = PRRS(:,:,:) + ZW(:,:,:) - IF (LBUDGET_TH) CALL BUDGET(PTHS(:,:,:)*PRHODJ(:,:,:), 4, 'CFRZ_BU_RTH',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RR) CALL BUDGET(PRRS(:,:,:)*PRHODJ(:,:,:), 8, 'CFRZ_BU_RRR',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RI) CALL BUDGET(PRIS(:,:,:)*PRHODJ(:,:,:), 9, 'CFRZ_BU_RRI',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RG) CALL BUDGET(PRGS(:,:,:)*PRHODJ(:,:,:), 11,'CFRZ_BU_RRG',YDDDH, YDLDDH, YDMDDH) + ZW1(:,:,:) = 0. + DO JL=1, KSIZE + ZW1(I1TOT(JL), I2TOT(JL), I3TOT(JL)) = ZTOT_RCRIMSS(JL) * ZINV_TSTEP + END DO + ZW2(:,:,:) = 0. + DO JL=1, KSIZE + ZW2(I1TOT(JL), I2TOT(JL), I3TOT(JL)) = ZTOT_RCRIMSG(JL) * ZINV_TSTEP + END DO + ZW3(:,:,:) = 0. + DO JL=1, KSIZE + ZW3(I1TOT(JL), I2TOT(JL), I3TOT(JL)) = ZTOT_RSRIMCG(JL) * ZINV_TSTEP + END DO + IF (LBUDGET_TH) & + CALL BUDGET_STORE_ADD(TBUDGETS(NBUDGET_TH), 'RIM', (ZW1(:, :, :)+ZW2(:, :, :))*ZZ_DIFF(:, :, :)*PRHODJ(:, :, :)) + IF (LBUDGET_RC) CALL BUDGET_STORE_ADD(TBUDGETS(NBUDGET_RC), 'RIM', (-ZW1(:, :, :)-ZW2(:, :, :))*PRHODJ(:, :, :)) + IF (LBUDGET_RS) CALL BUDGET_STORE_ADD(TBUDGETS(NBUDGET_RS), 'RIM', ( ZW1(:, :, :)-ZW3(:, :, :))*PRHODJ(:, :, :)) + IF (LBUDGET_RG) CALL BUDGET_STORE_ADD(TBUDGETS(NBUDGET_RG), 'RIM', ( ZW2(:, :, :)+ZW3(:, :, :))*PRHODJ(:, :, :)) + + ZW1(:,:,:) = 0. + DO JL=1, KSIZE + ZW1(I1TOT(JL), I2TOT(JL), I3TOT(JL)) = ZTOT_RRACCSS(JL) * ZINV_TSTEP + END DO + ZW2(:,:,:) = 0. + DO JL=1, KSIZE + ZW2(I1TOT(JL), I2TOT(JL), I3TOT(JL)) = ZTOT_RRACCSG(JL) * ZINV_TSTEP + END DO + ZW3(:,:,:) = 0. + DO JL=1, KSIZE + ZW3(I1TOT(JL), I2TOT(JL), I3TOT(JL)) = ZTOT_RSACCRG(JL) * ZINV_TSTEP + END DO + IF (LBUDGET_TH) & + CALL BUDGET_STORE_ADD(TBUDGETS(NBUDGET_TH), 'ACC', (ZW1(:, :, :)+ZW2(:, :, :) )*ZZ_DIFF(:, :, :)*PRHODJ(:, :, :)) + IF (LBUDGET_RR) CALL BUDGET_STORE_ADD(TBUDGETS(NBUDGET_RR), 'ACC', (-ZW1(:, :, :)-ZW2(:, :, :))*PRHODJ(:, :, :)) + IF (LBUDGET_RS) CALL BUDGET_STORE_ADD(TBUDGETS(NBUDGET_RS), 'ACC', ( ZW1(:, :, :)-ZW3(:, :, :))*PRHODJ(:, :, :)) + IF (LBUDGET_RG) CALL BUDGET_STORE_ADD(TBUDGETS(NBUDGET_RG), 'ACC', ( ZW2(:, :, :)+ZW3(:, :, :))*PRHODJ(:, :, :)) ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RCWETG(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP - PRCS(:,:,:) = PRCS(:,:,:) - ZW(:,:,:) - PRGS(:,:,:) = PRGS(:,:,:) + ZW(:,:,:) - PTHS(:,:,:) = PTHS(:,:,:) + ZW(:,:,:)*(ZZ_LSFACT(:,:,:)-ZZ_LVFACT(:,:,:)) - ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RRWETG(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP - PRRS(:,:,:) = PRRS(:,:,:) - ZW(:,:,:) - PRGS(:,:,:) = PRGS(:,:,:) + ZW(:,:,:) - PTHS(:,:,:) = PTHS(:,:,:) + ZW(:,:,:)*(ZZ_LSFACT(:,:,:)-ZZ_LVFACT(:,:,:)) - ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RIWETG(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP - PRIS(:,:,:) = PRIS(:,:,:) - ZW(:,:,:) - PRGS(:,:,:) = PRGS(:,:,:) + ZW(:,:,:) + DO JL=1, KSIZE + ZW(I1TOT(JL), I2TOT(JL), I3TOT(JL)) = ZTOT_RSMLTG(JL) * ZINV_TSTEP + END DO + IF (LBUDGET_RS) CALL BUDGET_STORE_ADD(TBUDGETS(NBUDGET_RS), 'CMEL', -ZW(:, :, :)*PRHODJ(:, :, :)) + IF (LBUDGET_RG) CALL BUDGET_STORE_ADD(TBUDGETS(NBUDGET_RG), 'CMEL', ZW(:, :, :)*PRHODJ(:, :, :)) ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RSWETG(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP - PRSS(:,:,:) = PRSS(:,:,:) - ZW(:,:,:) - PRGS(:,:,:) = PRGS(:,:,:) + ZW(:,:,:) - IF (LBUDGET_TH) CALL BUDGET(PTHS(:,:,:)*PRHODJ(:,:,:), 4, 'WETG_BU_RTH',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RC) CALL BUDGET(PRCS(:,:,:)*PRHODJ(:,:,:), 7, 'WETG_BU_RRC',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RR) CALL BUDGET(PRRS(:,:,:)*PRHODJ(:,:,:), 8, 'WETG_BU_RRR',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RI) CALL BUDGET(PRIS(:,:,:)*PRHODJ(:,:,:), 9, 'WETG_BU_RRI',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RS) CALL BUDGET(PRSS(:,:,:)*PRHODJ(:,:,:), 10,'WETG_BU_RRS',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RG) CALL BUDGET(PRGS(:,:,:)*PRHODJ(:,:,:), 11,'WETG_BU_RRG',YDDDH, YDLDDH, YDMDDH) + DO JL=1, KSIZE + ZW(I1TOT(JL), I2TOT(JL), I3TOT(JL)) = ZTOT_RCMLTSR(JL) * ZINV_TSTEP + END DO + IF (LBUDGET_RC) CALL BUDGET_STORE_ADD(TBUDGETS(NBUDGET_RC), 'CMEL', -ZW(:, :, :)*PRHODJ(:, :, :)) + IF (LBUDGET_RR) CALL BUDGET_STORE_ADD(TBUDGETS(NBUDGET_RR), 'CMEL', ZW(:, :, :)*PRHODJ(:, :, :)) + + ZW1(:,:,:) = 0. + DO JL=1, KSIZE + ZW1(I1TOT(JL), I2TOT(JL), I3TOT(JL)) = ZTOT_RICFRRG(JL) * ZINV_TSTEP + END DO + ZW2(:,:,:) = 0. + DO JL=1, KSIZE + ZW2(I1TOT(JL), I2TOT(JL), I3TOT(JL)) = ZTOT_RRCFRIG(JL) * ZINV_TSTEP + END DO + ZW3(:,:,:) = 0. + DO JL=1, KSIZE + ZW3(I1TOT(JL), I2TOT(JL), I3TOT(JL)) = ZTOT_RICFRR(JL) * ZINV_TSTEP + END DO + IF (LBUDGET_TH) & + CALL BUDGET_STORE_ADD(TBUDGETS(NBUDGET_TH), 'CFRZ', ZW2(:, :, :)*ZZ_DIFF(:, :, :)*PRHODJ(:, :, :)) + IF (LBUDGET_RR) CALL BUDGET_STORE_ADD(TBUDGETS(NBUDGET_RR), 'CFRZ', (-ZW2(:, :, :)+ZW3(:, :, :))*PRHODJ(:, :, :)) + IF (LBUDGET_RI) CALL BUDGET_STORE_ADD(TBUDGETS(NBUDGET_RI), 'CFRZ', (-ZW1(:, :, :)-ZW3(:, :, :))*PRHODJ(:, :, :)) + IF (LBUDGET_RG) CALL BUDGET_STORE_ADD(TBUDGETS(NBUDGET_RG), 'CFRZ', ( ZW1(:, :, :)+ZW2(:, :, :))*PRHODJ(:, :, :)) + + ZW1(:,:,:) = 0. + DO JL=1, KSIZE + ZW1(I1TOT(JL), I2TOT(JL), I3TOT(JL)) = ZTOT_RCWETG(JL) * ZINV_TSTEP + END DO + ZW2(:,:,:) = 0. + DO JL=1, KSIZE + ZW2(I1TOT(JL), I2TOT(JL), I3TOT(JL)) = ZTOT_RRWETG(JL) * ZINV_TSTEP + END DO + ZW3(:,:,:) = 0. + DO JL=1, KSIZE + ZW3(I1TOT(JL), I2TOT(JL), I3TOT(JL)) = ZTOT_RIWETG(JL) * ZINV_TSTEP + END DO + ZW4(:,:,:) = 0. + DO JL=1, KSIZE + ZW4(I1TOT(JL), I2TOT(JL), I3TOT(JL)) = ZTOT_RSWETG(JL) * ZINV_TSTEP + END DO + IF (LBUDGET_TH) & + CALL BUDGET_STORE_ADD(TBUDGETS(NBUDGET_TH), 'WETG', (ZW1(:, :, :)+ZW2(:, :, :))*ZZ_DIFF(:, :, :)*PRHODJ(:, :, :)) + IF (LBUDGET_RC) CALL BUDGET_STORE_ADD(TBUDGETS(NBUDGET_RC), 'WETG', -zw1(:, :, :) *PRHODJ(:, :, :)) + IF (LBUDGET_RR) CALL BUDGET_STORE_ADD(TBUDGETS(NBUDGET_RR), 'WETG', -zw2(:, :, :) *PRHODJ(:, :, :)) + IF (LBUDGET_RI) CALL BUDGET_STORE_ADD(TBUDGETS(NBUDGET_RI), 'WETG', -zw3(:, :, :) *PRHODJ(:, :, :)) + IF (LBUDGET_RS) CALL BUDGET_STORE_ADD(TBUDGETS(NBUDGET_RS), 'WETG', -zw4(:, :, :) *PRHODJ(:, :, :)) + IF (LBUDGET_RG) CALL BUDGET_STORE_ADD(TBUDGETS(NBUDGET_RG), 'WETG', (ZW1(:, :, :)+ZW2(:, :, :)+ZW3(:, :, :)+ZW4(:, :, :)) & + & *PRHODJ(:, :, :)) IF(KRR==7) THEN ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RWETGH(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP - PRGS(:,:,:) = PRGS(:,:,:) - ZW(:,:,:) - PRHS(:,:,:) = PRHS(:,:,:) + ZW(:,:,:) - IF (LBUDGET_RG) CALL BUDGET(PRGS(:,:,:)*PRHODJ(:,:,:), 11,'GHCV_BU_RRG',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RH) CALL BUDGET(PRHS(:,:,:)*PRHODJ(:,:,:), 12,'GHCV_BU_RRH',YDDDH, YDLDDH, YDMDDH) + DO JL=1, KSIZE + ZW(I1TOT(JL), I2TOT(JL), I3TOT(JL)) = ZTOT_RWETGH(JL) * ZINV_TSTEP + END DO + IF (LBUDGET_RG) CALL BUDGET_STORE_ADD(TBUDGETS(NBUDGET_RG), 'GHCV', -ZW(:, :, :)*PRHODJ(:, :, :)) + IF (LBUDGET_RH) CALL BUDGET_STORE_ADD(TBUDGETS(NBUDGET_RH), 'GHCV', ZW(:, :, :)*PRHODJ(:, :, :)) END IF - ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RCDRYG(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP - PRCS(:,:,:) = PRCS(:,:,:) - ZW(:,:,:) - PRGS(:,:,:) = PRGS(:,:,:) + ZW(:,:,:) - PTHS(:,:,:) = PTHS(:,:,:) + ZW(:,:,:)*(ZZ_LSFACT(:,:,:)-ZZ_LVFACT(:,:,:)) - ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RRDRYG(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP - PRRS(:,:,:) = PRRS(:,:,:) - ZW(:,:,:) - PRGS(:,:,:) = PRGS(:,:,:) + ZW(:,:,:) - PTHS(:,:,:) = PTHS(:,:,:) + ZW(:,:,:)*(ZZ_LSFACT(:,:,:)-ZZ_LVFACT(:,:,:)) - ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RIDRYG(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP - PRIS(:,:,:) = PRIS(:,:,:) - ZW(:,:,:) - PRGS(:,:,:) = PRGS(:,:,:) + ZW(:,:,:) - ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RSDRYG(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP - PRSS(:,:,:) = PRSS(:,:,:) - ZW(:,:,:) - PRGS(:,:,:) = PRGS(:,:,:) + ZW(:,:,:) - IF (LBUDGET_TH) CALL BUDGET(PTHS(:,:,:)*PRHODJ(:,:,:), 4, 'DRYG_BU_RTH',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RC) CALL BUDGET(PRCS(:,:,:)*PRHODJ(:,:,:), 7, 'DRYG_BU_RRC',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RR) CALL BUDGET(PRRS(:,:,:)*PRHODJ(:,:,:), 8, 'DRYG_BU_RRR',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RI) CALL BUDGET(PRIS(:,:,:)*PRHODJ(:,:,:), 9, 'DRYG_BU_RRI',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RS) CALL BUDGET(PRSS(:,:,:)*PRHODJ(:,:,:), 10,'DRYG_BU_RRS',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RG) CALL BUDGET(PRGS(:,:,:)*PRHODJ(:,:,:), 11,'DRYG_BU_RRG',YDDDH, YDLDDH, YDMDDH) + ZW1(:,:,:) = 0. + DO JL=1, KSIZE + ZW1(I1TOT(JL), I2TOT(JL), I3TOT(JL)) = ZTOT_RCDRYG(JL) * ZINV_TSTEP + END DO + ZW2(:,:,:) = 0. + DO JL=1, KSIZE + ZW2(I1TOT(JL), I2TOT(JL), I3TOT(JL)) = ZTOT_RRDRYG(JL) * ZINV_TSTEP + END DO + ZW3(:,:,:) = 0. + DO JL=1, KSIZE + ZW3(I1TOT(JL), I2TOT(JL), I3TOT(JL)) = ZTOT_RIDRYG(JL) * ZINV_TSTEP + END DO + ZW4(:,:,:) = 0. + DO JL=1, KSIZE + ZW4(I1TOT(JL), I2TOT(JL), I3TOT(JL)) = ZTOT_RSDRYG(JL) * ZINV_TSTEP + END DO + IF (LBUDGET_TH) & + CALL BUDGET_STORE_ADD(TBUDGETS(NBUDGET_TH), 'DRYG', (ZW1(:, :, :)+ZW2(:, :, :) )*ZZ_DIFF(:, :, :)*PRHODJ(:, :, :)) + IF (LBUDGET_RC) CALL BUDGET_STORE_ADD(TBUDGETS(NBUDGET_RC), 'DRYG', -zw1(:, :, :) *PRHODJ(:, :, :)) + IF (LBUDGET_RR) CALL BUDGET_STORE_ADD(TBUDGETS(NBUDGET_RR), 'DRYG', -zw2(:, :, :) *PRHODJ(:, :, :)) + IF (LBUDGET_RI) CALL BUDGET_STORE_ADD(TBUDGETS(NBUDGET_RI), 'DRYG', -zw3(:, :, :) *PRHODJ(:, :, :)) + IF (LBUDGET_RS) CALL BUDGET_STORE_ADD(TBUDGETS(NBUDGET_RS), 'DRYG', -zw4(:, :, :) *PRHODJ(:, :, :)) + IF (LBUDGET_RG) CALL BUDGET_STORE_ADD(TBUDGETS(NBUDGET_RG), 'DRYG', (ZW1(:, :, :)+ZW2(:, :, :)+ZW3(:, :, :)+ZW4(:, :, :)) & + & *PRHODJ(:, :, :)) ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RGMLTR(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP - PRRS(:,:,:) = PRRS(:,:,:) + ZW(:,:,:) - PRGS(:,:,:) = PRGS(:,:,:) - ZW(:,:,:) - PTHS(:,:,:) = PTHS(:,:,:) - ZW(:,:,:)*(ZZ_LSFACT(:,:,:)-ZZ_LVFACT(:,:,:)) - IF (LBUDGET_TH) CALL BUDGET(PTHS(:,:,:)*PRHODJ(:,:,:), 4, 'GMLT_BU_RTH',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RR) CALL BUDGET(PRRS(:,:,:)*PRHODJ(:,:,:), 8, 'GMLT_BU_RRR',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RG) CALL BUDGET(PRGS(:,:,:)*PRHODJ(:,:,:), 11,'GMLT_BU_RRG',YDDDH, YDLDDH, YDMDDH) + DO JL=1, KSIZE + ZW(I1TOT(JL), I2TOT(JL), I3TOT(JL)) = ZTOT_RGMLTR(JL) * ZINV_TSTEP + END DO + IF (LBUDGET_TH) CALL BUDGET_STORE_ADD(TBUDGETS(NBUDGET_TH), 'GMLT', -ZW(:, :, :)*ZZ_DIFF(:, :, :)*PRHODJ(:, :, :)) + IF (LBUDGET_RR) CALL BUDGET_STORE_ADD(TBUDGETS(NBUDGET_RR), 'GMLT', ZW(:, :, :) *PRHODJ(:, :, :)) + IF (LBUDGET_RG) CALL BUDGET_STORE_ADD(TBUDGETS(NBUDGET_RG), 'GMLT', -ZW(:, :, :) *PRHODJ(:, :, :)) IF(KRR==7) THEN - ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RCWETH(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP - PRCS(:,:,:) = PRCS(:,:,:) - ZW(:,:,:) - PRHS(:,:,:) = PRHS(:,:,:) + ZW(:,:,:) - PTHS(:,:,:) = PTHS(:,:,:) + ZW(:,:,:)*(ZZ_LSFACT(:,:,:)-ZZ_LVFACT(:,:,:)) - ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RRWETH(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP - PRRS(:,:,:) = PRRS(:,:,:) - ZW(:,:,:) - PRHS(:,:,:) = PRHS(:,:,:) + ZW(:,:,:) - PTHS(:,:,:) = PTHS(:,:,:) + ZW(:,:,:)*(ZZ_LSFACT(:,:,:)-ZZ_LVFACT(:,:,:)) - ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RIWETH(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP - PRIS(:,:,:) = PRIS(:,:,:) - ZW(:,:,:) - PRHS(:,:,:) = PRHS(:,:,:) + ZW(:,:,:) - ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RSWETH(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP - PRSS(:,:,:) = PRSS(:,:,:) - ZW(:,:,:) - PRHS(:,:,:) = PRHS(:,:,:) + ZW(:,:,:) - ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RGWETH(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP - PRGS(:,:,:) = PRGS(:,:,:) - ZW(:,:,:) - PRHS(:,:,:) = PRHS(:,:,:) + ZW(:,:,:) - IF (LBUDGET_TH) CALL BUDGET(PTHS(:,:,:)*PRHODJ(:,:,:), 4, 'WETH_BU_RTH',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RC) CALL BUDGET(PRCS(:,:,:)*PRHODJ(:,:,:), 7, 'WETH_BU_RRC',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RR) CALL BUDGET(PRRS(:,:,:)*PRHODJ(:,:,:), 8, 'WETH_BU_RRR',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RI) CALL BUDGET(PRIS(:,:,:)*PRHODJ(:,:,:), 9, 'WETH_BU_RRI',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RS) CALL BUDGET(PRSS(:,:,:)*PRHODJ(:,:,:), 10,'WETH_BU_RRS',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RH) CALL BUDGET(PRHS(:,:,:)*PRHODJ(:,:,:), 12,'WETH_BU_RRH',YDDDH, YDLDDH, YDMDDH) - - ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RGWETH(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP - PRGS(:,:,:) = PRGS(:,:,:) - ZW(:,:,:) - PRHS(:,:,:) = PRHS(:,:,:) + ZW(:,:,:) - IF (LBUDGET_RG) CALL BUDGET(PRGS(:,:,:)*PRHODJ(:,:,:), 11,'HGCV_BU_RRG',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RH) CALL BUDGET(PRHS(:,:,:)*PRHODJ(:,:,:), 12,'HGCV_BU_RRH',YDDDH, YDLDDH, YDMDDH) + ZW1(:,:,:) = 0. + DO JL=1, KSIZE + ZW1(I1TOT(JL), I2TOT(JL), I3TOT(JL)) = ZTOT_RCWETH(JL) * ZINV_TSTEP + END DO + ZW2(:,:,:) = 0. + DO JL=1, KSIZE + ZW2(I1TOT(JL), I2TOT(JL), I3TOT(JL)) = ZTOT_RRWETH(JL) * ZINV_TSTEP + END DO + ZW3(:,:,:) = 0. + DO JL=1, KSIZE + ZW3(I1TOT(JL), I2TOT(JL), I3TOT(JL)) = ZTOT_RIWETH(JL) * ZINV_TSTEP + END DO + ZW4(:,:,:) = 0. + DO JL=1, KSIZE + ZW4(I1TOT(JL), I2TOT(JL), I3TOT(JL)) = ZTOT_RSWETH(JL) * ZINV_TSTEP + END DO + ZW5(:,:,:) = 0. + DO JL=1, KSIZE + ZW5(I1TOT(JL), I2TOT(JL), I3TOT(JL)) = ZTOT_RGWETH(JL) * ZINV_TSTEP + END DO + IF (LBUDGET_TH) & + CALL BUDGET_STORE_ADD(TBUDGETS(NBUDGET_TH), 'WETH', (ZW1(:, :, :)+ZW2(:, :, :))*ZZ_DIFF(:, :, :)*PRHODJ(:, :, :)) + IF (LBUDGET_RC) CALL BUDGET_STORE_ADD(TBUDGETS(NBUDGET_RC), 'WETH', -ZW1(:, :, :) *PRHODJ(:, :, :)) + IF (LBUDGET_RR) CALL BUDGET_STORE_ADD(TBUDGETS(NBUDGET_RR), 'WETH', -ZW2(:, :, :) *PRHODJ(:, :, :)) + IF (LBUDGET_RI) CALL BUDGET_STORE_ADD(TBUDGETS(NBUDGET_RI), 'WETH', -ZW3(:, :, :) *PRHODJ(:, :, :)) + IF (LBUDGET_RS) CALL BUDGET_STORE_ADD(TBUDGETS(NBUDGET_RS), 'WETH', -ZW4(:, :, :) *PRHODJ(:, :, :)) + IF (LBUDGET_RG) CALL BUDGET_STORE_ADD(TBUDGETS(NBUDGET_RG), 'WETH', -ZW5(:, :, :) *PRHODJ(:, :, :)) + IF (LBUDGET_RH) CALL BUDGET_STORE_ADD(TBUDGETS(NBUDGET_RH), 'WETH', (ZW1(:, :, :)+ZW2(:, :, :)+ZW3(:, :, :)+ & + &ZW4(:, :, :)+ZW5(:, :, : )) *PRHODJ(:, :, :)) ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RCDRYH(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP - PRCS(:,:,:) = PRCS(:,:,:) - ZW(:,:,:) - PRHS(:,:,:) = PRHS(:,:,:) + ZW(:,:,:) - PTHS(:,:,:) = PTHS(:,:,:) + ZW(:,:,:)*(ZZ_LSFACT(:,:,:)-ZZ_LVFACT(:,:,:)) - ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RRDRYH(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP - PRRS(:,:,:) = PRRS(:,:,:) - ZW(:,:,:) - PRHS(:,:,:) = PRHS(:,:,:) + ZW(:,:,:) - PTHS(:,:,:) = PTHS(:,:,:) + ZW(:,:,:)*(ZZ_LSFACT(:,:,:)-ZZ_LVFACT(:,:,:)) - ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RIDRYH(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP - PRIS(:,:,:) = PRIS(:,:,:) - ZW(:,:,:) - PRHS(:,:,:) = PRHS(:,:,:) + ZW(:,:,:) - ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RSDRYH(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP - PRSS(:,:,:) = PRSS(:,:,:) - ZW(:,:,:) - PRHS(:,:,:) = PRHS(:,:,:) + ZW(:,:,:) - ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RGDRYH(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP - PRGS(:,:,:) = PRGS(:,:,:) - ZW(:,:,:) - PRHS(:,:,:) = PRHS(:,:,:) + ZW(:,:,:) - ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RDRYHG(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP - PRHS(:,:,:) = PRHS(:,:,:) - ZW(:,:,:) - PRGS(:,:,:) = PRGS(:,:,:) + ZW(:,:,:) - IF (LBUDGET_TH) CALL BUDGET(PTHS(:,:,:)*PRHODJ(:,:,:), 4, 'DRYH_BU_RTH',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RC) CALL BUDGET(PRCS(:,:,:)*PRHODJ(:,:,:), 7, 'DRYH_BU_RRC',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RR) CALL BUDGET(PRRS(:,:,:)*PRHODJ(:,:,:), 8, 'DRYH_BU_RRR',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RI) CALL BUDGET(PRIS(:,:,:)*PRHODJ(:,:,:), 9, 'DRYH_BU_RRI',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RS) CALL BUDGET(PRSS(:,:,:)*PRHODJ(:,:,:), 10,'DRYH_BU_RRS',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RG) CALL BUDGET(PRGS(:,:,:)*PRHODJ(:,:,:), 11,'DRYH_BU_RRG',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RH) CALL BUDGET(PRHS(:,:,:)*PRHODJ(:,:,:), 12,'DRYH_BU_RRH',YDDDH, YDLDDH, YDMDDH) + DO JL=1, KSIZE + ZW(I1TOT(JL), I2TOT(JL), I3TOT(JL)) = ZTOT_RGWETH(JL) * ZINV_TSTEP + END DO + IF (LBUDGET_RG) CALL BUDGET_STORE_ADD(TBUDGETS(NBUDGET_RG), 'HGCV', -ZW(:, :, :)*PRHODJ(:, :, :)) + IF (LBUDGET_RH) CALL BUDGET_STORE_ADD(TBUDGETS(NBUDGET_RH), 'HGCV', ZW(:, :, :)*PRHODJ(:, :, :)) + + ZW1(:,:,:) = 0. + DO JL=1, KSIZE + ZW1(I1TOT(JL), I2TOT(JL), I3TOT(JL)) = ZTOT_RCDRYH(JL) * ZINV_TSTEP + END DO + ZW2(:,:,:) = 0. + DO JL=1, KSIZE + ZW2(I1TOT(JL), I2TOT(JL), I3TOT(JL)) = ZTOT_RRDRYH(JL) * ZINV_TSTEP + END DO + ZW3(:,:,:) = 0. + DO JL=1, KSIZE + ZW3(I1TOT(JL), I2TOT(JL), I3TOT(JL)) = ZTOT_RIDRYH(JL) * ZINV_TSTEP + END DO + ZW4(:,:,:) = 0. + DO JL=1, KSIZE + ZW4(I1TOT(JL), I2TOT(JL), I3TOT(JL)) = ZTOT_RSDRYH(JL) * ZINV_TSTEP + END DO + ZW5(:,:,:) = 0. + DO JL=1, KSIZE + ZW5(I1TOT(JL), I2TOT(JL), I3TOT(JL)) = ZTOT_RGDRYH(JL) * ZINV_TSTEP + END DO + ZW6(:,:,:) = 0. + DO JL=1, KSIZE + ZW6(I1TOT(JL), I2TOT(JL), I3TOT(JL)) = ZTOT_RDRYHG(JL) * ZINV_TSTEP + END DO + IF (LBUDGET_TH) & + CALL BUDGET_STORE_ADD(TBUDGETS(NBUDGET_TH), 'DRYH', (ZW1(:, :, :)+ZW2(:, :, :))*ZZ_DIFF(:, :, :)*PRHODJ(:, :, :)) + IF (LBUDGET_RC) CALL BUDGET_STORE_ADD(TBUDGETS(NBUDGET_RC), 'DRYH', -ZW1(:, :, :) *PRHODJ(:, :, :)) + IF (LBUDGET_RR) CALL BUDGET_STORE_ADD(TBUDGETS(NBUDGET_RR), 'DRYH', -ZW2(:, :, :) *PRHODJ(:, :, :)) + IF (LBUDGET_RI) CALL BUDGET_STORE_ADD(TBUDGETS(NBUDGET_RI), 'DRYH', -ZW3(:, :, :) *PRHODJ(:, :, :)) + IF (LBUDGET_RS) CALL BUDGET_STORE_ADD(TBUDGETS(NBUDGET_RS), 'DRYH', -ZW4(:, :, :) *PRHODJ(:, :, :)) + IF (LBUDGET_RG) CALL BUDGET_STORE_ADD(TBUDGETS(NBUDGET_RG), 'DRYH', (-ZW5(:, :, :)+ZW6(:, :, : )) *PRHODJ(:, :, :)) + IF (LBUDGET_RH) CALL BUDGET_STORE_ADD(TBUDGETS(NBUDGET_RH), 'DRYH', (ZW1(:, :, :)+ZW2(:, :, :)+ZW3(:, :, :)+ & + &ZW4(:, :, :)+ZW5(:, :, : )-ZW6(:, :, :)) & + & *PRHODJ(:, :, :)) ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RHMLTR(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP - PRRS(:,:,:) = PRRS(:,:,:) + ZW(:,:,:) - PRHS(:,:,:) = PRHS(:,:,:) - ZW(:,:,:) - PTHS(:,:,:) = PTHS(:,:,:) - ZW(:,:,:)*(ZZ_LSFACT(:,:,:)-ZZ_LVFACT(:,:,:)) - IF (LBUDGET_TH) CALL BUDGET(PTHS(:,:,:)*PRHODJ(:,:,:), 4, 'HMLT_BU_RTH',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RR) CALL BUDGET(PRRS(:,:,:)*PRHODJ(:,:,:), 8, 'HMLT_BU_RRR',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RH) CALL BUDGET(PRHS(:,:,:)*PRHODJ(:,:,:), 12,'HMLT_BU_RRH',YDDDH, YDLDDH, YDMDDH) + DO JL=1, KSIZE + ZW(I1TOT(JL), I2TOT(JL), I3TOT(JL)) = ZTOT_RHMLTR(JL) * ZINV_TSTEP + END DO + IF (LBUDGET_TH) CALL BUDGET_STORE_ADD(TBUDGETS(NBUDGET_TH), 'HMLT', -ZW(:, :, :)*ZZ_DIFF(:, :, :)*PRHODJ(:, :, :)) + IF (LBUDGET_RR) CALL BUDGET_STORE_ADD(TBUDGETS(NBUDGET_RR), 'HMLT', ZW(:, :, :) *PRHODJ(:, :, :)) + IF (LBUDGET_RH) CALL BUDGET_STORE_ADD(TBUDGETS(NBUDGET_RH), 'HMLT', -ZW(:, :, :) *PRHODJ(:, :, :)) ENDIF ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RIMLTC(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP - PRIS(:,:,:) = PRIS(:,:,:) - ZW(:,:,:) - PRCS(:,:,:) = PRCS(:,:,:) + ZW(:,:,:) - PTHS(:,:,:) = PTHS(:,:,:) - ZW(:,:,:)*(ZZ_LSFACT(:,:,:)-ZZ_LVFACT(:,:,:)) - IF (LBUDGET_TH) CALL BUDGET(PTHS(:,:,:)*PRHODJ(:,:,:), 4, 'IMLT_BU_RTH',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RC) CALL BUDGET(PRCS(:,:,:)*PRHODJ(:,:,:), 7, 'IMLT_BU_RRC',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RI) CALL BUDGET(PRIS(:,:,:)*PRHODJ(:,:,:), 9, 'IMLT_BU_RRI',YDDDH, YDLDDH, YDMDDH) + DO JL=1, KSIZE + ZW(I1TOT(JL), I2TOT(JL), I3TOT(JL)) = ZTOT_RIMLTC(JL) * ZINV_TSTEP + END DO + IF (LBUDGET_TH) CALL BUDGET_STORE_ADD(TBUDGETS(NBUDGET_TH), 'IMLT', -ZW(:, :, :)*ZZ_DIFF(:, :, :)*PRHODJ(:, :, :)) + IF (LBUDGET_RC) CALL BUDGET_STORE_ADD(TBUDGETS(NBUDGET_RC), 'IMLT', ZW(:, :, :) *PRHODJ(:, :, :)) + IF (LBUDGET_RI) CALL BUDGET_STORE_ADD(TBUDGETS(NBUDGET_RI), 'IMLT', -ZW(:, :, :) *PRHODJ(:, :, :)) ZW(:,:,:) = 0. - ZW(:,:,:)=UNPACK(ZTOT_RCBERI(:), MASK=ODMICRO(:,:,:), FIELD=ZW(:,:,:))*ZINV_TSTEP - PRCS(:,:,:) = PRCS(:,:,:) - ZW(:,:,:) - PRIS(:,:,:) = PRIS(:,:,:) + ZW(:,:,:) - PTHS(:,:,:) = PTHS(:,:,:) + ZW(:,:,:)*(ZZ_LSFACT(:,:,:)-ZZ_LVFACT(:,:,:)) - IF (LBUDGET_TH) CALL BUDGET(PTHS(:,:,:)*PRHODJ(:,:,:), 4, 'BERFI_BU_RTH',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RC) CALL BUDGET(PRCS(:,:,:)*PRHODJ(:,:,:), 7, 'BERFI_BU_RRC',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RI) CALL BUDGET(PRIS(:,:,:)*PRHODJ(:,:,:), 9, 'BERFI_BU_RRI',YDDDH, YDLDDH, YDMDDH) + DO JL=1, KSIZE + ZW(I1TOT(JL), I2TOT(JL), I3TOT(JL)) = ZTOT_RCBERI(JL) * ZINV_TSTEP + END DO + IF (LBUDGET_TH) CALL BUDGET_STORE_ADD(TBUDGETS(NBUDGET_TH), 'BERFI', ZW(:, :, :)*ZZ_DIFF(:, :, :)*PRHODJ(:, :, :)) + IF (LBUDGET_RC) CALL BUDGET_STORE_ADD(TBUDGETS(NBUDGET_RC), 'BERFI', -ZW(:, :, :) *PRHODJ(:, :, :)) + IF (LBUDGET_RI) CALL BUDGET_STORE_ADD(TBUDGETS(NBUDGET_RI), 'BERFI', ZW(:, :, :) *PRHODJ(:, :, :)) + ENDIF ! - !*** 7.3 Final tendencies ! -DO JK = 1, KKT - PTHS(:,:,JK) = ZWR(:,:,JK,ITH) - PRVS(:,:,JK) = ZWR(:,:,JK,IRV) - PRCS(:,:,JK) = ZWR(:,:,JK,IRC) - PRRS(:,:,JK) = ZWR(:,:,JK,IRR) - PRIS(:,:,JK) = ZWR(:,:,JK,IRI) - PRSS(:,:,JK) = ZWR(:,:,JK,IRS) - PRGS(:,:,JK) = ZWR(:,:,JK,IRG) - IF (KRR==7) THEN - PRHS(:,:,JK) = ZWR(:,:,JK,IRH) - ENDIF -ENDDO +IF (LBU_ENABLE) THEN + IF (LBUDGET_TH) CALL BUDGET_STORE_INIT(TBUDGETS(NBUDGET_TH), 'CORR', PTHS(:, :, :)*PRHODJ(:, :, :)) + IF (LBUDGET_RV) CALL BUDGET_STORE_INIT(TBUDGETS(NBUDGET_RV), 'CORR', PRVS(:, :, :)*PRHODJ(:, :, :)) + IF (LBUDGET_RC) CALL BUDGET_STORE_INIT(TBUDGETS(NBUDGET_RC), 'CORR', PRCS(:, :, :)*PRHODJ(:, :, :)) + IF (LBUDGET_RR) CALL BUDGET_STORE_INIT(TBUDGETS(NBUDGET_RR), 'CORR', PRSS(:, :, :)*PRHODJ(:, :, :)) + IF (LBUDGET_RI) CALL BUDGET_STORE_INIT(TBUDGETS(NBUDGET_RI), 'CORR', PRIS(:, :, :)*PRHODJ(:, :, :)) + IF (LBUDGET_RS) CALL BUDGET_STORE_INIT(TBUDGETS(NBUDGET_RS), 'CORR', PRSS(:, :, :)*PRHODJ(:, :, :)) + IF (LBUDGET_RG) CALL BUDGET_STORE_INIT(TBUDGETS(NBUDGET_RG), 'CORR', PRGS(:, :, :)*PRHODJ(:, :, :)) + IF (LBUDGET_RH .AND. KRR==7) CALL BUDGET_STORE_INIT(TBUDGETS(NBUDGET_RH), 'CORR', PRHS(:, :, :)*PRHODJ(:, :, :)) +END IF -IF(LBU_ENABLE) THEN - IF (LBUDGET_TH) CALL BUDGET(PTHS(:,:,:)*PRHODJ(:,:,:), 4, 'CORR_BU_RTH',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RV) CALL BUDGET(PRVS(:,:,:)*PRHODJ(:,:,:), 6, 'CORR_BU_RRV',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RC) CALL BUDGET(PRCS(:,:,:)*PRHODJ(:,:,:), 7, 'CORR_BU_RRC',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RR) CALL BUDGET(PRRS(:,:,:)*PRHODJ(:,:,:), 8, 'CORR_BU_RRR',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RI) CALL BUDGET(PRIS(:,:,:)*PRHODJ(:,:,:), 9, 'CORR_BU_RRI',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RS) CALL BUDGET(PRSS(:,:,:)*PRHODJ(:,:,:), 10,'CORR_BU_RRS',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RG) CALL BUDGET(PRGS(:,:,:)*PRHODJ(:,:,:), 11,'CORR_BU_RRG',YDDDH, YDLDDH, YDMDDH) - IF (KRR==7) THEN - IF (LBUDGET_RH) CALL BUDGET(PRHS(:,:,:)*PRHODJ(:,:,:), 12,'CORR_BU_RRH',YDDDH, YDLDDH, YDMDDH) - ENDIF -ENDIF +!NOTE: +! This call cannot be moved before the preeceding budget calls because, +! with AROME, the BUDGET_STORE_INIT does nothing. The equivalent is done only +! once before the physics call and copies of the S variables evolve automatically +! internally to the budget (DDH) machinery at each BUDGET_STORE_ADD and +! BUDGET_STORE_END calls. Thus, the difference between the DDH internal version +! of the S variables and the S variables used in the folowing BUDGET_STORE_END +! call must only be due to the correction of negativities. +! +!We correct negativities with conservation +CALL CORRECT_NEGATIVITIES(KIT, KJT, KKT, KRR, PRVS, PRCS, PRRS, & + &PRIS, PRSS, PRGS, & + &PTHS, ZZ_LVFACT, ZZ_LSFACT, PRHS) + +IF (LBU_ENABLE) THEN + IF (LBUDGET_TH) CALL BUDGET_STORE_END(TBUDGETS(NBUDGET_TH), 'CORR', PTHS(:, :, :)*PRHODJ(:, :, :)) + IF (LBUDGET_RV) CALL BUDGET_STORE_END(TBUDGETS(NBUDGET_RV), 'CORR', PRVS(:, :, :)*PRHODJ(:, :, :)) + IF (LBUDGET_RC) CALL BUDGET_STORE_END(TBUDGETS(NBUDGET_RC), 'CORR', PRCS(:, :, :)*PRHODJ(:, :, :)) + IF (LBUDGET_RR) CALL BUDGET_STORE_END(TBUDGETS(NBUDGET_RR), 'CORR', PRRS(:, :, :)*PRHODJ(:, :, :)) + IF (LBUDGET_RI) CALL BUDGET_STORE_END(TBUDGETS(NBUDGET_RI), 'CORR', PRIS(:, :, :)*PRHODJ(:, :, :)) + IF (LBUDGET_RS) CALL BUDGET_STORE_END(TBUDGETS(NBUDGET_RS), 'CORR', PRSS(:, :, :)*PRHODJ(:, :, :)) + IF (LBUDGET_RG) CALL BUDGET_STORE_END(TBUDGETS(NBUDGET_RG), 'CORR', PRGS(:, :, :)*PRHODJ(:, :, :)) + IF (LBUDGET_RH .AND. KRR==7) CALL BUDGET_STORE_END(TBUDGETS(NBUDGET_RH), 'CORR', PRHS(:, :, :)*PRHODJ(:, :, :)) +END IF ! !------------------------------------------------------------------------------- ! @@ -1490,6 +1534,13 @@ IF(LSEDIM_AFTER) THEN ! !* 8.1 sedimentation ! + IF (LBUDGET_RC .and. osedic) CALL BUDGET_STORE_INIT(TBUDGETS(NBUDGET_RC), 'SEDI', PRCS(:, :, :) * PRHODJ(:, :, :)) + IF (LBUDGET_RR) CALL BUDGET_STORE_INIT(TBUDGETS(NBUDGET_RR), 'SEDI', PRRS(:, :, :) * PRHODJ(:, :, :)) + IF (LBUDGET_RI) CALL BUDGET_STORE_INIT(TBUDGETS(NBUDGET_RI), 'SEDI', PRIS(:, :, :) * PRHODJ(:, :, :)) + IF (LBUDGET_RS) CALL BUDGET_STORE_INIT(TBUDGETS(NBUDGET_RS), 'SEDI', PRSS(:, :, :) * PRHODJ(:, :, :)) + IF (LBUDGET_RG) CALL BUDGET_STORE_INIT(TBUDGETS(NBUDGET_RG), 'SEDI', PRGS(:, :, :) * PRHODJ(:, :, :)) + IF (LBUDGET_RH .AND. KRR==7) CALL BUDGET_STORE_INIT(TBUDGETS(NBUDGET_RH), 'SEDI', PRHS(:, :, :) * PRHODJ(:, :, :)) + IF(HSEDIM=='STAT') THEN IF (KRR==7) THEN DO JK = 1, KKT @@ -1505,8 +1556,7 @@ IF(LSEDIM_AFTER) THEN ENDDO ENDDO CALL ICE4_SEDIMENTATION_STAT(IIB, IIE, KIT, IJB, IJE, KJT, IKB, IKE, IKTB, IKTE, KKT, KKL, & - &PTSTEP, KRR, OSEDIC, & - &PDZZ, & + &PTSTEP, KRR, OSEDIC, PDZZ, & &PRHODREF, PPABST, PTHT, PRHODJ, & &PRCS, ZRCT, PRRS, ZRRT, PRIS, ZRIT,& &PRSS, ZRST, PRGS, ZRGT,& @@ -1526,8 +1576,7 @@ IF(LSEDIM_AFTER) THEN ENDDO ENDDO CALL ICE4_SEDIMENTATION_STAT(IIB, IIE, KIT, IJB, IJE, KJT, IKB, IKE, IKTB, IKTE, KKT, KKL, & - &PTSTEP, KRR, OSEDIC, & - &PDZZ, & + &PTSTEP, KRR, OSEDIC, PDZZ, & &PRHODREF, PPABST, PTHT, PRHODJ, & &PRCS, ZRCT, PRRS, ZRRT, PRIS, ZRIT,& &PRSS, ZRST, PRGS, ZRGT,& @@ -1536,13 +1585,12 @@ IF(LSEDIM_AFTER) THEN &PFPR=PFPR) ENDIF PINPRS(:,:) = PINPRS(:,:) + ZINPRI(:,:) - !No negativity correction here as we apply sedimentation on ZR.T variables + !No negativity correction here as we apply sedimentation on PR.S*PTSTEP variables ELSEIF(HSEDIM=='SPLI') THEN !SR: It *seems* that we must have two separate calls for ifort IF(KRR==7) THEN CALL ICE4_SEDIMENTATION_SPLIT(IIB, IIE, KIT, IJB, IJE, KJT, IKB, IKE, IKTB, IKTE, KKT, KKL, & - &PTSTEP, KRR, OSEDIC, & - &PDZZ, & + &PTSTEP, KRR, OSEDIC, PDZZ, & &PRHODREF, PPABST, PTHT, PRHODJ, & &PRCS, PRCT, PRRS, PRRT, PRIS, PRIT, PRSS, PRST, PRGS, PRGT,& &PINPRC, PINPRR, ZINPRI, PINPRS, PINPRG, & @@ -1550,8 +1598,7 @@ IF(LSEDIM_AFTER) THEN &PINPRH=PINPRH, PRHT=PRHT, PRHS=PRHS, PFPR=PFPR) ELSE CALL ICE4_SEDIMENTATION_SPLIT(IIB, IIE, KIT, IJB, IJE, KJT, IKB, IKE, IKTB, IKTE, KKT, KKL, & - &PTSTEP, KRR, OSEDIC, & - &PDZZ, & + &PTSTEP, KRR, OSEDIC, PDZZ, & &PRHODREF, PPABST, PTHT, PRHODJ, & &PRCS, PRCT, PRRS, PRRT, PRIS, PRIT, PRSS, PRST, PRGS, PRGT,& &PINPRC, PINPRR, ZINPRI, PINPRS, PINPRG, & @@ -1564,37 +1611,35 @@ IF(LSEDIM_AFTER) THEN ! It is initialized with the m.r. at T and is modified by two tendencies: ! sedimentation tendency and an external tendency which represents all other ! processes (mainly advection and microphysical processes). If both tendencies - ! are negative, sedimentation can remove a specie at a given sub-timestep. From + ! are negative, sedimentation can remove a species at a given sub-timestep. From ! this point sedimentation stops for the remaining sub-timesteps but the other tendency ! will be still active and will lead to negative values. - ! We could prevent the algorithm to not consume too much a specie, instead we apply + ! We could prevent the algorithm to not consume too much a species, instead we apply ! a correction here. CALL CORRECT_NEGATIVITIES(KIT, KJT, KKT, KRR, PRVS, PRCS, PRRS, & &PRIS, PRSS, PRGS, & &PTHS, ZZ_LVFACT, ZZ_LSFACT, PRHS) ELSE - WRITE(*,*) ' STOP' - WRITE(*,*) ' NO SEDIMENTATION SCHEME FOR HSEDIM=', HSEDIM - CALL ABORT - STOP + CALL PRINT_MSG(NVERB_FATAL, 'GEN', 'RAIN_ICE', 'no sedimentation scheme for HSEDIM='//HSEDIM) END IF ! !* 8.2 budget storage ! - IF (LBUDGET_RC .AND. OSEDIC) & - CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:), 7 , 'SEDI_BU_RRC',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:)*PRHODJ(:,:,:), 8 , 'SEDI_BU_RRR',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RI) CALL BUDGET (PRIS(:,:,:)*PRHODJ(:,:,:), 9 , 'SEDI_BU_RRI',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RS) CALL BUDGET (PRSS(:,:,:)*PRHODJ(:,:,:), 10, 'SEDI_BU_RRS',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RG) CALL BUDGET (PRGS(:,:,:)*PRHODJ(:,:,:), 11, 'SEDI_BU_RRG',YDDDH, YDLDDH, YDMDDH) - IF ( KRR == 7 .AND. LBUDGET_RH) & - CALL BUDGET (PRHS(:,:,:)*PRHODJ(:,:,:), 12, 'SEDI_BU_RRH',YDDDH, YDLDDH, YDMDDH) - ! - !sedimentation of rain fraction - IF (LLRAIN_FRACTION) THEN - CALL ICE4_RAINFR_VERT(IIB, IIE, KIT, IJB, IJE, KJT, IKB, IKE, KKT, KKL, ZRAINFR3D, PRRS(:,:,:)*PTSTEP) + IF (LBUDGET_RC .AND. OSEDIC) CALL BUDGET_STORE_END(TBUDGETS(NBUDGET_RC), 'SEDI', PRCS(:, :, :) * PRHODJ(:, :, :)) + IF (LBUDGET_RR) CALL BUDGET_STORE_END(TBUDGETS(NBUDGET_RR), 'SEDI', PRRS(:, :, :) * PRHODJ(:, :, :)) + IF (LBUDGET_RI) CALL BUDGET_STORE_END(TBUDGETS(NBUDGET_RI), 'SEDI', PRIS(:, :, :) * PRHODJ(:, :, :)) + IF (LBUDGET_RS) CALL BUDGET_STORE_END(TBUDGETS(NBUDGET_RS), 'SEDI', PRSS(:, :, :) * PRHODJ(:, :, :)) + IF (LBUDGET_RG) CALL BUDGET_STORE_END(TBUDGETS(NBUDGET_RG), 'SEDI', PRGS(:, :, :) * PRHODJ(:, :, :)) + IF (LBUDGET_RH .AND. KRR==7) CALL BUDGET_STORE_END(TBUDGETS(NBUDGET_RH), 'SEDI', PRHS(:, :, :) * PRHODJ(:, :, :)) + + !"sedimentation" of rain fraction + IF (PRESENT(PRHS)) THEN + CALL ICE4_RAINFR_VERT(IIB, IIE, KIT, IJB, IJE, KJT, IKB, IKE, KKT, KKL, PRAINFR, PRRS(:,:,:)*PTSTEP, & + &PRSS(:,:,:)*PTSTEP, PRGS(:,:,:)*PTSTEP, PRHS(:,:,:)*PTSTEP) + ELSE + CALL ICE4_RAINFR_VERT(IIB, IIE, KIT, IJB, IJE, KJT, IKB, IKE, KKT, KKL, PRAINFR, PRRS(:,:,:)*PTSTEP, & + &PRSS(:,:,:)*PTSTEP, PRGS(:,:,:)*PTSTEP) ENDIF - ENDIF ! !------------------------------------------------------------------------------- @@ -1603,19 +1648,22 @@ ENDIF ! ------------------------------------- ! IF (LDEPOSC) THEN !cloud water deposition on vegetation + IF (LBU_ENABLE .AND. LBUDGET_RC) & + & CALL BUDGET_STORE_INIT(TBUDGETS(NBUDGET_RC), 'DEPO', PRCS(:, :, :)*PRHODJ(:, :, :)) + DO JJ = 1, KJT !DEC$ IVDEP DO JI = 1, KIT - PRCS(JI,JJ,IKB) = PRCS(JI,JJ,IKB) - XVDEPOSC * PRCT(JI,JJ,IKB) / PDZZ(JI,JJ,IKB) - PINPRC(JI,JJ) = PINPRC(JI,JJ) + XVDEPOSC * PRCT(JI,JJ,IKB) * PRHODREF(JI,JJ,IKB)/XRHOLW + PINDEP(JI, JJ) = XVDEPOSC * PRCT(JI, JJ, IKB) * PRHODREF(JI, JJ, IKB) / XRHOLW + PRCS(JI, JJ, IKB) = PRCS(JI, JJ, IKB) - XVDEPOSC * PRCT(JI, JJ, IKB) / PDZZ(JI, JJ, IKB) + PINPRC(JI, JJ) = PINPRC(JI, JJ) + PINDEP(JI, JJ) ENDDO ENDDO - IF (LBUDGET_RC) CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:),7,'DEPO_BU_RRC',YDDDH, YDLDDH, YDMDDH) + IF (LBU_ENABLE .AND. LBUDGET_RC) & + & CALL BUDGET_STORE_END(TBUDGETS(NBUDGET_RC), 'DEPO', PRCS(:, :, :)*PRHODJ(:, :, :)) ENDIF -!IF (LHOOK) CALL DR_HOOK('RAIN_ICE:POST_MICRO', 1, ZHOOK_HANDLE3) - IF (LHOOK) CALL DR_HOOK('RAIN_ICE', 1, ZHOOK_HANDLE) ! CONTAINS @@ -1638,47 +1686,47 @@ CONTAINS IF (LHOOK) CALL DR_HOOK('RAIN_ICE:CORRECT_NEGATIVITIES', 0, ZHOOK_HANDLE) ! !We correct negativities with conservation - ! 1) deal with negative values for mixing ratio, except for vapor DO JK = 1, KKT DO JJ = 1, KJT DO JI = 1, KIT - ZW =PRC(JI,JJ,JK)-MAX(PRC(JI,JJ,JK), 0.) + ! 1) deal with negative values for mixing ratio, except for vapor + ZW =PRC(JI,JJ,JK)-MAX(PRC(JI,JJ,JK), 0.) PRV(JI,JJ,JK)=PRV(JI,JJ,JK)+ZW PTH(JI,JJ,JK)=PTH(JI,JJ,JK)-ZW*PLVFACT(JI,JJ,JK) PRC(JI,JJ,JK)=PRC(JI,JJ,JK)-ZW - ZW =PRR(JI,JJ,JK)-MAX(PRR(JI,JJ,JK), 0.) + ZW =PRR(JI,JJ,JK)-MAX(PRR(JI,JJ,JK), 0.) PRV(JI,JJ,JK)=PRV(JI,JJ,JK)+ZW PTH(JI,JJ,JK)=PTH(JI,JJ,JK)-ZW*PLVFACT(JI,JJ,JK) PRR(JI,JJ,JK)=PRR(JI,JJ,JK)-ZW - ZW =PRI(JI,JJ,JK)-MAX(PRI(JI,JJ,JK), 0.) + ZW =PRI(JI,JJ,JK)-MAX(PRI(JI,JJ,JK), 0.) PRV(JI,JJ,JK)=PRV(JI,JJ,JK)+ZW PTH(JI,JJ,JK)=PTH(JI,JJ,JK)-ZW*PLSFACT(JI,JJ,JK) PRI(JI,JJ,JK)=PRI(JI,JJ,JK)-ZW - ZW =PRS(JI,JJ,JK)-MAX(PRS(JI,JJ,JK), 0.) + ZW =PRS(JI,JJ,JK)-MAX(PRS(JI,JJ,JK), 0.) PRV(JI,JJ,JK)=PRV(JI,JJ,JK)+ZW PTH(JI,JJ,JK)=PTH(JI,JJ,JK)-ZW*PLSFACT(JI,JJ,JK) PRS(JI,JJ,JK)=PRS(JI,JJ,JK)-ZW - ZW =PRG(JI,JJ,JK)-MAX(PRG(JI,JJ,JK), 0.) + ZW =PRG(JI,JJ,JK)-MAX(PRG(JI,JJ,JK), 0.) PRV(JI,JJ,JK)=PRV(JI,JJ,JK)+ZW PTH(JI,JJ,JK)=PTH(JI,JJ,JK)-ZW*PLSFACT(JI,JJ,JK) PRG(JI,JJ,JK)=PRG(JI,JJ,JK)-ZW IF(KRR==7) THEN - ZW =PRH(JI,JJ,JK)-MAX(PRH(JI,JJ,JK), 0.) + ZW =PRH(JI,JJ,JK)-MAX(PRH(JI,JJ,JK), 0.) PRV(JI,JJ,JK)=PRV(JI,JJ,JK)+ZW PTH(JI,JJ,JK)=PTH(JI,JJ,JK)-ZW*PLSFACT(JI,JJ,JK) PRH(JI,JJ,JK)=PRH(JI,JJ,JK)-ZW ENDIF - ! 2) deal with negative vapor mixing ratio + ! 2) deal with negative vapor mixing ratio ! for rc and ri, we keep ice fraction constant ZW=MIN(1., MAX(XRTMIN(1)-PRV(JI,JJ,JK), 0.) / & - &MAX(PRC(JI,JJ,JK)+PRI(JI,JJ,JK), 1.E-20)) ! Proportion of rc+ri to convert into rv + &MAX(PRC(JI,JJ,JK)+PRI(JI,JJ,JK), 1.E-20)) ! Proportion of rc+ri to convert into rv PTH(JI,JJ,JK)=PTH(JI,JJ,JK)-ZW* & &(PRC(JI,JJ,JK)*PLVFACT(JI,JJ,JK)+PRI(JI,JJ,JK)*PLSFACT(JI,JJ,JK)) PRV(JI,JJ,JK)=PRV(JI,JJ,JK)+ZW*(PRC(JI,JJ,JK)+PRI(JI,JJ,JK)) @@ -1686,26 +1734,26 @@ CONTAINS PRI(JI,JJ,JK)=(1.-ZW)*PRI(JI,JJ,JK) ZW=MIN(MAX(PRR(JI,JJ,JK), 0.), & - &MAX(XRTMIN(1)-PRV(JI,JJ,JK), 0.)) ! Quantity of rr to convert into rv + &MAX(XRTMIN(1)-PRV(JI,JJ,JK), 0.)) ! Quantity of rr to convert into rv PRV(JI,JJ,JK)=PRV(JI,JJ,JK)+ZW PRR(JI,JJ,JK)=PRR(JI,JJ,JK)-ZW PTH(JI,JJ,JK)=PTH(JI,JJ,JK)-ZW*PLVFACT(JI,JJ,JK) ZW=MIN(MAX(PRS(JI,JJ,JK), 0.), & - &MAX(XRTMIN(1)-PRV(JI,JJ,JK), 0.)) ! Quantity of rs to convert into rv + &MAX(XRTMIN(1)-PRV(JI,JJ,JK), 0.)) ! Quantity of rs to convert into rv PRV(JI,JJ,JK)=PRV(JI,JJ,JK)+ZW PRS(JI,JJ,JK)=PRS(JI,JJ,JK)-ZW PTH(JI,JJ,JK)=PTH(JI,JJ,JK)-ZW*PLSFACT(JI,JJ,JK) ZW=MIN(MAX(PRG(JI,JJ,JK), 0.), & - &MAX(XRTMIN(1)-PRV(JI,JJ,JK), 0.)) ! Quantity of rg to convert into rv + &MAX(XRTMIN(1)-PRV(JI,JJ,JK), 0.)) ! Quantity of rg to convert into rv PRV(JI,JJ,JK)=PRV(JI,JJ,JK)+ZW PRG(JI,JJ,JK)=PRG(JI,JJ,JK)-ZW PTH(JI,JJ,JK)=PTH(JI,JJ,JK)-ZW*PLSFACT(JI,JJ,JK) IF(KRR==7) THEN ZW=MIN(MAX(PRH(JI,JJ,JK), 0.), & - &MAX(XRTMIN(1)-PRV(JI,JJ,JK), 0.)) ! Quantity of rh to convert into rv + &MAX(XRTMIN(1)-PRV(JI,JJ,JK), 0.)) ! Quantity of rh to convert into rv PRV(JI,JJ,JK)=PRV(JI,JJ,JK)+ZW PRH(JI,JJ,JK)=PRH(JI,JJ,JK)-ZW PTH(JI,JJ,JK)=PTH(JI,JJ,JK)-ZW*PLSFACT(JI,JJ,JK) @@ -1713,7 +1761,6 @@ CONTAINS ENDDO ENDDO ENDDO - ! IF (LHOOK) CALL DR_HOOK('RAIN_ICE:CORRECT_NEGATIVITIES', 1, ZHOOK_HANDLE) ! diff --git a/src/mesonh/micro/rain_ice_red.f90 b/src/mesonh/micro/rain_ice_red.f90 index a4bba492156a17a7de4f7c417a672a22dc10fefd..e3d0fabd52c8b09aafead4b71716d4e091b87a83 100644 --- a/src/mesonh/micro/rain_ice_red.f90 +++ b/src/mesonh/micro/rain_ice_red.f90 @@ -1,3 +1,11 @@ + +!Note de phasage pour Méso-NH: dans resolved_cloud, il faut: +! - récuperer le tbudgets de modd_budget pour le passer ici, kbudgets vaut size(tbudgets) +! - passer OCND2=.FALSE. +! - passer à KPROMA la même valeur que KSIZE (bug sinon) +! - créer des tableaux temporaires pour PSIGS, PINDEP, PINPRC pour gérer les options + + !MNH_LIC Copyright 1995-2021 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 @@ -8,22 +16,26 @@ ! ######################## ! INTERFACE - SUBROUTINE RAIN_ICE_RED ( KIT, KJT, KKT, KSIZE, & - OSEDIC, HSEDIM, HSUBG_AUCV_RC, HSUBG_AUCV_RI, & - OWARM, KKA, KKU, KKL, & - PTSTEP, KRR, ODMICRO, PEXN, & + SUBROUTINE RAIN_ICE_RED ( KPROMA, KIT, KJT, KKT, KSIZE, & + OSEDIC, OCND2, HSEDIM, HSUBG_AUCV_RC, HSUBG_AUCV_RI, & + OWARM, KKA, KKU, KKL, & + PTSTEP, KRR, ODMICRO, PEXN, & PDZZ, PRHODJ, PRHODREF, PEXNREF, PPABST, PCIT, PCLDFR,& - PHLC_HRC, PHLC_HCF, PHLI_HRI, PHLI_HCF,& + PHLC_HRC, PHLC_HCF, PHLI_HRI, PHLI_HCF, & PTHT, PRVT, PRCT, PRRT, PRIT, PRST, & PRGT, PTHS, PRVS, PRCS, PRRS, PRIS, PRSS, PRGS, & - PINPRC,PINPRR, PINPRR3D, PEVAP3D, & + PINPRC,PINPRR, PEVAP3D, & PINPRS, PINPRG, PINDEP, PRAINFR, PSIGS, PSEA, PTOWN, & - PRHT, PRHS, PINPRH, PFPR ) + PRHT, PRHS, PINPRH, PFPR, & + TBUDGETS, KBUDGETS) ! ! +USE MODD_BUDGET, ONLY: TBUDGETDATA +INTEGER, INTENT(IN) :: KPROMA ! cache-blocking factor for microphysic loop INTEGER, INTENT(IN) :: KIT, KJT, KKT ! arrays size INTEGER, INTENT(IN) :: KSIZE LOGICAL, INTENT(IN) :: OSEDIC ! Switch for droplet sedim. +LOGICAL :: OCND2 ! Logical switch to separate liquid and ice CHARACTER(LEN=4), INTENT(IN) :: HSEDIM ! Sedimentation scheme CHARACTER(LEN=4), INTENT(IN) :: HSUBG_AUCV_RC ! Switch for rc->rr Subgrid autoconversion ! Kind of Subgrid autoconversion method @@ -72,15 +84,14 @@ REAL, DIMENSION(KIT,KJT,KKT), INTENT(INOUT) :: PRSS ! Snow/aggregate m.r. s REAL, DIMENSION(KIT,KJT,KKT), INTENT(INOUT) :: PRGS ! Graupel m.r. source ! -REAL, DIMENSION(:,:), INTENT(OUT) :: PINPRC! Cloud instant precip +REAL, DIMENSION(KIT,KJT), INTENT(OUT) :: PINPRC! Cloud instant precip REAL, DIMENSION(KIT,KJT), INTENT(OUT) :: PINPRR! Rain instant precip -REAL, DIMENSION(KIT,KJT,KKT), INTENT(OUT) :: PINPRR3D! Rain inst precip 3D REAL, DIMENSION(KIT,KJT,KKT), INTENT(OUT) :: PEVAP3D! Rain evap profile REAL, DIMENSION(KIT,KJT), INTENT(OUT) :: PINPRS! Snow instant precip REAL, DIMENSION(KIT,KJT), INTENT(OUT) :: PINPRG! Graupel instant precip -REAL, DIMENSION(:,:), INTENT(OUT) :: PINDEP ! Cloud instant deposition +REAL, DIMENSION(KIT,KJT), INTENT(OUT) :: PINDEP ! Cloud instant deposition REAL, DIMENSION(KIT,KJT,KKT), INTENT(OUT) :: PRAINFR -REAL, DIMENSION(:,:,:), INTENT(IN) :: PSIGS ! Sigma_s at t +REAL, DIMENSION(KIT,KJT,KKT), INTENT(IN) :: PSIGS ! Sigma_s at t REAL, DIMENSION(KIT,KJT), OPTIONAL, INTENT(IN) :: PSEA ! Sea Mask REAL, DIMENSION(KIT,KJT), OPTIONAL, INTENT(IN) :: PTOWN! Fraction that is town REAL, DIMENSION(KIT,KJT,KKT), OPTIONAL, INTENT(IN) :: PRHT ! Hail m.r. at t @@ -88,21 +99,25 @@ REAL, DIMENSION(KIT,KJT,KKT), OPTIONAL, INTENT(INOUT) :: PRHS ! Hail m.r. so REAL, DIMENSION(KIT,KJT), OPTIONAL, INTENT(OUT) :: PINPRH! Hail instant precip REAL, DIMENSION(KIT,KJT,KKT,KRR), OPTIONAL, INTENT(OUT) :: PFPR ! upper-air precipitation fluxes ! +TYPE(TBUDGETDATA), OPTIONAL, DIMENSION(KBUDGETS), INTENT(INOUT) :: TBUDGETS +INTEGER, INTENT(IN) : KBUDGETS +! END SUBROUTINE RAIN_ICE_RED END INTERFACE END MODULE MODI_RAIN_ICE_RED ! ######spl - SUBROUTINE RAIN_ICE_RED ( KIT, KJT, KKT, KSIZE, & - OSEDIC, HSEDIM, HSUBG_AUCV_RC, HSUBG_AUCV_RI, & - OWARM,KKA,KKU,KKL,& + SUBROUTINE RAIN_ICE_RED ( KPROMA, KIT, KJT, KKT, KSIZE, & + OSEDIC, OCND2, HSEDIM, HSUBG_AUCV_RC, HSUBG_AUCV_RI, & + OWARM, KKA, KKU, KKL, & PTSTEP, KRR, ODMICRO, PEXN, & PDZZ, PRHODJ, PRHODREF, PEXNREF, PPABST, PCIT, PCLDFR,& - PHLC_HRC, PHLC_HCF, PHLI_HRI, PHLI_HCF, & + PHLC_HRC, PHLC_HCF, PHLI_HRI, PHLI_HCF, & PTHT, PRVT, PRCT, PRRT, PRIT, PRST, & PRGT, PTHS, PRVS, PRCS, PRRS, PRIS, PRSS, PRGS, & - PINPRC,PINPRR, PINPRR3D, PEVAP3D, & + PINPRC, PINPRR, PEVAP3D, & PINPRS, PINPRG, PINDEP, PRAINFR, PSIGS, PSEA, PTOWN, & - PRHT, PRHS, PINPRH, PFPR ) + PRHT, PRHS, PINPRH, PFPR, & + TBUDGETS, KBUDGETS) ! ###################################################################### ! !!**** * - compute the explicit microphysical sources @@ -257,6 +272,7 @@ END MODULE MODI_RAIN_ICE_RED ! P. Wautelet 17/01/2020: move Quicksort to tools.f90 ! P. Wautelet 02/2020: use the new data structures and subroutines for budgets ! P. Wautelet 25/02/2020: bugfix: add missing budget: WETH_BU_RRG +!! R. El Khatib 24-Aug-2021 Optimizations !----------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -265,16 +281,14 @@ END MODULE MODI_RAIN_ICE_RED USE PARKIND1, ONLY : JPRB USE YOMHOOK , ONLY : LHOOK, DR_HOOK -use modd_budget, only: lbu_enable, & - lbudget_th, lbudget_rv, lbudget_rc, lbudget_rr, lbudget_ri, lbudget_rs, lbudget_rg, lbudget_rh, & - NBUDGET_TH, NBUDGET_RV, NBUDGET_RC, NBUDGET_RR, NBUDGET_RI, NBUDGET_RS, NBUDGET_RG, NBUDGET_RH, & - tbudgets +USE MODD_BUDGET, ONLY: TBUDGETDATA, LBU_ENABLE, & + & LBUDGET_TH, LBUDGET_RV, LBUDGET_RC, LBUDGET_RR, LBUDGET_RI, LBUDGET_RS, LBUDGET_RG, LBUDGET_RH, & + & NBUDGET_TH, NBUDGET_RV, NBUDGET_RC, NBUDGET_RR, NBUDGET_RI, NBUDGET_RS, NBUDGET_RG, NBUDGET_RH USE MODD_CST, ONLY: XCI, XCL, XCPD, XCPV, XLSTT, XLVTT, XTT, XRHOLW -USE MODD_PARAMETERS, ONLY: JPVEXT, XUNDEF +USE MODD_PARAMETERS, ONLY: JPVEXT USE MODD_PARAM_ICE, ONLY: CSUBG_PR_PDF, CSUBG_RC_RR_ACCR, CSUBG_RR_EVAP, LDEPOSC, LFEEDBACKT, LSEDIM_AFTER, & & NMAXITER, XMRSTEP, XTSTEP_TS, XVDEPOSC USE MODD_RAIN_ICE_DESCR, ONLY: XRTMIN -USE MODD_VAR_ll, ONLY: IP USE MODD_FIELDS_ADDRESS, ONLY : & ! common fields adress & ITH, & ! Potential temperature & IRV, & ! Water vapor @@ -284,27 +298,29 @@ USE MODD_FIELDS_ADDRESS, ONLY : & ! common fields adress & IRS, & ! Snow/aggregate & IRG, & ! Graupel & IRH ! Hail -use mode_budget, only: Budget_store_add, Budget_store_init, Budget_store_end + +USE MODE_BUDGET, ONLY: BUDGET_STORE_ADD, BUDGET_STORE_INIT, BUDGET_STORE_END USE MODE_ll -USE MODE_MSG -use mode_tools, only: Countjv +USE MODE_MSG, ONLY: PRINT_MSG, NVERB_FATAL -USE MODI_ICE4_RAINFR_VERT +USE MODE_ICE4_RAINFR_VERT, ONLY: ICE4_RAINFR_VERT USE MODE_ICE4_SEDIMENTATION_STAT, ONLY: ICE4_SEDIMENTATION_STAT USE MODE_ICE4_SEDIMENTATION_SPLIT, ONLY: ICE4_SEDIMENTATION_SPLIT USE MODE_ICE4_SEDIMENTATION_SPLIT_MOMENTUM, ONLY: ICE4_SEDIMENTATION_SPLIT_MOMENTUM USE MODE_ICE4_NUCLEATION_WRAPPER, ONLY: ICE4_NUCLEATION_WRAPPER USE MODE_ICE4_TENDENCIES, ONLY: ICE4_TENDENCIES - +! IMPLICIT NONE ! !* 0.1 Declarations of dummy arguments : ! ! ! +INTEGER, INTENT(IN) :: KPROMA ! cache-blocking factor for microphysic loop INTEGER, INTENT(IN) :: KIT, KJT, KKT ! arrays size INTEGER, INTENT(IN) :: KSIZE LOGICAL, INTENT(IN) :: OSEDIC ! Switch for droplet sedim. +LOGICAL :: OCND2 ! Logical switch to separate liquid and ice CHARACTER(LEN=4), INTENT(IN) :: HSEDIM ! Sedimentation scheme CHARACTER(LEN=4), INTENT(IN) :: HSUBG_AUCV_RC ! Kind of Subgrid autoconversion method CHARACTER(LEN=80), INTENT(IN) :: HSUBG_AUCV_RI ! Kind of Subgrid autoconversion method @@ -347,15 +363,14 @@ REAL, DIMENSION(KIT,KJT,KKT), INTENT(INOUT) :: PRIS ! Pristine ice m.r. sou REAL, DIMENSION(KIT,KJT,KKT), INTENT(INOUT) :: PRSS ! Snow/aggregate m.r. source REAL, DIMENSION(KIT,KJT,KKT), INTENT(INOUT) :: PRGS ! Graupel m.r. source ! -REAL, DIMENSION(:,:), INTENT(OUT) :: PINPRC! Cloud instant precip +REAL, DIMENSION(KIT,KJT), INTENT(OUT) :: PINPRC! Cloud instant precip REAL, DIMENSION(KIT,KJT), INTENT(OUT) :: PINPRR! Rain instant precip -REAL, DIMENSION(KIT,KJT,KKT),INTENT(OUT) :: PINPRR3D! Rain inst precip 3D REAL, DIMENSION(KIT,KJT,KKT), INTENT(OUT) :: PEVAP3D! Rain evap profile REAL, DIMENSION(KIT,KJT), INTENT(OUT) :: PINPRS! Snow instant precip REAL, DIMENSION(KIT,KJT), INTENT(OUT) :: PINPRG! Graupel instant precip -REAL, DIMENSION(:,:), INTENT(OUT) :: PINDEP ! Cloud instant deposition -REAL, DIMENSION(KIT,KJT,KKT), INTENT(OUT) :: PRAINFR -REAL, DIMENSION(:,:,:), INTENT(IN) :: PSIGS ! Sigma_s at t +REAL, DIMENSION(KIT,KJT), INTENT(OUT) :: PINDEP ! Cloud instant deposition +REAL, DIMENSION(KIT,KJT,KKT), INTENT(OUT) :: PRAINFR !Precipitation fraction +REAL, DIMENSION(KIT,KJT,KKT), INTENT(IN) :: PSIGS ! Sigma_s at t REAL, DIMENSION(KIT,KJT), OPTIONAL, INTENT(IN) :: PSEA ! Sea Mask REAL, DIMENSION(KIT,KJT), OPTIONAL, INTENT(IN) :: PTOWN! Fraction that is town REAL, DIMENSION(KIT,KJT,KKT), OPTIONAL, INTENT(IN) :: PRHT ! Hail m.r. at t @@ -363,8 +378,14 @@ REAL, DIMENSION(KIT,KJT,KKT), OPTIONAL, INTENT(INOUT) :: PRHS ! Hail m.r. so REAL, DIMENSION(KIT,KJT), OPTIONAL, INTENT(OUT) :: PINPRH! Hail instant precip REAL, DIMENSION(KIT,KJT,KKT,KRR), OPTIONAL, INTENT(OUT) :: PFPR ! upper-air precipitation fluxes ! +TYPE(TBUDGETDATA), DIMENSION(KBUDGETS), INTENT(INOUT) :: TBUDGETS +INTEGER, INTENT(IN) :: KBUDGETS +! !* 0.2 Declarations of local variables : ! +REAL(KIND=JPRB) :: ZHOOK_HANDLE +INTEGER :: IIU +INTEGER :: IJU INTEGER :: IIB ! Define the domain where is INTEGER :: IIE ! the microphysical sources have to be computed INTEGER :: IJB ! @@ -373,44 +394,76 @@ INTEGER :: IKB, IKTB ! INTEGER :: IKE, IKTE ! ! INTEGER :: JI, JJ, JK -! -!For packing -INTEGER :: IMICRO ! Case r_x>0 locations -INTEGER, DIMENSION(KSIZE) :: I1,I2,I3 ! Used to replace the COUNT -INTEGER :: JL ! and PACK intrinsics +INTEGER :: ISTI, ISTJ, ISTK ! !Arrays for nucleation call outisde of ODMICRO points REAL, DIMENSION(KIT, KJT, KKT) :: ZW ! work array REAL, DIMENSION(KIT, KJT, KKT) :: ZT ! Temperature -REAL, DIMENSION(KIT, KJT, KKT) :: & - & ZZ_RVHENI_MR, & ! heterogeneous nucleation mixing ratio change - & ZZ_RVHENI ! heterogeneous nucleation -real, dimension(:,:,:), allocatable :: zw1, zw2, zw3, zw4, zw5, zw6 !Work arrays -real, dimension(:,:,:), allocatable :: zz_diff -REAL, DIMENSION(KIT, KJT, KKT) :: ZZ_LVFACT, ZZ_LSFACT -! +REAL, DIMENSION(KIT, KJT, KKT) :: ZZ_RVHENI_MR, & ! heterogeneous nucleation mixing ratio change + & ZZ_RVHENI ! heterogeneous nucleation +REAL, DIMENSION(MERGE(KIT, 0, LBU_ENABLE), & + &MERGE(KJT, 0, LBU_ENABLE), & + &MERGE(KKT, 0, LBU_ENABLE)) :: ZW1, ZW2, ZW3, ZW4, ZW5, ZW6 !Work arrays +REAL, DIMENSION(KIT, KJT, KKT) :: ZZ_LVFACT, ZZ_LSFACT, ZZ_DIFF +! +REAL, DIMENSION(KIT,KJT,KKT) :: ZRCT ! Cloud water m.r. source at t +REAL, DIMENSION(KIT,KJT,KKT) :: ZRRT ! Rain water m.r. source at t +REAL, DIMENSION(KIT,KJT,KKT) :: ZRIT ! Pristine ice m.r. source at t +REAL, DIMENSION(KIT,KJT,KKT) :: ZRST ! Snow/aggregate m.r. source at t +REAL, DIMENSION(KIT,KJT,KKT) :: ZRGT ! Graupel m.r. source at t +REAL, DIMENSION(KIT,KJT,KKT) :: ZRHT ! Hail m.r. source at t +REAL, DIMENSION(KIT,KJT,KKT) :: ZCITOUT ! Output value for CIT + !Diagnostics -REAL, DIMENSION(KIT, KJT, KKT) :: & - & ZHLC_HCF3D,& ! HLCLOUDS cloud fraction in high water content part - & ZHLC_LCF3D,& ! HLCLOUDS cloud fraction in low water content part - & ZHLC_HRC3D,& ! HLCLOUDS cloud water content in high water content - & ZHLC_LRC3D,& ! HLCLOUDS cloud water content in low water content - & ZHLI_HCF3D,& ! HLCLOUDS cloud fraction in high ice content part - & ZHLI_LCF3D,& ! HLCLOUDS cloud fraction in low ice content part - & ZHLI_HRI3D,& ! HLCLOUDS cloud water content in high ice content - & ZHLI_LRI3D ! HLCLOUDS cloud water content in high ice content REAL, DIMENSION(SIZE(PTHT,1),SIZE(PTHT,2)) :: ZINPRI ! Pristine ice instant precip ! -!Packed variables -REAL, DIMENSION(KSIZE) :: ZRVT, & ! Water vapor m.r. at t - & ZRCT, & ! Cloud water m.r. at t - & ZRRT, & ! Rain water m.r. at t - & ZRIT, & ! Pristine ice m.r. at t - & ZRST, & ! Snow/aggregate m.r. at t - & ZRGT, & ! Graupel m.r. at t - & ZRHT, & ! Hail m.r. at t +LOGICAL :: GEXT_TEND +LOGICAL :: LSOFT ! Must we really compute tendencies or only adjust them to new T variables +INTEGER :: INB_ITER_MAX ! Maximum number of iterations (with real tendencies computation) +REAL :: ZW1D +REAL :: ZTSTEP ! length of sub-timestep in case of time splitting +REAL :: ZINV_TSTEP ! Inverse ov PTSTEP +REAL :: ZTIME_THRESHOLD ! Time to reach threshold +!For total tendencies computation +REAL, DIMENSION(SIZE(PTHT,1),SIZE(PTHT,2),SIZE(PTHT,3),0:7) :: ZWR +! +!Output packed total mixing ratio change (for budgets only) +REAL, DIMENSION(KSIZE) :: ZTOT_RVHENI, & ! heterogeneous nucleation mixing ratio change + & ZTOT_RCHONI, & ! Homogeneous nucleation + & ZTOT_RRHONG, & ! Spontaneous freezing mixing ratio change + & ZTOT_RVDEPS, & ! Deposition on r_s, + & ZTOT_RIAGGS, & ! Aggregation on r_s + & ZTOT_RIAUTS, & ! Autoconversion of r_i for r_s production + & ZTOT_RVDEPG, & ! Deposition on r_g + & ZTOT_RCAUTR, & ! Autoconversion of r_c for r_r production + & ZTOT_RCACCR, & ! Accretion of r_c for r_r production + & ZTOT_RREVAV, & ! Evaporation of r_r + & ZTOT_RCRIMSS, ZTOT_RCRIMSG, ZTOT_RSRIMCG, & ! Cloud droplet riming of the aggregates + & ZTOT_RIMLTC, & ! Cloud ice melting mixing ratio change + & ZTOT_RCBERI, & ! Bergeron-Findeisen effect + & ZTOT_RHMLTR, & ! Melting of the hailstones + & ZTOT_RSMLTG, & ! Conversion-Melting of the aggregates + & ZTOT_RCMLTSR, & ! Cloud droplet collection onto aggregates by positive temperature + & ZTOT_RRACCSS, ZTOT_RRACCSG, ZTOT_RSACCRG, & ! Rain accretion onto the aggregates + & ZTOT_RICFRRG, ZTOT_RRCFRIG, ZTOT_RICFRR, & ! Rain contact freezing + & ZTOT_RCWETG, ZTOT_RIWETG, ZTOT_RRWETG, ZTOT_RSWETG, & ! Graupel wet growth + & ZTOT_RCDRYG, ZTOT_RIDRYG, ZTOT_RRDRYG, ZTOT_RSDRYG, & ! Graupel dry growth + & ZTOT_RWETGH, & ! Conversion of graupel into hail + & ZTOT_RGMLTR, & ! Melting of the graupel + & ZTOT_RCWETH, ZTOT_RIWETH, ZTOT_RSWETH, ZTOT_RGWETH, ZTOT_RRWETH, & ! Dry growth of hailstone + & ZTOT_RCDRYH, ZTOT_RIDRYH, ZTOT_RSDRYH, ZTOT_RRDRYH, ZTOT_RGDRYH, & ! Wet growth of hailstone + & ZTOT_RDRYHG ! Conversion of hailstone into graupel +! +!For packing +INTEGER :: IMICRO ! Case r_x>0 locations +INTEGER :: JL, JV +REAL, DIMENSION(KPROMA) :: ZTIME ! Current integration time (starts with 0 and ends with PTSTEP) +REAL, DIMENSION(KPROMA) :: & + & ZMAXTIME, & ! Time on which we can apply the current tendencies + & ZTIME_LASTCALL, & ! Integration time when last tendecies call has been done + & ZCOMPUTE, & ! 1. for points where we must compute tendencies, 0. elsewhere + & ZSSI, & & ZCIT, & ! Pristine ice conc. at t - & ZTHT, & ! Potential temperature & ZRHODREF, & ! RHO Dry REFerence & ZZT, & ! Temperature & ZPRES, & ! Pressure @@ -428,11 +481,10 @@ REAL, DIMENSION(KSIZE) :: ZRVT, & ! Water vapor m.r. at t & ZHLI_HCF, & & ZHLI_LCF, & & ZHLI_HRI, & - & ZHLI_LRI, & - & ZFRAC + & ZHLI_LRI ! !Output packed tendencies (for budgets only) -REAL, DIMENSION(KSIZE) :: ZRVHENI_MR, & ! heterogeneous nucleation mixing ratio change +REAL, DIMENSION(KPROMA) :: ZRVHENI_MR, & ! heterogeneous nucleation mixing ratio change & ZRCHONI, & ! Homogeneous nucleation & ZRRHONG_MR, & ! Spontaneous freezing mixing ratio change & ZRVDEPS, & ! Deposition on r_s, @@ -459,101 +511,56 @@ REAL, DIMENSION(KSIZE) :: ZRVHENI_MR, & ! heterogeneous nucleation mixing ratio & ZRCDRYH, ZRIDRYH, ZRSDRYH, ZRRDRYH, ZRGDRYH, & ! Wet growth of hailstone & ZRDRYHG ! Conversion of hailstone into graupel ! -!Output packed total mixing ratio change (for budgets only) -REAL, DIMENSION(KSIZE) :: ZTOT_RVHENI, & ! heterogeneous nucleation mixing ratio change - & ZTOT_RCHONI, & ! Homogeneous nucleation - & ZTOT_RRHONG, & ! Spontaneous freezing mixing ratio change - & ZTOT_RVDEPS, & ! Deposition on r_s, - & ZTOT_RIAGGS, & ! Aggregation on r_s - & ZTOT_RIAUTS, & ! Autoconversion of r_i for r_s production - & ZTOT_RVDEPG, & ! Deposition on r_g - & ZTOT_RCAUTR, & ! Autoconversion of r_c for r_r production - & ZTOT_RCACCR, & ! Accretion of r_c for r_r production - & ZTOT_RREVAV, & ! Evaporation of r_r - & ZTOT_RCRIMSS, ZTOT_RCRIMSG, ZTOT_RSRIMCG, & ! Cloud droplet riming of the aggregates - & ZTOT_RIMLTC, & ! Cloud ice melting mixing ratio change - & ZTOT_RCBERI, & ! Bergeron-Findeisen effect - & ZTOT_RHMLTR, & ! Melting of the hailstones - & ZTOT_RSMLTG, & ! Conversion-Melting of the aggregates - & ZTOT_RCMLTSR, & ! Cloud droplet collection onto aggregates by positive temperature - & ZTOT_RRACCSS, ZTOT_RRACCSG, ZTOT_RSACCRG, & ! Rain accretion onto the aggregates - & ZTOT_RICFRRG, ZTOT_RRCFRIG, ZTOT_RICFRR, & ! Rain contact freezing - & ZTOT_RCWETG, ZTOT_RIWETG, ZTOT_RRWETG, ZTOT_RSWETG, & ! Graupel wet growth - & ZTOT_RCDRYG, ZTOT_RIDRYG, ZTOT_RRDRYG, ZTOT_RSDRYG, & ! Graupel dry growth - & ZTOT_RWETGH, & ! Conversion of graupel into hail - & ZTOT_RGMLTR, & ! Melting of the graupel - & ZTOT_RCWETH, ZTOT_RIWETH, ZTOT_RSWETH, ZTOT_RGWETH, ZTOT_RRWETH, & ! Dry growth of hailstone - & ZTOT_RCDRYH, ZTOT_RIDRYH, ZTOT_RSDRYH, ZTOT_RRDRYH, ZTOT_RGDRYH, & ! Wet growth of hailstone - & ZTOT_RDRYHG ! Conversion of hailstone into graupel +!For mixing-ratio-splitting +LOGICAL :: LLCPZ0RT +REAL, DIMENSION(KPROMA, KRR) :: Z0RT ! Mixing-ratios at the beginig of the current loop ! -!For time- or mixing-ratio- splitting -REAL, DIMENSION(KSIZE) :: Z0RVT, & ! Water vapor m.r. at the beginig of the current loop - & Z0RCT, & ! Cloud water m.r. at the beginig of the current loop - & Z0RRT, & ! Rain water m.r. at the beginig of the current loop - & Z0RIT, & ! Pristine ice m.r. at the beginig of the current loop - & Z0RST, & ! Snow/aggregate m.r. at the beginig of the current loop - & Z0RGT, & ! Graupel m.r. at the beginig of the current loop - & Z0RHT ! Hail m.r. at the beginig of the current loop - - - - - -!en attendant phasage on utilise KSIZE à la place de KPROMA -REAL, DIMENSION(KSIZE,0:7) :: & +REAL, DIMENSION(KPROMA,0:7) :: & & ZVART, & !Packed variables + & ZEXTPK, & !To take into acount external tendencies inside the splitting & ZA, ZB +! +REAL, DIMENSION(KPROMA, 8) :: ZRS_TEND, ZRG_TEND +REAL, DIMENSION(KPROMA,10) :: ZRH_TEND - - - - - +INTEGER, DIMENSION(KPROMA) :: & + & I1,I2,I3, & ! Used to replace the COUNT and PACK intrinsics on variables + & IITER ! Number of iterations done (with real tendencies computation) +INTEGER, DIMENSION(KSIZE) :: I1TOT, I2TOT, I3TOT ! Used to replace the COUNT and PACK intrinsics ! -!To take into acount external tendencies inside the splitting -REAL, DIMENSION(KSIZE) :: ZEXT_RV, & ! External tendencie for rv - & ZEXT_RC, & ! External tendencie for rc - & ZEXT_RR, & ! External tendencie for rr - & ZEXT_RI, & ! External tendencie for ri - & ZEXT_RS, & ! External tendencie for rs - & ZEXT_RG, & ! External tendencie for rg - & ZEXT_RH, & ! External tendencie for rh - & ZEXT_TH, & ! External tendencie for th - & ZEXT_WW ! Working array -LOGICAL :: GEXT_TEND +REAL, DIMENSION(KPROMA) :: ZSUM2, ZMAXB +REAL :: ZDEVIDE, ZX, ZRICE ! -INTEGER, DIMENSION(KSIZE) :: IITER ! Number of iterations done (with real tendencies computation) -INTEGER :: INB_ITER_MAX ! Maximum number of iterations (with real tendencies computation) -REAL, DIMENSION(KSIZE) :: ZTIME, & ! Current integration time (starts with 0 and ends with PTSTEP) - & ZMAXTIME, & ! Time on which we can apply the current tendencies - & ZTIME_THRESHOLD, & ! Time to reach threshold - & ZTIME_LASTCALL ! Integration time when last tendecies call has been done -REAL, DIMENSION(KSIZE) :: ZW1D -REAL, DIMENSION(KSIZE) :: ZCOMPUTE ! 1. for points where we must compute tendencies, 0. elsewhere -LOGICAL :: LSOFT ! Must we really compute tendencies or only adjust them to new T variables -LOGICAL, DIMENSION(SIZE(PRHODREF,1),SIZE(PRHODREF,2)):: GDEP -REAL :: ZTSTEP ! length of sub-timestep in case of time splitting -REAL :: ZINV_TSTEP ! Inverse ov PTSTEP -REAL, DIMENSION(KSIZE, 8) :: ZRS_TEND -REAL, DIMENSION(KSIZE, 8) :: ZRG_TEND -REAL, DIMENSION(KSIZE, 10) :: ZRH_TEND -REAL, DIMENSION(KSIZE) :: ZSSI -! -!For total tendencies computation -REAL, DIMENSION(SIZE(PTHT,1),SIZE(PTHT,2),SIZE(PTHT,3)) :: & - &ZW_RVS, ZW_RCS, ZW_RRS, ZW_RIS, ZW_RSS, ZW_RGS, ZW_RHS, ZW_THS +INTEGER :: IC, JMICRO +LOGICAL :: LLSIGMA_RC, LL_ANY_ITER, LL_AUCV_ADJU + ! !------------------------------------------------------------------------------- -if ( lbu_enable ) then - if ( lbudget_th ) call Budget_store_init( tbudgets(NBUDGET_TH), 'HENU', pths(:, :, :) * prhodj(:, :, :) ) - if ( lbudget_rv ) call Budget_store_init( tbudgets(NBUDGET_RV), 'HENU', prvs(:, :, :) * prhodj(:, :, :) ) -end if +IF (LHOOK) CALL DR_HOOK('RAIN_ICE', 0, ZHOOK_HANDLE) +! !------------------------------------------------------------------------------- ! +IF(OCND2) THEN + CALL PRINT_MSG(NVERB_FATAL, 'GEN', 'RAIN_ICE', 'OCND2 OPTION NOT CODED IN THIS RAIN_ICE VERSION') +END IF +IF(KPROMA /= KSIZE) THEN + CALL PRINT_MSG(NVERB_FATAL, 'GEN', 'RAIN_ICE', 'For now, KPROMA must be equal to KSIZE, see code for explanation') + ! 2 issues + ! * Microphyscs was optimized by introducing chunks of KPROMA size + ! Thus, in ice4_tendencies, the 1D array represent only a fraction of the points where microphisical species are present + ! We cannot rebuild the entire 3D arrays in the subroutine, so we cannot call ice4_rainfr_vert in it + ! A solution would be to suppress optimisation in this case by setting KPROMA=KSIZE in rain_ice + ! Another solution would be to compute column by column? + ! Another one would be to cut tendencies in 3 parts: before rainfr_vert, rainfr_vert, after rainfr_vert + ! * When chuncks are used, result is different +ENDIF +! !* 1. COMPUTE THE LOOP BOUNDS ! ----------------------- ! -CALL GET_INDICE_ll (IIB,IJB,IIE,IJE) +IIU=SIZE(PDZZ,1) +IJU=SIZE(PDZZ,2) +CALL GET_INDICE_ll(IIB,IJB,IIE,IJE,IIU,IJU) IKB=KKA+JPVEXT*KKL IKE=KKU-JPVEXT*KKL IKTB=1+JPVEXT @@ -563,35 +570,21 @@ ZINV_TSTEP=1./PTSTEP GEXT_TEND=.TRUE. ! ! LSFACT and LVFACT without exner -IF(KRR==7) THEN - DO JK = 1, KKT - DO JJ = 1, KJT - DO JI = 1, KIT - ZT(JI,JJ,JK) = PTHT(JI,JJ,JK) * PEXN(JI,JJ,JK) - ZZ_LSFACT(JI,JJ,JK)=(XLSTT+(XCPV-XCI)*(ZT(JI,JJ,JK)-XTT)) & - /( XCPD + XCPV*PRVT(JI,JJ,JK) + XCL*(PRCT(JI,JJ,JK)+PRRT(JI,JJ,JK)) & - + XCI*(PRIT(JI,JJ,JK)+PRST(JI,JJ,JK)+PRGT(JI,JJ,JK)+PRHT(JI,JJ,JK))) - ZZ_LVFACT(JI,JJ,JK)=(XLVTT+(XCPV-XCL)*(ZT(JI,JJ,JK)-XTT)) & - /( XCPD + XCPV*PRVT(JI,JJ,JK) + XCL*(PRCT(JI,JJ,JK)+PRRT(JI,JJ,JK)) & - + XCI*(PRIT(JI,JJ,JK)+PRST(JI,JJ,JK)+PRGT(JI,JJ,JK)+PRHT(JI,JJ,JK))) - ENDDO - ENDDO - ENDDO -ELSE - DO JK = 1, KKT - DO JJ = 1, KJT - DO JI = 1, KIT - ZT(JI,JJ,JK) = PTHT(JI,JJ,JK) * PEXN(JI,JJ,JK) - ZZ_LSFACT(JI,JJ,JK)=(XLSTT+(XCPV-XCI)*(ZT(JI,JJ,JK)-XTT)) & - /( XCPD + XCPV*PRVT(JI,JJ,JK) + XCL*(PRCT(JI,JJ,JK)+PRRT(JI,JJ,JK)) & - + XCI*(PRIT(JI,JJ,JK)+PRST(JI,JJ,JK)+PRGT(JI,JJ,JK))) - ZZ_LVFACT(JI,JJ,JK)=(XLVTT+(XCPV-XCL)*(ZT(JI,JJ,JK)-XTT)) & - /( XCPD + XCPV*PRVT(JI,JJ,JK) + XCL*(PRCT(JI,JJ,JK)+PRRT(JI,JJ,JK)) & - + XCI*(PRIT(JI,JJ,JK)+PRST(JI,JJ,JK)+PRGT(JI,JJ,JK))) - ENDDO +DO JK = 1, KKT + DO JJ = 1, KJT + DO JI = 1, KIT + IF (KRR==7) THEN + ZRICE=PRIT(JI,JJ,JK)+PRST(JI,JJ,JK)+PRGT(JI,JJ,JK)+PRHT(JI,JJ,JK) + ELSE + ZRICE=PRIT(JI,JJ,JK)+PRST(JI,JJ,JK)+PRGT(JI,JJ,JK) + ENDIF + ZDEVIDE = XCPD + XCPV*PRVT(JI,JJ,JK) + XCL*(PRCT(JI,JJ,JK)+PRRT(JI,JJ,JK)) + XCI*ZRICE + ZT(JI,JJ,JK) = PTHT(JI,JJ,JK) * PEXN(JI,JJ,JK) + ZZ_LSFACT(JI,JJ,JK)=(XLSTT+(XCPV-XCI)*(ZT(JI,JJ,JK)-XTT)) / ZDEVIDE + ZZ_LVFACT(JI,JJ,JK)=(XLVTT+(XCPV-XCL)*(ZT(JI,JJ,JK)-XTT)) / ZDEVIDE ENDDO ENDDO -ENDIF +ENDDO ! !------------------------------------------------------------------------------- ! @@ -602,58 +595,73 @@ IF(.NOT. LSEDIM_AFTER) THEN ! !* 2.1 sedimentation ! - if ( lbudget_rc .and. osedic ) call Budget_store_init( tbudgets(NBUDGET_RC), 'SEDI', prcs(:, :, :) * prhodj(:, :, :) ) - if ( lbudget_rr ) call Budget_store_init( tbudgets(NBUDGET_RR), 'SEDI', prrs(:, :, :) * prhodj(:, :, :) ) - if ( lbudget_ri ) call Budget_store_init( tbudgets(NBUDGET_RI), 'SEDI', pris(:, :, :) * prhodj(:, :, :) ) - if ( lbudget_rs ) call Budget_store_init( tbudgets(NBUDGET_RS), 'SEDI', prss(:, :, :) * prhodj(:, :, :) ) - if ( lbudget_rg ) call Budget_store_init( tbudgets(NBUDGET_RG), 'SEDI', prgs(:, :, :) * prhodj(:, :, :) ) - if ( lbudget_rh ) call Budget_store_init( tbudgets(NBUDGET_RH), 'SEDI', prhs(:, :, :) * prhodj(:, :, :) ) - - !Init only if not osedic (to prevent crash with double init) - !Remark: the 2 source terms SEDI and DEPO could be mixed and stored in the same source term (SEDI) - ! if osedic=T and ldeposc=T (a warning is printed in ini_budget in that case) - if ( lbudget_rc .and. ldeposc .and. .not.osedic ) & - call Budget_store_init( tbudgets(NBUDGET_RC), 'DEPO', prcs(:, :, :) * prhodj(:, :, :) ) + IF (LBUDGET_RC .AND. OSEDIC) CALL BUDGET_STORE_INIT(TBUDGETS(NBUDGET_RC), 'SEDI', PRCS(:, :, :) * PRHODJ(:, :, :)) + IF (LBUDGET_RR) CALL BUDGET_STORE_INIT(TBUDGETS(NBUDGET_RR), 'SEDI', PRRS(:, :, :) * PRHODJ(:, :, :)) + IF (LBUDGET_RI) CALL BUDGET_STORE_INIT(TBUDGETS(NBUDGET_RI), 'SEDI', PRIS(:, :, :) * PRHODJ(:, :, :)) + IF (LBUDGET_RS) CALL BUDGET_STORE_INIT(TBUDGETS(NBUDGET_RS), 'SEDI', PRSS(:, :, :) * PRHODJ(:, :, :)) + IF (LBUDGET_RG) CALL BUDGET_STORE_INIT(TBUDGETS(NBUDGET_RG), 'SEDI', PRGS(:, :, :) * PRHODJ(:, :, :)) + IF (LBUDGET_RH .AND. KRR==7) CALL BUDGET_STORE_INIT(TBUDGETS(NBUDGET_RH), 'SEDI', PRHS(:, :, :) * PRHODJ(:, :, :)) IF(HSEDIM=='STAT') THEN - !SR: It *seems* that we must have two separate calls for ifort IF(KRR==7) THEN + DO JK = 1, KKT + DO JJ = 1, KJT + DO JI = 1, KIT + ZRCT(JI,JJ,JK)=PRCS(JI,JJ,JK)*PTSTEP + ZRRT(JI,JJ,JK)=PRRS(JI,JJ,JK)*PTSTEP + ZRIT(JI,JJ,JK)=PRIS(JI,JJ,JK)*PTSTEP + ZRST(JI,JJ,JK)=PRSS(JI,JJ,JK)*PTSTEP + ZRGT(JI,JJ,JK)=PRGS(JI,JJ,JK)*PTSTEP + ZRHT(JI,JJ,JK)=PRHS(JI,JJ,JK)*PTSTEP + ENDDO + ENDDO + ENDDO CALL ICE4_SEDIMENTATION_STAT(IIB, IIE, KIT, IJB, IJE, KJT, IKB, IKE, IKTB, IKTE, KKT, KKL, & - &PTSTEP, KRR, OSEDIC, LDEPOSC, XVDEPOSC, PDZZ, & + &PTSTEP, KRR, OSEDIC, PDZZ, & &PRHODREF, PPABST, PTHT, PRHODJ, & - &PRCS, PRCS*PTSTEP, PRRS, PRRS*PTSTEP, PRIS, PRIS*PTSTEP,& - &PRSS, PRSS*PTSTEP, PRGS, PRGS*PTSTEP,& - &PINPRC, PINDEP, PINPRR, ZINPRI, PINPRS, PINPRG, & + &PRCS, ZRCT, PRRS, ZRRT, PRIS, ZRIT,& + &PRSS, ZRST, PRGS, ZRGT,& + &PINPRC, PINPRR, ZINPRI, PINPRS, PINPRG, & &PSEA=PSEA, PTOWN=PTOWN, & - &PINPRH=PINPRH, PRHT=PRHS*PTSTEP, PRHS=PRHS, PFPR=PFPR) + &PINPRH=PINPRH, PRHT=ZRHT, PRHS=PRHS, PFPR=PFPR) ELSE + DO JK = 1, KKT + DO JJ = 1, KJT + DO JI = 1, KIT + ZRCT(JI,JJ,JK)=PRCS(JI,JJ,JK)*PTSTEP + ZRRT(JI,JJ,JK)=PRRS(JI,JJ,JK)*PTSTEP + ZRIT(JI,JJ,JK)=PRIS(JI,JJ,JK)*PTSTEP + ZRST(JI,JJ,JK)=PRSS(JI,JJ,JK)*PTSTEP + ZRGT(JI,JJ,JK)=PRGS(JI,JJ,JK)*PTSTEP + ENDDO + ENDDO + ENDDO CALL ICE4_SEDIMENTATION_STAT(IIB, IIE, KIT, IJB, IJE, KJT, IKB, IKE, IKTB, IKTE, KKT, KKL, & - &PTSTEP, KRR, OSEDIC, LDEPOSC, XVDEPOSC, PDZZ, & + &PTSTEP, KRR, OSEDIC, PDZZ, & &PRHODREF, PPABST, PTHT, PRHODJ, & - &PRCS, PRCS*PTSTEP, PRRS, PRRS*PTSTEP, PRIS, PRIS*PTSTEP,& - &PRSS, PRSS*PTSTEP, PRGS, PRGS*PTSTEP,& - &PINPRC, PINDEP, PINPRR, ZINPRI, PINPRS, PINPRG, & + &PRCS, ZRCT, PRRS, ZRRT, PRIS, ZRIT,& + &PRSS, ZRST, PRGS, ZRGT,& + &PINPRC, PINPRR, ZINPRI, PINPRS, PINPRG, & &PSEA=PSEA, PTOWN=PTOWN, & &PFPR=PFPR) ENDIF PINPRS(:,:) = PINPRS(:,:) + ZINPRI(:,:) !No negativity correction here as we apply sedimentation on PR.S*PTSTEP variables ELSEIF(HSEDIM=='SPLI') THEN - !SR: It *seems* that we must have two separate calls for ifort IF(KRR==7) THEN CALL ICE4_SEDIMENTATION_SPLIT(IIB, IIE, KIT, IJB, IJE, KJT, IKB, IKE, IKTB, IKTE, KKT, KKL, & - &PTSTEP, KRR, OSEDIC, LDEPOSC, XVDEPOSC, PDZZ, & + &PTSTEP, KRR, OSEDIC, PDZZ, & &PRHODREF, PPABST, PTHT, PRHODJ, & &PRCS, PRCT, PRRS, PRRT, PRIS, PRIT, PRSS, PRST, PRGS, PRGT,& - &PINPRC, PINDEP, PINPRR, ZINPRI, PINPRS, PINPRG, & + &PINPRC, PINPRR, ZINPRI, PINPRS, PINPRG, & &PSEA=PSEA, PTOWN=PTOWN, & &PINPRH=PINPRH, PRHT=PRHT, PRHS=PRHS, PFPR=PFPR) ELSE CALL ICE4_SEDIMENTATION_SPLIT(IIB, IIE, KIT, IJB, IJE, KJT, IKB, IKE, IKTB, IKTE, KKT, KKL, & - &PTSTEP, KRR, OSEDIC, LDEPOSC, XVDEPOSC, PDZZ, & + &PTSTEP, KRR, OSEDIC, PDZZ, & &PRHODREF, PPABST, PTHT, PRHODJ, & &PRCS, PRCT, PRRS, PRRT, PRIS, PRIT, PRSS, PRST, PRGS, PRGT,& - &PINPRC, PINDEP, PINPRR, ZINPRI, PINPRS, PINPRG, & + &PINPRC, PINPRR, ZINPRI, PINPRS, PINPRG, & &PSEA=PSEA, PTOWN=PTOWN, & &PFPR=PFPR) ENDIF @@ -663,235 +671,323 @@ IF(.NOT. LSEDIM_AFTER) THEN ! It is initialized with the m.r. at T and is modified by two tendencies: ! sedimentation tendency and an external tendency which represents all other ! processes (mainly advection and microphysical processes). If both tendencies - ! are negative, sedimentation can remove a specie at a given sub-timestep. From + ! are negative, sedimentation can remove a species at a given sub-timestep. From ! this point sedimentation stops for the remaining sub-timesteps but the other tendency ! will be still active and will lead to negative values. - ! We could prevent the algorithm to not consume too much a specie, instead we apply + ! We could prevent the algorithm to not consume too much a species, instead we apply ! a correction here. CALL CORRECT_NEGATIVITIES(KIT, KJT, KKT, KRR, PRVS, PRCS, PRRS, & &PRIS, PRSS, PRGS, & &PTHS, ZZ_LVFACT, ZZ_LSFACT, PRHS) ELSEIF(HSEDIM=='NONE') THEN ELSE - call Print_msg( NVERB_FATAL, 'GEN', 'RAIN_ICE_RED', 'no sedimentation scheme for HSEDIM='//HSEDIM ) + CALL PRINT_MSG(NVERB_FATAL, 'GEN', 'RAIN_ICE', 'no sedimentation scheme for HSEDIM='//HSEDIM) END IF + + + + + + +!!!!! ajouter momentum + + + + + + + + + + + + + + ! !* 2.2 budget storage ! - if ( lbudget_rc .and. osedic ) call Budget_store_end( tbudgets(NBUDGET_RC), 'SEDI', prcs(:, :, :) * prhodj(:, :, :) ) - if ( lbudget_rr ) call Budget_store_end( tbudgets(NBUDGET_RR), 'SEDI', prrs(:, :, :) * prhodj(:, :, :) ) - if ( lbudget_ri ) call Budget_store_end( tbudgets(NBUDGET_RI), 'SEDI', pris(:, :, :) * prhodj(:, :, :) ) - if ( lbudget_rs ) call Budget_store_end( tbudgets(NBUDGET_RS), 'SEDI', prss(:, :, :) * prhodj(:, :, :) ) - if ( lbudget_rg ) call Budget_store_end( tbudgets(NBUDGET_RG), 'SEDI', prgs(:, :, :) * prhodj(:, :, :) ) - if ( lbudget_rh ) call Budget_store_end( tbudgets(NBUDGET_RH), 'SEDI', prhs(:, :, :) * prhodj(:, :, :) ) - - !If osedic=T and ldeposc=T, DEPO is in fact mixed and stored with the SEDI source term - !(a warning is printed in ini_budget in that case) - if ( lbudget_rc .and. ldeposc .and. .not.osedic) & - call Budget_store_end( tbudgets(NBUDGET_RC), 'DEPO', prcs(:, :, :) * prhodj(:, :, :) ) + IF (LBUDGET_RC .AND. OSEDIC) CALL BUDGET_STORE_END(TBUDGETS(NBUDGET_RC), 'SEDI', PRCS(:, :, :) * PRHODJ(:, :, :)) + IF (LBUDGET_RR) CALL BUDGET_STORE_END(TBUDGETS(NBUDGET_RR), 'SEDI', PRRS(:, :, :) * PRHODJ(:, :, :)) + IF (LBUDGET_RI) CALL BUDGET_STORE_END(TBUDGETS(NBUDGET_RI), 'SEDI', PRIS(:, :, :) * PRHODJ(:, :, :)) + IF (LBUDGET_RS) CALL BUDGET_STORE_END(TBUDGETS(NBUDGET_RS), 'SEDI', PRSS(:, :, :) * PRHODJ(:, :, :)) + IF (LBUDGET_RG) CALL BUDGET_STORE_END(TBUDGETS(NBUDGET_RG), 'SEDI', PRGS(:, :, :) * PRHODJ(:, :, :)) + IF (LBUDGET_RH .AND. KRR==7) CALL BUDGET_STORE_END(TBUDGETS(NBUDGET_RH), 'SEDI', PRHS(:, :, :) * PRHODJ(:, :, :)) ENDIF ! + +DO JK = 1,KKT + !Backup of T variables + ZWR(:,:,JK,IRV)=PRVT(:,:,JK) + ZWR(:,:,JK,IRC)=PRCT(:,:,JK) + ZWR(:,:,JK,IRR)=PRRT(:,:,JK) + ZWR(:,:,JK,IRI)=PRIT(:,:,JK) + ZWR(:,:,JK,IRS)=PRST(:,:,JK) + ZWR(:,:,JK,IRG)=PRGT(:,:,JK) + IF (KRR==7) THEN + ZWR(:,:,JK,IRH)=PRHT(:,:,JK) + ELSE + ZWR(:,:,JK,IRH)=0. + ENDIF + + !Preset for output 3D variables + IF(OWARM) THEN + PEVAP3D(:,:,JK)=0. + ENDIF + PRAINFR(:,:,JK)=0. + ZCITOUT(:,:,JK)=0. +ENDDO + +IF(LBU_ENABLE) THEN + ZTOT_RVHENI(:)=0. + ZTOT_RCHONI(:)=0. + ZTOT_RRHONG(:)=0. + ZTOT_RVDEPS(:)=0. + ZTOT_RIAGGS(:)=0. + ZTOT_RIAUTS(:)=0. + ZTOT_RVDEPG(:)=0. + ZTOT_RCAUTR(:)=0. + ZTOT_RCACCR(:)=0. + ZTOT_RREVAV(:)=0. + ZTOT_RCRIMSS(:)=0. + ZTOT_RCRIMSG(:)=0. + ZTOT_RSRIMCG(:)=0. + ZTOT_RIMLTC(:)=0. + ZTOT_RCBERI(:)=0. + ZTOT_RHMLTR(:)=0. + ZTOT_RSMLTG(:)=0. + ZTOT_RCMLTSR(:)=0. + ZTOT_RRACCSS(:)=0. + ZTOT_RRACCSG(:)=0. + ZTOT_RSACCRG(:)=0. + ZTOT_RICFRRG(:)=0. + ZTOT_RRCFRIG(:)=0. + ZTOT_RICFRR(:)=0. + ZTOT_RCWETG(:)=0. + ZTOT_RIWETG(:)=0. + ZTOT_RRWETG(:)=0. + ZTOT_RSWETG(:)=0. + ZTOT_RCDRYG(:)=0. + ZTOT_RIDRYG(:)=0. + ZTOT_RRDRYG(:)=0. + ZTOT_RSDRYG(:)=0. + ZTOT_RWETGH(:)=0. + ZTOT_RGMLTR(:)=0. + ZTOT_RCWETH(:)=0. + ZTOT_RIWETH(:)=0. + ZTOT_RSWETH(:)=0. + ZTOT_RGWETH(:)=0. + ZTOT_RRWETH(:)=0. + ZTOT_RCDRYH(:)=0. + ZTOT_RIDRYH(:)=0. + ZTOT_RSDRYH(:)=0. + ZTOT_RRDRYH(:)=0. + ZTOT_RGDRYH(:)=0. + ZTOT_RDRYHG(:)=0. +ENDIF + !------------------------------------------------------------------------------- -! -!* 3. PACKING -! -------- ! optimization by looking for locations where ! the microphysical fields are larger than a minimal value only !!! ! -IMICRO=0 -IF(KSIZE/=0) IMICRO=COUNTJV(ODMICRO(:,:,:), I1(:), I2(:), I3(:)) -!Packing -IF(IMICRO>0) THEN - DO JL=1, IMICRO - ZRVT(JL) = PRVT(I1(JL),I2(JL),I3(JL)) - ZRCT(JL) = PRCT(I1(JL),I2(JL),I3(JL)) - ZRRT(JL) = PRRT(I1(JL),I2(JL),I3(JL)) - ZRIT(JL) = PRIT(I1(JL),I2(JL),I3(JL)) - ZRST(JL) = PRST(I1(JL),I2(JL),I3(JL)) - ZRGT(JL) = PRGT(I1(JL),I2(JL),I3(JL)) - ZCIT(JL) = PCIT(I1(JL),I2(JL),I3(JL)) - ZCF(JL) = PCLDFR(I1(JL),I2(JL),I3(JL)) - ZRHODREF(JL) = PRHODREF(I1(JL),I2(JL),I3(JL)) - ZTHT(JL) = PTHT(I1(JL),I2(JL),I3(JL)) - ZPRES(JL) = PPABST(I1(JL),I2(JL),I3(JL)) - ZEXN(JL) = PEXN(I1(JL),I2(JL),I3(JL)) - ZHLC_HCF(JL) = PHLC_HCF(I1(JL),I2(JL),I3(JL)) - ZHLC_HRC(JL) = PHLC_HRC(I1(JL),I2(JL),I3(JL)) - ZHLC_LRC(JL) = ZRCT(JL) - ZHLC_HRC(JL) - ZHLI_HCF(JL) = PHLI_HCF(I1(JL),I2(JL),I3(JL)) - ZHLI_HRI(JL) = PHLI_HRI(I1(JL),I2(JL),I3(JL)) - ZHLI_LRI(JL) = ZRIT(JL) - ZHLI_HRI(JL) - IF(ZRCT(JL)>0.) THEN - ZHLC_LCF(JL) = ZCF(JL)- ZHLC_HCF(JL) - ELSE - ZHLC_LCF(JL)=0. +IF (KSIZE /= COUNT(ODMICRO)) THEN + CALL PRINT_MSG(NVERB_FATAL, 'GEN', 'RAIN_ICE', 'RAIN_ICE : KSIZE /= COUNT(ODMICRO)') +ENDIF + +IF (KSIZE > 0) THEN + + !Maximum number of iterations + !We only count real iterations (those for which we *compute* tendencies) + INB_ITER_MAX=NMAXITER + IF(XTSTEP_TS/=0.)THEN + INB_ITER_MAX=MAX(1, INT(PTSTEP/XTSTEP_TS)) !At least the number of iterations needed for the time-splitting + ZTSTEP=PTSTEP/INB_ITER_MAX + INB_ITER_MAX=MAX(NMAXITER, INB_ITER_MAX) !For the case XMRSTEP/=0. at the same time + ENDIF + +!=============================================================================================================== +! Cache-blocking loop : + + LLSIGMA_RC=(HSUBG_AUCV_RC=='PDF ' .AND. CSUBG_PR_PDF=='SIGM') + LL_AUCV_ADJU=(HSUBG_AUCV_RC=='ADJU' .OR. HSUBG_AUCV_RI=='ADJU') + + ! starting indexes : + IC=0 + ISTK=1 + ISTJ=1 + ISTI=1 + + DO JMICRO=1,KSIZE,KPROMA + + IMICRO=MIN(KPROMA,KSIZE-JMICRO+1) +! +!* 3. PACKING +! -------- + + ! Setup packing parameters + OUTER_LOOP: DO JK = ISTK, KKT + DO JJ = ISTJ, KJT + IF (ANY(ODMICRO(:,JJ,JK))) THEN + DO JI = ISTI, KIT + IF (ODMICRO(JI,JJ,JK)) THEN + IC=IC+1 + ! Initialization of variables in packed format : + ZVART(IC, ITH)=PTHT(JI, JJ, JK) + ZVART(IC, IRV)=PRVT(JI, JJ, JK) + ZVART(IC, IRC)=PRCT(JI, JJ, JK) + ZVART(IC, IRR)=PRRT(JI, JJ, JK) + ZVART(IC, IRI)=PRIT(JI, JJ, JK) + ZVART(IC, IRS)=PRST(JI, JJ, JK) + ZVART(IC, IRG)=PRGT(JI, JJ, JK) + IF (KRR==7) THEN + ZVART(IC, IRH)=PRHT(JI, JJ, JK) + ENDIF + IF (GEXT_TEND) THEN + !The th tendency is not related to a mixing ratio change, there is no exn/exnref issue here + ZEXTPK(IC, ITH)=PTHS(JI, JJ, JK) + ZEXTPK(IC, IRV)=PRVS(JI, JJ, JK) + ZEXTPK(IC, IRC)=PRCS(JI, JJ, JK) + ZEXTPK(IC, IRR)=PRRS(JI, JJ, JK) + ZEXTPK(IC, IRI)=PRIS(JI, JJ, JK) + ZEXTPK(IC, IRS)=PRSS(JI, JJ, JK) + ZEXTPK(IC, IRG)=PRGS(JI, JJ, JK) + IF (KRR==7) THEN + ZEXTPK(IC, IRH)=PRHS(JI, JJ, JK) + ENDIF + ENDIF + ZCIT (IC)=PCIT (JI, JJ, JK) + ZCF (IC)=PCLDFR (JI, JJ, JK) + ZRHODREF (IC)=PRHODREF(JI, JJ, JK) + ZPRES (IC)=PPABST (JI, JJ, JK) + ZEXN (IC)=PEXN (JI, JJ, JK) + IF(LLSIGMA_RC) THEN + ZSIGMA_RC(IC)=PSIGS (JI, JJ, JK) + ENDIF + IF (LL_AUCV_ADJU) THEN + ZHLC_HCF(IC) = PHLC_HCF(JI, JJ, JK) + ZHLC_HRC(IC) = PHLC_HRC(JI, JJ, JK) + ZHLI_HCF(IC) = PHLI_HCF(JI, JJ, JK) + ZHLI_HRI(IC) = PHLI_HRI(JI, JJ, JK) + ENDIF + ! Save indices for later usages: + I1(IC) = JI + I2(IC) = JJ + I3(IC) = JK + I1TOT(JMICRO+IC-1)=JI + I2TOT(JMICRO+IC-1)=JJ + I3TOT(JMICRO+IC-1)=JK + IF (IC==IMICRO) THEN + ! the end of the chunk has been reached, then reset the starting index : + ISTI=JI+1 + IF (ISTI <= KIT) THEN + ISTJ=JJ + ISTK=JK + ELSE + ! end of line, restart from 1 and increment upper loop + ISTI=1 + ISTJ=JJ+1 + IF (ISTJ <= KJT) THEN + ISTK=JK + ELSE + ! end of line, restart from 1 and increment upper loop + ISTJ=1 + ISTK=JK+1 + IF (ISTK > KKT) THEN + ! end of line, restart from 1 + ISTK=1 + ENDIF + ENDIF + ENDIF + IC=0 + EXIT OUTER_LOOP + ENDIF + ENDIF + ENDDO + ENDIF + ! restart inner loop on JI : + ISTI=1 + ENDDO + ! restart inner loop on JJ : + ISTJ=1 + ENDDO OUTER_LOOP + + IF (GEXT_TEND) THEN + DO JV=0, KRR + DO JL=1, IMICRO + ZEXTPK(JL, JV)=ZEXTPK(JL, JV)-ZVART(JL, JV)*ZINV_TSTEP + ENDDO + ENDDO ENDIF - IF(ZRIT(JL)>0.) THEN - ZHLI_LCF(JL) = ZCF(JL)- ZHLI_HCF(JL) - ELSE - ZHLI_LCF(JL)=0. + IF (LLSIGMA_RC) THEN + DO JL=1, IMICRO + ZSIGMA_RC(JL)=ZSIGMA_RC(JL)*2. + ENDDO ENDIF - ENDDO - IF(GEXT_TEND) THEN - DO JL=1, IMICRO - ZEXT_RV(JL) = PRVS(I1(JL),I2(JL),I3(JL)) - ZRVT(JL)*ZINV_TSTEP - ZEXT_RC(JL) = PRCS(I1(JL),I2(JL),I3(JL)) - ZRCT(JL)*ZINV_TSTEP - ZEXT_RR(JL) = PRRS(I1(JL),I2(JL),I3(JL)) - ZRRT(JL)*ZINV_TSTEP - ZEXT_RI(JL) = PRIS(I1(JL),I2(JL),I3(JL)) - ZRIT(JL)*ZINV_TSTEP - ZEXT_RS(JL) = PRSS(I1(JL),I2(JL),I3(JL)) - ZRST(JL)*ZINV_TSTEP - ZEXT_RG(JL) = PRGS(I1(JL),I2(JL),I3(JL)) - ZRGT(JL)*ZINV_TSTEP - ZEXT_TH(JL) = PTHS(I1(JL),I2(JL),I3(JL)) - ZTHT(JL)*ZINV_TSTEP - !The th tendency is not related to a mixing ratio change, there is no exn/exnref issue here - ENDDO - ENDIF - IF(HSUBG_AUCV_RC=='PDF ' .AND. CSUBG_PR_PDF=='SIGM') THEN - DO JL=1, IMICRO - ZSIGMA_RC(JL) = PSIGS(I1(JL),I2(JL),I3(JL))*2. - ENDDO - ENDIF - IF(KRR==7) THEN - DO JL=1, IMICRO - ZRHT(JL) = PRHT(I1(JL),I2(JL),I3(JL)) - ENDDO - IF(GEXT_TEND) THEN + IF (LL_AUCV_ADJU) THEN DO JL=1, IMICRO - ZEXT_RH(JL) = PRHS(I1(JL),I2(JL),I3(JL)) - ZRHT(JL)*ZINV_TSTEP + ZHLC_LRC(JL) = ZVART(JL, IRC) - ZHLC_HRC(JL) + ZHLI_LRI(JL) = ZVART(JL, IRI) - ZHLI_HRI(JL) + IF(ZVART(JL, IRC)>0.) THEN + ZHLC_LCF(JL) = ZCF(JL)- ZHLC_HCF(JL) + ELSE + ZHLC_LCF(JL)=0. + ENDIF + IF(ZVART(JL, IRI)>0.) THEN + ZHLI_LCF(JL) = ZCF(JL)- ZHLI_HCF(JL) + ELSE + ZHLI_LCF(JL)=0. + ENDIF ENDDO ENDIF - ELSE - ZRHT(:)=0. - IF(GEXT_TEND) ZEXT_RH(:)=0. - ENDIF - IF(LBU_ENABLE) THEN - ZTOT_RVHENI(:)=0. - ZTOT_RCHONI(:)=0. - ZTOT_RRHONG(:)=0. - ZTOT_RVDEPS(:)=0. - ZTOT_RIAGGS(:)=0. - ZTOT_RIAUTS(:)=0. - ZTOT_RVDEPG(:)=0. - ZTOT_RCAUTR(:)=0. - ZTOT_RCACCR(:)=0. - ZTOT_RREVAV(:)=0. - ZTOT_RCRIMSS(:)=0. - ZTOT_RCRIMSG(:)=0. - ZTOT_RSRIMCG(:)=0. - ZTOT_RIMLTC(:)=0. - ZTOT_RCBERI(:)=0. - ZTOT_RHMLTR(:)=0. - ZTOT_RSMLTG(:)=0. - ZTOT_RCMLTSR(:)=0. - ZTOT_RRACCSS(:)=0. - ZTOT_RRACCSG(:)=0. - ZTOT_RSACCRG(:)=0. - ZTOT_RICFRRG(:)=0. - ZTOT_RRCFRIG(:)=0. - ZTOT_RICFRR(:)=0. - ZTOT_RCWETG(:)=0. - ZTOT_RIWETG(:)=0. - ZTOT_RRWETG(:)=0. - ZTOT_RSWETG(:)=0. - ZTOT_RCDRYG(:)=0. - ZTOT_RIDRYG(:)=0. - ZTOT_RRDRYG(:)=0. - ZTOT_RSDRYG(:)=0. - ZTOT_RWETGH(:)=0. - ZTOT_RGMLTR(:)=0. - ZTOT_RCWETH(:)=0. - ZTOT_RIWETH(:)=0. - ZTOT_RSWETH(:)=0. - ZTOT_RGWETH(:)=0. - ZTOT_RRWETH(:)=0. - ZTOT_RCDRYH(:)=0. - ZTOT_RIDRYH(:)=0. - ZTOT_RSDRYH(:)=0. - ZTOT_RRDRYH(:)=0. - ZTOT_RGDRYH(:)=0. - ZTOT_RDRYHG(:)=0. - ENDIF -ENDIF + !------------------------------------------------------------------------------- ! !* 4. LOOP ! ---- ! -!Maximum number of iterations -!We only count real iterations (those for which we *compute* tendencies) -INB_ITER_MAX=NMAXITER -IF(XTSTEP_TS/=0.)THEN - INB_ITER_MAX=MAX(1, INT(PTSTEP/XTSTEP_TS)) !At least the number of iterations needed for the time-splitting - ZTSTEP=PTSTEP/INB_ITER_MAX - INB_ITER_MAX=MAX(NMAXITER, INB_ITER_MAX) !For the case XMRSTEP/=0. at the same time -ENDIF -IITER(:)=0 -ZTIME(:)=0. ! Current integration time (all points may have a different integration time) -DO WHILE(ANY(ZTIME(:)<PTSTEP)) ! Loop to *really* compute tendencies - IF(XMRSTEP/=0.) THEN - ! In this case we need to remember the mixing ratios used to compute the tendencies - ! because when mixing ratio has evolved more than a threshold, we must re-compute tendecies - DO JL=1, IMICRO - Z0RVT(JL)=ZRVT(JL) - Z0RCT(JL)=ZRCT(JL) - Z0RRT(JL)=ZRRT(JL) - Z0RIT(JL)=ZRIT(JL) - Z0RST(JL)=ZRST(JL) - Z0RGT(JL)=ZRGT(JL) - Z0RHT(JL)=ZRHT(JL) - ENDDO - ENDIF - IF(XTSTEP_TS/=0.) THEN - ! In this case we need to remember the time when tendencies were computed - ! because when time has evolved more than a limit, we must re-compute tendecies - ZTIME_LASTCALL(:)=ZTIME(:) - ENDIF - ZCOMPUTE(:)=MAX(0., -SIGN(1., ZTIME(:)-PTSTEP)) ! Compuation (1.) only for points for which integration time has not reached the timestep - LSOFT=.FALSE. ! We *really* compute the tendencies - IITER(:)=IITER(:)+INT(ZCOMPUTE(:)) - DO WHILE(SUM(ZCOMPUTE(:))>0.) ! Loop to adjust tendencies when we cross the 0°C or when a specie disappears - IF(KRR==7) THEN - DO JL=1, IMICRO - ZZT(JL) = ZTHT(JL) * ZEXN(JL) - ZLSFACT(JL)=(XLSTT+(XCPV-XCI)*(ZZT(JL)-XTT)) & - &/( (XCPD + XCPV*ZRVT(JL) + XCL*(ZRCT(JL)+ZRRT(JL)) & - &+ XCI*(ZRIT(JL)+ZRST(JL)+ZRGT(JL)+ZRHT(JL)))*ZEXN(JL) ) - ZLVFACT(JL)=(XLVTT+(XCPV-XCL)*(ZZT(JL)-XTT)) & - &/( (XCPD + XCPV*ZRVT(JL) + XCL*(ZRCT(JL)+ZRRT(JL)) & - &+ XCI*(ZRIT(JL)+ZRST(JL)+ZRGT(JL)+ZRHT(JL)))*ZEXN(JL) ) - ENDDO - ELSE - DO JL=1, IMICRO - ZZT(JL) = ZTHT(JL) * ZEXN(JL) - ZLSFACT(JL)=(XLSTT+(XCPV-XCI)*(ZZT(JL)-XTT)) & - &/( (XCPD + XCPV*ZRVT(JL) + XCL*(ZRCT(JL)+ZRRT(JL)) & - &+ XCI*(ZRIT(JL)+ZRST(JL)+ZRGT(JL)))*ZEXN(JL) ) - ZLVFACT(JL)=(XLVTT+(XCPV-XCL)*(ZZT(JL)-XTT)) & - &/( (XCPD + XCPV*ZRVT(JL) + XCL*(ZRCT(JL)+ZRRT(JL)) & - &+ XCI*(ZRIT(JL)+ZRST(JL)+ZRGT(JL)))*ZEXN(JL) ) - ENDDO - ENDIF - ! - !*** 4.1 Tendecies computation - ! - ! Tendencies are *really* computed when LSOFT==.FALSE. and only adjusted otherwise + IITER(1:IMICRO)=0 + ZTIME(1:IMICRO)=0. ! Current integration time (all points may have a different integration time) + DO WHILE(ANY(ZTIME(1:IMICRO)<PTSTEP)) ! Loop to *really* compute tendencies + IF(XTSTEP_TS/=0.) THEN + ! In this case we need to remember the time when tendencies were computed + ! because when time has evolved more than a limit, we must re-compute tendencies + ZTIME_LASTCALL(1:IMICRO)=ZTIME(1:IMICRO) + ENDIF + DO JL=1, IMICRO + IF (ZTIME(JL) < PTSTEP) THEN + ZCOMPUTE(JL)=1. ! Computation (1.) only for points for which integration time has not reached the timestep + IITER(JL)=IITER(JL)+1 + ELSE + ZCOMPUTE(JL)=0. + ENDIF + ENDDO + LL_ANY_ITER=ANY(IITER(1:IMICRO) < INB_ITER_MAX) + LLCPZ0RT=.TRUE. + LSOFT=.FALSE. ! We *really* compute the tendencies -!KPROMA=IMICRO: temporary merging step -ZVART(:, ITH)=ZTHT(:) -ZVART(:, IRV)=ZRVT(:) -ZVART(:, IRC)=ZRCT(:) -ZVART(:, IRR)=ZRRT(:) -ZVART(:, IRI)=ZRIT(:) -ZVART(:, IRS)=ZRST(:) -ZVART(:, IRG)=ZRGT(:) -IF(KRR==7) ZVART(:, IRH)=ZRHT(:) - - CALL ICE4_TENDENCIES(IMICRO, IMICRO, IIB, IIE, KIT, IJB, IJE, KJT, IKB, IKE, KKT, KKL, & + DO WHILE(ANY(ZCOMPUTE(1:IMICRO)==1.)) ! Loop to adjust tendencies when we cross the 0°C or when a species disappears +!$OMP SIMD + DO JL=1, IMICRO + ZSUM2(JL)=SUM(ZVART(JL,IRI:KRR)) + ENDDO + DO JL=1, IMICRO + ZDEVIDE=(XCPD + XCPV*ZVART(JL, IRV) + XCL*(ZVART(JL, IRC)+ZVART(JL, IRR)) + XCI*ZSUM2(JL)) * ZEXN(JL) + ZZT(JL) = ZVART(JL, ITH) * ZEXN(JL) + ZLSFACT(JL)=(XLSTT+(XCPV-XCI)*(ZZT(JL)-XTT)) / ZDEVIDE + ZLVFACT(JL)=(XLVTT+(XCPV-XCL)*(ZZT(JL)-XTT)) / ZDEVIDE + ENDDO + ! + !*** 4.1 Tendencies computation + ! + ! Tendencies are *really* computed when LSOFT==.FALSE. and only adjusted otherwise + CALL ICE4_TENDENCIES(KPROMA, IMICRO, IIB, IIE, KIT, IJB, IJE, KJT, IKB, IKE, KKT, KKL, & &KRR, LSOFT, ZCOMPUTE, & &OWARM, CSUBG_RC_RR_ACCR, CSUBG_RR_EVAP, & &HSUBG_AUCV_RC, HSUBG_AUCV_RI, CSUBG_PR_PDF, & &ZEXN, ZRHODREF, ZLVFACT, ZLSFACT, I1, I2, I3, & - &ZPRES, ZCF, ZSIGMA_RC,& + &ZPRES, ZCF, ZSIGMA_RC, & &ZCIT, & &ZZT, ZVART, & &ZRVHENI_MR, ZRRHONG_MR, ZRIMLTC_MR, ZRSRIMCG_MR, & @@ -907,795 +1003,629 @@ IF(KRR==7) ZVART(:, IRH)=ZRHT(:) &ZA, ZB, & &ZHLC_HCF, ZHLC_LCF, ZHLC_HRC, ZHLC_LRC, & &ZHLI_HCF, ZHLI_LCF, ZHLI_HRI, ZHLI_LRI, PRAINFR) -ZTHT(:)=ZVART(:, ITH) -ZRVT(:)=ZVART(:, IRV) -ZRCT(:)=ZVART(:, IRC) -ZRRT(:)=ZVART(:, IRR) -ZRIT(:)=ZVART(:, IRI) -ZRST(:)=ZVART(:, IRS) -ZRGT(:)=ZVART(:, IRG) -IF(KRR==7) ZRHT(:)=ZVART(:, IRH) - - ! External tendencies - IF(GEXT_TEND) THEN - DO JL=1, IMICRO - ZA(JL, ITH) = ZA(JL, ITH) + ZEXT_TH(JL) - ZA(JL, IRV) = ZA(JL, IRV) + ZEXT_RV(JL) - ZA(JL, IRC) = ZA(JL, IRC) + ZEXT_RC(JL) - ZA(JL, IRR) = ZA(JL, IRR) + ZEXT_RR(JL) - ZA(JL, IRI) = ZA(JL, IRI) + ZEXT_RI(JL) - ZA(JL, IRS) = ZA(JL, IRS) + ZEXT_RS(JL) - ZA(JL, IRG) = ZA(JL, IRG) + ZEXT_RG(JL) - ZA(JL, IRH) = ZA(JL, IRH) + ZEXT_RH(JL) - ENDDO - ENDIF - ! - !*** 4.2 Integration time - ! - ! If we can, we will use these tendencies until the end of the timestep - ZMAXTIME(:)=ZCOMPUTE(:) * (PTSTEP-ZTIME(:)) ! Remaining time until the end of the timestep - - !We need to adjust tendencies when temperature reaches 0 - IF(LFEEDBACKT) THEN - DO JL=1, IMICRO - !Is ZB_TH enough to change temperature sign? - ZW1D(JL)=(ZTHT(JL) - XTT/ZEXN(JL)) * (ZTHT(JL) + ZB_TH(JL) - XTT/ZEXN(JL)) - ZMAXTIME(JL)=ZMAXTIME(JL)*MAX(0., SIGN(1., ZW1D(JL))) - !Can ZA(:, ITH) make temperature change of sign? - ZW1D(JL)=MAX(0., -SIGN(1., 1.E-20 - ABS(ZA(JL, ITH)))) ! WHERE(ABS(ZA(:, ITH))>1.E-20) - ZTIME_THRESHOLD(JL)=(1. - ZW1D(JL))*(-1.) + & - ZW1D(JL) * & - (XTT/ZEXN(JL) - ZB_TH(JL) - ZTHT(JL))/ & - SIGN(MAX(ABS(ZA(JL, ITH)), 1.E-20), ZA(JL, ITH)) - ZW1D(JL)=MAX(0., -SIGN(1., 1.E-20 - ZTIME_THRESHOLD(JL))) ! WHERE(ZTIME_THRESHOLD(:)>1.E-20) - ZMAXTIME(JL)=(1.-ZW1D(JL)) * ZMAXTIME(JL) + & - ZW1D(JL) * MIN(ZMAXTIME(JL), ZTIME_THRESHOLD(JL)) - ENDDO - ENDIF - - !We need to adjust tendencies when a specy disappears - !When a species is missing, only the external tendencies can be negative (and we must keep track of it) - DO JL=1, IMICRO - ZW1D(JL)=MAX(0., -SIGN(1., ZA(JL, IRV)+1.E-20)) * & ! WHERE(ZA(:, IRV)<-1.E-20) - &MAX(0., -SIGN(1., XRTMIN(1)-ZRVT(JL))) ! WHERE(ZRVT(:)>XRTMIN(1)) - ZMAXTIME(JL)=(1.-ZW1D(JL)) * ZMAXTIME(JL) + & - &ZW1D(JL) * MIN(ZMAXTIME(JL), -(ZB_RV(JL)+ZRVT(JL))/MIN(ZA(JL, IRV), -1.E-20)) - - ZW1D(JL)=MAX(0., -SIGN(1., ZA(JL, IRC)+1.E-20)) * & ! WHERE(ZA(:, IRC)<-1.E-20) - &MAX(0., -SIGN(1., XRTMIN(2)-ZRCT(JL))) ! WHERE(ZRCT(:)>XRTMIN(2)) - ZMAXTIME(JL)=(1.-ZW1D(JL)) * ZMAXTIME(JL) + & - &ZW1D(JL) * MIN(ZMAXTIME(JL), -(ZB_RC(JL)+ZRCT(JL))/MIN(ZA(JL, IRC), -1.E-20)) - - ZW1D(JL)=MAX(0., -SIGN(1., ZA(JL, IRR)+1.E-20)) * & ! WHERE(ZA(:, IRR)<-1.E-20) - &MAX(0., -SIGN(1., XRTMIN(3)-ZRRT(JL))) ! WHERE(ZRRT(:)>XRTMIN(3)) - ZMAXTIME(JL)=(1.-ZW1D(JL)) * ZMAXTIME(JL) + & - &ZW1D(JL) * MIN(ZMAXTIME(JL), -(ZB_RR(JL)+ZRRT(JL))/MIN(ZA(JL, IRR), -1.E-20)) - - ZW1D(JL)=MAX(0., -SIGN(1., ZA(JL, IRI)+1.E-20)) * & ! WHERE(ZI_RV(:)<-1.E-20) - &MAX(0., -SIGN(1., XRTMIN(4)-ZRIT(JL))) ! WHERE(ZRIT(:)>XRTMIN(4)) - ZMAXTIME(JL)=(1.-ZW1D(JL)) * ZMAXTIME(JL) + & - &ZW1D(JL) * MIN(ZMAXTIME(JL), -(ZB_RI(JL)+ZRIT(JL))/MIN(ZARI(JL, IRI), -1.E-20)) - - ZW1D(JL)=MAX(0., -SIGN(1., ZA(JL, IRS)+1.E-20)) * & ! WHERE(ZA(:, IRS)<-1.E-20) - &MAX(0., -SIGN(1., XRTMIN(5)-ZRST(JL))) ! WHERE(ZRST(:)>XRTMIN(5)) - ZMAXTIME(JL)=(1.-ZW1D(JL)) * ZMAXTIME(JL) + & - &ZW1D(JL) * MIN(ZMAXTIME(JL), -(ZB_RS(JL)+ZRST(JL))/MIN(ZA(JL, IRS), -1.E-20)) - - ZW1D(JL)=MAX(0., -SIGN(1., ZA(JL, IRG)+1.E-20)) * & ! WHERE(ZA(:, IRG)<-1.E-20) - &MAX(0., -SIGN(1., XRTMIN(6)-ZRGT(JL))) ! WHERE(ZRGT(:)>XRTMIN(6)) - ZMAXTIME(JL)=(1.-ZW1D(JL)) * ZMAXTIME(JL) + & - &ZW1D(JL) * MIN(ZMAXTIME(JL), -(ZB_RG(JL)+ZRGT(JL))/MIN(ZA(JL, IRG), -1.E-20)) - ENDDO - IF(KRR==7) THEN - DO JL=1, IMICRO - ZW1D(JL)=MAX(0., -SIGN(1., ZA(JL, IRH)+1.E-20)) * & ! WHERE(ZA(:, IRH)<-1.E-20) - &MAX(0., -SIGN(1., XRTMIN(7)-ZRHT(JL))) ! WHERE(ZRHT(:)>XRTMIN(7)) - ZMAXTIME(JL)=(1.-ZW1D(JL)) * ZMAXTIME(JL) + & - &ZW1D(JL) * MIN(ZMAXTIME(JL), -(ZB_RH(JL)+ZRHT(JL))/MIN(ZA(JL, IRH), -1.E-20)) - ENDDO - ENDIF + ! External tendencies + IF(GEXT_TEND) THEN + DO JV=0, KRR + DO JL=1, IMICRO + ZA(JL, JV) = ZA(JL, JV) + ZEXTPK(JL, JV) + ENDDO + ENDDO + ENDIF + ! + !*** 4.2 Integration time + ! + ! If we can, we shall use these tendencies until the end of the timestep + DO JL=1, IMICRO + ZMAXTIME(JL)=ZCOMPUTE(JL) * (PTSTEP-ZTIME(JL)) ! Remaining time until the end of the timestep + ENDDO - !We stop when the end of the timestep is reached - ZCOMPUTE(:)=ZCOMPUTE(:) * MAX(0., -SIGN(1., ZTIME(:)+ZMAXTIME(:)-PTSTEP)) + !We need to adjust tendencies when temperature reaches 0 + IF(LFEEDBACKT) THEN + DO JL=1, IMICRO + !Is ZB(:, ITH) enough to change temperature sign? + ZX=XTT/ZEXN(JL) + IF ((ZVART(JL, ITH) - ZX) * (ZVART(JL, ITH) + ZB(JL, ITH) - ZX) < 0.) THEN + ZMAXTIME(JL)=0. + ENDIF + !Can ZA(:, ITH) make temperature change of sign? + IF (ABS(ZA(JL,ITH)) > 1.E-20 ) THEN + ZTIME_THRESHOLD=(ZX - ZB(JL, ITH) - ZVART(JL, ITH))/ZA(JL, ITH) + IF (ZTIME_THRESHOLD > 0.) THEN + ZMAXTIME(JL)=MIN(ZMAXTIME(JL), ZTIME_THRESHOLD) + ENDIF + ENDIF + ENDDO + ENDIF + + !We need to adjust tendencies when a species disappears + !When a species is missing, only the external tendencies can be negative (and we must keep track of it) + DO JV=1, KRR + DO JL=1, IMICRO + IF (ZA(JL, JV) < -1.E-20 .AND. ZVART(JL, JV) > XRTMIN(JV)) THEN + ZMAXTIME(JL)=MIN(ZMAXTIME(JL), -(ZB(JL, JV)+ZVART(JL, JV))/ZA(JL, JV)) + ENDIF + ENDDO + ENDDO - !We must recompute tendencies when the end of the sub-timestep is reached - IF(XTSTEP_TS/=0.) THEN - DO JL=1, IMICRO - ZW1D(JL)=MAX(0., -SIGN(1., IITER(JL)-INB_ITER_MAX+0.)) * & ! WHERE(IITER(:)<INB_ITER_MAX) - &MAX(0., -SIGN(1., ZTIME_LASTCALL(JL)+ZTSTEP-ZTIME(JL)-ZMAXTIME(JL))) ! WHERE(ZTIME(:)+ZMAXTIME(:)>ZTIME_LASTCALL(:)+ZTSTEP) - ZMAXTIME(JL)=(1.-ZW1D(JL)) * ZMAXTIME(JL) + & - &ZW1D(JL) * (ZTIME_LASTCALL(JL)-ZTIME(JL)+ZTSTEP) - ZCOMPUTE(JL)=ZCOMPUTE(JL) * (1. - ZW1D(JL)) - ENDDO - ENDIF + !We stop when the end of the timestep is reached + DO JL=1, IMICRO + IF (ZTIME(JL)+ZMAXTIME(JL) >= PTSTEP) THEN + ZCOMPUTE(JL)=0. + ENDIF + ENDDO + !We must recompute tendencies when the end of the sub-timestep is reached + IF (XTSTEP_TS/=0.) THEN + DO JL=1, IMICRO + IF ((IITER(JL) < INB_ITER_MAX) .AND. (ZTIME(JL)+ZMAXTIME(JL) > ZTIME_LASTCALL(JL)+ZTSTEP)) THEN + ZMAXTIME(JL)=ZTIME_LASTCALL(JL)-ZTIME(JL)+ZTSTEP + ZCOMPUTE(JL)=0. + ENDIF + ENDDO + ENDIF + + !We must recompute tendencies when the maximum allowed change is reached + !When a species is missing, only the external tendencies can be active and we do not want to recompute + !the microphysical tendencies when external tendencies are negative (results won't change because species was already missing) + IF (XMRSTEP/=0.) THEN + IF (LL_ANY_ITER) THEN + ! In this case we need to remember the initial mixing ratios used to compute the tendencies + ! because when mixing ratio has evolved more than a threshold, we must re-compute tendencies + ! Thus, at first iteration (ie when LLCPZ0RT=.TRUE.) we copy ZVART into Z0RT + DO JV=1,KRR + IF (LLCPZ0RT) Z0RT(1:IMICRO, JV)=ZVART(1:IMICRO, JV) + DO JL=1, IMICRO + IF (IITER(JL)<INB_ITER_MAX .AND. ABS(ZA(JL,JV))>1.E-20) THEN + ZTIME_THRESHOLD=(SIGN(1., ZA(JL, JV))*XMRSTEP+Z0RT(JL, JV)-ZVART(JL, JV)-ZB(JL, JV))/ZA(JL, JV) + ELSE + ZTIME_THRESHOLD=-1. + ENDIF + IF (ZTIME_THRESHOLD>=0 .AND. ZTIME_THRESHOLD<ZMAXTIME(JL) .AND. (ZVART(JL, JV)>XRTMIN(JV) .OR. ZA(JL, JV)>0.)) THEN + ZMAXTIME(JL)=MIN(ZMAXTIME(JL), ZTIME_THRESHOLD) + ZCOMPUTE(JL)=0. + ENDIF + ENDDO + ENDDO + LLCPZ0RT=.FALSE. +!$OMP SIMD + DO JL=1,IMICRO + ZMAXB(JL)=MAXVAL(ABS(ZB(JL,1:KRR))) + ENDDO + DO JL=1, IMICRO + IF (IITER(JL)<INB_ITER_MAX .AND. ZMAXB(JL)>XMRSTEP) THEN + ZMAXTIME(JL)=0. + ZCOMPUTE(JL)=0. + ENDIF + ENDDO + ENDIF ! LL_ANY_ITER + ENDIF ! XMRSTEP/=0. + ! + !*** 4.3 New values of variables for next iteration + ! + DO JV=0, KRR + DO JL=1, IMICRO + ZVART(JL, JV)=ZVART(JL, JV)+ZA(JL, JV)*ZMAXTIME(JL)+ZB(JL, JV) + ENDDO + ENDDO + DO JL=1, IMICRO + IF (ZVART(JL,IRI)==0.) ZCIT(JL) = 0. + ZTIME(JL)=ZTIME(JL)+ZMAXTIME(JL) + ENDDO - !We must recompute tendencies when the maximum allowed change is reached - !When a specy is missing, only the external tendencies can be active and we do not want to recompute - !the microphysical tendencies when external tendencies are negative (results won't change because specy was already missing) - IF(XMRSTEP/=0.) THEN - DO JL=1, IMICRO - ZW1D(JL)=MAX(0., -SIGN(1., IITER(JL)-INB_ITER_MAX+0.)) * & ! WHERE(IITER(:)<INB_ITER_MAX) - &MAX(0., -SIGN(1., 1.E-20-ABS(ZA_RV(JL)))) ! WHERE(ABS(ZA_RV(:))>1.E-20) - ZTIME_THRESHOLD(JL)=(1.-ZW1D(JL))*(-1.) + & - &ZW1D(JL)*(SIGN(1., ZA_RV(JL))*XMRSTEP+Z0RVT(JL)-ZRVT(JL)-ZB_RV(JL))/ & - &SIGN(MAX(ABS(ZA_RV(JL)), 1.E-20), ZA_RV(JL)) - ZW1D(JL)=MAX(0., SIGN(1., ZTIME_THRESHOLD(JL))) * & !WHERE(ZTIME_THRESHOLD(:)>=0.) - &MAX(0., -SIGN(1., ZTIME_THRESHOLD(JL)-ZMAXTIME(JL))) * & !WHERE(ZTIME_THRESHOLD(:)<ZMAXTIME(:)) - &MIN(1., MAX(0., -SIGN(1., XRTMIN(6)-ZRVT(JL))) + & !WHERE(ZRVT(:)>XRTMIN(6)) .OR. - &MAX(0., -SIGN(1., -ZA_RV(JL)))) !WHERE(ZA_RV(:)>0.) - ZMAXTIME(JL)=(1.-ZW1D(JL)) * ZMAXTIME(JL) + & - &ZW1D(JL)*MIN(ZMAXTIME(JL), ZTIME_THRESHOLD(JL)) - ZCOMPUTE(JL)=ZCOMPUTE(JL) * (1. - ZW1D(JL)) - - ZW1D(JL)=MAX(0., -SIGN(1., IITER(JL)-INB_ITER_MAX+0.)) * & ! WHERE(IITER(:)<INB_ITER_MAX) - &MAX(0., -SIGN(1., 1.E-20-ABS(ZA_RC(JL)))) ! WHERE(ABS(ZA_RC(:))>1.E-20) - ZTIME_THRESHOLD(JL)=(1.-ZW1D(JL))*(-1.) + & - &ZW1D(JL)*(SIGN(1., ZA_RC(JL))*XMRSTEP+Z0RCT(JL)-ZRCT(JL)-ZB_RC(JL))/ & - &SIGN(MAX(ABS(ZA_RC(JL)), 1.E-20), ZA_RC(JL)) - ZW1D(JL)=MAX(0., SIGN(1., ZTIME_THRESHOLD(JL))) * & !WHERE(ZTIME_THRESHOLD(:)>=0.) - &MAX(0., -SIGN(1., ZTIME_THRESHOLD(JL)-ZMAXTIME(JL))) * & !WHERE(ZTIME_THRESHOLD(:)<ZMAXTIME(:)) - &MIN(1., MAX(0., -SIGN(1., XRTMIN(6)-ZRCT(JL))) + & !WHERE(ZRCT(:)>XRTMIN(6)) .OR. - &MAX(0., -SIGN(1., -ZA_RC(JL)))) !WHERE(ZA_RC(:)>0.) - ZMAXTIME(JL)=(1.-ZW1D(JL)) * ZMAXTIME(JL) + & - &ZW1D(JL)*MIN(ZMAXTIME(JL), ZTIME_THRESHOLD(JL)) - ZCOMPUTE(JL)=ZCOMPUTE(JL) * (1. - ZW1D(JL)) - - ZW1D(JL)=MAX(0., -SIGN(1., IITER(JL)-INB_ITER_MAX+0.)) * & ! WHERE(IITER(:)<INB_ITER_MAX) - &MAX(0., -SIGN(1., 1.E-20-ABS(ZA_RR(JL)))) ! WHERE(ABS(ZA_RR(:))>1.E-20) - ZTIME_THRESHOLD(JL)=(1.-ZW1D(JL))*(-1.) + & - &ZW1D(JL)*(SIGN(1., ZA_RR(JL))*XMRSTEP+Z0RRT(JL)-ZRRT(JL)-ZB_RR(JL))/ & - &SIGN(MAX(ABS(ZA_RR(JL)), 1.E-20), ZA_RR(JL)) - ZW1D(JL)=MAX(0., SIGN(1., ZTIME_THRESHOLD(JL))) * & !WHERE(ZTIME_THRESHOLD(:)>=0.) - &MAX(0., -SIGN(1., ZTIME_THRESHOLD(JL)-ZMAXTIME(JL))) * & !WHERE(ZTIME_THRESHOLD(:)<ZMAXTIME(:)) - &MIN(1., MAX(0., -SIGN(1., XRTMIN(6)-ZRRT(JL))) + & !WHERE(ZRRT(:)>XRTMIN(6)) .OR. - &MAX(0., -SIGN(1., -ZA_RR(JL)))) !WHERE(ZA_RR(:)>0.) - ZMAXTIME(JL)=(1.-ZW1D(JL)) * ZMAXTIME(JL) + & - &ZW1D(JL)*MIN(ZMAXTIME(JL), ZTIME_THRESHOLD(JL)) - ZCOMPUTE(JL)=ZCOMPUTE(JL) * (1. - ZW1D(JL)) - - ZW1D(JL)=MAX(0., -SIGN(1., IITER(JL)-INB_ITER_MAX+0.)) * & ! WHERE(IITER(:)<INB_ITER_MAX) - &MAX(0., -SIGN(1., 1.E-20-ABS(ZA_RI(JL)))) ! WHERE(ABS(ZA_RI(:))>1.E-20) - ZTIME_THRESHOLD(JL)=(1.-ZW1D(JL))*(-1.) + & - &ZW1D(JL)*(SIGN(1., ZA_RI(JL))*XMRSTEP+Z0RIT(JL)-ZRIT(JL)-ZB_RI(JL))/ & - &SIGN(MAX(ABS(ZA_RI(JL)), 1.E-20), ZA_RI(JL)) - ZW1D(JL)=MAX(0., SIGN(1., ZTIME_THRESHOLD(JL))) * & !WHERE(ZTIME_THRESHOLD(:)>=0.) - &MAX(0., -SIGN(1., ZTIME_THRESHOLD(JL)-ZMAXTIME(JL))) * & !WHERE(ZTIME_THRESHOLD(:)<ZMAXTIME(:)) - &MIN(1., MAX(0., -SIGN(1., XRTMIN(6)-ZRIT(JL))) + & !WHERE(ZRIT(:)>XRTMIN(6)) .OR. - &MAX(0., -SIGN(1., -ZA_RI(JL)))) !WHERE(ZA_RI(:)>0.) - ZMAXTIME(JL)=(1.-ZW1D(JL)) * ZMAXTIME(JL) + & - &ZW1D(JL)*MIN(ZMAXTIME(JL), ZTIME_THRESHOLD(JL)) - ZCOMPUTE(JL)=ZCOMPUTE(JL) * (1. - ZW1D(JL)) - - ZW1D(JL)=MAX(0., -SIGN(1., IITER(JL)-INB_ITER_MAX+0.)) * & ! WHERE(IITER(:)<INB_ITER_MAX) - &MAX(0., -SIGN(1., 1.E-20-ABS(ZA_RS(JL)))) ! WHERE(ABS(ZA_RS(:))>1.E-20) - ZTIME_THRESHOLD(JL)=(1.-ZW1D(JL))*(-1.) + & - &ZW1D(JL)*(SIGN(1., ZA_RS(JL))*XMRSTEP+Z0RST(JL)-ZRST(JL)-ZB_RS(JL))/ & - &SIGN(MAX(ABS(ZA_RS(JL)), 1.E-20), ZA_RS(JL)) - ZW1D(JL)=MAX(0., SIGN(1., ZTIME_THRESHOLD(JL))) * & !WHERE(ZTIME_THRESHOLD(:)>=0.) - &MAX(0., -SIGN(1., ZTIME_THRESHOLD(JL)-ZMAXTIME(JL))) * & !WHERE(ZTIME_THRESHOLD(:)<ZMAXTIME(:)) - &MIN(1., MAX(0., -SIGN(1., XRTMIN(6)-ZRST(JL))) + & !WHERE(ZRST(:)>XRTMIN(6)) .OR. - &MAX(0., -SIGN(1., -ZA_RS(JL)))) !WHERE(ZA_RS(:)>0.) - ZMAXTIME(JL)=(1.-ZW1D(JL)) * ZMAXTIME(JL) + & - &ZW1D(JL)*MIN(ZMAXTIME(JL), ZTIME_THRESHOLD(JL)) - ZCOMPUTE(JL)=ZCOMPUTE(JL) * (1. - ZW1D(JL)) - - ZW1D(JL)=MAX(0., -SIGN(1., IITER(JL)-INB_ITER_MAX+0.)) * & ! WHERE(IITER(:)<INB_ITER_MAX) - &MAX(0., -SIGN(1., 1.E-20-ABS(ZA_RG(JL)))) ! WHERE(ABS(ZA_RG(:))>1.E-20) - ZTIME_THRESHOLD(JL)=(1.-ZW1D(JL))*(-1.) + & - &ZW1D(JL)*(SIGN(1., ZA_RG(JL))*XMRSTEP+Z0RGT(JL)-ZRGT(JL)-ZB_RG(JL))/ & - &SIGN(MAX(ABS(ZA_RG(JL)), 1.E-20), ZA_RG(JL)) - ZW1D(JL)=MAX(0., SIGN(1., ZTIME_THRESHOLD(JL))) * & !WHERE(ZTIME_THRESHOLD(:)>=0.) - &MAX(0., -SIGN(1., ZTIME_THRESHOLD(JL)-ZMAXTIME(JL))) * & !WHERE(ZTIME_THRESHOLD(:)<ZMAXTIME(:)) - &MIN(1., MAX(0., -SIGN(1., XRTMIN(6)-ZRGT(JL))) + & !WHERE(ZRGT(:)>XRTMIN(6)) .OR. - &MAX(0., -SIGN(1., -ZA_RG(JL)))) !WHERE(ZA_RG(:)>0.) - ZMAXTIME(JL)=(1.-ZW1D(JL)) * ZMAXTIME(JL) + & - &ZW1D(JL)*MIN(ZMAXTIME(JL), ZTIME_THRESHOLD(JL)) - ZCOMPUTE(JL)=ZCOMPUTE(JL) * (1. - ZW1D(JL)) + ! + !*** 4.4 Mixing ratio change due to each process + ! + IF(LBU_ENABLE) THEN + DO JL=1, IMICRO + ZTOT_RVHENI (JMICRO+JL-1)=ZTOT_RVHENI (JMICRO+JL-1)+ZRVHENI_MR(JL) + ZTOT_RCHONI (JMICRO+JL-1)=ZTOT_RCHONI (JMICRO+JL-1)+ZRCHONI (JL)*ZMAXTIME(JL) + ZTOT_RRHONG (JMICRO+JL-1)=ZTOT_RRHONG (JMICRO+JL-1)+ZRRHONG_MR(JL) + ZTOT_RVDEPS (JMICRO+JL-1)=ZTOT_RVDEPS (JMICRO+JL-1)+ZRVDEPS (JL)*ZMAXTIME(JL) + ZTOT_RIAGGS (JMICRO+JL-1)=ZTOT_RIAGGS (JMICRO+JL-1)+ZRIAGGS (JL)*ZMAXTIME(JL) + ZTOT_RIAUTS (JMICRO+JL-1)=ZTOT_RIAUTS (JMICRO+JL-1)+ZRIAUTS (JL)*ZMAXTIME(JL) + ZTOT_RVDEPG (JMICRO+JL-1)=ZTOT_RVDEPG (JMICRO+JL-1)+ZRVDEPG (JL)*ZMAXTIME(JL) + ZTOT_RCAUTR (JMICRO+JL-1)=ZTOT_RCAUTR (JMICRO+JL-1)+ZRCAUTR (JL)*ZMAXTIME(JL) + ZTOT_RCACCR (JMICRO+JL-1)=ZTOT_RCACCR (JMICRO+JL-1)+ZRCACCR (JL)*ZMAXTIME(JL) + ZTOT_RREVAV (JMICRO+JL-1)=ZTOT_RREVAV (JMICRO+JL-1)+ZRREVAV (JL)*ZMAXTIME(JL) + ZTOT_RCRIMSS(JMICRO+JL-1)=ZTOT_RCRIMSS(JMICRO+JL-1)+ZRCRIMSS (JL)*ZMAXTIME(JL) + ZTOT_RCRIMSG(JMICRO+JL-1)=ZTOT_RCRIMSG(JMICRO+JL-1)+ZRCRIMSG (JL)*ZMAXTIME(JL) + ZTOT_RSRIMCG(JMICRO+JL-1)=ZTOT_RSRIMCG(JMICRO+JL-1)+ZRSRIMCG (JL)*ZMAXTIME(JL)+ZRSRIMCG_MR(JL) + ZTOT_RRACCSS(JMICRO+JL-1)=ZTOT_RRACCSS(JMICRO+JL-1)+ZRRACCSS (JL)*ZMAXTIME(JL) + ZTOT_RRACCSG(JMICRO+JL-1)=ZTOT_RRACCSG(JMICRO+JL-1)+ZRRACCSG (JL)*ZMAXTIME(JL) + ZTOT_RSACCRG(JMICRO+JL-1)=ZTOT_RSACCRG(JMICRO+JL-1)+ZRSACCRG (JL)*ZMAXTIME(JL) + ZTOT_RSMLTG (JMICRO+JL-1)=ZTOT_RSMLTG (JMICRO+JL-1)+ZRSMLTG (JL)*ZMAXTIME(JL) + ZTOT_RCMLTSR(JMICRO+JL-1)=ZTOT_RCMLTSR(JMICRO+JL-1)+ZRCMLTSR (JL)*ZMAXTIME(JL) + ZTOT_RICFRRG(JMICRO+JL-1)=ZTOT_RICFRRG(JMICRO+JL-1)+ZRICFRRG (JL)*ZMAXTIME(JL) + ZTOT_RRCFRIG(JMICRO+JL-1)=ZTOT_RRCFRIG(JMICRO+JL-1)+ZRRCFRIG (JL)*ZMAXTIME(JL) + ZTOT_RICFRR (JMICRO+JL-1)=ZTOT_RICFRR (JMICRO+JL-1)+ZRICFRR (JL)*ZMAXTIME(JL) + ZTOT_RCWETG (JMICRO+JL-1)=ZTOT_RCWETG (JMICRO+JL-1)+ZRCWETG (JL)*ZMAXTIME(JL) + ZTOT_RIWETG (JMICRO+JL-1)=ZTOT_RIWETG (JMICRO+JL-1)+ZRIWETG (JL)*ZMAXTIME(JL) + ZTOT_RRWETG (JMICRO+JL-1)=ZTOT_RRWETG (JMICRO+JL-1)+ZRRWETG (JL)*ZMAXTIME(JL) + ZTOT_RSWETG (JMICRO+JL-1)=ZTOT_RSWETG (JMICRO+JL-1)+ZRSWETG (JL)*ZMAXTIME(JL) + ZTOT_RWETGH (JMICRO+JL-1)=ZTOT_RWETGH (JMICRO+JL-1)+ZRWETGH (JL)*ZMAXTIME(JL)+ZRWETGH_MR(JL) + ZTOT_RCDRYG (JMICRO+JL-1)=ZTOT_RCDRYG (JMICRO+JL-1)+ZRCDRYG (JL)*ZMAXTIME(JL) + ZTOT_RIDRYG (JMICRO+JL-1)=ZTOT_RIDRYG (JMICRO+JL-1)+ZRIDRYG (JL)*ZMAXTIME(JL) + ZTOT_RRDRYG (JMICRO+JL-1)=ZTOT_RRDRYG (JMICRO+JL-1)+ZRRDRYG (JL)*ZMAXTIME(JL) + ZTOT_RSDRYG (JMICRO+JL-1)=ZTOT_RSDRYG (JMICRO+JL-1)+ZRSDRYG (JL)*ZMAXTIME(JL) + ZTOT_RGMLTR (JMICRO+JL-1)=ZTOT_RGMLTR (JMICRO+JL-1)+ZRGMLTR (JL)*ZMAXTIME(JL) + ZTOT_RCWETH (JMICRO+JL-1)=ZTOT_RCWETH (JMICRO+JL-1)+ZRCWETH (JL)*ZMAXTIME(JL) + ZTOT_RIWETH (JMICRO+JL-1)=ZTOT_RIWETH (JMICRO+JL-1)+ZRIWETH (JL)*ZMAXTIME(JL) + ZTOT_RSWETH (JMICRO+JL-1)=ZTOT_RSWETH (JMICRO+JL-1)+ZRSWETH (JL)*ZMAXTIME(JL) + ZTOT_RGWETH (JMICRO+JL-1)=ZTOT_RGWETH (JMICRO+JL-1)+ZRGWETH (JL)*ZMAXTIME(JL) + ZTOT_RRWETH (JMICRO+JL-1)=ZTOT_RRWETH (JMICRO+JL-1)+ZRRWETH (JL)*ZMAXTIME(JL) + ZTOT_RCDRYH (JMICRO+JL-1)=ZTOT_RCDRYH (JMICRO+JL-1)+ZRCDRYH (JL)*ZMAXTIME(JL) + ZTOT_RIDRYH (JMICRO+JL-1)=ZTOT_RIDRYH (JMICRO+JL-1)+ZRIDRYH (JL)*ZMAXTIME(JL) + ZTOT_RSDRYH (JMICRO+JL-1)=ZTOT_RSDRYH (JMICRO+JL-1)+ZRSDRYH (JL)*ZMAXTIME(JL) + ZTOT_RRDRYH (JMICRO+JL-1)=ZTOT_RRDRYH (JMICRO+JL-1)+ZRRDRYH (JL)*ZMAXTIME(JL) + ZTOT_RGDRYH (JMICRO+JL-1)=ZTOT_RGDRYH (JMICRO+JL-1)+ZRGDRYH (JL)*ZMAXTIME(JL) + ZTOT_RDRYHG (JMICRO+JL-1)=ZTOT_RDRYHG (JMICRO+JL-1)+ZRDRYHG (JL)*ZMAXTIME(JL) + ZTOT_RHMLTR (JMICRO+JL-1)=ZTOT_RHMLTR (JMICRO+JL-1)+ZRHMLTR (JL)*ZMAXTIME(JL) + ZTOT_RIMLTC (JMICRO+JL-1)=ZTOT_RIMLTC (JMICRO+JL-1)+ZRIMLTC_MR(JL) + ZTOT_RCBERI (JMICRO+JL-1)=ZTOT_RCBERI (JMICRO+JL-1)+ZRCBERI (JL)*ZMAXTIME(JL) + ENDDO + ENDIF + ! + !*** 4.5 Next loop + ! + LSOFT=.TRUE. ! We try to adjust tendencies (inner while loop) ENDDO + ENDDO - IF(KRR==7) THEN + IF(GEXT_TEND) THEN + !Z..T variables contain the external tendency, we substract it + DO JV=0, KRR DO JL=1, IMICRO - ZW1D(JL)=MAX(0., -SIGN(1., IITER(JL)-INB_ITER_MAX+0.)) * & ! WHERE(IITER(:)<INB_ITER_MAX) - &MAX(0., -SIGN(1., 1.E-20-ABS(ZA_RH(JL)))) ! WHERE(ABS(ZA_RH(:))>1.E-20) - ZTIME_THRESHOLD(JL)=(1.-ZW1D(JL))*(-1.) + & - &ZW1D(JL)*(SIGN(1., ZA_RH(JL))*XMRSTEP+Z0RHT(JL)-ZRHT(JL)-ZB_RH(JL))/ & - &SIGN(MAX(ABS(ZA_RH(JL)), 1.E-20), ZA_RH(JL)) - ZW1D(JL)=MAX(0., SIGN(1., ZTIME_THRESHOLD(JL))) * & !WHERE(ZTIME_THRESHOLD(:)>=0.) - &MAX(0., -SIGN(1., ZTIME_THRESHOLD(JL)-ZMAXTIME(JL))) * & !WHERE(ZTIME_THRESHOLD(:)<ZMAXTIME(:)) - &MIN(1., MAX(0., -SIGN(1., XRTMIN(6)-ZRHT(JL))) + & !WHERE(ZRHT(:)>XRTMIN(6)) .OR. - &MAX(0., -SIGN(1., -ZA_RH(JL)))) !WHERE(ZA_RH(:)>0.) - ZMAXTIME(JL)=(1.-ZW1D(JL)) * ZMAXTIME(JL) + & - &ZW1D(JL)*MIN(ZMAXTIME(JL), ZTIME_THRESHOLD(JL)) - ZCOMPUTE(JL)=ZCOMPUTE(JL) * (1. - ZW1D(JL)) + ZVART(JL, JV) = ZVART(JL, JV) - ZEXTPK(JL, JV) * PTSTEP ENDDO - ENDIF - - DO JL=1, IMICRO - ZW1D(JL)=MAX(ABS(ZB_RV(JL)), ABS(ZB_RC(JL)), ABS(ZB_RR(JL)), ABS(ZB_RI(JL)), & - &ABS(ZB_RS(JL)), ABS(ZB_RG(JL)), ABS(ZB_RH(JL))) - ZW1D(JL)=MAX(0., -SIGN(1., IITER(JL)-INB_ITER_MAX+0.)) * & !WHERE(IITER(:)<INB_ITER_MAX) - &MAX(0., -SIGN(1., XMRSTEP-ZW1D(JL))) !WHERE(ZW1D(:)>XMRSTEP) - ZMAXTIME(JL)=(1.-ZW1D(JL))*ZMAXTIME(JL) - ZCOMPUTE(JL)=ZCOMPUTE(JL) * (1. - ZW1D(JL)) ENDDO ENDIF - ! - !*** 4.3 New values of variables for next iteration - ! - DO JL=1, IMICRO - ZTHT(JL)=ZTHT(JL)+ZA_TH(JL)*ZMAXTIME(JL)+ZB_TH(JL) - ZRVT(JL)=ZRVT(JL)+ZA_RV(JL)*ZMAXTIME(JL)+ZB_RV(JL) - ZRCT(JL)=ZRCT(JL)+ZA_RC(JL)*ZMAXTIME(JL)+ZB_RC(JL) - ZRRT(JL)=ZRRT(JL)+ZA_RR(JL)*ZMAXTIME(JL)+ZB_RR(JL) - ZRIT(JL)=ZRIT(JL)+ZA_RI(JL)*ZMAXTIME(JL)+ZB_RI(JL) - ZRST(JL)=ZRST(JL)+ZA_RS(JL)*ZMAXTIME(JL)+ZB_RS(JL) - ZRGT(JL)=ZRGT(JL)+ZA_RG(JL)*ZMAXTIME(JL)+ZB_RG(JL) - ZCIT(JL)=ZCIT(JL) * MAX(0., -SIGN(1., -ZRIT(JL))) ! WHERE(ZRIT(:)==0.) ZCIT(:) = 0. - ENDDO - IF(KRR==7) ZRHT(:)=ZRHT(:)+ZA_RH(:)*ZMAXTIME(:)+ZB_RH(:) - ! - !*** 4.4 Mixing ratio change due to each process - ! - IF(LBU_ENABLE) THEN - ZTOT_RVHENI(:)= ZTOT_RVHENI(:) +ZRVHENI_MR(:) - ZTOT_RCHONI(:)= ZTOT_RCHONI(:) +ZRCHONI(:) *ZMAXTIME(:) - ZTOT_RRHONG(:)= ZTOT_RRHONG(:) +ZRRHONG_MR(:) - ZTOT_RVDEPS(:)= ZTOT_RVDEPS(:) +ZRVDEPS(:) *ZMAXTIME(:) - ZTOT_RIAGGS(:)= ZTOT_RIAGGS(:) +ZRIAGGS(:) *ZMAXTIME(:) - ZTOT_RIAUTS(:)= ZTOT_RIAUTS(:) +ZRIAUTS(:) *ZMAXTIME(:) - ZTOT_RVDEPG(:)= ZTOT_RVDEPG(:) +ZRVDEPG(:) *ZMAXTIME(:) - ZTOT_RCAUTR(:)= ZTOT_RCAUTR(:) +ZRCAUTR(:) *ZMAXTIME(:) - ZTOT_RCACCR(:)= ZTOT_RCACCR(:) +ZRCACCR(:) *ZMAXTIME(:) - ZTOT_RREVAV(:)= ZTOT_RREVAV(:) +ZRREVAV(:) *ZMAXTIME(:) - ZTOT_RCRIMSS(:)=ZTOT_RCRIMSS(:)+ZRCRIMSS(:)*ZMAXTIME(:) - ZTOT_RCRIMSG(:)=ZTOT_RCRIMSG(:)+ZRCRIMSG(:)*ZMAXTIME(:) - ZTOT_RSRIMCG(:)=ZTOT_RSRIMCG(:)+ZRSRIMCG(:)*ZMAXTIME(:)+ZRSRIMCG_MR(:) - ZTOT_RRACCSS(:)=ZTOT_RRACCSS(:)+ZRRACCSS(:)*ZMAXTIME(:) - ZTOT_RRACCSG(:)=ZTOT_RRACCSG(:)+ZRRACCSG(:)*ZMAXTIME(:) - ZTOT_RSACCRG(:)=ZTOT_RSACCRG(:)+ZRSACCRG(:)*ZMAXTIME(:) - ZTOT_RSMLTG(:)= ZTOT_RSMLTG(:) +ZRSMLTG(:) *ZMAXTIME(:) - ZTOT_RCMLTSR(:)=ZTOT_RCMLTSR(:)+ZRCMLTSR(:) *ZMAXTIME(:) - ZTOT_RICFRRG(:)=ZTOT_RICFRRG(:)+ZRICFRRG(:)*ZMAXTIME(:) - ZTOT_RRCFRIG(:)=ZTOT_RRCFRIG(:)+ZRRCFRIG(:)*ZMAXTIME(:) - ZTOT_RICFRR(:)= ZTOT_RICFRR(:) +ZRICFRR(:) *ZMAXTIME(:) - ZTOT_RCWETG(:)= ZTOT_RCWETG(:) +ZRCWETG(:) *ZMAXTIME(:) - ZTOT_RIWETG(:)= ZTOT_RIWETG(:) +ZRIWETG(:) *ZMAXTIME(:) - ZTOT_RRWETG(:)= ZTOT_RRWETG(:) +ZRRWETG(:) *ZMAXTIME(:) - ZTOT_RSWETG(:)= ZTOT_RSWETG(:) +ZRSWETG(:) *ZMAXTIME(:) - ZTOT_RWETGH(:)= ZTOT_RWETGH(:) +ZRWETGH(:) *ZMAXTIME(:)+ZRWETGH_MR(:) - ZTOT_RCDRYG(:)= ZTOT_RCDRYG(:) +ZRCDRYG(:) *ZMAXTIME(:) - ZTOT_RIDRYG(:)= ZTOT_RIDRYG(:) +ZRIDRYG(:) *ZMAXTIME(:) - ZTOT_RRDRYG(:)= ZTOT_RRDRYG(:) +ZRRDRYG(:) *ZMAXTIME(:) - ZTOT_RSDRYG(:)= ZTOT_RSDRYG(:) +ZRSDRYG(:) *ZMAXTIME(:) - ZTOT_RGMLTR(:)= ZTOT_RGMLTR(:) +ZRGMLTR(:) *ZMAXTIME(:) - ZTOT_RCWETH(:)= ZTOT_RCWETH(:) +ZRCWETH(:) *ZMAXTIME(:) - ZTOT_RIWETH(:)= ZTOT_RIWETH(:) +ZRIWETH(:) *ZMAXTIME(:) - ZTOT_RSWETH(:)= ZTOT_RSWETH(:) +ZRSWETH(:) *ZMAXTIME(:) - ZTOT_RGWETH(:)= ZTOT_RGWETH(:) +ZRGWETH(:) *ZMAXTIME(:) - ZTOT_RRWETH(:)= ZTOT_RRWETH(:) +ZRRWETH(:) *ZMAXTIME(:) - ZTOT_RCDRYH(:)= ZTOT_RCDRYH(:) +ZRCDRYH(:) *ZMAXTIME(:) - ZTOT_RIDRYH(:)= ZTOT_RIDRYH(:) +ZRIDRYH(:) *ZMAXTIME(:) - ZTOT_RSDRYH(:)= ZTOT_RSDRYH(:) +ZRSDRYH(:) *ZMAXTIME(:) - ZTOT_RRDRYH(:)= ZTOT_RRDRYH(:) +ZRRDRYH(:) *ZMAXTIME(:) - ZTOT_RGDRYH(:)= ZTOT_RGDRYH(:) +ZRGDRYH(:) *ZMAXTIME(:) - ZTOT_RDRYHG(:)= ZTOT_RDRYHG(:) +ZRDRYHG(:) *ZMAXTIME(:) - ZTOT_RHMLTR(:)= ZTOT_RHMLTR(:) +ZRHMLTR(:) *ZMAXTIME(:) - ZTOT_RIMLTC(:)= ZTOT_RIMLTC(:) +ZRIMLTC_MR(:) - ZTOT_RCBERI(:)= ZTOT_RCBERI(:) +ZRCBERI(:) *ZMAXTIME(:) - ENDIF - ! - !*** 4.5 Next loop - ! - LSOFT=.TRUE. ! We try to adjust tendencies (inner while loop) - ZTIME(:)=ZTIME(:)+ZMAXTIME(:) - ENDDO -ENDDO + !------------------------------------------------------------------------------- ! !* 5. UNPACKING DIAGNOSTICS ! --------------------- ! -IF(IMICRO>0) THEN - ZHLC_HCF3D(:,:,:)=0. - ZHLC_LCF3D(:,:,:)=0. - ZHLC_HRC3D(:,:,:)=0. - ZHLC_LRC3D(:,:,:)=0. - ZHLI_HCF3D(:,:,:)=0. - ZHLI_LCF3D(:,:,:)=0. - ZHLI_HRI3D(:,:,:)=0. - ZHLI_LRI3D(:,:,:)=0. - DO JL=1,IMICRO - ZHLC_HCF3D(I1(JL), I2(JL), I3(JL)) = ZHLC_HCF(JL) - ZHLC_LCF3D(I1(JL), I2(JL), I3(JL)) = ZHLC_LCF(JL) - ZHLC_HRC3D(I1(JL), I2(JL), I3(JL)) = ZHLC_HRC(JL) - ZHLC_LRC3D(I1(JL), I2(JL), I3(JL)) = ZHLC_LRC(JL) - ZHLI_LCF3D(I1(JL), I2(JL), I3(JL)) = ZHLI_LCF(JL) - ZHLI_HCF3D(I1(JL), I2(JL), I3(JL)) = ZHLI_HCF(JL) - ZHLI_HRI3D(I1(JL), I2(JL), I3(JL)) = ZHLI_HRI(JL) - ZHLI_LRI3D(I1(JL), I2(JL), I3(JL)) = ZHLI_LRI(JL) - PCIT(I1(JL), I2(JL), I3(JL)) = ZCIT(JL) - END DO -ELSE - PRAINFR(:,:,:)=0. - ZHLC_HCF3D(:,:,:)=0. - ZHLC_LCF3D(:,:,:)=0. - ZHLC_HRC3D(:,:,:)=0. - ZHLC_LRC3D(:,:,:)=0. - ZHLI_HCF3D(:,:,:)=0. - ZHLI_LCF3D(:,:,:)=0. - ZHLI_HRI3D(:,:,:)=0. - ZHLI_LRI3D(:,:,:)=0. - PCIT(:,:,:) = 0. -ENDIF -IF(OWARM) THEN - PEVAP3D(:,:,:) = 0. - DO JL=1,IMICRO - PEVAP3D(I1(JL), I2(JL), I3(JL)) = ZRREVAV(JL) - END DO -ENDIF -! + DO JL=1, IMICRO + ZCITOUT (I1(JL),I2(JL),I3(JL))=ZCIT (JL) + IF(OWARM) THEN + PEVAP3D(I1(JL),I2(JL),I3(JL))=ZRREVAV(JL) + ENDIF + ZWR(I1(JL),I2(JL),I3(JL),IRV)=ZVART(JL, IRV) + ZWR(I1(JL),I2(JL),I3(JL),IRC)=ZVART(JL, IRC) + ZWR(I1(JL),I2(JL),I3(JL),IRR)=ZVART(JL, IRR) + ZWR(I1(JL),I2(JL),I3(JL),IRI)=ZVART(JL, IRI) + ZWR(I1(JL),I2(JL),I3(JL),IRS)=ZVART(JL, IRS) + ZWR(I1(JL),I2(JL),I3(JL),IRG)=ZVART(JL, IRG) + IF (KRR==7) THEN + ZWR(I1(JL),I2(JL),I3(JL),IRH)=ZVART(JL, IRH) + ENDIF + ENDDO + + ENDDO ! JMICRO +ENDIF ! KSIZE > 0 +PCIT(:,:,:)=ZCITOUT(:,:,:) + +!========================================================================================================== + + ! !* 6. COMPUTES THE SLOW COLD PROCESS SOURCES OUTSIDE OF ODMICRO POINTS ! ---------------------------------------------------------------- ! CALL ICE4_NUCLEATION_WRAPPER(KIT, KJT, KKT, .NOT. ODMICRO, & - PTHT, PPABST, PRHODREF, PEXN, ZZ_LSFACT/PEXN, ZT, & + PTHT, PPABST, PRHODREF, PEXN, ZZ_LSFACT, ZT, & PRVT, & PCIT, ZZ_RVHENI_MR) +! +!------------------------------------------------------------------------------- +! +!* 7. TOTAL TENDENCIES +! ---------------- +! +! +!*** 7.1 total tendencies limited by available species +! DO JK = 1, KKT DO JJ = 1, KJT +!DEC$ IVDEP DO JI = 1, KIT + !LV/LS ZZ_LSFACT(JI,JJ,JK)=ZZ_LSFACT(JI,JJ,JK)/PEXNREF(JI,JJ,JK) ZZ_LVFACT(JI,JJ,JK)=ZZ_LVFACT(JI,JJ,JK)/PEXNREF(JI,JJ,JK) + + !Tendency dure to nucleation on non ODMICRO points ZZ_RVHENI(JI,JJ,JK) = MIN(PRVS(JI,JJ,JK), ZZ_RVHENI_MR(JI,JJ,JK)/PTSTEP) - PRIS(JI,JJ,JK)=PRIS(JI,JJ,JK)+ZZ_RVHENI(JI,JJ,JK) - PRVS(JI,JJ,JK)=PRVS(JI,JJ,JK)-ZZ_RVHENI(JI,JJ,JK) - PTHS(JI,JJ,JK)=PTHS(JI,JJ,JK) + ZZ_RVHENI(JI,JJ,JK)*ZZ_LSFACT(JI,JJ,JK) + + !Hydrometeor tendencies is the difference between old state and new state (can be negative) + ZWR(JI,JJ,JK,IRV)=(ZWR(JI,JJ,JK,IRV)-PRVT(JI,JJ,JK))*ZINV_TSTEP + ZWR(JI,JJ,JK,IRC)=(ZWR(JI,JJ,JK,IRC)-PRCT(JI,JJ,JK))*ZINV_TSTEP + ZWR(JI,JJ,JK,IRR)=(ZWR(JI,JJ,JK,IRR)-PRRT(JI,JJ,JK))*ZINV_TSTEP + ZWR(JI,JJ,JK,IRI)=(ZWR(JI,JJ,JK,IRI)-PRIT(JI,JJ,JK))*ZINV_TSTEP + ZWR(JI,JJ,JK,IRS)=(ZWR(JI,JJ,JK,IRS)-PRST(JI,JJ,JK))*ZINV_TSTEP + ZWR(JI,JJ,JK,IRG)=(ZWR(JI,JJ,JK,IRG)-PRGT(JI,JJ,JK))*ZINV_TSTEP + IF(KRR==7) THEN + ZWR(JI,JJ,JK,IRH)=(ZWR(JI,JJ,JK,IRH)-PRHT(JI,JJ,JK))*ZINV_TSTEP + ENDIF + + !Theta tendency computed from hydrometeors tendencies + ZWR(JI,JJ,JK, ITH) = (ZWR(JI,JJ,JK,IRC)+ZWR(JI,JJ,JK,IRR))*ZZ_LVFACT(JI,JJ,JK)+ & + & (ZWR(JI,JJ,JK,IRI)+ZWR(JI,JJ,JK,IRS)+ZWR(JI,JJ,JK,IRG)+ & + & ZWR(JI,JJ,JK,IRH))*ZZ_LSFACT(JI,JJ,JK) + + !We apply these tendencies to the S variables + !including the nucleation part + PTHS(JI,JJ,JK) = PTHS(JI,JJ,JK) + ZWR(JI,JJ,JK,ITH)+ZZ_RVHENI(JI,JJ,JK)*ZZ_LSFACT(JI,JJ,JK) + PRVS(JI,JJ,JK) = PRVS(JI,JJ,JK) + ZWR(JI,JJ,JK,IRV)-ZZ_RVHENI(JI,JJ,JK) + PRCS(JI,JJ,JK) = PRCS(JI,JJ,JK) + ZWR(JI,JJ,JK,IRC) + PRRS(JI,JJ,JK) = PRRS(JI,JJ,JK) + ZWR(JI,JJ,JK,IRR) + PRIS(JI,JJ,JK) = PRIS(JI,JJ,JK) + ZWR(JI,JJ,JK,IRI)+ZZ_RVHENI(JI,JJ,JK) + PRSS(JI,JJ,JK) = PRSS(JI,JJ,JK) + ZWR(JI,JJ,JK,IRS) + PRGS(JI,JJ,JK) = PRGS(JI,JJ,JK) + ZWR(JI,JJ,JK,IRG) + IF (KRR==7) THEN + PRHS(JI,JJ,JK) = PRHS(JI,JJ,JK) + ZWR(JI,JJ,JK,IRH) + ENDIF ENDDO ENDDO ENDDO -! -if ( lbu_enable ) then - !Note: there is an other contribution for HENU later - if ( lbudget_th ) call Budget_store_end( tbudgets(NBUDGET_TH), 'HENU', pths(:, :, :) * prhodj(:, :, :) ) - if ( lbudget_rv ) call Budget_store_end( tbudgets(NBUDGET_RV), 'HENU', prvs(:, :, :) * prhodj(:, :, :) ) - if ( lbudget_ri ) call Budget_store_add( tbudgets(NBUDGET_RI), 'HENU', zz_rvheni(:, :, :) * prhodj(:, :, :) ) -end if -!------------------------------------------------------------------------------- -! -!* 7. UNPACKING AND TOTAL TENDENCIES -! ------------------------------ -! -! -!*** 7.1 total tendencies limited by available species -! -! ZW_??S variables will contain the new S variables values -! -IF(GEXT_TEND) THEN - !Z..T variables contain the exeternal tendency, we substract it - DO JL=1, IMICRO - ZRVT(JL) = ZRVT(JL) - ZEXT_RV(JL) * PTSTEP - ZRCT(JL) = ZRCT(JL) - ZEXT_RC(JL) * PTSTEP - ZRRT(JL) = ZRRT(JL) - ZEXT_RR(JL) * PTSTEP - ZRIT(JL) = ZRIT(JL) - ZEXT_RI(JL) * PTSTEP - ZRST(JL) = ZRST(JL) - ZEXT_RS(JL) * PTSTEP - ZRGT(JL) = ZRGT(JL) - ZEXT_RG(JL) * PTSTEP - ZTHT(JL) = ZTHT(JL) - ZEXT_TH(JL) * PTSTEP - ENDDO - IF (KRR==7) ZRHT(:) = ZRHT(:) - ZEXT_RH(:) * PTSTEP -ENDIF -!Tendencies computed from difference between old state and new state (can be negative) - ZW_RVS(:,:,:) = 0. - ZW_RCS(:,:,:) = 0. - ZW_RRS(:,:,:) = 0. - ZW_RIS(:,:,:) = 0. - ZW_RSS(:,:,:) = 0. - ZW_RGS(:,:,:) = 0. - ZW_RHS(:,:,:) = 0. - DO JL=1,IMICRO - ZW_RVS(I1(JL), I2(JL), I3(JL)) = ( ZRVT(JL) - PRVT(I1(JL), I2(JL), I3(JL)) ) * ZINV_TSTEP - ZW_RCS(I1(JL), I2(JL), I3(JL)) = ( ZRCT(JL) - PRCT(I1(JL), I2(JL), I3(JL)) ) * ZINV_TSTEP - ZW_RRS(I1(JL), I2(JL), I3(JL)) = ( ZRRT(JL) - PRRT(I1(JL), I2(JL), I3(JL)) ) * ZINV_TSTEP - ZW_RIS(I1(JL), I2(JL), I3(JL)) = ( ZRIT(JL) - PRIT(I1(JL), I2(JL), I3(JL)) ) * ZINV_TSTEP - ZW_RSS(I1(JL), I2(JL), I3(JL)) = ( ZRST(JL) - PRST(I1(JL), I2(JL), I3(JL)) ) * ZINV_TSTEP - ZW_RGS(I1(JL), I2(JL), I3(JL)) = ( ZRGT(JL) - PRGT(I1(JL), I2(JL), I3(JL)) ) * ZINV_TSTEP - END DO - IF(KRR==7) THEN - DO JL=1,IMICRO - ZW_RHS(I1(JL), I2(JL), I3(JL)) = ( ZRHT(JL) - PRHT(I1(JL), I2(JL), I3(JL)) ) * ZINV_TSTEP - END DO -END IF -ZW_THS(:,:,:) = (ZW_RCS(:,:,:)+ZW_RRS(:,:,:) )*ZZ_LVFACT(:,:,:) + & - & (ZW_RIS(:,:,:)+ZW_RSS(:,:,:)+ZW_RGS(:,:,:)+ZW_RHS(:,:,:))*ZZ_LSFACT(:,:,:) -!We apply these tendencies to the S variables -ZW_RVS(:,:,:) = PRVS(:,:,:) + ZW_RVS(:,:,:) -ZW_RCS(:,:,:) = PRCS(:,:,:) + ZW_RCS(:,:,:) -ZW_RRS(:,:,:) = PRRS(:,:,:) + ZW_RRS(:,:,:) -ZW_RIS(:,:,:) = PRIS(:,:,:) + ZW_RIS(:,:,:) -ZW_RSS(:,:,:) = PRSS(:,:,:) + ZW_RSS(:,:,:) -ZW_RGS(:,:,:) = PRGS(:,:,:) + ZW_RGS(:,:,:) -IF(KRR==7) ZW_RHS(:,:,:) = PRHS(:,:,:) + ZW_RHS(:,:,:) -ZW_THS(:,:,:) = PTHS(:,:,:) + ZW_THS(:,:,:) - -if ( lbu_enable ) then - if ( lbudget_th ) call Budget_store_init( tbudgets(NBUDGET_TH), 'CORR', zw_ths(:, :, :) * prhodj(:, :, :) ) - if ( lbudget_rv ) call Budget_store_init( tbudgets(NBUDGET_RV), 'CORR', zw_rvs(:, :, :) * prhodj(:, :, :) ) - if ( lbudget_rc ) call Budget_store_init( tbudgets(NBUDGET_RC), 'CORR', zw_rcs(:, :, :) * prhodj(:, :, :) ) - if ( lbudget_rr ) call Budget_store_init( tbudgets(NBUDGET_RR), 'CORR', zw_rrs(:, :, :) * prhodj(:, :, :) ) - if ( lbudget_ri ) call Budget_store_init( tbudgets(NBUDGET_RI), 'CORR', zw_ris(:, :, :) * prhodj(:, :, :) ) - if ( lbudget_rs ) call Budget_store_init( tbudgets(NBUDGET_RS), 'CORR', zw_rss(:, :, :) * prhodj(:, :, :) ) - if ( lbudget_rg ) call Budget_store_init( tbudgets(NBUDGET_RG), 'CORR', zw_rgs(:, :, :) * prhodj(:, :, :) ) - if ( lbudget_rh ) call Budget_store_init( tbudgets(NBUDGET_RH), 'CORR', zw_rhs(:, :, :) * prhodj(:, :, :) ) -end if -!We correct negativities with conservation -CALL CORRECT_NEGATIVITIES(KIT, KJT, KKT, KRR, ZW_RVS, ZW_RCS, ZW_RRS, & - &ZW_RIS, ZW_RSS, ZW_RGS, & - &ZW_THS, ZZ_LVFACT, ZZ_LSFACT, ZW_RHS) - -if ( lbu_enable ) then - if ( lbudget_th ) call Budget_store_end( tbudgets(NBUDGET_TH), 'CORR', zw_ths(:, :, :) * prhodj(:, :, :) ) - if ( lbudget_rv ) call Budget_store_end( tbudgets(NBUDGET_RV), 'CORR', zw_rvs(:, :, :) * prhodj(:, :, :) ) - if ( lbudget_rc ) call Budget_store_end( tbudgets(NBUDGET_RC), 'CORR', zw_rcs(:, :, :) * prhodj(:, :, :) ) - if ( lbudget_rr ) call Budget_store_end( tbudgets(NBUDGET_RR), 'CORR', zw_rrs(:, :, :) * prhodj(:, :, :) ) - if ( lbudget_ri ) call Budget_store_end( tbudgets(NBUDGET_RI), 'CORR', zw_ris(:, :, :) * prhodj(:, :, :) ) - if ( lbudget_rs ) call Budget_store_end( tbudgets(NBUDGET_RS), 'CORR', zw_rss(:, :, :) * prhodj(:, :, :) ) - if ( lbudget_rg ) call Budget_store_end( tbudgets(NBUDGET_RG), 'CORR', zw_rgs(:, :, :) * prhodj(:, :, :) ) - if ( lbudget_rh ) call Budget_store_end( tbudgets(NBUDGET_RH), 'CORR', zw_rhs(:, :, :) * prhodj(:, :, :) ) -end if ! !*** 7.2 LBU_ENABLE case ! IF(LBU_ENABLE) THEN - allocate( zw1( size( pexnref, 1 ), size( pexnref, 2 ), size( pexnref, 3 ) ) ) - allocate( zw2( size( pexnref, 1 ), size( pexnref, 2 ), size( pexnref, 3 ) ) ) - allocate( zw3( size( pexnref, 1 ), size( pexnref, 2 ), size( pexnref, 3 ) ) ) - allocate( zw4( size( pexnref, 1 ), size( pexnref, 2 ), size( pexnref, 3 ) ) ) - if ( krr == 7 ) then - allocate( zw5( size( pexnref, 1 ), size( pexnref, 2 ), size( pexnref, 3 ) ) ) - allocate( zw6( size( pexnref, 1 ), size( pexnref, 2 ), size( pexnref, 3 ) ) ) - end if - - if ( lbudget_th ) then - allocate( zz_diff( size( zz_lsfact, 1 ), size( zz_lsfact, 2 ), size( zz_lsfact, 3 ) ) ) - zz_diff(:, :, :) = zz_lsfact(:, :, :) - zz_lvfact(:, :, :) - end if + IF (LBUDGET_TH) THEN + ZZ_DIFF(:, :, :) = ZZ_LSFACT(:, :, :) - ZZ_LVFACT(:, :, :) + END IF ZW(:,:,:) = 0. - DO JL=1,IMICRO - ZW(I1(JL), I2(JL), I3(JL)) = ZTOT_RVHENI(JL) * ZINV_TSTEP + DO JL=1, KSIZE + ZW(I1TOT(JL), I2TOT(JL), I3TOT(JL)) = ZTOT_RVHENI(JL) * ZINV_TSTEP END DO - if ( lbudget_th ) call Budget_store_add( tbudgets(NBUDGET_TH), 'HENU', zw(:, :, :) * zz_lsfact(:, :, :) * prhodj(:, :, :) ) - if ( lbudget_rv ) call Budget_store_add( tbudgets(NBUDGET_RV), 'HENU', -zw(:, :, :) * prhodj(:, :, :) ) - if ( lbudget_ri ) call Budget_store_add( tbudgets(NBUDGET_RI), 'HENU', zw(:, :, :) * prhodj(:, :, :) ) + ZW(:,:,:)=ZW(:,:,:)+ZZ_RVHENI + IF (LBUDGET_TH) CALL BUDGET_STORE_ADD(TBUDGETS(NBUDGET_TH), 'HENU', ZW(:, :, :)*ZZ_LSFACT(:, :, :)*PRHODJ(:, :, :)) + IF (LBUDGET_RV) CALL BUDGET_STORE_ADD(TBUDGETS(NBUDGET_RV), 'HENU', -ZW(:, :, :) *PRHODJ(:, :, :)) + IF (LBUDGET_RI) CALL BUDGET_STORE_ADD(TBUDGETS(NBUDGET_RI), 'HENU', ZW(:, :, :) *PRHODJ(:, :, :)) ZW(:,:,:) = 0. - DO JL=1,IMICRO - ZW(I1(JL), I2(JL), I3(JL)) = ZTOT_RCHONI(JL) * ZINV_TSTEP + DO JL=1, KSIZE + ZW(I1TOT(JL), I2TOT(JL), I3TOT(JL)) = ZTOT_RCHONI(JL) * ZINV_TSTEP END DO - if ( lbudget_th ) call Budget_store_add( tbudgets(NBUDGET_TH), 'HON', zw(:, :, :) * zz_diff(:, :, :) * prhodj(:, :, :) ) - if ( lbudget_rc ) call Budget_store_add( tbudgets(NBUDGET_RC), 'HON', -zw(:, :, :) * prhodj(:, :, :) ) - if ( lbudget_ri ) call Budget_store_add( tbudgets(NBUDGET_RI), 'HON', zw(:, :, :) * prhodj(:, :, :) ) + IF (LBUDGET_TH) CALL BUDGET_STORE_ADD(TBUDGETS(NBUDGET_TH), 'HON', ZW(:, :, :)*ZZ_DIFF(:, :, :)*PRHODJ(:, :, :)) + IF (LBUDGET_RC) CALL BUDGET_STORE_ADD(TBUDGETS(NBUDGET_RC), 'HON', -ZW(:, :, :) *PRHODJ(:, :, :)) + IF (LBUDGET_RI) CALL BUDGET_STORE_ADD(TBUDGETS(NBUDGET_RI), 'HON', ZW(:, :, :) *PRHODJ(:, :, :)) ZW(:,:,:) = 0. - DO JL=1,IMICRO - ZW(I1(JL), I2(JL), I3(JL)) = ZTOT_RRHONG(JL) * ZINV_TSTEP + DO JL=1, KSIZE + ZW(I1TOT(JL), I2TOT(JL), I3TOT(JL)) = ZTOT_RRHONG(JL) * ZINV_TSTEP END DO - if ( lbudget_th ) call Budget_store_add( tbudgets(NBUDGET_TH), 'SFR', zw(:, :, :) * zz_diff(:, :, :) * prhodj(:, :, :) ) - if ( lbudget_rr ) call Budget_store_add( tbudgets(NBUDGET_RR), 'SFR', -zw(:, :, :) * prhodj(:, :, :) ) - if ( lbudget_rg ) call Budget_store_add( tbudgets(NBUDGET_RG), 'SFR', zw(:, :, :) * prhodj(:, :, :) ) + IF (LBUDGET_TH) CALL BUDGET_STORE_ADD(TBUDGETS(NBUDGET_TH), 'SFR', ZW(:, :, :)*ZZ_DIFF(:, :, :)*PRHODJ(:, :, :)) + IF (LBUDGET_RR) CALL BUDGET_STORE_ADD(TBUDGETS(NBUDGET_RR), 'SFR', -ZW(:, :, :) *PRHODJ(:, :, :)) + IF (LBUDGET_RG) CALL BUDGET_STORE_ADD(TBUDGETS(NBUDGET_RG), 'SFR', ZW(:, :, :) *PRHODJ(:, :, :)) ZW(:,:,:) = 0. - DO JL=1,IMICRO - ZW(I1(JL), I2(JL), I3(JL)) = ZTOT_RVDEPS(JL) * ZINV_TSTEP + DO JL=1, KSIZE + ZW(I1TOT(JL), I2TOT(JL), I3TOT(JL)) = ZTOT_RVDEPS(JL) * ZINV_TSTEP END DO - if ( lbudget_th ) call Budget_store_add( tbudgets(NBUDGET_TH), 'DEPS', zw(:, :, :) * zz_lsfact(:, :, :) * prhodj(:, :, :) ) - if ( lbudget_rv ) call Budget_store_add( tbudgets(NBUDGET_RV), 'DEPS', -zw(:, :, :) * prhodj(:, :, :) ) - if ( lbudget_rs ) call Budget_store_add( tbudgets(NBUDGET_RS), 'DEPS', zw(:, :, :) * prhodj(:, :, :) ) + IF (LBUDGET_TH) CALL BUDGET_STORE_ADD(TBUDGETS(NBUDGET_TH), 'DEPS', ZW(:, :, :)*ZZ_LSFACT(:, :, :)*PRHODJ(:, :, :)) + IF (LBUDGET_RV) CALL BUDGET_STORE_ADD(TBUDGETS(NBUDGET_RV), 'DEPS', -ZW(:, :, :) *PRHODJ(:, :, :)) + IF (LBUDGET_RS) CALL BUDGET_STORE_ADD(TBUDGETS(NBUDGET_RS), 'DEPS', ZW(:, :, :) *PRHODJ(:, :, :)) ZW(:,:,:) = 0. - DO JL=1,IMICRO - ZW(I1(JL), I2(JL), I3(JL)) = ZTOT_RIAGGS(JL) * ZINV_TSTEP + DO JL=1, KSIZE + ZW(I1TOT(JL), I2TOT(JL), I3TOT(JL)) = ZTOT_RIAGGS(JL) * ZINV_TSTEP END DO - if ( lbudget_ri ) call Budget_store_add( tbudgets(NBUDGET_RI), 'AGGS', -zw(:, :, :) * prhodj(:, :, :) ) - if ( lbudget_rs ) call Budget_store_add( tbudgets(NBUDGET_RS), 'AGGS', zw(:, :, :) * prhodj(:, :, :) ) + IF (LBUDGET_RI) CALL BUDGET_STORE_ADD(TBUDGETS(NBUDGET_RI), 'AGGS', -ZW(:, :, :)*PRHODJ(:, :, :)) + IF (LBUDGET_RS) CALL BUDGET_STORE_ADD(TBUDGETS(NBUDGET_RS), 'AGGS', ZW(:, :, :)*PRHODJ(:, :, :)) ZW(:,:,:) = 0. - DO JL=1,IMICRO - ZW(I1(JL), I2(JL), I3(JL)) = ZTOT_RIAUTS(JL) * ZINV_TSTEP + DO JL=1, KSIZE + ZW(I1TOT(JL), I2TOT(JL), I3TOT(JL)) = ZTOT_RIAUTS(JL) * ZINV_TSTEP END DO - if ( lbudget_ri ) call Budget_store_add( tbudgets(NBUDGET_RI), 'AUTS', -zw(:, :, :) * prhodj(:, :, :) ) - if ( lbudget_rs ) call Budget_store_add( tbudgets(NBUDGET_RS), 'AUTS', zw(:, :, :) * prhodj(:, :, :) ) + IF (LBUDGET_RI) CALL BUDGET_STORE_ADD(TBUDGETS(NBUDGET_RI), 'AUTS', -ZW(:, :, :)*PRHODJ(:, :, :)) + IF (LBUDGET_RS) CALL BUDGET_STORE_ADD(TBUDGETS(NBUDGET_RS), 'AUTS', ZW(:, :, :)*PRHODJ(:, :, :)) ZW(:,:,:) = 0. - DO JL=1,IMICRO - ZW(I1(JL), I2(JL), I3(JL)) = ZTOT_RVDEPG(JL) * ZINV_TSTEP + DO JL=1, KSIZE + ZW(I1TOT(JL), I2TOT(JL), I3TOT(JL)) = ZTOT_RVDEPG(JL) * ZINV_TSTEP END DO - if ( lbudget_th ) call Budget_store_add( tbudgets(NBUDGET_TH), 'DEPG', zw(:, :, :) * zz_lsfact(:, :, :) * prhodj(:, :, :) ) - if ( lbudget_rv ) call Budget_store_add( tbudgets(NBUDGET_RV), 'DEPG', -zw(:, :, :) * prhodj(:, :, :) ) - if ( lbudget_rg ) call Budget_store_add( tbudgets(NBUDGET_RG), 'DEPG', zw(:, :, :) * prhodj(:, :, :) ) + IF (LBUDGET_TH) CALL BUDGET_STORE_ADD(TBUDGETS(NBUDGET_TH), 'DEPG', ZW(:, :, :)*ZZ_LSFACT(:, :, :)*PRHODJ(:, :, :)) + IF (LBUDGET_RV) CALL BUDGET_STORE_ADD(TBUDGETS(NBUDGET_RV), 'DEPG', -ZW(:, :, :) *PRHODJ(:, :, :)) + IF (LBUDGET_RG) CALL BUDGET_STORE_ADD(TBUDGETS(NBUDGET_RG), 'DEPG', ZW(:, :, :) *PRHODJ(:, :, :)) IF(OWARM) THEN ZW(:,:,:) = 0. - DO JL=1,IMICRO - ZW(I1(JL), I2(JL), I3(JL)) = ZTOT_RCAUTR(JL) * ZINV_TSTEP + DO JL=1, KSIZE + ZW(I1TOT(JL), I2TOT(JL), I3TOT(JL)) = ZTOT_RCAUTR(JL) * ZINV_TSTEP END DO - if ( lbudget_rc ) call Budget_store_add( tbudgets(NBUDGET_RC), 'AUTO', -zw(:, :, :) * prhodj(:, :, :) ) - if ( lbudget_rr ) call Budget_store_add( tbudgets(NBUDGET_RR), 'AUTO', zw(:, :, :) * prhodj(:, :, :) ) + IF (LBUDGET_RC) CALL BUDGET_STORE_ADD(TBUDGETS(NBUDGET_RC), 'AUTO', -ZW(:, :, :)*PRHODJ(:, :, :)) + IF (LBUDGET_RR) CALL BUDGET_STORE_ADD(TBUDGETS(NBUDGET_RR), 'AUTO', ZW(:, :, :)*PRHODJ(:, :, :)) ZW(:,:,:) = 0. - DO JL=1,IMICRO - ZW(I1(JL), I2(JL), I3(JL)) = ZTOT_RCACCR(JL) * ZINV_TSTEP + DO JL=1, KSIZE + ZW(I1TOT(JL), I2TOT(JL), I3TOT(JL)) = ZTOT_RCACCR(JL) * ZINV_TSTEP END DO - if ( lbudget_rc ) call Budget_store_add( tbudgets(NBUDGET_RC), 'ACCR', -zw(:, :, :) * prhodj(:, :, :) ) - if ( lbudget_rr ) call Budget_store_add( tbudgets(NBUDGET_RR), 'ACCR', zw(:, :, :) * prhodj(:, :, :) ) + IF (LBUDGET_RC) CALL BUDGET_STORE_ADD(TBUDGETS(NBUDGET_RC), 'ACCR', -ZW(:, :, :)*PRHODJ(:, :, :)) + IF (LBUDGET_RR) CALL BUDGET_STORE_ADD(TBUDGETS(NBUDGET_RR), 'ACCR', ZW(:, :, :)*PRHODJ(:, :, :)) ZW(:,:,:) = 0. - DO JL=1,IMICRO - ZW(I1(JL), I2(JL), I3(JL)) = ZTOT_RREVAV(JL) * ZINV_TSTEP + DO JL=1, KSIZE + ZW(I1TOT(JL), I2TOT(JL), I3TOT(JL)) = ZTOT_RREVAV(JL) * ZINV_TSTEP END DO - if ( lbudget_th ) call Budget_store_add( tbudgets(NBUDGET_TH), 'REVA', -zw(:, :, :) * zz_lvfact(:, :, :) * prhodj(:, :, :) ) - if ( lbudget_rv ) call Budget_store_add( tbudgets(NBUDGET_RV), 'REVA', zw(:, :, :) * prhodj(:, :, :) ) - if ( lbudget_rr ) call Budget_store_add( tbudgets(NBUDGET_RR), 'REVA', -zw(:, :, :) * prhodj(:, :, :) ) + IF (LBUDGET_TH) CALL BUDGET_STORE_ADD(TBUDGETS(NBUDGET_TH), 'REVA', -ZW(:, :, :)*ZZ_LVFACT(:, :, :)*PRHODJ(:, :, :)) + IF (LBUDGET_RV) CALL BUDGET_STORE_ADD(TBUDGETS(NBUDGET_RV), 'REVA', ZW(:, :, :) *PRHODJ(:, :, :)) + IF (LBUDGET_RR) CALL BUDGET_STORE_ADD(TBUDGETS(NBUDGET_RR), 'REVA', -ZW(:, :, :) *PRHODJ(:, :, :)) ENDIF ZW1(:,:,:) = 0. - DO JL=1,IMICRO - ZW1(I1(JL), I2(JL), I3(JL)) = ZTOT_RCRIMSS(JL) * ZINV_TSTEP + DO JL=1, KSIZE + ZW1(I1TOT(JL), I2TOT(JL), I3TOT(JL)) = ZTOT_RCRIMSS(JL) * ZINV_TSTEP END DO ZW2(:,:,:) = 0. - DO JL=1,IMICRO - ZW2(I1(JL), I2(JL), I3(JL)) = ZTOT_RCRIMSG(JL) * ZINV_TSTEP + DO JL=1, KSIZE + ZW2(I1TOT(JL), I2TOT(JL), I3TOT(JL)) = ZTOT_RCRIMSG(JL) * ZINV_TSTEP END DO ZW3(:,:,:) = 0. - DO JL=1,IMICRO - ZW3(I1(JL), I2(JL), I3(JL)) = ZTOT_RSRIMCG(JL) * ZINV_TSTEP + DO JL=1, KSIZE + ZW3(I1TOT(JL), I2TOT(JL), I3TOT(JL)) = ZTOT_RSRIMCG(JL) * ZINV_TSTEP END DO - if ( lbudget_th ) & - call Budget_store_add( tbudgets(NBUDGET_TH), 'RIM', ( zw1(:, :, :) + zw2(:, :, :) ) * zz_diff(:, :, :) * prhodj(:, :, :) ) - if ( lbudget_rc ) call Budget_store_add( tbudgets(NBUDGET_RC), 'RIM', ( -zw1(:, :, :) - zw2(:, :, :) ) * prhodj(:, :, :) ) - if ( lbudget_rs ) call Budget_store_add( tbudgets(NBUDGET_RS), 'RIM', ( zw1(:, :, :) - zw3(:, :, :) ) * prhodj(:, :, :) ) - if ( lbudget_rg ) call Budget_store_add( tbudgets(NBUDGET_RG), 'RIM', ( zw2(:, :, :) + zw3(:, :, :) ) * prhodj(:, :, :) ) + IF (LBUDGET_TH) & + CALL BUDGET_STORE_ADD(TBUDGETS(NBUDGET_TH), 'RIM', (ZW1(:, :, :)+ZW2(:, :, :))*ZZ_DIFF(:, :, :)*PRHODJ(:, :, :)) + IF (LBUDGET_RC) CALL BUDGET_STORE_ADD(TBUDGETS(NBUDGET_RC), 'RIM', (-ZW1(:, :, :)-ZW2(:, :, :))*PRHODJ(:, :, :)) + IF (LBUDGET_RS) CALL BUDGET_STORE_ADD(TBUDGETS(NBUDGET_RS), 'RIM', ( ZW1(:, :, :)-ZW3(:, :, :))*PRHODJ(:, :, :)) + IF (LBUDGET_RG) CALL BUDGET_STORE_ADD(TBUDGETS(NBUDGET_RG), 'RIM', ( ZW2(:, :, :)+ZW3(:, :, :))*PRHODJ(:, :, :)) ZW1(:,:,:) = 0. - DO JL=1,IMICRO - ZW1(I1(JL), I2(JL), I3(JL)) = ZTOT_RRACCSS(JL) * ZINV_TSTEP + DO JL=1, KSIZE + ZW1(I1TOT(JL), I2TOT(JL), I3TOT(JL)) = ZTOT_RRACCSS(JL) * ZINV_TSTEP END DO ZW2(:,:,:) = 0. - DO JL=1,IMICRO - ZW2(I1(JL), I2(JL), I3(JL)) = ZTOT_RRACCSG(JL) * ZINV_TSTEP + DO JL=1, KSIZE + ZW2(I1TOT(JL), I2TOT(JL), I3TOT(JL)) = ZTOT_RRACCSG(JL) * ZINV_TSTEP END DO ZW3(:,:,:) = 0. - DO JL=1,IMICRO - ZW3(I1(JL), I2(JL), I3(JL)) = ZTOT_RSACCRG(JL) * ZINV_TSTEP + DO JL=1, KSIZE + ZW3(I1TOT(JL), I2TOT(JL), I3TOT(JL)) = ZTOT_RSACCRG(JL) * ZINV_TSTEP END DO - if ( lbudget_th ) & - call Budget_store_add( tbudgets(NBUDGET_TH), 'ACC', ( zw1(:, :, :) + zw2(:, :, :) ) * zz_diff(:, :, :) * prhodj(:, :, :) ) - if ( lbudget_rr ) call Budget_store_add( tbudgets(NBUDGET_RR), 'ACC', ( -zw1(:, :, :) - zw2(:, :, :) ) * prhodj(:, :, :) ) - if ( lbudget_rs ) call Budget_store_add( tbudgets(NBUDGET_RS), 'ACC', ( zw1(:, :, :) - zw3(:, :, :) ) * prhodj(:, :, :) ) - if ( lbudget_rg ) call Budget_store_add( tbudgets(NBUDGET_RG), 'ACC', ( zw2(:, :, :) + zw3(:, :, :) ) * prhodj(:, :, :) ) + IF (LBUDGET_TH) & + CALL BUDGET_STORE_ADD(TBUDGETS(NBUDGET_TH), 'ACC', (ZW1(:, :, :)+ZW2(:, :, :) )*ZZ_DIFF(:, :, :)*PRHODJ(:, :, :)) + IF (LBUDGET_RR) CALL BUDGET_STORE_ADD(TBUDGETS(NBUDGET_RR), 'ACC', (-ZW1(:, :, :)-ZW2(:, :, :))*PRHODJ(:, :, :)) + IF (LBUDGET_RS) CALL BUDGET_STORE_ADD(TBUDGETS(NBUDGET_RS), 'ACC', ( ZW1(:, :, :)-ZW3(:, :, :))*PRHODJ(:, :, :)) + IF (LBUDGET_RG) CALL BUDGET_STORE_ADD(TBUDGETS(NBUDGET_RG), 'ACC', ( ZW2(:, :, :)+ZW3(:, :, :))*PRHODJ(:, :, :)) ZW(:,:,:) = 0. - DO JL=1,IMICRO - ZW(I1(JL), I2(JL), I3(JL)) = ZTOT_RSMLTG(JL) * ZINV_TSTEP + DO JL=1, KSIZE + ZW(I1TOT(JL), I2TOT(JL), I3TOT(JL)) = ZTOT_RSMLTG(JL) * ZINV_TSTEP END DO - if ( lbudget_rs ) call Budget_store_add( tbudgets(NBUDGET_RS), 'CMEL', -zw(:, :, :) * prhodj(:, :, :) ) - if ( lbudget_rg ) call Budget_store_add( tbudgets(NBUDGET_RG), 'CMEL', zw(:, :, :) * prhodj(:, :, :) ) + IF (LBUDGET_RS) CALL BUDGET_STORE_ADD(TBUDGETS(NBUDGET_RS), 'CMEL', -ZW(:, :, :)*PRHODJ(:, :, :)) + IF (LBUDGET_RG) CALL BUDGET_STORE_ADD(TBUDGETS(NBUDGET_RG), 'CMEL', ZW(:, :, :)*PRHODJ(:, :, :)) ZW(:,:,:) = 0. - DO JL=1,IMICRO - ZW(I1(JL), I2(JL), I3(JL)) = ZTOT_RCMLTSR(JL) * ZINV_TSTEP + DO JL=1, KSIZE + ZW(I1TOT(JL), I2TOT(JL), I3TOT(JL)) = ZTOT_RCMLTSR(JL) * ZINV_TSTEP END DO - if ( lbudget_rc ) call Budget_store_add( tbudgets(NBUDGET_RC), 'CMEL', -zw(:, :, :) * prhodj(:, :, :) ) - if ( lbudget_rr ) call Budget_store_add( tbudgets(NBUDGET_RR), 'CMEL', zw(:, :, :) * prhodj(:, :, :) ) + IF (LBUDGET_RC) CALL BUDGET_STORE_ADD(TBUDGETS(NBUDGET_RC), 'CMEL', -ZW(:, :, :)*PRHODJ(:, :, :)) + IF (LBUDGET_RR) CALL BUDGET_STORE_ADD(TBUDGETS(NBUDGET_RR), 'CMEL', ZW(:, :, :)*PRHODJ(:, :, :)) ZW1(:,:,:) = 0. - DO JL=1,IMICRO - ZW1(I1(JL), I2(JL), I3(JL)) = ZTOT_RICFRRG(JL) * ZINV_TSTEP + DO JL=1, KSIZE + ZW1(I1TOT(JL), I2TOT(JL), I3TOT(JL)) = ZTOT_RICFRRG(JL) * ZINV_TSTEP END DO ZW2(:,:,:) = 0. - DO JL=1,IMICRO - ZW2(I1(JL), I2(JL), I3(JL)) = ZTOT_RRCFRIG(JL) * ZINV_TSTEP + DO JL=1, KSIZE + ZW2(I1TOT(JL), I2TOT(JL), I3TOT(JL)) = ZTOT_RRCFRIG(JL) * ZINV_TSTEP END DO ZW3(:,:,:) = 0. - DO JL=1,IMICRO - ZW3(I1(JL), I2(JL), I3(JL)) = ZTOT_RICFRR(JL) * ZINV_TSTEP + DO JL=1, KSIZE + ZW3(I1TOT(JL), I2TOT(JL), I3TOT(JL)) = ZTOT_RICFRR(JL) * ZINV_TSTEP END DO - if ( lbudget_th ) & - call Budget_store_add( tbudgets(NBUDGET_TH), 'CFRZ', zw2(:, :, :) * zz_diff(:, :, :) * prhodj(:, :, :) ) - if ( lbudget_rr ) call Budget_store_add( tbudgets(NBUDGET_RR), 'CFRZ', ( -zw2(:, :, :) + zw3(:, :, :) ) * prhodj(:, :, :) ) - if ( lbudget_ri ) call Budget_store_add( tbudgets(NBUDGET_RI), 'CFRZ', ( -zw1(:, :, :) - zw3(:, :, :) ) * prhodj(:, :, :) ) - if ( lbudget_rg ) call Budget_store_add( tbudgets(NBUDGET_RG), 'CFRZ', ( zw1(:, :, :) + zw2(:, :, :) ) * prhodj(:, :, :) ) + IF (LBUDGET_TH) & + CALL BUDGET_STORE_ADD(TBUDGETS(NBUDGET_TH), 'CFRZ', ZW2(:, :, :)*ZZ_DIFF(:, :, :)*PRHODJ(:, :, :)) + IF (LBUDGET_RR) CALL BUDGET_STORE_ADD(TBUDGETS(NBUDGET_RR), 'CFRZ', (-ZW2(:, :, :)+ZW3(:, :, :))*PRHODJ(:, :, :)) + IF (LBUDGET_RI) CALL BUDGET_STORE_ADD(TBUDGETS(NBUDGET_RI), 'CFRZ', (-ZW1(:, :, :)-ZW3(:, :, :))*PRHODJ(:, :, :)) + IF (LBUDGET_RG) CALL BUDGET_STORE_ADD(TBUDGETS(NBUDGET_RG), 'CFRZ', ( ZW1(:, :, :)+ZW2(:, :, :))*PRHODJ(:, :, :)) ZW1(:,:,:) = 0. - DO JL=1,IMICRO - ZW1(I1(JL), I2(JL), I3(JL)) = ZTOT_RCWETG(JL) * ZINV_TSTEP + DO JL=1, KSIZE + ZW1(I1TOT(JL), I2TOT(JL), I3TOT(JL)) = ZTOT_RCWETG(JL) * ZINV_TSTEP END DO ZW2(:,:,:) = 0. - DO JL=1,IMICRO - ZW2(I1(JL), I2(JL), I3(JL)) = ZTOT_RRWETG(JL) * ZINV_TSTEP + DO JL=1, KSIZE + ZW2(I1TOT(JL), I2TOT(JL), I3TOT(JL)) = ZTOT_RRWETG(JL) * ZINV_TSTEP END DO ZW3(:,:,:) = 0. - DO JL=1,IMICRO - ZW3(I1(JL), I2(JL), I3(JL)) = ZTOT_RIWETG(JL) * ZINV_TSTEP + DO JL=1, KSIZE + ZW3(I1TOT(JL), I2TOT(JL), I3TOT(JL)) = ZTOT_RIWETG(JL) * ZINV_TSTEP END DO ZW4(:,:,:) = 0. - DO JL=1,IMICRO - ZW4(I1(JL), I2(JL), I3(JL)) = ZTOT_RSWETG(JL) * ZINV_TSTEP + DO JL=1, KSIZE + ZW4(I1TOT(JL), I2TOT(JL), I3TOT(JL)) = ZTOT_RSWETG(JL) * ZINV_TSTEP END DO - if ( lbudget_th ) & - call Budget_store_add( tbudgets(NBUDGET_TH), 'WETG', ( zw1(:, :, :) + zw2(:, :, :) ) * zz_diff(:, :, :) * prhodj(:, :, :) ) - if ( lbudget_rc ) call Budget_store_add( tbudgets(NBUDGET_RC), 'WETG', -zw1(:, :, :) * prhodj(:, :, :) ) - if ( lbudget_rr ) call Budget_store_add( tbudgets(NBUDGET_RR), 'WETG', -zw2(:, :, :) * prhodj(:, :, :) ) - if ( lbudget_ri ) call Budget_store_add( tbudgets(NBUDGET_RI), 'WETG', -zw3(:, :, :) * prhodj(:, :, :) ) - if ( lbudget_rs ) call Budget_store_add( tbudgets(NBUDGET_RS), 'WETG', -zw4(:, :, :) * prhodj(:, :, :) ) - if ( lbudget_rg ) call Budget_store_add( tbudgets(NBUDGET_RG), 'WETG', ( zw1(:, :, :) + zw2(:, :, :) & - + zw3(:, :, :) + zw4(:, :, :) ) & - * prhodj(:, :, :) ) + IF (LBUDGET_TH) & + CALL BUDGET_STORE_ADD(TBUDGETS(NBUDGET_TH), 'WETG', (ZW1(:, :, :)+ZW2(:, :, :))*ZZ_DIFF(:, :, :)*PRHODJ(:, :, :)) + IF (LBUDGET_RC) CALL BUDGET_STORE_ADD(TBUDGETS(NBUDGET_RC), 'WETG', -zw1(:, :, :) *PRHODJ(:, :, :)) + IF (LBUDGET_RR) CALL BUDGET_STORE_ADD(TBUDGETS(NBUDGET_RR), 'WETG', -zw2(:, :, :) *PRHODJ(:, :, :)) + IF (LBUDGET_RI) CALL BUDGET_STORE_ADD(TBUDGETS(NBUDGET_RI), 'WETG', -zw3(:, :, :) *PRHODJ(:, :, :)) + IF (LBUDGET_RS) CALL BUDGET_STORE_ADD(TBUDGETS(NBUDGET_RS), 'WETG', -zw4(:, :, :) *PRHODJ(:, :, :)) + IF (LBUDGET_RG) CALL BUDGET_STORE_ADD(TBUDGETS(NBUDGET_RG), 'WETG', (ZW1(:, :, :)+ZW2(:, :, :)+ZW3(:, :, :)+ZW4(:, :, :)) & + & *PRHODJ(:, :, :)) IF(KRR==7) THEN ZW(:,:,:) = 0. - DO JL=1,IMICRO - ZW(I1(JL), I2(JL), I3(JL)) = ZTOT_RWETGH(JL) * ZINV_TSTEP + DO JL=1, KSIZE + ZW(I1TOT(JL), I2TOT(JL), I3TOT(JL)) = ZTOT_RWETGH(JL) * ZINV_TSTEP END DO - if ( lbudget_rg ) call Budget_store_add( tbudgets(NBUDGET_RG), 'GHCV', -zw(:, :, :) * prhodj(:, :, :) ) - if ( lbudget_rh ) call Budget_store_add( tbudgets(NBUDGET_RH), 'GHCV', zw(:, :, :) * prhodj(:, :, :) ) + IF (LBUDGET_RG) CALL BUDGET_STORE_ADD(TBUDGETS(NBUDGET_RG), 'GHCV', -ZW(:, :, :)*PRHODJ(:, :, :)) + IF (LBUDGET_RH) CALL BUDGET_STORE_ADD(TBUDGETS(NBUDGET_RH), 'GHCV', ZW(:, :, :)*PRHODJ(:, :, :)) END IF ZW1(:,:,:) = 0. - DO JL=1,IMICRO - ZW1(I1(JL), I2(JL), I3(JL)) = ZTOT_RCDRYG(JL) * ZINV_TSTEP + DO JL=1, KSIZE + ZW1(I1TOT(JL), I2TOT(JL), I3TOT(JL)) = ZTOT_RCDRYG(JL) * ZINV_TSTEP END DO ZW2(:,:,:) = 0. - DO JL=1,IMICRO - ZW2(I1(JL), I2(JL), I3(JL)) = ZTOT_RRDRYG(JL) * ZINV_TSTEP + DO JL=1, KSIZE + ZW2(I1TOT(JL), I2TOT(JL), I3TOT(JL)) = ZTOT_RRDRYG(JL) * ZINV_TSTEP END DO ZW3(:,:,:) = 0. - DO JL=1,IMICRO - ZW3(I1(JL), I2(JL), I3(JL)) = ZTOT_RIDRYG(JL) * ZINV_TSTEP + DO JL=1, KSIZE + ZW3(I1TOT(JL), I2TOT(JL), I3TOT(JL)) = ZTOT_RIDRYG(JL) * ZINV_TSTEP END DO ZW4(:,:,:) = 0. - DO JL=1,IMICRO - ZW4(I1(JL), I2(JL), I3(JL)) = ZTOT_RSDRYG(JL) * ZINV_TSTEP + DO JL=1, KSIZE + ZW4(I1TOT(JL), I2TOT(JL), I3TOT(JL)) = ZTOT_RSDRYG(JL) * ZINV_TSTEP END DO - if ( lbudget_th ) & - call Budget_store_add( tbudgets(NBUDGET_TH), 'DRYG', ( zw1(:, :, :) + zw2(:, :, :) ) * zz_diff(:, :, :) * prhodj(:, :, :) ) - if ( lbudget_rc ) call Budget_store_add( tbudgets(NBUDGET_RC), 'DRYG', -zw1(:, :, :) * prhodj(:, :, :) ) - if ( lbudget_rr ) call Budget_store_add( tbudgets(NBUDGET_RR), 'DRYG', -zw2(:, :, :) * prhodj(:, :, :) ) - if ( lbudget_ri ) call Budget_store_add( tbudgets(NBUDGET_RI), 'DRYG', -zw3(:, :, :) * prhodj(:, :, :) ) - if ( lbudget_rs ) call Budget_store_add( tbudgets(NBUDGET_RS), 'DRYG', -zw4(:, :, :) * prhodj(:, :, :) ) - if ( lbudget_rg ) call Budget_store_add( tbudgets(NBUDGET_RG), 'DRYG', ( zw1(:, :, :) + zw2(:, :, :) & - + zw3(:, :, :) + zw4(:, :, :) ) & - * prhodj(:, :, :) ) + IF (LBUDGET_TH) & + CALL BUDGET_STORE_ADD(TBUDGETS(NBUDGET_TH), 'DRYG', (ZW1(:, :, :)+ZW2(:, :, :) )*ZZ_DIFF(:, :, :)*PRHODJ(:, :, :)) + IF (LBUDGET_RC) CALL BUDGET_STORE_ADD(TBUDGETS(NBUDGET_RC), 'DRYG', -zw1(:, :, :) *PRHODJ(:, :, :)) + IF (LBUDGET_RR) CALL BUDGET_STORE_ADD(TBUDGETS(NBUDGET_RR), 'DRYG', -zw2(:, :, :) *PRHODJ(:, :, :)) + IF (LBUDGET_RI) CALL BUDGET_STORE_ADD(TBUDGETS(NBUDGET_RI), 'DRYG', -zw3(:, :, :) *PRHODJ(:, :, :)) + IF (LBUDGET_RS) CALL BUDGET_STORE_ADD(TBUDGETS(NBUDGET_RS), 'DRYG', -zw4(:, :, :) *PRHODJ(:, :, :)) + IF (LBUDGET_RG) CALL BUDGET_STORE_ADD(TBUDGETS(NBUDGET_RG), 'DRYG', (ZW1(:, :, :)+ZW2(:, :, :)+ZW3(:, :, :)+ZW4(:, :, :)) & + & *PRHODJ(:, :, :)) ZW(:,:,:) = 0. - DO JL=1,IMICRO - ZW(I1(JL), I2(JL), I3(JL)) = ZTOT_RGMLTR(JL) * ZINV_TSTEP + DO JL=1, KSIZE + ZW(I1TOT(JL), I2TOT(JL), I3TOT(JL)) = ZTOT_RGMLTR(JL) * ZINV_TSTEP END DO - if ( lbudget_th ) call Budget_store_add( tbudgets(NBUDGET_TH), 'GMLT', -zw(:, :, :) * zz_diff(:, :, :) * prhodj(:, :, :) ) - if ( lbudget_rr ) call Budget_store_add( tbudgets(NBUDGET_RR), 'GMLT', zw(:, :, :) * prhodj(:, :, :) ) - if ( lbudget_rg ) call Budget_store_add( tbudgets(NBUDGET_RG), 'GMLT', -zw(:, :, :) * prhodj(:, :, :) ) + IF (LBUDGET_TH) CALL BUDGET_STORE_ADD(TBUDGETS(NBUDGET_TH), 'GMLT', -ZW(:, :, :)*ZZ_DIFF(:, :, :)*PRHODJ(:, :, :)) + IF (LBUDGET_RR) CALL BUDGET_STORE_ADD(TBUDGETS(NBUDGET_RR), 'GMLT', ZW(:, :, :) *PRHODJ(:, :, :)) + IF (LBUDGET_RG) CALL BUDGET_STORE_ADD(TBUDGETS(NBUDGET_RG), 'GMLT', -ZW(:, :, :) *PRHODJ(:, :, :)) IF(KRR==7) THEN ZW1(:,:,:) = 0. - DO JL=1,IMICRO - ZW1(I1(JL), I2(JL), I3(JL)) = ZTOT_RCWETH(JL) * ZINV_TSTEP + DO JL=1, KSIZE + ZW1(I1TOT(JL), I2TOT(JL), I3TOT(JL)) = ZTOT_RCWETH(JL) * ZINV_TSTEP END DO ZW2(:,:,:) = 0. - DO JL=1,IMICRO - ZW2(I1(JL), I2(JL), I3(JL)) = ZTOT_RRWETH(JL) * ZINV_TSTEP + DO JL=1, KSIZE + ZW2(I1TOT(JL), I2TOT(JL), I3TOT(JL)) = ZTOT_RRWETH(JL) * ZINV_TSTEP END DO ZW3(:,:,:) = 0. - DO JL=1,IMICRO - ZW3(I1(JL), I2(JL), I3(JL)) = ZTOT_RIWETH(JL) * ZINV_TSTEP + DO JL=1, KSIZE + ZW3(I1TOT(JL), I2TOT(JL), I3TOT(JL)) = ZTOT_RIWETH(JL) * ZINV_TSTEP END DO ZW4(:,:,:) = 0. - DO JL=1,IMICRO - ZW4(I1(JL), I2(JL), I3(JL)) = ZTOT_RSWETH(JL) * ZINV_TSTEP + DO JL=1, KSIZE + ZW4(I1TOT(JL), I2TOT(JL), I3TOT(JL)) = ZTOT_RSWETH(JL) * ZINV_TSTEP END DO ZW5(:,:,:) = 0. - DO JL=1,IMICRO - ZW5(I1(JL), I2(JL), I3(JL)) = ZTOT_RGWETH(JL) * ZINV_TSTEP + DO JL=1, KSIZE + ZW5(I1TOT(JL), I2TOT(JL), I3TOT(JL)) = ZTOT_RGWETH(JL) * ZINV_TSTEP END DO - if ( lbudget_th ) & - call Budget_store_add( tbudgets(NBUDGET_TH), 'WETH', ( zw1(:, :, :) + zw2(:, :, :) ) * zz_diff(:, :, :) * prhodj(:, :, :) ) - if ( lbudget_rc ) call Budget_store_add( tbudgets(NBUDGET_RC), 'WETH', -zw1(:, :, :) * prhodj(:, :, :) ) - if ( lbudget_rr ) call Budget_store_add( tbudgets(NBUDGET_RR), 'WETH', -zw2(:, :, :) * prhodj(:, :, :) ) - if ( lbudget_ri ) call Budget_store_add( tbudgets(NBUDGET_RI), 'WETH', -zw3(:, :, :) * prhodj(:, :, :) ) - if ( lbudget_rs ) call Budget_store_add( tbudgets(NBUDGET_RS), 'WETH', -zw4(:, :, :) * prhodj(:, :, :) ) - if ( lbudget_rg ) call Budget_store_add( tbudgets(NBUDGET_RG), 'WETH', -zw5(:, :, :) * prhodj(:, :, :) ) - if ( lbudget_rh ) call Budget_store_add( tbudgets(NBUDGET_RH), 'WETH', ( zw1(:, :, :) + zw2(:, :, :) + zw3(:, :, :) & - + zw4(:, :, :) + zw5(:, :, : ) ) & - * prhodj(:, :, :) ) + IF (LBUDGET_TH) & + CALL BUDGET_STORE_ADD(TBUDGETS(NBUDGET_TH), 'WETH', (ZW1(:, :, :)+ZW2(:, :, :))*ZZ_DIFF(:, :, :)*PRHODJ(:, :, :)) + IF (LBUDGET_RC) CALL BUDGET_STORE_ADD(TBUDGETS(NBUDGET_RC), 'WETH', -ZW1(:, :, :) *PRHODJ(:, :, :)) + IF (LBUDGET_RR) CALL BUDGET_STORE_ADD(TBUDGETS(NBUDGET_RR), 'WETH', -ZW2(:, :, :) *PRHODJ(:, :, :)) + IF (LBUDGET_RI) CALL BUDGET_STORE_ADD(TBUDGETS(NBUDGET_RI), 'WETH', -ZW3(:, :, :) *PRHODJ(:, :, :)) + IF (LBUDGET_RS) CALL BUDGET_STORE_ADD(TBUDGETS(NBUDGET_RS), 'WETH', -ZW4(:, :, :) *PRHODJ(:, :, :)) + IF (LBUDGET_RG) CALL BUDGET_STORE_ADD(TBUDGETS(NBUDGET_RG), 'WETH', -ZW5(:, :, :) *PRHODJ(:, :, :)) + IF (LBUDGET_RH) CALL BUDGET_STORE_ADD(TBUDGETS(NBUDGET_RH), 'WETH', (ZW1(:, :, :)+ZW2(:, :, :)+ZW3(:, :, :)+ & + &ZW4(:, :, :)+ZW5(:, :, : )) *PRHODJ(:, :, :)) ZW(:,:,:) = 0. - DO JL=1,IMICRO - ZW(I1(JL), I2(JL), I3(JL)) = ZTOT_RGWETH(JL) * ZINV_TSTEP + DO JL=1, KSIZE + ZW(I1TOT(JL), I2TOT(JL), I3TOT(JL)) = ZTOT_RGWETH(JL) * ZINV_TSTEP END DO - if ( lbudget_rg ) call Budget_store_add( tbudgets(NBUDGET_RG), 'HGCV', -zw(:, :, :) * prhodj(:, :, :) ) - if ( lbudget_rh ) call Budget_store_add( tbudgets(NBUDGET_RH), 'HGCV', zw(:, :, :) * prhodj(:, :, :) ) + IF (LBUDGET_RG) CALL BUDGET_STORE_ADD(TBUDGETS(NBUDGET_RG), 'HGCV', -ZW(:, :, :)*PRHODJ(:, :, :)) + IF (LBUDGET_RH) CALL BUDGET_STORE_ADD(TBUDGETS(NBUDGET_RH), 'HGCV', ZW(:, :, :)*PRHODJ(:, :, :)) ZW1(:,:,:) = 0. - DO JL=1,IMICRO - ZW1(I1(JL), I2(JL), I3(JL)) = ZTOT_RCDRYH(JL) * ZINV_TSTEP + DO JL=1, KSIZE + ZW1(I1TOT(JL), I2TOT(JL), I3TOT(JL)) = ZTOT_RCDRYH(JL) * ZINV_TSTEP END DO ZW2(:,:,:) = 0. - DO JL=1,IMICRO - ZW2(I1(JL), I2(JL), I3(JL)) = ZTOT_RRDRYH(JL) * ZINV_TSTEP + DO JL=1, KSIZE + ZW2(I1TOT(JL), I2TOT(JL), I3TOT(JL)) = ZTOT_RRDRYH(JL) * ZINV_TSTEP END DO ZW3(:,:,:) = 0. - DO JL=1,IMICRO - ZW3(I1(JL), I2(JL), I3(JL)) = ZTOT_RIDRYH(JL) * ZINV_TSTEP + DO JL=1, KSIZE + ZW3(I1TOT(JL), I2TOT(JL), I3TOT(JL)) = ZTOT_RIDRYH(JL) * ZINV_TSTEP END DO ZW4(:,:,:) = 0. - DO JL=1,IMICRO - ZW4(I1(JL), I2(JL), I3(JL)) = ZTOT_RSDRYH(JL) * ZINV_TSTEP + DO JL=1, KSIZE + ZW4(I1TOT(JL), I2TOT(JL), I3TOT(JL)) = ZTOT_RSDRYH(JL) * ZINV_TSTEP END DO ZW5(:,:,:) = 0. - DO JL=1,IMICRO - ZW5(I1(JL), I2(JL), I3(JL)) = ZTOT_RGDRYH(JL) * ZINV_TSTEP + DO JL=1, KSIZE + ZW5(I1TOT(JL), I2TOT(JL), I3TOT(JL)) = ZTOT_RGDRYH(JL) * ZINV_TSTEP END DO ZW6(:,:,:) = 0. - DO JL=1,IMICRO - ZW6(I1(JL), I2(JL), I3(JL)) = ZTOT_RDRYHG(JL) * ZINV_TSTEP + DO JL=1, KSIZE + ZW6(I1TOT(JL), I2TOT(JL), I3TOT(JL)) = ZTOT_RDRYHG(JL) * ZINV_TSTEP END DO - if ( lbudget_th ) & - call Budget_store_add( tbudgets(NBUDGET_TH), 'DRYH', ( zw1(:, :, :) + zw2(:, :, :) ) * zz_diff(:, :, :) * prhodj(:, :, :) ) - if ( lbudget_rc ) call Budget_store_add( tbudgets(NBUDGET_RC), 'DRYH', -zw1(:, :, :) * prhodj(:, :, :) ) - if ( lbudget_rr ) call Budget_store_add( tbudgets(NBUDGET_RR), 'DRYH', -zw2(:, :, :) * prhodj(:, :, :) ) - if ( lbudget_ri ) call Budget_store_add( tbudgets(NBUDGET_RI), 'DRYH', -zw3(:, :, :) * prhodj(:, :, :) ) - if ( lbudget_rs ) call Budget_store_add( tbudgets(NBUDGET_RS), 'DRYH', -zw4(:, :, :) * prhodj(:, :, :) ) - if ( lbudget_rg ) call Budget_store_add( tbudgets(NBUDGET_RG), 'DRYH', ( -zw5(:, :, :) + zw6(:, :, : ) ) * prhodj(:, :, :) ) - if ( lbudget_rh ) call Budget_store_add( tbudgets(NBUDGET_RH), 'DRYH', ( zw1(:, :, :) + zw2(:, :, :) + zw3(:, :, :) & - + zw4(:, :, :) + zw5(:, :, : )- zw6(:, :, :) ) & - * prhodj(:, :, :) ) + IF (LBUDGET_TH) & + CALL BUDGET_STORE_ADD(TBUDGETS(NBUDGET_TH), 'DRYH', (ZW1(:, :, :)+ZW2(:, :, :))*ZZ_DIFF(:, :, :)*PRHODJ(:, :, :)) + IF (LBUDGET_RC) CALL BUDGET_STORE_ADD(TBUDGETS(NBUDGET_RC), 'DRYH', -ZW1(:, :, :) *PRHODJ(:, :, :)) + IF (LBUDGET_RR) CALL BUDGET_STORE_ADD(TBUDGETS(NBUDGET_RR), 'DRYH', -ZW2(:, :, :) *PRHODJ(:, :, :)) + IF (LBUDGET_RI) CALL BUDGET_STORE_ADD(TBUDGETS(NBUDGET_RI), 'DRYH', -ZW3(:, :, :) *PRHODJ(:, :, :)) + IF (LBUDGET_RS) CALL BUDGET_STORE_ADD(TBUDGETS(NBUDGET_RS), 'DRYH', -ZW4(:, :, :) *PRHODJ(:, :, :)) + IF (LBUDGET_RG) CALL BUDGET_STORE_ADD(TBUDGETS(NBUDGET_RG), 'DRYH', (-ZW5(:, :, :)+ZW6(:, :, : )) *PRHODJ(:, :, :)) + IF (LBUDGET_RH) CALL BUDGET_STORE_ADD(TBUDGETS(NBUDGET_RH), 'DRYH', (ZW1(:, :, :)+ZW2(:, :, :)+ZW3(:, :, :)+ & + &ZW4(:, :, :)+ZW5(:, :, : )-ZW6(:, :, :)) & + & *PRHODJ(:, :, :)) ZW(:,:,:) = 0. - DO JL=1,IMICRO - ZW(I1(JL), I2(JL), I3(JL)) = ZTOT_RHMLTR(JL) * ZINV_TSTEP + DO JL=1, KSIZE + ZW(I1TOT(JL), I2TOT(JL), I3TOT(JL)) = ZTOT_RHMLTR(JL) * ZINV_TSTEP END DO - if ( lbudget_th ) call Budget_store_add( tbudgets(NBUDGET_TH), 'HMLT', -zw(:, :, :) * zz_diff(:, :, :) * prhodj(:, :, :) ) - if ( lbudget_rr ) call Budget_store_add( tbudgets(NBUDGET_RR), 'HMLT', zw(:, :, :) * prhodj(:, :, :) ) - if ( lbudget_rh ) call Budget_store_add( tbudgets(NBUDGET_RH), 'HMLT', -zw(:, :, :) * prhodj(:, :, :) ) + IF (LBUDGET_TH) CALL BUDGET_STORE_ADD(TBUDGETS(NBUDGET_TH), 'HMLT', -ZW(:, :, :)*ZZ_DIFF(:, :, :)*PRHODJ(:, :, :)) + IF (LBUDGET_RR) CALL BUDGET_STORE_ADD(TBUDGETS(NBUDGET_RR), 'HMLT', ZW(:, :, :) *PRHODJ(:, :, :)) + IF (LBUDGET_RH) CALL BUDGET_STORE_ADD(TBUDGETS(NBUDGET_RH), 'HMLT', -ZW(:, :, :) *PRHODJ(:, :, :)) ENDIF ZW(:,:,:) = 0. - DO JL=1,IMICRO - ZW(I1(JL), I2(JL), I3(JL)) = ZTOT_RIMLTC(JL) * ZINV_TSTEP + DO JL=1, KSIZE + ZW(I1TOT(JL), I2TOT(JL), I3TOT(JL)) = ZTOT_RIMLTC(JL) * ZINV_TSTEP END DO - if ( lbudget_th ) call Budget_store_add( tbudgets(NBUDGET_TH), 'IMLT', -zw(:, :, :) * zz_diff(:, :, :) * prhodj(:, :, :) ) - if ( lbudget_rc ) call Budget_store_add( tbudgets(NBUDGET_RC), 'IMLT', zw(:, :, :) * prhodj(:, :, :) ) - if ( lbudget_ri ) call Budget_store_add( tbudgets(NBUDGET_RI), 'IMLT', -zw(:, :, :) * prhodj(:, :, :) ) + IF (LBUDGET_TH) CALL BUDGET_STORE_ADD(TBUDGETS(NBUDGET_TH), 'IMLT', -ZW(:, :, :)*ZZ_DIFF(:, :, :)*PRHODJ(:, :, :)) + IF (LBUDGET_RC) CALL BUDGET_STORE_ADD(TBUDGETS(NBUDGET_RC), 'IMLT', ZW(:, :, :) *PRHODJ(:, :, :)) + IF (LBUDGET_RI) CALL BUDGET_STORE_ADD(TBUDGETS(NBUDGET_RI), 'IMLT', -ZW(:, :, :) *PRHODJ(:, :, :)) ZW(:,:,:) = 0. - DO JL=1,IMICRO - ZW(I1(JL), I2(JL), I3(JL)) = ZTOT_RCBERI(JL) * ZINV_TSTEP + DO JL=1, KSIZE + ZW(I1TOT(JL), I2TOT(JL), I3TOT(JL)) = ZTOT_RCBERI(JL) * ZINV_TSTEP END DO - if ( lbudget_th ) call Budget_store_add( tbudgets(NBUDGET_TH), 'BERFI', zw(:, :, :) * zz_diff(:, :, :) * prhodj(:, :, :) ) - if ( lbudget_rc ) call Budget_store_add( tbudgets(NBUDGET_RC), 'BERFI', -zw(:, :, :) * prhodj(:, :, :) ) - if ( lbudget_ri ) call Budget_store_add( tbudgets(NBUDGET_RI), 'BERFI', zw(:, :, :) * prhodj(:, :, :) ) + IF (LBUDGET_TH) CALL BUDGET_STORE_ADD(TBUDGETS(NBUDGET_TH), 'BERFI', ZW(:, :, :)*ZZ_DIFF(:, :, :)*PRHODJ(:, :, :)) + IF (LBUDGET_RC) CALL BUDGET_STORE_ADD(TBUDGETS(NBUDGET_RC), 'BERFI', -ZW(:, :, :) *PRHODJ(:, :, :)) + IF (LBUDGET_RI) CALL BUDGET_STORE_ADD(TBUDGETS(NBUDGET_RI), 'BERFI', ZW(:, :, :) *PRHODJ(:, :, :)) - deallocate( zw1, zw2, zw3, zw4 ) - if ( krr == 7 ) deallocate( zw5, zw6 ) - if ( lbudget_th ) deallocate( zz_diff ) ENDIF ! !*** 7.3 Final tendencies ! -DO JK = 1, KKT - DO JJ = 1, KJT - DO JI = 1, KIT - PRVS(JI,JJ,JK) = ZW_RVS(JI,JJ,JK) - PRCS(JI,JJ,JK) = ZW_RCS(JI,JJ,JK) - PRRS(JI,JJ,JK) = ZW_RRS(JI,JJ,JK) - PRIS(JI,JJ,JK) = ZW_RIS(JI,JJ,JK) - PRSS(JI,JJ,JK) = ZW_RSS(JI,JJ,JK) - PRGS(JI,JJ,JK) = ZW_RGS(JI,JJ,JK) - PTHS(JI,JJ,JK) = ZW_THS(JI,JJ,JK) - ENDDO - ENDDO -ENDDO -IF (KRR==7) PRHS(:,:,:) = ZW_RHS(:,:,:) +IF (LBU_ENABLE) THEN + IF (LBUDGET_TH) CALL BUDGET_STORE_INIT(TBUDGETS(NBUDGET_TH), 'CORR', PTHS(:, :, :)*PRHODJ(:, :, :)) + IF (LBUDGET_RV) CALL BUDGET_STORE_INIT(TBUDGETS(NBUDGET_RV), 'CORR', PRVS(:, :, :)*PRHODJ(:, :, :)) + IF (LBUDGET_RC) CALL BUDGET_STORE_INIT(TBUDGETS(NBUDGET_RC), 'CORR', PRCS(:, :, :)*PRHODJ(:, :, :)) + IF (LBUDGET_RR) CALL BUDGET_STORE_INIT(TBUDGETS(NBUDGET_RR), 'CORR', PRSS(:, :, :)*PRHODJ(:, :, :)) + IF (LBUDGET_RI) CALL BUDGET_STORE_INIT(TBUDGETS(NBUDGET_RI), 'CORR', PRIS(:, :, :)*PRHODJ(:, :, :)) + IF (LBUDGET_RS) CALL BUDGET_STORE_INIT(TBUDGETS(NBUDGET_RS), 'CORR', PRSS(:, :, :)*PRHODJ(:, :, :)) + IF (LBUDGET_RG) CALL BUDGET_STORE_INIT(TBUDGETS(NBUDGET_RG), 'CORR', PRGS(:, :, :)*PRHODJ(:, :, :)) + IF (LBUDGET_RH .AND. KRR==7) CALL BUDGET_STORE_INIT(TBUDGETS(NBUDGET_RH), 'CORR', PRHS(:, :, :)*PRHODJ(:, :, :)) +END IF + +!NOTE: +! This call cannot be moved before the preeceding budget calls because, +! with AROME, the BUDGET_STORE_INIT does nothing. The equivalent is done only +! once before the physics call and copies of the S variables evolve automatically +! internally to the budget (DDH) machinery at each BUDGET_STORE_ADD and +! BUDGET_STORE_END calls. Thus, the difference between the DDH internal version +! of the S variables and the S variables used in the folowing BUDGET_STORE_END +! call must only be due to the correction of negativities. +! +!We correct negativities with conservation +CALL CORRECT_NEGATIVITIES(KIT, KJT, KKT, KRR, PRVS, PRCS, PRRS, & + &PRIS, PRSS, PRGS, & + &PTHS, ZZ_LVFACT, ZZ_LSFACT, PRHS) + +IF (LBU_ENABLE) THEN + IF (LBUDGET_TH) CALL BUDGET_STORE_END(TBUDGETS(NBUDGET_TH), 'CORR', PTHS(:, :, :)*PRHODJ(:, :, :)) + IF (LBUDGET_RV) CALL BUDGET_STORE_END(TBUDGETS(NBUDGET_RV), 'CORR', PRVS(:, :, :)*PRHODJ(:, :, :)) + IF (LBUDGET_RC) CALL BUDGET_STORE_END(TBUDGETS(NBUDGET_RC), 'CORR', PRCS(:, :, :)*PRHODJ(:, :, :)) + IF (LBUDGET_RR) CALL BUDGET_STORE_END(TBUDGETS(NBUDGET_RR), 'CORR', PRRS(:, :, :)*PRHODJ(:, :, :)) + IF (LBUDGET_RI) CALL BUDGET_STORE_END(TBUDGETS(NBUDGET_RI), 'CORR', PRIS(:, :, :)*PRHODJ(:, :, :)) + IF (LBUDGET_RS) CALL BUDGET_STORE_END(TBUDGETS(NBUDGET_RS), 'CORR', PRSS(:, :, :)*PRHODJ(:, :, :)) + IF (LBUDGET_RG) CALL BUDGET_STORE_END(TBUDGETS(NBUDGET_RG), 'CORR', PRGS(:, :, :)*PRHODJ(:, :, :)) + IF (LBUDGET_RH .AND. KRR==7) CALL BUDGET_STORE_END(TBUDGETS(NBUDGET_RH), 'CORR', PRHS(:, :, :)*PRHODJ(:, :, :)) +END IF ! !------------------------------------------------------------------------------- ! @@ -1706,37 +1636,53 @@ IF(LSEDIM_AFTER) THEN ! !* 8.1 sedimentation ! - if ( lbudget_rc .and. osedic ) call Budget_store_init( tbudgets(NBUDGET_RC), 'SEDI', prcs(:, :, :) * prhodj(:, :, :) ) - if ( lbudget_rr ) call Budget_store_init( tbudgets(NBUDGET_RR), 'SEDI', prrs(:, :, :) * prhodj(:, :, :) ) - if ( lbudget_ri ) call Budget_store_init( tbudgets(NBUDGET_RI), 'SEDI', pris(:, :, :) * prhodj(:, :, :) ) - if ( lbudget_rs ) call Budget_store_init( tbudgets(NBUDGET_RS), 'SEDI', prss(:, :, :) * prhodj(:, :, :) ) - if ( lbudget_rg ) call Budget_store_init( tbudgets(NBUDGET_RG), 'SEDI', prgs(:, :, :) * prhodj(:, :, :) ) - if ( lbudget_rh ) call Budget_store_init( tbudgets(NBUDGET_RH), 'SEDI', prhs(:, :, :) * prhodj(:, :, :) ) - - !Init only if not osedic (to prevent crash with double init) - !Remark: the 2 source terms SEDI and DEPO could be mixed and stored in the same source term (SEDI) - ! if osedic=T and ldeposc=T (a warning is printed in ini_budget in that case) - if ( lbudget_rc .and. ldeposc .and. .not.osedic ) & - call Budget_store_init( tbudgets(NBUDGET_RC), 'DEPO', prcs(:, :, :) * prhodj(:, :, :) ) + IF (LBUDGET_RC .and. osedic) CALL BUDGET_STORE_INIT(TBUDGETS(NBUDGET_RC), 'SEDI', PRCS(:, :, :) * PRHODJ(:, :, :)) + IF (LBUDGET_RR) CALL BUDGET_STORE_INIT(TBUDGETS(NBUDGET_RR), 'SEDI', PRRS(:, :, :) * PRHODJ(:, :, :)) + IF (LBUDGET_RI) CALL BUDGET_STORE_INIT(TBUDGETS(NBUDGET_RI), 'SEDI', PRIS(:, :, :) * PRHODJ(:, :, :)) + IF (LBUDGET_RS) CALL BUDGET_STORE_INIT(TBUDGETS(NBUDGET_RS), 'SEDI', PRSS(:, :, :) * PRHODJ(:, :, :)) + IF (LBUDGET_RG) CALL BUDGET_STORE_INIT(TBUDGETS(NBUDGET_RG), 'SEDI', PRGS(:, :, :) * PRHODJ(:, :, :)) + IF (LBUDGET_RH .AND. KRR==7) CALL BUDGET_STORE_INIT(TBUDGETS(NBUDGET_RH), 'SEDI', PRHS(:, :, :) * PRHODJ(:, :, :)) IF(HSEDIM=='STAT') THEN - !SR: It *seems* that we must have two separate calls for ifort - IF(KRR==7) THEN + IF (KRR==7) THEN + DO JK = 1, KKT + DO JJ = 1, KJT + DO JI = 1, KIT + ZRCT(JI,JJ,JK)=PRCS(JI,JJ,JK)*PTSTEP + ZRRT(JI,JJ,JK)=PRRS(JI,JJ,JK)*PTSTEP + ZRIT(JI,JJ,JK)=PRIS(JI,JJ,JK)*PTSTEP + ZRST(JI,JJ,JK)=PRSS(JI,JJ,JK)*PTSTEP + ZRGT(JI,JJ,JK)=PRGS(JI,JJ,JK)*PTSTEP + ZRHT(JI,JJ,JK)=PRHS(JI,JJ,JK)*PTSTEP + ENDDO + ENDDO + ENDDO CALL ICE4_SEDIMENTATION_STAT(IIB, IIE, KIT, IJB, IJE, KJT, IKB, IKE, IKTB, IKTE, KKT, KKL, & - &PTSTEP, KRR, OSEDIC, LDEPOSC, XVDEPOSC, PDZZ, & + &PTSTEP, KRR, OSEDIC, PDZZ, & &PRHODREF, PPABST, PTHT, PRHODJ, & - &PRCS, PRCS*PTSTEP, PRRS, PRRS*PTSTEP, PRIS, PRIS*PTSTEP,& - &PRSS, PRSS*PTSTEP, PRGS, PRGS*PTSTEP,& - &PINPRC, PINDEP, PINPRR, ZINPRI, PINPRS, PINPRG, & + &PRCS, ZRCT, PRRS, ZRRT, PRIS, ZRIT,& + &PRSS, ZRST, PRGS, ZRGT,& + &PINPRC, PINPRR, ZINPRI, PINPRS, PINPRG, & &PSEA=PSEA, PTOWN=PTOWN, & - &PINPRH=PINPRH, PRHT=PRHS*PTSTEP, PRHS=PRHS, PFPR=PFPR) + &PINPRH=PINPRH, PRHT=ZRHT, PRHS=PRHS, PFPR=PFPR) ELSE + DO JK = 1, KKT + DO JJ = 1, KJT + DO JI = 1, KIT + ZRCT(JI,JJ,JK)=PRCS(JI,JJ,JK)*PTSTEP + ZRRT(JI,JJ,JK)=PRRS(JI,JJ,JK)*PTSTEP + ZRIT(JI,JJ,JK)=PRIS(JI,JJ,JK)*PTSTEP + ZRST(JI,JJ,JK)=PRSS(JI,JJ,JK)*PTSTEP + ZRGT(JI,JJ,JK)=PRGS(JI,JJ,JK)*PTSTEP + ENDDO + ENDDO + ENDDO CALL ICE4_SEDIMENTATION_STAT(IIB, IIE, KIT, IJB, IJE, KJT, IKB, IKE, IKTB, IKTE, KKT, KKL, & - &PTSTEP, KRR, OSEDIC, LDEPOSC, XVDEPOSC, PDZZ,& + &PTSTEP, KRR, OSEDIC, PDZZ, & &PRHODREF, PPABST, PTHT, PRHODJ, & - &PRCS, PRCS*PTSTEP, PRRS, PRRS*PTSTEP, PRIS, PRIS*PTSTEP,& - &PRSS, PRSS*PTSTEP, PRGS, PRGS*PTSTEP,& - &PINPRC, PINDEP, PINPRR, ZINPRI, PINPRS, PINPRG, & + &PRCS, ZRCT, PRRS, ZRRT, PRIS, ZRIT,& + &PRSS, ZRST, PRGS, ZRGT,& + &PINPRC, PINPRR, ZINPRI, PINPRS, PINPRG, & &PSEA=PSEA, PTOWN=PTOWN, & &PFPR=PFPR) ENDIF @@ -1746,18 +1692,18 @@ IF(LSEDIM_AFTER) THEN !SR: It *seems* that we must have two separate calls for ifort IF(KRR==7) THEN CALL ICE4_SEDIMENTATION_SPLIT(IIB, IIE, KIT, IJB, IJE, KJT, IKB, IKE, IKTB, IKTE, KKT, KKL, & - &PTSTEP, KRR, OSEDIC, LDEPOSC, XVDEPOSC, PDZZ, & + &PTSTEP, KRR, OSEDIC, PDZZ, & &PRHODREF, PPABST, PTHT, PRHODJ, & &PRCS, PRCT, PRRS, PRRT, PRIS, PRIT, PRSS, PRST, PRGS, PRGT,& - &PINPRC, PINDEP, PINPRR, ZINPRI, PINPRS, PINPRG, & + &PINPRC, PINPRR, ZINPRI, PINPRS, PINPRG, & &PSEA=PSEA, PTOWN=PTOWN, & &PINPRH=PINPRH, PRHT=PRHT, PRHS=PRHS, PFPR=PFPR) ELSE CALL ICE4_SEDIMENTATION_SPLIT(IIB, IIE, KIT, IJB, IJE, KJT, IKB, IKE, IKTB, IKTE, KKT, KKL, & - &PTSTEP, KRR, OSEDIC, LDEPOSC, XVDEPOSC, PDZZ, & + &PTSTEP, KRR, OSEDIC, PDZZ, & &PRHODREF, PPABST, PTHT, PRHODJ, & &PRCS, PRCT, PRRS, PRRT, PRIS, PRIT, PRSS, PRST, PRGS, PRGT,& - &PINPRC, PINDEP, PINPRR, ZINPRI, PINPRS, PINPRG, & + &PINPRC, PINPRR, ZINPRI, PINPRS, PINPRG, & &PSEA=PSEA, PTOWN=PTOWN, & &PFPR=PFPR) ENDIF @@ -1767,33 +1713,28 @@ IF(LSEDIM_AFTER) THEN ! It is initialized with the m.r. at T and is modified by two tendencies: ! sedimentation tendency and an external tendency which represents all other ! processes (mainly advection and microphysical processes). If both tendencies - ! are negative, sedimentation can remove a specie at a given sub-timestep. From + ! are negative, sedimentation can remove a species at a given sub-timestep. From ! this point sedimentation stops for the remaining sub-timesteps but the other tendency ! will be still active and will lead to negative values. - ! We could prevent the algorithm to not consume too much a specie, instead we apply + ! We could prevent the algorithm to not consume too much a species, instead we apply ! a correction here. CALL CORRECT_NEGATIVITIES(KIT, KJT, KKT, KRR, PRVS, PRCS, PRRS, & &PRIS, PRSS, PRGS, & &PTHS, ZZ_LVFACT, ZZ_LSFACT, PRHS) ELSE - call Print_msg( NVERB_FATAL, 'GEN', 'RAIN_ICE_RED', 'no sedimentation scheme for HSEDIM='//HSEDIM ) + CALL PRINT_MSG(NVERB_FATAL, 'GEN', 'RAIN_ICE', 'no sedimentation scheme for HSEDIM='//HSEDIM) END IF ! !* 8.2 budget storage ! - if ( lbudget_rc .and. osedic ) call Budget_store_end( tbudgets(NBUDGET_RC), 'SEDI', prcs(:, :, :) * prhodj(:, :, :) ) - if ( lbudget_rr ) call Budget_store_end( tbudgets(NBUDGET_RR), 'SEDI', prrs(:, :, :) * prhodj(:, :, :) ) - if ( lbudget_ri ) call Budget_store_end( tbudgets(NBUDGET_RI), 'SEDI', pris(:, :, :) * prhodj(:, :, :) ) - if ( lbudget_rs ) call Budget_store_end( tbudgets(NBUDGET_RS), 'SEDI', prss(:, :, :) * prhodj(:, :, :) ) - if ( lbudget_rg ) call Budget_store_end( tbudgets(NBUDGET_RG), 'SEDI', prgs(:, :, :) * prhodj(:, :, :) ) - if ( lbudget_rh ) call Budget_store_end( tbudgets(NBUDGET_RH), 'SEDI', prhs(:, :, :) * prhodj(:, :, :) ) - - !If osedic=T and ldeposc=T, DEPO is in fact mixed and stored with the SEDI source term - !(a warning is printed in ini_budget in that case) - if ( lbudget_rc .and. ldeposc .and. .not.osedic) & - call Budget_store_end( tbudgets(NBUDGET_RC), 'DEPO', prcs(:, :, :) * prhodj(:, :, :) ) - - !sedimentation of rain fraction + IF (LBUDGET_RC .AND. OSEDIC) CALL BUDGET_STORE_END(TBUDGETS(NBUDGET_RC), 'SEDI', PRCS(:, :, :) * PRHODJ(:, :, :)) + IF (LBUDGET_RR) CALL BUDGET_STORE_END(TBUDGETS(NBUDGET_RR), 'SEDI', PRRS(:, :, :) * PRHODJ(:, :, :)) + IF (LBUDGET_RI) CALL BUDGET_STORE_END(TBUDGETS(NBUDGET_RI), 'SEDI', PRIS(:, :, :) * PRHODJ(:, :, :)) + IF (LBUDGET_RS) CALL BUDGET_STORE_END(TBUDGETS(NBUDGET_RS), 'SEDI', PRSS(:, :, :) * PRHODJ(:, :, :)) + IF (LBUDGET_RG) CALL BUDGET_STORE_END(TBUDGETS(NBUDGET_RG), 'SEDI', PRGS(:, :, :) * PRHODJ(:, :, :)) + IF (LBUDGET_RH .AND. KRR==7) CALL BUDGET_STORE_END(TBUDGETS(NBUDGET_RH), 'SEDI', PRHS(:, :, :) * PRHODJ(:, :, :)) + + !"sedimentation" of rain fraction IF (PRESENT(PRHS)) THEN CALL ICE4_RAINFR_VERT(IIB, IIE, KIT, IJB, IJE, KJT, IKB, IKE, KKT, KKL, PRAINFR, PRRS(:,:,:)*PTSTEP, & &PRSS(:,:,:)*PTSTEP, PRGS(:,:,:)*PTSTEP, PRHS(:,:,:)*PTSTEP) @@ -1803,6 +1744,29 @@ IF(LSEDIM_AFTER) THEN ENDIF ENDIF ! +!------------------------------------------------------------------------------- +! +!* 9. COMPUTE THE FOG DEPOSITION TERM +! ------------------------------------- +! +IF (LDEPOSC) THEN !cloud water deposition on vegetation + IF (LBU_ENABLE .AND. LBUDGET_RC) & + & CALL BUDGET_STORE_INIT(TBUDGETS(NBUDGET_RC), 'DEPO', PRCS(:, :, :)*PRHODJ(:, :, :)) + + DO JJ = 1, KJT +!DEC$ IVDEP + DO JI = 1, KIT + PINDEP(JI, JJ) = XVDEPOSC * PRCT(JI, JJ, IKB) * PRHODREF(JI, JJ, IKB) / XRHOLW + PRCS(JI, JJ, IKB) = PRCS(JI, JJ, IKB) - XVDEPOSC * PRCT(JI, JJ, IKB) / PDZZ(JI, JJ, IKB) + PINPRC(JI, JJ) = PINPRC(JI, JJ) + PINDEP(JI, JJ) + ENDDO + ENDDO + + IF (LBU_ENABLE .AND. LBUDGET_RC) & + & CALL BUDGET_STORE_END(TBUDGETS(NBUDGET_RC), 'DEPO', PRCS(:, :, :)*PRHODJ(:, :, :)) +ENDIF + +IF (LHOOK) CALL DR_HOOK('RAIN_ICE', 1, ZHOOK_HANDLE) ! CONTAINS ! @@ -1817,105 +1781,90 @@ CONTAINS REAL, DIMENSION(KIT, KJT, KKT), INTENT(IN) :: PLVFACT, PLSFACT REAL, DIMENSION(KIT, KJT, KKT), OPTIONAL, INTENT(INOUT) :: PRH ! - REAL, DIMENSION(KIT, KJT, KKT) :: ZW + REAL :: ZW INTEGER :: JI, JJ, JK + REAL(KIND=JPRB) :: ZHOOK_HANDLE ! + IF (LHOOK) CALL DR_HOOK('RAIN_ICE:CORRECT_NEGATIVITIES', 0, ZHOOK_HANDLE) ! !We correct negativities with conservation - ! 1) deal with negative values for mixing ratio, except for vapor DO JK = 1, KKT DO JJ = 1, KJT DO JI = 1, KIT - ZW(JI,JJ,JK) =PRC(JI,JJ,JK)-MAX(PRC(JI,JJ,JK), 0.) - PRV(JI,JJ,JK)=PRV(JI,JJ,JK)+ZW(JI,JJ,JK) - PTH(JI,JJ,JK)=PTH(JI,JJ,JK)-ZW(JI,JJ,JK)*PLVFACT(JI,JJ,JK) - PRC(JI,JJ,JK)=PRC(JI,JJ,JK)-ZW(JI,JJ,JK) - - ZW(JI,JJ,JK) =PRR(JI,JJ,JK)-MAX(PRR(JI,JJ,JK), 0.) - PRV(JI,JJ,JK)=PRV(JI,JJ,JK)+ZW(JI,JJ,JK) - PTH(JI,JJ,JK)=PTH(JI,JJ,JK)-ZW(JI,JJ,JK)*PLVFACT(JI,JJ,JK) - PRR(JI,JJ,JK)=PRR(JI,JJ,JK)-ZW(JI,JJ,JK) - - ZW(JI,JJ,JK) =PRI(JI,JJ,JK)-MAX(PRI(JI,JJ,JK), 0.) - PRV(JI,JJ,JK)=PRV(JI,JJ,JK)+ZW(JI,JJ,JK) - PTH(JI,JJ,JK)=PTH(JI,JJ,JK)-ZW(JI,JJ,JK)*PLSFACT(JI,JJ,JK) - PRI(JI,JJ,JK)=PRI(JI,JJ,JK)-ZW(JI,JJ,JK) - - ZW(JI,JJ,JK) =PRS(JI,JJ,JK)-MAX(PRS(JI,JJ,JK), 0.) - PRV(JI,JJ,JK)=PRV(JI,JJ,JK)+ZW(JI,JJ,JK) - PTH(JI,JJ,JK)=PTH(JI,JJ,JK)-ZW(JI,JJ,JK)*PLSFACT(JI,JJ,JK) - PRS(JI,JJ,JK)=PRS(JI,JJ,JK)-ZW(JI,JJ,JK) - - ZW(JI,JJ,JK) =PRG(JI,JJ,JK)-MAX(PRG(JI,JJ,JK), 0.) - PRV(JI,JJ,JK)=PRV(JI,JJ,JK)+ZW(JI,JJ,JK) - PTH(JI,JJ,JK)=PTH(JI,JJ,JK)-ZW(JI,JJ,JK)*PLSFACT(JI,JJ,JK) - PRG(JI,JJ,JK)=PRG(JI,JJ,JK)-ZW(JI,JJ,JK) - ENDDO - ENDDO - ENDDO - - IF(KRR==7) THEN - DO JK = 1, KKT - DO JJ = 1, KJT - DO JI = 1, KIT - ZW(JI,JJ,JK) =PRH(JI,JJ,JK)-MAX(PRH(JI,JJ,JK), 0.) - PRV(JI,JJ,JK)=PRV(JI,JJ,JK)+ZW(JI,JJ,JK) - PTH(JI,JJ,JK)=PTH(JI,JJ,JK)-ZW(JI,JJ,JK)*PLSFACT(JI,JJ,JK) - PRH(JI,JJ,JK)=PRH(JI,JJ,JK)-ZW(JI,JJ,JK) - ENDDO - ENDDO - ENDDO - ENDIF + ! 1) deal with negative values for mixing ratio, except for vapor + ZW =PRC(JI,JJ,JK)-MAX(PRC(JI,JJ,JK), 0.) + PRV(JI,JJ,JK)=PRV(JI,JJ,JK)+ZW + PTH(JI,JJ,JK)=PTH(JI,JJ,JK)-ZW*PLVFACT(JI,JJ,JK) + PRC(JI,JJ,JK)=PRC(JI,JJ,JK)-ZW + + ZW =PRR(JI,JJ,JK)-MAX(PRR(JI,JJ,JK), 0.) + PRV(JI,JJ,JK)=PRV(JI,JJ,JK)+ZW + PTH(JI,JJ,JK)=PTH(JI,JJ,JK)-ZW*PLVFACT(JI,JJ,JK) + PRR(JI,JJ,JK)=PRR(JI,JJ,JK)-ZW + + ZW =PRI(JI,JJ,JK)-MAX(PRI(JI,JJ,JK), 0.) + PRV(JI,JJ,JK)=PRV(JI,JJ,JK)+ZW + PTH(JI,JJ,JK)=PTH(JI,JJ,JK)-ZW*PLSFACT(JI,JJ,JK) + PRI(JI,JJ,JK)=PRI(JI,JJ,JK)-ZW + + ZW =PRS(JI,JJ,JK)-MAX(PRS(JI,JJ,JK), 0.) + PRV(JI,JJ,JK)=PRV(JI,JJ,JK)+ZW + PTH(JI,JJ,JK)=PTH(JI,JJ,JK)-ZW*PLSFACT(JI,JJ,JK) + PRS(JI,JJ,JK)=PRS(JI,JJ,JK)-ZW + + ZW =PRG(JI,JJ,JK)-MAX(PRG(JI,JJ,JK), 0.) + PRV(JI,JJ,JK)=PRV(JI,JJ,JK)+ZW + PTH(JI,JJ,JK)=PTH(JI,JJ,JK)-ZW*PLSFACT(JI,JJ,JK) + PRG(JI,JJ,JK)=PRG(JI,JJ,JK)-ZW + + IF(KRR==7) THEN + ZW =PRH(JI,JJ,JK)-MAX(PRH(JI,JJ,JK), 0.) + PRV(JI,JJ,JK)=PRV(JI,JJ,JK)+ZW + PTH(JI,JJ,JK)=PTH(JI,JJ,JK)-ZW*PLSFACT(JI,JJ,JK) + PRH(JI,JJ,JK)=PRH(JI,JJ,JK)-ZW + ENDIF + + ! 2) deal with negative vapor mixing ratio - ! 2) deal with negative vapor mixing ratio - - DO JK = 1, KKT - DO JJ = 1, KJT - DO JI = 1, KIT ! for rc and ri, we keep ice fraction constant - ZW(JI,JJ,JK)=MIN(1., MAX(XRTMIN(1)-PRV(JI,JJ,JK), 0.) / & - &MAX(PRC(JI,JJ,JK)+PRI(JI,JJ,JK), 1.E-20)) ! Proportion of rc+ri to convert into rv - PTH(JI,JJ,JK)=PTH(JI,JJ,JK)-ZW(JI,JJ,JK)* & + ZW=MIN(1., MAX(XRTMIN(1)-PRV(JI,JJ,JK), 0.) / & + &MAX(PRC(JI,JJ,JK)+PRI(JI,JJ,JK), 1.E-20)) ! Proportion of rc+ri to convert into rv + PTH(JI,JJ,JK)=PTH(JI,JJ,JK)-ZW* & &(PRC(JI,JJ,JK)*PLVFACT(JI,JJ,JK)+PRI(JI,JJ,JK)*PLSFACT(JI,JJ,JK)) - PRV(JI,JJ,JK)=PRV(JI,JJ,JK)+ZW(JI,JJ,JK)*(PRC(JI,JJ,JK)+PRI(JI,JJ,JK)) - PRC(JI,JJ,JK)=(1.-ZW(JI,JJ,JK))*PRC(JI,JJ,JK) - PRI(JI,JJ,JK)=(1.-ZW(JI,JJ,JK))*PRI(JI,JJ,JK) - - ZW(JI,JJ,JK)=MIN(MAX(PRR(JI,JJ,JK), 0.), & - &MAX(XRTMIN(1)-PRV(JI,JJ,JK), 0.)) ! Quantity of rr to convert into rv - PRV(JI,JJ,JK)=PRV(JI,JJ,JK)+ZW(JI,JJ,JK) - PRR(JI,JJ,JK)=PRR(JI,JJ,JK)-ZW(JI,JJ,JK) - PTH(JI,JJ,JK)=PTH(JI,JJ,JK)-ZW(JI,JJ,JK)*PLVFACT(JI,JJ,JK) - - ZW(JI,JJ,JK)=MIN(MAX(PRS(JI,JJ,JK), 0.), & - &MAX(XRTMIN(1)-PRV(JI,JJ,JK), 0.)) ! Quantity of rs to convert into rv - PRV(JI,JJ,JK)=PRV(JI,JJ,JK)+ZW(JI,JJ,JK) - PRS(JI,JJ,JK)=PRS(JI,JJ,JK)-ZW(JI,JJ,JK) - PTH(JI,JJ,JK)=PTH(JI,JJ,JK)-ZW(JI,JJ,JK)*PLSFACT(JI,JJ,JK) - - ZW(JI,JJ,JK)=MIN(MAX(PRG(JI,JJ,JK), 0.), & - &MAX(XRTMIN(1)-PRV(JI,JJ,JK), 0.)) ! Quantity of rg to convert into rv - PRV(JI,JJ,JK)=PRV(JI,JJ,JK)+ZW(JI,JJ,JK) - PRG(JI,JJ,JK)=PRG(JI,JJ,JK)-ZW(JI,JJ,JK) - PTH(JI,JJ,JK)=PTH(JI,JJ,JK)-ZW(JI,JJ,JK)*PLSFACT(JI,JJ,JK) + PRV(JI,JJ,JK)=PRV(JI,JJ,JK)+ZW*(PRC(JI,JJ,JK)+PRI(JI,JJ,JK)) + PRC(JI,JJ,JK)=(1.-ZW)*PRC(JI,JJ,JK) + PRI(JI,JJ,JK)=(1.-ZW)*PRI(JI,JJ,JK) + + ZW=MIN(MAX(PRR(JI,JJ,JK), 0.), & + &MAX(XRTMIN(1)-PRV(JI,JJ,JK), 0.)) ! Quantity of rr to convert into rv + PRV(JI,JJ,JK)=PRV(JI,JJ,JK)+ZW + PRR(JI,JJ,JK)=PRR(JI,JJ,JK)-ZW + PTH(JI,JJ,JK)=PTH(JI,JJ,JK)-ZW*PLVFACT(JI,JJ,JK) + + ZW=MIN(MAX(PRS(JI,JJ,JK), 0.), & + &MAX(XRTMIN(1)-PRV(JI,JJ,JK), 0.)) ! Quantity of rs to convert into rv + PRV(JI,JJ,JK)=PRV(JI,JJ,JK)+ZW + PRS(JI,JJ,JK)=PRS(JI,JJ,JK)-ZW + PTH(JI,JJ,JK)=PTH(JI,JJ,JK)-ZW*PLSFACT(JI,JJ,JK) + + ZW=MIN(MAX(PRG(JI,JJ,JK), 0.), & + &MAX(XRTMIN(1)-PRV(JI,JJ,JK), 0.)) ! Quantity of rg to convert into rv + PRV(JI,JJ,JK)=PRV(JI,JJ,JK)+ZW + PRG(JI,JJ,JK)=PRG(JI,JJ,JK)-ZW + PTH(JI,JJ,JK)=PTH(JI,JJ,JK)-ZW*PLSFACT(JI,JJ,JK) + + IF(KRR==7) THEN + ZW=MIN(MAX(PRH(JI,JJ,JK), 0.), & + &MAX(XRTMIN(1)-PRV(JI,JJ,JK), 0.)) ! Quantity of rh to convert into rv + PRV(JI,JJ,JK)=PRV(JI,JJ,JK)+ZW + PRH(JI,JJ,JK)=PRH(JI,JJ,JK)-ZW + PTH(JI,JJ,JK)=PTH(JI,JJ,JK)-ZW*PLSFACT(JI,JJ,JK) + ENDIF ENDDO ENDDO ENDDO - - IF(KRR==7) THEN - DO JK = 1, KKT - DO JJ = 1, KJT - DO JI = 1, KIT - ZW(JI,JJ,JK)=MIN(MAX(PRH(JI,JJ,JK), 0.), & - &MAX(XRTMIN(1)-PRV(JI,JJ,JK), 0.)) ! Quantity of rh to convert into rv - PRV(JI,JJ,JK)=PRV(JI,JJ,JK)+ZW(JI,JJ,JK) - PRH(JI,JJ,JK)=PRH(JI,JJ,JK)-ZW(JI,JJ,JK) - PTH(JI,JJ,JK)=PTH(JI,JJ,JK)-ZW(JI,JJ,JK)*PLSFACT(JI,JJ,JK) - ENDDO - ENDDO - ENDDO - ENDIF ! + IF (LHOOK) CALL DR_HOOK('RAIN_ICE:CORRECT_NEGATIVITIES', 1, ZHOOK_HANDLE) ! END SUBROUTINE CORRECT_NEGATIVITIES