From e4c795e2e7833f0b6e3e12dfea8b911f1eff0284 Mon Sep 17 00:00:00 2001 From: Quentin Rodier <quentin.rodier@meteo.fr> Date: Thu, 27 Jan 2022 16:18:52 +0100 Subject: [PATCH] Quentin 27/01/2022: Merge turb.F90 MNH->COMMON Update lm + rotate_wind --- src/arome/aux/mode_argslist_ll.F90 | 11 ++ src/arome/turb/modi_update_lm.F90 | 18 --- src/common/turb/mode_rotate_wind.F90 | 204 +++++++++++++++++++++++++++ src/common/turb/mode_update_lm.F90 | 119 ++++++++++++++++ src/common/turb/turb.F90 | 107 ++++++-------- src/mesonh/turb/turb.f90 | 3 + 6 files changed, 379 insertions(+), 83 deletions(-) delete mode 100644 src/arome/turb/modi_update_lm.F90 create mode 100644 src/common/turb/mode_rotate_wind.F90 create mode 100644 src/common/turb/mode_update_lm.F90 diff --git a/src/arome/aux/mode_argslist_ll.F90 b/src/arome/aux/mode_argslist_ll.F90 index a01b23249..f80bc15fb 100644 --- a/src/arome/aux/mode_argslist_ll.F90 +++ b/src/arome/aux/mode_argslist_ll.F90 @@ -8,6 +8,17 @@ IMPLICIT NONE TYPE(LIST_ll), POINTER :: TPLIST ! List of fields CALL ABORT END SUBROUTINE CLEANLIST_ll +! + SUBROUTINE ADD2DFIELD_ll(TPLIST, PFIELD, HNAME) +IMPLICIT NONE + + TYPE(LIST_ll), POINTER :: TPLIST ! list of fields + REAL, DIMENSION(:,:), TARGET :: PFIELD ! field to be added to the list + ! of fields + character(len=*), intent(in) :: HNAME ! Name of the field to be added + ! + CALL ABORT +END SUBROUTINE ADD2DFIELD_ll ! SUBROUTINE ADD3DFIELD_ll(TPLIST, PFIELD, HNAME) IMPLICIT NONE diff --git a/src/arome/turb/modi_update_lm.F90 b/src/arome/turb/modi_update_lm.F90 deleted file mode 100644 index d2a31786e..000000000 --- a/src/arome/turb/modi_update_lm.F90 +++ /dev/null @@ -1,18 +0,0 @@ -! ######spl - MODULE MODI_UPDATE_LM -! ################### -INTERFACE -! -SUBROUTINE UPDATE_LM(HLBCX,HLBCY,PLM,PLEPS) -! -CHARACTER(LEN=4), DIMENSION(2), INTENT(IN) :: HLBCX ! X boundary type -CHARACTER(LEN=4), DIMENSION(2), INTENT(IN) :: HLBCY ! Y boundary type -! -REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PLM ! mixing length -REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PLEPS ! dissipative length -! -END SUBROUTINE UPDATE_LM -! -END INTERFACE -! -END MODULE MODI_UPDATE_LM diff --git a/src/common/turb/mode_rotate_wind.F90 b/src/common/turb/mode_rotate_wind.F90 new file mode 100644 index 000000000..e117b95f8 --- /dev/null +++ b/src/common/turb/mode_rotate_wind.F90 @@ -0,0 +1,204 @@ +!MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier +!MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence +!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt +!MNH_LIC for details. version 1. +! ####################### + MODULE MODE_ROTATE_WIND +! ####################### +IMPLICIT NONE +CONTAINS +! ########################################################### + SUBROUTINE ROTATE_WIND(PU,PV,PW, & + PDIRCOSXW, PDIRCOSYW, PDIRCOSZW, & + PCOSSLOPE,PSINSLOPE, & + PDXX,PDYY,PDZZ, & + PUSLOPE,PVSLOPE ) +! ########################################################### +! +! +!!**** *ROTATE_WIND* - computes the wind components along the maximum slope +!! direction and its normal direction in the first mass level. +!! +!! PURPOSE +!! ------- +!!**** +! The purpose of this routine is to compute the wind component parallel +! to the orography at the first mass level. The exact location where these +! components are computed is the point of intersection between the normal +! to the orography and the first mass-level hyper-plane at PDZZ(:,:,IKB)/2 +! +!!** METHOD +!! ------ +!! The values of the 3 cartesian components of the wind are determined +!! by a bilinear interpolation between the 4 nearest points in the first +!! mass-level hyper-plane. These points are found according to the signs of +!! the slopes' sinus and cosinus. For each direction of interpolation, the +!! two different localizations (mass or flux grids) are used to avoid +!! lateral boundary problems. +!! Then, the rotation is performed for the wind components. The rotation +!! angle is the angle between the x axe and the maximum slope direction +!! defined by the slope vector (dZs/dx , dZs/dy). +!! Finally, the horizontal components are set at the marginal points +!! according to cyclic boundary conditions because this is the only case +!! where these points can be considered. +!! +!! EXTERNAL +!! -------- +!! NONE +!! +!! IMPLICIT ARGUMENTS +!! ------------------ +!! +!! MODD_CONF : L2D switch for 2D model version +!! +!! +!! REFERENCE +!! --------- +!! Book 1 of documentation (Chapter: Turbulence) +!! +!! AUTHOR +!! ------ +!! Joel Stein * Meteo-France * +!! +!! MODIFICATIONS +!! ------------- +!! Original 14/11/95 +!! Modifications: 15/05/96, (N. wood) +!! take into account no slip conditions +!! at the surface +!! 14/02/01 (V. Masson) +!! Slip condition at the surface restored +!! +!! -------------------------------------------------------------------------- +! +!* 0. DECLARATIONS +! ------------ +USE MODD_PARAMETERS +! +IMPLICIT NONE +! +! +!* 0.1 declarations of arguments +! +REAL, DIMENSION(:,:,:), INTENT(IN) :: PU,PV,PW ! cartesian components + ! of the wind +REAL, DIMENSION(:,:), INTENT(IN) :: PDIRCOSXW, PDIRCOSYW, PDIRCOSZW +! Director Cosinus along x, y and z directions at surface w-point +REAL, DIMENSION(:,:), INTENT(IN) :: PCOSSLOPE ! cosinus of the angle + ! between i and the slope vector +REAL, DIMENSION(:,:), INTENT(IN) :: PSINSLOPE ! sinus of the angle + ! between i and the slope vector +REAL, DIMENSION(:,:,:), INTENT(IN) :: PDXX, PDYY, PDZZ + ! Metric coefficients +REAL, DIMENSION(:,:), INTENT(OUT) :: PUSLOPE ! wind component along + ! the maximum slope direction +REAL, DIMENSION(:,:), INTENT(OUT) :: PVSLOPE ! wind component along + ! the direction normal to the maximum slope one +! +!------------------------------------------------------------------------------- +! +! 0.2 declaration of local variables +! +INTEGER, DIMENSION(SIZE(PDIRCOSXW,1),SIZE(PDIRCOSXW,2)) :: ILOC,JLOC + ! shift index to find the 4 nearest points in x and y directions +REAL, DIMENSION(SIZE(PDIRCOSXW,1),SIZE(PDIRCOSXW,2)) :: ZCOEFF,ZCOEFM, & + ! interpolation weigths for flux and mass locations + ZUINT,ZVINT,ZWINT, & + ! intermediate values of the cartesian components after x interp. + ZUFIN,ZVFIN,ZWFIN, & + ! final values of the cartesian components after the 2 interp. + ZWGROUND + ! vertical velocity at the surface +INTEGER :: IIB,IIE,IJB,IJE,IKB + ! index values for the Beginning or the End of the physical + ! domain in x,y and z directions +INTEGER :: IIU,IJU + ! arrays' sizes for i and j indices +INTEGER :: JI,JJ +! +!---------------------------------------------------------------------------- +! +!* 1. PRELIMINARIES +! ------------- +! +PUSLOPE=0. +PVSLOPE=0. +! +IIB = 2 +IJB = 2 +IIU = SIZE(PU,1) +IJU = SIZE(PU,2) +IIE = IIU - 1 +IJE = IJU - 1 +IKB = 1+JPVEXT +! +ZWGROUND(:,:) = PW(:,:,IKB) +! +!* 2. INTERPOLATE THE CARTESIAN COMPONENTS +! ------------------------------------ +! +ILOC(:,:)=NINT(SIGN(1.,-PCOSSLOPE(:,:))) +JLOC(:,:)=NINT(SIGN(1.,-PSINSLOPE(:,:))) +! +! interpolation in x direction +! +DO JJ = 1,IJU + DO JI = IIB,IIE + ZCOEFF(JI,JJ) = & + (0.5*PDXX(JI,JJ,IKB) + 0.5*PDZZ(JI,JJ,IKB)*PDIRCOSXW(JI,JJ) ) & + * 2. / (PDXX(JI,JJ,IKB)+PDXX(JI+1,JJ,IKB)) + ZUINT(JI,JJ) = ZCOEFF(JI,JJ) * PU(JI+1,JJ,IKB) + & + (1.-ZCOEFF(JI,JJ)) * PU(JI,JJ,IKB) + ! + ZCOEFM(JI,JJ) = 1. - 0.5 * PDZZ(JI,JJ,IKB) * ABS(PDIRCOSXW(JI,JJ)) & + / PDXX(JI+(ILOC(JI,JJ)+1)/2,JJ,IKB) + ZVINT(JI,JJ) = ZCOEFM(JI,JJ) * PV(JI,JJ,IKB) + & + (1.-ZCOEFM(JI,JJ)) * PV(JI+ILOC(JI,JJ),JJ,IKB) + ! + ZWINT(JI,JJ) = ZCOEFM(JI,JJ) * (PW(JI,JJ,IKB+1)+ZWGROUND(JI,JJ)) * 0.5 & + + (1.-ZCOEFM(JI,JJ)) & + *(PW(JI+ILOC(JI,JJ),JJ,IKB+1)+ZWGROUND(JI+ILOC(JI,JJ),JJ)) * 0.5 + END DO +END DO +! +! interpolation in y direction +! +DO JJ = IJB,IJE + DO JI = IIB,IIE + ZCOEFF(JI,JJ) = & + (0.5*PDYY(JI,JJ,IKB) + 0.5*PDZZ(JI,JJ,IKB)*PDIRCOSYW(JI,JJ) ) & + * 2. / (PDYY(JI,JJ,IKB)+PDYY(JI+1,JJ,IKB)) + ZVFIN(JI,JJ) = ZCOEFF(JI,JJ) * ZVINT(JI,JJ+1) + & + (1.-ZCOEFF(JI,JJ)) * ZVINT(JI,JJ) + ! + ZCOEFM(JI,JJ) = 1. - 0.5 * PDZZ(JI,JJ,IKB) * ABS(PDIRCOSYW(JI,JJ)) & + / PDYY(JI,JJ+(JLOC(JI,JJ)+1)/2,IKB) + ZUFIN(JI,JJ) = ZCOEFM(JI,JJ) * ZUINT(JI,JJ) + & + (1.-ZCOEFM(JI,JJ)) * ZUINT(JI,JJ+JLOC(JI,JJ)) + ZWFIN(JI,JJ) = ZCOEFM(JI,JJ) * ZWINT(JI,JJ) + & + (1.-ZCOEFM(JI,JJ)) * ZWINT(JI,JJ+JLOC(JI,JJ)) + END DO +END DO +! +!* 3. ROTATE THE WIND +! --------------- +! +! +DO JJ = IJB,IJE + DO JI = IIB,IIE + PUSLOPE(JI,JJ) = PCOSSLOPE(JI,JJ) * PDIRCOSZW(JI,JJ) * ZUFIN(JI,JJ) + & + PSINSLOPE(JI,JJ) * PDIRCOSZW(JI,JJ) * ZVFIN(JI,JJ) + & + SQRT(1.-PDIRCOSZW(JI,JJ)**2) * ZWFIN(JI,JJ) + ! + PVSLOPE(JI,JJ) =-PSINSLOPE(JI,JJ) * ZUFIN(JI,JJ) + & + PCOSSLOPE(JI,JJ) * ZVFIN(JI,JJ) + ! + END DO +END DO +! +! +! +!---------------------------------------------------------------------------- +! +END SUBROUTINE ROTATE_WIND +END MODULE MODE_ROTATE_WIND diff --git a/src/common/turb/mode_update_lm.F90 b/src/common/turb/mode_update_lm.F90 new file mode 100644 index 000000000..d5ab737b0 --- /dev/null +++ b/src/common/turb/mode_update_lm.F90 @@ -0,0 +1,119 @@ +!MNH_LIC Copyright 2006-2019 CNRS, Meteo-France and Universite Paul Sabatier +!MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence +!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt +!MNH_LIC for details. version 1. +!----------------------------------------------------------------- + MODULE MODE_UPDATE_LM +IMPLICIT NONE +CONTAINS +SUBROUTINE UPDATE_LM(HLBCX,HLBCY,PLM,PLEPS) +! ################################################################# +! +!!**** *UPDATE_LM* - routine to set external points for mixing length +!! +!! PURPOSE +!! ------- +! +!!** METHOD +!! ------ +!! +!! EXTERNAL +!! -------- +!! +!! IMPLICIT ARGUMENTS +!! ------------------ +!! +!! REFERENCE +!! --------- +!! Book2 of documentation (routine UPDATE_LM) +!! +!! AUTHOR +!! ------ +!! V. Masson * Meteo France * +!! +!! MODIFICATIONS +!! ------------- +!! Original april 2006 +!! V.Masson : Exchange of East and North sides +!! J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 +! P. Wautelet 20/05/2019: add name argument to ADDnFIELD_ll + new ADD4DFIELD_ll subroutine +!------------------------------------------------------------------------------- +! +!* 0. DECLARATIONS +! +USE MODD_CONF +USE MODD_PARAMETERS +! +USE MODE_ll +USE MODD_ARGSLIST_ll, ONLY : LIST_ll +! +IMPLICIT NONE +! +! +!* 0.1 declarations of arguments +! +CHARACTER(LEN=4), DIMENSION(2), INTENT(IN) :: HLBCX ! X boundary type +CHARACTER(LEN=4), DIMENSION(2), INTENT(IN) :: HLBCY ! Y boundary type +! +REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PLM ! mixing length +REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PLEPS ! dissipative length +! +!* 0.2 declarations of local variables +! +INTEGER :: IIB ! First physical index in x direction +INTEGER :: IJB ! First physical index in y direction +INTEGER :: IIE ! last physical index in x direction +INTEGER :: IJE ! last physical index in y direction +INTEGER :: JI ! loop index +! +TYPE(LIST_ll), POINTER :: TZLM_ll ! list of fields to exchange +INTEGER :: IINFO_ll ! return code of parallel routine +! +!------------------------------------------------------------------------------- +! +!* 1. COMPUTE DIMENSIONS OF ARRAYS : +! ---------------------------- +CALL GET_INDICE_ll (IIB,IJB,IIE,IJE) +NULLIFY(TZLM_ll) +! +!------------------------------------------------------------------------------- +! +!* 2. UPDATE HALOs : +! ------------- +! +! +!!$IF(NHALO == 1) THEN + CALL ADD3DFIELD_ll( TZLM_ll, PLM, 'UPDATE_LM::PLM' ) + CALL ADD3DFIELD_ll( TZLM_ll, PLEPS, 'UPDATE_LM::PLEPS' ) + CALL UPDATE_HALO_ll(TZLM_ll,IINFO_ll) + CALL CLEANLIST_ll(TZLM_ll) +!!$END IF +! +!------------------------------------------------------------------------------- +! +!* 3. UPDATE EXTERNAL POINTS OF GLOBAL DOMAIN: +! --------------------------------------- +! +IF ( HLBCX(1) /= "CYCL" .AND. LWEST_ll()) THEN + PLM (IIB-1,:,:) = PLM (IIB,:,:) + PLEPS(IIB-1,:,:) = PLEPS(IIB,:,:) +END IF +IF ( HLBCX(2) /= "CYCL" .AND. LEAST_ll()) THEN + PLM (IIE+1,:,:) = PLM (IIE,:,:) + PLEPS(IIE+1,:,:) = PLEPS(IIE,:,:) +END IF +IF ( HLBCY(1) /= "CYCL" .AND. LSOUTH_ll()) THEN + DO JI=1,SIZE(PLM,1) + PLM (JI,IJB-1,:) = PLM (JI,IJB,:) + PLEPS(JI,IJB-1,:) = PLEPS(JI,IJB,:) + END DO +END IF +IF ( HLBCY(2) /= "CYCL" .AND. LNORTH_ll()) THEN + DO JI=1,SIZE(PLM,1) + PLM (JI,IJE+1,:) = PLM (JI,IJE,:) + PLEPS(JI,IJE+1,:) = PLEPS(JI,IJE,:) + END DO +END IF +!----------------------------------------------------------------------------- +END SUBROUTINE UPDATE_LM +END MODULE MODE_UPDATE_LM diff --git a/src/common/turb/turb.F90 b/src/common/turb/turb.F90 index 2e97d63c6..5ba9ab49c 100644 --- a/src/common/turb/turb.F90 +++ b/src/common/turb/turb.F90 @@ -211,11 +211,24 @@ !! 06/2011 (J.escobar ) Bypass Bug with ifort11/12 on HLBCX,HLBC !! 2012-02 Y. Seity, add possibility to run with reversed !! vertical levels +!! 10/2012 (J. Colin) Correct bug in DearDoff for dry simulations +!! 10/2012 J.Escobar Bypass PGI bug , redefine some allocatable array inplace of automatic !! 2014-11 Y. Seity, add output terms for TKE DDHs budgets !! July 2015 (Wim de Rooy) modifications to run with RACMO !! turbulence (LHARAT=TRUE) -!! -------------------------------------------------------------------------- -! +!! 04/2016 (C.Lac) correction of negativity for KHKO +! P. Wautelet 05/2016-04/2018: new data structures and calls for I/O +! Q. Rodier 01/2018: introduction of RM17 +! P. Wautelet 20/05/2019: add name argument to ADDnFIELD_ll + new ADD4DFIELD_ll subroutine +! P. Wautelet 02/2020: use the new data structures and subroutines for budgets +! B. Vie 03/2020: LIMA negativity checks after turbulence, advection and microphysics budgets +! P. Wautelet 11/06/2020: bugfix: correct PRSVS array indices +! P. Wautelet + Benoit Vié 06/2020: improve removal of negative scalar variables + adapt the corresponding budgets +! P. Wautelet 30/06/2020: move removal of negative scalar variables to Sources_neg_correct +! R. Honnert/V. Masson 02/2021: new mixing length in the grey zone +! J.L. Redelsperger 03/2021: add Ocean LES case +! -------------------------------------------------------------------------- +! !* 0. DECLARATIONS ! ------------ ! @@ -240,8 +253,7 @@ USE MODD_NSV ! USE MODE_BL89, ONLY: BL89 USE MODE_TURB_VER, ONLY : TURB_VER -!!MODIF AROME -!USE MODI_ROTATE_WIND +USE MODE_ROTATE_WIND, ONLY: ROTATE_WIND USE MODE_TURB_HOR_SPLT, ONLY: TURB_HOR_SPLT USE MODE_TKE_EPS_SOURCES, ONLY: TKE_EPS_SOURCES USE MODI_SHUMAN, ONLY : MZF, MXF, MYF @@ -253,7 +265,7 @@ USE MODI_LES_MEAN_SUBGRID USE MODE_RMC01, ONLY: RMC01 USE MODI_GRADIENT_W USE MODE_TM06, ONLY: TM06 -USE MODI_UPDATE_LM +USE MODE_UPDATE_LM, ONLY: UPDATE_LM ! USE MODE_BUDGET, ONLY: BUDGET_STORE_INIT, BUDGET_STORE_END USE MODE_IO_FIELD_WRITE, ONLY: IO_FIELD_WRITE @@ -736,8 +748,7 @@ IF (HTURBLEN=='ADAP') ZLEPS = MIN(ZLEPS,ZLMW*XCADAP) ! ---------------------------------------------------------- ! IF (HTURBDIM=="3DIM") THEN -!****FOR AROME**** -! CALL UPDATE_LM(HLBCX,HLBCY,ZLM,ZLEPS) + CALL UPDATE_LM(HLBCX,HLBCY,ZLM,ZLEPS) END IF !---------------------------------------------------------------------------- ! @@ -747,65 +758,30 @@ END IF ! !* 4.1 rotate the wind at time t ! -IF ( HINST_SFU == 'T' ) THEN -! -! - IF (CPROGRAM=='AROME ') THEN - ZUSLOPE=PUT(:,:,KKA) - ZVSLOPE=PVT(:,:,KKA) - ELSE -! CALL ROTATE_WIND(PUT,PVT,PWT, & -! PDIRCOSXW, PDIRCOSYW, PDIRCOSZW, & -! PCOSSLOPE,PSINSLOPE, & -! PDXX,PDYY,PDZZ, & -! ZUSLOPE,ZVSLOPE ) -! -! CALL UPDATE_ROTATE_WIND(ZUSLOPE,ZVSLOPE) - END IF -! -! -!* 4.2 compute the proportionality coefficient between wind and stress -! - ZCDUEFF(:,:) =-SQRT ( (PSFU(:,:)**2 + PSFV(:,:)**2) / & - (1.E-60 + ZUSLOPE(:,:)**2 + ZVSLOPE(:,:)**2 ) & - ) -! -!* 4.3 rotate the wind at time t-delta t ! - IF (CPROGRAM/='AROME ') THEN -! CALL ROTATE_WIND(PUT,PVT,PWT, & -! PDIRCOSXW, PDIRCOSYW, PDIRCOSZW, & -! PCOSSLOPE,PSINSLOPE, & -! PDXX,PDYY,PDZZ, & -! ZUSLOPE,ZVSLOPE ) ! -! CALL UPDATE_ROTATE_WIND(ZUSLOPE,ZVSLOPE) - END IF +IF (CPROGRAM/='AROME ') THEN + CALL ROTATE_WIND(PUT,PVT,PWT, & + PDIRCOSXW, PDIRCOSYW, PDIRCOSZW, & + PCOSSLOPE,PSINSLOPE, & + PDXX,PDYY,PDZZ, & + ZUSLOPE,ZVSLOPE ) ! + CALL UPDATE_ROTATE_WIND(ZUSLOPE,ZVSLOPE) ELSE + ZUSLOPE=PUT(:,:,KKA) + ZVSLOPE=PVT(:,:,KKA) +END IF ! -!* 4.4 rotate the wind at time t-delta t -! - IF (CPROGRAM=='AROME ') THEN - ZUSLOPE=PUT(:,:,KKA) - ZVSLOPE=PVT(:,:,KKA) - ELSE -! -! CALL ROTATE_WIND(PUT,PVT,PWT, & -! PDIRCOSXW, PDIRCOSYW, PDIRCOSZW, & -! PCOSSLOPE,PSINSLOPE, & -! PDXX,PDYY,PDZZ, & -! ZUSLOPE,ZVSLOPE ) -! -! CALL UPDATE_ROTATE_WIND(ZUSLOPE,ZVSLOPE) - END IF ! -!* 4.5 compute the proportionality coefficient between wind and stress +!* 4.2 compute the proportionality coefficient between wind and stress ! - ZCDUEFF(:,:) =-SQRT ( (PSFU(:,:)**2 + PSFV(:,:)**2) / & - (1.E-60 + ZUSLOPE(:,:)**2 + ZVSLOPE(:,:)**2 ) & - ) -END IF +ZCDUEFF(:,:) =-SQRT ( (PSFU(:,:)**2 + PSFV(:,:)**2) / & +#ifdef REPRO48 + (1.E-60 + ZUSLOPE(:,:)**2 + ZVSLOPE(:,:)**2 ) ) +#else + (XMNH_TINY + ZUSLOPE(:,:)**2 + ZVSLOPE(:,:)**2 ) ) +#endif ! !* 4.6 compute the surface tangential fluxes ! @@ -948,8 +924,10 @@ IF( LBUDGET_SV ) THEN END DO END IF ! -#ifdef REPRO48 !Les budgets des termes horizontaux de la turb sont présents dans AROME -#else ! alors que ces termes ne sont pas calculés +!Les budgets des termes horizontaux de la turb sont présents dans AROME +! alors que ces termes ne sont pas calculés +#ifdef REPRO48 +#else IF( HTURBDIM == '3DIM' ) THEN #endif IF( LBUDGET_U ) CALL BUDGET_STORE_INIT( TBUDGETS(NBUDGET_U ), 'HTURB', PRUS (:, :, :) ) @@ -985,7 +963,8 @@ IF( HTURBDIM == '3DIM' ) THEN CALL BUDGET_STORE_INIT( TBUDGETS(NBUDGET_SV1 - 1 + JSV), 'HTURB', PRSVS(:, :, :, JSV) ) END DO END IF -#ifdef REPRO48 !à supprimer une fois le précédent ifdef REPRO48 validé +!à supprimer une fois le précédent ifdef REPRO48 validé +#ifdef REPRO48 #else CALL TURB_HOR_SPLT(KSPLIT, KRR, KRRL, KRRI, PTSTEP, & HLBCX,HLBCY,OTURB_FLX,OSUBG_COND, & @@ -1285,9 +1264,7 @@ IF (LHOOK) CALL DR_HOOK('TURB:UPDATE_ROTATE_WIND',0,ZHOOK_HANDLE) ! NULLIFY(TZFIELDS_ll) ! -IIU=SIZE(PUSLOPE,1) -IJU=SIZE(PUSLOPE,2) -CALL GET_INDICE_ll (IIB,IJB,IIE,IJE,IIU,IJU) +CALL GET_INDICE_ll (IIB,IJB,IIE,IJE) ! ! 2 Update halo if necessary ! diff --git a/src/mesonh/turb/turb.f90 b/src/mesonh/turb/turb.f90 index 3c99d04e4..2f2d6b193 100644 --- a/src/mesonh/turb/turb.f90 +++ b/src/mesonh/turb/turb.f90 @@ -335,6 +335,9 @@ END MODULE MODI_TURB !! vertical levels !! 10/2012 (J. Colin) Correct bug in DearDoff for dry simulations !! 10/2012 J.Escobar Bypass PGI bug , redefine some allocatable array inplace of automatic +!! 2014-11 Y. Seity, add output terms for TKE DDHs budgets +!! July 2015 (Wim de Rooy) modifications to run with RACMO +!! turbulence (LHARAT=TRUE) !! 04/2016 (C.Lac) correction of negativity for KHKO ! P. Wautelet 05/2016-04/2018: new data structures and calls for I/O ! Q. Rodier 01/2018: introduction of RM17 -- GitLab