diff --git a/src/common/turb/mode_tke_eps_sources.F90 b/src/common/turb/mode_tke_eps_sources.F90 index f8a0ddcf57af46c607e1adf61d59e88f2edfba93..9704ec8db2317d85f00cb4d5bf5a8984d70adf1a 100644 --- a/src/common/turb/mode_tke_eps_sources.F90 +++ b/src/common/turb/mode_tke_eps_sources.F90 @@ -292,8 +292,7 @@ ZA(:,:,:) = - PTSTEP * CSTURB%XCET * ZMWORK1(:,:,:) * ZMWORK2(:,:,:) / PDZZ( ! ! Compute TKE at time t+deltat: ( stored in ZRES ) ! -CALL TRIDIAG_TKE(D,D%NKA,D%NKU,D%NKL,PTKEM,ZA,PTSTEP,PEXPL,PIMPL,PRHODJ,& - & ZSOURCE,PTSTEP*ZFLX,ZRES) +CALL TRIDIAG_TKE(DPTKEM,ZA,PTSTEP,PEXPL,PIMPL,PRHODJ,ZSOURCE,PTSTEP*ZFLX,ZRES) CALL GET_HALO(ZRES) ! !* diagnose the dissipation diff --git a/src/common/turb/mode_tridiag.F90 b/src/common/turb/mode_tridiag.F90 index 81253f67f50f919dd1613d9d393b9772d4d16966..960c8b241163dbbc50e353644b4a40af8857e456 100644 --- a/src/common/turb/mode_tridiag.F90 +++ b/src/common/turb/mode_tridiag.F90 @@ -5,7 +5,7 @@ MODULE MODE_TRIDIAG IMPLICIT NONE CONTAINS -SUBROUTINE TRIDIAG(D,KKA,KKU,KKL,PVARM,PA,PTSTEP,PEXPL,PIMPL, & +SUBROUTINE TRIDIAG(D,PVARM,PA,PTSTEP,PEXPL,PIMPL, & PRHODJ,PSOURCE,PVARP ) USE PARKIND1, ONLY : JPRB USE YOMHOOK , ONLY : LHOOK, DR_HOOK @@ -123,9 +123,6 @@ IMPLICIT NONE !* 0.1 declarations of arguments ! TYPE(DIMPHYEX_t), INTENT(IN) :: D -INTEGER, INTENT(IN) :: KKA !near ground array index -INTEGER, INTENT(IN) :: KKU !uppest atmosphere array index -INTEGER, INTENT(IN) :: KKL !vert. levels type 1=MNH -1=ARO REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PVARM ! variable at t-1 REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PA ! upper diag. elements REAL, INTENT(IN) :: PTSTEP ! Double time step @@ -162,19 +159,19 @@ IKB=D%NKB IKE=D%NKE ! ZY(:,:,IKB) = PVARM(:,:,IKB) + PTSTEP*PSOURCE(:,:,IKB) - & - PEXPL / PRHODJ(:,:,IKB) * PA(:,:,IKB+KKL) * (PVARM(:,:,IKB+KKL) - PVARM(:,:,IKB)) + PEXPL / PRHODJ(:,:,IKB) * PA(:,:,IKB+D%NKL) * (PVARM(:,:,IKB+D%NKL) - PVARM(:,:,IKB)) ! DO JK=IKTB+1,IKTE-1 ZY(:,:,JK)= PVARM(:,:,JK) + PTSTEP*PSOURCE(:,:,JK) - & PEXPL / PRHODJ(:,:,JK) * & - ( PVARM(:,:,JK-KKL)*PA(:,:,JK) & - -PVARM(:,:,JK)*(PA(:,:,JK)+PA(:,:,JK+KKL)) & - +PVARM(:,:,JK+KKL)*PA(:,:,JK+KKL) & + ( PVARM(:,:,JK-D%NKL)*PA(:,:,JK) & + -PVARM(:,:,JK)*(PA(:,:,JK)+PA(:,:,JK+D%NKL)) & + +PVARM(:,:,JK+D%NKL)*PA(:,:,JK+D%NKL) & ) END DO ! ZY(:,:,IKE)= PVARM(:,:,IKE) + PTSTEP*PSOURCE(:,:,IKE) + & - PEXPL / PRHODJ(:,:,IKE) * PA(:,:,IKE) * (PVARM(:,:,IKE)-PVARM(:,:,IKE-KKL)) + PEXPL / PRHODJ(:,:,IKE) * PA(:,:,IKE) * (PVARM(:,:,IKE)-PVARM(:,:,IKE-D%NKL)) ! ! !* 2. INVERSION OF THE TRIDIAGONAL SYSTEM @@ -185,36 +182,36 @@ IF ( PIMPL > 1.E-10 ) THEN ! ! going up ! - ZBET(:,:) = 1. - PIMPL * PA(:,:,IKB+KKL) / PRHODJ(:,:,IKB) ! bet = b(ikb) + ZBET(:,:) = 1. - PIMPL * PA(:,:,IKB+D%NKL) / PRHODJ(:,:,IKB) ! bet = b(ikb) PVARP(:,:,IKB) = ZY(:,:,IKB) / ZBET(:,:) ! - DO JK = IKB+KKL,IKE-KKL,KKL - ZGAM(:,:,JK) = PIMPL * PA(:,:,JK) / PRHODJ(:,:,JK-KKL) / ZBET(:,:) + DO JK = IKB+D%NKL,IKE-D%NKL,D%NKL + ZGAM(:,:,JK) = PIMPL * PA(:,:,JK) / PRHODJ(:,:,JK-D%NKL) / ZBET(:,:) ! gam(k) = c(k-1) / bet ZBET(:,:) = 1. - PIMPL * ( PA(:,:,JK) * (1. + ZGAM(:,:,JK)) & - + PA(:,:,JK+KKL) & + + PA(:,:,JK+D%NKL) & ) / PRHODJ(:,:,JK) ! bet = b(k) - a(k)* gam(k) PVARP(:,:,JK)= ( ZY(:,:,JK) - PIMPL * PA(:,:,JK) / PRHODJ(:,:,JK) & - * PVARP(:,:,JK-KKL) & + * PVARP(:,:,JK-D%NKL) & ) / ZBET(:,:) ! res(k) = (y(k) -a(k)*res(k-1))/ bet END DO ! special treatment for the last level - ZGAM(:,:,IKE) = PIMPL * PA(:,:,IKE) / PRHODJ(:,:,IKE-KKL) / ZBET(:,:) + ZGAM(:,:,IKE) = PIMPL * PA(:,:,IKE) / PRHODJ(:,:,IKE-D%NKL) / ZBET(:,:) ! gam(k) = c(k-1) / bet ZBET(:,:) = 1. - PIMPL * ( PA(:,:,IKE) * (1. + ZGAM(:,:,IKE)) & ) / PRHODJ(:,:,IKE) ! bet = b(k) - a(k)* gam(k) PVARP(:,:,IKE)= ( ZY(:,:,IKE) - PIMPL * PA(:,:,IKE) / PRHODJ(:,:,IKE) & - * PVARP(:,:,IKE-KKL) & + * PVARP(:,:,IKE-D%NKL) & ) / ZBET(:,:) ! res(k) = (y(k) -a(k)*res(k-1))/ bet ! ! going down ! - DO JK = IKE-KKL,IKB,-1*KKL - PVARP(:,:,JK) = PVARP(:,:,JK) - ZGAM(:,:,JK+KKL) * PVARP(:,:,JK+KKL) + DO JK = IKE-D%NKL,IKB,-1*D%NKL + PVARP(:,:,JK) = PVARP(:,:,JK) - ZGAM(:,:,JK+D%NKL) * PVARP(:,:,JK+D%NKL) END DO ! ELSE diff --git a/src/common/turb/mode_tridiag_thermo.F90 b/src/common/turb/mode_tridiag_thermo.F90 index 1e1f4402d3f0a95f4a81e75c2f5205fa8ea49c7e..c87a9c702066dc326c98fcb93a34d9edf13d6e76 100644 --- a/src/common/turb/mode_tridiag_thermo.F90 +++ b/src/common/turb/mode_tridiag_thermo.F90 @@ -5,7 +5,7 @@ MODULE MODE_TRIDIAG_THERMO IMPLICIT NONE CONTAINS -SUBROUTINE TRIDIAG_THERMO(D,KKA,KKU,KKL,PVARM,PF,PDFDDTDZ,PTSTEP,PIMPL, & +SUBROUTINE TRIDIAG_THERMO(D,PVARM,PF,PDFDDTDZ,PTSTEP,PIMPL, & PDZZ,PRHODJ,PVARP ) ! ################################################# ! @@ -129,9 +129,6 @@ IMPLICIT NONE !* 0.1 declarations of arguments ! TYPE(DIMPHYEX_t), INTENT(IN) :: D -INTEGER, INTENT(IN) :: KKA !near ground array index -INTEGER, INTENT(IN) :: KKU !uppest atmosphere array index -INTEGER, INTENT(IN) :: KKL !vert. levels type 1=MNH -1=ARO REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PVARM ! variable at t-1 at mass point REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PF ! flux in dT/dt=-dF/dz at flux point REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PDFDDTDZ! dF/d(dT/dz) at flux point @@ -171,7 +168,7 @@ IKB=D%NKB IKE=D%NKE ! -ZMZM_RHODJ = MZM(PRHODJ,KKA,KKU,KKL) +ZMZM_RHODJ = MZM(PRHODJ,D%NKA,D%NKU,D%NKL) ZRHODJ_DFDDTDZ_O_DZ2 = ZMZM_RHODJ*PDFDDTDZ/PDZZ**2 ! ZA=0. @@ -184,24 +181,24 @@ ZY=0. ! --------------------------- ! ZY(:,:,IKB) = PRHODJ(:,:,IKB)*PVARM(:,:,IKB)/PTSTEP & - - ZMZM_RHODJ(:,:,IKB+KKL) * PF(:,:,IKB+KKL)/PDZZ(:,:,IKB+KKL) & + - ZMZM_RHODJ(:,:,IKB+D%NKL) * PF(:,:,IKB+D%NKL)/PDZZ(:,:,IKB+D%NKL) & + ZMZM_RHODJ(:,:,IKB ) * PF(:,:,IKB )/PDZZ(:,:,IKB ) & - + ZRHODJ_DFDDTDZ_O_DZ2(:,:,IKB+KKL) * PIMPL * PVARM(:,:,IKB+KKL) & - - ZRHODJ_DFDDTDZ_O_DZ2(:,:,IKB+KKL) * PIMPL * PVARM(:,:,IKB ) + + ZRHODJ_DFDDTDZ_O_DZ2(:,:,IKB+D%NKL) * PIMPL * PVARM(:,:,IKB+D%NKL) & + - ZRHODJ_DFDDTDZ_O_DZ2(:,:,IKB+D%NKL) * PIMPL * PVARM(:,:,IKB ) ! ZY(:,:,IKTB+1:IKTE-1) = PRHODJ(:,:,IKTB+1:IKTE-1)*PVARM(:,:,IKTB+1:IKTE-1)/PTSTEP & - - ZMZM_RHODJ(:,:,IKTB+1+KKL:IKTE-1+KKL) * PF(:,:,IKTB+1+KKL:IKTE-1+KKL)/PDZZ(:,:,IKTB+1+KKL:IKTE-1+KKL) & + - ZMZM_RHODJ(:,:,IKTB+1+D%NKL:IKTE-1+D%NKL) * PF(:,:,IKTB+1+D%NKL:IKTE-1+D%NKL)/PDZZ(:,:,IKTB+1+D%NKL:IKTE-1+D%NKL) & + ZMZM_RHODJ(:,:,IKTB+1:IKTE-1 ) * PF(:,:,IKTB+1:IKTE-1 )/PDZZ(:,:,IKTB+1:IKTE-1 ) & - + ZRHODJ_DFDDTDZ_O_DZ2(:,:,IKTB+1+KKL:IKTE-1+KKL) * PIMPL * PVARM(:,:,IKTB+1+KKL:IKTE-1+KKL) & - - ZRHODJ_DFDDTDZ_O_DZ2(:,:,IKTB+1+KKL:IKTE-1+KKL) * PIMPL * PVARM(:,:,IKTB+1:IKTE-1 ) & + + ZRHODJ_DFDDTDZ_O_DZ2(:,:,IKTB+1+D%NKL:IKTE-1+D%NKL) * PIMPL * PVARM(:,:,IKTB+1+D%NKL:IKTE-1+D%NKL) & + - ZRHODJ_DFDDTDZ_O_DZ2(:,:,IKTB+1+D%NKL:IKTE-1+D%NKL) * PIMPL * PVARM(:,:,IKTB+1:IKTE-1 ) & - ZRHODJ_DFDDTDZ_O_DZ2(:,:,IKTB+1:IKTE-1 ) * PIMPL * PVARM(:,:,IKTB+1:IKTE-1 ) & - + ZRHODJ_DFDDTDZ_O_DZ2(:,:,IKTB+1:IKTE-1 ) * PIMPL * PVARM(:,:,IKTB+1-KKL:IKTE-1-KKL) + + ZRHODJ_DFDDTDZ_O_DZ2(:,:,IKTB+1:IKTE-1 ) * PIMPL * PVARM(:,:,IKTB+1-D%NKL:IKTE-1-D%NKL) ! ZY(:,:,IKE) = PRHODJ(:,:,IKE)*PVARM(:,:,IKE)/PTSTEP & - - ZMZM_RHODJ(:,:,IKE+KKL) * PF(:,:,IKE+KKL)/PDZZ(:,:,IKE+KKL) & + - ZMZM_RHODJ(:,:,IKE+D%NKL) * PF(:,:,IKE+D%NKL)/PDZZ(:,:,IKE+D%NKL) & + ZMZM_RHODJ(:,:,IKE ) * PF(:,:,IKE )/PDZZ(:,:,IKE ) & - ZRHODJ_DFDDTDZ_O_DZ2(:,:,IKE ) * PIMPL * PVARM(:,:,IKE ) & - + ZRHODJ_DFDDTDZ_O_DZ2(:,:,IKE ) * PIMPL * PVARM(:,:,IKE-KKL) + + ZRHODJ_DFDDTDZ_O_DZ2(:,:,IKE ) * PIMPL * PVARM(:,:,IKE-D%NKL) ! ! !* 3. INVERSION OF THE TRIDIAGONAL SYSTEM @@ -213,14 +210,14 @@ IF ( PIMPL > 1.E-10 ) THEN ! -------------- ! ZB(:,:,IKB) = PRHODJ(:,:,IKB)/PTSTEP & - - ZRHODJ_DFDDTDZ_O_DZ2(:,:,IKB+KKL) * PIMPL - ZC(:,:,IKB) = ZRHODJ_DFDDTDZ_O_DZ2(:,:,IKB+KKL) * PIMPL + - ZRHODJ_DFDDTDZ_O_DZ2(:,:,IKB+D%NKL) * PIMPL + ZC(:,:,IKB) = ZRHODJ_DFDDTDZ_O_DZ2(:,:,IKB+D%NKL) * PIMPL ! ZA(:,:,IKTB+1:IKTE-1) = ZRHODJ_DFDDTDZ_O_DZ2(:,:,IKTB+1:IKTE-1) * PIMPL ZB(:,:,IKTB+1:IKTE-1) = PRHODJ(:,:,IKTB+1:IKTE-1)/PTSTEP & - - ZRHODJ_DFDDTDZ_O_DZ2(:,:,IKTB+1+KKL:IKTE-1+KKL) * PIMPL & + - ZRHODJ_DFDDTDZ_O_DZ2(:,:,IKTB+1+D%NKL:IKTE-1+D%NKL) * PIMPL & - ZRHODJ_DFDDTDZ_O_DZ2(:,:,IKTB+1:IKTE-1) * PIMPL - ZC(:,:,IKTB+1:IKTE-1) = ZRHODJ_DFDDTDZ_O_DZ2(:,:,IKTB+1+KKL:IKTE-1+KKL) * PIMPL + ZC(:,:,IKTB+1:IKTE-1) = ZRHODJ_DFDDTDZ_O_DZ2(:,:,IKTB+1+D%NKL:IKTE-1+D%NKL) * PIMPL ! ZA(:,:,IKE) = ZRHODJ_DFDDTDZ_O_DZ2(:,:,IKE ) * PIMPL ZB(:,:,IKE) = PRHODJ(:,:,IKE)/PTSTEP & @@ -233,27 +230,27 @@ IF ( PIMPL > 1.E-10 ) THEN PVARP(:,:,IKB) = ZY(:,:,IKB) / ZBET(:,:) ! - DO JK = IKB+KKL,IKE-KKL,KKL - ZGAM(:,:,JK) = ZC(:,:,JK-KKL) / ZBET(:,:) + DO JK = IKB+D%NKL,IKE-D%NKL,D%NKL + ZGAM(:,:,JK) = ZC(:,:,JK-D%NKL) / ZBET(:,:) ! gam(k) = c(k-1) / bet ZBET(:,:) = ZB(:,:,JK) - ZA(:,:,JK) * ZGAM(:,:,JK) ! bet = b(k) - a(k)* gam(k) - PVARP(:,:,JK)= ( ZY(:,:,JK) - ZA(:,:,JK) * PVARP(:,:,JK-KKL) ) / ZBET(:,:) + PVARP(:,:,JK)= ( ZY(:,:,JK) - ZA(:,:,JK) * PVARP(:,:,JK-D%NKL) ) / ZBET(:,:) ! res(k) = (y(k) -a(k)*res(k-1))/ bet END DO ! special treatment for the last level - ZGAM(:,:,IKE) = ZC(:,:,IKE-KKL) / ZBET(:,:) + ZGAM(:,:,IKE) = ZC(:,:,IKE-D%NKL) / ZBET(:,:) ! gam(k) = c(k-1) / bet ZBET(:,:) = ZB(:,:,IKE) - ZA(:,:,IKE) * ZGAM(:,:,IKE) ! bet = b(k) - a(k)* gam(k) - PVARP(:,:,IKE)= ( ZY(:,:,IKE) - ZA(:,:,IKE) * PVARP(:,:,IKE-KKL) ) / ZBET(:,:) + PVARP(:,:,IKE)= ( ZY(:,:,IKE) - ZA(:,:,IKE) * PVARP(:,:,IKE-D%NKL) ) / ZBET(:,:) ! res(k) = (y(k) -a(k)*res(k-1))/ bet ! !* 3.3 going down ! ---------- ! - DO JK = IKE-KKL,IKB,-1*KKL - PVARP(:,:,JK) = PVARP(:,:,JK) - ZGAM(:,:,JK+KKL) * PVARP(:,:,JK+KKL) + DO JK = IKE-D%NKL,IKB,-1*D%NKL + PVARP(:,:,JK) = PVARP(:,:,JK) - ZGAM(:,:,JK+D%NKL) * PVARP(:,:,JK+D%NKL) END DO ! ELSE @@ -266,8 +263,8 @@ END IF !* 4. FILL THE UPPER AND LOWER EXTERNAL VALUES ! ---------------------------------------- ! -PVARP(:,:,KKA)=PVARP(:,:,IKB) -PVARP(:,:,KKU)=PVARP(:,:,IKE) +PVARP(:,:,D%NKA)=PVARP(:,:,IKB) +PVARP(:,:,D%NKU)=PVARP(:,:,IKE) ! !------------------------------------------------------------------------------- ! diff --git a/src/common/turb/mode_tridiag_tke.F90 b/src/common/turb/mode_tridiag_tke.F90 index d2d2afb6a05084be5b58b0a31dbdffa3196938f5..9c9fce379951086e9cdd4bafe96fd27e2040fed0 100644 --- a/src/common/turb/mode_tridiag_tke.F90 +++ b/src/common/turb/mode_tridiag_tke.F90 @@ -5,7 +5,7 @@ MODULE MODE_TRIDIAG_TKE IMPLICIT NONE CONTAINS -SUBROUTINE TRIDIAG_TKE(D,KKA,KKU,KKL,PVARM,PA,PTSTEP,PEXPL,PIMPL, & +SUBROUTINE TRIDIAG_TKE(D,PVARM,PA,PTSTEP,PEXPL,PIMPL, & PRHODJ,PSOURCE,PDIAG,PVARP ) USE PARKIND1, ONLY : JPRB USE YOMHOOK , ONLY : LHOOK, DR_HOOK @@ -121,9 +121,6 @@ IMPLICIT NONE !* 0.1 declarations of arguments ! TYPE(DIMPHYEX_t), INTENT(IN) :: D -INTEGER, INTENT(IN) :: KKA !near ground array index -INTEGER, INTENT(IN) :: KKU !uppest atmosphere array index -INTEGER, INTENT(IN) :: KKL !vert. levels type 1=MNH -1=ARO REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PVARM ! variable at t-1 REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PA ! upper diag. elements REAL, INTENT(IN) :: PTSTEP ! Double time step @@ -161,19 +158,19 @@ IKB=D%NKB IKE=D%NKE ! ZY(:,:,IKB) = PVARM(:,:,IKB) + PTSTEP*PSOURCE(:,:,IKB) - & - PEXPL / PRHODJ(:,:,IKB) * PA(:,:,IKB+KKL) * (PVARM(:,:,IKB+KKL) - PVARM(:,:,IKB)) + PEXPL / PRHODJ(:,:,IKB) * PA(:,:,IKB+D%NKL) * (PVARM(:,:,IKB+D%NKL) - PVARM(:,:,IKB)) ! DO JK=IKTB+1,IKTE-1 ZY(:,:,JK)= PVARM(:,:,JK) + PTSTEP*PSOURCE(:,:,JK) - & PEXPL / PRHODJ(:,:,JK) * & - ( PVARM(:,:,JK-KKL)*PA(:,:,JK) & - -PVARM(:,:,JK)*(PA(:,:,JK)+PA(:,:,JK+KKL)) & - +PVARM(:,:,JK+KKL)*PA(:,:,JK+KKL) & + ( PVARM(:,:,JK-D%NKL)*PA(:,:,JK) & + -PVARM(:,:,JK)*(PA(:,:,JK)+PA(:,:,JK+D%NKL)) & + +PVARM(:,:,JK+D%NKL)*PA(:,:,JK+D%NKL) & ) END DO ! ZY(:,:,IKE)= PVARM(:,:,IKE) + PTSTEP*PSOURCE(:,:,IKE) + & - PEXPL / PRHODJ(:,:,IKE) * PA(:,:,IKE) * (PVARM(:,:,IKE)-PVARM(:,:,IKE-KKL)) + PEXPL / PRHODJ(:,:,IKE) * PA(:,:,IKE) * (PVARM(:,:,IKE)-PVARM(:,:,IKE-D%NKL)) ! ! !* 2. INVERSION OF THE TRIDIAGONAL SYSTEM @@ -184,39 +181,39 @@ IF ( PIMPL > 1.E-10 ) THEN ! ! going up ! - ZBET(:,:) = 1. + PIMPL * (PDIAG(:,:,IKB)-PA(:,:,IKB+KKL) / PRHODJ(:,:,IKB)) + ZBET(:,:) = 1. + PIMPL * (PDIAG(:,:,IKB)-PA(:,:,IKB+D%NKL) / PRHODJ(:,:,IKB)) ! bet = b(ikb) PVARP(:,:,IKB) = ZY(:,:,IKB) / ZBET(:,:) ! - DO JK = IKB+KKL,IKE-KKL,KKL - ZGAM(:,:,JK) = PIMPL * PA(:,:,JK) / PRHODJ(:,:,JK-KKL) / ZBET(:,:) + DO JK = IKB+D%NKL,IKE-D%NKL,D%NKL + ZGAM(:,:,JK) = PIMPL * PA(:,:,JK) / PRHODJ(:,:,JK-D%NKL) / ZBET(:,:) ! gam(k) = c(k-1) / bet ZBET(:,:) = 1. + PIMPL * ( PDIAG(:,:,JK) - & ( PA(:,:,JK) * (1. + ZGAM(:,:,JK)) & - + PA(:,:,JK+KKL) & + + PA(:,:,JK+D%NKL) & ) / PRHODJ(:,:,JK) & ) ! bet = b(k) - a(k)* gam(k) PVARP(:,:,JK)= ( ZY(:,:,JK) - PIMPL * PA(:,:,JK) / PRHODJ(:,:,JK) & - * PVARP(:,:,JK-KKL) & + * PVARP(:,:,JK-D%NKL) & ) / ZBET(:,:) ! res(k) = (y(k) -a(k)*res(k-1))/ bet END DO ! special treatment for the last level - ZGAM(:,:,IKE) = PIMPL * PA(:,:,IKE) / PRHODJ(:,:,IKE-KKL) / ZBET(:,:) + ZGAM(:,:,IKE) = PIMPL * PA(:,:,IKE) / PRHODJ(:,:,IKE-D%NKL) / ZBET(:,:) ! gam(k) = c(k-1) / bet ZBET(:,:) = 1. + PIMPL * ( PDIAG(:,:,IKE) - & ( PA(:,:,IKE) * (1. + ZGAM(:,:,IKE)) ) / PRHODJ(:,:,IKE) & ) ! bet = b(k) - a(k)* gam(k) PVARP(:,:,IKE)= ( ZY(:,:,IKE) - PIMPL * PA(:,:,IKE) / PRHODJ(:,:,IKE) & - * PVARP(:,:,IKE-KKL) & + * PVARP(:,:,IKE-D%NKL) & ) / ZBET(:,:) ! res(k) = (y(k) -a(k)*res(k-1))/ bet ! ! going down ! - DO JK = IKE-KKL,IKB,-1*KKL - PVARP(:,:,JK) = PVARP(:,:,JK) - ZGAM(:,:,JK+KKL) * PVARP(:,:,JK+KKL) + DO JK = IKE-D%NKL,IKB,-1*D%NKL + PVARP(:,:,JK) = PVARP(:,:,JK) - ZGAM(:,:,JK+D%NKL) * PVARP(:,:,JK+D%NKL) END DO ! ELSE @@ -229,8 +226,8 @@ END IF !* 3. FILL THE UPPER AND LOWER EXTERNAL VALUES ! ---------------------------------------- ! -PVARP(:,:,KKA)=PVARP(:,:,IKB) -PVARP(:,:,KKU)=PVARP(:,:,IKE) +PVARP(:,:,D%NKA)=PVARP(:,:,IKB) +PVARP(:,:,D%NKU)=PVARP(:,:,IKE) ! !------------------------------------------------------------------------------- ! diff --git a/src/common/turb/mode_tridiag_wind.F90 b/src/common/turb/mode_tridiag_wind.F90 index 65fd7256e14f7cf242917b450ff723d4d9e942d9..9a13f1c359e520084efdcf5de585e7ac19022ddb 100644 --- a/src/common/turb/mode_tridiag_wind.F90 +++ b/src/common/turb/mode_tridiag_wind.F90 @@ -5,7 +5,7 @@ MODULE MODE_TRIDIAG_WIND IMPLICIT NONE CONTAINS -SUBROUTINE TRIDIAG_WIND(KKA,KKU,KKL,PVARM,PA,PCOEFS,PTSTEP,PEXPL,PIMPL, & +SUBROUTINE TRIDIAG_WIND(D,PVARM,PA,PCOEFS,PTSTEP,PEXPL,PIMPL, & PRHODJA,PSOURCE,PVARP ) USE PARKIND1, ONLY : JPRB USE YOMHOOK , ONLY : LHOOK, DR_HOOK @@ -118,15 +118,14 @@ SUBROUTINE TRIDIAG_WIND(KKA,KKU,KKL,PVARM,PA,PCOEFS,PTSTEP,PEXPL,PIMPL, & !* 0. DECLARATIONS ! USE MODD_PARAMETERS +USE MODD_DIMPHYEX, ONLY: DIMPHYEX_t ! IMPLICIT NONE ! ! !* 0.1 declarations of arguments ! -INTEGER, INTENT(IN) :: KKA !near ground array index -INTEGER, INTENT(IN) :: KKU !uppest atmosphere array index -INTEGER, INTENT(IN) :: KKL !vert. levels type 1=MNH -1=ARO +TYPE(DIMPHYEX_t), INTENT(IN) :: D REAL, DIMENSION(:,:,:), INTENT(IN) :: PVARM ! variable at t-1 REAL, DIMENSION(:,:,:), INTENT(IN) :: PA ! upper diag. elements REAL, DIMENSION(:,:), INTENT(IN) :: PCOEFS ! implicit coeff for the @@ -156,26 +155,26 @@ INTEGER :: IKTB,IKTE ! start, end of k loops in physical domain ! REAL(KIND=JPRB) :: ZHOOK_HANDLE IF (LHOOK) CALL DR_HOOK('TRIDIAG_WIND',0,ZHOOK_HANDLE) -IKT=SIZE(PVARM,3) -IKTB=1+JPVEXT_TURB -IKTE=IKT-JPVEXT_TURB -IKB=KKA+JPVEXT_TURB*KKL -IKE=KKU-JPVEXT_TURB*KKL - +! +IKT=D%NKT +IKTB=D%NKTB +IKTE=D%NKTE +IKB=D%NKB +IKE=D%NKE ! ! ZY(:,:,IKB) = PVARM(:,:,IKB) + PTSTEP*PSOURCE(:,:,IKB) - & - PEXPL / PRHODJA(:,:,IKB) * PA(:,:,IKB+KKL) * (PVARM(:,:,IKB+KKL) - PVARM(:,:,IKB)) + PEXPL / PRHODJA(:,:,IKB) * PA(:,:,IKB+D%NKL) * (PVARM(:,:,IKB+D%NKL) - PVARM(:,:,IKB)) ! ZY(:,:,IKTB+1:IKTE-1)= PVARM(:,:,IKTB+1:IKTE-1) + PTSTEP*PSOURCE(:,:,IKTB+1:IKTE-1) - & PEXPL / PRHODJA(:,:,IKTB+1:IKTE-1) * & - ( PVARM(:,:,IKTB+1-KKL:IKTE-1-KKL)*PA(:,:,IKTB+1:IKTE-1) & - -PVARM(:,:,IKTB+1:IKTE-1)*(PA(:,:,IKTB+1:IKTE-1)+PA(:,:,IKTB+1+KKL:IKTE-1+KKL)) & - +PVARM(:,:,IKTB+1+KKL:IKTE-1+KKL)*PA(:,:,IKTB+1+KKL:IKTE-1+KKL) & + ( PVARM(:,:,IKTB+1-D%NKL:IKTE-1-D%NKL)*PA(:,:,IKTB+1:IKTE-1) & + -PVARM(:,:,IKTB+1:IKTE-1)*(PA(:,:,IKTB+1:IKTE-1)+PA(:,:,IKTB+1+D%NKL:IKTE-1+D%NKL)) & + +PVARM(:,:,IKTB+1+D%NKL:IKTE-1+D%NKL)*PA(:,:,IKTB+1+D%NKL:IKTE-1+D%NKL) & ) ! ZY(:,:,IKE)= PVARM(:,:,IKE) + PTSTEP*PSOURCE(:,:,IKE) + & - PEXPL / PRHODJA(:,:,IKE) * PA(:,:,IKE) * (PVARM(:,:,IKE)-PVARM(:,:,IKE-KKL)) + PEXPL / PRHODJA(:,:,IKE) * PA(:,:,IKE) * (PVARM(:,:,IKE)-PVARM(:,:,IKE-D%NKL)) ! ! !* 2. INVERSION OF THE TRIDIAGONAL SYSTEM @@ -186,37 +185,37 @@ IF ( PIMPL > 1.E-10 ) THEN ! ! going up ! - ZBET(:,:) = 1. - PIMPL * ( PA(:,:,IKB+KKL) / PRHODJA(:,:,IKB) & + ZBET(:,:) = 1. - PIMPL * ( PA(:,:,IKB+D%NKL) / PRHODJA(:,:,IKB) & + PCOEFS(:,:) * PTSTEP ) ! bet = b(ikb) PVARP(:,:,IKB) = ZY(:,:,IKB) / ZBET(:,:) ! - DO JK = IKB+KKL,IKE-KKL,KKL - ZGAM(:,:,JK) = PIMPL * PA(:,:,JK) / PRHODJA(:,:,JK-KKL) / ZBET(:,:) + DO JK = IKB+D%NKL,IKE-D%NKL,D%NKL + ZGAM(:,:,JK) = PIMPL * PA(:,:,JK) / PRHODJA(:,:,JK-D%NKL) / ZBET(:,:) ! gam(k) = c(k-1) / bet ZBET(:,:) = 1. - PIMPL * ( PA(:,:,JK) * (1. + ZGAM(:,:,JK)) & - + PA(:,:,JK+KKL) & + + PA(:,:,JK+D%NKL) & ) / PRHODJA(:,:,JK) ! bet = b(k) - a(k)* gam(k) PVARP(:,:,JK)= ( ZY(:,:,JK) - PIMPL * PA(:,:,JK) / PRHODJA(:,:,JK) & - * PVARP(:,:,JK-KKL) & + * PVARP(:,:,JK-D%NKL) & ) / ZBET(:,:) ! res(k) = (y(k) -a(k)*res(k-1))/ bet END DO ! special treatment for the last level - ZGAM(:,:,IKE) = PIMPL * PA(:,:,IKE) / PRHODJA(:,:,IKE-KKL) / ZBET(:,:) + ZGAM(:,:,IKE) = PIMPL * PA(:,:,IKE) / PRHODJA(:,:,IKE-D%NKL) / ZBET(:,:) ! gam(k) = c(k-1) / bet ZBET(:,:) = 1. - PIMPL * ( PA(:,:,IKE) * (1. + ZGAM(:,:,IKE)) & ) / PRHODJA(:,:,IKE) ! bet = b(k) - a(k)* gam(k) PVARP(:,:,IKE)= ( ZY(:,:,IKE) - PIMPL * PA(:,:,IKE) / PRHODJA(:,:,IKE) & - * PVARP(:,:,IKE-KKL) & + * PVARP(:,:,IKE-D%NKL) & ) / ZBET(:,:) ! res(k) = (y(k) -a(k)*res(k-1))/ bet ! ! going down ! - DO JK = IKE-KKL,IKB,-1*KKL - PVARP(:,:,JK) = PVARP(:,:,JK) - ZGAM(:,:,JK+KKL) * PVARP(:,:,JK+KKL) + DO JK = IKE-D%NKL,IKB,-1*D%NKL + PVARP(:,:,JK) = PVARP(:,:,JK) - ZGAM(:,:,JK+D%NKL) * PVARP(:,:,JK+D%NKL) END DO ! ELSE @@ -229,8 +228,8 @@ END IF !* 3. FILL THE UPPER AND LOWER EXTERNAL VALUES ! ---------------------------------------- ! -PVARP(:,:,KKA)=PVARP(:,:,IKB) -PVARP(:,:,KKU)=PVARP(:,:,IKE) +PVARP(:,:,D%NKA)=PVARP(:,:,IKB) +PVARP(:,:,D%NKU)=PVARP(:,:,IKE) ! !------------------------------------------------------------------------------- ! diff --git a/src/common/turb/mode_turb_ver_dyn_flux.F90 b/src/common/turb/mode_turb_ver_dyn_flux.F90 index f116616ece3c4d62b140b2e6a69e1233fb5ad7be..efafaffd5afbc30938bc29a5b2f47290abd9c728 100644 --- a/src/common/turb/mode_turb_ver_dyn_flux.F90 +++ b/src/common/turb/mode_turb_ver_dyn_flux.F90 @@ -466,7 +466,7 @@ ENDIF !end ocean or atmosphere cases ! ! Obtention of the split U at t+ deltat ! -CALL TRIDIAG_WIND(D%NKA,D%NKU,D%NKL,PUM,ZA,ZCOEFS(:,:,1),PTSTEP,PEXPL,PIMPL, & +CALL TRIDIAG_WIND(D,PUM,ZA,ZCOEFS(:,:,1),PTSTEP,PEXPL,PIMPL, & MXM(PRHODJ),ZSOURCE,ZRES) ! ! Compute the equivalent tendency for the U wind component @@ -739,7 +739,7 @@ ENDIF ! End of Ocean or Atmospher Cases ZSOURCE(:,:,IKTB+1:IKTE-1) = 0. ! ! Obtention of the split V at t+ deltat -CALL TRIDIAG_WIND(D%NKA,D%NKU,D%NKL,PVM,ZA,ZCOEFS(:,:,1),PTSTEP,PEXPL,PIMPL, & +CALL TRIDIAG_WIND(D,PVM,ZA,ZCOEFS(:,:,1),PTSTEP,PEXPL,PIMPL, & MYM(PRHODJ),ZSOURCE,ZRES) ! ! Compute the equivalent tendency for the V wind component diff --git a/src/common/turb/mode_turb_ver_sv_flux.F90 b/src/common/turb/mode_turb_ver_sv_flux.F90 index 0d02669a2e63f4796d515052d7377489e6cf707a..e4e1b20f99e221a9a642cfb4848bc601ed36b21f 100644 --- a/src/common/turb/mode_turb_ver_sv_flux.F90 +++ b/src/common/turb/mode_turb_ver_sv_flux.F90 @@ -380,7 +380,7 @@ DO JSV=1,KSV ZSOURCE(:,:,IKE) = 0. ! ! Obtention of the split JSV scalar variable at t+ deltat - CALL TRIDIAG(D,D%NKA,D%NKU,D%NKL,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 !$mnh_expand_array(JI=1:D%NIT,JJ=1:D%NJT,JK=1:D%NKT) diff --git a/src/common/turb/mode_turb_ver_thermo_flux.F90 b/src/common/turb/mode_turb_ver_thermo_flux.F90 index 32da8705e17abab6a0c7e40628006f414ec8d30d..5c0c120005cd040dad93533f050656ae249f0c00 100644 --- a/src/common/turb/mode_turb_ver_thermo_flux.F90 +++ b/src/common/turb/mode_turb_ver_thermo_flux.F90 @@ -653,7 +653,7 @@ ELSE ! No coupling O and A cases END IF !end no coupled cases ! ! Compute the split conservative potential temperature at t+deltat -CALL TRIDIAG_THERMO(D,D%NKA,D%NKU,D%NKL,PTHLM,ZF,ZDFDDTDZ,PTSTEP,PIMPL,PDZZ,& +CALL TRIDIAG_THERMO(D,PTHLM,ZF,ZDFDDTDZ,PTSTEP,PIMPL,PDZZ,& PRHODJ,PTHLP) ! ! Compute the equivalent tendency for the conservative potential temperature @@ -997,7 +997,7 @@ IF (KRR /= 0) THEN END IF END IF!end no coupled cases ! Compute the split conservative potential temperature at t+deltat - CALL TRIDIAG_THERMO(D,D%NKA,D%NKU,D%NKL,PRM(:,:,:,1),ZF,ZDFDDRDZ,PTSTEP,PIMPL,& + CALL TRIDIAG_THERMO(D,PRM(:,:,:,1),ZF,ZDFDDRDZ,PTSTEP,PIMPL,& PDZZ,PRHODJ,PRP) ! ! Compute the equivalent tendency for the conservative mixing ratio