diff --git a/src/common/turb/mode_tke_eps_sources.F90 b/src/common/turb/mode_tke_eps_sources.F90 index f78bb8fca8794c83669ebcac571fe7215e111e18..88f9822e93a37490ac63d4aa850c863631727cb3 100644 --- a/src/common/turb/mode_tke_eps_sources.F90 +++ b/src/common/turb/mode_tke_eps_sources.F90 @@ -10,7 +10,8 @@ CONTAINS & PTRH,PRHODJ,PDZZ,PDXX,PDYY,PDZX,PDZY,PZZ, & & PTSTEP,PIMPL,PEXPL, & & HTURBLEN,HTURBDIM, & - & TPFILE,OTURB_DIAG,OLES_CALL,ODIAG_IN_RUN, & + & TPFILE,OTURB_DIAG,OLES_CALL,ODIAG_IN_RUN,OOCEAN, & + & PSFUM,PSFVM, & & PTP,PRTKES,PRTHLS,PCOEF_DISS,PTDIFF,PTDISS,PRTKEMS,& & TBUDGETS, KBUDGETS, & & PEDR, PTR,PDISS, PCURRENT_TKE_DISS ) @@ -183,6 +184,7 @@ TYPE(TFILEDATA), INTENT(IN) :: TPFILE ! Output file LOGICAL, INTENT(IN) :: OLES_CALL ! LOGICAL, INTENT(IN) :: OTURB_DIAG ! switch to write some LOGICAL, INTENT(IN) :: ODIAG_IN_RUN ! switch to activate online diagnostics (mesonh) +LOGICAL, INTENT(IN) :: OOCEAN ! switch for Ocean model version REAL, DIMENSION(D%NIJT,D%NKT), INTENT(INOUT):: PDP ! Dyn. prod. of TKE REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PTRH REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PTP ! Ther. prod. of TKE @@ -199,6 +201,7 @@ REAL, DIMENSION(D%NIJT,D%NKT), INTENT(OUT), OPTIONAL :: PTR ! Transp REAL, DIMENSION(D%NIJT,D%NKT), INTENT(OUT), OPTIONAL :: PDISS ! Dissipation of TKE REAL, DIMENSION(D%NIJT,D%NKT), INTENT(OUT), OPTIONAL :: PEDR ! EDR REAL, DIMENSION(D%NIJT,D%NKT), INTENT(INOUT), OPTIONAL :: PCURRENT_TKE_DISS ! if ODIAG_IN_RUN in mesonh +REAL, DIMENSION(D%NIJT), INTENT(IN) :: PSFUM,PSFVM ! momentum sfc flux ! ! ! @@ -266,11 +269,17 @@ END IF !* 2.2 Explicit TKE sources except horizontal turbulent transport ! ! extrapolate the dynamic production with a 1/Z law from its value at the -! W(IKB+1) value stored in PDP(IKB) to the mass localization tke(IKB) -! -!$mnh_expand_array(JIJ=IIJB:IIJE) -PDP(IIJB:IIJE,IKB) = PDP(IIJB:IIJE,IKB) * (1. + PDZZ(IIJB:IIJE,IKB+D%NKL)/PDZZ(IIJB:IIJE,IKB)) -!$mnh_end_expand_array(JIJ=IIJB:IIJE) +IF (OOCEAN) THEN + ! W(IKE) value stored in PDP(IKE) to the mass localization of tke(IKE) + !$mnh_expand_array(JIJ=IIJB:IIJE) + PDP(IIJB:IIJE,IKE) = PDP(IIJB:IIJE,IKE) * (1. + PDZZ(IIJB:IIJE,IKE)/PDZZ(IIJB:IIJE,IKE+1)) + !$mnh_end_expand_array(JIJ=IIJB:IIJE) +ELSE + ! W(IKB+1) value stored in PDP(IKB) to the mass localization tke(IKB) + !$mnh_expand_array(JIJ=IIJB:IIJE) + PDP(IIJB:IIJE,IKB) = PDP(IIJB:IIJE,IKB) * (1. + PDZZ(IIJB:IIJE,IKB+D%NKL)/PDZZ(IIJB:IIJE,IKB)) + !$mnh_end_expand_array(JIJ=IIJB:IIJE) +END IF ! ! Compute the source terms for TKE: ( ADVECtion + NUMerical DIFFusion + ..) ! + (Dynamical Production) + (Thermal Production) - (dissipation) @@ -288,6 +297,14 @@ ZSOURCE(IIJB:IIJE,1:D%NKT) = ( PRTKES(IIJB:IIJE,1:D%NKT) + PRTKEMS(IIJB:IIJE,1: !* 2.2 implicit vertical TKE transport ! ! +! To add here in ZSOURCE surface flux of TKE +!(assumed to be 0 for ATM, +IF (OOCEAN) THEN + !for ocean:wave breaking simple/very rough param wE = 100 Ustar**3 where ustar is the Tau_atmi/rhocea + !$mnh_expand_array(JIJ=IIJB:IIJE) + ZSOURCE (IIJB:IIJE,IKE)=ZSOURCE(IIJB:IIJE,IKE)-1.E2*((PSFUM(IIJB:IIJE)**2 + PSFVM(IIJB:IIJE)**2)**1.5) /PDZZ(IIJB:IIJE,IKE) + !$mnh_end_expand_array(JIJ=IIJB:IIJE) +END IF ! Compute the vector giving the elements just under the diagonal for the ! matrix inverted in TRIDIAG ! diff --git a/src/common/turb/mode_turb_ver.F90 b/src/common/turb/mode_turb_ver.F90 index 76c03b560d84f4c4ecf19bd465929367a5a75629..5e34881e45b528f43b234bbc16ee55fdb516c93a 100644 --- a/src/common/turb/mode_turb_ver.F90 +++ b/src/common/turb/mode_turb_ver.F90 @@ -14,7 +14,7 @@ SUBROUTINE TURB_VER(D,CST,CSTURB,TURBN,KRR,KRRL,KRRI, & PTSTEP, TPFILE, & PDXX,PDYY,PDZZ,PDZX,PDZY,PDIRCOSZW,PZZ, & PCOSSLOPE,PSINSLOPE, & - PRHODJ,PTHVREF, & + PRHODJ,PTHVREF,PSFUM,PSFVM, & PSFTHM,PSFRM,PSFSVM,PSFTHP,PSFRP,PSFSVP, & PCDUEFF,PTAU11M,PTAU12M,PTAU33M, & PUM,PVM,PWM,PUSLOPEM,PVSLOPEM,PTHLM,PRM,PSVM, & @@ -288,6 +288,7 @@ REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: MFMOIST ! moist mass flux REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PTHVREF ! ref. state Virtual ! Potential Temperature ! +REAL, DIMENSION(D%NIJT), INTENT(IN) :: PSFUM,PSFVM ! surface fluxes REAL, DIMENSION(D%NIJT), INTENT(IN) :: PSFTHM,PSFRM ! surface fluxes at time REAL, DIMENSION(D%NIJT,KSV), INTENT(IN) :: PSFSVM ! t - deltat ! @@ -560,7 +561,7 @@ CALL TURB_VER_DYN_FLUX(D,CST,CSTURB,TURBN,KSV,O2D,OFLAT, & HTURBDIM,PIMPL,PEXPL,PTSTEP,TPFILE, & PDXX,PDYY,PDZZ,PDZX,PDZY,PDIRCOSZW,PZZ, & PCOSSLOPE,PSINSLOPE, & - PRHODJ, & + PRHODJ,PSFUM,PSFVM, & PCDUEFF,PTAU11M,PTAU12M,PTAU33M, & PTHLM,PRM,PSVM,PUM,PVM,PWM,PUSLOPEM,PVSLOPEM, & PTKEM,ZLM,MFMOIST,ZWU,ZWV, & diff --git a/src/common/turb/mode_turb_ver_dyn_flux.F90 b/src/common/turb/mode_turb_ver_dyn_flux.F90 index fe103fa6b97870fb2c670de56cd746bce9fbd57c..c78e26457f7a0b6cf6ded482546ac5b410dc7d7b 100644 --- a/src/common/turb/mode_turb_ver_dyn_flux.F90 +++ b/src/common/turb/mode_turb_ver_dyn_flux.F90 @@ -6,13 +6,14 @@ MODULE MODE_TURB_VER_DYN_FLUX IMPLICIT NONE CONTAINS SUBROUTINE TURB_VER_DYN_FLUX(D,CST,CSTURB,TURBN,KSV,O2D,OFLAT,& - OTURB_FLX,KRR, OOCEAN,OHARAT,OCOUPLES,OLES_CALL,& + OTURB_FLX,KRR,OOCEAN,OHARAT,OCOUPLES,OLES_CALL,& HTURBDIM,PIMPL,PEXPL, & PTSTEP, & TPFILE, & PDXX,PDYY,PDZZ,PDZX,PDZY,PDIRCOSZW,PZZ, & PCOSSLOPE,PSINSLOPE, & PRHODJ, & + PSFUM,PSFVM, & PCDUEFF,PTAU11M,PTAU12M,PTAU33M, & PTHLM,PRM,PSVM,PUM,PVM,PWM,PUSLOPEM,PVSLOPEM, & PTKEM,PLM,MFMOIST,PWU,PWV, & @@ -271,6 +272,7 @@ REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PRHODJ ! dry density * gri REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: MFMOIST ! moist mass flux dual scheme ! +REAL, DIMENSION(D%NIJT), INTENT(IN) :: PSFUM,PSFVM ! normal momentum sfc flux REAL, DIMENSION(D%NIJT), INTENT(IN) :: PCDUEFF ! Cd * || u || at time t REAL, DIMENSION(D%NIJT), INTENT(IN) :: PTAU11M ! <uu> in the axes linked ! to the maximum slope direction and the surface normal and the binormal @@ -331,7 +333,8 @@ INTEGER :: IKT ! array size in k direction INTEGER :: IKTB,IKTE ! start, end of k loops in physical domain INTEGER :: JSV,JIJ,JK ! scalar loop counter REAL, DIMENSION(D%NIJT) :: ZCOEFFLXU, & - ZCOEFFLXV, ZUSLOPEM, ZVSLOPEM + ZCOEFFLXV, ZUSLOPEM, ZVSLOPEM, & + ZFLUXSFCU,ZFLUXSFCV ! coefficients for the surface flux ! evaluation and copy of PUSLOPEM and ! PVSLOPEM in local 3D arrays @@ -382,6 +385,8 @@ ENDIF ! ZUSLOPEM(IIJB:IIJE)=PUSLOPEM(IIJB:IIJE) ZVSLOPEM(IIJB:IIJE)=PVSLOPEM(IIJB:IIJE) +ZFLUXSFCU(IIJB:IIJE)=PSFUM(IIJB:IIJE) +ZFLUXSFCV(IIJB:IIJE)=PSFVM(IIJB:IIJE) ! !---------------------------------------------------------------------------- ! @@ -411,7 +416,7 @@ ZA(IIJB:IIJE,1:D%NKT) = -PTSTEP * ZCMFS * ZWORK1(IIJB:IIJE,1:D%NKT)* ZWORK4(IIJB ZCOEFFLXU(IIJB:IIJE) = PCDUEFF(IIJB:IIJE) * (PDIRCOSZW(IIJB:IIJE)**2 - ZDIRSINZW(IIJB:IIJE)**2) & * PCOSSLOPE(IIJB:IIJE) ZCOEFFLXV(IIJB:IIJE) = PCDUEFF(IIJB:IIJE) * PDIRCOSZW(IIJB:IIJE) * PSINSLOPE(IIJB:IIJE) - +! ! prepare the implicit scheme coefficients for the surface flux ZCOEFS(IIJB:IIJE)= ZCOEFFLXU(IIJB:IIJE) * PCOSSLOPE(IIJB:IIJE) * PDIRCOSZW(IIJB:IIJE) & +ZCOEFFLXV(IIJB:IIJE) * PSINSLOPE(IIJB:IIJE) @@ -422,60 +427,53 @@ ZWORK11D(IIJB:IIJE)=ZCOEFS(IIJB:IIJE) / PDZZ(IIJB:IIJE,IKB) CALL MXM2D_PHY(D,ZWORK11D,ZCOEFS) ! ! -! ZSOURCE= FLUX /DZ +ZSOURCE(IIJB:IIJE,IKTB+1:IKTE-1) = 0. +! ZSOURCE= sfc FLUX /DZ +! Sfx flux assumed to be in SI & at vorticity point CALL MXM_PHY(D,PRHODJ,ZWORK1) -IF (OOCEAN) THEN ! OCEAN MODEL ONLY - ! Sfx flux assumed to be in SI & at vorticity point - !$mnh_expand_array(JIJ=IIJB:IIJE) - IF (OCOUPLES) THEN - ZSOURCE(IIJB:IIJE,IKE) = PSSUFL_C(IIJB:IIJE)/PDZZ(IIJB:IIJE,IKE) & - *0.5 * ( 1. + ZWORK1(IIJB:IIJE,D%NKU) / ZWORK1(IIJB:IIJE,IKE)) - ELSE - ZSOURCE(IIJB:IIJE,IKE) = PSSUFL(IIJB:IIJE) - ZSOURCE(IIJB:IIJE,IKE) = ZSOURCE(IIJB:IIJE,IKE) /PDZZ(IIJB:IIJE,IKE) & - *0.5 * ( 1. + ZWORK1(IIJB:IIJE,D%NKU) / ZWORK1(IIJB:IIJE,IKE) ) - ENDIF - !$mnh_end_expand_array(JIJ=IIJB:IIJE) - !No flux at the ocean domain bottom - ZSOURCE(IIJB:IIJE,IKB) = 0. - ZSOURCE(IIJB:IIJE,IKTB+1:IKTE-1) = 0 ! -ELSE !ATMOS MODEL ONLY - IF (OCOUPLES) THEN +IF (OOCEAN) THEN ! Ocean model !$mnh_expand_array(JIJ=IIJB:IIJE) - ZSOURCE(IIJB:IIJE,IKB) = PSSUFL_C(IIJB:IIJE)/PDZZ(IIJB:IIJE,IKB) & - * 0.5 * ( 1. + ZWORK1(IIJB:IIJE,D%NKA) / ZWORK1(IIJB:IIJE,IKB) ) + ZWORK21D(IIJB:IIJE) = ZFLUXSFCU(IIJB:IIJE)/PDZZ(IIJB:IIJE,IKE) !$mnh_end_expand_array(JIJ=IIJB:IIJE) - ELSE - !$mnh_expand_array(JIJ=IIJB:IIJE) - ! compute the explicit tangential flux at the W point - ZSOURCE(IIJB:IIJE,IKB) = & - PTAU11M(IIJB:IIJE) * PCOSSLOPE(IIJB:IIJE) * PDIRCOSZW(IIJB:IIJE) * ZDIRSINZW(IIJB:IIJE) & - -PTAU12M(IIJB:IIJE) * PSINSLOPE(IIJB:IIJE) * ZDIRSINZW(IIJB:IIJE) & - -PTAU33M(IIJB:IIJE) * PCOSSLOPE(IIJB:IIJE) * ZDIRSINZW(IIJB:IIJE) * PDIRCOSZW(IIJB:IIJE) + CALL MXM2D_PHY(D,ZWORK21D,ZWORK31D) + ! + !$mnh_expand_array(JIJ=IIJB:IIJE) + ZSOURCE(IIJB:IIJE,IKE) = ZWORK31D(IIJB:IIJE) & + *0.5 * ( 1. + ZWORK1(IIJB:IIJE,D%NKU) / ZWORK1(IIJB:IIJE,IKE)) + !$mnh_end_expand_array(JIJ=IIJB:IIJE) + ! + ! Zero flux at the ocean domain bottom + ZSOURCE(IIJB:IIJE,IKB) = 0. + ! +ELSE ! Atmosphere + ! Compute the explicit tangential flux at the W point + !$mnh_expand_array(JIJ=IIJB:IIJE) + ZSOURCE(IIJB:IIJE,IKB) = & + PTAU11M(IIJB:IIJE) * PCOSSLOPE(IIJB:IIJE) * PDIRCOSZW(IIJB:IIJE) * ZDIRSINZW(IIJB:IIJE) & + -PTAU12M(IIJB:IIJE) * PSINSLOPE(IIJB:IIJE) * ZDIRSINZW(IIJB:IIJE) & + -PTAU33M(IIJB:IIJE) * PCOSSLOPE(IIJB:IIJE) * ZDIRSINZW(IIJB:IIJE) * PDIRCOSZW(IIJB:IIJE) ! - ! add the vertical part or the surface flux at the U,W vorticity point + ! add the vertical part or the surface flux at the U,W vorticity point ! - ZWORK31D(IIJB:IIJE) = ZSOURCE(IIJB:IIJE,IKB)/PDZZ(IIJB:IIJE,IKB) - !$mnh_end_expand_array(JIJ=IIJB:IIJE) - CALL MXM2D_PHY(D,ZWORK31D,ZWORK41D) - ZWORK51D(IIJB:IIJE)= ZCOEFFLXU(IIJB:IIJE) / PDZZ(IIJB:IIJE,IKB) & - *ZUSLOPEM(IIJB:IIJE) & - -ZCOEFFLXV(IIJB:IIJE) / PDZZ(IIJB:IIJE,IKB) & - *ZVSLOPEM(IIJB:IIJE) - CALL MXM2D_PHY(D,ZWORK51D,ZWORK61D) - !$mnh_expand_array(JIJ=IIJB:IIJE) - ZSOURCE(IIJB:IIJE,IKB) = & - ( ZWORK41D(IIJB:IIJE) & - + ZWORK61D(IIJB:IIJE) & - - ZCOEFS(IIJB:IIJE) * PUM(IIJB:IIJE,IKB) * PIMPL & - ) * 0.5 * ( 1. + ZWORK1(IIJB:IIJE,D%NKA) / ZWORK1(IIJB:IIJE,IKB) ) - !$mnh_end_expand_array(JIJ=IIJB:IIJE) - ENDIF + ZWORK31D(IIJB:IIJE) = ZSOURCE(IIJB:IIJE,IKB)/PDZZ(IIJB:IIJE,IKB) + !$mnh_end_expand_array(JIJ=IIJB:IIJE) + CALL MXM2D_PHY(D,ZWORK31D,ZWORK41D) + ZWORK51D(IIJB:IIJE)= ZCOEFFLXU(IIJB:IIJE) / PDZZ(IIJB:IIJE,IKB) & + *ZUSLOPEM(IIJB:IIJE) & + -ZCOEFFLXV(IIJB:IIJE) / PDZZ(IIJB:IIJE,IKB) & + *ZVSLOPEM(IIJB:IIJE) + CALL MXM2D_PHY(D,ZWORK51D,ZWORK61D) + !$mnh_expand_array(JIJ=IIJB:IIJE) + ZSOURCE(IIJB:IIJE,IKB) = & + ( ZWORK41D(IIJB:IIJE) & + + ZWORK61D(IIJB:IIJE) & + - ZCOEFS(IIJB:IIJE) * PUM(IIJB:IIJE,IKB) * PIMPL & + ) * 0.5 * ( 1. + ZWORK1(IIJB:IIJE,D%NKA) / ZWORK1(IIJB:IIJE,IKB) ) + !$mnh_end_expand_array(JIJ=IIJB:IIJE) ! - ZSOURCE(IIJB:IIJE,IKTB+1:IKTE-1) = 0. ZSOURCE(IIJB:IIJE,IKE) = 0. -ENDIF !end ocean or atmosphere cases +ENDIF ! ! Obtention of the split U at t+ deltat ! @@ -495,8 +493,7 @@ CALL MXM_PHY(D,PDZZ,ZWORK5) PRUS(IIJB:IIJE,1:D%NKT)= PRUS(IIJB:IIJE,1:D%NKT)+ZWORK1(IIJB:IIJE,1:D%NKT)*(ZRES(IIJB:IIJE,1:D%NKT) & - PUM(IIJB:IIJE,1:D%NKT))/PTSTEP ! -! -!* 5.2 Partial Dynamic Production +!* 5.2 Partial TKE Dynamic Production ! ! vertical flux of the U wind component ! @@ -504,26 +501,20 @@ ZFLXZ(IIJB:IIJE,1:D%NKT) = -ZCMFS * ZWORK2(IIJB:IIJE,1:D%NKT) * ZWORK4(IIJB: / ZWORK5(IIJB:IIJE,1:D%NKT) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:D%NKT) ! -! surface flux -CALL MXM_PHY(D,PDZZ,ZWORK1) -CALL MXM_PHY(D,PRHODJ,ZWORK2) -!$mnh_expand_array(JIJ=IIJB:IIJE) -ZFLXZ(IIJB:IIJE,IKB) = ZWORK1(IIJB:IIJE,IKB) * & - ( ZSOURCE(IIJB:IIJE,IKB) & - +ZCOEFS(IIJB:IIJE) * ZRES(IIJB:IIJE,IKB) * PIMPL & - ) / 0.5 / ( 1. + ZWORK2(IIJB:IIJE,D%NKA)/ ZWORK2(IIJB:IIJE,IKB) ) -! -ZFLXZ(IIJB:IIJE,D%NKA) = ZFLXZ(IIJB:IIJE,IKB) -!$mnh_end_expand_array(JIJ=IIJB:IIJE) -! -IF (OOCEAN) THEN !ocean model at phys sfc (ocean domain top) -! -!$mnh_expand_array(JIJ=IIJB:IIJE) - ZFLXZ(IIJB:IIJE,IKE) = ZWORK1(IIJB:IIJE,IKE) * & - ZSOURCE(IIJB:IIJE,IKE) & - / 0.5 / ( 1. + ZWORK2(IIJB:IIJE,D%NKU)/ ZWORK2(IIJB:IIJE,IKE) ) - ZFLXZ(IIJB:IIJE,D%NKU) = ZFLXZ(IIJB:IIJE,IKE) -!$mnh_end_expand_array(JIJ=IIJB:IIJE) +IF (OOCEAN) THEN + ZFLXZ(IIJB:IIJE,IKE+1) = ZFLUXSFCU(IIJB:IIJE) +ELSE + ! surface flux + CALL MXM_PHY(D,PDZZ,ZWORK1) + CALL MXM_PHY(D,PRHODJ,ZWORK2) + !$mnh_expand_array(JIJ=IIJB:IIJE) + ZFLXZ(IIJB:IIJE,IKB) = ZWORK1(IIJB:IIJE,IKB) * & + ( ZSOURCE(IIJB:IIJE,IKB) & + +ZCOEFS(IIJB:IIJE) * ZRES(IIJB:IIJE,IKB) * PIMPL & + ) / 0.5 / ( 1. + ZWORK2(IIJB:IIJE,D%NKA)/ ZWORK2(IIJB:IIJE,IKB) ) + ! + ZFLXZ(IIJB:IIJE,D%NKA) = ZFLXZ(IIJB:IIJE,IKB) + !$mnh_end_expand_array(JIJ=IIJB:IIJE) END IF ! IF ( OTURB_FLX .AND. TPFILE%LOPENED ) THEN @@ -545,8 +536,8 @@ END IF ! PWU(IIJB:IIJE,1:D%NKT) = ZFLXZ(IIJB:IIJE,1:D%NKT) ! -! Contribution to the dynamic production of TKE -! compute the dynamic production at the mass point +! Contribution to the TKE dynamic production of TKE +! (computed at mass point) ! CALL GZ_U_UW_PHY(D,PUM,PDZZ,ZWORK1) !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:D%NKT) @@ -558,23 +549,30 @@ CALL MZF_PHY(D,ZWORK3,ZWORK4) PDP(IIJB:IIJE,1:D%NKT) = -ZWORK4(IIJB:IIJE,1:D%NKT) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:D%NKT) ! -! evaluate the dynamic production at w(IKB+D%NKL) in PDP(IKB) +! Special cases near surface CALL MXM_PHY(D,PDZZ,ZWORK1) -ZWORK2(IIJB:IIJE,IKB) = ZFLXZ(IIJB:IIJE,IKB+D%NKL) * (PUM(IIJB:IIJE,IKB+D%NKL)-PUM(IIJB:IIJE,IKB)) & - / ZWORK1(IIJB:IIJE,IKB+D%NKL) -CALL MXF_PHY(D,ZWORK2,ZWORK3) -!$mnh_expand_array(JIJ=IIJB:IIJE) -PDP(IIJB:IIJE,IKB) = -ZWORK3(IIJB:IIJE,IKB) -!$mnh_end_expand_array(JIJ=IIJB:IIJE) -! IF (OOCEAN) THEN - ZWORK2(IIJB:IIJE,IKE) = ZFLXZ(IIJB:IIJE,IKE-D%NKL) * (PUM(IIJB:IIJE,IKE)-PUM(IIJB:IIJE,IKE-D%NKL)) & + ! evaluate the dynamic production at w(IKE) and store in PDP(IKE) + ! before to be extrapolated in tke_eps routine + !$mnh_expand_array(JIJ=IIJB:IIJE) + ZWORK2(IIJB:IIJE,IKE) = ZFLXZ(IIJB:IIJE,IKE) * (PUM(IIJB:IIJE,IKE)-PUM(IIJB:IIJE,IKE-D%NKL)) & / ZWORK1(IIJB:IIJE,IKE-D%NKL) + !$mnh_end_expand_array(JIJ=IIJB:IIJE) CALL MXF_PHY(D,ZWORK2,ZWORK3) - ! evaluate the dynamic production at w(IKE-D%NKL) in PDP(IKE) - !$mnh_expand_array(JIJ=IIJB:IIJE) + !$mnh_expand_array(JIJ=IIJB:IIJE) PDP(IIJB:IIJE,IKE) = -ZWORK3(IIJB:IIJE,IKE) !$mnh_end_expand_array(JIJ=IIJB:IIJE) +ELSE ! Atmosphere + ! evaluate the dynamic production at w(IKB+KKL) in PDP(IKB) + !$mnh_expand_array(JIJ=IIJB:IIJE) + ZWORK2(IIJB:IIJE,IKB) = ZFLXZ(IIJB:IIJE,IKB+D%NKL) * (PUM(IIJB:IIJE,IKB+D%NKL)-PUM(IIJB:IIJE,IKB)) & + / ZWORK1(IIJB:IIJE,IKB+D%NKL) + !$mnh_end_expand_array(JIJ=IIJB:IIJE) + CALL MXF_PHY(D,ZWORK2,ZWORK3) + !$mnh_expand_array(JIJ=IIJB:IIJE) + PDP(IIJB:IIJE,IKB) = -ZWORK3(IIJB:IIJE,IKB) + !$mnh_end_expand_array(JIJ=IIJB:IIJE) +! END IF ! ! Storage in the LES configuration @@ -654,7 +652,7 @@ IF(HTURBDIM=='3DIM') THEN !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:D%NKT) END IF ! - ! Complete the Dynamical production with the W wind component + ! Complete the TKE dynamical production with the W wind contribution ! CALL GX_W_UW_PHY(D,OFLAT,PWM,PDXX,PDZZ,PDZX, ZWORK1) !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:D%NKT) @@ -666,48 +664,39 @@ IF(HTURBDIM=='3DIM') THEN ZA(IIJB:IIJE,1:D%NKT) = -ZWORK3(IIJB:IIJE,1:D%NKT) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:D%NKT) ! + ! Special cases near surface + CALL DXM_PHY(D,PWM,ZWORK1) + IF (OOCEAN) THEN + ! evaluate the dynamic production at w(IKE) in PDP(IKE) + ! + !$mnh_expand_array(JIJ=IIJB:IIJE) + ZWORK31D(IIJB:IIJE) = - ZFLXZ(IIJB:IIJE,IKE) * ZWORK1(IIJB:IIJE,IKE) & + / (0.5*(PDXX(IIJB:IIJE,IKE-D%NKL)+PDXX(IIJB:IIJE,IKE))) + !$mnh_end_expand_array(JIJ=IIJB:IIJE) + CALL MXF2D_PHY(D,ZWORK31D,ZWORK41D) + ZA(IIJB:IIJE,IKE) = ZWORK41D(IIJB:IIJE) ! - ! evaluate the dynamic production at w(IKB+D%NKL) in PDP(IKB) - - CALL DXM_PHY(D,PWM,ZWORK1) - ! - !$mnh_expand_array(JIJ=IIJB:IIJE) - ZWORK21D(IIJB:IIJE) = (PWM(IIJB:IIJE,IKB+2*D%NKL)-PWM(IIJB:IIJE,IKB+D%NKL)) & - / (PDZZ(IIJB:IIJE,IKB+2*D%NKL)+PDZZ(IIJB:IIJE,IKB+D%NKL)) & - + (PWM(IIJB:IIJE,IKB+D%NKL)-PWM(IIJB:IIJE,IKB)) & - / (PDZZ(IIJB:IIJE,IKB+D%NKL)+PDZZ(IIJB:IIJE,IKB)) - !$mnh_end_expand_array(JIJ=IIJB:IIJE) - ! - CALL MXM2D_PHY(D,ZWORK21D,ZWORK51D) - !$mnh_expand_array(JIJ=IIJB:IIJE) - ZWORK31D(IIJB:IIJE) = - ZFLXZ(IIJB:IIJE,IKB+D%NKL) & - * ( ZWORK1(IIJB:IIJE,IKB+D%NKL) - ZWORK51D(IIJB:IIJE) & - * PDZX(IIJB:IIJE,IKB+D%NKL) ) & - / (0.5*(PDXX(IIJB:IIJE,IKB+D%NKL)+PDXX(IIJB:IIJE,IKB))) - !$mnh_end_expand_array(JIJ=IIJB:IIJE) - CALL MXF2D_PHY(D,ZWORK31D,ZWORK41D) - ZA(IIJB:IIJE,IKB) = ZWORK41D(IIJB:IIJE) - ! -IF (OOCEAN) THEN - ! evaluate the dynamic production at w(IKE-D%NKL) in PDP(IKE) - ! - !$mnh_expand_array(JIJ=IIJB:IIJE) - ZWORK21D(IIJB:IIJE) = (PWM(IIJB:IIJE,IKE-2*D%NKL)-PWM(IIJB:IIJE,IKE-D%NKL)) & - / (PDZZ(IIJB:IIJE,IKE-2*D%NKL)+PDZZ(IIJB:IIJE,IKE-D%NKL)) & - + (PWM(IIJB:IIJE,IKE-D%NKL)-PWM(IIJB:IIJE,IKE )) & - / (PDZZ(IIJB:IIJE,IKE-D%NKL)+PDZZ(IIJB:IIJE,IKE )) - !$mnh_end_expand_array(JIJ=IIJB:IIJE) - ! - CALL MXM2D_PHY(D,ZWORK21D,ZWORK51D) - !$mnh_expand_array(JIJ=IIJB:IIJE) - ZWORK31D(IIJB:IIJE) = - ZFLXZ(IIJB:IIJE,IKE-D%NKL) & - * ( ZWORK1(IIJB:IIJE,IKE-D%NKL) - ZWORK51D(IIJB:IIJE) & - * PDZX(IIJB:IIJE,IKE-D%NKL) ) & - / (0.5*(PDXX(IIJB:IIJE,IKE-D%NKL)+PDXX(IIJB:IIJE,IKE))) - !$mnh_end_expand_array(JIJ=IIJB:IIJE) - CALL MXF2D_PHY(D,ZWORK31D,ZWORK41D) - ZA(IIJB:IIJE,IKE) = ZWORK41D(IIJB:IIJE) -END IF + ELSE !Atmosphere + ! evaluate the dynamic production at w(IKB+D%NKL) in PDP(IKB) + ! + !$mnh_expand_array(JIJ=IIJB:IIJE) + ZWORK21D(IIJB:IIJE) = (PWM(IIJB:IIJE,IKB+2*D%NKL)-PWM(IIJB:IIJE,IKB+D%NKL)) & + / (PDZZ(IIJB:IIJE,IKB+2*D%NKL)+PDZZ(IIJB:IIJE,IKB+D%NKL)) & + + (PWM(IIJB:IIJE,IKB+D%NKL)-PWM(IIJB:IIJE,IKB)) & + / (PDZZ(IIJB:IIJE,IKB+D%NKL)+PDZZ(IIJB:IIJE,IKB)) + !$mnh_end_expand_array(JIJ=IIJB:IIJE) + ! + CALL MXM2D_PHY(D,ZWORK21D,ZWORK51D) + !$mnh_expand_array(JIJ=IIJB:IIJE) + ZWORK31D(IIJB:IIJE) = - ZFLXZ(IIJB:IIJE,IKB+D%NKL) & + * ( ZWORK1(IIJB:IIJE,IKB+D%NKL) - ZWORK51D(IIJB:IIJE) & + * PDZX(IIJB:IIJE,IKB+D%NKL) ) & + / (0.5*(PDXX(IIJB:IIJE,IKB+D%NKL)+PDXX(IIJB:IIJE,IKB))) + !$mnh_end_expand_array(JIJ=IIJB:IIJE) + CALL MXF2D_PHY(D,ZWORK31D,ZWORK41D) + ZA(IIJB:IIJE,IKB) = ZWORK41D(IIJB:IIJE) + ! + END IF ! !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:D%NKT) PDP(IIJB:IIJE,1:D%NKT)=PDP(IIJB:IIJE,1:D%NKT)+ZA(IIJB:IIJE,1:D%NKT) @@ -760,7 +749,7 @@ END IF !---------------------------------------------------------------------------- ! ! -!* 6. SOURCES OF V,W WIND COMPONENTS AND COMPLETE 1D DYNAMIC PRODUCTION +!* 6. SOURCES OF V,W WIND COMPONENTS AND COMPLETE 1D TKE DYNAMIC PRODUCTION ! ----------------------------------------------------------------- ! !* 6.1 Source of V wind component @@ -797,63 +786,63 @@ ZWORK11D(IIJB:IIJE)=ZCOEFS(IIJB:IIJE) / PDZZ(IIJB:IIJE,IKB) !$mnh_end_expand_array(JIJ=IIJB:IIJE) CALL MYM2D_PHY(D,ZWORK11D,ZCOEFS) ! -CALL MYM_PHY(D,PRHODJ,ZWORK1) ! it was MXM(PRHODJ) : bug corrected now ? REPRO55 OCEAN +! No flux in SOURCE TERM NULL OUTSIDE BC +ZSOURCE(IIJB:IIJE,IKB+1:IKE-1) = 0. +! Surface case +CALL MYM_PHY(D,PRHODJ,ZWORK1) IF (OOCEAN) THEN ! Ocean case - IF (OCOUPLES) THEN - !$mnh_expand_array(JIJ=IIJB:IIJE) - ZSOURCE(IIJB:IIJE,IKE) = PSSVFL_C(IIJB:IIJE)/PDZZ(IIJB:IIJE,IKE) & - *0.5 * ( 1. + ZWORK1(IIJB:IIJE,D%NKU) / ZWORK1(IIJB:IIJE,IKE)) - !$mnh_end_expand_array(JIJ=IIJB:IIJE) - ELSE + ZCOEFFLXU(IIJB:IIJE) = PCDUEFF(IIJB:IIJE) + ZCOEFFLXV(IIJB:IIJE) = PCDUEFF(IIJB:IIJE) + ZCOEFS(IIJB:IIJE)=ZCOEFFLXU(IIJB:IIJE) + ! average this flux to be located at the U,W vorticity point + !$mnh_expand_array(JIJ=IIJB:IIJE) + ZWORK11D(IIJB:IIJE) = ZCOEFS(IIJB:IIJE) / PDZZ(IIJB:IIJE,IKE) + !$mnh_end_expand_array(JIJ=IIJB:IIJE) + CALL MYM2D_PHY(D,ZWORK11D,ZCOEFS) + ! + ZWORK11D(IIJB:IIJE) = ZFLUXSFCV(IIJB:IIJE) / PDZZ(IIJB:IIJE,IKE) + CALL MYM2D_PHY(D,ZWORK11D,ZWORK21D) + ! !$mnh_expand_array(JIJ=IIJB:IIJE) - ZSOURCE(IIJB:IIJE,IKE) = PSSVFL(IIJB:IIJE) - ZSOURCE(IIJB:IIJE,IKE) = ZSOURCE(IIJB:IIJE,IKE)/PDZZ(IIJB:IIJE,IKE) & + ZSOURCE(IIJB:IIJE,IKE) = ZWORK21D(IIJB:IIJE) & *0.5 * ( 1. + ZWORK1(IIJB:IIJE,D%NKU) / ZWORK1(IIJB:IIJE,IKE)) !$mnh_end_expand_array(JIJ=IIJB:IIJE) - END IF !No flux at the ocean domain bottom ZSOURCE(IIJB:IIJE,IKB) = 0. +! ELSE ! Atmos case +! !$mnh_expand_array(JIJ=IIJB:IIJE) - ZWORK31D(IIJB:IIJE) = ZCOEFFLXU(IIJB:IIJE) / PDZZ(IIJB:IIJE,IKB) & - *ZUSLOPEM(IIJB:IIJE) & - +ZCOEFFLXV(IIJB:IIJE) / PDZZ(IIJB:IIJE,IKB) & + ZWORK31D(IIJB:IIJE) = ZCOEFFLXU(IIJB:IIJE) / PDZZ(IIJB:IIJE,IKB) & + *ZUSLOPEM(IIJB:IIJE) & + +ZCOEFFLXV(IIJB:IIJE) / PDZZ(IIJB:IIJE,IKB) & *ZVSLOPEM(IIJB:IIJE) !$mnh_end_expand_array(JIJ=IIJB:IIJE) CALL MYM2D_PHY(D,ZWORK31D,ZWORK61D) -! - IF (.NOT.OCOUPLES) THEN ! only atmosp without coupling + ! ! compute the explicit tangential flux at the W point - !$mnh_expand_array(JIJ=IIJB:IIJE) - ZSOURCE(IIJB:IIJE,IKB) = & - PTAU11M(IIJB:IIJE) * PSINSLOPE(IIJB:IIJE) * PDIRCOSZW(IIJB:IIJE) * ZDIRSINZW(IIJB:IIJE) & - +PTAU12M(IIJB:IIJE) * PCOSSLOPE(IIJB:IIJE) * ZDIRSINZW(IIJB:IIJE) & - -PTAU33M(IIJB:IIJE) * PSINSLOPE(IIJB:IIJE) * ZDIRSINZW(IIJB:IIJE) * PDIRCOSZW(IIJB:IIJE) - ! - ZWORK31D(IIJB:IIJE) = ZSOURCE(IIJB:IIJE,IKB)/PDZZ(IIJB:IIJE,IKB) - !$mnh_end_expand_array(JIJ=IIJB:IIJE) - CALL MYM2D_PHY(D,ZWORK31D,ZWORK51D) + !$mnh_expand_array(JIJ=IIJB:IIJE) + ZSOURCE(IIJB:IIJE,IKB) = & + PTAU11M(IIJB:IIJE) * PSINSLOPE(IIJB:IIJE) * PDIRCOSZW(IIJB:IIJE) * ZDIRSINZW(IIJB:IIJE) & + +PTAU12M(IIJB:IIJE) * PCOSSLOPE(IIJB:IIJE) * ZDIRSINZW(IIJB:IIJE) & + -PTAU33M(IIJB:IIJE) * PSINSLOPE(IIJB:IIJE) * ZDIRSINZW(IIJB:IIJE) * PDIRCOSZW(IIJB:IIJE) + ! + ZWORK31D(IIJB:IIJE) = ZSOURCE(IIJB:IIJE,IKB)/PDZZ(IIJB:IIJE,IKB) + !$mnh_end_expand_array(JIJ=IIJB:IIJE) + CALL MYM2D_PHY(D,ZWORK31D,ZWORK51D) ! ! add the vertical part or the surface flux at the V,W vorticity point - !$mnh_expand_array(JIJ=IIJB:IIJE) - ZSOURCE(IIJB:IIJE,IKB) = & - ( ZWORK51D(IIJB:IIJE) & - + ZWORK61D(IIJB:IIJE) & - - ZCOEFS(IIJB:IIJE) * PVM(IIJB:IIJE,IKB) * PIMPL & - ) * 0.5 * ( 1. + ZWORK1(IIJB:IIJE,D%NKA) / ZWORK1(IIJB:IIJE,IKB) ) - !$mnh_end_expand_array(JIJ=IIJB:IIJE) + !$mnh_expand_array(JIJ=IIJB:IIJE) + ZSOURCE(IIJB:IIJE,IKB) = & + ( ZWORK51D(IIJB:IIJE) & + + ZWORK61D(IIJB:IIJE) & + - ZCOEFS(IIJB:IIJE) * PVM(IIJB:IIJE,IKB) * PIMPL & + ) * 0.5 * ( 1. + ZWORK1(IIJB:IIJE,D%NKA) / ZWORK1(IIJB:IIJE,IKB) ) + !$mnh_end_expand_array(JIJ=IIJB:IIJE) ! - ELSE !atmosphere when coupling - ! input flux assumed to be in SI and at vorticity point - !$mnh_expand_array(JIJ=IIJB:IIJE) - ZSOURCE(IIJB:IIJE,IKB) = -PSSVFL_C(IIJB:IIJE)/(1.*PDZZ(IIJB:IIJE,IKB)) & - * 0.5 * ( 1. + ZWORK1(IIJB:IIJE,D%NKA) / ZWORK1(IIJB:IIJE,IKB) ) - !$mnh_end_expand_array(JIJ=IIJB:IIJE) - ENDIF !No flux at the atmosphere top ZSOURCE(IIJB:IIJE,IKE) = 0. ENDIF ! End of Ocean or Atmospher Cases -ZSOURCE(IIJB:IIJE,IKTB+1:IKTE-1) = 0. ! ! Obtention of the split V at t+ deltat CALL TRIDIAG_WIND(D,PVM,ZA,ZCOEFS,PTSTEP,PEXPL,PIMPL, & @@ -881,22 +870,16 @@ ZFLXZ(IIJB:IIJE,1:D%NKT) = -ZCMFS * ZWORK2(IIJB:IIJE,1:D%NKT) * ZWORK4(IIJB:II / ZWORK5(IIJB:IIJE,1:D%NKT) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:D%NKT) ! -!$mnh_expand_array(JIJ=IIJB:IIJE) -ZFLXZ(IIJB:IIJE,IKB) = ZWORK5(IIJB:IIJE,IKB) * & - ( ZSOURCE(IIJB:IIJE,IKB) & - +ZCOEFS(IIJB:IIJE) * ZRES(IIJB:IIJE,IKB) * PIMPL & - ) / 0.5 / ( 1. + ZWORK1(IIJB:IIJE,D%NKA) / ZWORK1(IIJB:IIJE,IKB) ) -! -! -ZFLXZ(IIJB:IIJE,D%NKA) = ZFLXZ(IIJB:IIJE,IKB) -!$mnh_end_expand_array(JIJ=IIJB:IIJE) -! IF (OOCEAN) THEN + ZFLXZ(IIJB:IIJE,IKE+1) = ZFLUXSFCV(IIJB:IIJE) +ELSE !$mnh_expand_array(JIJ=IIJB:IIJE) - ZFLXZ(IIJB:IIJE,IKE) = ZWORK5(IIJB:IIJE,IKE) * & - ZSOURCE(IIJB:IIJE,IKE) & - / 0.5 / ( 1. + ZWORK1(IIJB:IIJE,D%NKU) / ZWORK1(IIJB:IIJE,IKE) ) - ZFLXZ(IIJB:IIJE,D%NKU) = ZFLXZ(IIJB:IIJE,IKE) + ZFLXZ(IIJB:IIJE,IKB) = ZWORK5(IIJB:IIJE,IKB) * & + ( ZSOURCE(IIJB:IIJE,IKB) & + +ZCOEFS(IIJB:IIJE) * ZRES(IIJB:IIJE,IKB) * PIMPL & + ) / 0.5 / ( 1. + ZWORK1(IIJB:IIJE,D%NKA) / ZWORK1(IIJB:IIJE,IKB) ) + ! + ZFLXZ(IIJB:IIJE,D%NKA) = ZFLXZ(IIJB:IIJE,IKB) !$mnh_end_expand_array(JIJ=IIJB:IIJE) END IF ! @@ -919,8 +902,8 @@ END IF ! PWV(IIJB:IIJE,1:D%NKT) = ZFLXZ(IIJB:IIJE,1:D%NKT) ! -! Contribution to the dynamic production of TKE -! compute the dynamic production contribution at the mass point +! Contribution to the TKE dynamical production +! computed at mass point ! CALL GZ_V_VW_PHY(D,PVM,PDZZ,ZWORK1) !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:D%NKT) @@ -932,27 +915,30 @@ CALL MZF_PHY(D,ZWORK3,ZWORK4) ZA(IIJB:IIJE,1:D%NKT) = -ZWORK4(IIJB:IIJE,1:D%NKT) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:D%NKT) ! -! evaluate the dynamic production at w(IKB+D%NKL) in PDP(IKB) +! Special cases at surface CALL MYM_PHY(D,PDZZ,ZWORK1) -!$mnh_expand_array(JIJ=IIJB:IIJE) -ZWORK2(IIJB:IIJE,IKB) = ZFLXZ(IIJB:IIJE,IKB+D%NKL) * (PVM(IIJB:IIJE,IKB+D%NKL)-PVM(IIJB:IIJE,IKB)) & - / ZWORK1(IIJB:IIJE,IKB+D%NKL) -!$mnh_end_expand_array(JIJ=IIJB:IIJE) -CALL MYF_PHY(D,ZWORK2,ZWORK3) -!$mnh_expand_array(JIJ=IIJB:IIJE) -ZA(IIJB:IIJE,IKB) = -ZWORK3(IIJB:IIJE,IKB) -!$mnh_end_expand_array(JIJ=IIJB:IIJE) -! IF (OOCEAN) THEN - ! evaluate the dynamic production at w(IKE-D%NKL) in PDP(IKE) + ! evaluate the dynamic production at w(IKE) in PDP(IKE) + ! before extrapolation done in routine tke_eps_source !$mnh_expand_array(JIJ=IIJB:IIJE) - ZWORK2(IIJB:IIJE,IKE) = ZFLXZ(IIJB:IIJE,IKE-D%NKL) * (PVM(IIJB:IIJE,IKE)-PVM(IIJB:IIJE,IKE-D%NKL)) & + ZWORK2(IIJB:IIJE,IKE) = ZFLXZ(IIJB:IIJE,IKE) * (PVM(IIJB:IIJE,IKE)-PVM(IIJB:IIJE,IKE-D%NKL)) & / ZWORK1(IIJB:IIJE,IKE-D%NKL) !$mnh_end_expand_array(JIJ=IIJB:IIJE) CALL MYF_PHY(D,ZWORK2,ZWORK3) !$mnh_expand_array(JIJ=IIJB:IIJE) ZA(IIJB:IIJE,IKE) = -ZWORK3(IIJB:IIJE,IKE) !$mnh_end_expand_array(JIJ=IIJB:IIJE) +! +ELSE ! Atmosphere + ! evaluate the dynamic production at w(IKB+D%NKL) in PDP(IKB) + !$mnh_expand_array(JIJ=IIJB:IIJE) + ZWORK2(IIJB:IIJE,IKB) = ZFLXZ(IIJB:IIJE,IKB+D%NKL) * (PVM(IIJB:IIJE,IKB+D%NKL)-PVM(IIJB:IIJE,IKB)) & + / ZWORK1(IIJB:IIJE,IKB+D%NKL) + !$mnh_end_expand_array(JIJ=IIJB:IIJE) + CALL MYF_PHY(D,ZWORK2,ZWORK3) + !$mnh_expand_array(JIJ=IIJB:IIJE) + ZA(IIJB:IIJE,IKB) = -ZWORK3(IIJB:IIJE,IKB) + !$mnh_end_expand_array(JIJ=IIJB:IIJE) END IF ! !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:D%NKT) @@ -985,12 +971,13 @@ END IF ! IF(HTURBDIM=='3DIM') THEN ! Compute the source for the W wind component - !$mnh_expand_array(JIJ=IIJB:IIJE) - ZFLXZ(IIJB:IIJE,D%NKA) = 2 * ZFLXZ(IIJB:IIJE,IKB) - ZFLXZ(IIJB:IIJE,IKB+D%NKL) ! extrapolation - !$mnh_end_expand_array(JIJ=IIJB:IIJE) IF (OOCEAN) THEN !$mnh_expand_array(JIJ=IIJB:IIJE) - ZFLXZ(IIJB:IIJE,D%NKU) = 2 * ZFLXZ(IIJB:IIJE,IKE) - ZFLXZ(IIJB:IIJE,IKE-D%NKL) ! extrapolation + ZFLXZ(IIJB:IIJE,IKE+D%NKL) = 2 * ZFLXZ(IIJB:IIJE,IKE) - ZFLXZ(IIJB:IIJE,IKE-D%NKL) ! extrapolation + !$mnh_end_expand_array(JIJ=IIJB:IIJE) + ELSE + !$mnh_expand_array(JIJ=IIJB:IIJE) + ZFLXZ(IIJB:IIJE,D%NKA) = 2 * ZFLXZ(IIJB:IIJE,IKB) - ZFLXZ(IIJB:IIJE,IKB+D%NKL) ! extrapolation !$mnh_end_expand_array(JIJ=IIJB:IIJE) END IF ! @@ -1045,43 +1032,36 @@ IF(HTURBDIM=='3DIM') THEN !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:D%NKT) ZA(IIJB:IIJE,1:D%NKT) = -ZWORK3(IIJB:IIJE,1:D%NKT) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:D%NKT) - ! - CALL DYM_PHY(D,PWM,ZWORK1) - ! - !$mnh_expand_array(JIJ=IIJB:IIJE) - ZWORK21D(IIJB:IIJE) = (PWM(IIJB:IIJE,IKB+2*D%NKL )-PWM(IIJB:IIJE,IKB+D%NKL)) & - / (PDZZ(IIJB:IIJE,IKB+2*D%NKL)+PDZZ(IIJB:IIJE,IKB+D%NKL)) & - + (PWM(IIJB:IIJE,IKB+D%NKL)-PWM(IIJB:IIJE,IKB)) & - / (PDZZ(IIJB:IIJE,IKB+D%NKL)+PDZZ(IIJB:IIJE,IKB)) - !$mnh_end_expand_array(JIJ=IIJB:IIJE) - ! - CALL MYM2D_PHY(D,ZWORK21D,ZWORK51D) - !$mnh_expand_array(JIJ=IIJB:IIJE) - ZWORK31D(IIJB:IIJE ) = - ZFLXZ(IIJB:IIJE,IKB+D%NKL) & - * ( ZWORK1(IIJB:IIJE,IKB+D%NKL) - ZWORK51D(IIJB:IIJE ) & - * PDZY(IIJB:IIJE,IKB+D%NKL) ) & - / (0.5*(PDYY(IIJB:IIJE,IKB+D%NKL)+PDYY(IIJB:IIJE,IKB))) - !$mnh_end_expand_array(JIJ=IIJB:IIJE) - CALL MYF2D_PHY(D,ZWORK31D,ZWORK41D) - ZA(IIJB:IIJE,IKB) = ZWORK41D(IIJB:IIJE) - ! + ! + CALL DYM_PHY(D,PWM,ZWORK1) + ! Special case near surface IF (OOCEAN) THEN + ! evaluate the dynamic production at w(IKE) and stored in PDP(IKE) + !$mnh_expand_array(JIJ=IIJB:IIJE) + ZWORK31D(IIJB:IIJE) = - ZFLXZ(IIJB:IIJE,IKE) * ZWORK1(IIJB:IIJE,IKE) & + / (0.5*(PDYY(IIJB:IIJE,IKE-D%NKL)+PDYY(IIJB:IIJE,IKE))) + !$mnh_end_expand_array(JIJ=IIJB:IIJE) + CALL MYF2D_PHY(D,ZWORK31D,ZWORK41D) + ZA(IIJB:IIJE,IKE) = ZWORK41D(IIJB:IIJE) + ELSE ! Atmosphere + ! evaluate the dynamic production at w(IKB+KKL) and stored in PDP(IKB) !$mnh_expand_array(JIJ=IIJB:IIJE) - ZWORK21D(IIJB:IIJE) = (PWM(IIJB:IIJE,IKE-2*D%NKL)-PWM(IIJB:IIJE,IKE-D%NKL)) & - / (PDZZ(IIJB:IIJE,IKE-2*D%NKL)+PDZZ(IIJB:IIJE,IKE-D%NKL)) & - + (PWM(IIJB:IIJE,IKE-D%NKL)-PWM(IIJB:IIJE,IKE )) & - / (PDZZ(IIJB:IIJE,IKE-D%NKL)+PDZZ(IIJB:IIJE,IKE )) + ZWORK21D(IIJB:IIJE) = (PWM(IIJB:IIJE,IKB+2*D%NKL )-PWM(IIJB:IIJE,IKB+D%NKL)) & + / (PDZZ(IIJB:IIJE,IKB+2*D%NKL)+PDZZ(IIJB:IIJE,IKB+D%NKL)) & + + (PWM(IIJB:IIJE,IKB+D%NKL)-PWM(IIJB:IIJE,IKB)) & + / (PDZZ(IIJB:IIJE,IKB+D%NKL)+PDZZ(IIJB:IIJE,IKB)) !$mnh_end_expand_array(JIJ=IIJB:IIJE) ! CALL MYM2D_PHY(D,ZWORK21D,ZWORK51D) !$mnh_expand_array(JIJ=IIJB:IIJE) - ZWORK31D(IIJB:IIJE) = - ZFLXZ(IIJB:IIJE,IKE-D%NKL) & - * ( ZWORK1(IIJB:IIJE,IKE-D%NKL) - ZWORK51D(IIJB:IIJE ) & - * PDZY(IIJB:IIJE,IKE-D%NKL) ) & - / (0.5*(PDYY(IIJB:IIJE,IKE-D%NKL)+PDYY(IIJB:IIJE,IKE))) + ZWORK31D(IIJB:IIJE ) = - ZFLXZ(IIJB:IIJE,IKB+D%NKL) & + * ( ZWORK1(IIJB:IIJE,IKB+D%NKL) - ZWORK51D(IIJB:IIJE ) & + * PDZY(IIJB:IIJE,IKB+D%NKL) ) & + / (0.5*(PDYY(IIJB:IIJE,IKB+D%NKL)+PDYY(IIJB:IIJE,IKB))) !$mnh_end_expand_array(JIJ=IIJB:IIJE) CALL MYF2D_PHY(D,ZWORK31D,ZWORK41D) - ZA(IIJB:IIJE,IKE) = ZWORK41D(IIJB:IIJE) + ZA(IIJB:IIJE,IKB) = ZWORK41D(IIJB:IIJE) + ! END IF ! !$mnh_expand_array(JIJ=IIJB:IIJE,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 c15331683b07680354725c1f51bf21a39a3a9d40..9398968be719efaa3f7fd4f1c81a75047c393138 100644 --- a/src/common/turb/mode_turb_ver_thermo_flux.F90 +++ b/src/common/turb/mode_turb_ver_thermo_flux.F90 @@ -573,22 +573,13 @@ IF (GFTHR) THEN * ZWORK2(IIJB:IIJE,1:D%NKT) !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:D%NKT) END IF -! compute interface flux -IF (OCOUPLES) THEN ! Autocoupling O-A LES - IF (OOCEAN) THEN ! ocean model in coupled case - !$mnh_expand_array(JIJ=IIJB:IIJE) - ZF(IIJB:IIJE,IKE) = (PSSTFL_C(IIJB:IIJE)+PSSRFL_C(IIJB:IIJE)) & - *0.5* ( 1. + PRHODJ(IIJB:IIJE,D%NKU)/PRHODJ(IIJB:IIJE,IKE) ) - !$mnh_end_expand_array(JIJ=IIJB:IIJE) - ELSE ! atmosph model in coupled case - !$mnh_expand_array(JIJ=IIJB:IIJE) - ZF(IIJB:IIJE,IKB) = PSSTFL_C(IIJB:IIJE) & - *0.5* ( 1. + PRHODJ(IIJB:IIJE,D%NKA)/PRHODJ(IIJB:IIJE,IKB) ) - !$mnh_end_expand_array(JIJ=IIJB:IIJE) - ENDIF -! -ELSE ! No coupling O and A cases - ! atmosp bottom +! specialcase for surface +IF (OOCEAN) THEN ! ocean model in coupled case + !$mnh_expand_array(JIJ=IIJB:IIJE) + ZF(IIJB:IIJE,IKE+1) = PSFTHM(IIJB:IIJE) & + *0.5* ( 1. + PRHODJ(IIJB:IIJE,D%NKU)/PRHODJ(IIJB:IIJE,IKE) ) + !$mnh_end_expand_array(JIJ=IIJB:IIJE) +ELSE ! atmosp bottom !*In 3D, a part of the flux goes vertically, ! and another goes horizontally (in presence of slopes) !*In 1D, part of energy released in horizontal flux is taken into account in the vertical part @@ -606,18 +597,14 @@ ELSE ! No coupling O and A cases !$mnh_end_expand_array(JIJ=IIJB:IIJE) END IF ! - IF (OOCEAN) THEN - !$mnh_expand_array(JIJ=IIJB:IIJE) - ZF(IIJB:IIJE,IKE) = PSSTFL(IIJB:IIJE) *0.5*(1. + PRHODJ(IIJB:IIJE,D%NKU) / PRHODJ(IIJB:IIJE,IKE)) - !$mnh_end_expand_array(JIJ=IIJB:IIJE) - ELSE !end ocean case (in nocoupled case) ! atmos top #ifdef REPRO48 #else ZF(IIJB:IIJE,IKE)=0. + !TODO merge : the following solution must be kept : + !ZF((IIJB:IIJE,IKE+1)=0. #endif - END IF -END IF !end no coupled cases +END IF ! ! Compute the split conservative potential temperature at t+deltat CALL TRIDIAG_THERMO(D,PTHLM,ZF,ZDFDDTDZ,PTSTEP,PIMPL,PDZZ,& @@ -674,12 +661,13 @@ IF (TURBN%LHGRAD) THEN !$mnh_end_expand_where(JIJ=IIJB:IIJE,JK=1:D%NKT) END IF ! -!$mnh_expand_array(JIJ=IIJB:IIJE) -ZFLXZ(IIJB:IIJE,D%NKA) = ZFLXZ(IIJB:IIJE,IKB) -!$mnh_end_expand_array(JIJ=IIJB:IIJE) IF (OOCEAN) THEN !$mnh_expand_array(JIJ=IIJB:IIJE) - ZFLXZ(IIJB:IIJE,D%NKU) = ZFLXZ(IIJB:IIJE,IKE) + ZFLXZ(IIJB:IIJE,IKE+1) = ZFLXZ(IIJB:IIJE,IKE) + !$mnh_end_expand_array(JIJ=IIJB:IIJE) +ELSE + !$mnh_expand_array(JIJ=IIJB:IIJE) + ZFLXZ(IIJB:IIJE,D%NKA) = ZFLXZ(IIJB:IIJE,IKB) !$mnh_end_expand_array(JIJ=IIJB:IIJE) END IF ! @@ -696,8 +684,8 @@ PWTH(IIJB:IIJE,IKB)=0.5*(ZFLXZ(IIJB:IIJE,IKB)+ZFLXZ(IIJB:IIJE,IKB+D%NKL)) IF (OOCEAN) THEN !$mnh_expand_array(JIJ=IIJB:IIJE) PWTH(IIJB:IIJE,IKE)=0.5*(ZFLXZ(IIJB:IIJE,IKE)+ZFLXZ(IIJB:IIJE,IKE+D%NKL)) - PWTH(IIJB:IIJE,D%NKA)=0. - PWTH(IIJB:IIJE,D%NKU)=ZFLXZ(IIJB:IIJE,D%NKU) + PWTH(IIJB:IIJE,D%NKA)=0. + PWTH(IIJB:IIJE,D%NKU)=PWTH(IIJB:IIJE,IKE)! not used !$mnh_end_expand_array(JIJ=IIJB:IIJE) ELSE !$mnh_expand_array(JIJ=IIJB:IIJE) @@ -979,17 +967,12 @@ IF (KRR /= 0) THEN !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:D%NKT) END IF ! - ! compute interface flux - IF (OCOUPLES) THEN ! coupling NH O-A - IF (OOCEAN) THEN ! ocean model in coupled case - ! evap effect on salinity to be added later !!! - ZF(IIJB:IIJE,IKE) = 0. - ELSE ! atmosph model in coupled case - ZF(IIJB:IIJE,IKB) = 0. - ! AJOUTER FLUX EVAP SUR MODELE ATMOS - ENDIF - ! - ELSE ! No coupling NH OA case + !special case at sfc + IF (OOCEAN) THEN + ! General ocean case + ! salinity/evap effect to be added later !!!!! + ZF(IIJB:IIJE,IKE) = 0. + ELSE ! atmosp case ! atmosp bottom !* in 3DIM case, a part of the flux goes vertically, and another goes horizontally ! (in presence of slopes) @@ -1009,19 +992,12 @@ IF (KRR /= 0) THEN * 0.5 * (1. + PRHODJ(IIJB:IIJE,D%NKA) / PRHODJ(IIJB:IIJE,IKB)) !$mnh_end_expand_array(JIJ=IIJB:IIJE) END IF - ! - IF (OOCEAN) THEN - ! General ocean case - ! salinity/evap effect to be added later !!!!! - ZF(IIJB:IIJE,IKE) = 0. - ELSE !end ocean case (in nocoupled case) ! atmos top #ifdef REPRO48 #else ZF(IIJB:IIJE,IKE)=0. #endif END IF - END IF!end no coupled cases ! Compute the split conservative potential temperature at t+deltat CALL TRIDIAG_THERMO(D,PRM(:,:,1),ZF,ZDFDDRDZ,PTSTEP,PIMPL,& PDZZ,PRHODJ,PRP) @@ -1035,11 +1011,11 @@ IF (KRR /= 0) THEN ! ! replace the flux by the Leonard terms above ZALT and ZCLD_THOLD IF (TURBN%LHGRAD) THEN - DO JK=1,D%NKU +! DO JK=1,D%NKU ! !$mnh_expand_array(JIJ=IIJB:IIJE) ! ZALT(IIJB:IIJE,JK) = PZZ(IIJB:IIJE,JK)-XZS(IIJB:IIJE) !TODO TO BE ADDED AS ARGS OF TURB ! !$mnh_end_expand_array(JIJ=IIJB:IIJE) - END DO +! END DO CALL MZM_PHY(D,PRHODJ,ZWORK1) !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:D%NKT) ZWORK2(IIJB:IIJE,1:D%NKT) = ZWORK1(IIJB:IIJE,1:D%NKT)*ZF_LEONARD(IIJB:IIJE,1:D%NKT) @@ -1080,6 +1056,10 @@ IF (KRR /= 0) THEN ZFLXZ(IIJB:IIJE,D%NKA) = ZFLXZ(IIJB:IIJE,IKB) !$mnh_end_expand_array(JIJ=IIJB:IIJE) ! + IF (OOCEAN) THEN + ZFLXZ(IIJB:IIJE,D%NKU) = ZFLXZ(IIJB:IIJE,IKE) + END IF + ! DO JK=IKTB+1,IKTE-1 !$mnh_expand_array(JIJ=IIJB:IIJE) PWRC(IIJB:IIJE,JK)=0.5*(ZFLXZ(IIJB:IIJE,JK)+ZFLXZ(IIJB:IIJE,JK+D%NKL)) @@ -1087,10 +1067,20 @@ IF (KRR /= 0) THEN END DO !$mnh_expand_array(JIJ=IIJB:IIJE) PWRC(IIJB:IIJE,IKB)=0.5*(ZFLXZ(IIJB:IIJE,IKB)+ZFLXZ(IIJB:IIJE,IKB+D%NKL)) - PWRC(IIJB:IIJE,D%NKA)=0.5*(ZFLXZ(IIJB:IIJE,D%NKA)+ZFLXZ(IIJB:IIJE,D%NKA+D%NKL)) - PWRC(IIJB:IIJE,IKE)=PWRC(IIJB:IIJE,IKE-D%NKL) !$mnh_end_expand_array(JIJ=IIJB:IIJE) ! + IF (OOCEAN) THEN + !$mnh_expand_array(JIJ=IIJB:IIJE) + PWRC(IIJB:IIJE,IKE)=0.5*(ZFLXZ(IIJB:IIJE,IKE)+ZFLXZ(IIJB:IIJE,IKE+D%NKL)) + PWRC(IIJB:IIJE,D%NKA)=0. + PWRC(IIJB:IIJE,IKE+1)=ZFLXZ(IIJB:IIJE,IKE+1) + !$mnh_end_expand_array(JIJ=IIJB:IIJE) + ELSE + !$mnh_expand_array(JIJ=IIJB:IIJE) + PWRC(IIJB:IIJE,D%NKA)=0.5*(ZFLXZ(IIJB:IIJE,D%NKA)+ZFLXZ(IIJB:IIJE,D%NKA+D%NKL)) + PWRC(IIJB:IIJE,IKE)=PWRC(IIJB:IIJE,IKE-D%NKL) + !$mnh_end_expand_array(JIJ=IIJB:IIJE) + ENDIF ! IF ( OTURB_FLX .AND. TPFILE%LOPENED ) THEN ! stores the conservative mixing ratio vertical flux diff --git a/src/common/turb/turb.F90 b/src/common/turb/turb.F90 index 12d7e552f3ab9a388135c433337fb1c405790c7e..c457964847f5afa93c0e0434017b316ba4043bc6 100644 --- a/src/common/turb/turb.F90 +++ b/src/common/turb/turb.F90 @@ -879,8 +879,12 @@ IF (HPROGRAM/='AROME ') THEN ! CALL UPDATE_ROTATE_WIND(D,ZUSLOPE,ZVSLOPE,HLBCX,HLBCY) ELSE - ZUSLOPE=PUT(IIJB:IIJE,D%NKA) - ZVSLOPE=PVT(IIJB:IIJE,D%NKA) + ZUSLOPE(IIJB:IIJE)=PUT(IIJB:IIJE,D%NKA) + ZVSLOPE(IIJB:IIJE)=PVT(IIJB:IIJE,D%NKA) +END IF +IF (OOCEAN) THEN + ZUSLOPE(IIJB:IIJE)=PUT(IIJB:IIJE,D%NKU-1) + ZVSLOPE(IIJB:IIJE)=PVT(IIJB:IIJE,D%NKU-1) END IF ! ! @@ -893,15 +897,21 @@ ZCDUEFF(IIJB:IIJE) =-SQRT ( (PSFU(IIJB:IIJE)**2 + PSFV(IIJB:IIJE)**2) / #else (CST%XMNH_TINY + ZUSLOPE(IIJB:IIJE)**2 + ZVSLOPE(IIJB:IIJE)**2 ) ) #endif +!$mnh_end_expand_array(JIJ=IIJB:IIJE) ! !* 4.6 compute the surface tangential fluxes ! -ZTAU11M(IIJB:IIJE) =2./3.*( (1.+ (PZZ(IIJB:IIJE,IKB+D%NKL)-PZZ(IIJB:IIJE,IKB)) & +IF (OOCEAN) THEN + ZTAU11M(IIJB:IIJE)=0. +ELSE + !$mnh_expand_array(JIJ=IIJB:IIJE) + ZTAU11M(IIJB:IIJE) =2./3.*( (1.+ (PZZ(IIJB:IIJE,IKB+D%NKL)-PZZ(IIJB:IIJE,IKB)) & /(PDZZ(IIJB:IIJE,IKB+D%NKL)+PDZZ(IIJB:IIJE,IKB)) & ) *PTKET(IIJB:IIJE,IKB) & -0.5 *PTKET(IIJB:IIJE,IKB+D%NKL) & ) -!$mnh_end_expand_array(JIJ=IIJB:IIJE) + !$mnh_end_expand_array(JIJ=IIJB:IIJE) +END IF ZTAU12M(IIJB:IIJE) =0.0 ZTAU22M(IIJB:IIJE) =ZTAU11M(IIJB:IIJE) ZTAU33M(IIJB:IIJE) =ZTAU11M(IIJB:IIJE) @@ -989,7 +999,7 @@ CALL TURB_VER(D, CST,CSTURB,TURBN,KRR, KRRL, KRRI, & PTSTEP,TPFILE, & PDXX,PDYY,PDZZ,PDZX,PDZY,PDIRCOSZW,PZZ, & PCOSSLOPE,PSINSLOPE, & - PRHODJ,PTHVREF, & + PRHODJ,PTHVREF,PSFU,PSFV, & PSFTH,PSFRV,PSFSV,PSFTH,PSFRV,PSFSV, & ZCDUEFF,ZTAU11M,ZTAU12M,ZTAU33M, & PUT,PVT,PWT,ZUSLOPE,ZVSLOPE,PTHLT,PRT,PSVT, & @@ -1176,7 +1186,8 @@ CALL TKE_EPS_SOURCES(D,CST,CSTURB,BUCONF,HPROGRAM, & & PRHODJ,PDZZ,PDXX,PDYY,PDZX,PDZY,PZZ, & & PTSTEP,PIMPL,ZEXPL, & & HTURBLEN,HTURBDIM, & - & TPFILE,OTURB_DIAG,OLES_CALL,ODIAG_IN_RUN, & + & TPFILE,OTURB_DIAG,OLES_CALL,ODIAG_IN_RUN,OOCEAN, & + & PSFU,PSFV, & & PTP,PRTKES,PRTHLS,ZCOEF_DISS,PTDIFF,PTDISS,ZRTKEMS,& & TBUDGETS,KBUDGETS, PEDR=PEDR, PTR=PTR,PDISS=PDISS, & & PCURRENT_TKE_DISS=PCURRENT_TKE_DISS ) diff --git a/src/mesonh/ext/phys_paramn.f90 b/src/mesonh/ext/phys_paramn.f90 index 410592b19777f6cb30ad4b96c256896ea9e75a74..4e66a3cf118f4f887ad8e988824a7c7d29c3df52 100644 --- a/src/mesonh/ext/phys_paramn.f90 +++ b/src/mesonh/ext/phys_paramn.f90 @@ -839,28 +839,34 @@ END IF !* 1.6 Ocean case: ! Sfc turbulent fluxes & Radiative tendency due to SW penetrating ocean ! -IF (LOCEAN .AND. (.NOT.LCOUPLES)) THEN +IF (LCOUPLES) THEN +ZSFU(:,:)= XSSUFL_C(:,:,1) +ZSFV(:,:)= XSSVFL_C(:,:,1) +ZSFTH(:,:)= XSSTFL_C(:,:,1) +ZSFRV(:,:)=XSSRFL_C(:,:,1) +ELSE +IF (LOCEAN) THEN ! ALLOCATE( ZIZOCE(IKU)); ZIZOCE(:)=0. ALLOCATE( ZPROSOL1(IKU)) ALLOCATE( ZPROSOL2(IKU)) - ALLOCATE(XSSUFL(IIU,IJU)) - ALLOCATE(XSSVFL(IIU,IJU)) - ALLOCATE(XSSTFL(IIU,IJU)) ALLOCATE(XSSOLA(IIU,IJU)) ! Time interpolation JSW = INT(TDTCUR%xtime/REAL(NINFRT)) ZSWA = TDTCUR%xtime/REAL(NINFRT)-REAL(JSW) - XSSTFL = (XSSTFL_T(JSW+1)*(1.-ZSWA)+XSSTFL_T(JSW+2)*ZSWA) - XSSUFL = (XSSUFL_T(JSW+1)*(1.-ZSWA)+XSSUFL_T(JSW+2)*ZSWA) - XSSVFL = (XSSVFL_T(JSW+1)*(1.-ZSWA)+XSSVFL_T(JSW+2)*ZSWA) + ZSFRV = 0. + ZSFTH = (XSSTFL_T(JSW+1)*(1.-ZSWA)+XSSTFL_T(JSW+2)*ZSWA) + ZSFU = (XSSUFL_T(JSW+1)*(1.-ZSWA)+XSSUFL_T(JSW+2)*ZSWA) + ZSFV = (XSSVFL_T(JSW+1)*(1.-ZSWA)+XSSVFL_T(JSW+2)*ZSWA) ! ZIZOCE(IKU) = XSSOLA_T(JSW+1)*(1.-ZSWA)+XSSOLA_T(JSW+2)*ZSWA ZPROSOL1(IKU) = CST%XROC*ZIZOCE(IKU) ZPROSOL2(IKU) = (1.-CST%XROC)*ZIZOCE(IKU) IF(NVERB >= 5 ) THEN - WRITE(ILUOUT,*)'ZSWA JSW TDTCUR XTSTEP FT FU FV SolarR(IKU)', NINFRT, ZSWA,JSW,& - TDTCUR%xtime, XTSTEP, XSSTFL(2,2), XSSUFL(2,2),XSSVFL(2,2),ZIZOCE(IKU) +! WRITE(ILUOUT,*)'ZSWA JSW TDTCUR XTSTEP FT FU FV SolarR(IKU)', NINFRT, ZSWA,JSW,& +! TDTCUR%xtime, XTSTEP, ZSFTH(2,2), ZSFU(2,2),ZSFV(2,2),ZIZOCE(IKU) + WRITE(ILUOUT,*)'XSSTP1,XSSTP,NINFRT,ZSWA,JSW,TDTCUR%xtime,ZSFT', & + XSSTFL_T(JSW+1),XSSTFL_T(JSW),NINFRT,ZSWA,JSW, TDTCUR%xtime,ZSFTH(2,2) END IF if ( TBUCONF%LBUDGET_th ) call Budget_store_init( TBUDGETS(NBUDGET_TH), 'OCEAN', xrths(:, :, :) ) DO JKM=IKU-1,2,-1 @@ -871,10 +877,12 @@ IF (LOCEAN .AND. (.NOT.LCOUPLES)) THEN XRTHS(:,:,JKM) = XRTHS(:,:,JKM) + XRHODJ(:,:,JKM)*ZIZOCE(JKM) END DO if ( TBUCONF%LBUDGET_th ) call Budget_store_end ( TBUDGETS(NBUDGET_TH), 'OCEAN', xrths(:, :, :) ) + DEALLOCATE (XSSOLA) DEALLOCATE( ZIZOCE) DEALLOCATE (ZPROSOL1) DEALLOCATE (ZPROSOL2) -END IF +END IF! LOCEAN NO LCOUPLES +END IF!NO LCOUPLES ! ! CALL SECOND_MNH2(ZTIME2) @@ -1277,14 +1285,18 @@ IF (CSURF=='EXTE') THEN XVT(:,:,1+JPVEXT) = XVT(:,:,1+JPVEXT) - XVTRANS END IF ! -ELSE - ZSFTH = 0. - ZSFRV = 0. +ELSE ! case no SURFEX (CSURF logical) ZSFSV = 0. ZSFCO2 = 0. - ZSFU = 0. - ZSFV = 0. -END IF + IF (.NOT.LOCEAN) THEN + ZSFTH = 0. + ZSFRV = 0. + ZSFSV = 0. + ZSFCO2 = 0. + ZSFU = 0. + ZSFV = 0. + END IF +END IF !CSURF ! CALL SECOND_MNH2(ZTIME2) ! @@ -1528,7 +1540,7 @@ IF (LOCEAN .AND. LDEEPOC) THEN END DO DO JJ=IJB,IJE DO JI=IIB,IIE - IF ( ZDIST(JI,JJ) > 1.) XSSTFL(JI,JJ)=0. + IF ( ZDIST(JI,JJ) > 1.) ZSFTH(JI,JJ)=0. END DO END DO END IF !END DEEP OCEAN CONV CASE @@ -1623,7 +1635,6 @@ CALL SECOND_MNH2(ZTIME4) XUT(:,:,:) = XUT(:,:,:) - XUTRANS XVT(:,:,:) = XVT(:,:,:) - XVTRANS END IF - IF (CMF_CLOUD == 'STAT') THEN XSIGS =SQRT( XSIGS**2 + ZSIGMF**2 ) ENDIF @@ -1645,14 +1656,6 @@ PMAFL = PMAFL + ZTIME4 - ZTIME3 - ZTIME_LES_MF PTIME_BU = PTIME_BU + XTIME_LES_BU_PROCESS + XTIME_BU_PROCESS ! ! -!* deallocate sf flux array for ocean model (in grid nesting, dimensions can vary) -! -IF (LOCEAN .AND. (.NOT. LCOUPLES)) THEN - DEALLOCATE(XSSUFL) - DEALLOCATE(XSSVFL) - DEALLOCATE(XSSTFL) - DEALLOCATE(XSSOLA) -END IF !------------------------------------------------------------------------------- ! !* deallocation of variables used in more than one parameterization