diff --git a/src/MNH/deallocate_model1.f90 b/src/MNH/deallocate_model1.f90 index 04ac32db0d7a477b77fd93c4e33f0636f3fe59cc..d5033dc2e0f1ec9cfb36f724a30094a6d3e4168f 100644 --- a/src/MNH/deallocate_model1.f90 +++ b/src/MNH/deallocate_model1.f90 @@ -103,6 +103,7 @@ USE MODD_ADVFRC_n ! For ADVFRC and EDDY FLUXES USE MODD_RELFRC_n USE MODD_ADV_n USE MODD_PAST_FIELD_n +USE MODD_TURB_n IMPLICIT NONE ! !* 0.1 declarations of arguments @@ -527,6 +528,16 @@ END IF IF ( ASSOCIATED(XATC) .AND. KCALL == 3 ) THEN DEALLOCATE(XATC) END IF +! +!* 16. Module TURBn +! +IF ( KCALL==3 ) THEN + IF (ASSOCIATED(XDYP)) DEALLOCATE(XDYP) + IF (ASSOCIATED(XTHP)) DEALLOCATE(XTHP) + IF (ASSOCIATED(XTR)) DEALLOCATE(XTR) + IF (ASSOCIATED(XDISS)) DEALLOCATE(XDISS) + IF (ASSOCIATED(XLEM)) DEALLOCATE(XLEM) +END IF !------------------------------------------------------------------------------- ! CALL GOTO_MODEL(IMI) diff --git a/src/MNH/ini_lesn.f90 b/src/MNH/ini_lesn.f90 index 538042c95e6cf121c954ba5f23647acf5a5ea90a..0a922a93aca5a2994768ca395de5a27e72da580d 100644 --- a/src/MNH/ini_lesn.f90 +++ b/src/MNH/ini_lesn.f90 @@ -483,6 +483,11 @@ ALLOCATE(XLES_MEAN_U (NLES_K,NLES_TIMES,NLES_MASKS)) ALLOCATE(XLES_MEAN_V (NLES_K,NLES_TIMES,NLES_MASKS)) ALLOCATE(XLES_MEAN_W (NLES_K,NLES_TIMES,NLES_MASKS)) ALLOCATE(XLES_MEAN_P (NLES_K,NLES_TIMES,NLES_MASKS)) +ALLOCATE(XLES_MEAN_DP (NLES_K,NLES_TIMES,NLES_MASKS)) +ALLOCATE(XLES_MEAN_TP (NLES_K,NLES_TIMES,NLES_MASKS)) +ALLOCATE(XLES_MEAN_TR (NLES_K,NLES_TIMES,NLES_MASKS)) +ALLOCATE(XLES_MEAN_DISS(NLES_K,NLES_TIMES,NLES_MASKS)) +ALLOCATE(XLES_MEAN_LM (NLES_K,NLES_TIMES,NLES_MASKS)) ALLOCATE(XLES_MEAN_RHO(NLES_K,NLES_TIMES,NLES_MASKS)) ALLOCATE(XLES_MEAN_Th (NLES_K,NLES_TIMES,NLES_MASKS)) ALLOCATE(XLES_MEAN_Mf (NLES_K,NLES_TIMES,NLES_MASKS)) @@ -623,6 +628,11 @@ XLES_MEAN_U = XUNDEF XLES_MEAN_V = XUNDEF XLES_MEAN_W = XUNDEF XLES_MEAN_P = XUNDEF +XLES_MEAN_DP = XUNDEF +XLES_MEAN_TP = XUNDEF +XLES_MEAN_TR = XUNDEF +XLES_MEAN_DISS= XUNDEF +XLES_MEAN_LM = XUNDEF XLES_MEAN_RHO= XUNDEF XLES_MEAN_Th = XUNDEF XLES_MEAN_Mf = XUNDEF diff --git a/src/MNH/les_cloud_masksn.f90 b/src/MNH/les_cloud_masksn.f90 index a7f491dc0123858a1b643066f6a4ec2eb3629eb7..e08d56550d075d79270aff0a4ceaa60b3fd7cf9a 100644 --- a/src/MNH/les_cloud_masksn.f90 +++ b/src/MNH/les_cloud_masksn.f90 @@ -355,6 +355,9 @@ IF (LLES_MY_MASK) THEN DO JI=1,NLES_MASKS_USER LLES_CURRENT_MY_MASKS (:,:,:,JI) = .FALSE. END DO +! WHERE ((ZRC_LES + ZRI_LES) > 1.E-06) +! LLES_CURRENT_MY_MASKS (:,:,:,1) = .TRUE. +! END WHERE ! END IF !------------------------------------------------------------------------------- diff --git a/src/MNH/modd_lesn.f90 b/src/MNH/modd_lesn.f90 index 1bf463e9edb2527279913cc84bde71c915cb35bf..682a95d757219657878ef7db4d5444d551553839 100644 --- a/src/MNH/modd_lesn.f90 +++ b/src/MNH/modd_lesn.f90 @@ -132,6 +132,11 @@ TYPE LES_t REAL, DIMENSION(:,:,:), POINTER :: XLES_MEAN_dThldz=>NULL() ! <dThldz> REAL, DIMENSION(:,:,:), POINTER :: XLES_MEAN_dRtdz=>NULL() ! <dRtdz> REAL, DIMENSION(:,:,:,:), POINTER :: XLES_MEAN_dSvdz=>NULL()! <dSvdz> + REAL, DIMENSION(:,:,:), POINTER :: XLES_MEAN_DP=>NULL() ! <dp> + REAL, DIMENSION(:,:,:), POINTER :: XLES_MEAN_TP=>NULL() ! <tp> + REAL, DIMENSION(:,:,:), POINTER :: XLES_MEAN_TR=>NULL() ! <tr> + REAL, DIMENSION(:,:,:), POINTER :: XLES_MEAN_DISS=>NULL() ! <diss> + REAL, DIMENSION(:,:,:), POINTER :: XLES_MEAN_LM=>NULL() ! <lm> ! !------------------------------------------------------------------------------- ! @@ -706,6 +711,11 @@ REAL, DIMENSION(:,:,:), POINTER :: XLES_MEAN_dWdz=>NULL() REAL, DIMENSION(:,:,:), POINTER :: XLES_MEAN_dThldz=>NULL() REAL, DIMENSION(:,:,:), POINTER :: XLES_MEAN_dRtdz=>NULL() REAL, DIMENSION(:,:,:,:), POINTER :: XLES_MEAN_dSvdz=>NULL() +REAL, DIMENSION(:,:,:), POINTER :: XLES_MEAN_DP=>NULL() +REAL, DIMENSION(:,:,:), POINTER :: XLES_MEAN_TP=>NULL() +REAL, DIMENSION(:,:,:), POINTER :: XLES_MEAN_TR=>NULL() +REAL, DIMENSION(:,:,:), POINTER :: XLES_MEAN_DISS=>NULL() +REAL, DIMENSION(:,:,:), POINTER :: XLES_MEAN_LM=>NULL() REAL, DIMENSION(:,:,:), POINTER :: XLES_RESOLVED_U2=>NULL() REAL, DIMENSION(:,:,:), POINTER :: XLES_RESOLVED_V2=>NULL() REAL, DIMENSION(:,:,:), POINTER :: XLES_RESOLVED_W2=>NULL() @@ -1126,6 +1136,11 @@ LES_MODEL(KFROM)%XLES_MEAN_dWdz=>XLES_MEAN_dWdz LES_MODEL(KFROM)%XLES_MEAN_dThldz=>XLES_MEAN_dThldz LES_MODEL(KFROM)%XLES_MEAN_dRtdz=>XLES_MEAN_dRtdz LES_MODEL(KFROM)%XLES_MEAN_dSvdz=>XLES_MEAN_dSvdz +LES_MODEL(KFROM)%XLES_MEAN_DP=>XLES_MEAN_DP +LES_MODEL(KFROM)%XLES_MEAN_TP=>XLES_MEAN_TP +LES_MODEL(KFROM)%XLES_MEAN_TR=>XLES_MEAN_TR +LES_MODEL(KFROM)%XLES_MEAN_DISS=>XLES_MEAN_DISS +LES_MODEL(KFROM)%XLES_MEAN_LM=>XLES_MEAN_LM LES_MODEL(KFROM)%XLES_RESOLVED_U2=>XLES_RESOLVED_U2 LES_MODEL(KFROM)%XLES_RESOLVED_V2=>XLES_RESOLVED_V2 LES_MODEL(KFROM)%XLES_RESOLVED_W2=>XLES_RESOLVED_W2 @@ -1547,6 +1562,11 @@ XLES_MEAN_dWdz=>LES_MODEL(KTO)%XLES_MEAN_dWdz XLES_MEAN_dThldz=>LES_MODEL(KTO)%XLES_MEAN_dThldz XLES_MEAN_dRtdz=>LES_MODEL(KTO)%XLES_MEAN_dRtdz XLES_MEAN_dSvdz=>LES_MODEL(KTO)%XLES_MEAN_dSvdz +XLES_MEAN_DP=>LES_MODEL(KTO)%XLES_MEAN_DP +XLES_MEAN_TP=>LES_MODEL(KTO)%XLES_MEAN_TP +XLES_MEAN_TR=>LES_MODEL(KTO)%XLES_MEAN_TR +XLES_MEAN_DISS=>LES_MODEL(KTO)%XLES_MEAN_DISS +XLES_MEAN_LM=>LES_MODEL(KTO)%XLES_MEAN_LM XLES_RESOLVED_U2=>LES_MODEL(KTO)%XLES_RESOLVED_U2 XLES_RESOLVED_V2=>LES_MODEL(KTO)%XLES_RESOLVED_V2 XLES_RESOLVED_W2=>LES_MODEL(KTO)%XLES_RESOLVED_W2 diff --git a/src/MNH/modd_turbn.f90 b/src/MNH/modd_turbn.f90 index c8a4aee2cb3dbbcd0c5860509ed07e14a8931563..2f811ad08ff1fd78ce1285c941d6dfc30abde5d4 100644 --- a/src/MNH/modd_turbn.f90 +++ b/src/MNH/modd_turbn.f90 @@ -42,6 +42,7 @@ !! P. Jabouille Apr 4, 2002 add switch for Sigma_s convection !! V. Masson Nov 13 2002 add switch for SBL lengths !! May 2006 Remove KEPS +!! C.Lac Nov 2014 add terms of TKE production for LES diag !------------------------------------------------------------------------------- ! @@ -84,6 +85,11 @@ TYPE TURB_t REAL, DIMENSION(:,:), POINTER :: XSBL_DEPTH=>NULL()! SurfaceBL depth for RMC01 computations REAL, DIMENSION(:,:,:), POINTER :: XWTHVMF=>NULL()! Mass Flux vert. transport of buoyancy REAL :: VSIGQSAT ! coeff applied to qsat variance contribution + REAL, DIMENSION(:,:,:), POINTER :: XDYP=>NULL() ! Dynamical production of Kinetic energy + REAL, DIMENSION(:,:,:), POINTER :: XTHP=>NULL() ! Thermal production of Kinetic energy + REAL, DIMENSION(:,:,:), POINTER :: XTR=>NULL() ! Transport production of Kinetic energy + REAL, DIMENSION(:,:,:), POINTER :: XDISS=>NULL() ! Dissipation of Kinetic energy + REAL, DIMENSION(:,:,:), POINTER :: XLEM=>NULL() ! Mixing length ! END TYPE TURB_t @@ -105,6 +111,11 @@ REAL, DIMENSION(:,:), POINTER :: XBL_DEPTH=>NULL() REAL, DIMENSION(:,:), POINTER :: XSBL_DEPTH=>NULL() REAL, DIMENSION(:,:,:), POINTER :: XWTHVMF=>NULL() REAL, POINTER :: VSIGQSAT=>NULL() +REAL, DIMENSION(:,:,:), POINTER :: XDYP=>NULL() +REAL, DIMENSION(:,:,:), POINTER :: XTHP=>NULL() +REAL, DIMENSION(:,:,:), POINTER :: XTR=>NULL() +REAL, DIMENSION(:,:,:), POINTER :: XDISS=>NULL() +REAL, DIMENSION(:,:,:), POINTER :: XLEM=>NULL() CONTAINS @@ -116,6 +127,11 @@ INTEGER, INTENT(IN) :: KFROM, KTO TURB_MODEL(KFROM)%XBL_DEPTH=>XBL_DEPTH TURB_MODEL(KFROM)%XSBL_DEPTH=>XSBL_DEPTH TURB_MODEL(KFROM)%XWTHVMF=>XWTHVMF +TURB_MODEL(KFROM)%XDYP=>XDYP +TURB_MODEL(KFROM)%XTHP=>XTHP +TURB_MODEL(KFROM)%XTR=>XTR +TURB_MODEL(KFROM)%XDISS=>XDISS +TURB_MODEL(KFROM)%XLEM=>XLEM ! ! Current model is set to model KTO XIMPL=>TURB_MODEL(KTO)%XIMPL @@ -134,6 +150,11 @@ XBL_DEPTH=>TURB_MODEL(KTO)%XBL_DEPTH XSBL_DEPTH=>TURB_MODEL(KTO)%XSBL_DEPTH XWTHVMF=>TURB_MODEL(KTO)%XWTHVMF VSIGQSAT=>TURB_MODEL(KTO)%VSIGQSAT +XDYP=>TURB_MODEL(KTO)%XDYP +XTHP=>TURB_MODEL(KTO)%XTHP +XTR=>TURB_MODEL(KTO)%XTR +XDISS=>TURB_MODEL(KTO)%XDISS +XLEM=>TURB_MODEL(KTO)%XLEM END SUBROUTINE TURB_GOTO_MODEL diff --git a/src/MNH/phys_paramn.f90 b/src/MNH/phys_paramn.f90 index 3fa665e73124ded4b748afb3f1eac31c5edbb6d1..4c738b31b9ca469677f670079658825f961d618d 100644 --- a/src/MNH/phys_paramn.f90 +++ b/src/MNH/phys_paramn.f90 @@ -214,7 +214,7 @@ END MODULE MODI_PHYS_PARAM_n !! 06/2010 (P.Peyrille) add Call to aerozon.f90 if LAERO_FT=T !! to update !! aerosols and ozone climatology at each call to -!! phys_param otherwise it is constant to monthly average +!! phys_param otherwise it is constant to monthly average !! 03/2013 (C.Lac) FIT temporal scheme !! 01/2014 (C.Lac) correction for the nesting of 2D surface !! fields if the number of the son model does not @@ -324,9 +324,7 @@ USE MODD_LATZ_EDFLX USE MODI_GOTO_SURFEX USE MODI_SWITCH_SBG_LES_N ! -!20130918 USE MODE_MPPDB - IMPLICIT NONE ! !* 0.1 declarations of arguments @@ -398,7 +396,7 @@ REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZRC, ZRI, ZWT ! additional dummies REAL, DIMENSION(:,:), ALLOCATABLE :: ZDXDY ! grid area ! for rc, ri, w required if main variables not allocated ! -INTEGER :: IIU, IJU, IKU, II ! dimensional indexes +INTEGER :: IIU, IJU, IKU ! dimensional indexes ! INTEGER :: JSV ! Loop index for Scalar Variables INTEGER :: JSWB ! loop on SW spectral bands @@ -1263,7 +1261,7 @@ IF ( CTURB == 'TKEL' ) THEN CALL UPDATE_HALO_ll(TZFIELDS_ll,IINFO_ll) CALL CLEANLIST_ll(TZFIELDS_ll) !!$ END IF - !20130918 use MPPDB for simultaneous runs np4 and np1 +! CALL MPPDB_CHECK2D(ZSFU,"phys_param::ZSFU",PRECISION) ! IF ( CLBCX(1) /= "CYCL" .AND. LWEST_ll()) THEN @@ -1338,7 +1336,7 @@ END IF XCEI,XCEI_MIN,XCEI_MAX,XCOEF_AMPL_SAT, & XTHT,XRT, & XRUS,XRVS,XRWS,XRTHS,XRRS,XRSVS,XRTKES,XRTKEMS, XSIGS, XWTHVMF, & - XTHW_FLUX, XRCW_FLUX, XSVW_FLUX ) + XTHW_FLUX, XRCW_FLUX, XSVW_FLUX,XDYP, XTHP, XTR, XDISS, XLEM ) ! IF (LRMC01) THEN CALL ADD2DFIELD_ll(TZFIELDS_ll,XSBL_DEPTH) @@ -1374,8 +1372,8 @@ IF (CSCONV == 'EDKF') THEN CALL MPPDB_CHECK3D(ZEXN,"physparan.7::ZEXN",PRECISION) CALL ADD3DFIELD_ll(TZFIELDS_ll, ZEXN) !$20131113 add update_halo_ll - CALL UPDATE_HALO_ll(TZFIELDS_ll,IINFO_ll) - CALL CLEANLIST_ll(TZFIELDS_ll) + CALL UPDATE_HALO_ll(TZFIELDS_ll,IINFO_ll) + CALL CLEANLIST_ll(TZFIELDS_ll) CALL MPPDB_CHECK3D(ZEXN,"physparam.7::ZEXN",PRECISION) ! CALL SHALLOW_MF_PACK(NRR,NRRL,NRRI, CMF_UPDRAFT, CMF_CLOUD, LMIXUV, & @@ -1383,7 +1381,7 @@ IF (CSCONV == 'EDKF') THEN XIMPL_MF, XTSTEP, & XDZZ, XZZ, & XRHODJ, XRHODREF, XPABST, ZEXN, ZSFTH, ZSFRV, & - XTHT,XRT,XUT,XVT,XTKET,XSVT, & + XTHT,XRT,XUT,XVT,XWT,XTKET,XSVT, & XRTHS,XRRS,XRUS,XRVS,XRSVS, & ZSIGMF,XRC_MF, XRI_MF, XCF_MF, XWTHVMF) ! diff --git a/src/MNH/rain_ice_elec.f90 b/src/MNH/rain_ice_elec.f90 index 7232f206cd24fb1d64e86c18c573527d3d56841f..d2b1c005bd8c0f10bdcaa812bfc32a28b153ed71 100644 --- a/src/MNH/rain_ice_elec.f90 +++ b/src/MNH/rain_ice_elec.f90 @@ -6,6 +6,7 @@ !--------------- special set of characters for RCS information !----------------------------------------------------------------- ! $Source$ $Revision$ +! masdev4_7 BUG1 2007/06/15 17:47:18 !----------------------------------------------------------------- ! ######################### MODULE MODI_RAIN_ICE_ELEC @@ -102,6 +103,7 @@ END SUBROUTINE RAIN_ICE_ELEC END INTERFACE END MODULE MODI_RAIN_ICE_ELEC ! +! ######spl SUBROUTINE RAIN_ICE_ELEC (OSEDIC, HSUBG_AUCV, OWARM, & KSPLITR, PTSTEP, KMI, KRR, & PZZ, PRHODJ, PRHODREF, PEXNREF, PPABST, PCIT, PCLDFR, & @@ -211,6 +213,20 @@ END MODULE MODI_RAIN_ICE_ELEC !! C. Lac 2011 : Adaptation to FIT temporal scheme !! B. Tsenova June 2012 Add new NI parameterizations !! C. Barthe June 2012 Dependance of RAR on the RELATIVE terminal velocity +!! M. Chong 06/08/13 Add "Beard" effect (ELEC=>MICROPHYSICS) +!! J-P Pinty 21/08/13 Correction of the process limitation algo. +!! SIGN(MIN(ABS ... +!! Correction in elec_update_qd +!! Correction of hail charge transfer +!! Add hail growth charging processes +!! J-P Pinty 26/08/13 Add "Beard" effect control (ELEC=>MICROPHYS) +!! for sedimentation +!! J-P Pinty 26/09/13 Add tabulated treatment of SAUN1 and SAUN2 +!! J-P Pinty 30/09/13 Remove call to MOMG function +!! J-P Pinty 25/10/13 Add "Latham" effect for aggregation process +!! M. Chong 31/10/13 Add other tabulated treatment and recode +!! M. Chong 15/11/13 Bug in the computation of RGWETH (wrong sign) +!! J-P Pinty 25/04/14 Many bugs with ZWQ1(:,...) = 0.0 !! J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 !! !------------------------------------------------------------------------------- @@ -492,65 +508,60 @@ REAL, DIMENSION(:), ALLOCATABLE :: ZFT ! Fct depending on temperature ! ! Non-inductive charging process following Saunders et al. (1991) / EW REAL, DIMENSION(:), ALLOCATABLE :: ZEW ! Effective liquid water content -REAL, DIMENSION(:), ALLOCATABLE :: ZSAUNQ ! q=f(LWC,T) in Saunders's equation -REAL, DIMENSION(:), ALLOCATABLE :: ZSAUNIK ! constant B _______________________ REAL, DIMENSION(:), ALLOCATABLE :: ZSAUNSK ! constant B _______________________ REAL, DIMENSION(:), ALLOCATABLE :: ZSAUNIM ! d_i exponent ____________________ REAL, DIMENSION(:), ALLOCATABLE :: ZSAUNIN ! v_g/s-v_i________________________ REAL, DIMENSION(:), ALLOCATABLE :: ZSAUNSM ! d_s exponent ____________________ REAL, DIMENSION(:), ALLOCATABLE :: ZSAUNSN ! v_g-v_s _________________________ +REAL, DIMENSION(:), ALLOCATABLE :: ZFQIAGGS, ZFQIDRYGBS +REAL, DIMENSION(:), ALLOCATABLE :: ZLBQSDRYGB1S, ZLBQSDRYGB2S, ZLBQSDRYGB3S ! ! Non-inductive charging process following Saunders and Peck (1998) / RAR REAL, DIMENSION(:), ALLOCATABLE :: ZVGMEAN ! Mean velocity of graupel REAL, DIMENSION(:), ALLOCATABLE :: ZVSMEAN ! Mean velocity of snow +REAL, DIMENSION(:), ALLOCATABLE :: ZRHOCOR ! Density correction for fallspeed REAL, DIMENSION(:), ALLOCATABLE :: ZRAR ! Rime accretion rate REAL, DIMENSION(:), ALLOCATABLE :: ZRAR_CRIT ! Critical RAR -REAL, DIMENSION(:), ALLOCATABLE :: ZPECKQ_IS ! q= f(RAR,T) in Saunders and Peck's equation -REAL, DIMENSION(:), ALLOCATABLE :: ZSAUNIK_IS ! constant B _______________________ -REAL, DIMENSION(:), ALLOCATABLE :: ZSAUNSK_IS ! constant B _______________________ +REAL, DIMENSION(:), ALLOCATABLE :: ZDQRAR_IS ! q= f(RAR,T) in Saunders and Peck's equation REAL, DIMENSION(:), ALLOCATABLE :: ZSAUNIM_IS ! d_i exponent ____________________ REAL, DIMENSION(:), ALLOCATABLE :: ZSAUNIN_IS ! v_g/s-v_i________________________ -REAL, DIMENSION(:), ALLOCATABLE :: ZSAUNSM_IS ! d_s exponent ____________________ -REAL, DIMENSION(:), ALLOCATABLE :: ZSAUNSN_IS ! v_g-v_s _________________________ -REAL, DIMENSION(:), ALLOCATABLE :: ZPECKQ_IG ! q= f(RAR,T) in Saunders and Peck's equation -REAL, DIMENSION(:), ALLOCATABLE :: ZSAUNIK_IG ! constant B _______________________ -REAL, DIMENSION(:), ALLOCATABLE :: ZSAUNSK_IG ! constant B _______________________ +REAL, DIMENSION(:), ALLOCATABLE :: ZDQRAR_IG ! q= f(RAR,T) in Saunders and Peck's equation REAL, DIMENSION(:), ALLOCATABLE :: ZSAUNIM_IG ! d_i exponent ____________________ REAL, DIMENSION(:), ALLOCATABLE :: ZSAUNIN_IG ! v_g/s-v_i________________________ -REAL, DIMENSION(:), ALLOCATABLE :: ZSAUNSM_IG ! d_s exponent ____________________ -REAL, DIMENSION(:), ALLOCATABLE :: ZSAUNSN_IG ! v_g-v_s _________________________ -REAL, DIMENSION(:), ALLOCATABLE :: ZPECKQ_SG ! q= f(RAR,T) in Saunders and Peck's equation -REAL, DIMENSION(:), ALLOCATABLE :: ZSAUNIK_SG ! constant B _______________________ +REAL, DIMENSION(:), ALLOCATABLE :: ZDQRAR_SG ! q= f(RAR,T) in Saunders and Peck's equation REAL, DIMENSION(:), ALLOCATABLE :: ZSAUNSK_SG ! constant B _______________________ -REAL, DIMENSION(:), ALLOCATABLE :: ZSAUNIM_SG ! d_i exponent ____________________ -REAL, DIMENSION(:), ALLOCATABLE :: ZSAUNIN_SG ! v_g/s-v_i________________________ REAL, DIMENSION(:), ALLOCATABLE :: ZSAUNSM_SG ! d_s exponent ____________________ REAL, DIMENSION(:), ALLOCATABLE :: ZSAUNSN_SG ! v_g-v_s _________________________ ! -! Non-inductive charging process following Tsenova and Mitzeva (2009, 2011) -REAL, DIMENSION(:), ALLOCATABLE :: ZBTRMQ ! param. with EW -REAL, DIMENSION(:), ALLOCATABLE :: ZBTRMQ_IS ! param. with RAR -REAL, DIMENSION(:), ALLOCATABLE :: ZBTRMQ_IG ! param. with RAR -REAL, DIMENSION(:), ALLOCATABLE :: ZBTRMQ_SG ! param. with RAR -! ! Non-inductive charging process following Takahashi (1978) INTEGER :: IGTAKA ! Case number of charge separation for Takahashi param. -INTEGER, DIMENSION(:), ALLOCATABLE :: ITEST_TAK ! Test if EW index already computed LOGICAL, DIMENSION(:), ALLOCATABLE :: GTAKA ! Test where to compute charge ! separation for Takahashi param. REAL, DIMENSION(:), ALLOCATABLE :: ZDQTAKA_OPT ! Optimized array of separated charge -REAL, DIMENSION(:), ALLOCATABLE :: ZDQTAKA ! q=f(LWC,T) in Takahashi's equation +! +INTEGER :: IGSAUN ! Case number of charge separation for Saunders param. +LOGICAL, DIMENSION(:), ALLOCATABLE :: GSAUN ! Test where to compute charge + ! separation for Saunders param. +REAL, DIMENSION(:), ALLOCATABLE :: ZDQLWC_OPT ! Optimized array of separated charge +REAL, DIMENSION(:), ALLOCATABLE :: ZDQLWC ! q=f(LWC,T) ! ! Inductive charging process (Ziegler et al., 1991) INTEGER :: IIND ! Case number of inductive process LOGICAL, DIMENSION(:), ALLOCATABLE :: GIND ! Test where to compute inductive process REAL, DIMENSION(:), ALLOCATABLE :: ZRATE_IND ! Charge transfer rate during inductive process REAL, DIMENSION(:), ALLOCATABLE :: ZEFIELDW ! Vertical component of the electric field +! +! Latham's effect +REAL, DIMENSION(:), ALLOCATABLE :: ZLATHAMIAGGS ! E Function to simulate + ! enhancement of IAGGS +REAL, DIMENSION(:), ALLOCATABLE :: ZEFIELDU ! Horiz. component of the electric field +REAL, DIMENSION(:), ALLOCATABLE :: ZEFIELDV ! Horiz. component of the electric field +! REAL, DIMENSION(:), ALLOCATABLE :: ZLIMIT, ZAUX, ZAUX1 REAL, DIMENSION(:), ALLOCATABLE :: ZCOLIS ! Collection efficiency between ice and snow REAL, DIMENSION(:), ALLOCATABLE :: ZCOLIG ! Collection efficiency between ice and graupeln REAL, DIMENSION(:), ALLOCATABLE :: ZCOLSG ! Collection efficiency between snow and graupeln -REAL :: ZRHO00 ! Surface reference air density +REAL :: ZRHO00, ZCOR00 ! Surface reference air density ! !------------------------------------------------------------------------------- ! @@ -562,6 +573,7 @@ IKB = 1 + JPVEXT IKE = SIZE(PZZ,3) - JPVEXT ! ZRHO00 = XP00 / (XRD * XTHVREFZ(IKB)) +ZCOR00 = ZRHO00**XCEXVT ! ! !* 2. COMPUTES THE SLOW COLD PROCESS SOURCES @@ -580,7 +592,7 @@ CALL RAIN_ICE_ELEC_NUCLEATION GMICRO(:,:,:) = .FALSE. IF ( KRR == 7 ) THEN - GMICRO(IIB:IIE,IJB:IJE,IKB:IKE) = & + GMICRO(IIB:IIE,IJB:IJE,IKB:IKE) = & PRCT(IIB:IIE,IJB:IJE,IKB:IKE) > XRTMIN(2) .OR. & PRRT(IIB:IIE,IJB:IJE,IKB:IKE) > XRTMIN(3) .OR. & PRIT(IIB:IIE,IJB:IJE,IKB:IKE) > XRTMIN(4) .OR. & @@ -588,7 +600,7 @@ IF ( KRR == 7 ) THEN PRGT(IIB:IIE,IJB:IJE,IKB:IKE) > XRTMIN(6) .OR. & PRHT(IIB:IIE,IJB:IJE,IKB:IKE) > XRTMIN(7) ELSE IF( KRR == 6 ) THEN - GMICRO(IIB:IIE,IJB:IJE,IKB:IKE) = & + GMICRO(IIB:IIE,IJB:IJE,IKB:IKE) = & PRCT(IIB:IIE,IJB:IJE,IKB:IKE) > XRTMIN(2) .OR. & PRRT(IIB:IIE,IJB:IJE,IKB:IKE) > XRTMIN(3) .OR. & PRIT(IIB:IIE,IJB:IJE,IKB:IKE) > XRTMIN(4) .OR. & @@ -650,6 +662,9 @@ IF (IMICRO > 0) THEN ZPRES(JL) = PPABST(I1(JL),I2(JL),I3(JL)) ZEXNREF(JL) = PEXNREF(I1(JL),I2(JL),I3(JL)) ENDDO +! + ALLOCATE(ZRHOCOR(IMICRO)) + ZRHOCOR(:) = (ZRHO00 / ZRHODREF(:))**XCEXVT ! ALLOCATE(ZZW(IMICRO)) ALLOCATE(ZLSFACT(IMICRO)) @@ -729,58 +744,65 @@ IF (IMICRO > 0) THEN ALLOCATE( ZDELTALWC(IMICRO) ) ALLOCATE( ZFT(IMICRO) ) END IF +! IF (CNI_CHARGING == 'SAUN1' .OR. CNI_CHARGING == 'SAUN2' .OR. & - CNI_CHARGING == 'TAKAH' .OR. CNI_CHARGING == 'TEEWC') & + CNI_CHARGING == 'TAKAH' .OR. & + CNI_CHARGING == 'BSMP1' .OR. CNI_CHARGING == 'BSMP2' .OR. & + CNI_CHARGING == 'TEEWC' .OR. CNI_CHARGING == 'TERAR') THEN ALLOCATE( ZEW(IMICRO) ) + END IF + IF (CNI_CHARGING == 'SAUN1' .OR. CNI_CHARGING == 'SAUN2') THEN - ALLOCATE( ZSAUNQ(IMICRO) ) ALLOCATE( ZLWCC(IMICRO) ) - ALLOCATE( ZSAUNIK(IMICRO) ) + END IF +! + IF (CNI_CHARGING == 'SAUN1' .OR. CNI_CHARGING == 'SAUN2' .OR. & + CNI_CHARGING == 'TAKAH' .OR. CNI_CHARGING == 'TEEWC') THEN + ALLOCATE( ZDQLWC(IMICRO) ) + END IF +! + IF (CNI_CHARGING == 'SAUN1' .OR. CNI_CHARGING == 'SAUN2' .OR. & + CNI_CHARGING == 'TEEWC' ) THEN ALLOCATE( ZSAUNSK(IMICRO) ) ALLOCATE( ZSAUNIM(IMICRO) ) ALLOCATE( ZSAUNIN(IMICRO) ) ALLOCATE( ZSAUNSM(IMICRO) ) ALLOCATE( ZSAUNSN(IMICRO) ) END IF - IF (CNI_CHARGING == 'TAKAH') ALLOCATE( ZDQTAKA(IMICRO) ) - IF (CNI_CHARGING == 'SAP98' .OR. & +! + IF (CNI_CHARGING == 'SAUN1' .OR. CNI_CHARGING == 'SAUN2' .OR. & + CNI_CHARGING == 'SAP98' .OR. & CNI_CHARGING == 'BSMP1' .OR. CNI_CHARGING == 'BSMP2' .OR. & - CNI_CHARGING == 'TERAR') THEN - ALLOCATE( ZVGMEAN(IMICRO) ) - ALLOCATE( ZVSMEAN(IMICRO) ) - ALLOCATE( ZRAR(IMICRO) ) + CNI_CHARGING == 'TEEWC' .OR. CNI_CHARGING == 'TERAR') THEN + ALLOCATE( ZFQIAGGS(IMICRO) ) + ALLOCATE( ZFQIDRYGBS(IMICRO) ) + ALLOCATE( ZLBQSDRYGB1S(IMICRO) ) + ALLOCATE( ZLBQSDRYGB2S(IMICRO) ) + ALLOCATE( ZLBQSDRYGB3S(IMICRO) ) END IF +! IF (CNI_CHARGING == 'SAP98' .OR. & CNI_CHARGING == 'BSMP1' .OR. CNI_CHARGING == 'BSMP2') THEN ALLOCATE( ZRAR_CRIT(IMICRO) ) - ALLOCATE( ZPECKQ_IS(IMICRO) ) - ALLOCATE( ZSAUNIK_IS(IMICRO) ) - ALLOCATE( ZSAUNSK_IS(IMICRO) ) + END IF +! + IF (CNI_CHARGING == 'SAP98' .OR. CNI_CHARGING == 'TERAR' .OR. & + CNI_CHARGING == 'BSMP1' .OR. CNI_CHARGING == 'BSMP2') THEN + ALLOCATE( ZVGMEAN(IMICRO) ) + ALLOCATE( ZVSMEAN(IMICRO) ) + ALLOCATE( ZRAR(IMICRO) ) + ALLOCATE( ZDQRAR_IS(IMICRO) ) + ALLOCATE( ZDQRAR_IG(IMICRO) ) + ALLOCATE( ZDQRAR_SG(IMICRO) ) ALLOCATE( ZSAUNIM_IS(IMICRO) ) ALLOCATE( ZSAUNIN_IS(IMICRO) ) - ALLOCATE( ZSAUNSM_IS(IMICRO) ) - ALLOCATE( ZSAUNSN_IS(IMICRO) ) - ALLOCATE( ZPECKQ_IG(IMICRO) ) - ALLOCATE( ZSAUNIK_IG(IMICRO) ) - ALLOCATE( ZSAUNSK_IG(IMICRO) ) ALLOCATE( ZSAUNIM_IG(IMICRO) ) ALLOCATE( ZSAUNIN_IG(IMICRO) ) - ALLOCATE( ZSAUNSM_IG(IMICRO) ) - ALLOCATE( ZSAUNSN_IG(IMICRO) ) - ALLOCATE( ZPECKQ_SG(IMICRO) ) - ALLOCATE( ZSAUNIK_SG(IMICRO) ) ALLOCATE( ZSAUNSK_SG(IMICRO) ) - ALLOCATE( ZSAUNIM_SG(IMICRO) ) - ALLOCATE( ZSAUNIN_SG(IMICRO) ) ALLOCATE( ZSAUNSM_SG(IMICRO) ) ALLOCATE( ZSAUNSN_SG(IMICRO) ) END IF - IF (CNI_CHARGING == 'BSMP2') THEN - ALLOCATE( ZBTRMQ_IS(IMICRO) ) - ALLOCATE( ZBTRMQ_IG(IMICRO) ) - ALLOCATE( ZBTRMQ_SG(IMICRO) ) - END IF - IF (CNI_CHARGING == 'TEEWC') ALLOCATE( ZBTRMQ(IMICRO) ) +! IF (CNI_CHARGING == 'TAKAH' .OR. CNI_CHARGING == 'SAP98' .OR. & CNI_CHARGING == 'SAUN1' .OR. CNI_CHARGING == 'SAUN2' .OR. & CNI_CHARGING == 'GARDI' .OR. CNI_CHARGING == 'BSMP1' .OR. & @@ -795,6 +817,13 @@ IF (IMICRO > 0) THEN ALLOCATE( ZRATE_IND(IMICRO) ) ALLOCATE( GIND(IMICRO) ) END IF +! + IF (LIAGGS_LATHAM) THEN + ALLOCATE( ZEFIELDU(IMICRO) ) + ALLOCATE( ZEFIELDV(IMICRO) ) + IF (.NOT.ALLOCATED(ZEFIELDW)) ALLOCATE( ZEFIELDW(IMICRO) ) + END IF + ALLOCATE( ZLATHAMIAGGS(IMICRO) ) ! ALLOCATE( ZWQ1(IMICRO,10) ) ALLOCATE( ZWQ3(IMICRO) ) @@ -807,6 +836,11 @@ IF (IMICRO > 0) THEN ! DO JL = 1, IMICRO IF (LINDUCTIVE) ZEFIELDW(JL) = XEFIELDW(I1(JL), I2(JL), I3(JL)) + IF (LIAGGS_LATHAM) THEN + ZEFIELDU(JL) = XEFIELDU(I1(JL), I2(JL), I3(JL)) + ZEFIELDV(JL) = XEFIELDV(I1(JL), I2(JL), I3(JL)) + IF (.NOT.LINDUCTIVE ) ZEFIELDW(JL) = XEFIELDW(I1(JL), I2(JL), I3(JL)) + END IF ! ZQPIT(JL) = PQPIT(I1(JL), I2(JL), I3(JL)) ZQNIT(JL) = PQNIT(I1(JL), I2(JL), I3(JL)) @@ -972,6 +1006,7 @@ IF (IMICRO > 0) THEN DEALLOCATE(ZEXNREF) DEALLOCATE(ZPRES) DEALLOCATE(ZRHODREF) + DEALLOCATE(ZRHOCOR) DEALLOCATE(ZZT) IF(LBU_ENABLE .OR. LLES_CALL) DEALLOCATE(ZRHODJ) DEALLOCATE(ZTHS) @@ -1030,52 +1065,43 @@ IF (IMICRO > 0) THEN DEALLOCATE( ZCOLIG ) DEALLOCATE( ZCOLSG ) DEALLOCATE( ZRSMIN_ELEC) + DEALLOCATE( GELEC ) IF (ALLOCATED( ZDELTALWC )) DEALLOCATE( ZDELTALWC ) IF (ALLOCATED( ZLWCC )) DEALLOCATE( ZLWCC ) IF (ALLOCATED( ZFT )) DEALLOCATE( ZFT ) IF (ALLOCATED( ZEW )) DEALLOCATE( ZEW ) - IF (ALLOCATED( ZSAUNQ )) DEALLOCATE( ZSAUNQ ) - IF (ALLOCATED( ZSAUNIK )) DEALLOCATE( ZSAUNIK ) IF (ALLOCATED( ZSAUNSK )) DEALLOCATE( ZSAUNSK ) IF (ALLOCATED( ZSAUNIM )) DEALLOCATE( ZSAUNIM ) IF (ALLOCATED( ZSAUNIN )) DEALLOCATE( ZSAUNIN ) IF (ALLOCATED( ZSAUNSM )) DEALLOCATE( ZSAUNSM ) IF (ALLOCATED( ZSAUNSN )) DEALLOCATE( ZSAUNSN ) - IF (ALLOCATED( ZDQTAKA )) DEALLOCATE( ZDQTAKA ) IF (ALLOCATED( ZVGMEAN )) DEALLOCATE( ZVGMEAN ) IF (ALLOCATED( ZRAR )) DEALLOCATE( ZRAR ) IF (ALLOCATED( ZRAR_CRIT )) DEALLOCATE( ZRAR_CRIT ) - IF (ALLOCATED( ZSAUNIK_IS )) DEALLOCATE( ZSAUNIK_IS ) - IF (ALLOCATED( ZSAUNSK_IS )) DEALLOCATE( ZSAUNSK_IS ) IF (ALLOCATED( ZSAUNIM_IS )) DEALLOCATE( ZSAUNIM_IS ) IF (ALLOCATED( ZSAUNIN_IS )) DEALLOCATE( ZSAUNIN_IS ) - IF (ALLOCATED( ZSAUNSM_IS )) DEALLOCATE( ZSAUNSM_IS ) - IF (ALLOCATED( ZSAUNSN_IS )) DEALLOCATE( ZSAUNSN_IS ) - IF (ALLOCATED( ZPECKQ_IS )) DEALLOCATE( ZPECKQ_IS ) - IF (ALLOCATED( ZSAUNIK_IG )) DEALLOCATE( ZSAUNIK_IG ) - IF (ALLOCATED( ZSAUNSK_IG )) DEALLOCATE( ZSAUNSK_IG ) + IF (ALLOCATED( ZFQIAGGS )) DEALLOCATE( ZFQIAGGS ) + IF (ALLOCATED( ZFQIDRYGBS )) DEALLOCATE( ZFQIDRYGBS ) + IF (ALLOCATED( ZLBQSDRYGB1S )) DEALLOCATE( ZLBQSDRYGB1S ) + IF (ALLOCATED( ZLBQSDRYGB2S )) DEALLOCATE( ZLBQSDRYGB2S ) + IF (ALLOCATED( ZLBQSDRYGB3S )) DEALLOCATE( ZLBQSDRYGB3S ) IF (ALLOCATED( ZSAUNIM_IG )) DEALLOCATE( ZSAUNIM_IG ) IF (ALLOCATED( ZSAUNIN_IG )) DEALLOCATE( ZSAUNIN_IG ) - IF (ALLOCATED( ZSAUNSM_IG )) DEALLOCATE( ZSAUNSM_IG ) - IF (ALLOCATED( ZSAUNSN_IG )) DEALLOCATE( ZSAUNSN_IG ) - IF (ALLOCATED( ZPECKQ_IG )) DEALLOCATE( ZPECKQ_IG ) - IF (ALLOCATED( ZSAUNIK_SG )) DEALLOCATE( ZSAUNIK_SG ) IF (ALLOCATED( ZSAUNSK_SG )) DEALLOCATE( ZSAUNSK_SG ) - IF (ALLOCATED( ZSAUNIM_SG )) DEALLOCATE( ZSAUNIM_SG ) - IF (ALLOCATED( ZSAUNIN_SG )) DEALLOCATE( ZSAUNIN_SG ) IF (ALLOCATED( ZSAUNSM_SG )) DEALLOCATE( ZSAUNSM_SG ) IF (ALLOCATED( ZSAUNSN_SG )) DEALLOCATE( ZSAUNSN_SG ) - IF (ALLOCATED( ZPECKQ_SG )) DEALLOCATE( ZPECKQ_SG ) - IF (ALLOCATED( ZBTRMQ )) DEALLOCATE( ZBTRMQ ) - IF (ALLOCATED( ZBTRMQ_IS )) DEALLOCATE( ZBTRMQ_IS ) - IF (ALLOCATED( ZBTRMQ_IG )) DEALLOCATE( ZBTRMQ_IG ) - IF (ALLOCATED( ZBTRMQ_SG )) DEALLOCATE( ZBTRMQ_SG ) + IF (ALLOCATED( ZDQLWC )) DEALLOCATE( ZDQLWC ) + IF (ALLOCATED( ZDQRAR_IS )) DEALLOCATE( ZDQRAR_IS ) + IF (ALLOCATED( ZDQRAR_IG )) DEALLOCATE( ZDQRAR_IG ) + IF (ALLOCATED( ZDQRAR_SG )) DEALLOCATE( ZDQRAR_SG ) IF (ALLOCATED( ZAUX1 )) DEALLOCATE( ZAUX1 ) IF (ALLOCATED( ZLIMIT )) DEALLOCATE( ZLIMIT ) - DEALLOCATE( GELEC ) IF (ALLOCATED( ZEFIELDW )) DEALLOCATE( ZEFIELDW ) IF (ALLOCATED( ZRATE_IND )) DEALLOCATE( ZRATE_IND ) IF (ALLOCATED( GIND )) DEALLOCATE( GIND ) + IF (ALLOCATED( ZEFIELDU )) DEALLOCATE( ZEFIELDU ) + IF (ALLOCATED( ZEFIELDV )) DEALLOCATE( ZEFIELDV ) + DEALLOCATE( ZLATHAMIAGGS ) ! ELSE ! @@ -1284,6 +1310,12 @@ INTEGER, SAVE :: IOLDALLOCH = 6000 ! REAL, DIMENSION(SIZE(PRHODREF,1),SIZE(PRHODREF,2),SIZE(PRHODREF,3)) :: ZCONC3D ! droplet condensation INTEGER, DIMENSION(:), ALLOCATABLE :: ZCIS +REAL, DIMENSION(SIZE(PRHODREF,1),SIZE(PRHODREF,2),SIZE(PRHODREF,3)) :: ZF0, ZF1, ZCOR +REAL :: ZBEARDCOEFR, ZBEARDCOEFI, ZBEARDCOEFS, ZBEARDCOEFG +REAL :: ZVR, ZVI, ZVS, ZVG, ZETA0, ZK, ZRE0 +! For rain, ice, snow and graupel particles, Take into account the +! effects of altitude and electrical force on terminal fallspeed +! (from Beard, JAS 1980, 37,1363-1374) ! !------------------------------------------------------------------------------- ! @@ -1296,6 +1328,21 @@ INTEGER, DIMENSION(:), ALLOCATABLE :: ZCIS PINPRG (:,:) = 0. IF ( KRR == 7 ) PINPRH (:,:) = 0. ! + ZT (:,:,:) = ZT (:,:,:) - XTT !ZT from RAIN_ICE_ELEC_NUCLEATION + ZETA0 = (1.718 + 0.0049*(XTHVREFZ(IKB) -XTT)) + WHERE (ZT (:,:,:) >= 0.0) + ZF0(:,:,:) = ZETA0 / (1.718 + 0.0049*ZT(:,:,:)) + ELSEWHERE + ZF0(:,:,:) = ZETA0 / (1.718 + 0.0049*ZT(:,:,:) - 1.2E-5*ZT(:,:,:)*ZT(:,:,:)) + END WHERE +! + ZF1(:,:,:) = SQRT(ZRHO00/PRHODREF(:,:,:)) + ZCOR(:,:,:) = (PRHODREF(:,:,:)/ZRHO00)**XCEXVT ! to eliminate Foote-duToit correction +! + ZVR = (ZRHO00/ZETA0) * XCR * MOMG(XALPHAR,XNUR,XBR+XDR) / MOMG(XALPHAR,XNUR,XBR) + ZVI = (ZRHO00/ZETA0) * 2.1E5 * MOMG(XALPHAI,XNUI,3.285) / MOMG(XALPHAI,XNUI,1.7) ! Columns + ZVS = (ZRHO00/ZETA0) * XCS * MOMG(XALPHAS,XNUS,XBS+XDS) / MOMG(XALPHAS,XNUS,XBS) + ZVG = (ZRHO00/ZETA0) * XCG * MOMG(XALPHAG,XNUG,XBG+XDG) / MOMG(XALPHAG,XNUG,XBG) ! !* 1. Parameters for cloud sedimentation ! @@ -1506,6 +1553,7 @@ INTEGER, DIMENSION(:), ALLOCATABLE :: ZCIS ALLOCATE(ZRRS(ILENALLOCR), ZRHODREFR(ILENALLOCR), ILISTR(ILENALLOCR)) ALLOCATE(ZQRS(ILENALLOCR), ZLBDAR(ILENALLOCR), ZERS(ILENALLOCR)) END IF + ZERS(:) = 0. ! DO JL = 1, ISEDIMR ZRRS(JL) = PRRS(IR1(JL),IR2(JL),IR3(JL)) @@ -1530,11 +1578,36 @@ INTEGER, DIMENSION(:), ALLOCATABLE :: ZCIS END DO DO JJ = 1, ILISTLENR JL = ILISTR(JJ) - ZWSED(IR1(JL),IR2(JL),IR3(JL)) = XFSEDR * ZRRS(JL)**XEXSEDR * & + IF (ZRRS(JL) > 0. .AND. LSEDIM_BEARD) THEN + ZK = 1. - ZQRS(JL) * XEFIELDW(IR1(JL),IR2(JL),IR3(JL)) / (ZRRS(JL)*XG) + IF (ZK <= 0.0) THEN + ZBEARDCOEFR = 0. + ELSE + ZRE0 = ZVR / ZLBDAR(JL)**(1.+XDR) + IF (ZRE0 <= 0.2) THEN + ZBEARDCOEFR = ZF0(IR1(JL),IR2(JL),IR3(JL)) * ZK + ELSE IF (ZRE0 >= 1000.) THEN + ZBEARDCOEFR = ZF1(IR1(JL),IR2(JL),IR3(JL)) * SQRT(ZK) + ELSE + ZBEARDCOEFR = ZF0(IR1(JL),IR2(JL),IR3(JL)) * ZK + & + (ZF1(IR1(JL),IR2(JL),IR3(JL)) * & + SQRT(ZK)-ZF0(IR1(JL),IR2(JL),IR3(JL))*ZK) * & + (1.61+LOG(ZRE0)) / 8.52 + END IF + ZBEARDCOEFR = ZBEARDCOEFR * ZCOR(IR1(JL),IR2(JL),IR3(JL)) + END IF + ELSE + ZBEARDCOEFR = 1.0 ! No "Beard" effect + END IF +! + ZWSED(IR1(JL),IR2(JL),IR3(JL)) = ZBEARDCOEFR * & + XFSEDR * ZRRS(JL)**XEXSEDR * & ZRHODREFR(JL)**(XEXSEDR-XCEXVT) +! IF (ZRRS(JL) > ZRTMIN(3) .AND. ABS(ZERS(JL)) > XERMIN) THEN - ZWSEDQ(IR1(JL),IR2(JL),IR3(JL)) = XFQSEDR * ZERS(JL) * & - ZRRS(JL)**XEXQSEDR * & + ZWSEDQ(IR1(JL),IR2(JL),IR3(JL)) = ZBEARDCOEFR * & + XFQSEDR * ZERS(JL) * & + ZRRS(JL)**XEXQSEDR * & ZRHODREFR(JL)**(XEXQSEDR-XCEXVT) END IF END DO @@ -1571,7 +1644,6 @@ INTEGER, DIMENSION(:), ALLOCATABLE :: ZCIS ZCIT(ILENALLOCI), & ZCIS(ILENALLOCI), & ZLBDAI(ILENALLOCI)) - ZEIS(:) = 0. END IF ! DO JL = 1, ISEDIMI @@ -1579,11 +1651,17 @@ INTEGER, DIMENSION(:), ALLOCATABLE :: ZCIS ZRHODREFI(JL) = PRHODREF(II1(JL),II2(JL),II3(JL)) ZQIS(JL) = PQIS(II1(JL),II2(JL),II3(JL)) ZCIT(JL) = PCIT(II1(JL),II2(JL),II3(JL)) + ZEIS(JL) = 0. ! compute e_i IF (ZRIS(JL) > ZRTMIN(4) .AND. ZCIT(JL) > 0.0) THEN ZEIS(JL) = ZRHODREFI(JL) * ZQIS(JL) / ((ZCIT(JL)**(1 - XEXFQUPDI)) * & XFQUPDI * (ZRHODREFI(JL) * ZRIS(JL))**XEXFQUPDI) ZEIS(JL) = SIGN( MIN(ABS(ZEIS(JL)), XEIMAX), ZEIS(JL)) + ZCIS(JL) = XFCI * ZRHODREFI(JL) * ZRIS(JL) * & + MAX(0.05E6, & + -0.15319E6 - 0.021454E6 * ALOG(ZRHODREFI(JL) * ZRIS(JL)))**3 + ZLBDAI(JL) = (2.14E-3 * MOMG(XALPHAI,XNUI,1.7) * & + ZCIS(JL) / (ZRHODREFI(JL) * ZRIS(JL)))**0.588235 END IF END DO ! @@ -1596,16 +1674,37 @@ INTEGER, DIMENSION(:), ALLOCATABLE :: ZCIS END DO DO JJ = 1, ILISTLENI JL = ILISTI(JJ) - ZWSED(II1(JL),II2(JL),II3(JL))= XFSEDI * ZRIS(JL) * & + IF (ZRIS(JL) > ZRTMIN(4) .AND. ZCIT(JL) > 0.0 .AND. LSEDIM_BEARD) THEN + ZK = 1. - ZQIS(JL) * XEFIELDW(II1(JL),II2(JL),II3(JL)) / (ZRIS(JL)*XG) + IF (ZK <= 0.0) THEN + ZBEARDCOEFI = 0. + ELSE + ZRE0 = ZVI / ZLBDAI(JL)**2.585 + IF (ZRE0 <= 0.2) THEN + ZBEARDCOEFI = ZF0(II1(JL),II2(JL),II3(JL)) * ZK + ELSE IF (ZRE0 >= 1000.) THEN + ZBEARDCOEFI = ZF1(II1(JL),II2(JL),II3(JL)) * SQRT(ZK) + ELSE + ZBEARDCOEFI = ZF0(II1(JL),II2(JL),II3(JL)) * ZK + & + (ZF1(II1(JL),II2(JL),II3(JL)) * & + SQRT(ZK) - ZF0(II1(JL),II2(JL),II3(JL)) * ZK) * & + (1.61 + LOG(ZRE0)) / 8.52 + END IF + ZBEARDCOEFI = ZBEARDCOEFI * ZCOR(II1(JL),II2(JL),II3(JL)) + END IF + ELSE + ZBEARDCOEFI = 1.0 ! No "Beard" effect + END IF +! + ZWSED(II1(JL),II2(JL),II3(JL))= ZBEARDCOEFI * & + XFSEDI * ZRIS(JL) * & ZRHODREFI(JL)**(1.0-XCEXVT) * & ! McF&H MAX( 0.05E6,-0.15319E6-0.021454E6* & ALOG(ZRHODREFI(JL)*ZRIS(JL)) )**XEXCSEDI IF (ZRIS(JL) .GT. MAX(ZRTMIN(4),1.0E-7) .AND. ABS(ZEIS(JL)) .GT. XEIMIN .AND. & ZCIT(JL) .GT. 0. ) THEN - ZCIS(JL) = XFCI * ZRHODREFI(JL) * ZRIS(JL) * & - MAX(0.05E6, & - -0.15319E6 - 0.021454E6 * ALOG(ZRHODREFI(JL) * ZRIS(JL)))**3 - ZWSEDQ(II1(JL),II2(JL),II3(JL)) = ZCIS(JL)**(1 - XEXQSEDI) * XFQSEDI * & + ZWSEDQ(II1(JL),II2(JL),II3(JL)) = ZBEARDCOEFI * & + ZCIS(JL)**(1 - XEXQSEDI) * XFQSEDI * & ZRIS(JL)**XEXQSEDI * ZRHODREFI(JL)**(XEXQSEDI - XCEXVT) * & ZEIS(JL) * (ZCIT(JL) / ZCIS(JL))**(1.-XFI/XBI) END IF @@ -1643,6 +1742,7 @@ INTEGER, DIMENSION(:), ALLOCATABLE :: ZCIS ZRSS(JL) = PRSS(IS1(JL),IS2(JL),IS3(JL)) ZRHODREFS(JL) = PRHODREF(IS1(JL),IS2(JL),IS3(JL)) ZQSS(JL) = PQSS(IS1(JL),IS2(JL),IS3(JL)) + ZESS(JL) = 0. ! compute lambda_s and e_s IF (ZRSS(JL) > 0.) THEN ZLBDAS(JL) = MIN(XLBDAS_MAX, & @@ -1663,11 +1763,35 @@ INTEGER, DIMENSION(:), ALLOCATABLE :: ZCIS END DO DO JJ = 1, ILISTLENS JL = ILISTS(JJ) - ZWSED (IS1(JL),IS2(JL),IS3(JL)) = XFSEDS * ZRSS(JL)**XEXSEDS * & + IF (ZRSS(JL) > 0. .AND. LSEDIM_BEARD) THEN + ZK = 1. - ZQSS(JL) * XEFIELDW(IS1(JL),IS2(JL),IS3(JL)) / (ZRSS(JL)*XG) + IF (ZK <= 0.0) THEN + ZBEARDCOEFS = 0. + ELSE + ZRE0 = ZVS / ZLBDAS(JL)**(1.+XDS) + IF (ZRE0 <= 0.2) THEN + ZBEARDCOEFS = ZF0(IS1(JL),IS2(JL),IS3(JL)) * ZK + ELSE IF (ZRE0 >= 1000.) THEN + ZBEARDCOEFS = ZF1(IS1(JL),IS2(JL),IS3(JL)) * SQRT(ZK) + ELSE + ZBEARDCOEFS = ZF0(IS1(JL),IS2(JL),IS3(JL)) * ZK + & + (ZF1(IS1(JL),IS2(JL),IS3(JL)) * & + SQRT(ZK) -ZF0(IS1(JL),IS2(JL),IS3(JL)) * ZK) * & + (1.61 + LOG(ZRE0)) / 8.52 + END IF + ZBEARDCOEFS = ZBEARDCOEFS * ZCOR(IS1(JL),IS2(JL),IS3(JL)) + END IF + ELSE + ZBEARDCOEFS = 1.0 ! No "Beard" effect + END IF +! + ZWSED (IS1(JL),IS2(JL),IS3(JL)) = ZBEARDCOEFS * & + XFSEDS * ZRSS(JL)**XEXSEDS * & ZRHODREFS(JL)**(XEXSEDS-XCEXVT) IF (ZRSS(JL) .GT. ZRTMIN(5) .AND. ABS(ZESS(JL)) > XESMIN) THEN - ZWSEDQ(IS1(JL),IS2(JL),IS3(JL)) = XFQSEDS * ZESS(JL) * & - ZRSS(JL)**XEXQSEDS * & + ZWSEDQ(IS1(JL),IS2(JL),IS3(JL)) = ZBEARDCOEFS * & + XFQSEDS * ZESS(JL) * & + ZRSS(JL)**XEXQSEDS * & ZRHODREFS(JL)**(XEXQSEDS - XCEXVT) END IF END DO @@ -1705,6 +1829,7 @@ INTEGER, DIMENSION(:), ALLOCATABLE :: ZCIS ZRGS(JL) = PRGS(IG1(JL),IG2(JL),IG3(JL)) ZRHODREFG(JL) = PRHODREF(IG1(JL),IG2(JL),IG3(JL)) ZQGS(JL) = PQGS(IG1(JL),IG2(JL),IG3(JL)) + ZEGS(JL) = 0. ! compute lambda_g and e_g IF (ZRGS(JL) > 0.) THEN ZLBDAG(JL) = XLBG * (ZRHODREFG(JL) * MAX(ZRGS(JL), ZRTMIN(6)))**XLBEXG @@ -1724,11 +1849,35 @@ INTEGER, DIMENSION(:), ALLOCATABLE :: ZCIS END DO DO JJ = 1, ILISTLENG JL = ILISTG(JJ) - ZWSED (IG1(JL),IG2(JL),IG3(JL))= XFSEDG * ZRGS(JL)**XEXSEDG * & + IF (ZRGS(JL) > 0. .AND. LSEDIM_BEARD) THEN + ZK = 1. - ZQGS(JL) * XEFIELDW(IG1(JL),IG2(JL),IG3(JL)) / (ZRGS(JL)*XG) + IF (ZK <= 0.0) THEN + ZBEARDCOEFG = 0. + ELSE + ZRE0 = ZVG / ZLBDAG(JL)**(1.+XDG) + IF (ZRE0 <= 0.2) THEN + ZBEARDCOEFG = ZF0(IG1(JL),IG2(JL),IG3(JL)) * ZK + ELSE IF (ZRE0 >= 1000.) THEN + ZBEARDCOEFG = ZF1(IG1(JL),IG2(JL),IG3(JL)) * SQRT(ZK) + ELSE + ZBEARDCOEFG = ZF0(IG1(JL),IG2(JL),IG3(JL)) * ZK + & + (ZF1(IG1(JL),IG2(JL),IG3(JL)) * & + SQRT(ZK) - ZF0(IG1(JL),IG2(JL),IG3(JL)) * ZK) * & + (1.61 + LOG(ZRE0)) / 8.52 + END IF + ZBEARDCOEFG = ZBEARDCOEFG * ZCOR(IG1(JL),IG2(JL),IG3(JL)) + END IF + ELSE + ZBEARDCOEFG = 1.0 ! No "Beard" effect + END IF +! + ZWSED (IG1(JL),IG2(JL),IG3(JL))= ZBEARDCOEFG * & + XFSEDG * ZRGS(JL)**XEXSEDG * & ZRHODREFG(JL)**(XEXSEDG-XCEXVT) IF (ZRGS(JL) .GT. ZRTMIN(6) .AND. ABS(ZEGS(JL)) > XEGMIN) THEN - ZWSEDQ(IG1(JL),IG2(JL),IG3(JL)) = XFQSEDG * ZEGS(JL) * & - ZRGS(JL)**XEXQSEDG * & + ZWSEDQ(IG1(JL),IG2(JL),IG3(JL)) = ZBEARDCOEFG * & + XFQSEDG * ZEGS(JL) * & + ZRGS(JL)**XEXQSEDG * & ZRHODREFG(JL)**(XEXQSEDG - XCEXVT) END IF END DO @@ -1767,6 +1916,7 @@ INTEGER, DIMENSION(:), ALLOCATABLE :: ZCIS ZRHS(JL) = PRHS(IH1(JL),IH2(JL),IH3(JL)) ZRHODREFH(JL) = PRHODREF(IH1(JL),IH2(JL),IH3(JL)) ZQHS(JL) = PQHS(IH1(JL),IH2(JL),IH3(JL)) + ZEHS(JL) = 0. ! compute lambda_h and e_h IF (ZRHS(JL) > 0.) THEN ZLBDAH(JL) = XLBH * (ZRHODREFH(JL) * MAX(ZRHS(JL), ZRTMIN(7)))**XLBEXH @@ -2345,7 +2495,6 @@ IF (LBUDGET_RI) CALL BUDGET (PRIS(:,:,:)*PRHODJ(:,:,:),9,'HENU_BU_RRI') END SUBROUTINE RAIN_ICE_ELEC_NUCLEATION ! !------------------------------------------------------------------------------- -! ! SUBROUTINE RAIN_ICE_ELEC_SLOW ! @@ -2378,11 +2527,9 @@ IMPLICIT NONE WHERE (ZZT(:) < (XTT - 35.) .AND. ZRIS(:) > ZRSMIN_ELEC(4) .AND. & ZRCT(:) > XRTMIN_ELEC(2) .AND. ZRCS(:) > ZRSMIN_ELEC(2) .AND. & ABS(ZQCS(:)) > XQTMIN(2) .AND. ABS(ZECT(:)) > XECMIN) - ZWQ1(:,1) = SIGN(MIN(ABS(ZQCS(:)), ABS(ZWQ1(:,1))), ZQCS(:)) + ZWQ1(:,1) = SIGN( MIN( ABS(ZQCS(:)),ABS(ZWQ1(:,1)) ),ZQCS(:) ) ZQIS(:) = ZQIS(:) + ZWQ1(:,1) ZQCS(:) = ZQCS(:) - ZWQ1(:,1) - ELSEWHERE - ZWQ1(:,1) = 0. END WHERE ! IF (LBUDGET_TH) CALL BUDGET ( & @@ -2416,11 +2563,9 @@ IMPLICIT NONE WHERE (ZZT(:) < (XTT - 35.) .AND. & ZRRT(:) > XRTMIN_ELEC(3) .AND. ZRRS(:) > ZRSMIN_ELEC(3) .AND. & ZRGS(:) > ZRSMIN_ELEC(6) .AND. ABS(ZQRT(:)) > XQTMIN(3)) - ZWQ1(:,2) = SIGN(MIN(ABS(ZQRS(:)), ABS(ZQRT(:) / PTSTEP)), ZQRS(:)) ! QRHONG + ZWQ1(:,2) = SIGN( MIN( ABS(ZQRS(:)),ABS(ZQRT(:)/PTSTEP) ),ZQRS(:) ) ! QRHONG ZQGS(:) = ZQGS(:) + ZWQ1(:,2) ZQRS(:) = ZQRS(:) - ZWQ1(:,2) - ELSEWHERE - ZWQ1(:,2) = 0. ENDWHERE ! IF (LBUDGET_TH) CALL BUDGET ( & @@ -2454,7 +2599,7 @@ IMPLICIT NONE + ( XRV*ZZT(:) ) / (ZDV(:)*ZAI(:)) ZCJ(:) = XSCFAC * ZRHODREF(:)**0.3 / SQRT( 1.718E-5+0.0049E-5*(ZZT(:)-XTT) ) ! -!* 3.5.3.2 compute the riming-conversion of r_c for r_i production: RCAUTI +!* 3.5.3.2 compute the riming-conversion of r_c for r_i production: RCAUTI ! ZZW(:) = 0.0 ! @@ -2472,13 +2617,10 @@ IMPLICIT NONE WHERE (ZRST(:) > XRTMIN_ELEC(5) .AND. ZRSS(:) > ZRSMIN_ELEC(5) .AND. & ZRVS(:) > ZRSMIN_ELEC(1) .AND. ABS(ZQST(:)) > XQTMIN(5) .AND. & ZZW(:) < 0. .AND. (-ZZW(:) <= ZRSS(:))) - ZWQ1(:,5) = SIGN(MIN(ABS(ZQSS(:)), ABS(ZWQ1(:,5))), ZQSS(:)) + ZWQ1(:,5) = SIGN( MIN( ABS(ZQSS(:)),ABS(ZWQ1(:,5)) ),ZQSS(:) ) ZQSS(:) = ZQSS(:) - ZWQ1(:,5) - WHERE (ZWQ1(:,5) > 0.0) - ZQPIS(:) = ZQPIS(:) + ZWQ1(:,5) / XECHARGE - ELSEWHERE - ZQNIS(:) = ZQNIS(:) - ZWQ1(:,5) / XECHARGE - ENDWHERE + ZQPIS(:) = ZQPIS(:) + MAX( 0.0,ZWQ1(:,5)/XECHARGE ) + ZQNIS(:) = ZQNIS(:) - MIN( 0.0,ZWQ1(:,5)/XECHARGE ) ENDWHERE ! IF (LBUDGET_TH) CALL BUDGET ( & @@ -2503,32 +2645,35 @@ IMPLICIT NONE !* 3.5.3.4 compute the aggregation on r_s: RIAGGS & QIAGGS ! ZZW(:) = 0.0 - ZWQ1(:,3) = 0. + ZLATHAMIAGGS(:) = 1.0 + IF (LIAGGS_LATHAM) THEN + ZLATHAMIAGGS(:) = 1.0 + 0.4E-10 * MIN( 2.25E10, & + ZEFIELDU(:)**2+ZEFIELDV(:)**2+ZEFIELDW(:)**2 ) + ENDIF ! WHERE (ZRIT(:) > XRTMIN(4) .AND. ZRST(:) > XRTMIN(5) .AND. ZRIS(:) > 0.0) ZZW(:) = MIN( ZRIS(:),XFIAGGS * EXP( XCOLEXIS*(ZZT(:)-XTT) ) & - * ZRIT(:) & - * ZLBDAS(:)**XEXIAGGS & - * ZRHODREF(:)**(-XCEXVT) ) - ZRSS(:) = ZRSS(:) + ZZW(:) - ZRIS(:) = ZRIS(:) - ZZW(:) + * ZLATHAMIAGGS(:) & + * ZRIT(:) & + * ZLBDAS(:)**XEXIAGGS & + * ZRHOCOR(:) / ZCOR00 ) + ZRSS(:) = ZRSS(:) + ZZW(:) + ZRIS(:) = ZRIS(:) - ZZW(:) ZWQ1(:,3) = XCOEF_RQ_I * ZZW(:) * ZQIT(:) / ZRIT(:) ! QIAGGS_coal END WHERE ! WHERE (ZRIT(:) > XRTMIN_ELEC(4) .AND. ZRIS(:) > ZRSMIN_ELEC(4) .AND. & ZRSS(:) > ZRSMIN_ELEC(5) .AND. ABS(ZQIT(:)) > XQTMIN(4)) - ZWQ1(:,3) = SIGN(MIN(ABS(ZQIS(:)), ABS(ZWQ1(:,3))), ZQIS(:)) + ZWQ1(:,3) = SIGN( MIN( ABS(ZQIS(:)),ABS(ZWQ1(:,3)) ),ZQIS(:) ) ZQSS(:) = ZQSS(:) + ZWQ1(:,3) ZQIS(:) = ZQIS(:) - ZWQ1(:,3) - ELSEWHERE - ZWQ1(:,3) = 0. END WHERE ! - IF (LBUDGET_RI) CALL BUDGET ( & - UNPACK(ZRIS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0), & + IF (LBUDGET_RI) CALL BUDGET ( & + UNPACK(ZRIS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0), & 9,'AGGS_BU_RRI') - IF (LBUDGET_RS) CALL BUDGET ( & - UNPACK(ZRSS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0), & + IF (LBUDGET_RS) CALL BUDGET ( & + UNPACK(ZRSS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0), & 10,'AGGS_BU_RRS') ! IF (LBUDGET_SV) THEN @@ -2568,26 +2713,24 @@ IMPLICIT NONE ! WHERE (ZRIT(:) > XRTMIN_ELEC(4) .AND. ZRIS(:) > ZRSMIN_ELEC(4) .AND. & ZRSS(:) > ZRSMIN_ELEC(5) .AND. ABS(ZQIT(:)) > XQTMIN(4)) - ZWQ1(:,4) = SIGN(MIN(ABS(ZQIS(:)), ABS(ZWQ1(:,4))), ZQIS(:)) + ZWQ1(:,4) = SIGN( MIN( ABS(ZQIS(:)),ABS(ZWQ1(:,4)) ),ZQIS(:) ) ZQSS(:) = ZQSS(:) + ZWQ1(:,4) ZQIS(:) = ZQIS(:) - ZWQ1(:,4) - ELSEWHERE - ZWQ1(:,4) = 0. END WHERE ! DEALLOCATE(ZCRIAUTI) - IF (LBUDGET_RI) CALL BUDGET ( & - UNPACK(ZRIS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0), & + IF (LBUDGET_RI) CALL BUDGET ( & + UNPACK(ZRIS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0), & 9,'AUTS_BU_RRI') - IF (LBUDGET_RS) CALL BUDGET ( & - UNPACK(ZRSS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0), & + IF (LBUDGET_RS) CALL BUDGET ( & + UNPACK(ZRSS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0), & 10,'AUTS_BU_RRS') ! IF (LBU_RSV) THEN CALL BUDGET (UNPACK(ZQIS(:)*ZRHODJ(:), MASK=GMICRO(:,:,:), FIELD=0.0), & 12+NSV_ELECBEG+3,'AUTS_BU_RSV') CALL BUDGET (UNPACK(ZQSS(:)*ZRHODJ(:), MASK=GMICRO(:,:,:), FIELD=0.0), & - 12+NSV_ELECBEG+4,'AUTS_BU_RSV') + 12+NSV_ELECBEG+4,'AUTS_BU_RSV') END IF ! !* 3.5.3.6 compute the deposition on r_g: RVDEPG & QVDEPG @@ -2595,7 +2738,7 @@ IMPLICIT NONE ZZW(:) = 0.0 ! WHERE ((ZRGT(:) > XRTMIN(6)) .AND. (ZRGS(:) > 0.0)) - ZZW(:) = (ZSSI(:) / (ZRHODREF(:) * ZAI(:))) * & + ZZW(:) = (ZSSI(:) / (ZRHODREF(:) * ZAI(:))) * & (X0DEPG * ZLBDAG(:)**XEX0DEPG + X1DEPG * ZCJ(:) * ZLBDAG(:)**XEX1DEPG) ZZW(:) = MIN( ZRVS(:),ZZW(:) )*(0.5+SIGN(0.5,ZZW(:))) & - MIN( ZRGS(:),ABS(ZZW(:)) )*(0.5-SIGN(0.5,ZZW(:))) @@ -2608,26 +2751,20 @@ IMPLICIT NONE WHERE (ZRGT(:) > XRTMIN_ELEC(6) .AND. ZRGS(:) > ZRSMIN_ELEC(6) .AND. & ZRVS(:) > ZRSMIN_ELEC(1) .AND. ABS(ZQGT(:)) > XQTMIN(6) .AND. & ZZW(:) < 0. .AND. (-ZZW(:)) <= ZRGS(:)) - ZWQ1(:,6) = SIGN(MIN(ABS(ZQGS(:)), ABS(ZWQ1(:,6))), ZQGS(:)) + ZWQ1(:,6) = SIGN( MIN( ABS(ZQGS(:)),ABS(ZWQ1(:,6)) ),ZQGS(:) ) ZQGS(:) = ZQGS(:) - ZWQ1(:,6) -! - WHERE (ZWQ1(:,6) > 0.0) - ZQPIS(:) = ZQPIS(:) + ZWQ1(:,6) / XECHARGE - ELSEWHERE - ZQNIS(:) = ZQNIS(:) - ZWQ1(:,6) / XECHARGE - ENDWHERE - ELSEWHERE - ZWQ1(:,6) = 0. + ZQPIS(:) = ZQPIS(:) + MAX( 0.0,ZWQ1(:,6)/XECHARGE ) + ZQNIS(:) = ZQNIS(:) - MIN( 0.0,ZWQ1(:,6)/XECHARGE ) END WHERE ! - IF (LBUDGET_TH) CALL BUDGET ( & - UNPACK(ZTHS(:),MASK=GMICRO(:,:,:),FIELD=PTHS)*PRHODJ(:,:,:), & + IF (LBUDGET_TH) CALL BUDGET ( & + UNPACK(ZTHS(:),MASK=GMICRO(:,:,:),FIELD=PTHS)*PRHODJ(:,:,:), & 4,'DEPG_BU_RTH') - IF (LBUDGET_RV) CALL BUDGET ( & - UNPACK(ZRVS(:),MASK=GMICRO(:,:,:),FIELD=PRVS)*PRHODJ(:,:,:), & + IF (LBUDGET_RV) CALL BUDGET ( & + UNPACK(ZRVS(:),MASK=GMICRO(:,:,:),FIELD=PRVS)*PRHODJ(:,:,:), & 6,'DEPG_BU_RRV') - IF (LBUDGET_RG) CALL BUDGET ( & - UNPACK(ZRGS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0), & + IF (LBUDGET_RG) CALL BUDGET ( & + UNPACK(ZRGS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0), & 11,'DEPG_BU_RRG') ! IF (LBU_RSV) THEN @@ -2698,18 +2835,16 @@ REAL :: ZCRIAUTC ! Critical cloud mixing ratio ! WHERE (ZRCT(:) > XRTMIN_ELEC(2) .AND. ZRCS(:) > ZRSMIN_ELEC(2) .AND. & ZRRS(:) > ZRSMIN_ELEC(3) .AND. ABS(ZQCT(:)) > XQTMIN(2)) - ZWQ1(:,1) = SIGN(MIN(ABS(ZQCS(:)), ABS(ZWQ1(:,1))), ZQCS(:)) + ZWQ1(:,1) = SIGN( MIN( ABS(ZQCS(:)),ABS(ZWQ1(:,1)) ),ZQCS(:) ) ZQCS(:) = ZQCS(:) - ZWQ1(:,1) ZQRS(:) = ZQRS(:) + ZWQ1(:,1) - ELSEWHERE - ZWQ1(:,1) = 0. END WHERE ! - IF (LBUDGET_RC) CALL BUDGET ( & - UNPACK(ZRCS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0), & + IF (LBUDGET_RC) CALL BUDGET ( & + UNPACK(ZRCS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0), & 7,'AUTO_BU_RRC') - IF (LBUDGET_RR) CALL BUDGET ( & - UNPACK(ZRRS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0), & + IF (LBUDGET_RR) CALL BUDGET ( & + UNPACK(ZRRS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0), & 8,'AUTO_BU_RRR') ! IF (LBUDGET_SV) THEN @@ -2724,9 +2859,9 @@ REAL :: ZCRIAUTC ! Critical cloud mixing ratio ! ZZW(:) = 0.0 WHERE ((ZRCT(:) > XRTMIN(2)) .AND. (ZRRT(:) > XRTMIN(3)) .AND. (ZRCS(:) > 0.0)) - ZZW(:) = MIN( ZRCS(:),XFCACCR * ZRCT(:) & - * ZLBDAR(:)**XEXCACCR & - * ZRHODREF(:)**(-XCEXVT) ) + ZZW(:) = MIN( ZRCS(:),XFCACCR * ZRCT(:) & + * ZLBDAR(:)**XEXCACCR & + * ZRHOCOR(:)/ZCOR00 ) ZRCS(:) = ZRCS(:) - ZZW(:) ZRRS(:) = ZRRS(:) + ZZW(:) ZWQ1(:,2) = XCOEF_RQ_C * ZQCT(:) * ZZW(:) / ZRCT(:) ! QCACCR @@ -2734,11 +2869,9 @@ REAL :: ZCRIAUTC ! Critical cloud mixing ratio ! WHERE (ZRCT(:) > XRTMIN_ELEC(2) .AND. ZRRS(:) > ZRSMIN_ELEC(3) .AND. & ZRCS(:) > ZRSMIN_ELEC(2) .AND. ABS(ZQCT(:)) > XQTMIN(2)) - ZWQ1(:,2) = SIGN(MIN(ABS(ZQCS(:)), ABS(ZWQ1(:,2))), ZQCS(:)) + ZWQ1(:,2) = SIGN( MIN( ABS(ZQCS(:)),ABS(ZWQ1(:,2)) ),ZQCS(:) ) ZQCS(:) = ZQCS(:) - ZWQ1(:,2) ZQRS(:) = ZQRS(:) + ZWQ1(:,2) - ELSEWHERE - ZWQ1(:,2) = 0. ENDWHERE ! IF (LBUDGET_RC) CALL BUDGET ( & @@ -2777,36 +2910,31 @@ REAL :: ZCRIAUTC ! Critical cloud mixing ratio WHERE (ZRRT(:) > XRTMIN_ELEC(3) .AND. ZRRS(:) > ZRSMIN_ELEC(3) .AND. & ZRVS(:) > ZRSMIN_ELEC(1) .AND. ZRCT(:) <= 0.0 .AND. & ABS(ZQRT(:)) > XQTMIN(3)) - ZWQ1(:,3) = SIGN(MIN(ABS(ZQRS(:)), ABS(ZWQ1(:,3))), ZQRS(:)) + ZWQ1(:,3) = SIGN( MIN( ABS(ZQRS(:)),ABS(ZWQ1(:,3)) ),ZQRS(:) ) ZQRS(:) = ZQRS(:) - ZWQ1(:,3) - WHERE (ZWQ1(:,3) > 0.0) - ZQPIS(:) = ZQPIS(:) + ZWQ1(:,3)/XECHARGE - ELSEWHERE - ZQNIS(:) = ZQNIS(:) - ZWQ1(:,3)/XECHARGE - ENDWHERE - ELSEWHERE - ZWQ1(:,3) = 0. + ZQPIS(:) = ZQPIS(:) + MAX( 0.0,ZWQ1(:,3)/XECHARGE ) + ZQNIS(:) = ZQNIS(:) - MIN( 0.0,ZWQ1(:,3)/XECHARGE ) ENDWHERE ! - IF (LBUDGET_TH) CALL BUDGET ( & - UNPACK(ZTHS(:),MASK=GMICRO(:,:,:),FIELD=PTHS)*PRHODJ(:,:,:), & + IF (LBUDGET_TH) CALL BUDGET ( & + UNPACK(ZTHS(:),MASK=GMICRO(:,:,:),FIELD=PTHS)*PRHODJ(:,:,:), & 4,'REVA_BU_RTH') - IF (LBUDGET_RV) CALL BUDGET ( & - UNPACK(ZRVS(:),MASK=GMICRO(:,:,:),FIELD=PRVS)*PRHODJ(:,:,:), & + IF (LBUDGET_RV) CALL BUDGET ( & + UNPACK(ZRVS(:),MASK=GMICRO(:,:,:),FIELD=PRVS)*PRHODJ(:,:,:), & 6,'REVA_BU_RRV') - IF (LBUDGET_RR) CALL BUDGET ( & - UNPACK(ZRRS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0), & + IF (LBUDGET_RR) CALL BUDGET ( & + UNPACK(ZRRS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0), & 8,'REVA_BU_RRR') ZW(:,:,:)=PEVAP3D(:,:,:) PEVAP3D(:,:,:)=UNPACK(ZZW(:),MASK=GMICRO(:,:,:),FIELD=ZW(:,:,:)) ! IF (LBUDGET_SV) THEN - CALL BUDGET (UNPACK(ZQPIS(:), MASK=GMICRO(:,:,:), FIELD=PQPIS) & - *PRHODJ(:,:,:), 12+NSV_ELECBEG ,'REVA_BU_RSV') - CALL BUDGET (UNPACK(ZQNIS(:), MASK=GMICRO(:,:,:), FIELD=PQNIS) & - *PRHODJ(:,:,:), 12+NSV_ELECEND ,'REVA_BU_RSV') - CALL BUDGET (UNPACK(ZQRS(:)*ZRHODJ(:), MASK=GMICRO(:,:,:), FIELD=0.0), & - 12+NSV_ELECBEG+2,'REVA_BU_RSV') + CALL BUDGET (UNPACK(ZQPIS(:), MASK=GMICRO(:,:,:), FIELD=PQPIS) & + *PRHODJ(:,:,:), 12+NSV_ELECBEG ,'REVA_BU_RSV') + CALL BUDGET (UNPACK(ZQNIS(:), MASK=GMICRO(:,:,:), FIELD=PQNIS) & + *PRHODJ(:,:,:), 12+NSV_ELECEND ,'REVA_BU_RSV') + CALL BUDGET (UNPACK(ZQRS(:)*ZRHODJ(:), MASK=GMICRO(:,:,:), FIELD=0.0), & + 12+NSV_ELECBEG+2,'REVA_BU_RSV') END IF ! END SUBROUTINE RAIN_ICE_ELEC_WARM @@ -2829,7 +2957,6 @@ IMPLICIT NONE ZWQ1(:,1:7) = 0.0 ! ALLOCATE( GRIM(IMICRO) ) -! GRIM(:) = (ZRCT(:)>0.0) .AND. (ZRST(:)>0.0) .AND. & GRIM(:) = (ZRCT(:) > XRTMIN(2)) .AND. (ZRST(:) > XRTMIN(5)) .AND. & (ZRCS(:) > 0.0) .AND. (ZZT(:) < XTT) IGRIM = COUNT( GRIM(:) ) @@ -2868,7 +2995,7 @@ IMPLICIT NONE WHERE (GRIM(:) .AND. ZRCS(:) > 0.0) ZZW1(:,1) = MIN( ZRCS(:), & XCRIMSS * ZZW(:) * ZRCT(:) * & ! RCRIMSS - ZLBDAS(:)**XEXCRIMSS * ZRHODREF(:)**(-XCEXVT) ) + ZLBDAS(:)**XEXCRIMSS * ZRHOCOR(:)/ZCOR00 ) ZRCS(:) = ZRCS(:) - ZZW1(:,1) ZRSS(:) = ZRSS(:) + ZZW1(:,1) ZTHS(:) = ZTHS(:) + ZZW1(:,1) * (ZLSFACT(:) - ZLVFACT(:)) ! f(L_f*(RCRIMSS)) @@ -2878,11 +3005,9 @@ IMPLICIT NONE WHERE (ZZT(:) < XTT .AND. & ZRCT(:) > XRTMIN_ELEC(2) .AND. ZRSS(:) > ZRSMIN_ELEC(5) .AND. & ABS(ZQCT(:)) > XQTMIN(2) .AND. ZRCS(:) > ZRSMIN_ELEC(2)) - ZWQ1(:,1) = SIGN(MIN(ABS(ZQCS(:)), ABS(ZWQ1(:,1))), ZQCS(:)) + ZWQ1(:,1) = SIGN( MIN( ABS(ZQCS(:)),ABS(ZWQ1(:,1)) ),ZQCS(:) ) ZQCS(:) = ZQCS(:) - ZWQ1(:,1) ZQSS(:) = ZQSS(:) + ZWQ1(:,1) - ELSEWHERE - ZWQ1(:,1) = 0. ENDWHERE ! !* 5.1.5 perform the linear interpolation of the normalized @@ -2904,11 +3029,10 @@ IMPLICIT NONE !* RSRIMCG & QSRIMCG and RCRIMSG & QCRIMSG ! WHERE (GRIM(:) .AND. ZRSS(:) > 0.0 .AND. ZRCS(:) > 0.0 .AND. ZZW(:) < 1.) - ZZW1(:,2) = MIN( ZRCS(:), & + ZZW1(:,2) = MIN( ZRCS(:), & XCRIMSG * ZRCT(:) & ! RCRIMSG * ZLBDAS(:)**XEXCRIMSG & - * ZRHODREF(:)**(-XCEXVT) & - - ZZW1(:,1) ) + * ZRHOCOR(:)/ZCOR00 - ZZW1(:,1) ) ZZW1(:,3) = MIN( ZRSS(:), & XSRIMCG * ZLBDAS(:)**XEXSRIMCG & ! RSRIMCG * (1.0 - ZZW(:) )/(PTSTEP*ZRHODREF(:)) ) @@ -2925,22 +3049,18 @@ IMPLICIT NONE WHERE (ZRCT(:) > XRTMIN_ELEC(2) .AND. ZRST(:) > XRTMIN_ELEC(5) .AND. & ZRSS(:) > ZRSMIN_ELEC(5) .AND. ZRCS(:) > ZRSMIN_ELEC(2) .AND. & ZZT(:) < XTT .AND. ABS(ZQCT(:)) > XQTMIN(2)) - ZWQ1(:,2) = SIGN(MIN(ABS(ZQCS(:)), ABS(ZWQ1(:,2))), ZQCS(:)) + ZWQ1(:,2) = SIGN( MIN( ABS(ZQCS(:)),ABS(ZWQ1(:,2)) ),ZQCS(:) ) ZQGS(:) = ZQGS(:) + ZWQ1(:,2) ZQCS(:) = ZQCS(:) - ZWQ1(:,2) - ELSEWHERE - ZWQ1(:,2) = 0. ENDWHERE ! WHERE (ZRCT(:) > XRTMIN_ELEC(2) .AND. ZRST(:) > XRTMIN_ELEC(5) .AND. & ZRSS(:) > ZRSMIN_ELEC(5) .AND. ZRCS(:) > ZRSMIN_ELEC(2) .AND. & ZZT(:) < XTT .AND. ABS(ZQCT(:)) > XQTMIN(2) .AND. & ABS(ZEST) > XESMIN) - ZWQ1(:,3) = SIGN(MIN(ABS(ZQSS(:)), ABS(ZWQ1(:,3))), ZQSS(:)) + ZWQ1(:,3) = SIGN( MIN( ABS(ZQSS(:)),ABS(ZWQ1(:,3)) ),ZQSS(:) ) ZQGS(:) = ZQGS(:) + ZWQ1(:,3) ZQSS(:) = ZQSS(:) - ZWQ1(:,3) - ELSEWHERE - ZWQ1(:,3) = 0. ENDWHERE ! DEALLOCATE(IVEC2) @@ -2948,6 +3068,7 @@ IMPLICIT NONE DEALLOCATE(ZVEC2) DEALLOCATE(ZVEC1) END IF +! IF (LBUDGET_TH) CALL BUDGET ( & UNPACK(ZTHS(:),MASK=GMICRO(:,:,:),FIELD=PTHS)*PRHODJ(:,:,:), & 4,'RIM_BU_RTH') @@ -2980,7 +3101,8 @@ IMPLICIT NONE ZWQ4(:) = 0.0 ! ALLOCATE(GACC(IMICRO)) - GACC(:) = ZRRT(:)>XRTMIN(3) .AND. ZRST(:)>XRTMIN(5) .AND. ZZT(:)<XTT + GACC(:) = ZRRT(:)>XRTMIN(3) .AND. ZRST(:)>XRTMIN(5) .AND. & + ZRRS(:) > 0.0 .AND. ZZT(:) < XTT IGACC = COUNT( GACC(:) ) ! IF( IGACC>0 ) THEN @@ -3029,9 +3151,9 @@ IMPLICIT NONE ! 5.2.4 raindrop accretion on the small sized aggregates: ! RRACCSS & QRACCSS ! - WHERE ( GACC(:) .AND. ZRRS(:) > 0.) + WHERE ( GACC(:) ) ZZW1(:,2) = & !! coef of RRACCS - XFRACCSS*( ZLBDAS(:)**XCXS )*( ZRHODREF(:)**(-XCEXVT-1.) ) & + XFRACCSS*( ZLBDAS(:)**XCXS )*ZRHOCOR(:)/(ZCOR00* ZRHODREF(:)) & *( XLBRACCS1/((ZLBDAS(:)**2) ) + & XLBRACCS2/( ZLBDAS(:) * ZLBDAR(:) ) + & XLBRACCS3/( (ZLBDAR(:)**2)) )/ZLBDAR(:)**4 @@ -3039,7 +3161,7 @@ IMPLICIT NONE ZRRS(:) = ZRRS(:) - ZZW1(:,4) ZRSS(:) = ZRSS(:) + ZZW1(:,4) ZTHS(:) = ZTHS(:) + ZZW1(:,4)*(ZLSFACT(:)-ZLVFACT(:)) ! f(L_f*(RRACCSS)) - ZWQ4(:) = XFQRACCS * ZERT(:) * ZRHODREF(:)**(-XCEXVT-1.) * & + ZWQ4(:) = XFQRACCS * ZERT(:) * ZRHOCOR(:)/(ZCOR00* ZRHODREF(:)) * & ZLBDAR(:)**XCXR * ZLBDAS(:)**XCXS * & (XLBQRACCS1 * ZLBDAR(:)**(-2.0 - XFR) + & XLBQRACCS2 * ZLBDAR(:)**(-1.0 - XFR) * ZLBDAS(:)**(-1.0) + & @@ -3050,11 +3172,9 @@ IMPLICIT NONE WHERE (ZRRT(:) > XRTMIN_ELEC(3) .AND. ZRST(:) > XRTMIN_ELEC(5) .AND. & ZRRS(:) > ZRSMIN_ELEC(3) .AND. ZZT(:) < XTT .AND. & ABS(ZQRS(:)) > XQTMIN(3) .AND. ABS(ZERT) > XERMIN) - ZWQ1(:,5) = SIGN(MIN(ABS(ZQRS(:)), ABS(ZWQ1(:,5))), ZQRS(:)) + ZWQ1(:,5) = SIGN( MIN( ABS(ZQRS(:)),ABS(ZWQ1(:,5)) ),ZQRS(:) ) ZQRS(:) = ZQRS(:) - ZWQ1(:,5) ZQSS(:) = ZQSS(:) + ZWQ1(:,5) - ELSEWHERE - ZWQ1(:,5) = 0. ENDWHERE ! ! 5.2.5 perform the bilinear interpolation of the normalized @@ -3080,10 +3200,10 @@ IMPLICIT NONE ! 5.2.7 raindrop accretion-conversion of the large sized aggregates ! into graupeln: RRACCSG & QRACCSG and RSACCRG & QSACCRG ! - WHERE ( GACC(:) .AND. (ZRSS(:)>0.0) .AND. ZRRS(:) > 0.) + WHERE ( GACC(:) .AND. (ZRSS(:)>0.0) ) ZZW1(:,2) = MIN( ZRRS(:),ZZW1(:,2)-ZZW1(:,4) ) ! RRACCSG ZZW1(:,3) = MIN( ZRSS(:),XFSACCRG*ZZW(:)* & ! RSACCRG - ( ZLBDAS(:)**(XCXS-XBS) )*( ZRHODREF(:)**(-XCEXVT-1.) ) & + ( ZLBDAS(:)**(XCXS-XBS) )*ZRHOCOR(:)/(ZCOR00* ZRHODREF(:)) & *( XLBSACCR1/((ZLBDAR(:)**2) ) + & XLBSACCR2/( ZLBDAR(:) * ZLBDAS(:) ) + & XLBSACCR3/( (ZLBDAS(:)**2)) )/ZLBDAR(:) ) @@ -3092,7 +3212,8 @@ IMPLICIT NONE ZRGS(:) = ZRGS(:) + ZZW1(:,2)+ZZW1(:,3) ZTHS(:) = ZTHS(:) + ZZW1(:,2)*(ZLSFACT(:)-ZLVFACT(:)) ! f(L_f*(RRACCSG)) ZWQ1(:,4) = ZWQ1(:,4) - ZWQ1(:,5) ! QRACCSG - ZWQ1(:,6) = ZWQ1(:,6) * XFQRACCS * ZEST(:) * ZRHODREF(:)**(-XCEXVT-1.) * & + ZWQ1(:,6) = ZWQ1(:,6) * XFQRACCS * ZEST(:) * & + ZRHOCOR(:) / (ZCOR00 * ZRHODREF(:)) * & ZLBDAR(:)**XCXR * ZLBDAS(:)**XCXS * & (XLBQSACCRG1 * ZLBDAS(:)**(-2.0 - XFS) + & XLBQSACCRG2 * ZLBDAS(:)**(-1.0 - XFS) * ZLBDAR(:)**(-1.0) + & @@ -3102,22 +3223,18 @@ IMPLICIT NONE WHERE (ZRRT(:) > XRTMIN_ELEC(3) .AND. ZRST(:) > XRTMIN_ELEC(5) .AND. & ZRSS(:) > ZRSMIN_ELEC(5) .AND. ZRRS(:) > ZRSMIN_ELEC(3) .AND. & ZZT(:) < XTT .AND. ABS(ZQGS(:)) > XQTMIN(6)) - ZWQ1(:,4) = SIGN(MIN(ABS(ZQRS(:)), ABS(ZWQ1(:,4))), ZQRS(:)) + ZWQ1(:,4) = SIGN( MIN( ABS(ZQRS(:)),ABS(ZWQ1(:,4)) ),ZQRS(:) ) ZQRS(:) = ZQRS(:) - ZWQ1(:,4) ZQGS(:) = ZQGS(:) + ZWQ1(:,4) - ELSEWHERE - ZWQ1(:,4) = 0. ENDWHERE ! WHERE (ZRRT(:) > XRTMIN_ELEC(3) .AND. ZRST(:) > XRTMIN_ELEC(5) .AND. & ZRSS(:) > ZRSMIN_ELEC(5) .AND. ZRRS(:) > ZRSMIN_ELEC(3) .AND. & ZZT(:) < XTT .AND. ABS(ZQGS(:)) > XQTMIN(6) .AND. & ABS(ZEST) > XESMIN) - ZWQ1(:,6) = SIGN(MIN(ABS(ZQSS(:)), ABS(ZWQ1(:,6))), ZQSS(:)) + ZWQ1(:,6) = SIGN( MIN( ABS(ZQSS(:)),ABS(ZWQ1(:,6)) ),ZQSS(:) ) ZQSS(:) = ZQSS(:) - ZWQ1(:,6) ZQGS(:) = ZQGS(:) + ZWQ1(:,6) - ELSEWHERE - ZWQ1(:,6) = 0. ENDWHERE ! DEALLOCATE(IVEC2) @@ -3181,18 +3298,16 @@ IMPLICIT NONE WHERE (ZRST(:) > XRTMIN_ELEC(5) .AND. ZRSS(:) > ZRSMIN_ELEC(5) .AND. & ZRGT(:) > XRTMIN_ELEC(6) .AND. ABS(ZQST(:)) > XQTMIN(5) .AND. & ZZT(:) > XTT .AND. ZRHODREF(:)*XLMTT > 0.) - ZWQ1(:,7) = SIGN(MIN(ABS(ZQSS(:)), ABS(ZWQ1(:,7))), ZQSS(:)) + ZWQ1(:,7) = SIGN( MIN( ABS(ZQSS(:)),ABS(ZWQ1(:,7)) ),ZQSS(:) ) ZQGS(:) = ZQGS(:) + ZWQ1(:,7) ZQSS(:) = ZQSS(:) - ZWQ1(:,7) - ELSEWHERE - ZWQ1(:,7) = 0. ENDWHERE ! - IF (LBUDGET_RS) CALL BUDGET ( & - UNPACK(ZRSS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0), & + IF (LBUDGET_RS) CALL BUDGET ( & + UNPACK(ZRSS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0), & 10,'CMEL_BU_RRS') - IF (LBUDGET_RG) CALL BUDGET ( & - UNPACK(ZRGS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0), & + IF (LBUDGET_RG) CALL BUDGET ( & + UNPACK(ZRGS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0), & 11,'CMEL_BU_RRG') ! IF (LBUDGET_SV) THEN @@ -3224,50 +3339,46 @@ IMPLICIT NONE (ZRIS(:) > 0.0) .AND. (ZRRS(:) > 0.0)) ZZW1(:,3) = MIN( ZRIS(:),XICFRR * ZRIT(:) & ! RICFRRG * ZLBDAR(:)**XEXICFRR & - * ZRHODREF(:)**(-XCEXVT) ) + * ZRHOCOR(:) / ZCOR00 ) ZZW1(:,4) = MIN( ZRRS(:),XRCFRI * ZCIT(:) & ! RRCFRIG * ZLBDAR(:)**XEXRCFRI & - * ZRHODREF(:)**(-XCEXVT-1.) ) + * ZRHOCOR(:) / (ZCOR00 * ZRHODREF(:)) ) ZRIS(:) = ZRIS(:) - ZZW1(:,3) ZRRS(:) = ZRRS(:) - ZZW1(:,4) ZRGS(:) = ZRGS(:) + ZZW1(:,3) + ZZW1(:,4) ZTHS(:) = ZTHS(:) + ZZW1(:,4) * (ZLSFACT(:) - ZLVFACT(:)) ! f(L_f*RRCFRIG) ZWQ1(:,4) = XQRCFRIG * ZLBDAR(:)**XEXQRCFRIG * ZCIT(:) * & - ZERT(:) * ZRHODREF(:)**(-XCEXVT-1.) ! QRCFRIG + ZERT(:) * ZRHOCOR(:) / (ZCOR00 * ZRHODREF(:)) ! QRCFRIG ZWQ1(:,3) = XCOEF_RQ_I * ZQIT(:) * ZZW1(:,3) / ZRIT(:) ! QICFRRG END WHERE ! WHERE (ZRIT(:) > XRTMIN_ELEC(4) .AND. ZRRT(:) > XRTMIN_ELEC(3) .AND. & ZRIS(:) > ZRSMIN_ELEC(4) .AND. ZRRS(:) > ZRSMIN_ELEC(3) .AND. & ABS(ZERT) > XERMIN .AND. ABS(ZQRT(:)) > XQTMIN(3)) - ZWQ1(:,4) = SIGN(MIN(ABS(ZQRS(:)), ABS(ZWQ1(:,4))), ZQRS(:)) + ZWQ1(:,4) = SIGN( MIN( ABS(ZQRS(:)),ABS(ZWQ1(:,4)) ),ZQRS(:) ) ZQGS(:) = ZQGS(:) + ZWQ1(:,4) ZQRS(:) = ZQRS(:) - ZWQ1(:,4) - ELSEWHERE - ZWQ1(:,4) = 0. ENDWHERE ! WHERE (ZRIT(:) > XRTMIN_ELEC(4) .AND. ZRRT(:) > XRTMIN_ELEC(3) .AND. & ZRIS(:) > ZRSMIN_ELEC(4) .AND. ZRRS(:) > ZRSMIN_ELEC(3) .AND. & ABS(ZQIT(:)) > XQTMIN(4)) - ZWQ1(:,3) = SIGN(MIN(ABS(ZQIS(:)), ABS(ZWQ1(:,3))), ZQIS(:)) + ZWQ1(:,3) = SIGN( MIN( ABS(ZQIS(:)),ABS(ZWQ1(:,3)) ),ZQIS(:) ) ZQGS(:) = ZQGS(:) + ZWQ1(:,3) ZQIS(:) = ZQIS(:) - ZWQ1(:,3) - ELSEWHERE - ZWQ1(:,3) = 0. ENDWHERE ! - IF (LBUDGET_TH) CALL BUDGET ( & - UNPACK(ZTHS(:),MASK=GMICRO(:,:,:),FIELD=PTHS)*PRHODJ(:,:,:), & + IF (LBUDGET_TH) CALL BUDGET ( & + UNPACK(ZTHS(:),MASK=GMICRO(:,:,:),FIELD=PTHS)*PRHODJ(:,:,:), & 4,'CFRZ_BU_RTH') - IF (LBUDGET_RR) CALL BUDGET ( & - UNPACK(ZRRS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0), & + IF (LBUDGET_RR) CALL BUDGET ( & + UNPACK(ZRRS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0), & 8,'CFRZ_BU_RRR') - IF (LBUDGET_RI) CALL BUDGET ( & - UNPACK(ZRIS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0), & + IF (LBUDGET_RI) CALL BUDGET ( & + UNPACK(ZRIS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0), & 9,'CFRZ_BU_RRI') - IF (LBUDGET_RG) CALL BUDGET ( & - UNPACK(ZRGS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0), & + IF (LBUDGET_RG) CALL BUDGET ( & + UNPACK(ZRGS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0), & 11,'CFRZ_BU_RRG') ! IF (LBU_RSV) THEN @@ -3290,14 +3401,14 @@ IMPLICIT NONE !* 6.2.1 compute RCDRYG & QCDRYG ! WHERE ((ZRGT(:) > XRTMIN(6)) .AND. ((ZRCT(:) > XRTMIN(2) .AND. ZRCS(:) > 0.0))) - ZZW(:) = ZLBDAG(:)**(XCXG-XDG-2.0) * ZRHODREF(:)**(-XCEXVT) + ZZW(:) = ZLBDAG(:)**(XCXG-XDG-2.0) * ZRHOCOR(:) / ZCOR00 ZZW1(:,1) = MIN( ZRCS(:),XFCDRYG * ZRCT(:) * ZZW(:) ) ! RCDRYG ZWQ1(:,1) = XCOEF_RQ_C * ZQCT(:) * ZZW1(:,1) / ZRCT(:) ! QCDRYG END WHERE ! WHERE (ZRCT(:) > XRTMIN_ELEC(2) .AND. ZRGT(:) > XRTMIN_ELEC(6) .AND. & ABS(ZQCT(:)) > XQTMIN(2) .AND. ZRCS(:) > ZRSMIN_ELEC(2)) - ZWQ1(:,1) = SIGN(MIN(ABS(ZQCS(:)), ABS(ZWQ1(:,1))), ZQCS(:)) + ZWQ1(:,1) = SIGN( MIN( ABS(ZQCS(:)),ABS(ZWQ1(:,1)) ),ZQCS(:) ) ELSEWHERE ZWQ1(:,1) = 0. ENDWHERE @@ -3305,14 +3416,14 @@ IMPLICIT NONE !* 6.2.2 compute RIDRYG & QIDRYG ! WHERE ((ZRGT(:) > XRTMIN(6)) .AND. ((ZRIT(:) > XRTMIN(4) .AND. ZRIS(:) > 0.0)) ) - ZZW(:) = ZLBDAG(:)**(XCXG-XDG-2.0) * ZRHODREF(:)**(-XCEXVT) + ZZW(:) = ZLBDAG(:)**(XCXG-XDG-2.0) * ZRHOCOR(:)/ZCOR00 ZZW1(:,2) = MIN( ZRIS(:),XFIDRYG * EXP( XCOLEXIG*(ZZT(:)-XTT) ) & * ZRIT(:) * ZZW(:) ) ! RIDRYG ZWQ1(:,2) = XCOEF_RQ_I * ZQIT(:) * ZZW1(:,2) / ZRIT(:) ! QIDRYG_coal END WHERE ! WHERE (GELEC(:,2)) - ZWQ1(:,2) = SIGN(MIN(ABS(ZQIS(:)), ABS(ZWQ1(:,2))), ZQIS(:)) + ZWQ1(:,2) = SIGN( MIN( ABS(ZQIS(:)),ABS(ZWQ1(:,2)) ),ZQIS(:) ) ELSEWHERE ZWQ1(:,2) = 0. ENDWHERE @@ -3409,13 +3520,13 @@ IMPLICIT NONE ZZW1(:,3) = MIN( ZRSS(:),XFSDRYG*ZZW(:) & ! RSDRYG * EXP( XCOLEXSG*(ZZT(:)-XTT) ) & *( ZLBDAS(:)**(XCXS-XBS) )*( ZLBDAG(:)**XCXG ) & - *( ZRHODREF(:)**(-XCEXVT-1.) ) & + * ZRHOCOR(:) / (ZCOR00 * ZRHODREF(:)) & *( XLBSDRYG1/( ZLBDAG(:)**2 ) + & XLBSDRYG2/( ZLBDAG(:) * ZLBDAS(:) ) + & XLBSDRYG3/( ZLBDAS(:)**2) ) ) ZWQ1(:,4) = ZWQ1(:,4) * XFQSDRYG * & XCOLSG * EXP(XCOLEXSG * (ZZT(:) - XTT)) * & - ZEST(:) * ZRHODREF(:)**(-XCEXVT-1.) * & + ZEST(:) * ZRHOCOR(:) / (ZCOR00 * ZRHODREF(:)) * & ZLBDAG(:)**XCXG * ZLBDAS(:)**XCXS * & (XLBQSDRYG1 * ZLBDAS(:)**(-2.0-XFS) + & XLBQSDRYG2 * ZLBDAS(:)**(-1.0-XFS) * ZLBDAG(:)**(-1.0) + & @@ -3425,7 +3536,7 @@ IMPLICIT NONE WHERE (ZRSS(:) > ZRSMIN_ELEC(5) .AND. ZRST(:) > XRTMIN_ELEC(5) .AND. & ZRGS(:) > ZRSMIN_ELEC(6) .AND. ABS(ZQST(:)) > XQTMIN(5) .AND. & ABS(ZEST) > XESMIN) - ZWQ1(:,4) = SIGN(MIN(ABS(ZQSS(:)), ABS(ZWQ1(:,4))), ZQSS(:)) + ZWQ1(:,4) = SIGN( MIN( ABS(ZQSS(:)),ABS(ZWQ1(:,4)) ),ZQSS(:) ) ELSEWHERE ZWQ1(:,4) = 0. END WHERE @@ -3499,11 +3610,12 @@ IMPLICIT NONE WHERE( GDRY(:) ) ZZW1(:,4) = MIN( ZRRS(:),XFRDRYG*ZZW(:) & ! RRDRYG *( ZLBDAR(:)**(-4) )*( ZLBDAG(:)**XCXG ) & - *( ZRHODREF(:)**(-XCEXVT-1.) ) & + * ZRHOCOR(:) / (ZCOR00 * ZRHODREF(:)) & *( XLBRDRYG1/( ZLBDAG(:)**2 ) + & XLBRDRYG2/( ZLBDAG(:) * ZLBDAR(:) ) + & XLBRDRYG3/( ZLBDAR(:)**2) ) ) - ZWQ1(:,6) = ZWQ1(:,6) * XFQRDRYG * ZRHODREF(:)**(-XCEXVT-1.) * & + ZWQ1(:,6) = ZWQ1(:,6) * XFQRDRYG * & + ZRHOCOR(:) / (ZCOR00 * ZRHODREF(:)) * & ZERT(:) * ZLBDAG(:)**XCXG * ZLBDAR(:)**XCXR * & (XLBQRDRYG1 * ZLBDAR(:)**(-2.0 - XFR) + & XLBQRDRYG2 * ZLBDAR(:)**(-1.0 - XFR) * ZLBDAG(:)**(-1.0) + & @@ -3513,7 +3625,7 @@ IMPLICIT NONE WHERE (ZRRT(:) > XRTMIN_ELEC(3) .AND. ZRGT(:) > XRTMIN_ELEC(6) .AND. & ZRRS(:) > ZRSMIN_ELEC(3).AND. ABS(ZERT) > XERMIN .AND. & ABS(ZQRT(:)) > XQTMIN(3)) - ZWQ1(:,6) = SIGN(MIN(ABS(ZQRS(:)), ABS(ZWQ1(:,6))), ZQRS(:)) + ZWQ1(:,6) = SIGN( MIN( ABS(ZQRS(:)),ABS(ZWQ1(:,6)) ),ZQRS(:) ) ELSEWHERE ZWQ1(:,6) = 0. ENDWHERE @@ -3563,8 +3675,8 @@ IMPLICIT NONE END WHERE ! WHERE (ZRGT(:) > XRTMIN_ELEC(6) .AND. ZLBDAG(:) > 0. .AND. ZLBDAG(:) < XLBDAG_MAXE) - ZWQ1(:,7) = SIGN(MIN(ABS(ZQIS(:)), ABS(ZWQ1(:,7))), ZQIS(:)) - ZWQ1(:,8) = SIGN(MIN(ABS(ZQSS(:)), ABS(ZWQ1(:,8))), ZQSS(:)) + ZWQ1(:,7) = SIGN( MIN( ABS(ZQIS(:)),ABS(ZWQ1(:,7)) ),ZQIS(:) ) + ZWQ1(:,8) = SIGN( MIN( ABS(ZQSS(:)),ABS(ZWQ1(:,8)) ),ZQSS(:) ) ELSEWHERE ZWQ1(:,7) = 0. ZWQ1(:,8) = 0. @@ -3574,9 +3686,7 @@ IMPLICIT NONE ZRRT(:) > XRTMIN_ELEC(3)) ZWQ1(:,9) = XCOEF_RQ_R * ZQRT(:) * & (ZRWETG(:) - ZZW1(:,5) - ZZW1(:,6) - ZZW1(:,1)) / ZRRT(:) ! QRWETG - ZWQ1(:,9) = SIGN(MIN(ABS(ZQRS(:)), ABS(ZWQ1(:,9))), ZQRS(:)) - ELSEWHERE - ZWQ1(:,9) = 0. + ZWQ1(:,9) = SIGN( MIN( ABS(ZQRS(:)),ABS(ZWQ1(:,9)) ),ZQRS(:) ) ENDWHERE ! ! @@ -3616,13 +3726,13 @@ IMPLICIT NONE ZQIS(:) = ZQIS(:) - ZWQ1(:,7) ZQSS(:) = ZQSS(:) - ZWQ1(:,8) ZQGS(:) = ZQGS(:) + ZWQ1(:,1) + ZWQ1(:,9) + ZWQ1(:,7) + ZWQ1(:,8) - ZZW(:) = ZQGS(:) * ZRDRYG(:) / (ZRWETG(:) + ZRDRYG(:)) ! and - ZRGS(:) = ZRGS(:) - ZZW(:) ! partial conversion - ZRHS(:) = ZRHS(:) + ZZW(:) ! of the graupel into hail + ZZW(:) = ZQGS(:) * ZRDRYG(:) / (ZRWETG(:) + ZRDRYG(:)) ! partial graupel + ZQGS(:) = ZQGS(:) - ZZW(:) ! charge conversion + ZQHS(:) = ZQHS(:) + ZZW(:) ! into hail charge END WHERE ELSE IF( KRR == 6 ) THEN WHERE (ZRGT(:) > XRTMIN(6) .AND. ZZT(:) < XTT .AND. & ! Wet - ZRDRYG(:) >= ZRWETG(:) .AND. ZRWETG(:) > 0.0) ! case + ZRDRYG(:) >= ZRWETG(:) .AND. ZRWETG(:) > 0.0) ! case ZZW(:) = ZRWETG(:) ZRCS(:) = ZRCS(:) - ZZW1(:,1) ZRIS(:) = ZRIS(:) - ZZW1(:,5) @@ -3641,27 +3751,27 @@ IMPLICIT NONE END WHERE END IF ! - IF (LBUDGET_TH) CALL BUDGET ( & - UNPACK(ZTHS(:),MASK=GMICRO(:,:,:),FIELD=PTHS)*PRHODJ(:,:,:), & + IF (LBUDGET_TH) CALL BUDGET ( & + UNPACK(ZTHS(:),MASK=GMICRO(:,:,:),FIELD=PTHS)*PRHODJ(:,:,:), & 4,'WETG_BU_RTH') - IF (LBUDGET_RC) CALL BUDGET ( & - UNPACK(ZRCS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0), & + IF (LBUDGET_RC) CALL BUDGET ( & + UNPACK(ZRCS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0), & 7,'WETG_BU_RRC') - IF (LBUDGET_RR) CALL BUDGET ( & - UNPACK(ZRRS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0), & + IF (LBUDGET_RR) CALL BUDGET ( & + UNPACK(ZRRS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0), & 8,'WETG_BU_RRR') - IF (LBUDGET_RI) CALL BUDGET ( & - UNPACK(ZRIS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0), & + IF (LBUDGET_RI) CALL BUDGET ( & + UNPACK(ZRIS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0), & 9,'WETG_BU_RRI') - IF (LBUDGET_RS) CALL BUDGET ( & - UNPACK(ZRSS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0), & + IF (LBUDGET_RS) CALL BUDGET ( & + UNPACK(ZRSS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0), & 10,'WETG_BU_RRS') - IF (LBUDGET_RG) CALL BUDGET ( & - UNPACK(ZRGS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0), & + IF (LBUDGET_RG) CALL BUDGET ( & + UNPACK(ZRGS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0), & 11,'WETG_BU_RRG') IF ( KRR == 7 ) THEN - IF (LBUDGET_RH) CALL BUDGET ( & - UNPACK(ZRHS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0), & + IF (LBUDGET_RH) CALL BUDGET ( & + UNPACK(ZRHS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0), & 12,'WETG_BU_RRH') END IF ! @@ -3678,8 +3788,8 @@ IMPLICIT NONE 12+NSV_ELECEND,'WETG_BU_RSV') END IF ! - WHERE (ZRGT(:) > XRTMIN(6) .AND. ZZT(:) < XTT .AND. & - ZRDRYG(:) < ZRWETG(:) .AND. ZRDRYG(:) > 0.0) ! Dry + WHERE (ZRGT(:) > XRTMIN(6) .AND. ZZT(:) < XTT .AND. & ! Dry + ZRDRYG(:) < ZRWETG(:) .AND. ZRDRYG(:) > 0.0) ! case ZRCS(:) = ZRCS(:) - ZZW1(:,1) ZRIS(:) = ZRIS(:) - ZZW1(:,2) ZRSS(:) = ZRSS(:) - ZZW1(:,3) @@ -3696,23 +3806,23 @@ IMPLICIT NONE + ZWQ1(:,5) + ZWQ1(:,6) END WHERE ! - IF (LBUDGET_TH) CALL BUDGET ( & - UNPACK(ZTHS(:),MASK=GMICRO(:,:,:),FIELD=PTHS)*PRHODJ(:,:,:), & + IF (LBUDGET_TH) CALL BUDGET ( & + UNPACK(ZTHS(:),MASK=GMICRO(:,:,:),FIELD=PTHS)*PRHODJ(:,:,:), & 4,'DRYG_BU_RTH') - IF (LBUDGET_RC) CALL BUDGET ( & - UNPACK(ZRCS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0), & + IF (LBUDGET_RC) CALL BUDGET ( & + UNPACK(ZRCS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0), & 7,'DRYG_BU_RRC') - IF (LBUDGET_RR) CALL BUDGET ( & - UNPACK(ZRRS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0), & + IF (LBUDGET_RR) CALL BUDGET ( & + UNPACK(ZRRS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0), & 8,'DRYG_BU_RRR') - IF (LBUDGET_RI) CALL BUDGET ( & - UNPACK(ZRIS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0), & + IF (LBUDGET_RI) CALL BUDGET ( & + UNPACK(ZRIS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0), & 9,'DRYG_BU_RRI') - IF (LBUDGET_RS) CALL BUDGET ( & - UNPACK(ZRSS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0), & + IF (LBUDGET_RS) CALL BUDGET ( & + UNPACK(ZRSS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0), & 10,'DRYG_BU_RRS') - IF (LBUDGET_RG) CALL BUDGET ( & - UNPACK(ZRGS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0), & + IF (LBUDGET_RG) CALL BUDGET ( & + UNPACK(ZRGS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0), & 11,'DRYG_BU_RRG') ! IF (LBUDGET_SV) THEN @@ -3728,10 +3838,6 @@ IMPLICIT NONE 12+NSV_ELECEND,'DRYG_BU_RSV') END IF ! -! WHERE ( ZZT(:) > XTT ) ! RSWETG case only -! ZRSS(:) = ZRSS(:) - ZZW1(:,6) -! ZRGS(:) = ZRGS(:) + ZZW1(:,6) -! END WHERE ! ! Inductive mecanism ! @@ -3781,21 +3887,19 @@ IMPLICIT NONE ! WHERE (ZRGT(:) > XRTMIN_ELEC(6) .AND. ZRGS(:) > ZRSMIN_ELEC(6) .AND. & ZZT(:) > XTT .AND. ABS(ZQGT(:)) > XQTMIN(6)) - ZWQ1(:,7) = SIGN(MIN(ABS(ZQGS(:)), ABS(ZWQ1(:,7))), ZQGS(:)) + ZWQ1(:,7) = SIGN( MIN( ABS(ZQGS(:)),ABS(ZWQ1(:,7)) ),ZQGS(:) ) ZQRS(:) = ZQRS(:) + ZWQ1(:,7) ZQGS(:) = ZQGS(:) - ZWQ1(:,7) - ELSEWHERE - ZWQ1(:,7) = 0. ENDWHERE ! - IF (LBUDGET_TH) CALL BUDGET ( & - UNPACK(ZTHS(:),MASK=GMICRO(:,:,:),FIELD=PTHS)*PRHODJ(:,:,:), & + IF (LBUDGET_TH) CALL BUDGET ( & + UNPACK(ZTHS(:),MASK=GMICRO(:,:,:),FIELD=PTHS)*PRHODJ(:,:,:),& 4,'GMLT_BU_RTH') - IF (LBUDGET_RR) CALL BUDGET ( & - UNPACK(ZRRS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0), & + IF (LBUDGET_RR) CALL BUDGET ( & + UNPACK(ZRRS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0), & 8,'GMLT_BU_RRR') - IF (LBUDGET_RG) CALL BUDGET ( & - UNPACK(ZRGS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0), & + IF (LBUDGET_RG) CALL BUDGET ( & + UNPACK(ZRGS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0), & 11,'GMLT_BU_RRG') ! IF (LBUDGET_SV) THEN @@ -3833,11 +3937,11 @@ IMPLICIT NONE ! ZZW1(:,:) = 0.0 WHERE (GHAIL(:) .AND. ((ZRCT(:) > XRTMIN(2) .AND. ZRCS(:) > 0.0))) - ZZW(:) = ZLBDAH(:)**(XCXH-XDH-2.0) * ZRHODREF(:)**(-XCEXVT) + ZZW(:) = ZLBDAH(:)**(XCXH-XDH-2.0) * ZRHOCOR(:) / ZCOR00 ZZW1(:,1) = MIN( ZRCS(:),XFWETH * ZRCT(:) * ZZW(:) ) ! RCWETH END WHERE WHERE (GHAIL(:) .AND. ((ZRIT(:) > XRTMIN(4) .AND. ZRIS(:) > 0.0))) - ZZW(:) = ZLBDAH(:)**(XCXH-XDH-2.0) * ZRHODREF(:)**(-XCEXVT) + ZZW(:) = ZLBDAH(:)**(XCXH-XDH-2.0) * ZRHOCOR(:) / ZCOR00 ZZW1(:,2) = MIN( ZRIS(:),XFWETH * ZRIT(:) * ZZW(:) ) ! RIWETH END WHERE ! @@ -3879,20 +3983,13 @@ IMPLICIT NONE !* 7.2.5 perform the bilinear interpolation of the normalized ! SWETH-kernel ! - DO JJ = 1,IGWET - ZVEC3(JJ) = ( XKER_SWETH(IVEC1(JJ)+1,IVEC2(JJ)+1)* ZVEC2(JJ) & - - XKER_SWETH(IVEC1(JJ)+1,IVEC2(JJ) )*(ZVEC2(JJ) - 1.0) ) & - * ZVEC1(JJ) & - - ( XKER_SWETH(IVEC1(JJ) ,IVEC2(JJ)+1)* ZVEC2(JJ) & - - XKER_SWETH(IVEC1(JJ) ,IVEC2(JJ) )*(ZVEC2(JJ) - 1.0) ) & - * (ZVEC1(JJ) - 1.0) - END DO - ZZW(:) = UNPACK( VECTOR=ZVEC3(:),MASK=GWET,FIELD=0.0 ) + ZVEC3(:) = BI_LIN_INTP_V(XKER_SWETH, IVEC1, IVEC2, ZVEC1, ZVEC2, IGWET) + ZZW(:) = UNPACK( VECTOR=ZVEC3(:),MASK=GWET,FIELD=0.0 ) ! WHERE( GWET(:) ) - ZZW1(:,3) = MIN( ZRSS(:),XFSWETH*ZZW(:) & ! RSWETH + ZZW1(:,3) = MIN( ZRSS(:), XFSWETH*ZZW(:) & ! RSWETH *( ZLBDAS(:)**(XCXS-XBS) )*( ZLBDAH(:)**XCXH ) & - *( ZRHODREF(:)**(-XCEXVT-1.) ) & + * ZRHOCOR(:)/(ZCOR00*ZRHODREF(:)) & *( XLBSWETH1/( ZLBDAH(:)**2 ) + & XLBSWETH2/( ZLBDAH(:) * ZLBDAS(:) ) + & XLBSWETH3/( ZLBDAS(:)**2) ) ) @@ -3941,20 +4038,13 @@ IMPLICIT NONE !* 7.2.10 perform the bilinear interpolation of the normalized ! GWETH-kernel ! - DO JJ = 1, IGWET - ZVEC3(JJ) = ( XKER_GWETH(IVEC1(JJ)+1,IVEC2(JJ)+1)* ZVEC2(JJ) & - - XKER_GWETH(IVEC1(JJ)+1,IVEC2(JJ) )*(ZVEC2(JJ) - 1.0) ) & - * ZVEC1(JJ) & - - ( XKER_GWETH(IVEC1(JJ) ,IVEC2(JJ)+1)* ZVEC2(JJ) & - - XKER_GWETH(IVEC1(JJ) ,IVEC2(JJ) )*(ZVEC2(JJ) - 1.0) ) & - * (ZVEC1(JJ) - 1.0) - END DO - ZZW(:) = UNPACK( VECTOR=ZVEC3(:),MASK=GWET,FIELD=0.0 ) + ZVEC3(:) = BI_LIN_INTP_V(XKER_GWETH, IVEC1, IVEC2, ZVEC1, ZVEC2, IGWET) + ZZW(:) = UNPACK( VECTOR=ZVEC3(:),MASK=GWET,FIELD=0.0 ) ! WHERE (GWET(:)) ZZW1(:,5) = MIN( ZRGS(:),XFGWETH*ZZW(:) & ! RGWETH *( ZLBDAG(:)**(XCXG-XBG) )*( ZLBDAH(:)**XCXH ) & - *( ZRHODREF(:)**(-XCEXVT-1.) ) & + * ZRHOCOR(:) / (ZCOR00 * ZRHODREF(:)) & *( XLBGWETH1/( ZLBDAH(:)**2 ) + & XLBGWETH2/( ZLBDAH(:) * ZLBDAG(:) ) + & XLBGWETH3/( ZLBDAG(:)**2) ) ) @@ -3978,13 +4068,18 @@ IMPLICIT NONE ! ! compute RWETH ! - ZZW(:) = (ZZW(:) * (X0DEPH * ZLBDAH(:)**XEX0DEPH + & - X1DEPH * ZCJ(:) * ZLBDAH(:)**XEX1DEPH) + & - (ZZW1(:,2) + ZZW1(:,3) + ZZW1(:,5) ) * & - (ZRHODREF(:) * (XLMTT + (XCI - XCL) * (XTT - ZZT(:))))) / & - (ZRHODREF(:) * (XLMTT - XCL * (XTT - ZZT(:)))) + ZZW(:) = MAX(0., (ZZW(:) * (X0DEPH * ZLBDAH(:)**XEX0DEPH + & + X1DEPH * ZCJ(:) * ZLBDAH(:)**XEX1DEPH) + & + (ZZW1(:,2) + ZZW1(:,3) + ZZW1(:,5) ) * & + (ZRHODREF(:) * (XLMTT + (XCI - XCL) * (XTT - ZZT(:))))) / & + (ZRHODREF(:) * (XLMTT - XCL * (XTT - ZZT(:))))) +! + ZZW1(:,6) = MAX( ZZW(:) - ZZW1(:,2) - ZZW1(:,3) - ZZW1(:,5), 0. ) ! RCWETH+RRWETH + END WHERE +! + ZUSW(:) = 0. ! - ZZW1(:,6) = ZZW(:) - ZZW1(:,2) - ZZW1(:,3) - ZZW1(:,5) ! RCWETH+RRWETH + WHERE (GHAIL(:) .AND. ZZT(:) < XTT .AND. ZZW1(:,6) /= 0.0) ! ! limitation of the available rainwater mixing ratio (RRWETH < RRS !) ! @@ -4003,49 +4098,62 @@ IMPLICIT NONE ZRGS(:) = ZRGS(:) - ZZW1(:,5) ZRHS(:) = ZRHS(:) + ZZW(:) ZRRS(:) = MAX( 0.0,ZRRS(:) - ZZW1(:,4) + ZZW1(:,1) ) - ZTHS(:) = ZTHS(:) + ZZW1(:,4)*(ZLSFACT(:)-ZLVFACT(:)) + ZRRS(:) = ZRRS(:) - ZZW1(:,4) + ZTHS(:) = ZTHS(:) + (ZZW1(:,4)+ZZW1(:,1))*(ZLSFACT(:)-ZLVFACT(:)) ! f(L_f*(RCWETH+RRWETH)) END WHERE ! + ZWQ1(:,:) = 0.0 + WHERE (GHAIL(:) .AND. ZZT(:) < XTT .AND. ZRCT(:) > XRTMIN_ELEC(2)) + ZWQ1(:,1) = XCOEF_RQ_C * ZQCT(:) * ZZW1(:,1) / ZRCT(:) + ZWQ1(:,1) = SIGN( MIN( ABS(ZQCS(:)),ABS(ZWQ1(:,1)) ),ZQCS(:) ) + END WHERE + WHERE (GHAIL(:) .AND. ZZT(:) < XTT .AND. ZRIT(:) > XRTMIN_ELEC(4)) + ZWQ1(:,2) = XCOEF_RQ_I * ZQIT(:) * ZZW1(:,2) / ZRIT(:) + ZWQ1(:,2) = SIGN( MIN( ABS(ZQIS(:)),ABS(ZWQ1(:,2)) ),ZQIS(:) ) + END WHERE + WHERE (GHAIL(:) .AND. ZZT(:) < XTT .AND. ZRST(:) > XRTMIN_ELEC(5)) + ZWQ1(:,3) = XCOEF_RQ_S * ZQST(:) * ZZW1(:,3) / ZRST(:) + ZWQ1(:,3) = SIGN( MIN( ABS(ZQSS(:)),ABS(ZWQ1(:,3)) ),ZQSS(:) ) + END WHERE + WHERE (GHAIL(:) .AND. ZZT(:) < XTT .AND. ZRGT(:) > XRTMIN_ELEC(6)) + ZWQ1(:,5) = XCOEF_RQ_G * ZQGT(:) * ZZW1(:,5) / ZRGT(:) + ZWQ1(:,5) = SIGN( MIN( ABS(ZQGS(:)),ABS(ZWQ1(:,5)) ),ZQGS(:) ) + END WHERE WHERE (GHAIL(:) .AND. ZZT(:) < XTT .AND. ZRRT(:) > XRTMIN_ELEC(3)) ZWQ1(:,4) = XCOEF_RQ_R * ZQRT(:) * ZZW1(:,4) / ZRRT(:) -! - ZQRS(:) = ZQRS(:) - ZWQ1(:,4) + ZWQ1(:,1) + ZWQ1(:,4) = SIGN( MIN( ABS(ZQRS(:)),ABS(ZWQ1(:,4)) ),ZQRS(:) ) END WHERE - WHERE (GHAIL(:) .AND. ZZT(:) < XTT) - ZWQ1(:,2) = ZWQ1(:,2)*ZUSW(:) - ZWQ1(:,3) = ZWQ1(:,3)*ZUSW(:) - ZWQ1(:,5) = ZWQ1(:,5)*ZUSW(:) - ZZW(:) = ZWQ1(:,4) + ZWQ1(:,2) + ZWQ1(:,3) + ZWQ1(:,5) ! - ZQCS(:) = ZQCS(:) - ZWQ1(:,1) - ZQIS(:) = ZQIS(:) - ZWQ1(:,2) - ZQSS(:) = ZQSS(:) - ZWQ1(:,3) - ZQGS(:) = ZQGS(:) - ZWQ1(:,5) - ZQHS(:) = ZQHS(:) + ZZW(:) - END WHERE + ZQCS(:) = ZQCS(:) - ZWQ1(:,1) + ZQIS(:) = ZQIS(:) - ZWQ1(:,2) + ZQSS(:) = ZQSS(:) - ZWQ1(:,3) + ZQGS(:) = ZQGS(:) - ZWQ1(:,5) + ZQRS(:) = ZQRS(:) - ZWQ1(:,4) + ZQHS(:) = ZQHS(:) + ZWQ1(:,1) + ZWQ1(:,2) + ZWQ1(:,3) + ZWQ1(:,4) + ZWQ1(:,5) END IF - IF (LBUDGET_TH) CALL BUDGET ( & - UNPACK(ZTHS(:),MASK=GMICRO(:,:,:),FIELD=PTHS)*PRHODJ(:,:,:),& - 4,'WETH_BU_RTH') - IF (LBUDGET_RC) CALL BUDGET ( & - UNPACK(ZRCS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0), & - 7,'WETH_BU_RRC') - IF (LBUDGET_RR) CALL BUDGET ( & - UNPACK(ZRRS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0), & - 8,'WETH_BU_RRR') - IF (LBUDGET_RI) CALL BUDGET ( & - UNPACK(ZRIS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0), & - 9,'WETH_BU_RRI') - IF (LBUDGET_RS) CALL BUDGET ( & - UNPACK(ZRSS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0), & - 10,'WETH_BU_RRS') - IF (LBUDGET_RG) CALL BUDGET ( & - UNPACK(ZRGS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0), & - 11,'WETH_BU_RRG') - IF (LBUDGET_RH) CALL BUDGET ( & - UNPACK(ZRHS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0), & - 12,'WETH_BU_RRH') + + IF (LBUDGET_TH) CALL BUDGET ( & + UNPACK(ZTHS(:),MASK=GMICRO(:,:,:),FIELD=PTHS)*PRHODJ(:,:,:),& + 4,'WETH_BU_RTH') + IF (LBUDGET_RC) CALL BUDGET ( & + UNPACK(ZRCS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0), & + 7,'WETH_BU_RRC') + IF (LBUDGET_RR) CALL BUDGET ( & + UNPACK(ZRRS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0), & + 8,'WETH_BU_RRR') + IF (LBUDGET_RI) CALL BUDGET ( & + UNPACK(ZRIS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0), & + 9,'WETH_BU_RRI') + IF (LBUDGET_RS) CALL BUDGET ( & + UNPACK(ZRSS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0), & + 10,'WETH_BU_RRS') + IF (LBUDGET_RG) CALL BUDGET ( & + UNPACK(ZRGS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0), & + 11,'WETH_BU_RRG') + IF (LBUDGET_RH) CALL BUDGET ( & + UNPACK(ZRHS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0), & + 12,'WETH_BU_RRH') ! IF (IHAIL > 0) THEN ! @@ -4057,7 +4165,7 @@ IMPLICIT NONE WHERE (GHAIL(:) .AND. (ZRHS(:) > 0.0) .AND. (ZZT(:) > XTT)) ZZW(:) = ZRVT(:) * ZPRES(:) / ((XMV / XMD) + ZRVT(:)) ! Vapor pressure ZZW(:) = ZKA(:) * (XTT - ZZT(:)) + & - ( ZDV(:) * (XLVTT + (XCPV - XCL) * (ZZT(:) - XTT)) * & + ( ZDV(:) * (XLVTT + (XCPV - XCL) * (ZZT(:) - XTT)) * & (XESTT - ZZW(:)) / (XRV * ZZT(:))) ! ! compute RHMLTR @@ -4076,23 +4184,23 @@ IMPLICIT NONE ! WHERE (ZRHT(:) > XRTMIN_ELEC(7) .AND. ZRHS(:) > ZRSMIN_ELEC(7) .AND. & ZZT(:) > XTT .AND. ABS(ZQHT(:)) > XQTMIN(7)) - ZWQ1(:,7) = SIGN(MIN(ABS(ZQHS(:)), ABS(ZWQ1(:,7))), ZQHS(:)) + ZWQ1(:,7) = SIGN( MIN( ABS(ZQHS(:)),ABS(ZWQ1(:,7)) ),ZQHS(:) ) ZQRS(:) = ZQRS(:) + ZWQ1(:,7) ZQHS(:) = ZQHS(:) - ZWQ1(:,7) - ELSEWHERE - ZWQ1(:,7) = 0. END WHERE END IF +! DEALLOCATE(GHAIL) - IF (LBUDGET_TH) CALL BUDGET ( & - UNPACK(ZTHS(:),MASK=GMICRO(:,:,:),FIELD=PTHS)*PRHODJ(:,:,:),& - 4,'HMLT_BU_RTH') - IF (LBUDGET_RR) CALL BUDGET ( & - UNPACK(ZRRS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0), & - 8,'HMLT_BU_RRR') - IF (LBUDGET_RH) CALL BUDGET ( & - UNPACK(ZRHS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0), & - 12,'HMLT_BU_RRH') +! + IF (LBUDGET_TH) CALL BUDGET ( & + UNPACK(ZTHS(:),MASK=GMICRO(:,:,:),FIELD=PTHS)*PRHODJ(:,:,:),& + 4,'HMLT_BU_RTH') + IF (LBUDGET_RR) CALL BUDGET ( & + UNPACK(ZRRS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0), & + 8,'HMLT_BU_RRR') + IF (LBUDGET_RH) CALL BUDGET ( & + UNPACK(ZRHS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0), & + 12,'HMLT_BU_RRH') ! END SUBROUTINE RAIN_ICE_ELEC_FAST_RH ! @@ -4122,14 +4230,14 @@ IMPLICIT NONE ZQIS(:) = 0. END WHERE ! - IF (LBUDGET_TH) CALL BUDGET ( & - UNPACK(ZTHS(:),MASK=GMICRO(:,:,:),FIELD=PTHS)*PRHODJ(:,:,:), & + IF (LBUDGET_TH) CALL BUDGET ( & + UNPACK(ZTHS(:),MASK=GMICRO(:,:,:),FIELD=PTHS)*PRHODJ(:,:,:), & 4,'IMLT_BU_RTH') - IF (LBUDGET_RC) CALL BUDGET ( & - UNPACK(ZRCS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0), & + IF (LBUDGET_RC) CALL BUDGET ( & + UNPACK(ZRCS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0), & 7,'IMLT_BU_RRC') - IF (LBUDGET_RI) CALL BUDGET ( & - UNPACK(ZRIS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0), & + IF (LBUDGET_RI) CALL BUDGET ( & + UNPACK(ZRIS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0), & 9,'IMLT_BU_RRI') ! IF (LBUDGET_SV) THEN @@ -4159,23 +4267,19 @@ IMPLICIT NONE WHERE (ZRCS(:) > 0.0 .AND. ZSSI(:) > 0.0 .AND. & ZRIT(:) > 0.0 .AND. ZCIT(:) > 0.0 .AND. & ZRCT(:) > XRTMIN_ELEC(2) .AND. ABS(ZQCT(:)) > XQTMIN(2)) - ZWQ1(:,1) = SIGN(MIN(ABS(ZQCS(:)), ABS(ZWQ1(:,1))), ZQCS(:)) -! ZQIS(:) = ZQIS(:) + ZWQ1(:,1) * 0.01 ! Attenuation de ce processus -! ZQCS(:) = ZQCS(:) - ZWQ1(:,1) * 0.01 ! trop important + ZWQ1(:,1) = SIGN( MIN( ABS(ZQCS(:)),ABS(ZWQ1(:,1)) ),ZQCS(:) ) ZQIS(:) = ZQIS(:) + ZWQ1(:,1) ZQCS(:) = ZQCS(:) - ZWQ1(:,1) - ELSEWHERE - ZWQ1(:,1) = 0. ENDWHERE ! - IF (LBUDGET_TH) CALL BUDGET ( & - UNPACK(ZTHS(:),MASK=GMICRO(:,:,:),FIELD=PTHS)*PRHODJ(:,:,:), & + IF (LBUDGET_TH) CALL BUDGET ( & + UNPACK(ZTHS(:),MASK=GMICRO(:,:,:),FIELD=PTHS)*PRHODJ(:,:,:), & 4,'BERFI_BU_RTH') - IF (LBUDGET_RC) CALL BUDGET ( & - UNPACK(ZRCS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0), & + IF (LBUDGET_RC) CALL BUDGET ( & + UNPACK(ZRCS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0), & 7,'BERFI_BU_RRC') - IF (LBUDGET_RI) CALL BUDGET ( & - UNPACK(ZRIS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0), & + IF (LBUDGET_RI) CALL BUDGET ( & + UNPACK(ZRIS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0), & 9,'BERFI_BU_RRI') ! IF (LBUDGET_SV) THEN @@ -4203,9 +4307,9 @@ REAL, DIMENSION(:), INTENT(IN), OPTIONAL :: ZRH !* 1. COMPUTE LAMBDA ! -------------- ! -ZLBDAR(:) = 0.0 -ZLBDAS(:) = 0.0 -ZLBDAG(:) = 0.0 + ZLBDAR(:) = 0.0 + ZLBDAS(:) = 0.0 + ZLBDAG(:) = 0.0 ! WHERE( ZRR(:) > 0.0 ) ZLBDAR(:) = XLBR * (ZRHODREF(:) * MAX(ZRR(:), XRTMIN(3)))**XLBEXR @@ -4290,7 +4394,7 @@ ENDWHERE WHERE (ZRI(:) > ZRTMIN_E(4) .AND. ZCIT(:) > 0.0) ZEI(:) = ZDUM * ZRHODREF(:) * ZQI(:) / & ((ZCIT**(1 - XEXFQUPDI)) * XFQUPDI * (ZRHODREF(:) * & - ZRI(:))**XEXFQUPDI) + ZDUM * ZRI(:))**XEXFQUPDI) ZEI(:) = SIGN( MIN(ABS(ZEI(:)), XEIMAX), ZEI(:)) ENDWHERE ! @@ -4348,15 +4452,16 @@ IMPLICIT NONE ZFT(:) = 0. ! GELEC(:,3) = ZZT(:) > (XTT - 40.) .AND. ZZT(:) < XTT - GELEC(:,1) = GELEC(:,3) .AND. & + GELEC(:,1) = GELEC(:,3) .AND. & ZRIT(:) > XRTMIN_ELEC(4) .AND. ZRST(:) > XRTMIN_ELEC(5) .AND. & - ZCIT(:) > 0.0 .AND. ZLBDAS(:) > 0. + ZCIT(:) > 0.0 .AND. ZLBDAS(:) > 0. .AND. ZLBDAS(:) < XLBDAS_MAXE GELEC(:,2) = GELEC(:,3) .AND. & ZRIT(:) > XRTMIN_ELEC(4) .AND. ZRGT(:) > XRTMIN_ELEC(6) .AND. & - ZCIT(:) > 0.0 .AND. ZLBDAG(:) > 0. + ZCIT(:) > 0.0 .AND. ZLBDAG(:) > 0. .AND. ZLBDAG(:) < XLBDAG_MAXE GELEC(:,3) = GELEC(:,3) .AND. & ZRST(:) > XRTMIN_ELEC(5) .AND. ZRGT(:) > XRTMIN_ELEC(6) .AND. & - ZLBDAS(:) > 0. .AND. ZLBDAG(:) > 0. + ZLBDAS(:) > 0. .AND. ZLBDAS(:) < XLBDAS_MAXE .AND. & + ZLBDAG(:) > 0. .AND. ZLBDAG(:) < XLBDAG_MAXE GELEC(:,4) = GELEC(:,1) .OR. GELEC(:,2) .OR. GELEC(:,3) ! WHERE (GELEC(:,4)) @@ -4376,303 +4481,194 @@ IMPLICIT NONE !* 2.1 common to SAUN1 and SAUN2 ! IF (CNI_CHARGING == 'SAUN1' .OR. CNI_CHARGING == 'SAUN2') THEN - ZEW(:) = 0. - ZSAUNQ(:) = 0. - ZSAUNIK(:) = 0. - ZSAUNSK(:) = 0. - ZSAUNIM(:) = 0. - ZSAUNIN(:) = 0. - ZSAUNSM(:) = 0. - ZSAUNSN(:) = 0. + ZDQLWC(:) = 0. + ZEW(:) = 0. +! +! positive case is the default value + ZFQIAGGS(:) = XFQIAGGSP + ZFQIDRYGBS(:) = XFQIDRYGBSP + ZLBQSDRYGB1S(:) = XLBQSDRYGB1SP + ZLBQSDRYGB2S(:) = XLBQSDRYGB2SP + ZLBQSDRYGB3S(:) = XLBQSDRYGB3SP + ZSAUNIM(:) = XIMP !3.76 + ZSAUNIN(:) = XINP !2.5 + ZSAUNSK(:) = XSKP !52.8 + ZSAUNSM(:) = XSMP !0.44 + ZSAUNSN(:) = XSNP !2.5 ! ! LWC_crit - ZLWCC(:) = -0.49 + 6.64E-2 * (XTT - ZZT(:)) ! (g m^-3) - WHERE ((ZZT(:) - XTT) >= -10.6928) - ZLWCC(:) = 0.22 - ENDWHERE - - WHERE ((ZZT(:) - XTT) <= -23.9458) - ZLWCC(:) = 1.1 - ENDWHERE + ZLWCC(:) = MIN( MAX( -0.49 + 6.64E-2*(XTT-ZZT(:)),0.22 ),1.1 ) ! (g m^-3) ! ! Mansell et al. (2005, JGR): droplet collection efficiency of the graupel ~ 0.6-1.0 ZEW(:) = 0.8 * ZRCT(:) * ZRHODREF(:) * 1.E3 ! (g m^-3) - XEW(:,:,:) = UNPACK(ZEW(:), MASK=GMICRO, FIELD=0.) ! - GELEC(:,3) = ZZT(:) >= (XTT - 40.) .AND. ZZT(:) <= XTT + GELEC(:,3) = ZZT(:) > (XTT - 40.) .AND. ZZT(:) <= XTT .AND. & + ZEW(:) >= 0.01 .AND. ZEW(:) <= 10. GELEC(:,1) = GELEC(:,3) .AND. & ZRIT(:) > XRTMIN_ELEC(4) .AND. ZRST(:) > XRTMIN_ELEC(5) .AND. & - ZCIT(:) > 0.0 .AND. ZLBDAS(:) > 0. + ZCIT(:) > 0.0 .AND. ZLBDAS(:) > 0. .AND. ZLBDAS(:) < XLBDAS_MAXE GELEC(:,2) = GELEC(:,3) .AND. & ZRIT(:) > XRTMIN_ELEC(4) .AND. ZRGT(:) > XRTMIN_ELEC(6) .AND. & - ZCIT(:) > 0.0 .AND. ZLBDAG(:) > 0. + ZCIT(:) > 0.0 .AND. ZLBDAG(:) > 0. .AND. ZLBDAG(:) < XLBDAG_MAXE GELEC(:,3) = GELEC(:,3) .AND. & ZRST(:) > XRTMIN_ELEC(5) .AND. ZRGT(:) > XRTMIN_ELEC(6) .AND. & - ZLBDAS(:) > 0. .AND. ZLBDAG(:) > 0. - GELEC(:,4) = GELEC(:,1) .OR. GELEC(:,2) .OR. GELEC(:,3) -! -! region S4 : positive - WHERE (GELEC(:,4) .AND. & - ZZT(:) <= (XTT - 7.35) .AND. ZZT(:) > (XTT - 23.9458) .AND. & - ZEW(:) > ZLWCC(:)) - ZSAUNQ(:) = MAX(0., (20.22 * ZEW(:) + 1.36 * (ZZT(:) - XTT) + 10.05) * 1.E-15) - ENDWHERE + ZLBDAS(:) > 0. .AND. ZLBDAS(:) < XLBDAS_MAXE .AND. & + ZLBDAG(:) > 0. .AND. ZLBDAG(:) < XLBDAG_MAXE ! -! region S1 : positive --> linear interpolation - WHERE (GELEC(:,4) .AND. & - ZZT(:) > (XTT - 7.35) .AND. ZZT(:) < XTT .AND. & - ZEW(:) > ZLWCC(:)) - ZSAUNQ(:) = MAX(0., -(2.75 * ZEW(:) + 0.007) * (ZZT(:) - XTT) * 1.E-15) - ENDWHERE + ALLOCATE (GSAUN(IMICRO)) + GSAUN(:) = .FALSE. ! -! region S8 : positive - WHERE (GELEC(:,4) .AND. & - ZZT(:) <= (XTT - 23.9458) .AND. ZZT(:) > (XTT - 40.0) .AND. & - ZEW(:) > ZLWCC(:)) - ZSAUNQ(:) = MAX(0., (20.22 * ZEW(:) - 22.26) * 1.E-15) - ENDWHERE +! For temperature lower than -30C and higher than -40C, value of q at -30C + GSAUN(:) = GELEC(:,1) .OR. GELEC(:,2) .OR. GELEC(:,3) + IGSAUN = COUNT (GSAUN(:)) +! + IF (IGSAUN > 0) THEN + CALL ELEC_INI_NI_SAUNQ(ZEW, ZDQLWC) +! + WHERE (ZDQLWC(:) < 0.) + ZFQIAGGS(:) = XFQIAGGSN + ZFQIDRYGBS(:) = XFQIDRYGBSN + ZLBQSDRYGB1S(:) = XLBQSDRYGB1SN + ZLBQSDRYGB2S(:) = XLBQSDRYGB2SN + ZLBQSDRYGB3S(:) = XLBQSDRYGB3SN + ZSAUNIM(:) = XIMN !2.54 + ZSAUNIN(:) = XINN !2.8 + ZSAUNSK(:) = XSKN !24. + ZSAUNSM(:) = XSMN !0.5 + ZSAUNSN(:) = XSNN !2.8 + ENDWHERE + ENDIF ! -! region S7 : negative - WHERE (GELEC(:,4) .AND. & - ZZT(:) <= (XTT - 7.35) .AND. ZZT(:) > (XTT - 40.0) .AND. & - ZEW(:) >= 0.104149 .AND. ZEW(:) < ZLWCC(:)) - ZSAUNQ(:) = MIN(0., (3.02 - 31.76 * ZEW(:) + 26.53 * ZEW(:)**2.) * 1.E-15) - ENDWHERE + DEALLOCATE( GSAUN ) END IF ! -!* 2.2 SAUN1 only -! -! SAUN1 doesn't take into account marginal positive and negative regions at -! low LWC ! - IF (CNI_CHARGING == 'SAUN1') THEN -! -! region S1 : negative --> linear interpolation - WHERE (GELEC(:,4) .AND. & - ZZT(:) > (XTT - 7.35) .AND. ZZT(:) < XTT .AND. & - ZEW(:) < ZLWCC(:) .AND. ZEW(:) >= 0.104149) - ZSAUNQ(:) = MIN(0., (-0.41 + 4.32 * ZEW(:) - 3.61 * ZEW(:)**2) * & - (ZZT(:) - XTT) * 1.E-15) - ENDWHERE +!* 3. Saunders and Peck (1998) ! - WHERE (ZSAUNQ(:) > 0.) - ZSAUNIK(:) = XIKP - ZSAUNIM(:) = XIMP - ZSAUNIN(:) = XINP - ZSAUNSK(:) = XSKP - ZSAUNSM(:) = XSMP - ZSAUNSN(:) = XSNP - ENDWHERE + IF (CNI_CHARGING == 'SAP98') THEN + ZRAR_CRIT(:) = 0. ! - WHERE (ZSAUNQ(:) < 0.) - ZSAUNIK(:) = XIKN - ZSAUNIM(:) = XIMN - ZSAUNIN(:) = XINN - ZSAUNSK(:) = XSKN - ZSAUNSM(:) = XSMN - ZSAUNSN(:) = XSNN - ENDWHERE +! compute the critical rime accretion rate + WHERE (ZZT(:) <= XTT .AND. ZZT(:) >= (XTT - 23.7)) ! Original from SAP98 + ZRAR_CRIT(:) = 1.0 + 7.93E-2 * (ZZT(:) - XTT) + & + 4.48E-2 * (ZZT(:) - XTT)**2 + & + 7.48E-3 * (ZZT(:) - XTT)**3 + & + 5.47E-4 * (ZZT(:) - XTT)**4 + & + 1.67E-5 * (ZZT(:) - XTT)**5 + & + 1.76E-7 * (ZZT(:) - XTT)**6 + END WHERE ! - ENDIF + WHERE (ZZT(:) < (XTT - 23.7) .AND. ZZT(:) > (XTT - 40.)) ! Added by Mansell + ZRAR_CRIT(:) = 3.4 * (1.0 - (ABS(ZZT(:) - XTT + 23.7) / & ! et al. (2005) + (-23.7 + 40.))**3.) + END WHERE ! -!* 2.3 SAUN2 only + GELEC(:,3) = ZZT(:) >= (XTT - 40.) .AND. ZZT(:) <= XTT + GELEC(:,1) = GELEC(:,3) .AND. & + ZRIT(:) > XRTMIN_ELEC(4) .AND. ZRST(:) > XRTMIN_ELEC(5) .AND. & + ZCIT(:) > 0.0 .AND. ZLBDAS(:) > 0. .AND. ZLBDAS(:) < XLBDAS_MAXE + GELEC(:,2) = GELEC(:,3) .AND. & + ZRIT(:) > XRTMIN_ELEC(4) .AND. ZRGT(:) > XRTMIN_ELEC(6) .AND. & + ZCIT(:) > 0.0 .AND. ZLBDAG(:) > 0. .AND. ZLBDAG(:) < XLBDAG_MAXE + GELEC(:,3) = GELEC(:,3) .AND. & + ZRST(:) > XRTMIN_ELEC(5) .AND. ZRGT(:) > XRTMIN_ELEC(6) .AND. & + ZLBDAS(:) > 0. .AND. ZLBDAS(:) < XLBDAS_MAXE .AND. & + ZLBDAG(:) > 0. .AND. ZLBDAG(:) < XLBDAG_MAXE ! -! SAUN2 takes into account marginal positive and negative regions at low LWC +!+++++++++ I - G collisions +++++++++ + ZSAUNIM_IG(:) = 0. ! - IF (CNI_CHARGING == 'SAUN2') THEN -! -! region S2 : negative - WHERE (GELEC(:,4) .AND. & - ZZT(:) <= (XTT - 7.35) .AND. ZZT(:) > (XTT - 16.0) .AND. & - ZEW(:) >= 0.026 .AND. ZEW(:) < 0.14) - ZSAUNQ(:) = MIN(0., (-314.4 * ZEW(:) + 7.92) * 1.E-15) - ENDWHERE -! -! region S3 : negative - WHERE (GELEC(:,4) .AND. & - ZZT(:) <= (XTT - 7.35) .AND. ZZT(:) > (XTT - 16.0) .AND. & - ZEW(:) >= 0.14 .AND. ZEW(:) < ZLWCC(:)) - ZSAUNQ(:) = MIN(0., (419.4 * ZEW(:) - 92.64) * 1.E-15) - ENDWHERE -! -! region S5 : positive - WHERE (GELEC(:,4) .AND. & - ZZT(:) < (XTT - 20.0) .AND. ZZT(:) > (XTT - 40.0) .AND. & - ZEW(:) >= 0.063034 .AND. ZEW(:) < 0.12) - ZSAUNQ(:) = MAX(0., (2041.76 * ZEW(:) - 128.7) * 1.E-15) - ENDWHERE -! -! region S6 : positive - WHERE (GELEC(:,4) .AND. & - ZZT(:) < (XTT - 20.0) .AND. ZZT(:) > (XTT - 40.0) .AND. & - ZEW(:) >= 0.12 .AND. ZEW(:) < 0.1596) - ZSAUNQ(:) = MAX(0., (-2900.22 * ZEW(:) + 462.91) * 1.E-15) - ENDWHERE -! -! region S1 : negative --> linear interpolation of S3 - WHERE (GELEC(:,4) .AND. & - ZZT(:) > (XTT - 7.35) .AND. ZZT(:) < XTT .AND. & - ZEW(:) >= 0.14 .AND. ZEW(:) < ZLWCC(:)) - ZSAUNQ(:) = MIN(0., (-57.06 * ZEW(:) + 12.6) * (ZZT(:) - XTT) * 1.E-15) - ENDWHERE -! -! region S1 : negative --> linear interpolation of S2 - WHERE (GELEC(:,4) .AND. & - ZZT(:) > (XTT - 7.35) .AND. ZZT(:) < XTT .AND. & - ZEW(:) >= 0.026 .AND. ZEW(:) < 0.14) - ZSAUNQ(:) = MIN(0., (42.8 * ZEW(:) - 1.08) * (ZZT(:) - XTT) * 1.E-15) - ENDWHERE -! - WHERE (ZSAUNQ(:) > 0.) - ZSAUNIK(:) = XIKP - ZSAUNIM(:) = XIMP - ZSAUNIN(:) = XINP - ZSAUNSK(:) = XSKP - ZSAUNSM(:) = XSMP - ZSAUNSN(:) = XSNP - ENDWHERE -! - WHERE (ZSAUNQ(:) < 0.) - ZSAUNIK(:) = XIKN - ZSAUNIM(:) = XIMN - ZSAUNIN(:) = XINN - ZSAUNSK(:) = XSKN - ZSAUNSM(:) = XSMN - ZSAUNSN(:) = XSNN - ENDWHERE - ENDIF -! -! -!* 3. Saunders and Peck (1998) -! - IF (CNI_CHARGING == 'SAP98') THEN - ZRAR(:) = 0. - ZRAR_CRIT(:) = 0. - ZVGMEAN(:) = 0. - ZVSMEAN(:) = 0. -! -! compute the critical rime accretion rate - WHERE (ZZT(:) <= XTT .AND. ZZT(:) >= (XTT - 23.7)) - ZRAR_CRIT(:) = 1.0 + 7.93E-2 * (ZZT(:) - XTT) + & - 4.48E-2 * (ZZT(:) - XTT)**2 + & - 7.48E-3 * (ZZT(:) - XTT)**3 + & - 5.47E-4 * (ZZT(:) - XTT)**4 + & - 1.67E-5 * (ZZT(:) - XTT)**5 + & - 1.76E-7 * (ZZT(:) - XTT)**6 - END WHERE -! - WHERE (ZZT(:) < (XTT - 23.7) .AND. ZZT(:) > (XTT - 40.)) - ZRAR_CRIT(:) = 3.4 * (1.0 - (ABS(ZZT(:) - XTT + 23.7) / & - (-23.7 + 40.))**3.) - END WHERE -! - GELEC(:,3) = ZZT(:) >= (XTT - 40.) .AND. ZZT(:) <= XTT - GELEC(:,1) = GELEC(:,3) .AND. & - ZRIT(:) > XRTMIN_ELEC(4) .AND. ZRST(:) > XRTMIN_ELEC(5) .AND. & - ZCIT(:) > 0.0 .AND. ZLBDAS(:) > 0. - GELEC(:,2) = GELEC(:,3) .AND. & - ZRIT(:) > XRTMIN_ELEC(4) .AND. ZRGT(:) > XRTMIN_ELEC(6) .AND. & - ZCIT(:) > 0.0 .AND. ZLBDAG(:) > 0. - GELEC(:,3) = GELEC(:,3) .AND. & - ZRST(:) > XRTMIN_ELEC(5) .AND. ZRGT(:) > XRTMIN_ELEC(6) .AND. & - ZLBDAS(:) > 0. .AND. ZLBDAG(:) > 0. -! -!+++++++++ I - G collisions +++++++++ - ZSAUNIK_IG(:) = 0. - ZSAUNSK_IG(:) = 0. - ZSAUNIM_IG(:) = 0. - ZSAUNIN_IG(:) = 0. - ZSAUNSM_IG(:) = 0. - ZSAUNSN_IG(:) = 0. - ZPECKQ_IG(:) = 0. +! positive case is the default value + ZSAUNIM_IG(:) = XIMP + ZSAUNIN_IG(:) = XINP ! ! Compute the Rime Accretion Rate + ZRAR(:) = 0. + ZVGMEAN(:) = 0. WHERE (ZLBDAG(:) > 0. .AND. ZRCT(:) > 0.) - ZVGMEAN(:) = XCG * XINISAP * ZRHODREF(:)**(-XCEXVT) * & - MOMG(XALPHAG, XNUG, XBG+XDG) / MOMG(XALPHAG, XNUG, XBG) * & - ZLBDAG(:)**(-XDG) + ZVGMEAN(:) = XVGCOEF * ZRHOCOR(:) * ZLBDAG(:)**(-XDG) ZRAR(:) = 0.8 * ZRHODREF(:) * ZRCT(:) * ZVGMEAN(:) * 1.E3 - ELSEWHERE - ZRAR(:) = 0. END WHERE - XEW(:,:,:) = UNPACK(ZRAR(:), MASK=GMICRO, FIELD=0.) ! - GELEC(:,2) = GELEC(:,2) .AND. ZRAR(:) > 0.1 ! .AND. ZRAR(:) <= 3.3 + GELEC(:,2) = GELEC(:,2) .AND. ZRAR(:) > 0.1 GELEC(:,4) = GELEC(:,2) +! + IF (COUNT(GELEC(:,4)) .GT. 0) THEN ! ! compute the coefficients for I-G collisions - CALL ELEC_INI_NI_SAP98 (ZRAR, ZPECKQ_IG, ZSAUNIK_IG, ZSAUNSK_IG, ZSAUNIM_IG, & - ZSAUNIN_IG, ZSAUNSM_IG, ZSAUNSN_IG) + CALL ELEC_INI_NI_SAP98 (ZRAR, ZDQRAR_IG) ! + WHERE (ZDQRAR_IG(:) < 0.) + ZSAUNIM_IG(:) = XIMN + ZSAUNIN_IG(:) = XINN + ENDWHERE + ENDIF ! !+++++++++ I - S collisions +++++++++ - ZSAUNIK_IS(:) = 0. - ZSAUNSK_IS(:) = 0. - ZSAUNIM_IS(:) = 0. - ZSAUNIN_IS(:) = 0. - ZSAUNSM_IS(:) = 0. - ZSAUNSN_IS(:) = 0. - ZPECKQ_IS(:) = 0. - ZRAR(:) = 0. + ZDQRAR_IS(:) = 0. +! +! positive case is the default value + ZSAUNIM_IS(:) = XIMP + ZSAUNIN_IS(:) = XINP ! ! Compute the Rime Accretion Rate + ZRAR(:) = 0. + ZVSMEAN(:) = 0. +! WHERE (ZLBDAS(:) > 0. .AND. ZRCT(:) > 0.) - ZVSMEAN(:) = XCS * XINISAP * ZRHODREF(:)**(-XCEXVT) * & - MOMG(XALPHAS, XNUS, XBS+XDS) / MOMG(XALPHAS, XNUS, XBS) * & - ZLBDAS(:)**(-XDS) + ZVSMEAN(:) = XVSCOEF * ZRHOCOR(:) * ZLBDAS(:)**(-XDS) ZRAR(:) = 0.8 * ZRHODREF(:) * ZRCT(:) * ZVSMEAN(:) * 1.E3 - ELSEWHERE - ZRAR(:) = 0. END WHERE - XEW(:,:,:) = UNPACK(ZRAR(:), MASK=GMICRO, FIELD=0.) ! - GELEC(:,1) = GELEC(:,1) .AND. ZRAR(:) > 0.1 ! .AND. ZRAR(:) <= 3.3 + GELEC(:,1) = GELEC(:,1) .AND. ZRAR(:) > 0.1 GELEC(:,4) = GELEC(:,1) ! + IF (COUNT(GELEC(:,4)) .GT. 0) THEN ! compute the coefficients for I-S collisions - CALL ELEC_INI_NI_SAP98 (ZRAR, ZPECKQ_IS, ZSAUNIK_IS, ZSAUNSK_IS, ZSAUNIM_IS, & - ZSAUNIN_IS, ZSAUNSM_IS, ZSAUNSN_IS) + CALL ELEC_INI_NI_SAP98 (ZRAR, ZDQRAR_IS) ! + WHERE (ZDQRAR_IS(:) < 0.) + ZSAUNIM_IS(:) = XIMN + ZSAUNIN_IS(:) = XINN + ENDWHERE + ENDIF ! !+++++++++ S - G collisions +++++++++ - ZSAUNIK_SG(:) = 0. - ZSAUNSK_SG(:) = 0. - ZSAUNIM_SG(:) = 0. - ZSAUNIN_SG(:) = 0. - ZSAUNSM_SG(:) = 0. - ZSAUNSN_SG(:) = 0. - ZPECKQ_SG(:) = 0. - ZRAR(:) = 0. + ZDQRAR_SG(:) = 0. +! +! positive case is the default value + ZSAUNSK_SG(:) = XSKP + ZSAUNSM_SG(:) = XSMP + ZSAUNSN_SG(:) = XSNP ! ! Compute the Rime Accretion Rate - WHERE (ZLBDAS(:) > 0. .AND. ZRCT(:) > 0. .AND. ZLBDAG(:) > 0.) - ZVSMEAN(:) = XCS * XINISAP * ZRHODREF(:)**(-XCEXVT) * & - MOMG(XALPHAS, XNUS, XBS+XDS) / MOMG(XALPHAS, XNUS, XBS) * & - ZLBDAS(:)**(-XDS) - ZVGMEAN(:) = XCG * XINISAP * ZRHODREF(:)**(-XCEXVT) * & - MOMG(XALPHAG, XNUS, XBG+XDG) / MOMG(XALPHAG, XNUG, XBG) * & - ZLBDAG(:)**(-XDG) + ZRAR(:) = 0. +! + WHERE (ZVSMEAN(:) > 0. .AND. ZVGMEAN(:) > 0.) ZRAR(:) = 0.8 * ZRHODREF(:) * ZRCT(:) * ABS(ZVGMEAN(:) - ZVSMEAN(:)) * 1.E3 - ELSEWHERE - ZRAR(:) = 0. END WHERE - XEW(:,:,:) = UNPACK(ZRAR(:), MASK=GMICRO, FIELD=0.) ! - GELEC(:,3) = GELEC(:,3) .AND. ZRAR(:) > 0.1 ! .AND. ZRAR(:) <= 3.3 + GELEC(:,3) = GELEC(:,3) .AND. ZRAR(:) > 0.1 GELEC(:,4) = GELEC(:,3) +! + IF( COUNT(GELEC(:,4)) .GT. 0) THEN ! ! compute the coefficients for S-G collisions - CALL ELEC_INI_NI_SAP98 (ZRAR, ZPECKQ_SG, ZSAUNIK_SG, ZSAUNSK_SG, ZSAUNIM_SG, & - ZSAUNIN_SG, ZSAUNSM_SG, ZSAUNSN_SG) + CALL ELEC_INI_NI_SAP98 (ZRAR, ZDQRAR_SG) ! + WHERE (ZDQRAR_SG(:) < 0.) + ZSAUNSK_SG(:) = XSKN + ZSAUNSM_SG(:) = XSMN + ZSAUNSN_SG(:) = XSNN + ENDWHERE + ENDIF END IF ! -!* 4. Brooks et al. (1997) without anomalies +!* 4. Brooks et al. (1997) without / with anomalies ! - IF (CNI_CHARGING == 'BSMP1') THEN - ZRAR(:) = 0. - ZVGMEAN(:) = 0. - ZVSMEAN(:) = 0. + IF (CNI_CHARGING == 'BSMP1' .OR. CNI_CHARGING == 'BSMP2') THEN + + ALLOCATE (GSAUN(IMICRO)) ! ! compute the critical rime accretion rate WHERE (ZZT(:) > (XTT - 10.7)) @@ -4685,237 +4681,139 @@ IMPLICIT NONE ZRAR_CRIT(:) = 3.3 END WHERE ! - GELEC(:,3) = ZZT(:) >= (XTT - 40.) .AND. ZZT(:) <= XTT + GELEC(:,3) = ZZT(:) > (XTT - 40.) .AND. ZZT(:) <= XTT .AND. & + ZEW(:) >= 0.01 .AND. ZEW(:) <= 10. GELEC(:,1) = GELEC(:,3) .AND. & ZRIT(:) > XRTMIN_ELEC(4) .AND. ZRST(:) > XRTMIN_ELEC(5) .AND. & - ZCIT(:) > 0.0 .AND. ZLBDAS(:) > 0. + ZCIT(:) > 0.0 .AND. ZLBDAS(:) > 0. .AND. ZLBDAS(:) < XLBDAS_MAXE GELEC(:,2) = GELEC(:,3) .AND. & ZRIT(:) > XRTMIN_ELEC(4) .AND. ZRGT(:) > XRTMIN_ELEC(6) .AND. & - ZCIT(:) > 0.0 .AND. ZLBDAG(:) > 0. + ZCIT(:) > 0.0 .AND. ZLBDAG(:) > 0. .AND. ZLBDAG(:) < XLBDAG_MAXE GELEC(:,3) = GELEC(:,3) .AND. & ZRST(:) > XRTMIN_ELEC(5) .AND. ZRGT(:) > XRTMIN_ELEC(6) .AND. & - ZLBDAS(:) > 0. .AND. ZLBDAG(:) > 0. + ZLBDAS(:) > 0. .AND. ZLBDAS(:) < XLBDAS_MAXE .AND. & + ZLBDAG(:) > 0. .AND. ZLBDAG(:) < XLBDAG_MAXE ! !+++++++++ I - S collisions +++++++++ - ZSAUNIK_IS(:) = 0. - ZSAUNSK_IS(:) = 0. - ZSAUNIM_IS(:) = 0. - ZSAUNIN_IS(:) = 0. - ZSAUNSM_IS(:) = 0. - ZSAUNSN_IS(:) = 0. - ZPECKQ_IS(:) = 0. + ZDQRAR_IS(:) = 0. +! +! positive case is the default value + ZSAUNIM_IS(:) = XIMP + ZSAUNIN_IS(:) = XINP +! + GSAUN(:) = .FALSE. ! ! Compute the Rime Accretion Rate + ZRAR(:) = 0. + ZVSMEAN(:) = 0. +! WHERE (ZLBDAS(:) > 0. .AND. ZRCT(:) > 0.) - ZVSMEAN(:) = XCS * XINISAP * ZRHODREF(:)**(-XCEXVT) * & - MOMG(XALPHAS, XNUS, XBS+XDS) / MOMG(XALPHAS, XNUS, XBS) * & - ZLBDAS(:)**(-XDS) + ZVSMEAN(:) = XVSCOEF * ZRHOCOR(:) * ZLBDAS(:)**(-XDS) ZRAR(:) = 0.8 * ZRHODREF(:) * ZRCT(:) * ZVSMEAN(:) * 1.E3 - ELSEWHERE - ZRAR(:) = 0. END WHERE - XEW(:,:,:) = UNPACK(ZRAR(:), MASK=GMICRO, FIELD=0.) ! GELEC(:,1) = GELEC(:,1) .AND. ZRAR(:) > 0.1 - GELEC(:,4) = GELEC(:,1) + GSAUN(:) = GELEC(:,1) + IGSAUN = COUNT (GSAUN(:)) ! - CALL ELEC_INI_NI_BSMP1(ZRAR, ZPECKQ_IS, ZSAUNIK_IS, ZSAUNSK_IS, & - ZSAUNIM_IS, ZSAUNIN_IS, ZSAUNSM_IS, & - ZSAUNSN_IS) + IF (IGSAUN .GT. 0) THEN + ZEW(:) = ZRAR(:) / 3. ! -!+++++++++ I - G collisions +++++++++ - ZSAUNIK_IG(:) = 0. - ZSAUNSK_IG(:) = 0. - ZSAUNIM_IG(:) = 0. - ZSAUNIN_IG(:) = 0. - ZSAUNSM_IG(:) = 0. - ZSAUNSN_IG(:) = 0. - ZPECKQ_IG(:) = 0. + CALL ELEC_INI_NI_SAUNQ (ZEW, ZDQRAR_IS) ! -! Compute the Rime Accretion Rate - WHERE (ZLBDAG(:) > 0. .AND. ZRCT(:) > 0.) - ZVGMEAN(:) = XCG * XINISAP * ZRHODREF(:)**(-XCEXVT) * & - MOMG(XALPHAG, XNUS, XBG+XDG) / MOMG(XALPHAG, XNUG, XBG) * & - ZLBDAG(:)**(-XDG) - ZRAR(:) = 0.8 * ZRHODREF(:) * ZRCT(:) * ZVGMEAN(:) * 1.E3 - ELSEWHERE - ZRAR(:) = 0. - END WHERE - XEW(:,:,:) = UNPACK(ZRAR(:), MASK=GMICRO, FIELD=0.) + WHERE (ZDQRAR_IS(:) < 0.) + ZSAUNIM_IS(:) = XIMN + ZSAUNIN_IS(:) = XINN + ENDWHERE + ENDIF ! - GELEC(:,2) = GELEC(:,2) .AND. ZRAR(:) > 0.1 - GELEC(:,4) = GELEC(:,2) +!+++++++++ I - G collisions +++++++++ + ZDQRAR_IG(:) = 0. ! - CALL ELEC_INI_NI_BSMP1(ZRAR, ZPECKQ_IG, ZSAUNIK_IG, ZSAUNSK_IG, & - ZSAUNIM_IG, ZSAUNIN_IG, ZSAUNSM_IG, & - ZSAUNSN_IG) +! positive case is the default value + ZSAUNIM_IG(:) = XIMP + ZSAUNIN_IG(:) = XINP ! -!+++++++++ S - G collisions +++++++++ - ZSAUNIK_SG(:) = 0. - ZSAUNSK_SG(:) = 0. - ZSAUNIM_SG(:) = 0. - ZSAUNIN_SG(:) = 0. - ZSAUNSM_SG(:) = 0. - ZSAUNSN_SG(:) = 0. - ZPECKQ_SG(:) = 0. + GSAUN(:) = .FALSE. ! ! Compute the Rime Accretion Rate - WHERE (ZLBDAS(:) > 0. .AND. ZRCT(:) > 0. .AND. ZLBDAG(:) > 0.) - ZVSMEAN(:) = XCS * XINISAP * ZRHODREF(:)**(-XCEXVT) * & - MOMG(XALPHAS, XNUS, XBS+XDS) / MOMG(XALPHAS, XNUS, XBS) * & - ZLBDAS(:)**(-XDS) - ZVGMEAN(:) = XCG * XINISAP * ZRHODREF(:)**(-XCEXVT) * & - MOMG(XALPHAG, XNUS, XBG+XDG) / MOMG(XALPHAG, XNUG, XBG) * & - ZLBDAG(:)**(-XDG) - ZRAR(:) = 0.8 * ZRHODREF(:) * ZRCT(:) * ABS(ZVGMEAN(:) - ZVSMEAN(:)) * 1.E3 - ELSEWHERE - ZRAR(:) = 0. - END WHERE - XEW(:,:,:) = UNPACK(ZRAR(:), MASK=GMICRO, FIELD=0.) -! - GELEC(:,3) = GELEC(:,3) .AND. ZRAR(:) > 0.1 - GELEC(:,4) = GELEC(:,3) -! - CALL ELEC_INI_NI_BSMP1(ZRAR, ZPECKQ_SG, ZSAUNIK_SG, ZSAUNSK_SG, & - ZSAUNIM_SG, ZSAUNIN_SG, ZSAUNSM_SG, & - ZSAUNSN_SG) - END IF -! -! -!* 5. Brooks et al. (1997) with anomalies -! - IF (CNI_CHARGING == 'BSMP2') THEN - ZRAR(:) = 0. + ZRAR(:) = 0. ZVGMEAN(:) = 0. - ZVSMEAN(:) = 0. -! -! compute the critical rime accretion rate - WHERE (ZZT(:) > (XTT - 10.7)) - ZRAR_CRIT(:) = 0.66 - END WHERE - WHERE (ZZT(:) <= (XTT - 10.7) .AND. ZZT(:) >= (XTT - 23.7)) - ZRAR_CRIT(:) = -1.47 - 0.2 * (ZZT(:) - XTT) - END WHERE - WHERE (ZZT(:) < (XTT - 23.7) .AND. ZZT(:) > (XTT - 40.)) - ZRAR_CRIT(:) = 3.3 - END WHERE -! - GELEC(:,3) = ZZT(:) >= (XTT - 40.) .AND. ZZT(:) <= XTT - GELEC(:,1) = GELEC(:,3) .AND. & - ZRIT(:) > XRTMIN_ELEC(4) .AND. ZRST(:) > XRTMIN_ELEC(5) .AND. & - ZCIT(:) > 0.0 .AND. ZLBDAS(:) > 0. - GELEC(:,2) = GELEC(:,3) .AND. & - ZRIT(:) > XRTMIN_ELEC(4) .AND. ZRGT(:) > XRTMIN_ELEC(6) .AND. & - ZCIT(:) > 0.0 .AND. ZLBDAG(:) > 0. - GELEC(:,3) = GELEC(:,3) .AND. & - ZRST(:) > XRTMIN_ELEC(5) .AND. ZRGT(:) > XRTMIN_ELEC(6) .AND. & - ZLBDAS(:) > 0. .AND. ZLBDAG(:) > 0. ! -!+++++++++ I - S collisions +++++++++ - ZSAUNIK_IS(:) = 0. - ZSAUNSK_IS(:) = 0. - ZSAUNIM_IS(:) = 0. - ZSAUNIN_IS(:) = 0. - ZSAUNSM_IS(:) = 0. - ZSAUNSN_IS(:) = 0. - ZPECKQ_IS(:) = 0. -! -! Compute the Rime Accretion Rate - WHERE (ZLBDAS(:) > 0. .AND. ZRCT(:) > 0.) - ZVSMEAN(:) = XCS * XINISAP * ZRHODREF(:)**(-XCEXVT) * & - MOMG(XALPHAS, XNUS, XBS+XDS) / MOMG(XALPHAS, XNUS, XBS) * & - ZLBDAS(:)**(-XDS) - ZRAR(:) = 0.8 * ZRHODREF(:) * ZRCT(:) * ZVSMEAN(:) * 1.E3 - ELSEWHERE - ZRAR(:) = 0. - END WHERE - XEW(:,:,:) = UNPACK(ZRAR(:), MASK=GMICRO, FIELD=0.) -! - GELEC(:,1) = GELEC(:,1) .AND. ZRAR(:) > 0.1 - GELEC(:,4) = GELEC(:,1) -! - CALL ELEC_INI_NI_BSMP2(ZRAR, ZPECKQ_IS, ZSAUNIK_IS, ZSAUNSK_IS, & - ZSAUNIM_IS, ZSAUNIN_IS, ZSAUNSM_IS, & - ZSAUNSN_IS) -! -!+++++++++ I - G collisions +++++++++ - ZSAUNIK_IG(:) = 0. - ZSAUNSK_IG(:) = 0. - ZSAUNIM_IG(:) = 0. - ZSAUNIN_IG(:) = 0. - ZSAUNSM_IG(:) = 0. - ZSAUNSN_IG(:) = 0. - ZPECKQ_IG(:) = 0. -! -! Compute the Rime Accretion Rate WHERE (ZLBDAG(:) > 0. .AND. ZRCT(:) > 0.) - ZVGMEAN(:) = XCG * XINISAP * ZRHODREF(:)**(-XCEXVT) * & - MOMG(XALPHAG, XNUG, XBG+XDG) / MOMG(XALPHAG, XNUG, XBG) * & - ZLBDAG(:)**(-XDG) + ZVGMEAN(:) = XVGCOEF * ZRHOCOR(:) * ZLBDAG(:)**(-XDG) ZRAR(:) = 0.8 * ZRHODREF(:) * ZRCT(:) * ZVGMEAN(:) * 1.E3 - ELSEWHERE - ZRAR(:) = 0. END WHERE - XEW(:,:,:) = UNPACK(ZRAR(:), MASK=GMICRO, FIELD=0.) ! GELEC(:,2) = GELEC(:,2) .AND. ZRAR(:) > 0.1 - GELEC(:,4) = GELEC(:,2) + GSAUN(:) = GELEC(:,2) + IGSAUN = COUNT (GSAUN(:)) +! + IF (IGSAUN .GT. 0) THEN + ZEW(:) = ZRAR(:) / 3. + CALL ELEC_INI_NI_SAUNQ (ZEW, ZDQRAR_IG) ! - CALL ELEC_INI_NI_BSMP2(ZRAR, ZPECKQ_IG, ZSAUNIK_IG, ZSAUNSK_IG, & - ZSAUNIM_IG, ZSAUNIN_IG, ZSAUNSM_IG, & - ZSAUNSN_IG) + WHERE (ZDQRAR_IG(:) < 0.) + ZSAUNIM_IG(:) = XIMN + ZSAUNIN_IG(:) = XINN + ENDWHERE + ENDIF ! !+++++++++ S - G collisions +++++++++ - ZSAUNIK_SG(:) = 0. - ZSAUNSK_SG(:) = 0. - ZSAUNIM_SG(:) = 0. - ZSAUNIN_SG(:) = 0. - ZSAUNSM_SG(:) = 0. - ZSAUNSN_SG(:) = 0. - ZPECKQ_SG(:) = 0. + ZDQRAR_SG(:) = 0. +! +! positive case is the default value + ZSAUNSK_SG(:) = XSKP + ZSAUNSM_SG(:) = XSMP + ZSAUNSN_SG(:) = XSNP +! + GSAUN(:) = .FALSE. ! ! Compute the Rime Accretion Rate - WHERE (ZLBDAS(:) > 0. .AND. ZRCT(:) > 0. .AND. ZLBDAG(:) > 0.) - ZVSMEAN(:) = XCS * XINISAP * ZRHODREF(:)**(-XCEXVT) * & - MOMG(XALPHAS, XNUS, XBS+XDS) / MOMG(XALPHAS, XNUS, XBS) * & - ZLBDAS(:)**(-XDS) - ZVGMEAN(:) = XCG * XINISAP * ZRHODREF(:)**(-XCEXVT) * & - MOMG(XALPHAG, XNUG, XBG+XDG) / MOMG(XALPHAG, XNUG, XBG) * & - ZLBDAG(:)**(-XDG) - ZRAR(:) = 0.8 * ZRHODREF(:) * ZRCT(:) * ABS(ZVGMEAN(:) - ZVSMEAN(:)) * 1.E3 - ELSEWHERE - ZRAR(:) = 0. + ZRAR(:) = 0. +! + WHERE (ZVSMEAN(:) > 0. .AND. ZVGMEAN(:) > 0.) + ZRAR(:) = 0.8 * ZRHODREF(:) * ZRCT(:) * ABS(ZVGMEAN(:) - ZVSMEAN(:)) * 1.E3 END WHERE - XEW(:,:,:) = UNPACK(ZRAR(:), MASK=GMICRO, FIELD=0.) ! GELEC(:,3) = GELEC(:,3) .AND. ZRAR(:) > 0.1 - GELEC(:,4) = GELEC(:,3) + GSAUN(:) = GELEC(:,3) + IGSAUN = COUNT (GSAUN(:)) ! - CALL ELEC_INI_NI_BSMP2(ZRAR, ZPECKQ_SG, ZSAUNIK_SG, ZSAUNSK_SG, & - ZSAUNIM_SG, ZSAUNIN_SG, ZSAUNSM_SG, & - ZSAUNSN_SG) + IF (IGSAUN .GT. 0) THEN + ZEW(:) = ZRAR(:) / 3. + CALL ELEC_INI_NI_SAUNQ (ZEW, ZDQRAR_SG) +! + WHERE (ZDQRAR_SG(:) < 0.) + ZSAUNSK_SG(:) = XSKN + ZSAUNSM_SG(:) = XSMN + ZSAUNSN_SG(:) = XSNN + ENDWHERE + ENDIF +! + DEALLOCATE( GSAUN ) END IF ! ! -!* 6. Takahashi (1978) +!* 5. Takahashi (1978) ! IF (CNI_CHARGING == 'TAKAH') THEN - ZDQTAKA(:) = 0. + ZDQLWC(:) = 0. ! ZEW(:) = ZRCT(:) * ZRHODREF(:) * 1.E3 ! (g m^-3) - XEW(:,:,:) = UNPACK(ZEW(:), MASK=GMICRO, FIELD=0.) ! GELEC(:,3) = ZZT(:) > (XTT - 40.) .AND. ZZT(:) <= XTT .AND. & ZEW(:) >= 0.01 .AND. ZEW(:) <= 10. GELEC(:,1) = GELEC(:,3) .AND. & ZRIT(:) > XRTMIN_ELEC(4) .AND. ZRST(:) > XRTMIN_ELEC(5) .AND. & - ZCIT(:) > 0.0 .AND. ZLBDAS(:) > 0. + ZCIT(:) > 0.0 .AND. ZLBDAS(:) > 0. .AND. ZLBDAS(:) < XLBDAS_MAXE GELEC(:,2) = GELEC(:,3) .AND. & ZRIT(:) > XRTMIN_ELEC(4) .AND. ZRGT(:) > XRTMIN_ELEC(6) .AND. & - ZCIT(:) > 0.0 .AND. ZLBDAG(:) > 0. + ZCIT(:) > 0.0 .AND. ZLBDAG(:) > 0. .AND. ZLBDAG(:) < XLBDAG_MAXE GELEC(:,3) = GELEC(:,3) .AND. & ZRST(:) > XRTMIN_ELEC(5) .AND. ZRGT(:) > XRTMIN_ELEC(6) .AND. & - ZLBDAS(:) > 0. .AND. ZLBDAG(:) > 0. + ZLBDAS(:) > 0. .AND. ZLBDAS(:) < XLBDAS_MAXE .AND. & + ZLBDAG(:) > 0. .AND. ZLBDAG(:) < XLBDAG_MAXE ! ALLOCATE (GTAKA(IMICRO)) GTAKA(:) = .FALSE. @@ -4925,564 +4823,358 @@ IMPLICIT NONE IGTAKA = COUNT (GTAKA(:)) ! IF (IGTAKA > 0) THEN - ALLOCATE ( IVEC1(IGTAKA) ) - ALLOCATE ( IVEC2(IGTAKA) ) - ALLOCATE ( ZVEC1(IGTAKA) ) - ALLOCATE ( ZVEC2(IGTAKA) ) - ALLOCATE ( ZDQTAKA_OPT(IGTAKA) ) - ALLOCATE ( ITEST_TAK(IGTAKA) ) - ZDQTAKA_OPT(:) = 0. - IVEC1(:) = 0 - IVEC2(:) = 0 - ITEST_TAK(:) = 0 -! - ZVEC1(:) = PACK( ZZT(:), MASK=GTAKA ) - ZVEC2(:) = PACK( ZEW(:), MASK=GTAKA ) - ZDQTAKA_OPT(:) = PACK( ZDQTAKA(:), MASK=GTAKA ) -! -! Temperature index (0C --> -40C) - ZVEC1(1:IGTAKA) = MAX( 1.00001, MIN( FLOAT(NIND_TEMP)-0.00001, & - (ZVEC1(1:IGTAKA) - XTT - 1.)/(-1.) ) ) - IVEC1(1:IGTAKA) = INT( ZVEC1(1:IGTAKA) ) - ZVEC1(1:IGTAKA) = ZVEC1(1:IGTAKA) - FLOAT(IVEC1(1:IGTAKA)) -! -! LWC index (0.01 g.m^-3 --> 10 g.m^-3) - WHERE (ZVEC2(:) >= 0.01 .AND. ZVEC2(:) <= 0.1 .AND. ITEST_TAK(:) == 0) - ZVEC2(:) = MAX( 1.00001, MIN( FLOAT(10)-0.00001, & - ZVEC2(:) * 100. )) - IVEC2(:) = INT(ZVEC2(:)) - ZVEC2(:) = ZVEC2(:) - FLOAT(IVEC2(:)) - ITEST_TAK(:) = 1 - ENDWHERE -! - WHERE (ZVEC2(:) > 0.1 .AND. ZVEC2(:) <= 1. .AND. ITEST_TAK(:) == 0) - ZVEC2(:) = MAX( 10.00001, MIN( FLOAT(19)-0.00001, & - ZVEC2(:) * 10. + 9. ) ) - IVEC2(:) = INT(ZVEC2(:)) - ZVEC2(:) = ZVEC2(:) - FLOAT(IVEC2(:)) - ITEST_TAK(:) = 1 - ENDWHERE -! - WHERE ((ZVEC2(:) > 1.) .AND. (ZVEC2(:) <= 10.) .AND. ITEST_TAK(:) == 0) - ZVEC2(:) = MAX( 19.00001, MIN( FLOAT(NIND_LWC)-0.00001, & - ZVEC2(:) + 18. ) ) - IVEC2(:) = INT(ZVEC2(:)) - ZVEC2(:) = ZVEC2(:) - FLOAT(IVEC2(:)) - ITEST_TAK(:) = 1 - ENDWHERE -! -! Interpolate XMANSELL - ZDQTAKA_OPT(:) = BI_LIN_INTP_V( XMANSELL, IVEC2, IVEC1, ZVEC2, ZVEC1, & - IGTAKA ) - ZDQTAKA(:) = UNPACK( ZDQTAKA_OPT(:), MASK=GTAKA, FIELD=0.0 ) -! - DEALLOCATE( IVEC1 ) - DEALLOCATE( IVEC2 ) - DEALLOCATE( ZVEC1 ) - DEALLOCATE( ZVEC2 ) - DEALLOCATE( ZDQTAKA_OPT ) - DEALLOCATE( ITEST_TAK ) + CALL ELEC_INI_NI_TAKAH(ZEW, ZDQLWC, XMANSELL) ENDIF ! DEALLOCATE( GTAKA ) ENDIF ! ! -!* 7. Takahashi with EW (Tsenova and Mitzeva, 2009) +!* 6. Takahashi with EW (Tsenova and Mitzeva, 2009) ! IF (CNI_CHARGING == 'TEEWC') THEN - ZBTRMQ(:) = 0. - ZEW(:) = 0. + ZDQLWC(:) = 0. +! +! positive case is the default value + ZFQIAGGS(:) = XFQIAGGSP_TAK + ZFQIDRYGBS(:) = XFQIDRYGBSP_TAK + ZLBQSDRYGB1S(:) = XLBQSDRYGB1SP + ZLBQSDRYGB2S(:) = XLBQSDRYGB2SP + ZLBQSDRYGB3S(:) = XLBQSDRYGB3SP + ZSAUNIM(:) = XIMP !3.76 + ZSAUNIN(:) = XINP !2.5 + ZSAUNSK(:) = XSKP_TAK !6.5 + ZSAUNSM(:) = XSMP !0.44 + ZSAUNSN(:) = XSNP !2.5 ! ! Compute the effective water content + ZEW(:) = 0. +! WHERE (ZLBDAG(:) > 0. .AND. ZRCT(:) > 0.) ZEW(:) = 0.8 * ZRHODREF(:) * ZRCT(:) * 1.E3 - ELSEWHERE - ZEW(:) = 0. END WHERE - XEW(:,:,:) = UNPACK(ZEW(:), MASK=GMICRO, FIELD=0.) ! GELEC(:,3) = ZZT(:) >= (XTT - 40.) .AND. ZZT(:) <= XTT .AND. & ZEW(:) >= 0.01 .AND. ZEW(:) <= 10. GELEC(:,1) = GELEC(:,3) .AND. & ZRIT(:) > XRTMIN_ELEC(4) .AND. ZRST(:) > XRTMIN_ELEC(5) .AND. & - ZCIT(:) > 0.0 .AND. ZLBDAS(:) > 0. + ZCIT(:) > 0.0 .AND. ZLBDAS(:) > 0. .AND. ZLBDAS(:) < XLBDAS_MAXE GELEC(:,2) = GELEC(:,3) .AND. & ZRIT(:) > XRTMIN_ELEC(4) .AND. ZRGT(:) > XRTMIN_ELEC(6) .AND. & - ZCIT(:) > 0.0 .AND. ZLBDAG(:) > 0. + ZCIT(:) > 0.0 .AND. ZLBDAG(:) > 0. .AND. ZLBDAG(:) < XLBDAG_MAXE GELEC(:,3) = GELEC(:,3) .AND. & ZRST(:) > XRTMIN_ELEC(5) .AND. ZRGT(:) > XRTMIN_ELEC(6) .AND. & - ZLBDAS(:) > 0. .AND. ZLBDAG(:) > 0. - GELEC(:,4) = GELEC(:,1) .OR. GELEC(:,2) .OR. GELEC(:,3) -! -! Eq. 1: >0 - WHERE ( GELEC(:,4) .AND. ZZT(:) > (XTT - 10.) .AND. ZEW(:) <= 1.6) - ZBTRMQ(:) = 146.981 * ZEW(:) - 116.37 * ZEW(:)**2 & - + 29.76 * ZEW(:)**3 & - - 0.03 * (ZZT(:) - XTT)**3 * ZEW(:) & - - 2.58 * (ZZT(:) - XTT) & - - 0.21 * (ZZT(:) - XTT)**3 * ZEW(:)**3 & - + 0.36 * (ZZT(:) - XTT)**3 * ZEW(:)**2 & - + 0.15 * (ZZT(:) - XTT)**2 & - + 2.92 * (ZZT(:) - XTT) * ZEW(:)**3 & - - 4.22 * (ZZT(:) - XTT) * ZEW(:) - 8.506 - ZBTRMQ(:) = MAX( 0., ZBTRMQ(:) * 1.E-15) - ENDWHERE + ZLBDAS(:) > 0. .AND. ZLBDAS(:) < XLBDAS_MAXE .AND. & + ZLBDAG(:) > 0. .AND. ZLBDAG(:) < XLBDAG_MAXE ! -! Eq. 2: >0 - WHERE (GELEC(:,4) .AND. ZZT(:) > (XTT - 10.) .AND. & - ZEW(:) > 1.6 .AND. ZEW(:) <= 8.) - ZBTRMQ(:) = 4.179 * (ZZT(:) - XTT) & - - 0.005 * (ZZT(:) - XTT)**2 * ZEW(:)**2 & - + 0.916 * ZEW(:)**2 & - - 1.333 * (ZZT(:) - XTT) * ZEW(:) & - - 7.465 * ZEW(:) & - + 0.109 * (ZZT(:) - XTT) * ZEW(:)**2 & - + 0.001 * (ZZT(:) - XTT)**2 * ZEW(:)**3 & - - 0.035 * ZEW(:)**3 + 50.84454 - ZBTRMQ(:) = MAX( 0., ZBTRMQ(:) * 1.E-15) - ENDWHERE + ALLOCATE (GTAKA(IMICRO)) + GTAKA(:) = .FALSE. ! -! Eq. 8: > 0 - WHERE ( GELEC(:,4) .AND. ZEW(:) <= 0.4 .AND. & - ZZT(:) <= (XTT - 10.) .AND. ZZT(:) >= (XTT - 40.)) - ZBTRMQ(:) = - 3.3515 * (ZZT(:) - XTT) & - + 95.957 * (ZZT(:) - XTT) * ZEW(:)**2 & - + 511.83 * ZEW(:) & - + 17.448 * (ZZT(:) - XTT)**2 * ZEW(:)**3 & - - 0.0007 * (ZZT(:) - XTT)**3 & - + 20.570 * (ZZT(:) - XTT) * ZEW(:) & - + 0.1656 * (ZZT(:) - XTT)**2 * ZEW(:) & - + 0.4954 * (ZZT(:) - XTT)**3 * ZEW(:)**3 & - - 0.0975 * (ZZT(:) - XTT)**3 * ZEW(:)**2 & - + 67.457 * (ZZT(:) - XTT) * ZEW(:)**3 & - - 0.1066 * (ZZT(:) - XTT)**2 - 24.5715 - ZBTRMQ(:) = MAX( 0., ZBTRMQ(:) * 1.E-15) - ENDWHERE +! For temperature lower than -30C and higher than -40C, value of q at -30C + GTAKA(:) = GELEC(:,1) .OR. GELEC(:,2) .OR. GELEC(:,3) + IGTAKA = COUNT (GTAKA(:)) ! -! Eq. 9: < 0 - WHERE (GELEC(:,4) .AND. & - ZZT(:) <= (XTT - 10.) .AND. ZZT(:) >= (XTT - 40.) .AND. & - ZEW(:) > 0.4 .AND. ZEW(:) <= 3.2) - ZBTRMQ(:) = - 1.5676 * (ZZT(:) - XTT) * ZEW(:) & - + 0.2484 * (ZZT(:) - XTT) * ZEW(:)**3 & - + 0.0112 * (ZZT(:) - XTT)**3 & - + 19.199 * (ZZT(:) - XTT) & - + 0.8051 * (ZZT(:) - XTT)**2 & - - 83.4 * ZEW(:) & - + 15.4 * ZEW(:)**2 & - + 5.97 * ZEW(:)**3 + 167.9278 - ZBTRMQ(:) = MIN( 0., ZBTRMQ(:) * 1.E-15) - ENDWHERE + IF (IGTAKA > 0) THEN + CALL ELEC_INI_NI_TAKAH(ZEW, ZDQLWC, XTAKA_TM) +! + WHERE (ZDQLWC(:) < 0.) + ZFQIAGGS(:) = XFQIAGGSN_TAK + ZFQIDRYGBS(:) = XFQIDRYGBSN_TAK + ZLBQSDRYGB1S(:) = XLBQSDRYGB1SN + ZLBQSDRYGB2S(:) = XLBQSDRYGB2SN + ZLBQSDRYGB3S(:) = XLBQSDRYGB3SN + ZSAUNIM(:) = XIMN !2.54 + ZSAUNIN(:) = XINN !2.8 + ZSAUNSK(:) = XSKN_TAK !2.0 + ZSAUNSM(:) = XSMN !0.5 + ZSAUNSN(:) = XSNN !2.8 + ENDWHERE + ENDIF ! -! Eq. 10: > 0 - WHERE (GELEC(:,4) .AND. & - ZZT(:) <= (XTT - 10.) .AND. ZZT(:) >= (XTT - 40.) .AND. & - ZEW(:) > 3.2 .AND. ZEW(:) <= 8.) - ZBTRMQ(:) = 4.2127 * (ZZT(:) - XTT) & - - 0.8311 * (ZZT(:) - XTT) * ZEW(:) & - + 0.0670 * (ZZT(:) - XTT) * ZEW(:) **2 & - + 0.0042 * (ZZT(:) - XTT)**2 * ZEW(:) + 40.9642 - ZBTRMQ(:) = MAX( 0., ZBTRMQ(:) * 1.E-15) - ENDWHERE - END IF + DEALLOCATE( GTAKA ) + ENDIF ! ! -!* 8. Takahashi with RAR (Tsenova and Mitzeva, 2011) +!* 7. Takahashi with RAR (Tsenova and Mitzeva, 2011) ! IF (CNI_CHARGING == 'TERAR') THEN - ZRAR(:) = 0. - ZVGMEAN(:) = 0. - ZVSMEAN(:) = 0. +! + ALLOCATE (GTAKA(IMICRO)) ! GELEC(:,3) = ZZT(:) >= (XTT - 40.) .AND. ZZT(:) <= XTT GELEC(:,1) = GELEC(:,3) .AND. & ZRIT(:) > XRTMIN_ELEC(4) .AND. ZRST(:) > XRTMIN_ELEC(5) .AND. & - ZCIT(:) > 0.0 .AND. ZLBDAS(:) > 0. + ZCIT(:) > 0.0 .AND. ZLBDAS(:) > 0. .AND. ZLBDAS(:) < XLBDAS_MAXE GELEC(:,2) = GELEC(:,3) .AND. & ZRIT(:) > XRTMIN_ELEC(4) .AND. ZRGT(:) > XRTMIN_ELEC(6) .AND. & - ZCIT(:) > 0.0 .AND. ZLBDAG(:) > 0. + ZCIT(:) > 0.0 .AND. ZLBDAG(:) > 0. .AND. ZLBDAG(:) < XLBDAG_MAXE GELEC(:,3) = GELEC(:,3) .AND. & ZRST(:) > XRTMIN_ELEC(5) .AND. ZRGT(:) > XRTMIN_ELEC(6) .AND. & - ZLBDAS(:) > 0. .AND. ZLBDAG(:) > 0. + ZLBDAS(:) > 0. .AND. ZLBDAS(:) < XLBDAS_MAXE .AND. & + ZLBDAG(:) > 0. .AND. ZLBDAG(:) < XLBDAG_MAXE ! !+++++++++ I - S collisions +++++++++ - ZBTRMQ_IS(:) = 0. + ZDQRAR_IS(:) = 0. +! +! positive case is the default value + ZSAUNIM_IS(:) = XIMP + ZSAUNIN_IS(:) = XINP +! + GTAKA(:) = .FALSE. ! ! Compute the Rime Accretion Rate + ZRAR(:) = 0. + ZVSMEAN(:) = 0. +! WHERE (ZLBDAS(:) > 0. .AND. ZRCT(:) > 0.) - ZVSMEAN(:) = XCS * XINISAP * ZRHODREF(:)**(-XCEXVT) * & - MOMG(XALPHAS, XNUS, XBS+XDS) / MOMG(XALPHAS, XNUS, XBS) * & - ZLBDAS(:)**(-XDS) + ZVSMEAN(:) = XVSCOEF * ZRHOCOR(:) * ZLBDAS(:)**(-XDS) ZRAR(:) = 0.8 * ZRHODREF(:) * ZRCT(:) * ZVSMEAN(:) * 1.E3 - ELSEWHERE - ZRAR(:) = 0. END WHERE - XEW(:,:,:) = UNPACK(ZRAR(:), MASK=GMICRO, FIELD=0.) ! - GELEC(:,1) = GELEC(:,1) .AND. ZRAR(:) > 0.01 .AND. ZRAR(:) <= 90. - GELEC(:,4) = GELEC(:,1) + GELEC(:,1) = GELEC(:,1) .AND. ZRAR(:) > 0.01 .AND. ZRAR(:) <= 80. + GTAKA(:) = GELEC(:,1) ! - CALL ELEC_INI_NI_TERAR(ZRAR, ZBTRMQ_IS) + IGTAKA = COUNT (GTAKA(:)) +! + IF (IGTAKA > 0) THEN + ZEW(:) = ZRAR(:) / 8. + CALL ELEC_INI_NI_TAKAH(ZEW, ZDQRAR_IS, XTAKA_TM) +! + WHERE (ZDQRAR_IS(:) < 0.) + ZSAUNIM_IS(:) = XIMN + ZSAUNIN_IS(:) = XINN + ENDWHERE + END IF ! ! !+++++++++ I - G collisions +++++++++ - ZBTRMQ_IG(:) = 0. + ZDQRAR_IG(:) = 0. +! +! positive case is the default value + ZSAUNIM_IG(:) = XIMP + ZSAUNIN_IG(:) = XINP +! + GTAKA(:) = .FALSE. ! ! Compute the Rime Accretion Rate + ZRAR(:) = 0. + ZVGMEAN(:) = 0. +! WHERE (ZLBDAG(:) > 0. .AND. ZRCT(:) > 0.) - ZVGMEAN(:) = XCG * XINISAP * ZRHODREF(:)**(-XCEXVT) * & - MOMG(XALPHAG, XNUS, XBG+XDG) / MOMG(XALPHAG, XNUG, XBG) * & - ZLBDAG(:)**(-XDG) + ZVGMEAN(:) = XVGCOEF * ZRHOCOR(:) * ZLBDAG(:)**(-XDG) ZRAR(:) = 0.8 * ZRHODREF(:) * ZRCT(:) * ZVGMEAN(:) * 1.E3 - ELSEWHERE - ZRAR(:) = 0. END WHERE - XEW(:,:,:) = UNPACK(ZRAR(:), MASK=GMICRO, FIELD=0.) ! - GELEC(:,2) = GELEC(:,2) .AND. ZRAR(:) > 0.01 .AND. ZRAR(:) <= 90. - GELEC(:,4) = GELEC(:,2) + GELEC(:,2) = GELEC(:,2) .AND. ZRAR(:) > 0.01 .AND. ZRAR(:) <= 80. + GTAKA(:) = GELEC(:,2) ! - CALL ELEC_INI_NI_TERAR(ZRAR, ZBTRMQ_IG) + IGTAKA = COUNT (GTAKA(:)) ! + IF (IGTAKA > 0) THEN + ZEW(:) = ZRAR(:) / 8. + CALL ELEC_INI_NI_TAKAH(ZEW, ZDQRAR_IG, XTAKA_TM) +! + WHERE (ZDQRAR_IG(:) < 0.) + ZSAUNIM_IG(:) = XIMN + ZSAUNIN_IG(:) = XINN + ENDWHERE + ENDIF ! !+++++++++ S - G collisions +++++++++ - ZBTRMQ_SG(:) = 0. + ZDQRAR_SG(:) = 0. +! +! positive case is the default value + ZSAUNSK_SG(:) = XSKP_TAK + ZSAUNSM_SG(:) = XSMP + ZSAUNSN_SG(:) = XSNP +! + GTAKA(:) = .FALSE. ! ! Compute the Rime Accretion Rate - WHERE (ZLBDAS(:) > 0. .AND. ZRCT(:) > 0. .AND. ZLBDAG(:) > 0.) - ZVSMEAN(:) = XCS * XINISAP * ZRHODREF(:)**(-XCEXVT) * & - MOMG(XALPHAS, XNUS, XBS+XDS) / MOMG(XALPHAS, XNUS, XBS) * & - ZLBDAS(:)**(-XDS) - ZVGMEAN(:) = XCG * XINISAP * ZRHODREF(:)**(-XCEXVT) * & - MOMG(XALPHAG, XNUS, XBG+XDG) / MOMG(XALPHAG, XNUG, XBG) * & - ZLBDAG(:)**(-XDG) + ZRAR(:) = 0. +! + WHERE (ZVSMEAN(:) > 0. .AND. ZVGMEAN(:) > 0.) ZRAR(:) = 0.8 * ZRHODREF(:) * ZRCT(:) * ABS(ZVGMEAN(:) - ZVSMEAN(:)) * 1.E3 - ELSEWHERE - ZRAR(:) = 0. END WHERE - XEW(:,:,:) = UNPACK(ZRAR(:), MASK=GMICRO, FIELD=0.) ! - GELEC(:,3) = GELEC(:,3) .AND. ZRAR(:) > 0.01 .AND. ZRAR(:) <= 90 - GELEC(:,4) = GELEC(:,3) - - CALL ELEC_INI_NI_TERAR(ZRAR, ZBTRMQ_SG) + GELEC(:,3) = GELEC(:,3) .AND. ZRAR(:) > 0.01 .AND. ZRAR(:) <= 80 + GTAKA(:) = GELEC(:,3) + IGTAKA = COUNT (GTAKA(:)) ! + IF (IGTAKA > 0) THEN + ZEW(:) = ZRAR(:) / 8. + CALL ELEC_INI_NI_TAKAH(ZEW, ZDQRAR_SG, XTAKA_TM) +! + WHERE (ZDQRAR_SG(:) < 0.) + ZSAUNSK_SG(:) = XSKN_TAK + ZSAUNSM_SG(:) = XSMN + ZSAUNSN_SG(:) = XSNN + ENDWHERE + ENDIF +! + DEALLOCATE( GTAKA ) END IF ! END SUBROUTINE ELEC_INI_NI_PROCESS ! !------------------------------------------------------------------------------- ! - SUBROUTINE ELEC_INI_NI_SAP98(ZRAR, ZPECKQ_AUX, ZSAUNIK_AUX, ZSAUNSK_AUX, & - ZSAUNIM_AUX, ZSAUNIN_AUX, ZSAUNSM_AUX, & - ZSAUNSN_AUX) + SUBROUTINE ELEC_INI_NI_SAP98(ZRAR, ZDQRAR_AUX) ! IMPLICIT NONE ! -REAL, DIMENSION(IMICRO) :: ZRAR -REAL, DIMENSION(IMICRO) :: ZPECKQ_AUX ! q= f(RAR,T) in Saunders and Peck's equation -REAL, DIMENSION(IMICRO) :: ZSAUNIK_AUX ! constant B _______________________ -REAL, DIMENSION(IMICRO) :: ZSAUNSK_AUX ! constant B _______________________ -REAL, DIMENSION(IMICRO) :: ZSAUNIM_AUX ! d_i exponent ____________________ -REAL, DIMENSION(IMICRO) :: ZSAUNIN_AUX ! v_g/s-v_i________________________ -REAL, DIMENSION(IMICRO) :: ZSAUNSM_AUX ! d_s exponent ____________________ -REAL, DIMENSION(IMICRO) :: ZSAUNSN_AUX ! v_g-v_s _________________________ -! - ZPECKQ_AUX(:) = 0. -! -! region positive : Mansell et al., 2005 - WHERE (GELEC(:,4) .AND. ZRAR(:) > ZRAR_CRIT(:)) - ZPECKQ_AUX(:) = 6.74 * (ZRAR(:) - ZRAR_CRIT(:)) * 1.E-15 - ZPECKQ_AUX(:) = MAX(0., ZPECKQ_AUX(:)) - ENDWHERE +REAL, DIMENSION(:), INTENT(IN) :: ZRAR +REAL, DIMENSION(:), INTENT(INOUT) :: ZDQRAR_AUX ! q= f(RAR,T) in Saunders and + ! Peck's equation ! -! region S7 negative : Mansell et al. 2005 - WHERE (GELEC(:,4) .AND. ZRAR(:) < ZRAR_CRIT(:)) - ZPECKQ_AUX(:) = 3.9 * (ZRAR_CRIT(:) - 0.1) * & - (4. * ((ZRAR(:) - (ZRAR_CRIT(:) + 0.1) / 2.) / & - (ZRAR_CRIT(:) - 0.1))**2 - 1.) * 1.E-15 - ZPECKQ_AUX(:) = MIN(0., ZPECKQ_AUX(:)) - ENDWHERE + ZDQRAR_AUX(:) = 0. ! - WHERE (ZPECKQ_AUX(:) > 0.) - ZSAUNIK_AUX(:) = XIKP - ZSAUNIM_AUX(:) = XIMP - ZSAUNIN_AUX(:) = XINP - ZSAUNSK_AUX(:) = XSKP - ZSAUNSM_AUX(:) = XSMP - ZSAUNSN_AUX(:) = XSNP - ENDWHERE +! positive region : Mansell et al., 2005 + WHERE (GELEC(:,4) .AND. ZRAR(:) > ZRAR_CRIT(:)) + ZDQRAR_AUX(:) = MAX(0., 6.74 * (ZRAR(:) - ZRAR_CRIT(:)) * 1.E-15) + ENDWHERE ! - WHERE (ZPECKQ_AUX(:) < 0.) - ZSAUNIK_AUX(:) = XIKN - ZSAUNIM_AUX(:) = XIMN - ZSAUNIN_AUX(:) = XINN - ZSAUNSK_AUX(:) = XSKN - ZSAUNSM_AUX(:) = XSMN - ZSAUNSN_AUX(:) = XSNN - ENDWHERE +! negative region : Mansell et al. 2005 + WHERE (GELEC(:,4) .AND. ZRAR(:) < ZRAR_CRIT(:)) + ZDQRAR_AUX(:) = MIN(0., 3.9 * (ZRAR_CRIT(:) - 0.1) * & + (4.0 * ((ZRAR(:) - (ZRAR_CRIT(:) + 0.1) / 2.) / & + (ZRAR_CRIT(:) - 0.1))**2 - 1.) * 1.E-15) + ENDWHERE ! END SUBROUTINE ELEC_INI_NI_SAP98 ! !------------------------------------------------------------------------------- ! - SUBROUTINE ELEC_INI_NI_BSMP1(ZRAR, ZPECKQ_AUX, ZSAUNIK_AUX, ZSAUNSK_AUX, & - ZSAUNIM_AUX, ZSAUNIN_AUX, ZSAUNSM_AUX, & - ZSAUNSN_AUX) + SUBROUTINE ELEC_INI_NI_SAUNQ(ZEW, ZDQLWC_AUX) ! IMPLICIT NONE ! -REAL, DIMENSION(IMICRO) :: ZRAR -REAL, DIMENSION(IMICRO) :: ZPECKQ_AUX ! q= f(RAR,T) in Saunders and Peck's equation -REAL, DIMENSION(IMICRO) :: ZSAUNIK_AUX ! constant B _______________________ -REAL, DIMENSION(IMICRO) :: ZSAUNSK_AUX ! constant B _______________________ -REAL, DIMENSION(IMICRO) :: ZSAUNIM_AUX ! d_i exponent ____________________ -REAL, DIMENSION(IMICRO) :: ZSAUNIN_AUX ! v_g/s-v_i________________________ -REAL, DIMENSION(IMICRO) :: ZSAUNSM_AUX ! d_s exponent ____________________ -REAL, DIMENSION(IMICRO) :: ZSAUNSN_AUX ! v_g-v_s _________________________ -! -! region S4 : positive - WHERE (GELEC(:,4) .AND. ZRAR(:) > ZRAR_CRIT(:) .AND. & - ZZT(:) <= (XTT - 7.35) .AND. ZZT(:) >= (XTT - 23.74)) - ZPECKQ_AUX(:) = MAX(0.,(6.74 * ZRAR(:) + 1.36 * (ZZT(:) - XTT) + 10.05)*1.E-15) - ENDWHERE -! -! region S1 : positive --> linear interpolation - WHERE (GELEC(:,4) .AND. ZRAR(:) > ZRAR_CRIT(:) .AND. & - ZZT(:) > (XTT - 7.35) .AND. ZZT(:) < XTT) - ZPECKQ_AUX(:) = MAX(0., -(0.92 * ZRAR(:) + 0.007) * (ZZT(:) - XTT)*1.E-15) - ENDWHERE -! -! region S8 : positive - WHERE (GELEC(:,4) .AND. ZRAR(:) > ZRAR_CRIT(:) .AND. & - ZZT(:) < (XTT - 23.74) .AND. ZZT(:) >= (XTT - 40.0)) - ZPECKQ_AUX(:) = MAX(0., (6.74 * ZRAR(:) - 22.24) * 1.E-15) - ENDWHERE +REAL, DIMENSION(:), INTENT(IN) :: ZEW +REAL, DIMENSION(:), INTENT(INOUT) :: ZDQLWC_AUX ! q= f(RAR or EW,T) in Saunders + !... equation ! -! region S7 : negative - WHERE (GELEC(:,4) .AND. & - ZZT(:) <= (XTT - 7.35) .AND. ZZT(:) >= (XTT - 40.0) .AND. & - ZRAR(:) < ZRAR_CRIT(:) .AND. ZRAR(:) > 0.1) - ZPECKQ_AUX(:) = (3.02 - 10.59 * ZRAR(:) + 2.95 * ZRAR(:)**2) * 1.E-15 - ZPECKQ_AUX(:) = MIN( 0., ZPECKQ_AUX(:)) - ENDWHERE -! -! region S1 : negative --> linear interpolation - WHERE (GELEC(:,4) .AND. & - ZZT(:) > (XTT - 7.35) .AND. ZZT(:) < XTT .AND. & - ZRAR(:) < ZRAR_CRIT(:) .AND. ZRAR(:) > 0.1) - ZPECKQ_AUX(:) = (-0.41 + 1.44 * ZRAR(:) - 0.4 * ZRAR(:)**2) * & - (ZZT(:) - XTT) * 1.E-15 - ZPECKQ_AUX(:) = MIN( 0., ZPECKQ_AUX(:)) - ENDWHERE -! - WHERE (ZPECKQ_AUX(:) > 0.) - ZSAUNIK_AUX(:) = 4.92E13 - ZSAUNIM_AUX(:) = 3.76 - ZSAUNIN_AUX(:) = 2.5 - ZSAUNSK_AUX(:) = 52.8 - ZSAUNSM_AUX(:) = 0.44 - ZSAUNSN_AUX(:) = 2.5 - ENDWHERE -! - WHERE (ZPECKQ_AUX(:) < 0.) - ZSAUNIK_AUX(:) = 5.25E8 - ZSAUNIM_AUX(:) = 2.54 - ZSAUNIN_AUX(:) = 2.8 - ZSAUNSK_AUX(:) = 24. - ZSAUNSM_AUX(:) = 0.5 - ZSAUNSN_AUX(:) = 2.8 - ENDWHERE -! -END SUBROUTINE ELEC_INI_NI_BSMP1 -! -!------------------------------------------------------------------------------- -! - SUBROUTINE ELEC_INI_NI_BSMP2(ZRAR, ZPECKQ_AUX, ZSAUNIK_AUX, ZSAUNSK_AUX, & - ZSAUNIM_AUX, ZSAUNIN_AUX, ZSAUNSM_AUX, & - ZSAUNSN_AUX) +! For temperature lower than -30C and higher than -40C, value of q at -30C ! -IMPLICIT NONE + ALLOCATE ( IVEC1(IGSAUN) ) + ALLOCATE ( IVEC2(IGSAUN) ) + ALLOCATE ( ZVEC1(IGSAUN) ) + ALLOCATE ( ZVEC2(IGSAUN) ) + ALLOCATE ( ZDQLWC_OPT(IGSAUN) ) ! -REAL, DIMENSION(IMICRO) :: ZRAR -REAL, DIMENSION(IMICRO) :: ZPECKQ_AUX ! q= f(RAR,T) in Saunders and Peck's equation -REAL, DIMENSION(IMICRO) :: ZSAUNIK_AUX ! constant B _______________________ -REAL, DIMENSION(IMICRO) :: ZSAUNSK_AUX ! constant B _______________________ -REAL, DIMENSION(IMICRO) :: ZSAUNIM_AUX ! d_i exponent ____________________ -REAL, DIMENSION(IMICRO) :: ZSAUNIN_AUX ! v_g/s-v_i________________________ -REAL, DIMENSION(IMICRO) :: ZSAUNSM_AUX ! d_s exponent ____________________ -REAL, DIMENSION(IMICRO) :: ZSAUNSN_AUX ! v_g-v_s _________________________ + ZDQLWC_OPT(:) = 0. + IVEC1(:) = 0 + IVEC2(:) = 0 ! + ZVEC1(:) = PACK( ZZT(:), MASK=GSAUN(:)) + ZVEC2(:) = PACK( ZEW(:), MASK=GSAUN(:)) + ZDQLWC_OPT(:) = PACK( ZDQLWC_AUX(:), MASK=GSAUN ) ! -! region S4 : positive - WHERE (GELEC(:,4) .AND. ZRAR(:) > ZRAR_CRIT(:) .AND. & - ZZT(:) <= (XTT - 7.35) .AND. ZZT(:) >= (XTT - 23.74)) - ZPECKQ_AUX(:) = MAX(0., (6.74 * ZRAR(:) + 1.36 * (ZZT(:) - XTT) + 10.05) * 1.E-15) - ENDWHERE +! Temperature index (0C --> -40C) + ZVEC1(1:IGSAUN) = MAX( 1.00001, MIN( FLOAT(NIND_TEMP)-0.00001, & + (ZVEC1(1:IGSAUN) - XTT - 1.)/(-1.) ) ) + IVEC1(1:IGSAUN) = INT( ZVEC1(1:IGSAUN) ) + ZVEC1(1:IGSAUN) = ZVEC1(1:IGSAUN) - FLOAT(IVEC1(1:IGSAUN)) ! -! region S1 : positive --> linear interpolation - WHERE (GELEC(:,4) .AND. ZRAR(:) > ZRAR_CRIT(:) .AND. & - ZZT(:) > (XTT - 7.35) .AND. ZZT(:) < XTT) - ZPECKQ_AUX(:) = MAX(0., -(0.92 * ZRAR(:) + 0.007) * (ZZT(:) - XTT) * 1.E-15) - ENDWHERE +! LWC index (0.01 g.m^-3 --> 10 g.m^-3) + WHERE (ZVEC2(:) >= 0.01 .AND. ZVEC2(:) < 0.1) + ZVEC2(:) = MAX( 1.00001, MIN( FLOAT(10)-0.00001, & + ZVEC2(:) * 100. )) + IVEC2(:) = INT(ZVEC2(:)) + ZVEC2(:) = ZVEC2(:) - FLOAT(IVEC2(:)) + ENDWHERE ! -! region S8 : positive - WHERE (GELEC(:,4) .AND. ZRAR(:) > 3.3 .AND. & - ZZT(:) < (XTT - 23.74) .AND. ZZT(:) > (XTT - 40.0)) - ZPECKQ_AUX(:) = MAX(0., (6.74 * ZRAR(:) - 22.24) * 1.E-15) - ENDWHERE + WHERE (ZVEC2(:) >= 0.1 .AND. ZVEC2(:) < 1. .AND. IVEC2(:) == 0) + ZVEC2(:) = MAX( 10.00001, MIN( FLOAT(19)-0.00001, & + ZVEC2(:) * 10. + 9. ) ) + IVEC2(:) = INT(ZVEC2(:)) + ZVEC2(:) = ZVEC2(:) - FLOAT(IVEC2(:)) + ENDWHERE ! -! region S7 : negative - WHERE (GELEC(:,4) .AND. & - ZZT(:) <= (XTT - 7.35) .AND. ZZT(:) >= (XTT - 40.0) .AND. & - ZRAR(:) < ZRAR_CRIT(:) .AND. ZRAR(:) > 0.3 ) - ZPECKQ_AUX(:) = MIN(0., (3.02 - 10.59 * ZRAR(:) + 2.95 * ZRAR(:)**2) * 1.E-15) - ENDWHERE + WHERE ((ZVEC2(:) >= 1.) .AND. ZVEC2(:) <= 10.) + ZVEC2(:) = MAX( 19.00001, MIN( FLOAT(NIND_LWC)-0.00001, & + ZVEC2(:) + 18. ) ) + IVEC2(:) = INT(ZVEC2(:)) + ZVEC2(:) = ZVEC2(:) - FLOAT(IVEC2(:)) + ENDWHERE ! -! region S2 : negative - WHERE (GELEC(:,4) .AND. & - ZZT(:) <= (XTT - 7.35) .AND. ZZT(:) > (XTT - 16.0) .AND. & - ZRAR(:) > 0.078 .AND. ZRAR(:) < 0.42) - ZPECKQ_AUX(:) = MIN(0., (-104.8 * ZRAR(:) + 7.92) * 1.E-15) - ENDWHERE +! Interpolate XSAUNDER + ZDQLWC_OPT(:) = BI_LIN_INTP_V( XSAUNDER, IVEC2, IVEC1, ZVEC2, ZVEC1, & + IGSAUN ) + ZDQLWC_AUX(:) = UNPACK( ZDQLWC_OPT(:), MASK=GSAUN, FIELD=0.0 ) ! -! region S3 : negative - WHERE (GELEC(:,4) .AND. & - ZZT(:) <= (XTT - 7.35) .AND. ZZT(:) > (XTT - 16.0) .AND. & - ZRAR(:) > 0.42 .AND. ZRAR(:) < 0.66) - ZPECKQ_AUX(:) = MIN(0., (139.8 * ZRAR(:) - 92.64) * 1.E-15) - ENDWHERE + DEALLOCATE( IVEC1 ) + DEALLOCATE( IVEC2 ) + DEALLOCATE( ZVEC1 ) + DEALLOCATE( ZVEC2 ) + DEALLOCATE( ZDQLWC_OPT ) ! -! region S5 : positive - WHERE (GELEC(:,4) .AND. & - ZZT(:) < (XTT - 20.0) .AND. ZZT(:) > (XTT - 40.0) .AND. & - ZRAR(:) > 0.18 .AND. ZRAR(:) < 0.36) - ZPECKQ_AUX(:) = MAX(0., (680.6 * ZRAR(:) - 128.7) * 1.E-15) - ENDWHERE +END SUBROUTINE ELEC_INI_NI_SAUNQ ! -! region S6 : positive - WHERE (GELEC(:,4) .AND. & - ZZT(:) < (XTT - 20.0) .AND. ZZT(:) > (XTT - 40.0) .AND. & - ZRAR(:) > 0.36 .AND. ZRAR(:) < 0.48) - ZPECKQ_AUX(:) = MAX(0., (-966.74 * ZRAR(:) + 462.91) * 1.E-15) - ENDWHERE +!------------------------------------------------------------------------------- ! -! region S1 : negative --> linear interpolation of S3 - WHERE (GELEC(:,4) .AND. & - ZZT(:) > (XTT - 7.35) .AND. ZZT(:) < XTT .AND. & - ZRAR(:) < 0.66 .AND. ZRAR(:) > 0.42) - ZPECKQ_AUX(:) = MIN(0., (-19.02 * ZRAR(:) + 12.6) * (ZZT(:) - XTT) * 1.E-15) - ENDWHERE + SUBROUTINE ELEC_INI_NI_TAKAH(ZEW, ZDQTAKA_AUX, XTAKA_AUX) ! -! region S1 : negative --> linear interpolation of S2 - WHERE (GELEC(:,4) .AND. & - ZZT(:) > (XTT - 7.35) .AND. ZZT(:) < XTT .AND. & - ZRAR(:) < 0.42 .AND. ZRAR(:) > 0.078) - ZPECKQ_AUX(:) = MIN(0., (14.27 * ZRAR(:) - 1.08) * (ZZT(:) - XTT) * 1.E-15) - ENDWHERE +IMPLICIT NONE ! - WHERE (ZPECKQ_AUX(:) > 0.) - ZSAUNIK_AUX(:) = 4.92E13 - ZSAUNIM_AUX(:) = 3.76 - ZSAUNIN_AUX(:) = 2.5 - ZSAUNSK_AUX(:) = 52.8 - ZSAUNSM_AUX(:) = 0.44 - ZSAUNSN_AUX(:) = 2.5 - ENDWHERE +REAL, DIMENSION(IMICRO) :: ZEW +REAL, DIMENSION(IMICRO) :: ZDQTAKA_AUX +REAL, DIMENSION(NIND_LWC+1,NIND_TEMP+1) :: XTAKA_AUX !XMANSELL or XTAKA_TM) ! - WHERE (ZPECKQ_AUX(:) < 0.) - ZSAUNIK_AUX(:) = 5.25E8 - ZSAUNIM_AUX(:) = 2.54 - ZSAUNIN_AUX(:) = 2.8 - ZSAUNSK_AUX(:) = 24. - ZSAUNSM_AUX(:) = 0.5 - ZSAUNSN_AUX(:) = 2.8 - ENDWHERE ! -END SUBROUTINE ELEC_INI_NI_BSMP2 + ALLOCATE ( IVEC1(IGTAKA) ) + ALLOCATE ( IVEC2(IGTAKA) ) + ALLOCATE ( ZVEC1(IGTAKA) ) + ALLOCATE ( ZVEC2(IGTAKA) ) + ALLOCATE ( ZDQTAKA_OPT(IGTAKA) ) + + ZDQTAKA_OPT(:) = 0. + IVEC1(:) = 0 + IVEC2(:) = 0 ! -!------------------------------------------------------------------------------- -! - SUBROUTINE ELEC_INI_NI_TERAR(ZRAR, ZBTRMQ_AUX) + ZVEC1(:) = PACK( ZZT(:), MASK=GTAKA ) + ZVEC2(:) = PACK( ZEW(:), MASK=GTAKA ) + ZDQTAKA_OPT(:) = PACK( ZDQTAKA_AUX(:), MASK=GTAKA ) ! -IMPLICIT NONE +! Temperature index (0C --> -40C) + ZVEC1(1:IGTAKA) = MAX( 1.00001, MIN( FLOAT(NIND_TEMP)-0.00001, & + (ZVEC1(1:IGTAKA) - XTT - 1.)/(-1.) ) ) + IVEC1(1:IGTAKA) = INT( ZVEC1(1:IGTAKA) ) + ZVEC1(1:IGTAKA) = ZVEC1(1:IGTAKA) - FLOAT(IVEC1(1:IGTAKA)) ! -REAL, DIMENSION(IMICRO) :: ZRAR -REAL, DIMENSION(IMICRO) :: ZBTRMQ_AUX -! -! Tsenova and Mitzeva, Eq. 1: > 0 - WHERE (GELEC(:,4) .AND. ZZT(:) > (XTT - 10.) .AND. ZRAR(:) <= 12.8) - ZBTRMQ_AUX(:) = 18.37 * ZRAR(:) - 1.82 * ZRAR(:)**2 & - + 6.E-2 * ZRAR(:)**3 & - - 4.E-3 * (ZZT(:) - XTT)**3 * ZRAR(:) & - - 2.581 * (ZZT(:) - XTT) & - - 4.E-4 * (ZZT(:) - XTT)**3 * ZRAR(:)**3 & - + 6.E-3 * (ZZT(:) - XTT)**3 * ZRAR(:)**2 & - + 0.150 * (ZZT(:) - XTT)**2 & - + 6.E-3 * (ZZT(:) - XTT) * ZRAR(:)**3 & - - 0.530 * (ZZT(:) - XTT) * ZRAR(:) - 8.506 - ZBTRMQ_AUX(:) = MAX(0., ZBTRMQ_AUX(:) * 1.E-15) - ENDWHERE +! LWC index (0.01 g.m^-3 --> 10 g.m^-3) + WHERE (ZVEC2(:) >= 0.01 .AND. ZVEC2(:) < 0.1) + ZVEC2(:) = MAX( 1.00001, MIN( FLOAT(10)-0.00001, & + ZVEC2(:) * 100. )) + IVEC2(:) = INT(ZVEC2(:)) + ZVEC2(:) = ZVEC2(:) - FLOAT(IVEC2(:)) + ENDWHERE ! -! Eq. 2: > 0 - WHERE (GELEC(:,4) .AND. ZZT(:) > (XTT - 10.) .AND. & - ZRAR(:) > 12.8 .AND. ZRAR(:) <= 64.) - ZBTRMQ_AUX(:) = 4.17900 * (ZZT(:) - XTT) & - - 7.E-5 * (ZZT(:) - XTT)**2 * ZRAR(:)**2 & - + 1.E-2 * ZRAR(:)**2 & - - 0.170 * (ZZT(:) - XTT) * ZRAR(:) & - - 0.930 * ZRAR(:) & - + 2.E-3 * (ZZT(:) - XTT) * ZRAR(:)**2 & - + 1.E-6 * (ZZT(:) - XTT)**2 * ZRAR(:)**3 & - - 7.E-5 * ZRAR(:)**3 + 50.84454 - ZBTRMQ_AUX(:) = MAX(0., ZBTRMQ_AUX(:) * 1.E-15) - ENDWHERE + WHERE (ZVEC2(:) >= 0.1 .AND. ZVEC2(:) < 1. .AND. IVEC2(:) == 0) + ZVEC2(:) = MAX( 10.00001, MIN( FLOAT(19)-0.00001, & + ZVEC2(:) * 10. + 9. ) ) + IVEC2(:) = INT(ZVEC2(:)) + ZVEC2(:) = ZVEC2(:) - FLOAT(IVEC2(:)) + ENDWHERE ! -! Eq. 8: > 0 - WHERE (GELEC(:,4) .AND. ZRAR(:) <= 3.2 .AND. & - ZZT(:) <= (XTT - 10.) .AND. ZZT(:) >= (XTT - 40.)) - ZBTRMQ_AUX(:) = - 3.3515 * (ZZT(:) - XTT) & - + 1.5000 * (ZZT(:) - XTT) * ZRAR(:)**2 & - + 63.98 * ZRAR(:) & - + 3.E-2 * (ZZT(:) - XTT)**2 * ZRAR(:)**3 & - - 7.E-4 * (ZZT(:) - XTT)**3 & - + 2.57 * (ZZT(:) - XTT) * ZRAR(:) & - + 2.E-2 * (ZZT(:) - XTT)**2 * ZRAR(:) & - + 1.E-3 * (ZZT(:) - XTT)**3 * ZRAR(:)**3 & - - 2.E-3 * (ZZT(:) - XTT)**3 * ZRAR(:)**2 & - + 0.130 * (ZZT(:) - XTT) * ZRAR(:)**3 & - - 0.107 * (ZZT(:) - XTT)**2 - 24.5715 - ZBTRMQ_AUX(:) = MAX(0., ZBTRMQ_AUX(:) * 1.E-15) - ENDWHERE + WHERE (ZVEC2(:) >= 1. .AND. ZVEC2(:) <= 10.) + ZVEC2(:) = MAX( 19.00001, MIN( FLOAT(NIND_LWC)-0.00001, & + ZVEC2(:) + 18. ) ) + IVEC2(:) = INT(ZVEC2(:)) + ZVEC2(:) = ZVEC2(:) - FLOAT(IVEC2(:)) + ENDWHERE ! -! Eq. 9: < 0 - WHERE (GELEC(:,4) .AND. & - ZZT(:) <= (XTT - 10.) .AND. ZZT(:) >= (XTT - 40.) .AND. & - ZRAR(:) > 3.2 .AND. ZRAR(:) <= 25.6) - ZBTRMQ_AUX(:) = - 2.E-1 * (ZZT(:) - XTT) * ZRAR(:) & - + 5.E-4 * (ZZT(:) - XTT) * ZRAR(:)**3 & - + 0.011 * (ZZT(:) - XTT)**3 & - + 19.20 * (ZZT(:) - XTT) & - + 0.805 * (ZZT(:) - XTT)**2 & - - 10.42 * ZRAR(:) & - + 0.240 * ZRAR(:)**2 & - + 1.E-2 * ZRAR(:)**3 + 167.9278 - ZBTRMQ_AUX(:) = MIN(0., ZBTRMQ_AUX(:) * 1.E-15) - ENDWHERE +! Interpolate XMANSELL or XTAKA_TM + ZDQTAKA_OPT(:) = BI_LIN_INTP_V( XTAKA_AUX, IVEC2, IVEC1, ZVEC2, ZVEC1, & + IGTAKA ) + ZDQTAKA_AUX(:) = UNPACK( ZDQTAKA_OPT(:), MASK=GTAKA, FIELD=0.0 ) ! -! Eq. 10: > 0 - WHERE (GELEC(:,4) .AND. & - ZZT(:) <= (XTT - 10.) .AND. ZZT(:) >= (XTT - 40.) .AND. & - ZRAR(:) > 25.6 .AND. ZRAR(:) <= 64.) - ZBTRMQ_AUX(:) = 4.213 * (ZZT(:) - XTT) & - - 1.E-1 * (ZZT(:) - XTT) * ZRAR(:) & - + 1.E-3 * (ZZT(:) - XTT) * ZRAR(:) **2 & - + 5.E-4 * (ZZT(:) - XTT)**2 * ZRAR(:) + 40.9642 - ZBTRMQ_AUX(:) = MAX(0., ZBTRMQ_AUX(:) * 1.E-15) - ENDWHERE + DEALLOCATE( IVEC1 ) + DEALLOCATE( IVEC2 ) + DEALLOCATE( ZVEC1 ) + DEALLOCATE( ZVEC2 ) + DEALLOCATE( ZDQTAKA_OPT ) ! -END SUBROUTINE ELEC_INI_NI_TERAR +END SUBROUTINE ELEC_INI_NI_TAKAH ! !------------------------------------------------------------------------------- ! @@ -5505,8 +5197,8 @@ IMPLICIT NONE IF (CNI_CHARGING == 'HELFA') THEN ZWQ1(:,7) = 0. ! - WHERE (ZRIS(:) > XRTMIN_ELEC(4) .AND. ZCIT(:) > 0.0 .AND. & - ZRIT(:) > XRTMIN_ELEC(4) .AND. & + WHERE (ZRIS(:) > XRTMIN_ELEC(4) .AND. ZCIT(:) > 0.0 .AND. & + ZRIT(:) > XRTMIN_ELEC(4) .AND. & ZRST(:) > XRTMIN_ELEC(5)) ZWQ1(:,7) = XFQIAGGSBH * ZZW(:) * ZCIT(:) / ZRIT(:) ZWQ1(:,7) = ZWQ1(:,7) * (1. - ZCOLIS(:)) / ZCOLIS(:) @@ -5524,15 +5216,14 @@ IMPLICIT NONE ! IF (CNI_CHARGING == 'GARDI') THEN ZWQ1(:,7) = 0. -! WHERE (GELEC(:,1) .AND. ZDELTALWC(:) > 0.) - WHERE (GELEC(:,1) .AND. ZDELTALWC(:) > 0. .AND. & + WHERE (GELEC(:,1) .AND. ZDELTALWC(:) > 0. .AND. & ZRIS(:) > ZRSMIN_ELEC(4) .AND. ZRSS(:) > ZRSMIN_ELEC(5)) ZWQ1(:,7) = XFQIAGGSBG * (1 - ZCOLIS(:)) * & ZRHODREF(:)**(-4. * XCEXVT + 4. / XBI) * & ZCIT(:)**(1 - 4. / XBI) * & ZDELTALWC(:) * ZFT(:) * & ZLBDAS(:)**(XCXS - 2. - 4. * XDS) * & - (XAI * MOMG(XALPHAI, XNUI, XBI) / & + (XAI * MOMG(XALPHAI, XNUI, XBI) / & ZRIT(:))**(-4 / XBI) ! ! Dq is limited to XLIM_NI_IS @@ -5540,11 +5231,9 @@ IMPLICIT NONE (1 - ZCOLIS(:)) / (ZRIT(:) * ZCOLIS(:)) ZWQ1(:,7) = SIGN( MIN( ABS(ZLIMIT(:)), ABS(ZWQ1(:,7)) ), ZWQ1(:,7) ) ZWQ1(:,7) = ZWQ1(:,7) / ZRHODREF(:) - ELSEWHERE - ZWQ1(:,7) = 0. ENDWHERE ! -! For temperatures lower than -30°C --> linear interpolation +! For temperatures lower than -30C --> linear interpolation WHERE (ZWQ1(:,7) /= 0. .AND. ZZT(:) < (XTT-30.) .AND. ZZT(:) >= (XTT-40.)) ZWQ1(:,7) = ZWQ1(:,7) * (ZZT(:) - XTT + 40.) / 10. ENDWHERE @@ -5553,23 +5242,21 @@ IMPLICIT NONE ZQIS(:) = ZQIS(:) - ZWQ1(:,7) END IF ! -!* 4. Charging process following Saunders et al. (1991) +!* 4. Charging process based on EW: SAUN1/SAUN2, TEEWC +!* following Saunders et al. (1991), Takahashi via Tsenova and Mitzeva (2009) ! - IF (CNI_CHARGING == 'SAUN1' .OR. CNI_CHARGING == 'SAUN2') THEN + IF (CNI_CHARGING == 'SAUN1' .OR. CNI_CHARGING == 'SAUN2' .OR. & + CNI_CHARGING == 'TEEWC') THEN ZWQ1(:,7) = 0. ! -! WHERE (GELEC(:,1) .AND. ZRIS(:) > ZRSMIN_ELEC(4) .AND. ZSAUNQ(:) /= 0.) - WHERE (GELEC(:,1) .AND. ZSAUNQ(:) /= 0. .AND. & - ZRIS(:) > ZRSMIN_ELEC(4) .AND. ZRSS(:) > ZRSMIN_ELEC(5)) - ZWQ1(:,7) = XFQIAGGSBS * (1 - ZCOLIS(:)) * & - (ZRHO00 / ZRHODREF(:))**((1 + ZSAUNIN(:)) * XCEXVT) * & - ZSAUNIK(:) * ZSAUNQ(:) * & - XCS**(1. + ZSAUNIN(:)) * ZCIT(:)**(1 - ZSAUNIM(:) / XBI) * & - MOMG(XALPHAS, XNUS, 2. + XDS * (1 + ZSAUNIN(:))) * & - ZLBDAS(:)**(XCXS - 2.- XDS * (1. + ZSAUNIN(:))) * & - MOMG(XALPHAI, XNUI, ZSAUNIM(:)) * & - (XAI * MOMG(XALPHAI, XNUI, XBI) / & - (ZRHODREF * ZRIT(:)))**(-ZSAUNIM(:) / XBI) + WHERE (GELEC(:,1) .AND. ZRIS(:) > ZRSMIN_ELEC(4) .AND. & + ZRSS(:) > ZRSMIN_ELEC(5) .AND. ZDQLWC(:) /= 0.) + ZWQ1(:,7) = XFQIAGGSBS * (1 - ZCOLIS(:)) * & + ZRHOCOR(:)**(1 + ZSAUNIN(:)) * & + ZFQIAGGS(:) * ZDQLWC(:) * & + ZCIT(:)**(1 - ZSAUNIM(:) / XBI) * & + ZLBDAS(:)**(XCXS - 2.- XDS * (1. + ZSAUNIN(:))) * & + (ZRHODREF(:) * ZRIT(:) / XAIGAMMABI)**(ZSAUNIM(:) / XBI) ! ! Dq is limited to XLIM_NI_IS ZLIMIT(:) = XLIM_NI_IS * ZZW(:) * ZCIT(:) * & @@ -5578,7 +5265,7 @@ IMPLICIT NONE ZWQ1(:,7) = ZWQ1(:,7) / ZRHODREF(:) ENDWHERE ! -! For temperatures lower than -30°C --> linear interpolation +! For temperatures lower than -30C --> linear interpolation WHERE (ZWQ1(:,7) /= 0. .AND. ZZT(:) < (XTT-30.) .AND. ZZT(:) >= (XTT-40.)) ZWQ1(:,7) = ZWQ1(:,7) * (ZZT(:) - XTT + 40.) / 10. ENDWHERE @@ -5588,24 +5275,36 @@ IMPLICIT NONE ! END IF ! -!* 5. Charging process following Saunders and Peck (1998) or -!* Brooks et al., 1997 (with/out anomalies) +!* 5. Charging process based on RAR (=EW*V): SAP98, BSMP1/BSMP2, TERAR +!* following Saunders and Peck (1998) or +!* Brooks et al., 1997 (with/out anomalies) or +!* Takahashi via Tsenova and Mitzeva (2011) +! + IF (CNI_CHARGING == 'SAP98' .OR. CNI_CHARGING == 'BSMP1' .OR. & + CNI_CHARGING == 'BSMP2' .OR. CNI_CHARGING == 'TERAR') THEN +! + IF (CNI_CHARGING /= 'TERAR') THEN + ZFQIAGGS(:) = XFQIAGGSP + WHERE (ZDQRAR_IS(:) < 0.) + ZFQIAGGS(:) = XFQIAGGSN + ENDWHERE + ELSE + ZFQIAGGS(:) = XFQIAGGSP_TAK + WHERE (ZDQRAR_IS(:) <0.) + ZFQIAGGS(:) = XFQIAGGSN_TAK + ENDWHERE + ENDIF ! - IF (CNI_CHARGING == 'SAP98'.OR. CNI_CHARGING == 'BSMP1' .OR. & - CNI_CHARGING == 'BSMP2') THEN ZWQ1(:,7) = 0. ! - WHERE (GELEC(:,1) .AND. ZPECKQ_IS(:) /= 0. .AND. & - ZRIS(:) > ZRSMIN_ELEC(4) .AND. ZRSS(:) > ZRSMIN_ELEC(5)) - ZWQ1(:,7) = XFQIAGGSBS * (1 - ZCOLIS(:)) * & - (ZRHO00 / ZRHODREF(:))**((1 + ZSAUNIN_IS(:)) * XCEXVT) * & - ZSAUNIK_IS(:) * ZPECKQ_IS(:) * & - XCS**(1. + ZSAUNIN_IS(:)) * ZCIT(:)**(1 - ZSAUNIM_IS(:) / XBI) * & - MOMG(XALPHAS, XNUS, 2. + XDS * (1 + ZSAUNIN_IS(:))) * & - ZLBDAS(:)**(XCXS - 2.- XDS * (1. + ZSAUNIN_IS(:))) * & - MOMG(XALPHAI, XNUI, ZSAUNIM_IS(:)) * & - (XAI * MOMG(XALPHAI, XNUI, XBI) / & - (ZRHODREF * ZRIT(:)))**(-ZSAUNIM_IS(:) / XBI) + WHERE (GELEC(:,1) .AND. ZDQRAR_IS(:) /= 0. .AND. & + ZRIS(:) > ZRSMIN_ELEC(4) .AND. ZRSS(:) > ZRSMIN_ELEC(5)) + ZWQ1(:,7) = XFQIAGGSBS * (1 - ZCOLIS(:)) * & + ZRHOCOR(:)**(1 + ZSAUNIN_IS(:)) * & + ZFQIAGGS(:) * ZDQRAR_IS(:) * & + ZCIT(:)**(1 - ZSAUNIM_IS(:) / XBI) * & + ZLBDAS(:)**(XCXS - 2.- XDS * (1. + ZSAUNIN_IS(:))) * & + (ZRHODREF(:) * ZRIT(:)/XAIGAMMABI)**(ZSAUNIM_IS(:) / XBI) ! ! Dq is limited to XLIM_NI_IS ZLIMIT(:) = XLIM_NI_IS * ZZW(:) * ZCIT(:) * & @@ -5614,7 +5313,7 @@ IMPLICIT NONE ZWQ1(:,7) = ZWQ1(:,7) / ZRHODREF(:) ENDWHERE ! -! For temperatures lower than -30°C --> linear interpolation +! For temperatures lower than -30C --> linear interpolation WHERE (ZWQ1(:,7) /= 0. .AND. ZZT(:) < (XTT-30.) .AND. ZZT(:) >= (XTT-40.)) ZWQ1(:,7) = ZWQ1(:,7) * (ZZT(:) - XTT + 40.) / 10. ENDWHERE @@ -5629,15 +5328,14 @@ IMPLICIT NONE ZWQ1(:,7) = 0. ZLIMIT(:) = 0. ! - WHERE (GELEC(:,1) .AND. ZRIS(:) > ZRSMIN_ELEC(4) .AND. ZRSS(:) > ZRSMIN_ELEC(5)) - ZWQ1(:,7) = XFQIAGGSBT1 * (1.0 - ZCOLIS(:)) * & - ZRHODREF(:)**(-XCEXVT) * & - ZCIT(:) * ZLBDAS(:)**XCXS * & - ZDQTAKA(:) * & - MIN( XFQIAGGSBT2 / (ZLBDAS(:)**(2. + XDS)) , & - XFQIAGGSBT3 * ZRHODREF(:)**(2. / XBI - XCEXVT) * & - ZRIT(:)**(2. / XBI) / & - (ZCIT(:)**(2. / XBI) * ZLBDAS(:)**(2. + 2. * XDS))) + WHERE (GELEC(:,1) .AND. ZRIS(:) > ZRSMIN_ELEC(4) .AND. & + ZRSS(:) > ZRSMIN_ELEC(5) .AND. ZDQLWC(:) /= 0.) + ZWQ1(:,7) = XFQIAGGSBT1 * (1.0 - ZCOLIS(:)) * ZRHOCOR(:) * & + ZCIT(:) * ZLBDAS(:)**XCXS * ZDQLWC(:) * & + MIN( XFQIAGGSBT2 / (ZLBDAS(:)**(2. + XDS)) , & + XFQIAGGSBT3 * ZRHOCOR(:) * ZRHODREF(:)**(2./XBI) * & + ZRIT(:)**(2. / XBI) / & + (ZCIT(:)**(2. / XBI) * ZLBDAS(:)**(2. + 2. * XDS))) ! ! Dq is limited to XLIM_NI_IS ZLIMIT(:) = XLIM_NI_IS * ZZW(:) * ZCIT(:) * & @@ -5646,7 +5344,7 @@ IMPLICIT NONE ZWQ1(:,7) = ZWQ1(:,7) / ZRHODREF(:) ENDWHERE ! -! For temperatures lower than -30°C --> linear interpolation +! For temperatures lower than -30C --> linear interpolation WHERE (ZWQ1(:,7) /= 0. .AND. ZZT(:) < (XTT-30.) .AND. ZZT(:) >= (XTT-40.)) ZWQ1(:,7) = ZWQ1(:,7) * (ZZT(:) - XTT + 40.) / 10. ENDWHERE @@ -5656,111 +5354,6 @@ IMPLICIT NONE END IF ! ! -!* 6. Charging process following Tsenova and Mitzeva (2009) -!* for EW Takahashi -! - IF (CNI_CHARGING == 'TEEWC') THEN - ZWQ1(:,7) = 0. -! - WHERE (GELEC(:,1) .AND. ZBTRMQ(:) > 0. .AND. & - ZRIS(:) > ZRSMIN_ELEC(4) .AND. ZRSS(:) > ZRSMIN_ELEC(5)) - ZWQ1(:,7) = XFQIAGGSBS * (1 - ZCOLIS(:)) * & - (ZRHO00 / ZRHODREF(:))**((1 + 2.5 ) * XCEXVT) * & - 6.1E12 * ZBTRMQ(:) * & - XCS**(1. + 2.5 ) * ZCIT(:)**(1 - 3.76 / XBI) * & - MOMG(XALPHAS, XNUS, 2. + XDS * (1 + 2.5 )) * & - ZLBDAS(:)**(XCXS - 2.- XDS * (1. + 2.5 )) * & - MOMG(XALPHAI, XNUI, 3.76 ) * & - (XAI * MOMG(XALPHAI, XNUI, XBI) / & - (ZRHODREF * ZRIT(:)))**(-3.76 / XBI) -! -! Dq is limited to XLIM_NI_IS - ZLIMIT(:) = XLIM_NI_IS * ZZW(:) * ZCIT(:) * & - (1 - ZCOLIS(:)) / (ZRIT(:) * ZCOLIS(:)) - ZWQ1(:,7) = SIGN( MIN( ABS(ZLIMIT(:)), ABS(ZWQ1(:,7)) ), ZWQ1(:,7) ) - ZWQ1(:,7) = ZWQ1(:,7) / ZRHODREF(:) - ENDWHERE -! - WHERE (GELEC(:,1) .AND. ZBTRMQ(:) > 0. .AND. & - ZRIS(:) > ZRSMIN_ELEC(4) .AND. ZRSS(:) > ZRSMIN_ELEC(5)) - ZWQ1(:,7) = XFQIAGGSBS * (1 - ZCOLIS(:)) * & - (ZRHO00 / ZRHODREF(:))**((1 + 2.8 ) * XCEXVT) * & - 4.3E7 * ZBTRMQ(:) * & - XCS**(1. + 2.8 ) * ZCIT(:)**(1 - 2.54 / XBI) * & - MOMG(XALPHAS, XNUS, 2. + XDS * (1 + 2.8 )) * & - ZLBDAS(:)**(XCXS - 2.- XDS * (1. + 2.8 )) * & - MOMG(XALPHAI, XNUI, 2.54 ) * & - (XAI * MOMG(XALPHAI, XNUI, XBI) / & - (ZRHODREF * ZRIT(:)))**(-2.54 / XBI) -! -! Dq is limited to XLIM_NI_IS - ZLIMIT(:) = XLIM_NI_IS * ZZW(:) * ZCIT(:) * & - (1 - ZCOLIS(:)) / (ZRIT(:) * ZCOLIS(:)) - ZWQ1(:,7) = SIGN( MIN( ABS(ZLIMIT(:)), ABS(ZWQ1(:,7)) ), ZWQ1(:,7) ) - ZWQ1(:,7) = ZWQ1(:,7) / ZRHODREF(:) - ENDWHERE -! -! For temperatures lower than -30°C --> linear interpolation - WHERE (ZWQ1(:,7) /= 0. .AND. ZZT(:) < (XTT-30.) .AND. ZZT(:) >= (XTT-40.)) - ZWQ1(:,7) = ZWQ1(:,7) * (ZZT(:) - XTT + 40.) / 10. - ENDWHERE - ZQSS(:) = ZQSS(:) + ZWQ1(:,7) - ZQIS(:) = ZQIS(:) - ZWQ1(:,7) - END IF -! -! -!* 7. Charging process following Tsenova and Mitzeva (2009) -!* for RAR Takahashi -! - IF (CNI_CHARGING == 'TERAR') THEN - ZWQ1(:,7) = 0. -! - WHERE (GELEC(:,1) .AND. ZBTRMQ_IS(:) > 0. .AND. & - ZRIS(:) > ZRSMIN_ELEC(4) .AND. ZRSS(:) > ZRSMIN_ELEC(5)) - ZWQ1(:,7) = XFQIAGGSBS * (1 - ZCOLIS(:)) * & - (ZRHO00 / ZRHODREF(:))**((1 + 2.5 ) * XCEXVT) * & - 6.1E12 * ZBTRMQ_IS(:) * & - XCS**(1. + 2.5 ) * ZCIT(:)**(1 - 3.76 / XBI) * & - MOMG(XALPHAS, XNUS, 2. + XDS * (1 + 2.5 )) * & - ZLBDAS(:)**(XCXS - 2.- XDS * (1. + 2.5 )) * & - MOMG(XALPHAI, XNUI, 3.76 ) * & - (XAI * MOMG(XALPHAI, XNUI, XBI) / & - (ZRHODREF * ZRIT(:)))**(-3.76 / XBI) -! -! Dq is limited to XLIM_NI_IS - ZLIMIT(:) = XLIM_NI_IS * ZZW(:) * ZCIT(:) * & - (1 - ZCOLIS(:)) / (ZRIT(:) * ZCOLIS(:)) - ZWQ1(:,7) = SIGN( MIN( ABS(ZLIMIT(:)), ABS(ZWQ1(:,7)) ), ZWQ1(:,7) ) - ZWQ1(:,7) = ZWQ1(:,7) / ZRHODREF(:) - ENDWHERE -! - WHERE (GELEC(:,1) .AND. ZBTRMQ_IS(:) < 0. .AND. & - ZRIS(:) > ZRSMIN_ELEC(4) .AND. ZRSS(:) > ZRSMIN_ELEC(5)) - ZWQ1(:,7) = XFQIAGGSBS * (1 - ZCOLIS(:)) * & - (ZRHO00 / ZRHODREF(:))**((1 + 2.8 ) * XCEXVT) * & - 4.3E7 * ZBTRMQ_IS(:) * & - XCS**(1. + 2.8 ) * ZCIT(:)**(1 - 2.54 / XBI) * & - MOMG(XALPHAS, XNUS, 2. + XDS * (1 + 2.8 )) * & - ZLBDAS(:)**(XCXS - 2.- XDS * (1. + 2.8 )) * & - MOMG(XALPHAI, XNUI, 2.54 ) * & - (XAI * MOMG(XALPHAI, XNUI, XBI) / & - (ZRHODREF * ZRIT(:)))**(-2.54 / XBI) -! -! Dq is limited to XLIM_NI_IS - ZLIMIT(:) = XLIM_NI_IS * ZZW(:) * ZCIT(:) * & - (1 - ZCOLIS(:)) / (ZRIT(:) * ZCOLIS(:)) - ZWQ1(:,7) = SIGN( MIN( ABS(ZLIMIT(:)), ABS(ZWQ1(:,7)) ), ZWQ1(:,7) ) - ZWQ1(:,7) = ZWQ1(:,7) / ZRHODREF(:) - ENDWHERE -! -! For temperatures lower than -30°C --> linear interpolation - WHERE (ZWQ1(:,7) /= 0. .AND. ZZT(:) < (XTT-30.) .AND. ZZT(:) >= (XTT-40.)) - ZWQ1(:,7) = ZWQ1(:,7) * (ZZT(:) - XTT + 40.) / 10. - ENDWHERE - ZQSS(:) = ZQSS(:) + ZWQ1(:,7) - ZQIS(:) = ZQIS(:) - ZWQ1(:,7) - END IF -! END SUBROUTINE ELEC_IAGGS_B ! !------------------------------------------------------------------------------- @@ -5813,7 +5406,7 @@ IMPLICIT NONE ZCIT(:)**(1 - 4. / XBI) * & ZDELTALWC(:) * ZFT(:) * & ZLBDAG(:)**(XCXG - 2. - 4. * XDG) * & - (XAI * MOMG(XALPHAI, XNUI, XBI) / & + (XAI * MOMG(XALPHAI, XNUI, XBI) / & ZRIT(:))**(-4 / XBI) ! ! Dq limited to XLIM_NI_IG @@ -5823,7 +5416,7 @@ IMPLICIT NONE ZWQ1(:,3) = ZWQ1(:,3) / ZRHODREF(:) ENDWHERE ! -! For temperatures lower than -30°C --> linear interpolation +! For temperatures lower than -30C --> linear interpolation ! WHERE (ZWQ1(:,3) /= 0. .AND. ZZT(:) < (XTT-30.) .AND. ZZT(:) >= (XTT-40.)) ZWQ1(:,3) = ZWQ1(:,3) * (ZZT(:) - XTT + 40.) / 10. @@ -5832,22 +5425,21 @@ IMPLICIT NONE END IF ! ! -!* 2.3 Saunders et al. (1991) +!* 2.3 Charging process based on EW: SAUN1/SAUN2, TEEWC +!* following Saunders et al. (1991), Takahashi via Tsenova and Mitzeva(2009) ! - IF (CNI_CHARGING == 'SAUN1' .OR. CNI_CHARGING == 'SAUN2') THEN + IF (CNI_CHARGING == 'SAUN1' .OR. CNI_CHARGING == 'SAUN2' .OR. & + CNI_CHARGING == 'TEEWC') THEN ZWQ1(:,3) = 0. ! - WHERE (GELEC(:,2) .AND. ZRIS(:) > ZRSMIN_ELEC(4) .AND. & - ZRGS(:) > ZRSMIN_ELEC(6) .AND. ZSAUNQ(:) /= 0.) - ZWQ1(:,3) = XFQIDRYGBS * (1. - ZCOLIG(:)) * & - (ZRHO00 / ZRHODREF(:))**((1 + ZSAUNIN(:)) * XCEXVT) * & - XCG**(1. + ZSAUNIN(:)) * ZCIT(:)**(1 - ZSAUNIM(:) / XBI) * & - ZSAUNIK(:) * ZSAUNQ(:) * & - MOMG(XALPHAG, XNUG, 2.+XDG*(1+ZSAUNIN(:))) * & - ZLBDAG(:)**(XCXG - 2. - XDG * (1. + ZSAUNIN(:))) * & - MOMG(XALPHAI, XNUI, ZSAUNIM(:)) * & - (XAI * MOMG(XALPHAI, XNUI, XBI) / & - (ZRHODREF(:) * ZRIT(:)))**(-ZSAUNIM(:) / XBI) + WHERE (GELEC(:,2) .AND. ZRIS(:) > ZRSMIN_ELEC(4) .AND. & + ZRGS(:) > ZRSMIN_ELEC(6) .AND. ZDQLWC(:) /= 0.) + ZWQ1(:,3) = XFQIDRYGBS * (1. - ZCOLIG(:)) * & + ZRHOCOR(:)**(1. + ZSAUNIN(:)) * & + ZFQIDRYGBS(:) * ZDQLWC(:) * & + ZCIT(:)**(1. - ZSAUNIM(:) / XBI) * & + ZLBDAG(:)**(XCXG - 2. - XDG * (1. + ZSAUNIN(:))) * & + (ZRHODREF(:) * ZRIT(:)/XAIGAMMABI)**(ZSAUNIM(:) / XBI) ! ! Dq is limited to XLIM_NI_IG ZLIMIT(:) = XLIM_NI_IG * ZZW1(:,2) * ZCIT(:) * (1 - ZCOLIG(:)) / & @@ -5856,7 +5448,7 @@ IMPLICIT NONE ZWQ1(:,3) = ZWQ1(:,3) / ZRHODREF(:) ENDWHERE ! -! For temperatures lower than -30°C --> linear interpolation +! For temperatures lower than -30C --> linear interpolation WHERE (ZWQ1(:,3) /= 0. .AND. ZZT(:) < (XTT-30.) .AND. ZZT(:) >= (XTT-40.)) ZWQ1(:,3) = ZWQ1(:,3) * (ZZT(:) - XTT + 40.) / 10. ENDWHERE @@ -5864,23 +5456,36 @@ IMPLICIT NONE END IF ! ! -!* 2.4 Saunders and Peck (1998) and Brooks et al. (1997) +!* 2.4 Charging process based on RAR (=EW*V): SAP98, BSMP1/BSMP2, TERAR +!* following Saunders and Peck (1998) or +!* Brooks et al., 1997 (with/out anomalies) or +!* Takahashi via Tsenova and Mitzeva (2011) +! + IF (CNI_CHARGING == 'SAP98' .OR. CNI_CHARGING == 'BSMP1' .OR. & + CNI_CHARGING == 'BSMP2' .OR. CNI_CHARGING == 'TERAR') THEN +! + IF (CNI_CHARGING /= 'TERAR') THEN + ZFQIDRYGBS(:) = XFQIDRYGBSP + WHERE (ZDQRAR_IG(:) < 0.) + ZFQIDRYGBS(:) = XFQIDRYGBSN + ENDWHERE + ELSE + ZFQIDRYGBS(:) = XFQIDRYGBSP_TAK + WHERE (ZDQRAR_IG(:) <0.) + ZFQIDRYGBS(:) = XFQIDRYGBSN_TAK + ENDWHERE + END IF ! - IF (CNI_CHARGING == 'SAP98' .OR. CNI_CHARGING == 'BSMP1'.OR. & - CNI_CHARGING == 'BSMP2' ) THEN ZWQ1(:,3) = 0. ! - WHERE (GELEC(:,2) .AND. ZPECKQ_IG(:) /= 0. .AND. & + WHERE (GELEC(:,2) .AND. ZDQRAR_IG(:) /= 0. .AND. & ZRIS(:) > ZRSMIN_ELEC(4) .AND. ZRGS(:) > ZRSMIN_ELEC(6)) - ZWQ1(:,3) = XFQIDRYGBS * (1. - ZCOLIG(:)) * & - (ZRHO00 / ZRHODREF(:))**((1 + ZSAUNIN_IG(:)) * XCEXVT) * & - XCG**(1. + ZSAUNIN_IG(:)) * ZCIT(:)**(1 - ZSAUNIM_IG(:) / XBI) * & - ZSAUNIK_IG(:) * ZPECKQ_IG(:) * & - MOMG(XALPHAG, XNUG, 2.+XDG*(1+ZSAUNIN_IG(:))) * & - ZLBDAG(:)**(XCXG - 2. - XDG * (1. + ZSAUNIN_IG(:))) * & - MOMG(XALPHAI, XNUI, ZSAUNIM_IG(:)) * & - (XAI * MOMG(XALPHAI, XNUI, XBI) / & - (ZRHODREF(:) * ZRIT(:)))**(-ZSAUNIM_IG(:) / XBI) + ZWQ1(:,3) = XFQIDRYGBS * (1. - ZCOLIG(:)) * & + ZRHOCOR(:)**(1 + ZSAUNIN_IG(:)) * & + ZFQIDRYGBS(:) * ZDQRAR_IG(:) * & + ZCIT(:)**(1 - ZSAUNIM_IG(:) / XBI) * & + ZLBDAG(:)**(XCXG - 2. - XDG * (1. + ZSAUNIN_IG(:))) * & + (ZRHODREF(:) * ZRIT(:)/XAIGAMMABI)**(ZSAUNIM_IG(:) / XBI) ! ! Dq is limited to XLIM_NI_IG ZLIMIT(:) = XLIM_NI_IG * ZZW1(:,2) * ZCIT(:) * (1 - ZCOLIG(:)) / & @@ -5889,7 +5494,7 @@ IMPLICIT NONE ZWQ1(:,3) = ZWQ1(:,3) / ZRHODREF(:) ENDWHERE ! -! For temperatres lower than -30°C --> linear interpolation +! For temperatures lower than -30C --> linear interpolation WHERE (ZWQ1(:,3) /= 0. .AND. ZZT(:) < (XTT-30.) .AND. ZZT(:) >= (XTT-40.)) ZWQ1(:,3) = ZWQ1(:,3) * (ZZT(:) - XTT + 40.) / 10. ENDWHERE @@ -5903,14 +5508,12 @@ IMPLICIT NONE ZLIMIT(:) = 0. ! WHERE (GELEC(:,2) .AND. ZRIS(:) > ZRSMIN_ELEC(4) .AND. & - ZRGS(:) > ZRSMIN_ELEC(6)) - ZWQ1(:,3) = XFQIDRYGBT1 * (1. - ZCOLIG(:)) * & - ZRHODREF(:)**(-XCEXVT) * & - ZCIT(:) * ZLBDAG(:)**XCXG * & - ZDQTAKA(:) * & - MIN( XFQIDRYGBT2 / (ZLBDAG(:)**(2. + XDG)), & - XFQIDRYGBT3 * ZRHODREF(:)**(2. / XBI - XCEXVT) * & - ZRIT(:)**(2. / XBI) / (ZCIT(:)**(2. / XBI) * & + ZRGS(:) > ZRSMIN_ELEC(6) .AND. ZDQLWC(:) /= 0.) + ZWQ1(:,3) = XFQIDRYGBT1 * (1. - ZCOLIG(:)) * ZRHOCOR(:) * & + ZCIT(:) * ZLBDAG(:)**XCXG * ZDQLWC(:) * & + MIN( XFQIDRYGBT2 / (ZLBDAG(:)**(2. + XDG)), & + XFQIDRYGBT3 * ZRHOCOR(:) * ZRHODREF(:)**(2./XBI) * & + ZRIT(:)**(2. / XBI) / (ZCIT(:)**(2. / XBI) * & ZLBDAG(:)**(2. + 2. * XDG)) ) ! ! Dq is limited to XLIM_NI_IG @@ -5920,114 +5523,13 @@ IMPLICIT NONE ZWQ1(:,3) = ZWQ1(:,3) / ZRHODREF(:) ENDWHERE ! -! For temperatures lower than -30°C --> linear interpolation - WHERE (ZWQ1(:,3) /= 0. .AND. ZZT(:) < (XTT-30.) .AND. ZZT(:) >= (XTT-40.)) - ZWQ1(:,3) = ZWQ1(:,3) * (ZZT(:) - XTT + 40.) / 10. - ENDWHERE - END IF -! -! -!* 2.7 Takahashi, as a function of EW (Tsenova and Mitzeva, 2009) -! - IF (CNI_CHARGING == 'TEEWC') THEN - ZWQ1(:,3) = 0. -! - WHERE (GELEC(:,2) .AND. ZRIS(:) > ZRSMIN_ELEC(4) .AND. & - ZRGS(:) > ZRSMIN_ELEC(6) .AND. ZBTRMQ(:) > 0.) - ZWQ1(:,3) = XFQIDRYGBS * (1. - ZCOLIG(:)) * & - (ZRHO00 / ZRHODREF(:))**((1 + 2.5 ) * XCEXVT) * & - XCG**(1. + 2.5 ) * ZCIT(:)**(1 - 3.76 / XBI) * & - 6.1E12 * ZBTRMQ(:) * & - MOMG(XALPHAG, XNUG, 2.+XDG*(1+2.5 )) * & - ZLBDAG(:)**(XCXG - 2. - XDG * (1. + 2.5 )) * & - MOMG(XALPHAI, XNUI, 3.76 ) * & - (XAI * MOMG(XALPHAI, XNUI, XBI) / & - (ZRHODREF(:) * ZRIT(:)))**(-3.76 / XBI) -! -! Dq is limited to XLIM_NI_IG - ZLIMIT(:) = XLIM_NI_IG * ZZW1(:,2) * ZCIT(:) * (1 - ZCOLIG(:)) / & - (ZRIT(:) * ZCOLIG(:)) - ZWQ1(:,3) = SIGN( MIN( ABS(ZLIMIT(:)), ABS(ZWQ1(:,3)) ), ZWQ1(:,3) ) - ZWQ1(:,3) = ZWQ1(:,3) / ZRHODREF(:) - ENDWHERE -! - WHERE (GELEC(:,2) .AND. ZRIS(:) > ZRSMIN_ELEC(4) .AND. & - ZRGS(:) > ZRSMIN_ELEC(6) .AND. ZBTRMQ(:) < 0.) - ZWQ1(:,3) = XFQIDRYGBS * (1. - ZCOLIG(:)) * & - (ZRHO00 / ZRHODREF(:))**((1 + 2.8 ) * XCEXVT) * & - XCG**(1. + 2.8) * ZCIT(:)**(1 - 2.54 / XBI) * & - 4.3E7 * ZBTRMQ(:) * & - MOMG(XALPHAG, XNUG, 2.+XDG*(1+2.8 )) * & - ZLBDAG(:)**(XCXG - 2. - XDG * (1. + 2.8 )) * & - MOMG(XALPHAI, XNUI, 2.54 ) * & - (XAI * MOMG(XALPHAI, XNUI, XBI) / & - (ZRHODREF(:) * ZRIT(:)))**(-2.54 / XBI) -! -! Dq is limited to XLIM_NI_IG - ZLIMIT(:) = XLIM_NI_IG * ZZW1(:,2) * ZCIT(:) * (1 - ZCOLIG(:)) / & - (ZRIT(:) * ZCOLIG(:)) - ZWQ1(:,3) = SIGN( MIN( ABS(ZLIMIT(:)), ABS(ZWQ1(:,3)) ), ZWQ1(:,3) ) - ZWQ1(:,3) = ZWQ1(:,3) / ZRHODREF(:) - ENDWHERE -! -! For temperatres lower than -30°C --> linear interpolation +! For temperatures lower than -30C --> linear interpolation WHERE (ZWQ1(:,3) /= 0. .AND. ZZT(:) < (XTT-30.) .AND. ZZT(:) >= (XTT-40.)) ZWQ1(:,3) = ZWQ1(:,3) * (ZZT(:) - XTT + 40.) / 10. ENDWHERE END IF ! ! -!* 2.7 Takahashi, as a function of RAR (Tsenova and Mitzeva, 2009) -! - IF (CNI_CHARGING == 'TERAR') THEN - ZWQ1(:,3) = 0. -! - WHERE (GELEC(:,2) .AND. & - ZRIS(:) > ZRSMIN_ELEC(4) .AND. ZRGS(:) > ZRSMIN_ELEC(6) .AND. & - ZBTRMQ_IG(:) > 0.) - ZWQ1(:,3) = XFQIDRYGBS * (1. - ZCOLIG(:)) * & - (ZRHO00 / ZRHODREF(:))**((1 + 2.5 ) * XCEXVT) * & - XCG**(1. + 2.5 ) * ZCIT(:)**(1 - 3.76 / XBI) * & - 6.1E12 * ZBTRMQ_IG(:) * & - MOMG(XALPHAG, XNUG, 2.+XDG*(1+2.5 )) * & - ZLBDAG(:)**(XCXG - 2. - XDG * (1. + 2.5 )) * & - MOMG(XALPHAI, XNUI, 3.76 ) * & - (XAI * MOMG(XALPHAI, XNUI, XBI) / & - (ZRHODREF(:) * ZRIT(:)))**(-3.76 / XBI) -! -! Dq is limited to XLIM_NI_IG - ZLIMIT(:) = XLIM_NI_IG * ZZW1(:,2) * ZCIT(:) * (1 - ZCOLIG(:)) / & - (ZRIT(:) * ZCOLIG(:)) - ZWQ1(:,3) = SIGN( MIN( ABS(ZLIMIT(:)), ABS(ZWQ1(:,3)) ), ZWQ1(:,3) ) - ZWQ1(:,3) = ZWQ1(:,3) / ZRHODREF(:) - ENDWHERE -! - WHERE (GELEC(:,2) .AND. & - ZRIS(:) > ZRSMIN_ELEC(4) .AND. ZRGS(:) > ZRSMIN_ELEC(6) .AND. & - ZBTRMQ_IG(:) < 0. ) - ZWQ1(:,3) = XFQIDRYGBS * (1. - ZCOLIG(:)) * & - (ZRHO00 / ZRHODREF(:))**((1 + 2.8 ) * XCEXVT) * & - XCG**(1. + 2.8) * ZCIT(:)**(1 - 2.54 / XBI) * & - 4.3E7 * ZBTRMQ_IG(:) * & - MOMG(XALPHAG, XNUG, 2.+XDG*(1+2.8 )) * & - ZLBDAG(:)**(XCXG - 2. - XDG * (1. + 2.8 )) * & - MOMG(XALPHAI, XNUI, 2.54 ) * & - (XAI * MOMG(XALPHAI, XNUI, XBI) / & - (ZRHODREF(:) * ZRIT(:)))**(-2.54 / XBI) -! -! Dq is limited to XLIM_NI_IG - ZLIMIT(:) = XLIM_NI_IG * ZZW1(:,2) * ZCIT(:) * (1 - ZCOLIG(:)) / & - (ZRIT(:) * ZCOLIG(:)) - ZWQ1(:,3) = SIGN( MIN( ABS(ZLIMIT(:)), ABS(ZWQ1(:,3)) ), ZWQ1(:,3) ) - ZWQ1(:,3) = ZWQ1(:,3) / ZRHODREF(:) - ENDWHERE -! -! For temperatres lower than -30°C --> linear interpolation - WHERE (ZWQ1(:,3) /= 0. .AND. ZZT(:) < (XTT-30.) .AND. ZZT(:) >= (XTT-40.)) - ZWQ1(:,3) = ZWQ1(:,3) * (ZZT(:) - XTT + 40.) / 10. - ENDWHERE - END IF -! END SUBROUTINE ELEC_IDRYG_B ! !------------------------------------------------------------------------------- @@ -6042,7 +5544,6 @@ END SUBROUTINE ELEC_IDRYG_B ! IMPLICIT NONE ! -!REAL, DIMENSION(SIZE(ZRHODREF )) :: ZCOLSG ! Collection efficiency ! !* 1. COMPUTE THE COLLECTION EFFICIENCY ! --------------------------------- @@ -6073,6 +5574,7 @@ IMPLICIT NONE ENDWHERE ENDIF ! +! !* 2.2 Gardiner et al. (1985) ! IF (CNI_CHARGING == 'GARDI') THEN @@ -6081,25 +5583,25 @@ IMPLICIT NONE ! WHERE (GELEC(:,3) .AND. ZRGS(:) > ZRSMIN_ELEC(6) .AND. & ZRSS(:) > ZRSMIN_ELEC(5) .AND. ZDELTALWC(:) > 0.) - ZWQ1(:,5) = XFQSDRYGBG * (1. - ZCOLSG(:)) * & - ZRHODREF(:)**(-4. * XCEXVT) * & - ZFT(:) * ZDELTALWC(:) * & - ZLBDAG(:)**XCXG * ZLBDAS(:)**XCXS * & - (XLBQSDRYGB4G * ZLBDAS(:)**(-4.) * ZLBDAG(:)**(-2.) + & - XLBQSDRYGB5G * ZLBDAS(:)**(-5.) * ZLBDAG(:)**(-1.) + & - XLBQSDRYGB6G * ZLBDAS(:)**(-6.)) * & - ZWQ1(:,10) + ZWQ1(:,5) = XFQSDRYGBG * (1. - ZCOLSG(:)) * & + ZRHODREF(:)**(-4. * XCEXVT) * & + ZFT(:) * ZDELTALWC(:) * & + ZLBDAG(:)**XCXG * ZLBDAS(:)**XCXS * & + (XLBQSDRYGB4G * ZLBDAS(:)**(-4.) * ZLBDAG(:)**(-2.) + & + XLBQSDRYGB5G * ZLBDAS(:)**(-5.) * ZLBDAG(:)**(-1.) + & + XLBQSDRYGB6G * ZLBDAS(:)**(-6.)) * & + ZWQ1(:,10) ! ! Dq is limited to XLIM_NI_SG - ZLIMIT(:) = XLIM_NI_SG * ZAUX1(:) * XAUX_LIM * & - ZRHODREF(:)**(-XCEXVT) * (1. - ZCOLSG(:)) * & - ZLBDAS(:)**(XCXS) * ZLBDAG(:)**(XCXG) * & - (XAUX_LIM1 * ZLBDAS(:)**(-2.) + & - XAUX_LIM2 * ZLBDAS(:)**(-1.) * ZLBDAG(:)**(-1.) + & - XAUX_LIM3 * ZLBDAG(:)**(-2.)) - ZWQ1(:,5) = SIGN( MIN( ABS(ZLIMIT(:)), ABS(ZWQ1(:,5)) ), ZWQ1(:,5)) - ZWQ1(:,5) = ZWQ1(:,5) / ZRHODREF(:) - ENDWHERE + ZLIMIT(:) = XLIM_NI_SG * ZAUX1(:) * XAUX_LIM * & + ZRHOCOR(:) * (1. - ZCOLSG(:)) * & + ZLBDAS(:)**(XCXS) * ZLBDAG(:)**(XCXG) * & + (XAUX_LIM1 * ZLBDAS(:)**(-2.) + & + XAUX_LIM2 * ZLBDAS(:)**(-1.) * ZLBDAG(:)**(-1.) + & + XAUX_LIM3 * ZLBDAG(:)**(-2.)) + ZWQ1(:,5) = SIGN( MIN( ABS(ZLIMIT(:)), ABS(ZWQ1(:,5)) ), ZWQ1(:,5)) + ZWQ1(:,5) = ZWQ1(:,5) / ZRHODREF(:) + ENDWHERE ! ! For temperatures lower than -30C --> linear interpolation WHERE (ZWQ1(:,5) /= 0. .AND. ZZT(:) < (XTT-30.) .AND. ZZT(:) >= (XTT-40.)) @@ -6107,65 +5609,43 @@ IMPLICIT NONE ENDWHERE END IF ! -!* 2.3 Saunders et al. (1991) +!* 2.3 Charging process based on EW: SAUN1/SAUN2, TEEWC +!* following Saunders et al. (1991), Takahashi via Tsenova and Mitzeva(2009) ! - IF (CNI_CHARGING == 'SAUN1' .OR. CNI_CHARGING == 'SAUN2') THEN - ZWQ1(:,5) = 0. + IF (CNI_CHARGING == 'SAUN1' .OR. CNI_CHARGING == 'SAUN2' .OR. & + CNI_CHARGING == 'TEEWC') THEN +! + ZWQ1(:,5) = 0. ZLIMIT(:) = 0. ! -! If graupel gains positive charge - WHERE (GELEC(:,3) .AND. ZRGS(:) > ZRSMIN_ELEC(6) .AND. & - ZRSS(:) > ZRSMIN_ELEC(5) .AND. ZSAUNQ(:) > 0.) - ZWQ1(:,5) = XFQSDRYGBS * (1. - ZCOLSG(:)) * & - (ZRHO00 / ZRHODREF(:))**((1. + ZSAUNSN(:)) * XCEXVT) * & - ZSAUNSK(:) * ZSAUNQ(:) * & - ZLBDAG(:)**XCXG * ZLBDAS(:)**XCXS * & - (XLBQSDRYGB1S * MOMG(XALPHAS, XNUS, ZSAUNSM(:)) * & - ZLBDAS(:)**(-ZSAUNSM) * ZLBDAG(:)**(-2.) + & - XLBQSDRYGB2S * MOMG(XALPHAS, XNUS, 1.+ZSAUNSM(:)) * & - ZLBDAS(:)**(-(1. + ZSAUNSM)) * ZLBDAG(:)**(-1.) + & - MOMG(XALPHAS, XNUS, 2.+ZSAUNSM(:)) * & - ZLBDAS(:)**(-2. - ZSAUNSM)) * & - ZWQ3(:) + WHERE (GELEC(:,3) .AND. ZRGS(:) > ZRSMIN_ELEC(6) .AND. & + ZRSS(:) > ZRSMIN_ELEC(5) .AND. ZDQLWC(:) /= 0.) ! -! Dq is limited to XLIM_NI_SG - ZLIMIT(:) = XLIM_NI_SG * ZAUX1(:) * XAUX_LIM * & - ZRHODREF(:)**(-XCEXVT) * (1. - ZCOLSG(:)) * & - ZLBDAS(:)**(XCXS) * ZLBDAG(:)**(XCXG) * & - (XAUX_LIM1 * ZLBDAS(:)**(-2.) + & - XAUX_LIM2 * ZLBDAS(:)**(-1.) * ZLBDAG(:)**(-1.) + & - XAUX_LIM3 * ZLBDAG(:)**(-2.)) - ZWQ1(:,5) = SIGN( MIN( ABS(ZLIMIT(:)), ABS(ZWQ1(:,5)) ), ZWQ1(:,5)) - ZWQ1(:,5) = ZWQ1(:,5) / ZRHODREF(:) - ENDWHERE +! ZWQ1(:,5) = ZWQ3(:) If graupel gains positive charge ZDQLWC(:) > 0. +! ZWQ1(:,5) = ZWQ4(:) If graupel gains negative charge ZDQLWC(:) < 0. + ZWQ1(:,5) = ZWQ3(:) * (0.5 + SIGN(0.5,ZDQLWC(:))) + & + ZWQ4(:) * (0.5 - SIGN(0.5,ZDQLWC(:))) ! -! If graupel gains negative charge - WHERE (GELEC(:,3) .AND. ZRGS(:) > ZRSMIN_ELEC(6) .AND. & - ZRSS(:) > ZRSMIN_ELEC(5) .AND. ZSAUNQ(:) < 0.) - ZWQ1(:,5) = XFQSDRYGBS * (1. - ZCOLSG(:)) * & - (ZRHO00 / ZRHODREF(:))**((1. + ZSAUNSN(:)) * XCEXVT) * & - ZSAUNSK(:) * ZSAUNQ(:) * & - ZLBDAG(:)**XCXG * ZLBDAS(:)**XCXS * & - (XLBQSDRYGB1S * MOMG(XALPHAS, XNUS, ZSAUNSM(:)) * & - ZLBDAS(:)**(-ZSAUNSM(:)) * ZLBDAG(:)**(-2.) + & - XLBQSDRYGB2S * MOMG(XALPHAS, XNUS, 1.+ZSAUNSM(:)) * & - ZLBDAS(:)**(-(1. + ZSAUNSM(:))) * ZLBDAG(:)**(-1.) + & - MOMG(XALPHAS, XNUS, 2.+ZSAUNSM(:)) * & - ZLBDAS(:)**(-2. - ZSAUNSM(:))) * & - ZWQ4(:) + ZWQ1(:,5) = ZWQ1(:,5) * XFQSDRYGBS * (1. - ZCOLSG(:)) * & + ZRHOCOR(:)**(1. + ZSAUNSN(:)) * & + ZSAUNSK(:) * ZDQLWC(:) * & + ZLBDAG(:)**XCXG * ZLBDAS(:)**XCXS * & + ( ZLBQSDRYGB1S(:) / (ZLBDAS(:)**ZSAUNSM(:) *ZLBDAG(:)**2) + & + ZLBQSDRYGB2S(:) / (ZLBDAS(:)**( 1.+ZSAUNSM(:))*ZLBDAG(:)) + & + ZLBQSDRYGB3S(:) / ZLBDAS(:)**(2.+ZSAUNSM(:)) ) ! ! Dq is limited to XLIM_NI_SG - ZLIMIT(:) = XLIM_NI_SG * ZAUX1(:) * XAUX_LIM * & - ZRHODREF(:)**(-XCEXVT) * (1. - ZCOLSG(:)) * & + ZLIMIT(:) = XLIM_NI_SG * ZAUX1(:) * XAUX_LIM * & + ZRHOCOR(:) * (1. - ZCOLSG(:)) * & ZLBDAS(:)**(XCXS) * ZLBDAG(:)**(XCXG) * & - (XAUX_LIM1 * ZLBDAS(:)**(-2.) + & - XAUX_LIM2 * ZLBDAS(:)**(-1.) * ZLBDAG(:)**(-1.) + & - XAUX_LIM3 * ZLBDAG(:)**(-2.)) + ( XAUX_LIM1 / ZLBDAS(:)**2 + & + XAUX_LIM2 /(ZLBDAS(:) * ZLBDAG(:)) + & + XAUX_LIM3 / ZLBDAG(:)**2 ) ZWQ1(:,5) = SIGN( MIN( ABS(ZLIMIT(:)), ABS(ZWQ1(:,5)) ), ZWQ1(:,5)) ZWQ1(:,5) = ZWQ1(:,5) / ZRHODREF(:) ENDWHERE ! -! For temperatures lower than -30°C --> linear interpolation +! For temperatures lower than -30C --> linear interpolation WHERE (ZWQ1(:,5) /= 0. .AND. ZZT(:) < (XTT-30.) .AND. ZZT(:) >= (XTT-40.)) ZWQ1(:,5) = ZWQ1(:,5) * (ZZT(:) - XTT + 40.) / 10. ENDWHERE @@ -6173,66 +5653,52 @@ IMPLICIT NONE END IF ! ! -!* 2.4 Saunders and Peck (1998) and Brooks et al. (1997) +!* 2.4 Charging process based on RAR (=EW*V): SAP98, BSMP1/BSMP2, TERAR +!* following Saunders and Peck (1998) or +!* Brooks et al., 1997 (with/out anomalies) or +!* Takahashi via Tsenova and Mitzeva (2011) +! + IF (CNI_CHARGING == 'SAP98' .OR. CNI_CHARGING == 'BSMP1' .OR. & + CNI_CHARGING == 'BSMP2' .OR. CNI_CHARGING == 'TERAR') THEN +! + ZLBQSDRYGB1S(:) = XLBQSDRYGB1SP + ZLBQSDRYGB2S(:) = XLBQSDRYGB2SP + ZLBQSDRYGB3S(:) = XLBQSDRYGB3SP + WHERE (ZDQRAR_SG(:) < 0.) + ZLBQSDRYGB1S(:) = XLBQSDRYGB1SN + ZLBQSDRYGB2S(:) = XLBQSDRYGB2SN + ZLBQSDRYGB3S(:) = XLBQSDRYGB3SN + ENDWHERE ! - IF (CNI_CHARGING == 'SAP98' .OR. CNI_CHARGING == 'BSMP1' .OR. & - CNI_CHARGING == 'BSMP2') THEN ZWQ1(:,5) = 0. ZLIMIT(:) = 0. ! -! If graupel gains positive charge - WHERE (GELEC(:,3) .AND. ZPECKQ_SG(:) > 0. .AND. & - ZRGS(:) > ZRSMIN_ELEC(6) .AND. ZRSS(:) > ZRSMIN_ELEC(5)) - ZWQ1(:,5) = XFQSDRYGBS * (1. - ZCOLSG(:)) * & - (ZRHO00 / ZRHODREF(:))**((1. + ZSAUNSN_SG(:)) * XCEXVT) * & - ZSAUNSK_SG(:) * ZPECKQ_SG(:) * & - ZLBDAG(:)**XCXG * ZLBDAS(:)**XCXS * & - (XLBQSDRYGB1S * MOMG(XALPHAS, XNUS, ZSAUNSM_SG(:)) * & - ZLBDAS(:)**(-ZSAUNSM_SG(:)) * ZLBDAG(:)**(-2.) + & - XLBQSDRYGB2S * MOMG(XALPHAS, XNUS, 1.+ZSAUNSM_SG(:)) * & - ZLBDAS(:)**(-(1. + ZSAUNSM_SG)) * ZLBDAG(:)**(-1.) + & - MOMG(XALPHAS, XNUS, 2.+ZSAUNSM_SG(:)) * & - ZLBDAS(:)**(-2. - ZSAUNSM_SG)) * & - ZWQ3(:) + WHERE (GELEC(:,3) .AND. ZDQRAR_SG(:) /= 0. .AND. & + ZRGS(:) > ZRSMIN_ELEC(6) .AND. ZRSS(:) > ZRSMIN_ELEC(5)) + ZWQ1(:,5) = ZWQ3(:) * (0.5+SIGN(0.5,ZDQRAR_SG(:))) + & + ZWQ4(:) * (0.5-SIGN(0.5,ZDQRAR_SG(:))) ! -! Dq is limited to XLIM_NI_SG - ZLIMIT(:) = XLIM_NI_SG * ZAUX1(:) * XAUX_LIM * & - ZRHODREF(:)**(-XCEXVT) * (1. - ZCOLSG(:)) * & - ZLBDAS(:)**(XCXS) * ZLBDAG(:)**(XCXG) * & - (XAUX_LIM1 * ZLBDAS(:)**(-2.) + & - XAUX_LIM2 * ZLBDAS(:)**(-1.) * ZLBDAG(:)**(-1.) + & - XAUX_LIM3 * ZLBDAG(:)**(-2.)) - ZWQ1(:,5) = SIGN( MIN( ABS(ZLIMIT(:)), ABS(ZWQ1(:,5)) ), ZWQ1(:,5)) - ZWQ1(:,5) = ZWQ1(:,5) / ZRHODREF(:) - ENDWHERE + ZWQ1(:,5) = ZWQ1(:,5) * XFQSDRYGBS * (1. - ZCOLSG(:)) * & + ZRHOCOR(:)**(1. + ZSAUNSN_SG(:)) * & + ZSAUNSK_SG(:) * ZDQRAR_SG(:) * & + ZLBDAG(:)**XCXG * ZLBDAS(:)**XCXS * & + (ZLBQSDRYGB1S(:)/(ZLBDAS(:)**ZSAUNSM_SG(:) * ZLBDAG(:)**2) + & + ZLBQSDRYGB2S(:)/(ZLBDAS(:)**(1.+ZSAUNSM_SG(:))*ZLBDAG(:)) + & + ZLBQSDRYGB3S(:)/ ZLBDAS(:)**(2.+ZSAUNSM_SG(:)) ) ! -! If graupel gains negative charge - WHERE (GELEC(:,3) .AND. ZPECKQ_SG(:) < 0. .AND. & - ZRGS(:) > ZRSMIN_ELEC(6) .AND. ZRSS(:) > ZRSMIN_ELEC(5)) - ZWQ1(:,5) = XFQSDRYGBS * (1. - ZCOLSG(:)) * & - (ZRHO00 / ZRHODREF(:))**((1. + ZSAUNSN_SG(:)) * XCEXVT) * & - ZSAUNSK_SG(:) * ZPECKQ_SG(:) * & - ZLBDAG(:)**XCXG * ZLBDAS(:)**XCXS * & - (XLBQSDRYGB1S * MOMG(XALPHAS, XNUS, ZSAUNSM_SG(:)) * & - ZLBDAS(:)**(-ZSAUNSM_SG) * ZLBDAG(:)**(-2.) + & - XLBQSDRYGB2S * MOMG(XALPHAS, XNUS, 1.+ZSAUNSM_SG(:)) * & - ZLBDAS(:)**(-(1. + ZSAUNSM_SG)) * ZLBDAG(:)**(-1.) + & - MOMG(XALPHAS, XNUS, 2.+ZSAUNSM_SG(:)) * & - ZLBDAS(:)**(-2. - ZSAUNSM_SG)) * & - ZWQ4(:) ! ! Dq is limited to XLIM_NI_SG ZLIMIT(:) = XLIM_NI_SG * ZAUX1(:) * XAUX_LIM * & - ZRHODREF(:)**(-XCEXVT) * (1. - ZCOLSG(:)) * & + ZRHOCOR(:) * (1. - ZCOLSG(:)) * & ZLBDAS(:)**(XCXS) * ZLBDAG(:)**(XCXG) * & - (XAUX_LIM1 * ZLBDAS(:)**(-2.) + & - XAUX_LIM2 * ZLBDAS(:)**(-1.) * ZLBDAG(:)**(-1.) + & - XAUX_LIM3 * ZLBDAG(:)**(-2.)) + ( XAUX_LIM1 / ZLBDAS(:)**2 + & + XAUX_LIM2 /(ZLBDAS(:) * ZLBDAG(:)) + & + XAUX_LIM3 / ZLBDAG(:)**2 ) ZWQ1(:,5) = SIGN( MIN( ABS(ZLIMIT(:)), ABS(ZWQ1(:,5)) ), ZWQ1(:,5)) ZWQ1(:,5) = ZWQ1(:,5) / ZRHODREF(:) ENDWHERE ! -! For temperature lower than -30°C --> linear interpolation +! For temperature lower than -30C --> linear interpolation WHERE (ZWQ1(:,5) /= 0. .AND. ZZT(:) < (XTT-30.) .AND. ZZT(:) >= (XTT-40.)) ZWQ1(:,5) = ZWQ1(:,5) * (ZZT(:) - XTT + 40.) / 10. ENDWHERE @@ -6246,11 +5712,9 @@ IMPLICIT NONE ZLIMIT(:) = 0. ! WHERE (GELEC(:,3) .AND. ZRGS(:) > ZRSMIN_ELEC(6) .AND. & - ZRSS(:) > ZRSMIN_ELEC(5)) - ZWQ1(:,5) = XFQSDRYGBT1 * (1. - ZCOLSG(:)) * & - ZRHODREF(:)**(-XCEXVT) * & - ZLBDAG(:)**XCXG * ZLBDAS(:)**XCXS * & - ZDQTAKA(:) * & + ZRSS(:) > ZRSMIN_ELEC(5) .AND. ZDQLWC(:) /= 0.) + ZWQ1(:,5) = XFQSDRYGBT1 * (1. - ZCOLSG(:)) * ZRHOCOR(:) * & + ZLBDAG(:)**XCXG * ZLBDAS(:)**XCXS * ZDQLWC(:) * & MIN(10. * ( & ABS(XFQSDRYGBT2 / (ZLBDAG(:)**XDG * ZLBDAS(:)**2.) - & XFQSDRYGBT3 / (ZLBDAS(:)**(2. + XDS))) + & @@ -6258,157 +5722,29 @@ IMPLICIT NONE XFQSDRYGBT5 / (ZLBDAS(:)**XDS * ZLBDAG(:)**2.)) + & ABS(XFQSDRYGBT6 / (ZLBDAG(:)**(1. + XDG) * ZLBDAS(:)) - & XFQSDRYGBT7 / (ZLBDAS(:)**(1. + XDS) * ZLBDAG(:)))), & - XFQSDRYGBT8 * ZRHODREF(:)**(-XCEXVT) * ZWQ1(:,10) * & + XFQSDRYGBT8 * ZRHOCOR(:) * ZWQ1(:,10) * & (XFQSDRYGBT9 / (ZLBDAS(:)**2. * ZLBDAG(:)**2.) + & XFQSDRYGBT10 / (ZLBDAS(:)**4.) + & XFQSDRYGBT11 / (ZLBDAS(:)**3. * ZLBDAG(:)))) ! -! Dq is limited to XLIM_NI_SG - ZLIMIT(:) = XLIM_NI_SG * ZAUX1(:) * XAUX_LIM * & - ZRHODREF(:)**(-XCEXVT) * (1. - ZCOLSG(:)) * & - ZLBDAS(:)**(XCXS) * ZLBDAG(:)**(XCXG) * & - (XAUX_LIM1 * ZLBDAS(:)**(-2.) + & - XAUX_LIM2 * ZLBDAS(:)**(-1.) * ZLBDAG(:)**(-1.) + & - XAUX_LIM3 * ZLBDAG(:)**(-2.)) - ZWQ1(:,5) = SIGN( MIN( ABS(ZLIMIT(:)), ABS(ZWQ1(:,5)) ), ZWQ1(:,5)) - ZWQ1(:,5) = ZWQ1(:,5) / ZRHODREF(:) - ENDWHERE -! -! For temperature lower than -30°C --> linear interpolation - WHERE (ZWQ1(:,5) /= 0. .AND. ZZT(:) < (XTT-30.) .AND. ZZT(:) >= (XTT-40.)) - ZWQ1(:,5) = ZWQ1(:,5) * (ZZT(:) - XTT + 40.) / 10. - ENDWHERE - END IF -! -! -!* 2.6 Takahashi with EW (Tsenova and Mitzeva, 2009) -! - IF (CNI_CHARGING == 'TEEWC') THEN - ZWQ1(:,5) = 0. - ZLIMIT(:) = 0. -! -! If graupel gains positive charge - WHERE (GELEC(:,3) .AND. ZRGS(:) > ZRSMIN_ELEC(6) .AND. & - ZRSS(:) > ZRSMIN_ELEC(5) .AND. ZBTRMQ(:) > 0.) - ZWQ1(:,5) = XFQSDRYGBS * (1. - ZCOLSG(:)) * & - (ZRHO00 / ZRHODREF(:))**((1. + 2.5 ) * XCEXVT) * & - 6.5 * ZBTRMQ(:) * & - ZLBDAG(:)**XCXG * ZLBDAS(:)**XCXS * & - (XLBQSDRYGB1S * MOMG(XALPHAS, XNUS, 0.44 ) * & - ZLBDAS(:)**(-0.44 ) * ZLBDAG(:)**(-2.) + & - XLBQSDRYGB2S * MOMG(XALPHAS, XNUS, 1.+0.44 ) * & - ZLBDAS(:)**(-(1. + 0.44 )) * ZLBDAG(:)**(-1.) + & - MOMG(XALPHAS, XNUS, 2.+0.44 ) * & - ZLBDAS(:)**(-2. - 0.44 )) * & - ZWQ3(:) -! -! Dq is limited to XLIM_NI_SG - ZLIMIT(:) = XLIM_NI_SG * ZAUX1(:) * XAUX_LIM * & - ZRHODREF(:)**(-XCEXVT) * (1. - ZCOLSG(:)) * & - ZLBDAS(:)**(XCXS) * ZLBDAG(:)**(XCXG) * & - (XAUX_LIM1 * ZLBDAS(:)**(-2.) + & - XAUX_LIM2 * ZLBDAS(:)**(-1.) * ZLBDAG(:)**(-1.) + & - XAUX_LIM3 * ZLBDAG(:)**(-2.)) - ZWQ1(:,5) = SIGN( MIN( ABS(ZLIMIT(:)), ABS(ZWQ1(:,5)) ), ZWQ1(:,5)) - ZWQ1(:,5) = ZWQ1(:,5) / ZRHODREF(:) - ENDWHERE -! -! If graupel gains negative charge - WHERE (GELEC(:,3) .AND. ZRGS(:) > ZRSMIN_ELEC(6) .AND. & - ZRSS(:) > ZRSMIN_ELEC(5) .AND. ZBTRMQ(:) < 0.) - ZWQ1(:,5) = XFQSDRYGBS * (1. - ZCOLSG(:)) * & - (ZRHO00 / ZRHODREF(:))**((1. + 2.8 ) * XCEXVT) * & - 2. * ZBTRMQ(:) * & - ZLBDAG(:)**XCXG * ZLBDAS(:)**XCXS * & - (XLBQSDRYGB1S * MOMG(XALPHAS, XNUS, 0.5 ) * & - ZLBDAS(:)**(-0.5 ) * ZLBDAG(:)**(-2.) + & - XLBQSDRYGB2S * MOMG(XALPHAS, XNUS, 1.+0.5 ) * & - ZLBDAS(:)**(-(1. + 0.5 )) * ZLBDAG(:)**(-1.) + & - MOMG(XALPHAS, XNUS, 2.+0.5 ) * & - ZLBDAS(:)**(-2. - 0.5 )) * & - ZWQ4(:) -! ! Dq is limited to XLIM_NI_SG ZLIMIT(:) = XLIM_NI_SG * ZAUX1(:) * XAUX_LIM * & - ZRHODREF(:)**(-XCEXVT) * (1. - ZCOLSG(:)) * & - ZLBDAS(:)**(XCXS) * ZLBDAG(:)**(XCXG) * & - (XAUX_LIM1 * ZLBDAS(:)**(-2.) + & - XAUX_LIM2 * ZLBDAS(:)**(-1.) * ZLBDAG(:)**(-1.) + & - XAUX_LIM3 * ZLBDAG(:)**(-2.)) - ZWQ1(:,5) = SIGN( MIN( ABS(ZLIMIT(:)), ABS(ZWQ1(:,5)) ), ZWQ1(:,5)) - ZWQ1(:,5) = ZWQ1(:,5) / ZRHODREF(:) - ENDWHERE -! - WHERE (ZWQ1(:,5) /= 0. .AND. ZZT(:) < (XTT-30.) .AND. ZZT(:) >= (XTT-40.)) - ZWQ1(:,5) = ZWQ1(:,5) * (ZZT(:) - XTT + 40.) / 10. - ENDWHERE - END IF -! -! -!* 2.7 Takahashi with RAR (Tsenova and Mitzeva, 2009) -! - IF (CNI_CHARGING == 'TERAR') THEN - ZWQ1(:,5) = 0. - ZLIMIT(:) = 0. -! - WHERE (GELEC(:,3) .AND. & - ZRGS(:) > ZRSMIN_ELEC(6) .AND. ZRSS(:) > ZRSMIN_ELEC(5) .AND. & - ZBTRMQ_SG(:) > 0.) - ZWQ1(:,5) = XFQSDRYGBS * (1. - ZCOLSG(:)) * & - (ZRHO00 / ZRHODREF(:))**((1. + 2.5) * XCEXVT) * & - 6.5 * ZBTRMQ_SG(:) * & - ZLBDAG(:)**XCXG * ZLBDAS(:)**XCXS * & - (XLBQSDRYGB1S * MOMG(XALPHAS, XNUS, 0.44) * & - ZLBDAS(:)**(-0.44) * ZLBDAG(:)**(-2.) + & - XLBQSDRYGB2S * MOMG(XALPHAS, XNUS, 1.+0.44 ) * & - ZLBDAS(:)**(-(1. + 0.44 )) * ZLBDAG(:)**(-1.) + & - MOMG(XALPHAS, XNUS, 2.+0.44 ) * & - ZLBDAS(:)**(-2. - 0.44 )) * & - ZWQ3(:) -! -! Dq is limited to XLIM_NI_SG - ZLIMIT(:) = XLIM_NI_SG * ZAUX1(:) * XAUX_LIM * & - ZRHODREF(:)**(-XCEXVT) * (1. - ZCOLSG(:)) * & - ZLBDAS(:)**(XCXS) * ZLBDAG(:)**(XCXG) * & - (XAUX_LIM1 * ZLBDAS(:)**(-2.) + & - XAUX_LIM2 * ZLBDAS(:)**(-1.) * ZLBDAG(:)**(-1.) + & - XAUX_LIM3 * ZLBDAG(:)**(-2.)) - ZWQ1(:,5) = SIGN( MIN( ABS(ZLIMIT(:)), ABS(ZWQ1(:,5)) ), ZWQ1(:,5)) - ZWQ1(:,5) = ZWQ1(:,5) / ZRHODREF(:) - ENDWHERE -! -! If graupel gains negative charge - WHERE (GELEC(:,3) .AND. & - ZRGS(:) > ZRSMIN_ELEC(6) .AND. ZRSS(:) > ZRSMIN_ELEC(5) .AND. & - ZBTRMQ_SG(:) < 0.) - ZWQ1(:,5) = XFQSDRYGBS * (1. - ZCOLSG(:)) * & - (ZRHO00 / ZRHODREF(:))**((1. + 2.8) * XCEXVT) * & - 2. * ZBTRMQ_SG(:) * & - ZLBDAG(:)**XCXG * ZLBDAS(:)**XCXS * & - (XLBQSDRYGB1S * MOMG(XALPHAS, XNUS, 0.5) * & - ZLBDAS(:)**(-0.5 ) * ZLBDAG(:)**(-2.) + & - XLBQSDRYGB2S * MOMG(XALPHAS, XNUS, 1.+0.5) * & - ZLBDAS(:)**(-(1. + 0.5)) * ZLBDAG(:)**(-1.) + & - MOMG(XALPHAS, XNUS, 2.+0.5) * & - ZLBDAS(:)**(-2. - 0.5)) * & - ZWQ4(:) -! -! Dq is limited to XLIM_NI_SG - ZLIMIT(:) = XLIM_NI_SG * ZAUX1(:) * XAUX_LIM * & - ZRHODREF(:)**(-XCEXVT) * (1. - ZCOLSG(:)) * & + ZRHOCOR(:) * (1. - ZCOLSG(:)) * & ZLBDAS(:)**(XCXS) * ZLBDAG(:)**(XCXG) * & - (XAUX_LIM1 * ZLBDAS(:)**(-2.) + & - XAUX_LIM2 * ZLBDAS(:)**(-1.) * ZLBDAG(:)**(-1.) + & - XAUX_LIM3 * ZLBDAG(:)**(-2.)) + ( XAUX_LIM1 / ZLBDAS(:)**2 + & + XAUX_LIM2 /(ZLBDAS(:) * ZLBDAG(:)) + & + XAUX_LIM3 / ZLBDAG(:)**2 ) ZWQ1(:,5) = SIGN( MIN( ABS(ZLIMIT(:)), ABS(ZWQ1(:,5)) ), ZWQ1(:,5)) ZWQ1(:,5) = ZWQ1(:,5) / ZRHODREF(:) ENDWHERE ! +! For temperature lower than -30C --> linear interpolation WHERE (ZWQ1(:,5) /= 0. .AND. ZZT(:) < (XTT-30.) .AND. ZZT(:) >= (XTT-40.)) ZWQ1(:,5) = ZWQ1(:,5) * (ZZT(:) - XTT + 40.) / 10. ENDWHERE END IF ! +! END SUBROUTINE ELEC_SDRYG_B ! !------------------------------------------------------------------------------ @@ -6428,21 +5764,21 @@ IMPLICIT NONE ! !* 1. COMPUTE THE CHARGING RATE ! ------------------------- +! + ZRATE_IND(:) = 0. ! WHERE (GIND(:) .AND. & ZEFIELDW(:) /= 0. .AND. ABS(ZEGS(:)) > XEGMIN .AND. & ZLBDAG(:) > 0. .AND. & ZRGT(:) > XRTMIN_ELEC(6) .AND. ZRGS(:) > ZRSMIN_ELEC(6) .AND. & ZRCT(:) > XRTMIN_ELEC(2) .AND. ZRCS(:) > ZRSMIN_ELEC(2)) - ZRATE_IND(:) = XIND1 * ZLBDAG(:)**XCXG * ZRHODREF(:)**(-XCEXVT) * & + ZRATE_IND(:) = XIND1 * ZLBDAG(:)**XCXG * ZRHOCOR(:) * & (XIND2 * SIGN(MIN(100.E3, ABS(ZEFIELDW(:))), ZEFIELDW(:)) * & - ZLBDAG(:) **(-2.-XDG) - & + ZLBDAG(:) **(-2.-XDG) - & XIND3 * ZEGS(:) * ZLBDAG(:)**(-XFG-XDG)) ZRATE_IND(:) = ZRATE_IND(:) / ZRHODREF(:) ZQGS(:) = ZQGS(:) + ZRATE_IND(:) ZQCS(:) = ZQCS(:) - ZRATE_IND(:) - ELSEWHERE - ZRATE_IND(:) = 0. END WHERE ! END SUBROUTINE INDUCTIVE_PROCESS diff --git a/src/MNH/tke_eps_sources.f90 b/src/MNH/tke_eps_sources.f90 index 9f0be0bd96afa9f581418d7d058be34ce72fb1a1..b07ae8d7fdf9d27b522258638f5d7370863cee89 100644 --- a/src/MNH/tke_eps_sources.f90 +++ b/src/MNH/tke_eps_sources.f90 @@ -6,6 +6,7 @@ !--------------- special set of characters for RCS information !----------------------------------------------------------------- ! $Source$ $Revision$ +! MASDEV4_7 turb 2006/06/06 10:02:03 !----------------------------------------------------------------- ! ########################### MODULE MODI_TKE_EPS_SOURCES @@ -17,7 +18,7 @@ INTERFACE PTSTEP,PIMPL,PEXPL, & HTURBLEN,HTURBDIM, & HFMFILE,HLUOUT,OCLOSE_OUT,OTURB_DIAG, & - PTP,PRTKES,PRTKESM, PRTHLS,PCOEF_DISS ) + PTP,PRTKES,PRTKESM, PRTHLS,PCOEF_DISS,PTR,PDISS ) ! INTEGER, INTENT(IN) :: KKA !near ground array index INTEGER, INTENT(IN) :: KKU !uppest atmosphere array index @@ -50,6 +51,8 @@ REAL, DIMENSION(:,:,:), INTENT(INOUT):: PRTKES ! RHOD * Jacobian * REAL, DIMENSION(:,:,:), INTENT(IN) :: PRTKESM ! Advection source REAL, DIMENSION(:,:,:), INTENT(INOUT):: PRTHLS ! Source of Theta_l REAL, DIMENSION(:,:,:), INTENT(IN) :: PCOEF_DISS ! 1/(Cph*Exner) +REAL, DIMENSION(:,:,:), INTENT(OUT) :: PTR ! Transport prod. of TKE +REAL, DIMENSION(:,:,:), INTENT(OUT) :: PDISS ! Dissipati prod. of TKE ! ! ! @@ -65,7 +68,7 @@ END MODULE MODI_TKE_EPS_SOURCES PTSTEP,PIMPL,PEXPL, & HTURBLEN,HTURBDIM, & HFMFILE,HLUOUT,OCLOSE_OUT,OTURB_DIAG, & - PTP,PRTKES,PRTKESM, PRTHLS,PCOEF_DISS ) + PTP,PRTKES,PRTKESM, PRTHLS,PCOEF_DISS,PTR,PDISS ) ! ################################################################## ! ! @@ -237,6 +240,8 @@ REAL, DIMENSION(:,:,:), INTENT(INOUT):: PRTKES ! RHOD * Jacobian * REAL, DIMENSION(:,:,:), INTENT(INOUT):: PRTHLS ! Source of Theta_l REAL, DIMENSION(:,:,:), INTENT(IN) :: PCOEF_DISS ! 1/(Cph*Exner) REAL, DIMENSION(:,:,:), INTENT(IN) :: PRTKESM ! Advection source +REAL, DIMENSION(:,:,:), INTENT(OUT) :: PTR ! Transport prod. of TKE +REAL, DIMENSION(:,:,:), INTENT(OUT) :: PDISS ! Dissipati prod. of TKE ! ! ! @@ -329,7 +334,6 @@ ZA(:,:,:) = - PTSTEP * XCET * & ! CALL TRIDIAG_TKE(KKA,KKU,KKL,PTKEM,ZA,PTSTEP,PEXPL,PIMPL,PRHODJ,& & ZSOURCE,PTSTEP*ZFLX,ZRES) -!JUAN CALL GET_HALO(ZRES) ! !* diagnose the dissipation @@ -461,7 +465,11 @@ IF (LLES_CALL ) THEN ZFLX(:,:,:) =-XCED * (PTKEM(:,:,:)**1.5) / PLEPS(:,:,:) CALL LES_MEAN_SUBGRID( ZFLX, X_LES_SUBGRID_DISS_Tke ) END IF -! +! +PTR=0. +PDISS=0. +PTR(:,:,:) = ZTR(:,:,:) +PDISS(:,:,:) = -XCED * (PTKEM(:,:,:)**1.5) / PLEPS(:,:,:) !---------------------------------------------------------------------------- ! ! diff --git a/src/MNH/turb.f90 b/src/MNH/turb.f90 index 1f22ba9f1a27de91b53db24253d9f90bd645126f..fe601404b3bd445cab028809585648ee9a7b222c 100644 --- a/src/MNH/turb.f90 +++ b/src/MNH/turb.f90 @@ -21,7 +21,7 @@ INTERFACE PCEI,PCEI_MIN,PCEI_MAX,PCOEF_AMPL_SAT, & PTHLT,PRT, & PRUS,PRVS,PRWS,PRTHLS,PRRS,PRSVS,PRTKES,PRTKEMS,PSIGS,& - PFLXZTHVMF,PWTH,PWRC,PWSV ) + PFLXZTHVMF,PWTH,PWRC,PWSV,PDYP,PTHP,PTR,PDISS,PLEM ) ! INTEGER, INTENT(IN) :: KKA !near ground array index @@ -120,6 +120,11 @@ REAL, DIMENSION(:,:,:), INTENT(IN) :: PFLXZTHVMF REAL, DIMENSION(:,:,:), INTENT(OUT) :: PWTH ! heat flux REAL, DIMENSION(:,:,:), INTENT(OUT) :: PWRC ! cloud water flux REAL, DIMENSION(:,:,:,:),INTENT(OUT) :: PWSV ! scalar flux +REAL, DIMENSION(:,:,:), INTENT(INOUT):: PDYP ! Dynamical production of TKE +REAL, DIMENSION(:,:,:), INTENT(INOUT):: PTHP ! Thermal production of TKE +REAL, DIMENSION(:,:,:), INTENT(OUT):: PTR ! Transport production of TKE +REAL, DIMENSION(:,:,:), INTENT(OUT):: PDISS ! Dissipation of TKE +REAL, DIMENSION(:,:,:), INTENT(INOUT):: PLEM ! Mixing length ! !------------------------------------------------------------------------------- @@ -143,7 +148,7 @@ END MODULE MODI_TURB PCEI,PCEI_MIN,PCEI_MAX,PCOEF_AMPL_SAT, & PTHLT,PRT, & PRUS,PRVS,PRWS,PRTHLS,PRRS,PRSVS,PRTKES,PRTKEMS,PSIGS,& - PFLXZTHVMF,PWTH,PWRC,PWSV ) + PFLXZTHVMF,PWTH,PWRC,PWSV,PDYP,PTHP,PTR,PDISS,PLEM ) ! ################################################################# ! ! @@ -470,6 +475,11 @@ REAL, DIMENSION(:,:,:), INTENT(IN) :: PFLXZTHVMF REAL, DIMENSION(:,:,:), INTENT(OUT) :: PWTH ! heat flux REAL, DIMENSION(:,:,:), INTENT(OUT) :: PWRC ! cloud water flux REAL, DIMENSION(:,:,:,:),INTENT(OUT) :: PWSV ! scalar flux +REAL, DIMENSION(:,:,:), INTENT(INOUT):: PDYP ! Dynamical production of TKE +REAL, DIMENSION(:,:,:), INTENT(INOUT):: PTHP ! Thermal production of TKE +REAL, DIMENSION(:,:,:), INTENT(OUT):: PTR ! Transport production of TKE +REAL, DIMENSION(:,:,:), INTENT(OUT):: PDISS ! Dissipation of TKE +REAL, DIMENSION(:,:,:), INTENT(INOUT):: PLEM ! Mixing length ! ! !------------------------------------------------------------------------------- @@ -489,7 +499,7 @@ REAL, ALLOCATABLE, DIMENSION(:,:,:) ::& ZFRAC_ICE, & ! ri fraction of rc+ri ZMWTH,ZMWR,ZMTH2,ZMR2,ZMTHR,& ! 3rd order moments ZFWTH,ZFWR,ZFTH2,ZFR2,ZFTHR,& ! opposite of verticale derivate of 3rd order moments - ZTHLM ! initial potential temp. + ZTHLM, ZTR, ZDISS ! initial potential temp. REAL, ALLOCATABLE, DIMENSION(:,:,:,:) :: & ZRM ! initial mixing ratio REAL, ALLOCATABLE, DIMENSION(:,:) :: ZTAU11M,ZTAU12M, & @@ -989,7 +999,11 @@ CALL TKE_EPS_SOURCES(KKA,KKU,KKL,KMI,PTKET,ZLM,ZLEPS,ZDP,ZTRH, & PTSTEP,PIMPL,ZEXPL, & HTURBLEN,HTURBDIM, & HFMFILE,HLUOUT,OCLOSE_OUT,OTURB_DIAG, & - ZTP,PRTKES,PRTKEMS,PRTHLS,ZCOEF_DISS ) + ZTP,PRTKES,PRTKEMS,PRTHLS,ZCOEF_DISS,PTR,PDISS ) +! +PDYP = ZDP +PTHP = ZTP +! IF (LBUDGET_TH) THEN IF ( KRRI >= 1 .AND. KRRL >= 1 ) THEN CALL BUDGET (PRTHLS+ZLVOCPEXNM*PRRS(:,:,:,2)+ZLSOCPEXNM*PRRS(:,:,:,4) & @@ -1006,6 +1020,8 @@ END IF !* 7. STORES SOME INFORMATIONS RELATED TO THE TURBULENCE SCHEME ! --------------------------------------------------------- ! +PLEM = ZLM +! IF ( OTURB_DIAG .AND. OCLOSE_OUT ) THEN YCOMMENT=' ' ! diff --git a/src/MNH/write_lesn.f90 b/src/MNH/write_lesn.f90 index 8b03a32f2d7a1ee74ff2ac059a14c05a8dbb503b..7dbaf8059d7ec59e0cad01ad4edb09e2d3ad14cd 100644 --- a/src/MNH/write_lesn.f90 +++ b/src/MNH/write_lesn.f90 @@ -51,6 +51,7 @@ END MODULE MODI_WRITE_LES_n !! 06/11/02 (V. Masson) some minor bugs !! 01/04/03 (V. Masson) idem !! 10/10/09 (P. Aumond) Add user multimaskS +!! 11/15 (C.Lac) Add production terms of TKE !! !! -------------------------------------------------------------------------- ! @@ -305,6 +306,21 @@ CALL LES_DIACHRO_MASKS("MEAN_W ",YSUBTITLE(:), & CALL LES_DIACHRO_MASKS("MEAN_PRE",YSUBTITLE(:), & "Mean pressure Profile"//YSUBTITLE(:)," Pa",XLES_MEAN_P,HLES_AVG) +CALL LES_DIACHRO_MASKS("MEAN_DP",YSUBTITLE(:), & + "Mean Dyn production TKE Profile"//YSUBTITLE(:)," m2/s3",XLES_MEAN_DP,HLES_AVG) + +CALL LES_DIACHRO_MASKS("MEAN_TP",YSUBTITLE(:), & + "Mean Thermal production TKE Profile "//YSUBTITLE(:)," m2/s3",XLES_MEAN_TP,HLES_AVG) + +CALL LES_DIACHRO_MASKS("MEAN_TR",YSUBTITLE(:), & + "Mean transport production TKE Profile"//YSUBTITLE(:)," m2/s3",XLES_MEAN_TR,HLES_AVG) + +CALL LES_DIACHRO_MASKS("MEAN_DISS",YSUBTITLE(:), & + "Mean Dissipation TKE Profile"//YSUBTITLE(:)," m2/s3",XLES_MEAN_DISS,HLES_AVG) + +CALL LES_DIACHRO_MASKS("MEAN_LM",YSUBTITLE(:), & + "Mean mixing length Profile"//YSUBTITLE(:)," m",XLES_MEAN_LM,HLES_AVG) + CALL LES_DIACHRO_MASKS("MEAN_RHO",YSUBTITLE(:), & "Mean density Profile"//YSUBTITLE(:)," kg/m3",XLES_MEAN_RHO,HLES_AVG)