diff --git a/src/common/turb/mode_tke_eps_sources.F90 b/src/common/turb/mode_tke_eps_sources.F90 index bb4ba8aeffac377ce44021b2f14a7edccb4a60ca..2b9faf5642cc6be5e6a697603e8712dba218d0e4 100644 --- a/src/common/turb/mode_tke_eps_sources.F90 +++ b/src/common/turb/mode_tke_eps_sources.F90 @@ -8,10 +8,10 @@ CONTAINS SUBROUTINE TKE_EPS_SOURCES(KKA,KKU,KKL,KMI,PTKEM,PLM,PLEPS,PDP, & & PTRH,PRHODJ,PDZZ,PDXX,PDYY,PDZX,PDZY,PZZ, & & PTSTEP,PIMPL,PEXPL, & - & HTURBLEN,HTURBDIM, & - & TPFILE,OTURB_DIAG,ODIAG_IN_RUN, & + & HTURBLEN,HTURBDIM,OOCEAN, & + & TPFILE,OTURB_DIAG,ODIAG_IN_RUN,PSFUM,PSFVM, & & PTP,PRTKES,PRTHLS,PCOEF_DISS,PTDIFF,PTDISS,PRTKEMS,& - & TBUDGETS, KBUDGETS, & + & TBUDGETS, KBUDGETS, & & PEDR, PTR,PDISS, PCURRENT_TKE_DISS ) ! ################################################################## ! @@ -178,8 +178,10 @@ CHARACTER(LEN=4), INTENT(IN) :: HTURBDIM ! dimensionality of the CHARACTER(LEN=4), INTENT(IN) :: HTURBLEN ! kind of mixing length TYPE(TFILEDATA), INTENT(IN) :: TPFILE ! Output file LOGICAL, INTENT(IN) :: OTURB_DIAG ! switch to write some -LOGICAL, INTENT(IN) :: ODIAG_IN_RUN ! switch to activate online diagnostics (mesonh) - ! diagnostic fields in the syncronous FM-file + ! diagnostic fields in the syncronous FM-file +LOGICAL, INTENT(IN) :: ODIAG_IN_RUN ! switch to activate online diagnostics (mesonh) +LOGICAL, INTENT(IN) :: OOCEAN ! switch to activate LES OCEAN version + REAL, DIMENSION(:,:,:), INTENT(INOUT):: PDP ! Dyn. prod. of TKE REAL, DIMENSION(:,:,:), INTENT(IN) :: PTRH REAL, DIMENSION(:,:,:), INTENT(IN) :: PTP ! Ther. prod. of TKE @@ -196,6 +198,7 @@ REAL, DIMENSION(:,:,:), INTENT(OUT), OPTIONAL :: PTR ! Transport pro REAL, DIMENSION(:,:,:), INTENT(OUT), OPTIONAL :: PDISS ! Dissipation of TKE REAL, DIMENSION(:,:,:), INTENT(OUT), OPTIONAL :: PEDR ! EDR REAL, DIMENSION(:,:,:), INTENT(INOUT), OPTIONAL :: PCURRENT_TKE_DISS ! if ODIAG_IN_RUN in mesonh +REAL, DIMENSION(:,:), INTENT(IN) :: PSFUM,PSFVM ! momentum sfc flux ! ! ! @@ -263,8 +266,13 @@ 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) -PDP(:,:,IKB) = PDP(:,:,IKB) * (1. + PDZZ(:,:,IKB+KKL)/PDZZ(:,:,IKB)) +IF (LOCEAN) THEN + ! W(IKE) value stored in PDP(IKE) to the mass localization of tke(IKE) + PDP(:,:,IKE) = PDP(:,:,IKE) * (1. + PDZZ(:,:,IKE)/PDZZ(:,:,IKE+1)) +ELSE + ! W(IKB+1) value stored in PDP(IKB) to the mass localization tke(IKB) + PDP(:,:,IKB) = PDP(:,:,IKB) * (1. + PDZZ(:,:,IKB+KKL)/PDZZ(:,:,IKB)) +END IF ! ! Compute the source terms for TKE: ( ADVECtion + NUMerical DIFFusion + ..) ! + (Dynamical Production) + (Thermal Production) - (dissipation) @@ -276,6 +284,12 @@ ZSOURCE(:,:,:) = ( PRTKES(:,:,:) + PRTKEMS(:,:,:) ) / PRHODJ(:,:,:) & !* 2.2 implicit vertical TKE transport ! ! +! To add here in ZSOURCE surface flux of TKE +!(assumed to be 0 for ATM, +IF (LOCEAN) THEN + !for ocean:wave breaking simple/very rough param wE = 100 Ustar**3 where ustar is the Tau_atmi/rhocea + ZSOURCE (:,:,IKE)=ZSOURCE(:,:,IKE)-1.E2*((PSFUM(:,:)**2 + PSFVM(:,:)**2)**1.5) /PDZZ(:,:,IKE) +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 49ed101bb374d335175ae8b26f446b5bdf427f44..393377797d4a4af6e802590439c6089404d96c7e 100644 --- a/src/common/turb/mode_turb_ver.F90 +++ b/src/common/turb/mode_turb_ver.F90 @@ -11,7 +11,7 @@ SUBROUTINE TURB_VER(KKA,KKU,KKL,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, & @@ -275,6 +275,7 @@ REAL, DIMENSION(:,:,:), INTENT(IN) :: MFMOIST ! moist mass flux dual sc REAL, DIMENSION(:,:,:), INTENT(IN) :: PTHVREF ! ref. state Virtual ! Potential Temperature ! +REAL, DIMENSION(:,:), INTENT(IN) :: PSFUM,PSFVM ! surface fluxe REAL, DIMENSION(:,:), INTENT(IN) :: PSFTHM,PSFRM ! surface fluxes at time REAL, DIMENSION(:,:,:), INTENT(IN) :: PSFSVM ! t - deltat ! @@ -556,7 +557,7 @@ CALL TURB_VER_DYN_FLUX(KKA,KKU,KKL, & 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 e4c1dff95ea98c9bd16bd7e63145bed84c94763e..9d018ff6e338b1a090d65ed8f0e0fbf17d94d871 100644 --- a/src/common/turb/mode_turb_ver_dyn_flux.F90 +++ b/src/common/turb/mode_turb_ver_dyn_flux.F90 @@ -13,6 +13,7 @@ SUBROUTINE TURB_VER_DYN_FLUX(KKA,KKU,KKL, & 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, & @@ -217,7 +218,6 @@ USE MODD_LES USE MODD_NSV USE MODD_OCEANH USE MODD_PARAMETERS -USE MODD_REF, ONLY : LCOUPLES USE MODD_TURB_n ! ! @@ -267,6 +267,7 @@ REAL, DIMENSION(:,:,:), INTENT(IN) :: PRHODJ ! dry density * grid volum REAL, DIMENSION(:,:,:), INTENT(IN) :: MFMOIST ! moist mass flux dual scheme ! +REAL, DIMENSION(:,:), INTENT(IN) :: PSFUM,PSFVM ! normal momentum sfc flux REAL, DIMENSION(:,:), INTENT(IN) :: PCDUEFF ! Cd * || u || at time t REAL, DIMENSION(:,:), INTENT(IN) :: PTAU11M ! <uu> in the axes linked ! to the maximum slope direction and the surface normal and the binormal @@ -325,6 +326,7 @@ REAL, DIMENSION(SIZE(PDZZ,1),SIZE(PDZZ,2),1) :: ZCOEFFLXU, & ! coefficients for the surface flux ! evaluation and copy of PUSLOPEM and ! PVSLOPEM in local 3D arrays +REAL, DIMENSION(SIZE(PDZZ,1),SIZE(PDZZ,2),1) :: ZFLUXSFCU,ZFLUXSFCV INTEGER :: IIU,IJU ! size of array in x,y,z directions ! REAL :: ZTIME1, ZTIME2, ZCMFS @@ -372,6 +374,8 @@ ENDIF ! ZUSLOPEM(:,:,1)=PUSLOPEM(:,:) ZVSLOPEM(:,:,1)=PVSLOPEM(:,:) +ZFLUXSFCU(:,:,1)=PSFUM(:,:) +ZFLUXSFCV(:,:,1)=PSFVM(:,:) ! !---------------------------------------------------------------------------- ! @@ -395,7 +399,7 @@ ZA(:,:,:) = -PTSTEP * ZCMFS * & ZCOEFFLXU(:,:,1) = PCDUEFF(:,:) * (PDIRCOSZW(:,:)**2 - ZDIRSINZW(:,:)**2) & * PCOSSLOPE(:,:) ZCOEFFLXV(:,:,1) = PCDUEFF(:,:) * PDIRCOSZW(:,:) * PSINSLOPE(:,:) - +! ! prepare the implicit scheme coefficients for the surface flux ZCOEFS(:,:,1)= ZCOEFFLXU(:,:,1) * PCOSSLOPE(:,:) * PDIRCOSZW(:,:) & +ZCOEFFLXV(:,:,1) * PSINSLOPE(:,:) @@ -403,28 +407,16 @@ ZCOEFS(:,:,1)= ZCOEFFLXU(:,:,1) * PCOSSLOPE(:,:) * PDIRCOSZW(:,:) & ! average this flux to be located at the U,W vorticity point ZCOEFS(:,:,1:1)=MXM(ZCOEFS(:,:,1:1) / PDZZ(:,:,IKB:IKB) ) ! -! -! ZSOURCE= FLUX /DZ -IF (OOCEAN) THEN ! OCEAN MODEL ONLY - ! Sfx flux assumed to be in SI & at vorticity point - IF (LCOUPLES) THEN - ZSOURCE(:,:,IKE:IKE) = XSSUFL_C(:,:,1:1)/PDZZ(:,:,IKE:IKE) & - *0.5 * ( 1. + MXM(PRHODJ(:,:,KKU:KKU)) / MXM(PRHODJ(:,:,IKE:IKE))) - ELSE - ZSOURCE(:,:,IKE) = XSSUFL(:,:) - ZSOURCE(:,:,IKE:IKE) = ZSOURCE (:,:,IKE:IKE) /PDZZ(:,:,IKE:IKE) & - *0.5 * ( 1. + MXM(PRHODJ(:,:,KKU:KKU)) / MXM(PRHODJ(:,:,IKE:IKE)) ) - ENDIF - !No flux at the ocean domain bottom + ZSOURCE(:,:,IKTB+1:IKTE-1) = 0 +! ZSOURCE= sfc FLUX /DZ +! Sfx flux assumed to be in SI & at vorticity point +IF (OOCEAN) THEN ! Ocean model + ZSOURCE(:,:,IKE:IKE) =MXM( ZFLUXSFCU(:,:,1:1) / PDZZ(:,:,IKE:IKE) ) & + * 0.5 * ( 1. + MXM(PRHODJ(:,:,KKU:KKU)) / MXM(PRHODJ(:,:,IKE:IKE)) ) + ! Zero flux at the ocean domain bottom ZSOURCE(:,:,IKB) = 0. - ZSOURCE(:,:,IKTB+1:IKTE-1) = 0 -! -ELSE !ATMOS MODEL ONLY - IF (LCOUPLES) THEN - ZSOURCE(:,:,IKB:IKB) = XSSUFL_C(:,:,1:1)/PDZZ(:,:,IKB:IKB) & - * 0.5 * ( 1. + MXM(PRHODJ(:,:,KKA:KKA)) / MXM(PRHODJ(:,:,IKB:IKB)) ) - ELSE - ! compute the explicit tangential flux at the W point +ELSE ! Atmosphere + ! Compute the explicit tangential flux at the W point ZSOURCE(:,:,IKB) = & PTAU11M(:,:) * PCOSSLOPE(:,:) * PDIRCOSZW(:,:) * ZDIRSINZW(:,:) & -PTAU12M(:,:) * PSINSLOPE(:,:) * ZDIRSINZW(:,:) & @@ -440,11 +432,9 @@ ELSE !ATMOS MODEL ONLY *ZVSLOPEM(:,:,1:1) ) & - ZCOEFS(:,:,1:1) * PUM(:,:,IKB:IKB) * PIMPL & ) * 0.5 * ( 1. + MXM(PRHODJ(:,:,KKA:KKA)) / MXM(PRHODJ(:,:,IKB:IKB)) ) - ENDIF -! - ZSOURCE(:,:,IKTB+1:IKTE-1) = 0. + ! Zero flux at upper BC for atmos case ZSOURCE(:,:,IKE) = 0. -ENDIF !end ocean or atmosphere cases +ENDIF ! ! Obtention of the split U at t+ deltat ! @@ -455,27 +445,21 @@ CALL TRIDIAG_WIND(KKA,KKU,KKL,PUM,ZA,ZCOEFS(:,:,1),PTSTEP,PEXPL,PIMPL, & ! PRUS(:,:,:)=PRUS(:,:,:)+MXM(PRHODJ(:,:,:))*(ZRES(:,:,:)-PUM(:,:,:))/PTSTEP ! -! -!* 5.2 Partial Dynamic Production +!* 5.2 Partial TKE Dynamic Production ! ! vertical flux of the U wind component ! ZFLXZ(:,:,:) = -ZCMFS * MXM(ZKEFF) * & DZM(PIMPL*ZRES + PEXPL*PUM, KKA, KKU, KKL) / MXM(PDZZ) -! -! surface flux -ZFLXZ(:,:,IKB:IKB) = MXM(PDZZ(:,:,IKB:IKB)) * & +IF (OOCEAN) THEN + ZFLXZ(:,:,IKE+1) = ZFLUXSFCU(:,:,1) +ELSE + ZFLXZ(:,:,IKB:IKB) = MXM(PDZZ(:,:,IKB:IKB)) * & ( ZSOURCE(:,:,IKB:IKB) & +ZCOEFS(:,:,1:1) * ZRES(:,:,IKB:IKB) * PIMPL & ) / 0.5 / ( 1. + MXM(PRHODJ(:,:,KKA:KKA)) / MXM(PRHODJ(:,:,IKB:IKB)) ) ! -ZFLXZ(:,:,KKA) = ZFLXZ(:,:,IKB) - -IF (OOCEAN) THEN !ocean model at phys sfc (ocean domain top) - ZFLXZ(:,:,IKE:IKE) = MXM(PDZZ(:,:,IKE:IKE)) * & - ZSOURCE(:,:,IKE:IKE) & - / 0.5 / ( 1. + MXM(PRHODJ(:,:,KKU:KKU)) / MXM(PRHODJ(:,:,IKE:IKE)) ) - ZFLXZ(:,:,KKU) = ZFLXZ(:,:,IKE) + ZFLXZ(:,:,KKA) = ZFLXZ(:,:,IKB) END IF ! IF ( OTURB_FLX .AND. TPFILE%LOPENED ) THEN @@ -497,23 +481,25 @@ END IF ! PWU(:,:,:) = ZFLXZ(:,:,:) ! -! 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) ! PDP(:,:,:) = - MZF(MXF(ZFLXZ * GZ_U_UW(PUM,PDZZ, KKA, KKU, KKL)), KKA, KKU, KKL) ! +! Special cases near surface +IF (OOCEAN) THEN +! evaluate the dynamic production at w(IKE) and store in PDP(IKE) +! before to be extrapolated in tke_eps routine + PDP(:,:,IKE:IKE) = - MXF ( & + ZFLXZ(:,:,IKE:IKE) * (PUM(:,:,IKE:IKE)-PUM(:,:,IKE-1:IKE-1)) & + / MXM(PDZZ(:,:,IKE-1:IKE-1)) & + ) +ELSE ! Atmosphere ! evaluate the dynamic production at w(IKB+KKL) in PDP(IKB) -PDP(:,:,IKB:IKB) = - MXF ( & - ZFLXZ(:,:,IKB+KKL:IKB+KKL) * (PUM(:,:,IKB+KKL:IKB+KKL)-PUM(:,:,IKB:IKB)) & + PDP(:,:,IKB:IKB) = - MXF ( & + ZFLXZ(:,:,IKB+KKL:IKB+KKL) * (PUM(:,:,IKB+KKL:IKB+KKL)-PUM(:,:,IKB:IKB)) & / MXM(PDZZ(:,:,IKB+KKL:IKB+KKL)) & ) -! -IF (OOCEAN) THEN - ! evaluate the dynamic production at w(IKE-KKL) in PDP(IKE) - PDP(:,:,IKE:IKE) = - MXF ( & - ZFLXZ(:,:,IKE-KKL:IKE-KKL) * (PUM(:,:,IKE:IKE)-PUM(:,:,IKE-KKL:IKE-KKL)) & - / MXM(PDZZ(:,:,IKE-KKL:IKE-KKL)) & - ) END IF ! ! Storage in the LES configuration @@ -535,10 +521,7 @@ IF(HTURBDIM=='3DIM') THEN ! Compute the source for the W wind component ! used to compute the W source at the ground ZFLXZ(:,:,KKA) = 2 * ZFLXZ(:,:,IKB) - ZFLXZ(:,:,IKB+KKL) ! extrapolation - IF (OOCEAN) THEN - ZFLXZ(:,:,KKU) = 2 * ZFLXZ(:,:,IKE) - ZFLXZ(:,:,IKE-KKL) ! extrapolation - END IF - + IF (OOCEAN) ZFLXZ(:,:,KKU) = 2 * ZFLXZ(:,:,IKE) - ZFLXZ(:,:,IKE-KKL) ! extrapolation ! IF (.NOT. LFLAT) THEN PRWS(:,:,:)= PRWS & @@ -550,11 +533,19 @@ IF(HTURBDIM=='3DIM') THEN PRWS(:,:,:)= PRWS -DXF(MZM(MXM(PRHODJ) /PDXX, KKA, KKU, KKL) * ZFLXZ ) END IF ! - ! Complete the Dynamical production with the W wind component + ! Complete the TKE dynamical production with the W wind contribution ! ZA(:,:,:)=-MZF(MXF(ZFLXZ * GX_W_UW(PWM,PDXX,PDZZ,PDZX, KKA, KKU, KKL)), KKA, KKU, KKL) ! - ! +! Special cases near surface + IF (OOCEAN) THEN + ! evaluate the dynamic production at w(IKE) and stored in PDP(IKE) + ZA(:,:,IKE:IKE) = - MXF ( & + ZFLXZ(:,:,IKE:IKE) * & + DXM( PWM(:,:,IKE:IKE) ) & + / (0.5*(PDXX(:,:,IKE-1:IKE-1)+PDXX(:,:,IKE:IKE))) & + ) + ELSE !Atmosphere ! evaluate the dynamic production at w(IKB+KKL) in PDP(IKB) ZA(:,:,IKB:IKB) = - MXF ( & ZFLXZ(:,:,IKB+KKL:IKB+KKL) * & @@ -567,23 +558,9 @@ IF(HTURBDIM=='3DIM') THEN * PDZX(:,:,IKB+KKL:IKB+KKL) & ) / (0.5*(PDXX(:,:,IKB+KKL:IKB+KKL)+PDXX(:,:,IKB:IKB))) & ) + END IF ! -IF (OOCEAN) THEN - ! evaluate the dynamic production at w(IKE-KKL) in PDP(IKE) - ZA(:,:,IKE:IKE) = - MXF ( & - ZFLXZ(:,:,IKE-KKL:IKE-KKL) * & - ( DXM( PWM(:,:,IKE-KKL:IKE-KKL) ) & - -MXM( (PWM(:,:,IKE-2*KKL:IKE-2*KKL )-PWM(:,:,IKE-KKL:IKE-KKL)) & - /(PDZZ(:,:,IKE-2*KKL:IKE-2*KKL)+PDZZ(:,:,IKE-KKL:IKE-KKL)) & - +(PWM(:,:,IKE-KKL:IKE-KKL)-PWM(:,:,IKE:IKE )) & - /(PDZZ(:,:,IKE-KKL:IKE-KKL)+PDZZ(:,:,IKE:IKE )) & - ) & - * PDZX(:,:,IKE-KKL:IKE-KKL) & - ) / (0.5*(PDXX(:,:,IKE-KKL:IKE-KKL)+PDXX(:,:,IKE:IKE))) & - ) -END IF - ! - PDP(:,:,:)=PDP(:,:,:)+ZA(:,:,:) + PDP(:,:,:)=PDP(:,:,:)+ZA(:,:,:) ! ! Storage in the LES configuration ! @@ -609,7 +586,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 @@ -636,19 +613,23 @@ ZCOEFS(:,:,1)= ZCOEFFLXU(:,:,1) * PSINSLOPE(:,:) * PDIRCOSZW(:,:) & ! average this flux to be located at the V,W vorticity point ZCOEFS(:,:,1:1)=MYM(ZCOEFS(:,:,1:1) / PDZZ(:,:,IKB:IKB) ) ! + +! No flux in SOURCE TERM NULL OUTSIDE BC +ZSOURCE(:,:,IKB+1:IKE-1) = 0. +! Surface case IF (OOCEAN) THEN ! Ocean case - IF (LCOUPLES) THEN - ZSOURCE(:,:,IKE:IKE) = XSSVFL_C(:,:,1:1)/PDZZ(:,:,IKE:IKE) & - *0.5 * ( 1. + MYM(PRHODJ(:,:,KKU:KKU)) / MYM(PRHODJ(:,:,IKE:IKE)) ) - ELSE - ZSOURCE(:,:,IKE) = XSSVFL(:,:) - ZSOURCE(:,:,IKE:IKE) = ZSOURCE(:,:,IKE:IKE)/PDZZ(:,:,IKE:IKE) & - *0.5 * ( 1. + MYM(PRHODJ(:,:,KKU:KKU)) / MYM(PRHODJ(:,:,IKE:IKE)) ) - END IF - !No flux at the ocean domain bottom - ZSOURCE(:,:,IKB) = 0. + ZCOEFFLXU(:,:,1) = PCDUEFF(:,:) + ZCOEFFLXV(:,:,1) = PCDUEFF(:,:) + ZCOEFS(:,:,1)=ZCOEFFLXU(:,:,1) +! average this flux to be located at the U,W vorticity point + ZCOEFS(:,:,1:1)=MYM(ZCOEFS(:,:,1:1) / PDZZ(:,:,IKE:IKE) ) + ZSOURCE(:,:,IKE:IKE) = MYM( ZFLUXSFCV(:,:,1:1) / PDZZ(:,:,IKE:IKE) ) & + * 0.5 * ( 1. + MYM(PRHODJ(:,:,KKU:KKU)) / MYM(PRHODJ(:,:,IKE:IKE)) ) +!No flux at the ocean domain bottom + ZSOURCE(:,:,IKB) = 0. +!!!!!!!!!!!!!!!!!!!!!! ELSE ! Atmos case - IF (.NOT.LCOUPLES) THEN ! only atmosp without coupling +!!!!!!!!!!!!!!!!!!!!! ! compute the explicit tangential flux at the W point ZSOURCE(:,:,IKB) = & PTAU11M(:,:) * PSINSLOPE(:,:) * PDIRCOSZW(:,:) * ZDIRSINZW(:,:) & @@ -665,17 +646,11 @@ ELSE ! Atmos case - ZCOEFS(:,:,1:1) * PVM(:,:,IKB:IKB) * PIMPL & ) * 0.5 * ( 1. + MYM(PRHODJ(:,:,KKA:KKA)) / MYM(PRHODJ(:,:,IKB:IKB)) ) ! - ELSE !atmosphere when coupling - ! input flux assumed to be in SI and at vorticity point - ZSOURCE(:,:,IKB:IKB) = -XSSVFL_C(:,:,1:1)/(1.*PDZZ(:,:,IKB:IKB)) & - * 0.5 * ( 1. + MYM(PRHODJ(:,:,KKA:KKA)) / MYM(PRHODJ(:,:,IKB:IKB)) ) - ENDIF - !No flux at the atmosphere top +!No flux at the atmosphere top ZSOURCE(:,:,IKE) = 0. -ENDIF ! End of Ocean or Atmospher Cases -ZSOURCE(:,:,IKTB+1:IKTE-1) = 0. -! -! Obtention of the split V at t+ deltat +ENDIF ! End of Ocean or Atmospheric Cases +! +! Obtention of the split V at t+ deltat CALL TRIDIAG_WIND(KKA,KKU,KKL,PVM,ZA,ZCOEFS(:,:,1),PTSTEP,PEXPL,PIMPL, & MYM(PRHODJ),ZSOURCE,ZRES) ! @@ -691,20 +666,17 @@ PRVS(:,:,:)=PRVS(:,:,:)+MYM(PRHODJ(:,:,:))*(ZRES(:,:,:)-PVM(:,:,:))/PTSTEP ZFLXZ(:,:,:) = -ZCMFS * MYM(ZKEFF) * & DZM(PIMPL*ZRES + PEXPL*PVM, KKA, KKU, KKL) / MYM(PDZZ) ! -ZFLXZ(:,:,IKB:IKB) = MYM(PDZZ(:,:,IKB:IKB)) * & +! +IF (OOCEAN) THEN + ZFLXZ(:,:,IKE+1) = ZFLUXSFCV(:,:,1) +ELSE + ZFLXZ(:,:,IKB:IKB) = MYM(PDZZ(:,:,IKB:IKB)) * & ( ZSOURCE(:,:,IKB:IKB) & +ZCOEFS(:,:,1:1) * ZRES(:,:,IKB:IKB) * PIMPL & ) / 0.5 / ( 1. + MYM(PRHODJ(:,:,KKA:KKA)) / MYM(PRHODJ(:,:,IKB:IKB)) ) ! -! -ZFLXZ(:,:,KKA) = ZFLXZ(:,:,IKB) -! -IF (OOCEAN) THEN - ZFLXZ(:,:,IKE:IKE) = MYM(PDZZ(:,:,IKE:IKE)) * & - ZSOURCE(:,:,IKE:IKE) & - / 0.5 / ( 1. + MYM(PRHODJ(:,:,KKU:KKU)) / MYM(PRHODJ(:,:,IKE:IKE)) ) - ZFLXZ(:,:,KKU) = ZFLXZ(:,:,IKE) -END IF + ZFLXZ(:,:,KKA) = ZFLXZ(:,:,IKB) + END IF ! IF ( OTURB_FLX .AND. TPFILE%LOPENED ) THEN ! stores the V wind component vertical flux @@ -725,24 +697,25 @@ END IF ! PWV(:,:,:) = ZFLXZ(:,:,:) ! -! 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 ! ZA(:,:,:) = - MZF(MYF(ZFLXZ * GZ_V_VW(PVM,PDZZ, KKA, KKU, KKL)), KKA, KKU, KKL) ! -! evaluate the dynamic production at w(IKB+KKL) in PDP(IKB) -ZA(:,:,IKB:IKB) = & - - MYF ( & -ZFLXZ(:,:,IKB+KKL:IKB+KKL) * (PVM(:,:,IKB+KKL:IKB+KKL)-PVM(:,:,IKB:IKB)) & - / MYM(PDZZ(:,:,IKB+KKL:IKB+KKL)) & - ) -! +! Special cases at surface IF (OOCEAN) THEN - ! evaluate the dynamic production at w(IKE-KKL) in PDP(IKE) +! evaluate the dynamic production at w(IKE) and stored in PDP(IKE) + ! before extrapolation done in routine tke_eps_source ZA(:,:,IKE:IKE) = - MYF ( & - ZFLXZ(:,:,IKE-KKL:IKE-KKL) * (PVM(:,:,IKE:IKE)-PVM(:,:,IKE-KKL:IKE-KKL)) & - / MYM(PDZZ(:,:,IKE-KKL:IKE-KKL)) & + ZFLXZ(:,:,IKE:IKE) * (PVM(:,:,IKE:IKE)-PVM(:,:,IKE-1:IKE-1)) & + / MYM(PDZZ(:,:,IKE-1:IKE-1)) & ) +ELSE ! Atmosphere +! evaluate the dynamic production at w(IKB+KL) and stored in PDP(IKB) + ZA(:,:,IKB:IKB) = - MYF ( & + ZFLXZ(:,:,IKB+KKL:IKB+KKL) * (PVM(:,:,IKB+KKL:IKB+KKL)-PVM(:,:,IKB:IKB)) & + / MYM(PDZZ(:,:,IKB+KKL:IKB+KKL)) & + ) END IF ! PDP(:,:,:)=PDP(:,:,:)+ZA(:,:,:) @@ -763,10 +736,11 @@ END IF ! IF(HTURBDIM=='3DIM') THEN ! Compute the source for the W wind component - ZFLXZ(:,:,KKA) = 2 * ZFLXZ(:,:,IKB) - ZFLXZ(:,:,IKB+KKL) ! extrapolation - IF (OOCEAN) THEN - ZFLXZ(:,:,KKU) = 2 * ZFLXZ(:,:,IKE) - ZFLXZ(:,:,IKE-KKL) ! extrapolation - END IF + IF (OOCEAN) THEN + ZFLXZ(:,:,IKE+1) = 2 * ZFLXZ(:,:,IKE) - ZFLXZ(:,:,IKE-1) ! extrapolation + ELSE + ZFLXZ(:,:,KKA) = 2 * ZFLXZ(:,:,IKB) - ZFLXZ(:,:,IKB+KKL) ! extrapolation + END IF ! IF (.NOT. L2D) THEN IF (.NOT. LFLAT) THEN @@ -780,11 +754,18 @@ IF(HTURBDIM=='3DIM') THEN END IF END IF ! - ! Complete the Dynamical production with the W wind component + ! Complete the TKE dynamical production with the W wind component IF (.NOT. L2D) THEN ZA(:,:,:) = - MZF(MYF(ZFLXZ * GY_W_VW(PWM,PDYY,PDZZ,PDZY, KKA, KKU, KKL)), KKA, KKU, KKL) - ! - ! evaluate the dynamic production at w(IKB+KKL) in PDP(IKB) + ! Special case near surface + IF (OOCEAN) THEN + ! evaluate the dynamic production at w(IKE) and stored in PDP(IKE) + ZA(:,:,IKE:IKE) = - MYF ( & + ZFLXZ(:,:,IKE:IKE) * DYM( PWM(:,:,IKE:IKE) ) & + / (0.5*(PDYY(:,:,IKE-1:IKE-1)+PDYY(:,:,IKE:IKE))) & + ) + ELSE ! Atmosphere + ! evaluate the dynamic production at w(IKB+KKL) and stored in PDP(IKB) ZA(:,:,IKB:IKB) = - MYF ( & ZFLXZ(:,:,IKB+KKL:IKB+KKL) * & ( DYM( PWM(:,:,IKB+KKL:IKB+KKL) ) & @@ -797,18 +778,6 @@ IF(HTURBDIM=='3DIM') THEN ) / (0.5*(PDYY(:,:,IKB+KKL:IKB+KKL)+PDYY(:,:,IKB:IKB))) & ) ! - IF (OOCEAN) THEN - ZA(:,:,IKE:IKE) = - MYF ( & - ZFLXZ(:,:,IKE-KKL:IKE-KKL) * & - ( DYM( PWM(:,:,IKE-KKL:IKE-KKL) ) & - -MYM( (PWM(:,:,IKE-2*KKL:IKE-2*KKL)-PWM(:,:,IKE-KKL:IKE-KKL)) & - /(PDZZ(:,:,IKE-2*KKL:IKE-2*KKL)+PDZZ(:,:,IKE-KKL:IKE-KKL)) & - +(PWM(:,:,IKE-KKL:IKE-KKL)-PWM(:,:,IKE:IKE )) & - /(PDZZ(:,:,IKE-KKL:IKE-KKL)+PDZZ(:,:,IKE:IKE )) & - ) & - * PDZY(:,:,IKE-KKL:IKE-KKL) & - ) / (0.5*(PDYY(:,:,IKE-KKL:IKE-KKL)+PDYY(:,:,IKE:IKE))) & - ) END IF ! PDP(:,:,:)=PDP(:,:,:)+ZA(:,:,:) diff --git a/src/common/turb/mode_turb_ver_thermo_flux.F90 b/src/common/turb/mode_turb_ver_thermo_flux.F90 index 4aac5c81ae2b9ec635b0f59654fc4c69924a2596..ae6faa452abe03daa215f4bcceab3935dada304d 100644 --- a/src/common/turb/mode_turb_ver_thermo_flux.F90 +++ b/src/common/turb/mode_turb_ver_thermo_flux.F90 @@ -241,7 +241,6 @@ USE MODD_TURB_n, ONLY: LHGRAD, XCOEFHGRADTHL, XCOEFHGRADRM, XALTHGRAD, X USE MODD_CONF USE MODD_LES USE MODD_OCEANH -USE MODD_REF, ONLY: LCOUPLES USE MODD_TURB_n ! USE MODI_GRADIENT_U @@ -528,18 +527,10 @@ IF (GFTHR) THEN ZDFDDTDZ = ZDFDDTDZ + D_M3_WTH_WTHR_O_DDTDZ(Z3RDMOMENT,PREDTH1,& & PREDR1,PD,PBLL_O_E,PETHETA) * MZM(PFTHR, KKA, KKU, KKL) END IF -! compute interface flux -IF (LCOUPLES) THEN ! Autocoupling O-A LES - IF (OOCEAN) THEN ! ocean model in coupled case - ZF(:,:,IKE) = (XSSTFL_C(:,:,1)+XSSRFL_C(:,:,1)) & - *0.5* ( 1. + PRHODJ(:,:,KKU)/PRHODJ(:,:,IKE) ) - ELSE ! atmosph model in coupled case - ZF(:,:,IKB) = XSSTFL_C(:,:,1) & - *0.5* ( 1. + PRHODJ(:,:,KKA)/PRHODJ(:,:,IKB) ) - ENDIF -! -ELSE ! No coupling O and A cases - ! atmosp bottom +! specialcase for surface +IF (OOCEAN) THEN ! ocean sfc (domain top) + ZF(:,:,IKE+1) = PSFTHM(:,:) *0.5*(1. + PRHODJ(:,:,KKU) / PRHODJ(:,:,IKE)) +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 @@ -552,17 +543,14 @@ ELSE ! No coupling O and A cases / PDIRCOSZW(:,:) & * 0.5 * (1. + PRHODJ(:,:,KKA) / PRHODJ(:,:,IKB)) END IF -! - IF (OOCEAN) THEN - ZF(:,:,IKE) = XSSTFL(:,:) *0.5*(1. + PRHODJ(:,:,KKU) / PRHODJ(:,:,IKE)) - ELSE !end ocean case (in nocoupled case) ! atmos top #ifdef REPRO48 #else ZF(:,:,IKE)=0. + !TODO merge : the following solution must be kept : + !ZF(:,:,IKE+1)=0. #endif END IF -END IF !end no coupled cases ! ! Compute the split conservative potential temperature at t+deltat CALL TRIDIAG_THERMO(KKA,KKU,KKL,PTHLM,ZF,ZDFDDTDZ,PTSTEP,PIMPL,PDZZ,& @@ -597,9 +585,10 @@ IF (LHGRAD) THEN END WHERE END IF ! -ZFLXZ(:,:,KKA) = ZFLXZ(:,:,IKB) IF (OOCEAN) THEN - ZFLXZ(:,:,KKU) = ZFLXZ(:,:,IKE) + ZFLXZ(:,:,IKE+1) = ZFLXZ(:,:,IKE) +ELSE ! ATMOS + ZFLXZ(:,:,KKA) = ZFLXZ(:,:,IKB) END IF ! DO JK=IKTB+1,IKTE-1 @@ -610,8 +599,8 @@ PWTH(:,:,IKB)=0.5*(ZFLXZ(:,:,IKB)+ZFLXZ(:,:,IKB+KKL)) ! IF (OOCEAN) THEN PWTH(:,:,IKE)=0.5*(ZFLXZ(:,:,IKE)+ZFLXZ(:,:,IKE+KKL)) - PWTH(:,:,KKA)=0. - PWTH(:,:,KKU)=ZFLXZ(:,:,KKU) + PWTH(:,:,KKA)=0. + PWTH(:,:,KKU)=PWTH(:,:,IKE)! not used ELSE PWTH(:,:,KKA)=0.5*(ZFLXZ(:,:,KKA)+ZFLXZ(:,:,KKA+KKL)) PWTH(:,:,IKE)=PWTH(:,:,IKE-KKL) @@ -780,17 +769,12 @@ IF (KRR /= 0) THEN & PREDTH1,PD,PBLL_O_E,PEMOIST) * MZM(PFTHR, KKA, KKU, KKL) END IF ! - ! compute interface flux - IF (LCOUPLES) THEN ! coupling NH O-A - IF (OOCEAN) THEN ! ocean model in coupled case - ! evap effect on salinity to be added later !!! - ZF(:,:,IKE) = 0. - ELSE ! atmosph model in coupled case - ZF(:,:,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(:,:,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) @@ -806,19 +790,12 @@ IF (KRR /= 0) THEN / PDIRCOSZW(:,:) & * 0.5 * (1. + PRHODJ(:,:,KKA) / PRHODJ(:,:,IKB)) END IF - ! - IF (OOCEAN) THEN - ! General ocean case - ! salinity/evap effect to be added later !!!!! - ZF(:,:,IKE) = 0. - ELSE !end ocean case (in nocoupled case) ! atmos top #ifdef REPRO48 #else ZF(:,:,IKE)=0. #endif END IF - END IF!end no coupled cases ! Compute the split conservative potential temperature at t+deltat CALL TRIDIAG_THERMO(KKA,KKU,KKL,PRM(:,:,:,1),ZF,ZDFDDRDZ,PTSTEP,PIMPL,& PDZZ,PRHODJ,PRP) @@ -855,13 +832,23 @@ IF (KRR /= 0) THEN ! ZFLXZ(:,:,KKA) = ZFLXZ(:,:,IKB) ! + IF (OOCEAN) THEN + ZFLXZ(:,:,KKU) = ZFLXZ(:,:,IKE) + END IF + ! DO JK=IKTB+1,IKTE-1 PWRC(:,:,JK)=0.5*(ZFLXZ(:,:,JK)+ZFLXZ(:,:,JK+KKL)) END DO PWRC(:,:,IKB)=0.5*(ZFLXZ(:,:,IKB)+ZFLXZ(:,:,IKB+KKL)) - PWRC(:,:,KKA)=0.5*(ZFLXZ(:,:,KKA)+ZFLXZ(:,:,KKA+KKL)) - PWRC(:,:,IKE)=PWRC(:,:,IKE-KKL) ! + IF (OOCEAN) THEN + PWRC(:,:,IKE)=0.5*(ZFLXZ(:,:,IKE)+ZFLXZ(:,:,IKE+KKL)) + PWRC(:,:,KKA)=0. + PWRC(:,:,IKE+1)=ZFLXZ(:,:,IKE+1) + ELSE + PWRC(:,:,KKA)=0.5*(ZFLXZ(:,:,KKA)+ZFLXZ(:,:,KKA+KKL)) + PWRC(:,:,IKE)=PWRC(:,:,IKE-KKL) + 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 63fd923053c57e7c79e2bcdd40e1ff242c83d09e..ace7ca393fe23c64b35fe4fea93090cee9c6cd75 100644 --- a/src/common/turb/turb.F90 +++ b/src/common/turb/turb.F90 @@ -788,6 +788,10 @@ ELSE ZUSLOPE=PUT(:,:,KKA) ZVSLOPE=PVT(:,:,KKA) END IF +IF (OOCEAN) THEN + ZUSLOPE=PUT(:,:,KKU-1) + ZVSLOPE=PVT(:,:,KKU-1) +END IF ! ! !* 4.2 compute the proportionality coefficient between wind and stress @@ -801,11 +805,15 @@ ZCDUEFF(:,:) =-SQRT ( (PSFU(:,:)**2 + PSFV(:,:)**2) / & ! !* 4.6 compute the surface tangential fluxes ! -ZTAU11M(:,:) =2./3.*( (1.+ (PZZ (:,:,IKB+KKL)-PZZ (:,:,IKB)) & - /(PDZZ(:,:,IKB+KKL)+PDZZ(:,:,IKB)) & - ) *PTKET(:,:,IKB) & - -0.5 *PTKET(:,:,IKB+KKL) & - ) +IF (OOCEAN) THEN + ZTAU11M(:,:)=0. +ELSE + ZTAU11M(:,:) =2./3.*( (1.+ (PZZ (:,:,IKB+KKL)-PZZ (:,:,IKB)) & + /(PDZZ(:,:,IKB+KKL)+PDZZ(:,:,IKB)) & + ) *PTKET(:,:,IKB) & + -0.5 *PTKET(:,:,IKB+KKL) & + ) +END IF ZTAU12M(:,:) =0.0 ZTAU22M(:,:) =ZTAU11M(:,:) ZTAU33M(:,:) =ZTAU11M(:,:) @@ -895,7 +903,7 @@ CALL TURB_VER(KKA,KKU,KKL,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, & @@ -1070,8 +1078,8 @@ END IF CALL TKE_EPS_SOURCES(KKA,KKU,KKL,KMI,PTKET,ZLM,ZLEPS,PDP,ZTRH, & & PRHODJ,PDZZ,PDXX,PDYY,PDZX,PDZY,PZZ, & & PTSTEP,PIMPL,ZEXPL, & - & HTURBLEN,HTURBDIM, & - & TPFILE,OTURB_DIAG,ODIAG_IN_RUN, & + & HTURBLEN,HTURBDIM,OOCEAN, & + & TPFILE,OTURB_DIAG,ODIAG_IN_RUN,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 e77c51456e785de14018acab81cfbdb27fbb1052..9ad4e40a4ec0c238e5a823d914d64b8bb99de2c7 100644 --- a/src/mesonh/ext/phys_paramn.f90 +++ b/src/mesonh/ext/phys_paramn.f90 @@ -828,28 +828,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) = XROC*ZIZOCE(IKU) ZPROSOL2(IKU) = (1.-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 ( lbudget_th ) call Budget_store_init( tbudgets(NBUDGET_TH), 'OCEAN', xrths(:, :, :) ) DO JKM=IKU-1,2,-1 @@ -860,10 +866,12 @@ IF (LOCEAN .AND. (.NOT.LCOUPLES)) THEN XRTHS(:,:,JKM) = XRTHS(:,:,JKM) + XRHODJ(:,:,JKM)*ZIZOCE(JKM) END DO if ( 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) @@ -1266,14 +1274,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) ! @@ -1516,7 +1528,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 @@ -1603,7 +1615,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 @@ -1625,14 +1636,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