Skip to content
Snippets Groups Projects
Commit 0cc2835d authored by RODIER Quentin's avatar RODIER Quentin
Browse files

Quentin 05/04/2022: Expand Array turb.F90

parent e89f7808
No related branches found
No related tags found
No related merge requests found
...@@ -439,7 +439,8 @@ REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: & ...@@ -439,7 +439,8 @@ REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: &
ZTHLM,ZRTKEMS, & ! initial potential temp; TKE advective source ZTHLM,ZRTKEMS, & ! initial potential temp; TKE advective source
ZSHEAR, ZDUDZ, ZDVDZ, & ! horizontal-wind vertical gradient ZSHEAR, ZDUDZ, ZDVDZ, & ! horizontal-wind vertical gradient
ZLVOCPEXNM,ZLSOCPEXNM, & ! Lv/Cp/EXNREF and Ls/Cp/EXNREF at t-1 ZLVOCPEXNM,ZLSOCPEXNM, & ! Lv/Cp/EXNREF and Ls/Cp/EXNREF at t-1
ZATHETA_ICE,ZAMOIST_ICE ! coefficients for s = f (Thetal,Rnp) ZATHETA_ICE,ZAMOIST_ICE, & ! coefficients for s = f (Thetal,Rnp)
ZWORK1 ! working array syntax
REAL, DIMENSION(D%NIT,D%NJT,D%NKT,KRR) :: ZRM ! initial mixing ratio REAL, DIMENSION(D%NIT,D%NJT,D%NKT,KRR) :: ZRM ! initial mixing ratio
REAL, DIMENSION(D%NIT,D%NJT) :: ZTAU11M,ZTAU12M, & REAL, DIMENSION(D%NIT,D%NJT) :: ZTAU11M,ZTAU12M, &
...@@ -513,6 +514,7 @@ END IF ...@@ -513,6 +514,7 @@ END IF
! !
!* 2.1 Cph at t !* 2.1 Cph at t
! !
!$mnh_expand_array(JI=1:D%NIT,JJ=1:D%NJT,JK=1:D%NKT)
ZCP(:,:,:)=CST%XCPD ZCP(:,:,:)=CST%XCPD
! !
IF (KRR > 0) ZCP(:,:,:) = ZCP(:,:,:) + CST%XCPV * PRT(:,:,:,1) IF (KRR > 0) ZCP(:,:,:) = ZCP(:,:,:) + CST%XCPV * PRT(:,:,:,1)
...@@ -523,18 +525,25 @@ END DO ...@@ -523,18 +525,25 @@ END DO
DO JRR = 2+KRRL,1+KRRL+KRRI ! loop on the solid components DO JRR = 2+KRRL,1+KRRL+KRRI ! loop on the solid components
ZCP(:,:,:) = ZCP(:,:,:) + CST%XCI * PRT(:,:,:,JRR) ZCP(:,:,:) = ZCP(:,:,:) + CST%XCI * PRT(:,:,:,JRR)
END DO END DO
!$mnh_end_expand_array(JI=1:D%NIT,JJ=1:D%NJT,JK=1:D%NKT)
! !
!* 2.2 Exner function at t !* 2.2 Exner function at t
! !
IF (OOCEAN) THEN IF (OOCEAN) THEN
!$mnh_expand_array(JI=1:D%NIT,JJ=1:D%NJT,JK=1:D%NKT)
ZEXN(:,:,:) = 1. ZEXN(:,:,:) = 1.
!$mnh_end_expand_array(JI=1:D%NIT,JJ=1:D%NJT,JK=1:D%NKT)
ELSE ELSE
!$mnh_expand_array(JI=1:D%NIT,JJ=1:D%NJT,JK=1:D%NKT)
ZEXN(:,:,:) = (PPABST(:,:,:)/CST%XP00) ** (CST%XRD/CST%XCPD) ZEXN(:,:,:) = (PPABST(:,:,:)/CST%XP00) ** (CST%XRD/CST%XCPD)
!$mnh_end_expand_array(JI=1:D%NIT,JJ=1:D%NJT,JK=1:D%NKT)
END IF END IF
! !
!* 2.3 dissipative heating coeff a t !* 2.3 dissipative heating coeff a t
! !
!$mnh_expand_array(JI=1:D%NIT,JJ=1:D%NJT,JK=1:D%NKT)
ZCOEF_DISS(:,:,:) = 1/(ZCP(:,:,:) * ZEXN(:,:,:)) ZCOEF_DISS(:,:,:) = 1/(ZCP(:,:,:) * ZEXN(:,:,:))
!$mnh_end_expand_array(JI=1:D%NIT,JJ=1:D%NJT,JK=1:D%NKT)
! !
! !
ZFRAC_ICE(:,:,:) = 0.0 ZFRAC_ICE(:,:,:) = 0.0
...@@ -545,7 +554,9 @@ IF (KRRL >=1) THEN ...@@ -545,7 +554,9 @@ IF (KRRL >=1) THEN
! !
!* 2.4 Temperature at t !* 2.4 Temperature at t
! !
!$mnh_expand_array(JI=1:D%NIT,JJ=1:D%NJT,JK=1:D%NKT)
ZT(:,:,:) = PTHLT(:,:,:) * ZEXN(:,:,:) ZT(:,:,:) = PTHLT(:,:,:) * ZEXN(:,:,:)
!$mnh_end_expand_array(JI=1:D%NIT,JJ=1:D%NJT,JK=1:D%NKT)
! !
!* 2.5 Lv/Cph/Exn !* 2.5 Lv/Cph/Exn
! !
...@@ -555,16 +566,20 @@ IF (KRRL >=1) THEN ...@@ -555,16 +566,20 @@ IF (KRRL >=1) THEN
CALL COMPUTE_FUNCTION_THERMO(CST%XALPI,CST%XBETAI,CST%XGAMI,CST%XLSTT,CST%XCI,ZT,ZEXN,ZCP, & CALL COMPUTE_FUNCTION_THERMO(CST%XALPI,CST%XBETAI,CST%XGAMI,CST%XLSTT,CST%XCI,ZT,ZEXN,ZCP, &
ZLSOCPEXNM,ZAMOIST_ICE,ZATHETA_ICE) ZLSOCPEXNM,ZAMOIST_ICE,ZATHETA_ICE)
! !
!$mnh_expand_where(JI=1:D%NIT,JJ=1:D%NJT,JK=1:D%NKT)
WHERE(PRT(:,:,:,2)+PRT(:,:,:,4)>0.0) WHERE(PRT(:,:,:,2)+PRT(:,:,:,4)>0.0)
ZFRAC_ICE(:,:,:) = PRT(:,:,:,4) / ( PRT(:,:,:,2)+PRT(:,:,:,4) ) ZFRAC_ICE(:,:,:) = PRT(:,:,:,4) / ( PRT(:,:,:,2)+PRT(:,:,:,4) )
END WHERE END WHERE
!$mnh_end_expand_where(JI=1:D%NIT,JJ=1:D%NJT,JK=1:D%NKT)
! !
!$mnh_expand_array(JI=1:D%NIT,JJ=1:D%NJT,JK=1:D%NKT)
ZLOCPEXNM(:,:,:) = (1.0-ZFRAC_ICE(:,:,:))*ZLVOCPEXNM(:,:,:) & ZLOCPEXNM(:,:,:) = (1.0-ZFRAC_ICE(:,:,:))*ZLVOCPEXNM(:,:,:) &
+ZFRAC_ICE(:,:,:) *ZLSOCPEXNM(:,:,:) +ZFRAC_ICE(:,:,:) *ZLSOCPEXNM(:,:,:)
ZAMOIST(:,:,:) = (1.0-ZFRAC_ICE(:,:,:))*ZAMOIST(:,:,:) & ZAMOIST(:,:,:) = (1.0-ZFRAC_ICE(:,:,:))*ZAMOIST(:,:,:) &
+ZFRAC_ICE(:,:,:) *ZAMOIST_ICE(:,:,:) +ZFRAC_ICE(:,:,:) *ZAMOIST_ICE(:,:,:)
ZATHETA(:,:,:) = (1.0-ZFRAC_ICE(:,:,:))*ZATHETA(:,:,:) & ZATHETA(:,:,:) = (1.0-ZFRAC_ICE(:,:,:))*ZATHETA(:,:,:) &
+ZFRAC_ICE(:,:,:) *ZATHETA_ICE(:,:,:) +ZFRAC_ICE(:,:,:) *ZATHETA_ICE(:,:,:)
!$mnh_end_expand_array(JI=1:D%NIT,JJ=1:D%NJT,JK=1:D%NKT)
ELSE ELSE
CALL COMPUTE_FUNCTION_THERMO(CST%XALPW,CST%XBETAW,CST%XGAMW,CST%XLVTT,CST%XCL,ZT,ZEXN,ZCP, & CALL COMPUTE_FUNCTION_THERMO(CST%XALPW,CST%XBETAW,CST%XGAMW,CST%XLVTT,CST%XCL,ZT,ZEXN,ZCP, &
ZLOCPEXNM,ZAMOIST,ZATHETA) ZLOCPEXNM,ZAMOIST,ZATHETA)
...@@ -598,13 +613,14 @@ IF (KRRL >=1) THEN ...@@ -598,13 +613,14 @@ IF (KRRL >=1) THEN
END IF END IF
! !
ELSE ELSE
ZLOCPEXNM=0. ZLOCPEXNM(:,:,:)=0.
END IF ! loop end on KRRL >= 1 END IF ! loop end on KRRL >= 1
! !
! computes conservative variables ! computes conservative variables
! !
IF ( KRRL >= 1 ) THEN IF ( KRRL >= 1 ) THEN
IF ( KRRI >= 1 ) THEN IF ( KRRI >= 1 ) THEN
!$mnh_expand_array(JI=1:D%NIT,JJ=1:D%NJT,JK=1:D%NKT)
! Rnp at t ! Rnp at t
PRT(:,:,:,1) = PRT(:,:,:,1) + PRT(:,:,:,2) + PRT(:,:,:,4) PRT(:,:,:,1) = PRT(:,:,:,1) + PRT(:,:,:,2) + PRT(:,:,:,4)
PRRS(:,:,:,1) = PRRS(:,:,:,1) + PRRS(:,:,:,2) + PRRS(:,:,:,4) PRRS(:,:,:,1) = PRRS(:,:,:,1) + PRRS(:,:,:,2) + PRRS(:,:,:,4)
...@@ -613,13 +629,16 @@ IF ( KRRL >= 1 ) THEN ...@@ -613,13 +629,16 @@ IF ( KRRL >= 1 ) THEN
- ZLSOCPEXNM(:,:,:) * PRT(:,:,:,4) - ZLSOCPEXNM(:,:,:) * PRT(:,:,:,4)
PRTHLS(:,:,:) = PRTHLS(:,:,:) - ZLVOCPEXNM(:,:,:) * PRRS(:,:,:,2) & PRTHLS(:,:,:) = PRTHLS(:,:,:) - ZLVOCPEXNM(:,:,:) * PRRS(:,:,:,2) &
- ZLSOCPEXNM(:,:,:) * PRRS(:,:,:,4) - ZLSOCPEXNM(:,:,:) * PRRS(:,:,:,4)
!$mnh_end_expand_array(JI=1:D%NIT,JJ=1:D%NJT,JK=1:D%NKT)
ELSE ELSE
!$mnh_expand_array(JI=1:D%NIT,JJ=1:D%NJT,JK=1:D%NKT)
! Rnp at t ! Rnp at t
PRT(:,:,:,1) = PRT(:,:,:,1) + PRT(:,:,:,2) PRT(:,:,:,1) = PRT(:,:,:,1) + PRT(:,:,:,2)
PRRS(:,:,:,1) = PRRS(:,:,:,1) + PRRS(:,:,:,2) PRRS(:,:,:,1) = PRRS(:,:,:,1) + PRRS(:,:,:,2)
! Theta_l at t ! Theta_l at t
PTHLT(:,:,:) = PTHLT(:,:,:) - ZLOCPEXNM(:,:,:) * PRT(:,:,:,2) PTHLT(:,:,:) = PTHLT(:,:,:) - ZLOCPEXNM(:,:,:) * PRT(:,:,:,2)
PRTHLS(:,:,:) = PRTHLS(:,:,:) - ZLOCPEXNM(:,:,:) * PRRS(:,:,:,2) PRTHLS(:,:,:) = PRTHLS(:,:,:) - ZLOCPEXNM(:,:,:) * PRRS(:,:,:,2)
!$mnh_end_expand_array(JI=1:D%NIT,JJ=1:D%NJT,JK=1:D%NKT)
END IF END IF
END IF END IF
! !
...@@ -645,7 +664,7 @@ SELECT CASE (HTURBLEN) ...@@ -645,7 +664,7 @@ SELECT CASE (HTURBLEN)
! ------------------ ! ------------------
CASE ('BL89') CASE ('BL89')
ZSHEAR=0. ZSHEAR(:,:,:)=0.
CALL BL89(D,CST,CSTURB,PZZ,PDZZ,PTHVREF,ZTHLM,KRR,ZRM,PTKET,ZSHEAR,ZLM,OOCEAN,HPROGRAM) CALL BL89(D,CST,CSTURB,PZZ,PDZZ,PTHVREF,ZTHLM,KRR,ZRM,PTKET,ZSHEAR,ZLM,OOCEAN,HPROGRAM)
! !
!* 3.2 RM17 mixing length !* 3.2 RM17 mixing length
...@@ -654,7 +673,9 @@ SELECT CASE (HTURBLEN) ...@@ -654,7 +673,9 @@ SELECT CASE (HTURBLEN)
CASE ('RM17') CASE ('RM17')
ZDUDZ = MXF(MZF(GZ_U_UW(PUT,PDZZ,D%NKA,KKU,KKL),D%NKA,KKU,KKL)) ZDUDZ = MXF(MZF(GZ_U_UW(PUT,PDZZ,D%NKA,KKU,KKL),D%NKA,KKU,KKL))
ZDVDZ = MYF(MZF(GZ_V_VW(PVT,PDZZ,D%NKA,KKU,KKL),D%NKA,KKU,KKL)) ZDVDZ = MYF(MZF(GZ_V_VW(PVT,PDZZ,D%NKA,KKU,KKL),D%NKA,KKU,KKL))
ZSHEAR = SQRT(ZDUDZ*ZDUDZ + ZDVDZ*ZDVDZ) !$mnh_expand_array(JI=1:D%NIT,JJ=1:D%NJT,JK=1:D%NKT)
ZSHEAR(:,:,:) = SQRT(ZDUDZ(:,:,:)*ZDUDZ(:,:,:) + ZDVDZ(:,:,:)*ZDVDZ(:,:,:))
!$mnh_end_expand_array(JI=1:D%NIT,JJ=1:D%NJT,JK=1:D%NKT)
CALL BL89(D,CST,CSTURB,PZZ,PDZZ,PTHVREF,ZTHLM,KRR,ZRM,PTKET,ZSHEAR,ZLM,OOCEAN,HPROGRAM) CALL BL89(D,CST,CSTURB,PZZ,PDZZ,PTHVREF,ZTHLM,KRR,ZRM,PTKET,ZSHEAR,ZLM,OOCEAN,HPROGRAM)
! !
!* 3.3 Grey-zone combined RM17 & Deardorff mixing lengths !* 3.3 Grey-zone combined RM17 & Deardorff mixing lengths
...@@ -663,7 +684,9 @@ SELECT CASE (HTURBLEN) ...@@ -663,7 +684,9 @@ SELECT CASE (HTURBLEN)
CASE ('ADAP') CASE ('ADAP')
ZDUDZ = MXF(MZF(GZ_U_UW(PUT,PDZZ,D%NKA,KKU,KKL),D%NKA,KKU,KKL)) ZDUDZ = MXF(MZF(GZ_U_UW(PUT,PDZZ,D%NKA,KKU,KKL),D%NKA,KKU,KKL))
ZDVDZ = MYF(MZF(GZ_V_VW(PVT,PDZZ,D%NKA,KKU,KKL),D%NKA,KKU,KKL)) ZDVDZ = MYF(MZF(GZ_V_VW(PVT,PDZZ,D%NKA,KKU,KKL),D%NKA,KKU,KKL))
ZSHEAR = SQRT(ZDUDZ*ZDUDZ + ZDVDZ*ZDVDZ) !$mnh_expand_array(JI=1:D%NIT,JJ=1:D%NJT,JK=1:D%NKT)
ZSHEAR(:,:,:) = SQRT(ZDUDZ(:,:,:)*ZDUDZ(:,:,:) + ZDVDZ(:,:,:)*ZDVDZ(:,:,:))
!$mnh_end_expand_array(JI=1:D%NIT,JJ=1:D%NJT,JK=1:D%NKT)
CALL BL89(D,CST,CSTURB,PZZ,PDZZ,PTHVREF,ZTHLM,KRR,ZRM,PTKET,ZSHEAR,ZLM,OOCEAN,HPROGRAM) CALL BL89(D,CST,CSTURB,PZZ,PDZZ,PTHVREF,ZTHLM,KRR,ZRM,PTKET,ZSHEAR,ZLM,OOCEAN,HPROGRAM)
CALL DELT(ZLMW,ODZ=.FALSE.) CALL DELT(ZLMW,ODZ=.FALSE.)
...@@ -672,7 +695,10 @@ SELECT CASE (HTURBLEN) ...@@ -672,7 +695,10 @@ SELECT CASE (HTURBLEN)
! For LES grid meshes, this is equivalent to Deardorff : the base mixing lentgh is the horizontal grid mesh, ! For LES grid meshes, this is equivalent to Deardorff : the base mixing lentgh is the horizontal grid mesh,
! and it is limited by a stability-based length (RM17), as was done in Deardorff length (but taking into account shear as well) ! and it is limited by a stability-based length (RM17), as was done in Deardorff length (but taking into account shear as well)
! For grid meshes in the grey zone, then this is the smaller of the two. ! For grid meshes in the grey zone, then this is the smaller of the two.
ZLM = MIN(ZLM,TURBN%XCADAP*ZLMW) !
!$mnh_expand_array(JI=1:D%NIT,JJ=1:D%NJT,JK=1:D%NKT)
ZLM(:,:,:) = MIN(ZLM(:,:,:),TURBN%XCADAP*ZLMW(:,:,:))
!$mnh_end_expand_array(JI=1:D%NIT,JJ=1:D%NJT,JK=1:D%NKT)
! !
!* 3.4 Delta mixing length !* 3.4 Delta mixing length
! ------------------- ! -------------------
...@@ -695,11 +721,13 @@ SELECT CASE (HTURBLEN) ...@@ -695,11 +721,13 @@ SELECT CASE (HTURBLEN)
ZALPHA=0.5**(-1.5) ZALPHA=0.5**(-1.5)
! !
!$mnh_expand_array(JI=1:D%NIT,JJ=1:D%NJT)
DO JK=IKTB,IKTE DO JK=IKTB,IKTE
ZLM(:,:,JK) = ( 0.5*(PZZ(:,:,JK)+PZZ(:,:,JK+KKL)) - & ZLM(:,:,JK) = ( 0.5*(PZZ(:,:,JK)+PZZ(:,:,JK+KKL)) - &
& PZZ(:,:,D%NKA+JPVEXT_TURB*KKL) ) * PDIRCOSZW(:,:) & PZZ(:,:,D%NKA+JPVEXT_TURB*KKL) ) * PDIRCOSZW(:,:)
ZLM(:,:,JK) = ZALPHA * ZLM(:,:,JK) * ZL0 / ( ZL0 + ZALPHA*ZLM(:,:,JK) ) ZLM(:,:,JK) = ZALPHA * ZLM(:,:,JK) * ZL0 / ( ZL0 + ZALPHA*ZLM(:,:,JK) )
END DO END DO
!$mnh_end_expand_array(JI=1:D%NIT,JJ=1:D%NJT)
! !
ZLM(:,:,IKTB-1) = ZLM(:,:,IKTB) ZLM(:,:,IKTB-1) = ZLM(:,:,IKTB)
ZLM(:,:,IKTE+1) = ZLM(:,:,IKTE) ZLM(:,:,IKTE+1) = ZLM(:,:,IKTE)
...@@ -718,29 +746,39 @@ ENDIF ! end LHARRAT ...@@ -718,29 +746,39 @@ ENDIF ! end LHARRAT
! ------------------ ! ------------------
IF (OHARAT) THEN IF (OHARAT) THEN
ZLEPS=PLENGTHM*(3.75**2.) !$mnh_expand_array(JI=1:D%NIT,JJ=1:D%NJT,JK=1:D%NKT)
ZLEPS(:,:,:)=PLENGTHM(:,:,:)*(3.75**2.)
!$mnh_end_expand_array(JI=1:D%NIT,JJ=1:D%NJT,JK=1:D%NKT)
ELSE ELSE
ZLEPS=ZLM ZLEPS(:,:,:)=ZLM(:,:,:)
ENDIF ENDIF
! !
!* 3.7 Correction in the Surface Boundary Layer (Redelsperger 2001) !* 3.7 Correction in the Surface Boundary Layer (Redelsperger 2001)
! ---------------------------------------- ! ----------------------------------------
! !
ZLMO=XUNDEF !$mnh_expand_array(JI=1:D%NIT,JJ=1:D%NJT,JK=1:D%NKT)
ZLMO(:,:)=XUNDEF
!$mnh_end_expand_array(JI=1:D%NIT,JJ=1:D%NJT,JK=1:D%NKT)
IF (ORMC01) THEN IF (ORMC01) THEN
ZUSTAR=(PSFU**2+PSFV**2)**(0.25) !$mnh_expand_array(JI=1:D%NIT,JJ=1:D%NJT)
ZUSTAR(:,:)=(PSFU(:,:)**2+PSFV(:,:)**2)**(0.25)
!$mnh_end_expand_array(JI=1:D%NIT,JJ=1:D%NJT)
IF (KRR>0) THEN IF (KRR>0) THEN
ZLMO=LMO(ZUSTAR,ZTHLM(:,:,IKB),ZRM(:,:,IKB,1),PSFTH,PSFRV) ZLMO=LMO(ZUSTAR,ZTHLM(:,:,IKB),ZRM(:,:,IKB,1),PSFTH,PSFRV)
ELSE ELSE
ZRVM=0. ZRVM(:,:)=0.
ZSFRV=0. ZSFRV(:,:)=0.
ZLMO=LMO(ZUSTAR,ZTHLM(:,:,IKB),ZRVM,PSFTH,ZSFRV) ZLMO=LMO(ZUSTAR,ZTHLM(:,:,IKB),ZRVM,PSFTH,ZSFRV)
END IF END IF
CALL RMC01(HTURBLEN,D%NKA,KKU,KKL,PZZ,PDXX,PDYY,PDZZ,PDIRCOSZW,PSBL_DEPTH,ZLMO,ZLM,ZLEPS) CALL RMC01(HTURBLEN,D%NKA,KKU,KKL,PZZ,PDXX,PDYY,PDZZ,PDIRCOSZW,PSBL_DEPTH,ZLMO,ZLM,ZLEPS)
END IF END IF
! !
!RMC01 is only applied on RM17 in ADAP !RMC01 is only applied on RM17 in ADAP
IF (HTURBLEN=='ADAP') ZLEPS = MIN(ZLEPS,ZLMW*TURBN%XCADAP) IF (HTURBLEN=='ADAP') THEN
!$mnh_expand_array(JI=1:D%NIT,JJ=1:D%NJT,JK=1:D%NKT)
ZLEPS(:,:,:) = MIN(ZLEPS(:,:,:),ZLMW(:,:,:)*TURBN%XCADAP)
!$mnh_end_expand_array(JI=1:D%NIT,JJ=1:D%NJT,JK=1:D%NKT)
END IF
! !
!* 3.8 Mixing length in external points (used if HTURBDIM="3DIM") !* 3.8 Mixing length in external points (used if HTURBDIM="3DIM")
! ---------------------------------------------------------- ! ----------------------------------------------------------
...@@ -781,6 +819,7 @@ END IF ...@@ -781,6 +819,7 @@ END IF
! !
!* 4.2 compute the proportionality coefficient between wind and stress !* 4.2 compute the proportionality coefficient between wind and stress
! !
!$mnh_expand_array(JI=1:D%NIT,JJ=1:D%NJT)
ZCDUEFF(:,:) =-SQRT ( (PSFU(:,:)**2 + PSFV(:,:)**2) / & ZCDUEFF(:,:) =-SQRT ( (PSFU(:,:)**2 + PSFV(:,:)**2) / &
#ifdef REPRO48 #ifdef REPRO48
(1.E-60 + ZUSLOPE(:,:)**2 + ZVSLOPE(:,:)**2 ) ) (1.E-60 + ZUSLOPE(:,:)**2 + ZVSLOPE(:,:)**2 ) )
...@@ -790,11 +829,12 @@ ZCDUEFF(:,:) =-SQRT ( (PSFU(:,:)**2 + PSFV(:,:)**2) / & ...@@ -790,11 +829,12 @@ ZCDUEFF(:,:) =-SQRT ( (PSFU(:,:)**2 + PSFV(:,:)**2) / &
! !
!* 4.6 compute the surface tangential fluxes !* 4.6 compute the surface tangential fluxes
! !
ZTAU11M(:,:) =2./3.*( (1.+ (PZZ (:,:,IKB+KKL)-PZZ (:,:,IKB)) & ZTAU11M(:,:) =2./3.*( (1.+ (PZZ(:,:,IKB+KKL)-PZZ(:,:,IKB)) &
/(PDZZ(:,:,IKB+KKL)+PDZZ(:,:,IKB)) & /(PDZZ(:,:,IKB+KKL)+PDZZ(:,:,IKB)) &
) *PTKET(:,:,IKB) & ) *PTKET(:,:,IKB) &
-0.5 *PTKET(:,:,IKB+KKL) & -0.5 *PTKET(:,:,IKB+KKL) &
) )
!$mnh_end_expand_array(JI=1:D%NIT,JJ=1:D%NJT)
ZTAU12M(:,:) =0.0 ZTAU12M(:,:) =0.0
ZTAU22M(:,:) =ZTAU11M(:,:) ZTAU22M(:,:) =ZTAU11M(:,:)
ZTAU33M(:,:) =ZTAU11M(:,:) ZTAU33M(:,:) =ZTAU11M(:,:)
...@@ -803,11 +843,11 @@ ZTAU33M(:,:) =ZTAU11M(:,:) ...@@ -803,11 +843,11 @@ ZTAU33M(:,:) =ZTAU11M(:,:)
! ------------------------------------------------------------------ ! ------------------------------------------------------------------
! !
! !
ZMWTH = 0. ! w'2th' ZMWTH(:,:,:) = 0. ! w'2th'
ZMWR = 0. ! w'2r' ZMWR(:,:,:) = 0. ! w'2r'
ZMTH2 = 0. ! w'th'2 ZMTH2(:,:,:) = 0. ! w'th'2
ZMR2 = 0. ! w'r'2 ZMR2(:,:,:) = 0. ! w'r'2
ZMTHR = 0. ! w'th'r' ZMTHR(:,:,:) = 0. ! w'th'r'
IF (HTOM=='TM06') THEN IF (HTOM=='TM06') THEN
CALL TM06(D%NKA,KKU,KKL,PTHVREF,PBL_DEPTH,PZZ,PSFTH,ZMWTH,ZMTH2) CALL TM06(D%NKA,KKU,KKL,PTHVREF,PBL_DEPTH,PZZ,PSFTH,ZMWTH,ZMTH2)
...@@ -822,21 +862,21 @@ IF (HTOM=='TM06') THEN ...@@ -822,21 +862,21 @@ IF (HTOM=='TM06') THEN
ZFWTH(:,:,:IKTB) = 0. ZFWTH(:,:,:IKTB) = 0.
!ZFWR (:,:,IKTE:) = 0. !ZFWR (:,:,IKTE:) = 0.
!ZFWR (:,:,:IKTB) = 0. !ZFWR (:,:,:IKTB) = 0.
ZFWR = 0. ZFWR(:,:,:) = 0.
ZFTH2(:,:,IKTE:) = 0. ZFTH2(:,:,IKTE:) = 0.
ZFTH2(:,:,:IKTB) = 0. ZFTH2(:,:,:IKTB) = 0.
!ZFR2 (:,:,IKTE:) = 0. !ZFR2 (:,:,IKTE:) = 0.
!ZFR2 (:,:,:IKTB) = 0. !ZFR2 (:,:,:IKTB) = 0.
ZFR2 = 0. ZFR2(:,:,:) = 0.
!ZFTHR(:,:,IKTE:) = 0. !ZFTHR(:,:,IKTE:) = 0.
!ZFTHR(:,:,:IKTB) = 0. !ZFTHR(:,:,:IKTB) = 0.
ZFTHR = 0. ZFTHR(:,:,:) = 0.
ELSE ELSE
ZFWTH = 0. ZFWTH(:,:,:) = 0.
ZFWR = 0. ZFWR(:,:,:) = 0.
ZFTH2 = 0. ZFTH2(:,:,:) = 0.
ZFR2 = 0. ZFR2(:,:,:) = 0.
ZFTHR = 0. ZFTHR(:,:,:) = 0.
ENDIF ENDIF
! !
!---------------------------------------------------------------------------- !----------------------------------------------------------------------------
...@@ -1035,10 +1075,17 @@ END IF ...@@ -1035,10 +1075,17 @@ END IF
! !
! 6.1 Contribution of mass-flux in the TKE buoyancy production if ! 6.1 Contribution of mass-flux in the TKE buoyancy production if
! cloud computation is not statistical ! cloud computation is not statistical
ZWORK1 = MZF(PFLXZTHVMF,D%NKA, KKU, KKL)
!$mnh_expand_array(JI=1:D%NIT,JJ=1:D%NJT,JK=1:D%NKT)
PTP(:,:,:) = PTP(:,:,:) + CST%XG / PTHVREF(:,:,:) * ZWORK1(:,:,:)
!$mnh_end_expand_array(JI=1:D%NIT,JJ=1:D%NJT,JK=1:D%NKT)
PTP = PTP + CST%XG / PTHVREF * MZF(PFLXZTHVMF,D%NKA, KKU, KKL) IF(PRESENT(PTPMF)) THEN
IF(PRESENT(PTPMF)) PTPMF=CST%XG / PTHVREF * MZF(PFLXZTHVMF, D%NKA, KKU, KKL) ZWORK1 = MZF(PFLXZTHVMF, D%NKA, KKU, KKL)
!$mnh_expand_array(JI=1:D%NIT,JJ=1:D%NJT,JK=1:D%NKT)
PTPMF(:,:,:)=CST%XG / PTHVREF(:,:,:) * ZWORK1(:,:,:)
!$mnh_end_expand_array(JI=1:D%NIT,JJ=1:D%NJT,JK=1:D%NKT)
END IF
! 6.2 TKE evolution equation ! 6.2 TKE evolution equation
IF (.NOT. OHARAT) THEN IF (.NOT. OHARAT) THEN
...@@ -1055,9 +1102,9 @@ IF (BUCONF%LBUDGET_TH) THEN ...@@ -1055,9 +1102,9 @@ IF (BUCONF%LBUDGET_TH) THEN
END IF END IF
! !
IF(PRESENT(PRTKEMS)) THEN IF(PRESENT(PRTKEMS)) THEN
ZRTKEMS=PRTKEMS ZRTKEMS(:,:,:)=PRTKEMS(:,:,:)
ELSE ELSE
ZRTKEMS=0. ZRTKEMS(:,:,:)=0.
END IF END IF
! !
CALL TKE_EPS_SOURCES(D,CST,CSTURB,BUCONF,HPROGRAM,& CALL TKE_EPS_SOURCES(D,CST,CSTURB,BUCONF,HPROGRAM,&
...@@ -1136,11 +1183,15 @@ END IF ...@@ -1136,11 +1183,15 @@ END IF
! !
!* stores value of conservative variables & wind before turbulence tendency (AROME only) !* stores value of conservative variables & wind before turbulence tendency (AROME only)
IF(PRESENT(PDRUS_TURB)) THEN IF(PRESENT(PDRUS_TURB)) THEN
PDRUS_TURB = PRUS - PDRUS_TURB !$mnh_expand_array(JI=1:D%NIT,JJ=1:D%NJT,JK=1:D%NKT)
PDRVS_TURB = PRVS - PDRVS_TURB PDRUS_TURB(:,:,:) = PRUS(:,:,:) - PDRUS_TURB(:,:,:)
PDRTHLS_TURB = PRTHLS - PDRTHLS_TURB PDRVS_TURB(:,:,:) = PRVS(:,:,:) - PDRVS_TURB(:,:,:)
PDRRTS_TURB = PRRS(:,:,:,1) - PDRRTS_TURB PDRTHLS_TURB(:,:,:) = PRTHLS(:,:,:) - PDRTHLS_TURB(:,:,:)
PDRSVS_TURB = PRSVS - PDRSVS_TURB PDRRTS_TURB(:,:,:) = PRRS(:,:,:,1) - PDRRTS_TURB(:,:,:)
!$mnh_end_expand_array(JI=1:D%NIT,JJ=1:D%NJT,JK=1:D%NKT)
!$mnh_expand_array(JI=1:D%NIT,JJ=1:D%NJT,JK=1:D%NKT,JSV=1:KSV)
PDRSVS_TURB(:,:,:,:) = PRSVS(:,:,:,:) - PDRSVS_TURB(:,:,:,:)
!$mnh_end_expand_array(JI=1:D%NIT,JJ=1:D%NJT,JK=1:D%NKT,JSV=1:KSV)
END IF END IF
!---------------------------------------------------------------------------- !----------------------------------------------------------------------------
! !
...@@ -1149,18 +1200,22 @@ END IF ...@@ -1149,18 +1200,22 @@ END IF
! !
IF ( KRRL >= 1 ) THEN IF ( KRRL >= 1 ) THEN
IF ( KRRI >= 1 ) THEN IF ( KRRI >= 1 ) THEN
!$mnh_expand_array(JI=1:D%NIT,JJ=1:D%NJT,JK=1:D%NKT)
PRT(:,:,:,1) = PRT(:,:,:,1) - PRT(:,:,:,2) - PRT(:,:,:,4) PRT(:,:,:,1) = PRT(:,:,:,1) - PRT(:,:,:,2) - PRT(:,:,:,4)
PRRS(:,:,:,1) = PRRS(:,:,:,1) - PRRS(:,:,:,2) - PRRS(:,:,:,4) PRRS(:,:,:,1) = PRRS(:,:,:,1) - PRRS(:,:,:,2) - PRRS(:,:,:,4)
PTHLT(:,:,:) = PTHLT(:,:,:) + ZLVOCPEXNM(:,:,:) * PRT(:,:,:,2) & PTHLT(:,:,:) = PTHLT(:,:,:) + ZLVOCPEXNM(:,:,:) * PRT(:,:,:,2) &
+ ZLSOCPEXNM(:,:,:) * PRT(:,:,:,4) + ZLSOCPEXNM(:,:,:) * PRT(:,:,:,4)
PRTHLS(:,:,:) = PRTHLS(:,:,:) + ZLVOCPEXNM(:,:,:) * PRRS(:,:,:,2) & PRTHLS(:,:,:) = PRTHLS(:,:,:) + ZLVOCPEXNM(:,:,:) * PRRS(:,:,:,2) &
+ ZLSOCPEXNM(:,:,:) * PRRS(:,:,:,4) + ZLSOCPEXNM(:,:,:) * PRRS(:,:,:,4)
!$mnh_end_expand_array(JI=1:D%NIT,JJ=1:D%NJT,JK=1:D%NKT)
! !
ELSE ELSE
!$mnh_expand_array(JI=1:D%NIT,JJ=1:D%NJT,JK=1:D%NKT)
PRT(:,:,:,1) = PRT(:,:,:,1) - PRT(:,:,:,2) PRT(:,:,:,1) = PRT(:,:,:,1) - PRT(:,:,:,2)
PRRS(:,:,:,1) = PRRS(:,:,:,1) - PRRS(:,:,:,2) PRRS(:,:,:,1) = PRRS(:,:,:,1) - PRRS(:,:,:,2)
PTHLT(:,:,:) = PTHLT(:,:,:) + ZLOCPEXNM(:,:,:) * PRT(:,:,:,2) PTHLT(:,:,:) = PTHLT(:,:,:) + ZLOCPEXNM(:,:,:) * PRT(:,:,:,2)
PRTHLS(:,:,:) = PRTHLS(:,:,:) + ZLOCPEXNM(:,:,:) * PRRS(:,:,:,2) PRTHLS(:,:,:) = PRTHLS(:,:,:) + ZLOCPEXNM(:,:,:) * PRRS(:,:,:,2)
!$mnh_end_expand_array(JI=1:D%NIT,JJ=1:D%NJT,JK=1:D%NKT)
END IF END IF
END IF END IF
...@@ -1201,8 +1256,8 @@ IF (OLES_CALL) THEN ...@@ -1201,8 +1256,8 @@ IF (OLES_CALL) THEN
! !
IF (HTURBDIM=="1DIM") THEN IF (HTURBDIM=="1DIM") THEN
CALL LES_MEAN_SUBGRID(2./3.*PTKET,X_LES_SUBGRID_U2) CALL LES_MEAN_SUBGRID(2./3.*PTKET,X_LES_SUBGRID_U2)
X_LES_SUBGRID_V2 = X_LES_SUBGRID_U2 X_LES_SUBGRID_V2(:,:,:) = X_LES_SUBGRID_U2(:,:,:)
X_LES_SUBGRID_W2 = X_LES_SUBGRID_U2 X_LES_SUBGRID_W2(:,:,:) = X_LES_SUBGRID_U2(:,:,:)
CALL LES_MEAN_SUBGRID(2./3.*PTKET*MZF(GZ_M_W(D%NKA,KKU,KKL,PTHLT,PDZZ),& CALL LES_MEAN_SUBGRID(2./3.*PTKET*MZF(GZ_M_W(D%NKA,KKU,KKL,PTHLT,PDZZ),&
D%NKA, KKU, KKL),X_LES_RES_ddz_Thl_SBG_W2) D%NKA, KKU, KKL),X_LES_RES_ddz_Thl_SBG_W2)
IF (KRR>=1) & IF (KRR>=1) &
...@@ -1224,14 +1279,14 @@ IF (OLES_CALL) THEN ...@@ -1224,14 +1279,14 @@ IF (OLES_CALL) THEN
! !
!* presso-correlations for subgrid Tke are equal to zero. !* presso-correlations for subgrid Tke are equal to zero.
! !
ZLEPS = 0. !ZLEPS is used as a work array (not used anymore) ZLEPS(:,:,:) = 0. !ZLEPS is used as a work array (not used anymore)
CALL LES_MEAN_SUBGRID(ZLEPS,X_LES_SUBGRID_WP) CALL LES_MEAN_SUBGRID(ZLEPS,X_LES_SUBGRID_WP)
! !
CALL SECOND_MNH(ZTIME2) CALL SECOND_MNH(ZTIME2)
XTIME_LES = XTIME_LES + ZTIME2 - ZTIME1 XTIME_LES = XTIME_LES + ZTIME2 - ZTIME1
END IF END IF
! !
IF(PRESENT(PLEM)) PLEM = ZLM IF(PRESENT(PLEM)) PLEM(:,:,:) = ZLM(:,:,:)
!---------------------------------------------------------------------------- !----------------------------------------------------------------------------
! !
IF (LHOOK) CALL DR_HOOK('TURB',1,ZHOOK_HANDLE) IF (LHOOK) CALL DR_HOOK('TURB',1,ZHOOK_HANDLE)
...@@ -1353,6 +1408,7 @@ REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(OUT) :: PAMOIST,PATHETA ...@@ -1353,6 +1408,7 @@ REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(OUT) :: PAMOIST,PATHETA
REAL :: ZEPS ! XMV / XMD REAL :: ZEPS ! XMV / XMD
REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: ZRVSAT REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: ZRVSAT
REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: ZDRVSATDT REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: ZDRVSATDT
INTEGER :: JI,JJ,JK
! !
!------------------------------------------------------------------------------- !-------------------------------------------------------------------------------
! !
...@@ -1362,6 +1418,7 @@ REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: ZDRVSATDT ...@@ -1362,6 +1418,7 @@ REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: ZDRVSATDT
! !
!* 1.1 Lv/Cph at t !* 1.1 Lv/Cph at t
! !
!$mnh_expand_array(JI=1:D%NIT,JJ=1:D%NJT,JK=1:D%NKT)
PLOCPEXN(:,:,:) = ( PLTT + (CST%XCPV-PC) * (PT(:,:,:)-CST%XTT) ) / PCP(:,:,:) PLOCPEXN(:,:,:) = ( PLTT + (CST%XCPV-PC) * (PT(:,:,:)-CST%XTT) ) / PCP(:,:,:)
! !
!* 1.2 Saturation vapor pressure at t !* 1.2 Saturation vapor pressure at t
...@@ -1398,6 +1455,7 @@ REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: ZDRVSATDT ...@@ -1398,6 +1455,7 @@ REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: ZDRVSATDT
!* 1.7 Lv/Cph/Exner at t-1 !* 1.7 Lv/Cph/Exner at t-1
! !
PLOCPEXN(:,:,:) = PLOCPEXN(:,:,:) / PEXN(:,:,:) PLOCPEXN(:,:,:) = PLOCPEXN(:,:,:) / PEXN(:,:,:)
!$mnh_end_expand_array(JI=1:D%NIT,JJ=1:D%NJT,JK=1:D%NKT)
! !
IF (LHOOK) CALL DR_HOOK('TURB:COMPUTE_FUNCTION_THERMO',1,ZHOOK_HANDLE) IF (LHOOK) CALL DR_HOOK('TURB:COMPUTE_FUNCTION_THERMO',1,ZHOOK_HANDLE)
END SUBROUTINE COMPUTE_FUNCTION_THERMO END SUBROUTINE COMPUTE_FUNCTION_THERMO
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment