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

Quentin 29/04/2022: Expand in physical points : turb_ver_sv_flux

parent 441d1245
No related branches found
No related tags found
No related merge requests found
...@@ -139,7 +139,7 @@ REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: ZY ,ZGAM ...@@ -139,7 +139,7 @@ REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: ZY ,ZGAM
REAL, DIMENSION(D%NIT,D%NJT) :: ZBET REAL, DIMENSION(D%NIT,D%NJT) :: ZBET
! 2D work array ! 2D work array
INTEGER :: JI,JJ,JK ! loop counter INTEGER :: JI,JJ,JK ! loop counter
INTEGER :: IKB,IKE ! inner vertical limits INTEGER :: IKB,IKE,IIB,IIE,IJB,IJE ! inner vertical limits
INTEGER :: IKT ! array size in k direction INTEGER :: IKT ! array size in k direction
INTEGER :: IKTB,IKTE ! start, end of k loops in physical domain INTEGER :: IKTB,IKTE ! start, end of k loops in physical domain
...@@ -157,27 +157,31 @@ IKTB=D%NKTB ...@@ -157,27 +157,31 @@ IKTB=D%NKTB
IKTE=D%NKTE IKTE=D%NKTE
IKB=D%NKB IKB=D%NKB
IKE=D%NKE IKE=D%NKE
IIE=D%NIEC
IIB=D%NIBC
IJE=D%NJEC
IJB=D%NJBC
! !
!$mnh_expand_array(JI=1:D%NIT,JJ=1:D%NJT) !$mnh_expand_array(JI=IIB:IIE,JJ=IJB:IJE)
ZY(:,:,IKB) = PVARM(:,:,IKB) + PTSTEP*PSOURCE(:,:,IKB) - & ZY(IIB:IIE,IJB:IJE,IKB) = PVARM(IIB:IIE,IJB:IJE,IKB) + PTSTEP*PSOURCE(IIB:IIE,IJB:IJE,IKB) - &
PEXPL / PRHODJ(:,:,IKB) * PA(:,:,IKB+D%NKL) * (PVARM(:,:,IKB+D%NKL) - PVARM(:,:,IKB)) PEXPL / PRHODJ(IIB:IIE,IJB:IJE,IKB) * PA(IIB:IIE,IJB:IJE,IKB+D%NKL) * (PVARM(IIB:IIE,IJB:IJE,IKB+D%NKL) - PVARM(IIB:IIE,IJB:IJE,IKB))
!$mnh_end_expand_array(JI=1:D%NIT,JJ=1:D%NJT) !$mnh_end_expand_array(JI=IIB:IIE,JJ=IJB:IJE)
! !
DO JK=IKTB+1,IKTE-1 DO JK=IKTB+1,IKTE-1
!$mnh_expand_array(JI=1:D%NIT,JJ=1:D%NJT) !$mnh_expand_array(JI=IIB:IIE,JJ=IJB:IJE)
ZY(:,:,JK)= PVARM(:,:,JK) + PTSTEP*PSOURCE(:,:,JK) - & ZY(IIB:IIE,IJB:IJE,JK)= PVARM(IIB:IIE,IJB:IJE,JK) + PTSTEP*PSOURCE(IIB:IIE,IJB:IJE,JK) - &
PEXPL / PRHODJ(:,:,JK) * & PEXPL / PRHODJ(IIB:IIE,IJB:IJE,JK) * &
( PVARM(:,:,JK-D%NKL)*PA(:,:,JK) & ( PVARM(IIB:IIE,IJB:IJE,JK-D%NKL)*PA(IIB:IIE,IJB:IJE,JK) &
-PVARM(:,:,JK)*(PA(:,:,JK)+PA(:,:,JK+D%NKL)) & -PVARM(IIB:IIE,IJB:IJE,JK)*(PA(IIB:IIE,IJB:IJE,JK)+PA(IIB:IIE,IJB:IJE,JK+D%NKL)) &
+PVARM(:,:,JK+D%NKL)*PA(:,:,JK+D%NKL) & +PVARM(IIB:IIE,IJB:IJE,JK+D%NKL)*PA(IIB:IIE,IJB:IJE,JK+D%NKL) &
) )
!$mnh_end_expand_array(JI=1:D%NIT,JJ=1:D%NJT) !$mnh_end_expand_array(JI=IIB:IIE,JJ=IJB:IJE)
END DO END DO
! !
!$mnh_expand_array(JI=1:D%NIT,JJ=1:D%NJT) !$mnh_expand_array(JI=IIB:IIE,JJ=IJB:IJE)
ZY(:,:,IKE)= PVARM(:,:,IKE) + PTSTEP*PSOURCE(:,:,IKE) + & ZY(IIB:IIE,IJB:IJE,IKE)= PVARM(IIB:IIE,IJB:IJE,IKE) + PTSTEP*PSOURCE(IIB:IIE,IJB:IJE,IKE) + &
PEXPL / PRHODJ(:,:,IKE) * PA(:,:,IKE) * (PVARM(:,:,IKE)-PVARM(:,:,IKE-D%NKL)) PEXPL / PRHODJ(IIB:IIE,IJB:IJE,IKE) * PA(IIB:IIE,IJB:IJE,IKE) * (PVARM(IIB:IIE,IJB:IJE,IKE)-PVARM(IIB:IIE,IJB:IJE,IKE-D%NKL))
!$mnh_end_expand_array(JI=1:D%NIT,JJ=1:D%NJT) !$mnh_end_expand_array(JI=IIB:IIE,JJ=IJB:IJE)
! !
! !
!* 2. INVERSION OF THE TRIDIAGONAL SYSTEM !* 2. INVERSION OF THE TRIDIAGONAL SYSTEM
...@@ -188,53 +192,53 @@ IF ( PIMPL > 1.E-10 ) THEN ...@@ -188,53 +192,53 @@ IF ( PIMPL > 1.E-10 ) THEN
! !
! going up ! going up
! !
!$mnh_expand_array(JI=1:D%NIT,JJ=1:D%NJT) !$mnh_expand_array(JI=IIB:IIE,JJ=IJB:IJE)
ZBET(:,:) = 1. - PIMPL * PA(:,:,IKB+D%NKL) / PRHODJ(:,:,IKB) ! bet = b(ikb) ZBET(IIB:IIE,IJB:IJE) = 1. - PIMPL * PA(IIB:IIE,IJB:IJE,IKB+D%NKL) / PRHODJ(IIB:IIE,IJB:IJE,IKB) ! bet = b(ikb)
PVARP(:,:,IKB) = ZY(:,:,IKB) / ZBET(:,:) PVARP(IIB:IIE,IJB:IJE,IKB) = ZY(IIB:IIE,IJB:IJE,IKB) / ZBET(IIB:IIE,IJB:IJE)
!$mnh_end_expand_array(JI=1:D%NIT,JJ=1:D%NJT) !$mnh_end_expand_array(JI=IIB:IIE,JJ=IJB:IJE)
! !
DO JK = IKB+D%NKL,IKE-D%NKL,D%NKL DO JK = IKB+D%NKL,IKE-D%NKL,D%NKL
!$mnh_expand_array(JI=1:D%NIT,JJ=1:D%NJT) !$mnh_expand_array(JI=IIB:IIE,JJ=IJB:IJE)
ZGAM(:,:,JK) = PIMPL * PA(:,:,JK) / PRHODJ(:,:,JK-D%NKL) / ZBET(:,:) ZGAM(IIB:IIE,IJB:IJE,JK) = PIMPL * PA(IIB:IIE,IJB:IJE,JK) / PRHODJ(IIB:IIE,IJB:IJE,JK-D%NKL) / ZBET(IIB:IIE,IJB:IJE)
! gam(k) = c(k-1) / bet ! gam(k) = c(k-1) / bet
ZBET(:,:) = 1. - PIMPL * ( PA(:,:,JK) * (1. + ZGAM(:,:,JK)) & ZBET(IIB:IIE,IJB:IJE) = 1. - PIMPL * ( PA(IIB:IIE,IJB:IJE,JK) * (1. + ZGAM(IIB:IIE,IJB:IJE,JK)) &
+ PA(:,:,JK+D%NKL) & + PA(IIB:IIE,IJB:IJE,JK+D%NKL) &
) / PRHODJ(:,:,JK) ) / PRHODJ(IIB:IIE,IJB:IJE,JK)
! bet = b(k) - a(k)* gam(k) ! bet = b(k) - a(k)* gam(k)
PVARP(:,:,JK)= ( ZY(:,:,JK) - PIMPL * PA(:,:,JK) / PRHODJ(:,:,JK) & PVARP(IIB:IIE,IJB:IJE,JK)= ( ZY(IIB:IIE,IJB:IJE,JK) - PIMPL * PA(IIB:IIE,IJB:IJE,JK) / PRHODJ(IIB:IIE,IJB:IJE,JK) &
* PVARP(:,:,JK-D%NKL) & * PVARP(IIB:IIE,IJB:IJE,JK-D%NKL) &
) / ZBET(:,:) ) / ZBET(IIB:IIE,IJB:IJE)
! res(k) = (y(k) -a(k)*res(k-1))/ bet ! res(k) = (y(k) -a(k)*res(k-1))/ bet
!$mnh_end_expand_array(JI=1:D%NIT,JJ=1:D%NJT) !$mnh_end_expand_array(JI=IIB:IIE,JJ=IJB:IJE)
END DO END DO
!$mnh_expand_array(JI=1:D%NIT,JJ=1:D%NJT) !$mnh_expand_array(JI=IIB:IIE,JJ=IJB:IJE)
! special treatment for the last level ! special treatment for the last level
ZGAM(:,:,IKE) = PIMPL * PA(:,:,IKE) / PRHODJ(:,:,IKE-D%NKL) / ZBET(:,:) ZGAM(IIB:IIE,IJB:IJE,IKE) = PIMPL * PA(IIB:IIE,IJB:IJE,IKE) / PRHODJ(IIB:IIE,IJB:IJE,IKE-D%NKL) / ZBET(IIB:IIE,IJB:IJE)
! gam(k) = c(k-1) / bet ! gam(k) = c(k-1) / bet
ZBET(:,:) = 1. - PIMPL * ( PA(:,:,IKE) * (1. + ZGAM(:,:,IKE)) & ZBET(IIB:IIE,IJB:IJE) = 1. - PIMPL * ( PA(IIB:IIE,IJB:IJE,IKE) * (1. + ZGAM(IIB:IIE,IJB:IJE,IKE)) &
) / PRHODJ(:,:,IKE) ) / PRHODJ(IIB:IIE,IJB:IJE,IKE)
! bet = b(k) - a(k)* gam(k) ! bet = b(k) - a(k)* gam(k)
PVARP(:,:,IKE)= ( ZY(:,:,IKE) - PIMPL * PA(:,:,IKE) / PRHODJ(:,:,IKE) & PVARP(IIB:IIE,IJB:IJE,IKE)= ( ZY(IIB:IIE,IJB:IJE,IKE) - PIMPL * PA(IIB:IIE,IJB:IJE,IKE) / PRHODJ(IIB:IIE,IJB:IJE,IKE) &
* PVARP(:,:,IKE-D%NKL) & * PVARP(IIB:IIE,IJB:IJE,IKE-D%NKL) &
) / ZBET(:,:) ) / ZBET(IIB:IIE,IJB:IJE)
! res(k) = (y(k) -a(k)*res(k-1))/ bet ! res(k) = (y(k) -a(k)*res(k-1))/ bet
! !
! going down ! going down
! !
!$mnh_end_expand_array(JI=1:D%NIT,JJ=1:D%NJT) !$mnh_end_expand_array(JI=IIB:IIE,JJ=IJB:IJE)
DO JK = IKE-D%NKL,IKB,-1*D%NKL DO JK = IKE-D%NKL,IKB,-1*D%NKL
!$mnh_expand_array(JI=1:D%NIT,JJ=1:D%NJT) !$mnh_expand_array(JI=IIB:IIE,JJ=IJB:IJE)
PVARP(:,:,JK) = PVARP(:,:,JK) - ZGAM(:,:,JK+D%NKL) * PVARP(:,:,JK+D%NKL) PVARP(IIB:IIE,IJB:IJE,JK) = PVARP(IIB:IIE,IJB:IJE,JK) - ZGAM(IIB:IIE,IJB:IJE,JK+D%NKL) * PVARP(IIB:IIE,IJB:IJE,JK+D%NKL)
!$mnh_end_expand_array(JI=1:D%NIT,JJ=1:D%NJT) !$mnh_end_expand_array(JI=IIB:IIE,JJ=IJB:IJE)
END DO END DO
! !
ELSE ELSE
! !
!$mnh_expand_array(JI=1:D%NIT,JJ=1:D%NJT) !$mnh_expand_array(JI=IIB:IIE,JJ=IJB:IJE)
DO JK=IKTB,IKTE DO JK=IKTB,IKTE
PVARP(:,:,JK) = ZY(:,:,JK) PVARP(IIB:IIE,IJB:IJE,JK) = ZY(IIB:IIE,IJB:IJE,JK)
END DO END DO
!$mnh_end_expand_array(JI=1:D%NIT,JJ=1:D%NJT) !$mnh_end_expand_array(JI=IIB:IIE,JJ=IJB:IJE)
! !
END IF END IF
! !
...@@ -242,10 +246,10 @@ END IF ...@@ -242,10 +246,10 @@ END IF
!* 3. FILL THE UPPER AND LOWER EXTERNAL VALUES !* 3. FILL THE UPPER AND LOWER EXTERNAL VALUES
! ---------------------------------------- ! ----------------------------------------
! !
!$mnh_expand_array(JI=1:D%NIT,JJ=1:D%NJT) !$mnh_expand_array(JI=IIB:IIE,JJ=IJB:IJE)
PVARP(:,:,D%NKA)=PVARP(:,:,IKB) PVARP(IIB:IIE,IJB:IJE,D%NKA)=PVARP(IIB:IIE,IJB:IJE,IKB)
PVARP(:,:,D%NKU)=PVARP(:,:,IKE) PVARP(IIB:IIE,IJB:IJE,D%NKU)=PVARP(IIB:IIE,IJB:IJE,IKE)
!$mnh_end_expand_array(JI=1:D%NIT,JJ=1:D%NJT) !$mnh_end_expand_array(JI=IIB:IIE,JJ=IJB:IJE)
! !
!------------------------------------------------------------------------------- !-------------------------------------------------------------------------------
! !
......
...@@ -225,6 +225,7 @@ USE MODI_GRADIENT_U ...@@ -225,6 +225,7 @@ USE MODI_GRADIENT_U
USE MODI_GRADIENT_V USE MODI_GRADIENT_V
USE MODI_GRADIENT_W USE MODI_GRADIENT_W
USE MODI_GRADIENT_M USE MODI_GRADIENT_M
USE SHUMAN_PHY , ONLY : DZM_PHY, MZM_PHY, MZF_PHY
USE MODI_SHUMAN , ONLY : DZM, MZM, MZF USE MODI_SHUMAN , ONLY : DZM, MZM, MZF
USE MODE_TRIDIAG, ONLY: TRIDIAG USE MODE_TRIDIAG, ONLY: TRIDIAG
USE MODE_EMOIST, ONLY: EMOIST USE MODE_EMOIST, ONLY: EMOIST
...@@ -292,10 +293,10 @@ REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: & ...@@ -292,10 +293,10 @@ REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: &
ZFLXZ, & ! vertical flux of the treated variable ZFLXZ, & ! vertical flux of the treated variable
ZSOURCE, & ! source of evolution for the treated variable ZSOURCE, & ! source of evolution for the treated variable
ZKEFF, & ! effectif diffusion coeff = LT * SQRT( TKE ) ZKEFF, & ! effectif diffusion coeff = LT * SQRT( TKE )
ZWORK1,ZWORK2! working var. for shuman operators (array syntax) ZWORK1,ZWORK2,&
INTEGER :: IKB,IKE ! I index values for the Beginning and End ZWORK3,ZWORK4! working var. for shuman operators (array syntax)
! mass points of the domain in the 3 direct.
INTEGER :: IKT ! array size in k direction INTEGER :: IKT ! array size in k direction
INTEGER :: IIE,IIB,IJE,IJB,IKB,IKE ! index value for the mass points of the domain
INTEGER :: IKTB,IKTE ! start, end of k loops in physical domain INTEGER :: IKTB,IKTE ! start, end of k loops in physical domain
INTEGER :: JSV ! loop counters INTEGER :: JSV ! loop counters
INTEGER :: JI,JJ,JK ! loop INTEGER :: JI,JJ,JK ! loop
...@@ -318,14 +319,21 @@ IKT=D%NKT ...@@ -318,14 +319,21 @@ IKT=D%NKT
IKTB=D%NKTB IKTB=D%NKTB
IKTE=D%NKTE IKTE=D%NKTE
IKB=D%NKB IKB=D%NKB
IKE=D%NKE IKE=D%NKE
IIE=D%NIE
IIB=D%NIB
IJE=D%NJE
IJB=D%NJB
! !
IF (OHARAT) THEN IF (OHARAT) THEN
!$mnh_expand_array(JI=1:D%NIT,JJ=1:D%NJT,JK=1:D%NKT) !$mnh_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:D%NKT)
ZKEFF(:,:,:) = PLM(:,:,:) * SQRT(PTKEM(:,:,:)) + 50.*MFMOIST(:,:,:) ZKEFF(IIB:IIE,IJB:IJE,IKB:IKE) = PLM(IIB:IIE,IJB:IJE,IKB:IKE) * SQRT(PTKEM(IIB:IIE,IJB:IJE,IKB:IKE)) + 50.*MFMOIST(IIB:IIE,IJB:IJE,IKB:IKE)
!$mnh_end_expand_array(JI=1:D%NIT,JJ=1:D%NJT,JK=1:D%NKT) !$mnh_end_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:D%NKT)
ELSE ELSE
ZKEFF(:,:,:) = MZM(PLM(:,:,:) * SQRT(PTKEM(:,:,:)), D%NKA, D%NKU, D%NKL) !$mnh_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:D%NKT)
ZWORK1(IIB:IIE,IJB:IJE,1:D%NKT) = PLM(IIB:IIE,IJB:IJE,1:D%NKT)*SQRT(PTKEM(IIB:IIE,IJB:IJE,1:D%NKT))
!$mnh_end_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:D%NKT)
CALL MZM_PHY(D,ZWORK1,ZKEFF)
ENDIF ENDIF
! !
IF(OBLOWSNOW) THEN IF(OBLOWSNOW) THEN
...@@ -339,23 +347,23 @@ ENDIF ...@@ -339,23 +347,23 @@ ENDIF
!* 8. SOURCES OF PASSIVE SCALAR VARIABLES !* 8. SOURCES OF PASSIVE SCALAR VARIABLES
! ----------------------------------- ! -----------------------------------
! !
ZWORK1=MZM(PRHODJ, D%NKA, D%NKU, D%NKL) CALL MZM_PHY(D,PRHODJ,ZWORK1)
DO JSV=1,KSV DO JSV=1,KSV
! !
IF (ONOMIXLG .AND. JSV >= KSV_LGBEG .AND. JSV<= KSV_LGEND) CYCLE IF (ONOMIXLG .AND. JSV >= KSV_LGBEG .AND. JSV<= KSV_LGEND) CYCLE
! !
! Preparation of the arguments for TRIDIAG ! Preparation of the arguments for TRIDIAG
IF (OHARAT) THEN IF (OHARAT) THEN
!$mnh_expand_array(JI=1:D%NIT,JJ=1:D%NJT,JK=1:D%NKT) !$mnh_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:D%NKT)
ZA(:,:,:) = -PTSTEP * ZKEFF(:,:,:) * ZWORK1(:,:,:) / PDZZ(:,:,:)**2 ZA(IIB:IIE,IJB:IJE,IKB:IKE) = -PTSTEP * ZKEFF(IIB:IIE,IJB:IJE,IKB:IKE) * ZWORK1(IIB:IIE,IJB:IJE,IKB:IKE) / PDZZ(IIB:IIE,IJB:IJE,IKB:IKE)**2
!$mnh_end_expand_array(JI=1:D%NIT,JJ=1:D%NJT,JK=1:D%NKT) !$mnh_end_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:D%NKT)
ELSE ELSE
!$mnh_expand_array(JI=1:D%NIT,JJ=1:D%NJT,JK=1:D%NKT) !$mnh_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:D%NKT)
ZA(:,:,:) = -PTSTEP*ZCSV*PPSI_SV(:,:,:,JSV) * & ZA(IIB:IIE,IJB:IJE,IKB:IKE) = -PTSTEP*ZCSV*PPSI_SV(IIB:IIE,IJB:IJE,IKB:IKE,JSV) * &
ZKEFF(:,:,:) * ZWORK1(:,:,:) / PDZZ(:,:,:)**2 ZKEFF(IIB:IIE,IJB:IJE,IKB:IKE) * ZWORK1(IIB:IIE,IJB:IJE,IKB:IKE) / PDZZ(IIB:IIE,IJB:IJE,IKB:IKE)**2
!$mnh_end_expand_array(JI=1:D%NIT,JJ=1:D%NJT,JK=1:D%NKT) !$mnh_end_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:D%NKT)
ENDIF ENDIF
ZSOURCE(:,:,:) = 0. ZSOURCE(IIB:IIE,IJB:IJE,IKB:IKE) = 0.
! !
! Compute the sources for the JSVth scalar variable ! Compute the sources for the JSVth scalar variable
...@@ -364,70 +372,74 @@ DO JSV=1,KSV ...@@ -364,70 +372,74 @@ DO JSV=1,KSV
!* in 1DIM case, the part of energy released in horizontal flux !* in 1DIM case, the part of energy released in horizontal flux
! is taken into account in the vertical part ! is taken into account in the vertical part
IF (HTURBDIM=='3DIM') THEN IF (HTURBDIM=='3DIM') THEN
!$mnh_expand_array(JI=1:D%NIT,JJ=1:D%NJT) !$mnh_expand_array(JI=IIB:IIE,JJ=IJB:IJE)
ZSOURCE(:,:,IKB) = (PIMPL*PSFSVP(:,:,JSV) + PEXPL*PSFSVM(:,:,JSV)) / & ZSOURCE(IIB:IIE,IJB:IJE,IKB) = (PIMPL*PSFSVP(IIB:IIE,IJB:IJE,JSV) + PEXPL*PSFSVM(IIB:IIE,IJB:IJE,JSV)) / &
PDZZ(:,:,IKB) * PDIRCOSZW(:,:) & PDZZ(IIB:IIE,IJB:IJE,IKB) * PDIRCOSZW(IIB:IIE,IJB:IJE) &
* 0.5 * (1. + PRHODJ(:,:,D%NKA) / PRHODJ(:,:,IKB)) * 0.5 * (1. + PRHODJ(IIB:IIE,IJB:IJE,D%NKA) / PRHODJ(IIB:IIE,IJB:IJE,IKB))
!$mnh_end_expand_array(JI=1:D%NIT,JJ=1:D%NJT) !$mnh_end_expand_array(JI=IIB:IIE,JJ=IJB:IJE)
ELSE ELSE
!$mnh_expand_array(JI=1:D%NIT,JJ=1:D%NJT) !$mnh_expand_array(JI=IIB:IIE,JJ=IJB:IJE)
ZSOURCE(:,:,IKB) = (PIMPL*PSFSVP(:,:,JSV) + PEXPL*PSFSVM(:,:,JSV)) / & ZSOURCE(IIB:IIE,IJB:IJE,IKB) = (PIMPL*PSFSVP(IIB:IIE,IJB:IJE,JSV) + PEXPL*PSFSVM(IIB:IIE,IJB:IJE,JSV)) / &
PDZZ(:,:,IKB) / PDIRCOSZW(:,:) & PDZZ(IIB:IIE,IJB:IJE,IKB) / PDIRCOSZW(IIB:IIE,IJB:IJE) &
* 0.5 * (1. + PRHODJ(:,:,D%NKA) / PRHODJ(:,:,IKB)) * 0.5 * (1. + PRHODJ(IIB:IIE,IJB:IJE,D%NKA) / PRHODJ(IIB:IIE,IJB:IJE,IKB))
!$mnh_end_expand_array(JI=1:D%NIT,JJ=1:D%NJT) !$mnh_end_expand_array(JI=IIB:IIE,JJ=IJB:IJE)
END IF END IF
ZSOURCE(:,:,IKTB+1:IKTE-1) = 0. ZSOURCE(IIB:IIE,IJB:IJE,IKTB+1:IKTE-1) = 0.
ZSOURCE(:,:,IKE) = 0. ZSOURCE(IIB:IIE,IJB:IJE,IKE) = 0.
! !
! Obtention of the split JSV scalar variable at t+ deltat ! Obtention of the split JSV scalar variable at t+ deltat
CALL TRIDIAG(D,PSVM(:,:,:,JSV),ZA,PTSTEP,PEXPL,PIMPL,PRHODJ,ZSOURCE,ZRES) CALL TRIDIAG(D,PSVM(:,:,:,JSV),ZA,PTSTEP,PEXPL,PIMPL,PRHODJ,ZSOURCE,ZRES)
! !
! Compute the equivalent tendency for the JSV scalar variable ! Compute the equivalent tendency for the JSV scalar variable
!$mnh_expand_array(JI=1:D%NIT,JJ=1:D%NJT,JK=1:D%NKT) !$mnh_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:D%NKT)
PRSVS(:,:,:,JSV)= PRSVS(:,:,:,JSV)+ & PRSVS(IIB:IIE,IJB:IJE,IKB:IKE,JSV)= PRSVS(IIB:IIE,IJB:IJE,IKB:IKE,JSV)+ &
PRHODJ(:,:,:)*(ZRES(:,:,:)-PSVM(:,:,:,JSV))/PTSTEP PRHODJ(IIB:IIE,IJB:IJE,IKB:IKE)*(ZRES(IIB:IIE,IJB:IJE,IKB:IKE)-PSVM(IIB:IIE,IJB:IJE,IKB:IKE,JSV))/PTSTEP
!$mnh_end_expand_array(JI=1:D%NIT,JJ=1:D%NJT,JK=1:D%NKT) !$mnh_end_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:D%NKT)
! !
IF ( (OTURB_FLX .AND. TPFILE%LOPENED) .OR. OLES_CALL ) THEN IF ( (OTURB_FLX .AND. TPFILE%LOPENED) .OR. OLES_CALL ) THEN
! Diagnostic of the cartesian vertical flux ! Diagnostic of the cartesian vertical flux
! !
ZWORK1 = MZM(PLM*SQRT(PTKEM), D%NKA, D%NKU, D%NKL) !$mnh_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:D%NKT)
ZWORK2 = DZM(PIMPL*ZRES(:,:,:) + PEXPL*PSVM(:,:,:,JSV), D%NKA, D%NKU, D%NKL) ZWORK1(IIB:IIE,IJB:IJE,1:D%NKT) = PLM(IIB:IIE,IJB:IJE,1:D%NKT)*SQRT(PTKEM(IIB:IIE,IJB:IJE,1:D%NKT))
!$mnh_expand_array(JI=1:D%NIT,JJ=1:D%NJT,JK=1:D%NKT) ZWORK2(IIB:IIE,IJB:IJE,1:D%NKT) = PIMPL*ZRES(IIB:IIE,IJB:IJE,1:D%NKT) + PEXPL*PSVM(IIB:IIE,IJB:IJE,1:D%NKT,JSV)
ZFLXZ(:,:,:) = -ZCSV * PPSI_SV(:,:,:,JSV) * ZWORK1(:,:,:) / PDZZ(:,:,:) * & !$mnh_end_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:D%NKT)
ZWORK2(:,:,:) CALL MZM_PHY(D,ZWORK1,ZWORK3)
!$mnh_end_expand_array(JI=1:D%NIT,JJ=1:D%NJT,JK=1:D%NKT) CALL DZM_PHY(D,ZWORK2,ZWORK4)
!$mnh_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:D%NKT)
ZFLXZ(IIB:IIE,IJB:IJE,IKB:IKE) = -ZCSV * PPSI_SV(IIB:IIE,IJB:IJE,IKB:IKE,JSV) * ZWORK3(IIB:IIE,IJB:IJE,IKB:IKE) / PDZZ(IIB:IIE,IJB:IJE,IKB:IKE) * &
ZWORK4(IIB:IIE,IJB:IJE,IKB:IKE)
!$mnh_end_expand_array(JI=IIB:IIE,JJ=IJB:IJE,JK=1:D%NKT)
! surface flux ! surface flux
!* in 3DIM case, a part of the flux goes vertically, and another goes horizontally !* in 3DIM case, a part of the flux goes vertically, and another goes horizontally
! (in presence of slopes) ! (in presence of slopes)
!* in 1DIM case, the part of energy released in horizontal flux !* in 1DIM case, the part of energy released in horizontal flux
! is taken into account in the vertical part ! is taken into account in the vertical part
IF (HTURBDIM=='3DIM') THEN IF (HTURBDIM=='3DIM') THEN
!$mnh_expand_array(JI=1:D%NIT,JJ=1:D%NJT) !$mnh_expand_array(JI=IIB:IIE,JJ=IJB:IJE)
ZFLXZ(:,:,IKB) = (PIMPL*PSFSVP(:,:,JSV) + PEXPL*PSFSVM(:,:,JSV)) & ZFLXZ(IIB:IIE,IJB:IJE,IKB) = (PIMPL*PSFSVP(IIB:IIE,IJB:IJE,JSV) + PEXPL*PSFSVM(IIB:IIE,IJB:IJE,JSV)) &
* PDIRCOSZW(:,:) * PDIRCOSZW(IIB:IIE,IJB:IJE)
!$mnh_end_expand_array(JI=1:D%NIT,JJ=1:D%NJT) !$mnh_end_expand_array(JI=IIB:IIE,JJ=IJB:IJE)
ELSE ELSE
!$mnh_expand_array(JI=1:D%NIT,JJ=1:D%NJT) !$mnh_expand_array(JI=IIB:IIE,JJ=IJB:IJE)
ZFLXZ(:,:,IKB) = (PIMPL*PSFSVP(:,:,JSV) + PEXPL*PSFSVM(:,:,JSV)) & ZFLXZ(IIB:IIE,IJB:IJE,IKB) = (PIMPL*PSFSVP(IIB:IIE,IJB:IJE,JSV) + PEXPL*PSFSVM(IIB:IIE,IJB:IJE,JSV)) &
/ PDIRCOSZW(:,:) / PDIRCOSZW(IIB:IIE,IJB:IJE)
!$mnh_end_expand_array(JI=1:D%NIT,JJ=1:D%NJT) !$mnh_end_expand_array(JI=IIB:IIE,JJ=IJB:IJE)
END IF END IF
! extrapolates the flux under the ground so that the vertical average with ! extrapolates the flux under the ground so that the vertical average with
! the IKB flux gives the ground value ! the IKB flux gives the ground value
! !
!$mnh_expand_array(JI=1:D%NIT,JJ=1:D%NJT) !$mnh_expand_array(JI=IIB:IIE,JJ=IJB:IJE)
ZFLXZ(:,:,D%NKA) = ZFLXZ(:,:,IKB) ZFLXZ(IIB:IIE,IJB:IJE,D%NKA) = ZFLXZ(IIB:IIE,IJB:IJE,IKB)
!$mnh_end_expand_array(JI=1:D%NIT,JJ=1:D%NJT) !$mnh_end_expand_array(JI=IIB:IIE,JJ=IJB:IJE)
DO JK=IKTB+1,IKTE-1 DO JK=IKTB+1,IKTE-1
!$mnh_expand_array(JI=1:D%NIT,JJ=1:D%NJT) !$mnh_expand_array(JI=IIB:IIE,JJ=IJB:IJE)
PWSV(:,:,JK,JSV)=0.5*(ZFLXZ(:,:,JK)+ZFLXZ(:,:,JK+D%NKL)) PWSV(IIB:IIE,IJB:IJE,JK,JSV)=0.5*(ZFLXZ(IIB:IIE,IJB:IJE,JK)+ZFLXZ(IIB:IIE,IJB:IJE,JK+D%NKL))
!$mnh_end_expand_array(JI=1:D%NIT,JJ=1:D%NJT) !$mnh_end_expand_array(JI=IIB:IIE,JJ=IJB:IJE)
END DO END DO
!$mnh_expand_array(JI=1:D%NIT,JJ=1:D%NJT) !$mnh_expand_array(JI=IIB:IIE,JJ=IJB:IJE)
PWSV(:,:,IKB,JSV)=0.5*(ZFLXZ(:,:,IKB)+ZFLXZ(:,:,IKB+D%NKL)) PWSV(IIB:IIE,IJB:IJE,IKB,JSV)=0.5*(ZFLXZ(IIB:IIE,IJB:IJE,IKB)+ZFLXZ(IIB:IIE,IJB:IJE,IKB+D%NKL))
PWSV(:,:,IKE,JSV)=PWSV(:,:,IKE-D%NKL,JSV) PWSV(IIB:IIE,IJB:IJE,IKE,JSV)=PWSV(IIB:IIE,IJB:IJE,IKE-D%NKL,JSV)
!$mnh_end_expand_array(JI=1:D%NIT,JJ=1:D%NJT) !$mnh_end_expand_array(JI=IIB:IIE,JJ=IJB:IJE)
END IF END IF
! !
IF (OTURB_FLX .AND. TPFILE%LOPENED) THEN IF (OTURB_FLX .AND. TPFILE%LOPENED) THEN
......
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