diff --git a/src/common/turb/mode_thl_rt_from_th_r_mf.F90 b/src/common/turb/mode_thl_rt_from_th_r_mf.F90 index bf72ab9439b62e883471b54f7abb10ecce8c4031..c2fb615c87fd9b367a3c512db174ba31f4d5ccf8 100644 --- a/src/common/turb/mode_thl_rt_from_th_r_mf.F90 +++ b/src/common/turb/mode_thl_rt_from_th_r_mf.F90 @@ -5,7 +5,7 @@ MODULE MODE_THL_RT_FROM_TH_R_MF IMPLICIT NONE CONTAINS - SUBROUTINE THL_RT_FROM_TH_R_MF( KRR,KRRL,KRRI, & + SUBROUTINE THL_RT_FROM_TH_R_MF( D, CST, KRR, KRRL, KRRI, & PTH, PR, PEXN, & PTHL, PRT ) ! ################################################################# @@ -47,7 +47,8 @@ CONTAINS !* 0. DECLARATIONS ! ------------ ! -USE MODD_CST +USE MODD_DIMPHYEX, ONLY: DIMPHYEX_t +USE MODD_CST, ONLY : CST_t USE PARKIND1, ONLY : JPRB USE YOMHOOK , ONLY : LHOOK, DR_HOOK ! @@ -56,16 +57,18 @@ IMPLICIT NONE ! !* 0.1 declarations of arguments ! +TYPE(DIMPHYEX_t), INTENT(IN) :: D +TYPE(CST_t), INTENT(IN) :: CST INTEGER, INTENT(IN) :: KRR ! number of moist var. INTEGER, INTENT(IN) :: KRRL ! number of liquid water var. INTEGER, INTENT(IN) :: KRRI ! number of ice water var. -REAL, DIMENSION(:,:), INTENT(IN) :: PTH ! theta -REAL, DIMENSION(:,:,:), INTENT(IN) :: PR ! water species -REAL, DIMENSION(:,:), INTENT(IN) :: PEXN ! exner function +REAL, DIMENSION(D%NIT,D%NKT), INTENT(IN) :: PTH ! theta +REAL, DIMENSION(D%NIT,D%NKT,KRR), INTENT(IN) :: PR ! water species +REAL, DIMENSION(D%NIT,D%NKT), INTENT(IN) :: PEXN ! exner function -REAL, DIMENSION(:,:), INTENT(OUT) :: PTHL ! th_l -REAL, DIMENSION(:,:), INTENT(OUT) :: PRT ! total non precip. water +REAL, DIMENSION(D%NIT,D%NKT), INTENT(OUT) :: PTHL ! th_l +REAL, DIMENSION(D%NIT,D%NKT), INTENT(OUT) :: PRT ! total non precip. water ! !------------------------------------------------------------------------------- ! @@ -73,8 +76,8 @@ REAL, DIMENSION(:,:), INTENT(OUT) :: PRT ! total non precip. water ! !---------------------------------------------------------------------------- -REAL, DIMENSION(SIZE(PTH,1),SIZE(PTH,2)) :: ZCP, ZT -REAL, DIMENSION(SIZE(PTH,1),SIZE(PTH,2)) :: ZLVOCPEXN, ZLSOCPEXN +REAL, DIMENSION(D%NIT,D%NKT) :: ZCP, ZT +REAL, DIMENSION(D%NIT,D%NKT) :: ZLVOCPEXN, ZLSOCPEXN INTEGER :: JRR REAL(KIND=JPRB) :: ZHOOK_HANDLE !---------------------------------------------------------------------------- @@ -85,20 +88,20 @@ IF (LHOOK) CALL DR_HOOK('THL_RT_FRM_TH_R_MF',0,ZHOOK_HANDLE) ZT(:,:) = PTH(:,:) * PEXN(:,:) !Cp -ZCP=XCPD -IF (KRR > 0) ZCP(:,:) = ZCP(:,:) + XCPV * PR(:,:,1) +ZCP=CST%XCPD +IF (KRR > 0) ZCP(:,:) = ZCP(:,:) + CST%XCPV * PR(:,:,1) DO JRR = 2,1+KRRL ! loop on the liquid components - ZCP(:,:) = ZCP(:,:) + XCL * PR(:,:,JRR) + ZCP(:,:) = ZCP(:,:) + CST%XCL * PR(:,:,JRR) END DO DO JRR = 2+KRRL,1+KRRL+KRRI ! loop on the solid components - ZCP(:,:) = ZCP(:,:) + XCI * PR(:,:,JRR) + ZCP(:,:) = ZCP(:,:) + CST%XCI * PR(:,:,JRR) END DO IF ( KRRL >= 1 ) THEN IF ( KRRI >= 1 ) THEN !ZLVOCPEXN and ZLSOCPEXN - ZLVOCPEXN(:,:)=(XLVTT + (XCPV-XCL) * (ZT(:,:)-XTT) ) / ZCP(:,:) / PEXN(:,:) - ZLSOCPEXN(:,:)=(XLSTT + (XCPV-XCI) * (ZT(:,:)-XTT) ) / ZCP(:,:) / PEXN(:,:) + ZLVOCPEXN(:,:)=(CST%XLVTT + (CST%XCPV-CST%XCL) * (ZT(:,:)-CST%XTT) ) / ZCP(:,:) / PEXN(:,:) + ZLSOCPEXN(:,:)=(CST%XLSTT + (CST%XCPV-CST%XCI) * (ZT(:,:)-CST%XTT) ) / ZCP(:,:) / PEXN(:,:) ! Rnp PRT(:,:) = PR(:,:,1) + PR(:,:,2) + PR(:,:,4) ! Theta_l @@ -106,7 +109,7 @@ IF ( KRRL >= 1 ) THEN - ZLSOCPEXN(:,:) * PR(:,:,4) ELSE !ZLVOCPEXN - ZLVOCPEXN(:,:)=(XLVTT + (XCPV-XCL) * (ZT(:,:)-XTT) ) / ZCP(:,:) / PEXN(:,:) + ZLVOCPEXN(:,:)=(CST%XLVTT + (CST%XCPV-CST%XCL) * (ZT(:,:)-CST%XTT) ) / ZCP(:,:) / PEXN(:,:) ! Rnp PRT(:,:) = PR(:,:,1) + PR(:,:,2) ! Theta_l diff --git a/src/common/turb/shallow_mf.F90 b/src/common/turb/shallow_mf.F90 index 6fcf186009c048b177abb5f1c8b1951c5d0c4505..492eeb557889654e7cd820b9dfba3cb91742c0e0 100644 --- a/src/common/turb/shallow_mf.F90 +++ b/src/common/turb/shallow_mf.F90 @@ -116,69 +116,69 @@ INTEGER, INTENT(IN) :: KSV_LGEND ! last index of lag. tracer REAL, INTENT(IN) :: PIMPL_MF ! degre of implicitness REAL, INTENT(IN) :: PTSTEP ! Dynamical timestep -REAL, DIMENSION(D%NIT*D%NJT,D%NKT), INTENT(IN) :: PZZ ! Height of flux point -REAL, DIMENSION(D%NIT*D%NJT,D%NKT), INTENT(IN) :: PDZZ ! Metric coefficients -REAL, DIMENSION(D%NIT*D%NJT,D%NKT), INTENT(IN) :: PRHODJ ! dry density * Grid size -REAL, DIMENSION(D%NIT*D%NJT,D%NKT), INTENT(IN) :: PRHODREF ! dry density of the +REAL, DIMENSION(D%NIT,D%NKT), INTENT(IN) :: PZZ ! Height of flux point +REAL, DIMENSION(D%NIT,D%NKT), INTENT(IN) :: PDZZ ! Metric coefficients +REAL, DIMENSION(D%NIT,D%NKT), INTENT(IN) :: PRHODJ ! dry density * Grid size +REAL, DIMENSION(D%NIT,D%NKT), INTENT(IN) :: PRHODREF ! dry density of the ! reference state -REAL, DIMENSION(D%NIT*D%NJT,D%NKT), INTENT(IN) :: PPABSM ! Pressure at time t-1 -REAL, DIMENSION(D%NIT*D%NJT,D%NKT), INTENT(IN) :: PEXNM ! Exner function at t-dt +REAL, DIMENSION(D%NIT,D%NKT), INTENT(IN) :: PPABSM ! Pressure at time t-1 +REAL, DIMENSION(D%NIT,D%NKT), INTENT(IN) :: PEXNM ! Exner function at t-dt -REAL, DIMENSION(D%NIT*D%NJT), INTENT(IN) :: PSFTH,PSFRV ! normal surface fluxes of theta and Rv -REAL, DIMENSION(D%NIT*D%NJT,D%NKT), INTENT(IN) :: PTHM ! Theta at t-dt -REAL, DIMENSION(D%NIT*D%NJT,D%NKT,KRR), INTENT(IN) :: PRM ! water var. at t-dt -REAL, DIMENSION(D%NIT*D%NJT,D%NKT), INTENT(IN) :: PUM,PVM ! wind components at t-dt -REAL, DIMENSION(D%NIT*D%NJT,D%NKT), INTENT(IN) :: PTKEM ! tke at t-dt +REAL, DIMENSION(D%NIT), INTENT(IN) :: PSFTH,PSFRV ! normal surface fluxes of theta and Rv +REAL, DIMENSION(D%NIT,D%NKT), INTENT(IN) :: PTHM ! Theta at t-dt +REAL, DIMENSION(D%NIT,D%NKT,KRR), INTENT(IN) :: PRM ! water var. at t-dt +REAL, DIMENSION(D%NIT,D%NKT), INTENT(IN) :: PUM,PVM ! wind components at t-dt +REAL, DIMENSION(D%NIT,D%NKT), INTENT(IN) :: PTKEM ! tke at t-dt -REAL, DIMENSION(D%NIT*D%NJT,D%NKT,KSV), INTENT(IN) :: PSVM ! scalar variable a t-dt +REAL, DIMENSION(D%NIT,D%NKT,KSV), INTENT(IN) :: PSVM ! scalar variable a t-dt -REAL, DIMENSION(D%NIT*D%NJT,D%NKT), INTENT(OUT):: PDUDT_MF ! tendency of U by massflux scheme -REAL, DIMENSION(D%NIT*D%NJT,D%NKT), INTENT(OUT):: PDVDT_MF ! tendency of V by massflux scheme -REAL, DIMENSION(D%NIT*D%NJT,D%NKT), INTENT(OUT):: PDTHLDT_MF ! tendency of thl by massflux scheme -REAL, DIMENSION(D%NIT*D%NJT,D%NKT), INTENT(OUT):: PDRTDT_MF ! tendency of rt by massflux scheme -REAL, DIMENSION(D%NIT*D%NJT,D%NKT,KSV), INTENT(OUT):: PDSVDT_MF ! tendency of Sv by massflux scheme +REAL, DIMENSION(D%NIT,D%NKT), INTENT(OUT):: PDUDT_MF ! tendency of U by massflux scheme +REAL, DIMENSION(D%NIT,D%NKT), INTENT(OUT):: PDVDT_MF ! tendency of V by massflux scheme +REAL, DIMENSION(D%NIT,D%NKT), INTENT(OUT):: PDTHLDT_MF ! tendency of thl by massflux scheme +REAL, DIMENSION(D%NIT,D%NKT), INTENT(OUT):: PDRTDT_MF ! tendency of rt by massflux scheme +REAL, DIMENSION(D%NIT,D%NKT,KSV), INTENT(OUT):: PDSVDT_MF ! tendency of Sv by massflux scheme -REAL, DIMENSION(D%NIT*D%NJT,D%NKT), INTENT(OUT) :: PSIGMF,PRC_MF,PRI_MF,PCF_MF ! cloud info for the cloud scheme -REAL, DIMENSION(D%NIT*D%NJT,D%NKT), INTENT(OUT) :: PFLXZTHVMF ! Thermal production for TKE scheme -REAL, DIMENSION(D%NIT*D%NJT,D%NKT), INTENT(OUT) :: PFLXZTHMF -REAL, DIMENSION(D%NIT*D%NJT,D%NKT), INTENT(OUT) :: PFLXZRMF -REAL, DIMENSION(D%NIT*D%NJT,D%NKT), INTENT(OUT) :: PFLXZUMF -REAL, DIMENSION(D%NIT*D%NJT,D%NKT), INTENT(OUT) :: PFLXZVMF -REAL, DIMENSION(D%NIT*D%NJT,D%NKT), INTENT(INOUT) :: PTHL_UP ! Thl updraft characteristics -REAL, DIMENSION(D%NIT*D%NJT,D%NKT), INTENT(INOUT) :: PRT_UP ! Rt updraft characteristics -REAL, DIMENSION(D%NIT*D%NJT,D%NKT), INTENT(INOUT) :: PRV_UP ! Vapor updraft characteristics -REAL, DIMENSION(D%NIT*D%NJT,D%NKT), INTENT(INOUT) :: PU_UP ! U wind updraft characteristics -REAL, DIMENSION(D%NIT*D%NJT,D%NKT), INTENT(INOUT) :: PV_UP ! V wind updraft characteristics -REAL, DIMENSION(D%NIT*D%NJT,D%NKT), INTENT(INOUT) :: PRC_UP ! cloud content updraft characteristics -REAL, DIMENSION(D%NIT*D%NJT,D%NKT), INTENT(INOUT) :: PRI_UP ! ice content updraft characteristics -REAL, DIMENSION(D%NIT*D%NJT,D%NKT), INTENT(INOUT) :: PTHV_UP ! Thv updraft characteristics -REAL, DIMENSION(D%NIT*D%NJT,D%NKT), INTENT(INOUT) :: PW_UP ! vertical speed updraft characteristics -REAL, DIMENSION(D%NIT*D%NJT,D%NKT), INTENT(INOUT) :: PFRAC_UP ! updraft fraction -REAL, DIMENSION(D%NIT*D%NJT,D%NKT), INTENT(INOUT) :: PEMF ! updraft mass flux -REAL, DIMENSION(D%NIT*D%NJT,D%NKT), INTENT(OUT) :: PDETR ! updraft detrainment -REAL, DIMENSION(D%NIT*D%NJT,D%NKT), INTENT(OUT) :: PENTR ! updraft entrainment -INTEGER,DIMENSION(D%NIT*D%NJT), INTENT(OUT) :: KKLCL,KKETL,KKCTL ! level of LCL,ETL and CTL +REAL, DIMENSION(D%NIT,D%NKT), INTENT(OUT) :: PSIGMF,PRC_MF,PRI_MF,PCF_MF ! cloud info for the cloud scheme +REAL, DIMENSION(D%NIT,D%NKT), INTENT(OUT) :: PFLXZTHVMF ! Thermal production for TKE scheme +REAL, DIMENSION(D%NIT,D%NKT), INTENT(OUT) :: PFLXZTHMF +REAL, DIMENSION(D%NIT,D%NKT), INTENT(OUT) :: PFLXZRMF +REAL, DIMENSION(D%NIT,D%NKT), INTENT(OUT) :: PFLXZUMF +REAL, DIMENSION(D%NIT,D%NKT), INTENT(OUT) :: PFLXZVMF +REAL, DIMENSION(D%NIT,D%NKT), INTENT(INOUT) :: PTHL_UP ! Thl updraft characteristics +REAL, DIMENSION(D%NIT,D%NKT), INTENT(INOUT) :: PRT_UP ! Rt updraft characteristics +REAL, DIMENSION(D%NIT,D%NKT), INTENT(INOUT) :: PRV_UP ! Vapor updraft characteristics +REAL, DIMENSION(D%NIT,D%NKT), INTENT(INOUT) :: PU_UP ! U wind updraft characteristics +REAL, DIMENSION(D%NIT,D%NKT), INTENT(INOUT) :: PV_UP ! V wind updraft characteristics +REAL, DIMENSION(D%NIT,D%NKT), INTENT(INOUT) :: PRC_UP ! cloud content updraft characteristics +REAL, DIMENSION(D%NIT,D%NKT), INTENT(INOUT) :: PRI_UP ! ice content updraft characteristics +REAL, DIMENSION(D%NIT,D%NKT), INTENT(INOUT) :: PTHV_UP ! Thv updraft characteristics +REAL, DIMENSION(D%NIT,D%NKT), INTENT(INOUT) :: PW_UP ! vertical speed updraft characteristics +REAL, DIMENSION(D%NIT,D%NKT), INTENT(INOUT) :: PFRAC_UP ! updraft fraction +REAL, DIMENSION(D%NIT,D%NKT), INTENT(INOUT) :: PEMF ! updraft mass flux +REAL, DIMENSION(D%NIT,D%NKT), INTENT(OUT) :: PDETR ! updraft detrainment +REAL, DIMENSION(D%NIT,D%NKT), INTENT(OUT) :: PENTR ! updraft entrainment +INTEGER,DIMENSION(D%NIT), INTENT(OUT) :: KKLCL,KKETL,KKCTL ! level of LCL,ETL and CTL REAL, INTENT(IN) :: PDX, PDY ! ! 0.2 Declaration of local variables ! -REAL, DIMENSION(D%NIT*D%NJT,D%NKT) :: & +REAL, DIMENSION(D%NIT,D%NKT) :: & ZTHLM, & ! ZRTM, & ! ZTHVM, & ! ZEMF_O_RHODREF, & ! entrainment/detrainment ZBUO_INTEG ! integrated buoyancy -REAL, DIMENSION(D%NIT*D%NJT,D%NKT) :: ZFRAC_ICE +REAL, DIMENSION(D%NIT,D%NKT) :: ZFRAC_ICE -REAL, DIMENSION(D%NIT*D%NJT,D%NKT,KSV) :: & +REAL, DIMENSION(D%NIT,D%NKT,KSV) :: & ZSV_UP,& ! updraft scalar var. ZFLXZSVMF ! Flux -REAL, DIMENSION(D%NIT*D%NJT) :: ZDEPTH ! Deepness of cloud -REAL, DIMENSION(D%NIT*D%NJT,D%NKT) :: ZFRAC_ICE_UP ! liquid/solid fraction in updraft -REAL, DIMENSION(D%NIT*D%NJT,D%NKT) :: ZRSAT_UP ! Rsat in updraft +REAL, DIMENSION(D%NIT) :: ZDEPTH ! Deepness of cloud +REAL, DIMENSION(D%NIT,D%NKT) :: ZFRAC_ICE_UP ! liquid/solid fraction in updraft +REAL, DIMENSION(D%NIT,D%NKT) :: ZRSAT_UP ! Rsat in updraft LOGICAL :: GENTR_DETR ! flag to recompute entrainment, detrainment and mass flux -INTEGER, DIMENSION(D%NIT*D%NJT,D%NKT) :: IERR +INTEGER, DIMENSION(D%NIT,D%NKT) :: IERR ! REAL(KIND=JPRB) :: ZHOOK_HANDLE !------------------------------------------------------------------------ @@ -204,7 +204,7 @@ ENDIF CALL COMPUTE_FRAC_ICE(HFRAC_ICE,NEB,ZFRAC_ICE(:,:),PTHM(:,:)*PEXNM(:,:), IERR(:,:)) ! Conservative variables at t-dt -CALL THL_RT_FROM_TH_R_MF(KRR,KRRL,KRRI, & +CALL THL_RT_FROM_TH_R_MF(D, CST, KRR,KRRL,KRRI, & PTHM, PRM, PEXNM, & ZTHLM, ZRTM ) diff --git a/src/mesonh/aux/mode_fill_dimphyexn.F90 b/src/mesonh/aux/mode_fill_dimphyexn.F90 index af7b191d0363c882276e9b49344e4c80365c579b..e5a74c1f7e07fec30ab8a65229fc8a1344251897 100644 --- a/src/mesonh/aux/mode_fill_dimphyexn.F90 +++ b/src/mesonh/aux/mode_fill_dimphyexn.F90 @@ -6,7 +6,7 @@ MODULE MODE_FILL_DIMPHYEX IMPLICIT NONE CONTAINS -SUBROUTINE FILL_DIMPHYEX(YDDIMPHYEX, KIT, KJT, KKT) +SUBROUTINE FILL_DIMPHYEX(YDDIMPHYEX, KIT, KJT, KKT, OHPACK) ! ######################### ! !! @@ -46,19 +46,38 @@ IMPLICIT NONE ! TYPE(DIMPHYEX_t), INTENT(OUT) :: YDDIMPHYEX ! Structure to fill in INTEGER, INTENT(IN) :: KIT, KJT, KKT ! Array dimensions +LOGICAL, OPTIONAL, INTENT(IN) :: OHPACK ! True to pack both horizontal dimension into a single one ! !* 0.2 declaration of local variables ! REAL(KIND=JPRB) :: ZHOOK_HANDLE +LOGICAL :: LHPACK !------------------------------------------------------------------------------- ! IF (LHOOK) CALL DR_HOOK('FILL_DIMPHYEX', 0, ZHOOK_HANDLE) ! -YDDIMPHYEX%NIT=KIT -YDDIMPHYEX%NJT=KJT -CALL GET_INDICE_ll(YDDIMPHYEX%NIB, YDDIMPHYEX%NJB,& - &YDDIMPHYEX%NIE, YDDIMPHYEX%NJE) +IF(PRESENT(OHPACK)) THEN + LHPACK=OHPACK +ELSE + LHPACK=.FALSE. +ENDIF +IF(LHPACK) THEN + !Both horizontal dimensions are packed into a single one + !Computations are done on the entire array + YDDIMPHYEX%NIT=KIT*KJT + YDDIMPHYEX%NJT=1 + YDDIMPHYEX%NIB=1 + YDDIMPHYEX%NJB=1 + YDDIMPHYEX%NIE=KIT*KJT + YDDIMPHYEX%NJE=1 +ELSE + !Computations are done only on the physical domain + YDDIMPHYEX%NIT=KIT + YDDIMPHYEX%NJT=KJT + CALL GET_INDICE_ll(YDDIMPHYEX%NIB, YDDIMPHYEX%NJB,& + &YDDIMPHYEX%NIE, YDDIMPHYEX%NJE) +ENDIF ! YDDIMPHYEX%NKL=1 YDDIMPHYEX%NKT=KKT diff --git a/src/mesonh/ext/shallow_mf_pack.f90 b/src/mesonh/ext/shallow_mf_pack.f90 index b1134a50fa9bc5161eae803202933633b425a403..517d8b9da61656f1e6c75943ed2747af9340d709 100644 --- a/src/mesonh/ext/shallow_mf_pack.f90 +++ b/src/mesonh/ext/shallow_mf_pack.f90 @@ -267,11 +267,11 @@ INTEGER :: IIU, IJU, IKU, IKB, IKE, IRR, ISV INTEGER :: JK,JRR,JSV ! Loop counters TYPE(TFIELDDATA) :: TZFIELD -TYPE(DIMPHYEX_t) :: YLDIMPHYEX +TYPE(DIMPHYEX_t) :: YLDIMPHYEXPACK !------------------------------------------------------------------------ !!! 1. Initialisation -CALL FILL_DIMPHYEX(YLDIMPHYEX, SIZE(PZZ,1), SIZE(PZZ,2), SIZE(PZZ,3)) +CALL FILL_DIMPHYEX(YLDIMPHYEXPACK, SIZE(PZZ,1), SIZE(PZZ,2), SIZE(PZZ,3), OHPACK=.TRUE.) ! Internal Domain IIU=SIZE(PTHM,1) @@ -332,7 +332,7 @@ ZSFRV(:)=RESHAPE(PSFRV(:,:),(/ IIU*IJU /) ) !!! 3. Call of the physical parameterization of massflux vertical transport -CALL SHALLOW_MF(YLDIMPHYEX, CST, NEB, PARAM_MFSHALLN, TURBN, & +CALL SHALLOW_MF(YLDIMPHYEXPACK, CST, NEB, PARAM_MFSHALLN, TURBN, & KRR,KRRL,KRRI,ISV, & HMF_UPDRAFT, HMF_CLOUD, CFRAC_ICE_SHALLOW_MF, OMIXUV, & LNOMIXLG,NSV_LGBEG,NSV_LGEND, &