diff --git a/docs/TODO b/docs/TODO index 5e2a3d1124007df6720b9a18484dc62f56c88fef..0c4fed3b51ac6da75d742a4433a42864f009336b 100644 --- a/docs/TODO +++ b/docs/TODO @@ -66,6 +66,10 @@ Budgets/DDH - Le code des budgets devrait être revu: pas en phase avec celui de Méso-NH et phasage a priori inutile car très peu de code semble réellement utile pour AROME +Budgets/LES +Une fois toutes les routines de la turbulence ont leur dimension horizontale packée et +utilisent LES_MEAN_SUBGRID_PHY a la place de LES_MEAN_SUBGRID_PHY : renommer les routines arome/turb et mesonh/turb en les_mean_subgrid.F90 et remplacer partout dans le code les appels (enlever le _PHY) + supprimer les anciennes routines + SPP - modd_spp_type est pour l'instant dans mpa/micro/externals mais n'est pas de la microphysique diff --git a/src/arome/aux/mode_fill_dimphyexn.F90 b/src/arome/aux/mode_fill_dimphyexn.F90 index 713626623be77fd4c66933c2acb987075744999c..9771b9e919610f980e0e2e6e63c9affe43879a42 100644 --- a/src/arome/aux/mode_fill_dimphyexn.F90 +++ b/src/arome/aux/mode_fill_dimphyexn.F90 @@ -74,6 +74,7 @@ YDDIMPHYEX%NKA=KKT YDDIMPHYEX%NKU=1 YDDIMPHYEX%NKB=KKT-KVEXT YDDIMPHYEX%NKE=1+KVEXT +YDDIMPHYEX%NKLES=KKT-2*KVEXT YDDIMPHYEX%NKTB=1+KVEXT YDDIMPHYEX%NKTE=KKT-KVEXT ! @@ -82,6 +83,7 @@ YDDIMPHYEX%NJBC=1 YDDIMPHYEX%NIEC=KIE YDDIMPHYEX%NJEC=KJT ! +YDDIMPHYEX%NLESMASK = 0 ! never used in AROME IF (LHOOK) CALL DR_HOOK('FILL_DIMPHYEX', 1, ZHOOK_HANDLE) ! END SUBROUTINE FILL_DIMPHYEX diff --git a/src/arome/turb/les_mean_subgrid_phy.F90 b/src/arome/turb/les_mean_subgrid_phy.F90 new file mode 100644 index 0000000000000000000000000000000000000000..66f29f61ecd04493e5eba3d8e9c9307faa673b6f --- /dev/null +++ b/src/arome/turb/les_mean_subgrid_phy.F90 @@ -0,0 +1,78 @@ +!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. +!----------------------------------------------------------------- +!--------------- special set of characters for RCS information +!----------------------------------------------------------------- +! $Source$ $Revision$ +! MASDEV4_7 les 2006/08/30 18:41:10 +!----------------------------------------------------------------- +! ##################### +MODULE MODI_LES_MEAN_SUBGRID_PHY +! ##################### +! +INTERFACE LES_MEAN_SUBGRID_PHY +! + +SUBROUTINE LES_MEAN_SUBGRID_3D_PHY(D,PA, PA_MEAN, OSUM) +USE MODD_DIMPHYEX, ONLY: DIMPHYEX_t +USE MODD_LES, ONLY: NLES_CURRENT_TCOUNT +! +IMPLICIT NONE +! +TYPE(DIMPHYEX_t), INTENT(IN) :: D +REAL, DIMENSION(:,:), INTENT(IN) :: PA +REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PA_MEAN +LOGICAL, OPTIONAL, INTENT(IN) :: OSUM +! +END SUBROUTINE LES_MEAN_SUBGRID_3D_PHY +! +SUBROUTINE LES_MEAN_SUBGRID_SURF_PHY(D,PA, PA_MEAN, OSUM) +USE MODD_DIMPHYEX, ONLY: DIMPHYEX_t +! +IMPLICIT NONE +! +TYPE(DIMPHYEX_t), INTENT(IN) :: D +REAL, DIMENSION(:), INTENT(IN) :: PA +REAL, DIMENSION(:), INTENT(INOUT) :: PA_MEAN +LOGICAL, OPTIONAL, INTENT(IN) :: OSUM +! +END SUBROUTINE LES_MEAN_SUBGRID_SURF_PHY +! +END INTERFACE LES_MEAN_SUBGRID_PHY +! +END MODULE MODI_LES_MEAN_SUBGRID_PHY +! +! ############################################## + SUBROUTINE LES_MEAN_SUBGRID_3D_PHY(D, PA, PA_MEAN, OSUM) +! ############################################## +! +USE MODD_DIMPHYEX, ONLY: DIMPHYEX_t +! +IMPLICIT NONE +! +TYPE(DIMPHYEX_t), INTENT(IN) :: D +REAL, DIMENSION(:,:), INTENT(IN) :: PA +REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PA_MEAN +LOGICAL, OPTIONAL, INTENT(IN) :: OSUM +! +END SUBROUTINE LES_MEAN_SUBGRID_3D_PHY +! +! ############################################## + SUBROUTINE LES_MEAN_SUBGRID_SURF_PHY(D, PA, PA_MEAN, OSUM) +! ############################################## +! +!* 0. DECLARATIONS +! ------------ +! +USE MODD_DIMPHYEX, ONLY: DIMPHYEX_t +! +IMPLICIT NONE +! +TYPE(DIMPHYEX_t), INTENT(IN) :: D +REAL, DIMENSION(:), INTENT(IN) :: PA +REAL, DIMENSION(:), INTENT(INOUT) :: PA_MEAN +LOGICAL, OPTIONAL, INTENT(IN) :: OSUM +! +END SUBROUTINE LES_MEAN_SUBGRID_SURF_PHY diff --git a/src/common/aux/modd_dimphyexn.F90 b/src/common/aux/modd_dimphyexn.F90 index b1a9ef2c90a3c7b6a55be059c2b4f9cba795eb76..a2767fe04d1d746f47a742200d17f1f97522477d 100644 --- a/src/common/aux/modd_dimphyexn.F90 +++ b/src/common/aux/modd_dimphyexn.F90 @@ -53,6 +53,7 @@ TYPE DIMPHYEX_t ! 1: as for Méso-NH, levels are numbered from ground to space ! -1: as for AROME, levels are numbered from space to ground INTEGER :: NKT ! Array total dimension + INTEGER :: NKLES ! Total physical k dimension (for LES diag) INTEGER :: NKA ! Near ground array index (is an unphysical level if JPVEXT!=0) INTEGER :: NKU ! Uppest atmosphere array index (is an unphysical level if JPVEXT!=0) INTEGER :: NKB ! Near ground physical array index (e.g. equal to 1+JPVEXT if NKL==1) @@ -73,6 +74,8 @@ TYPE DIMPHYEX_t INTEGER :: NIJT ! NIT*NJT for horizontal packing INTEGER :: NIJB ! First horizontal inner mass point index INTEGER :: NIJE ! Last horizontal inner mass point index + ! + INTEGER :: NLESMASK ! Number of LES masks ! END TYPE DIMPHYEX_t ! diff --git a/src/mesonh/aux/mode_fill_dimphyexn.F90 b/src/mesonh/aux/mode_fill_dimphyexn.F90 index 1f5cc3c3c3381f78a01fc9e4a6cc8c6e62028e83..80679f8e1929dfc71b47905a1d88abf6ebffd437 100644 --- a/src/mesonh/aux/mode_fill_dimphyexn.F90 +++ b/src/mesonh/aux/mode_fill_dimphyexn.F90 @@ -36,6 +36,8 @@ SUBROUTINE FILL_DIMPHYEX(YDDIMPHYEX, KIT, KJT, KKT, LTURB) ! USE MODD_DIMPHYEX, ONLY: DIMPHYEX_t USE MODD_PARAMETERS, ONLY: JPVEXT +USE MODD_LES, ONLY : LLES_NEB_MASK, LLES_CORE_MASK, LLES_CS_MASK, LLES_MY_MASK, & + NLES_MASKS_USER USE PARKIND1, ONLY : JPRB USE YOMHOOK , ONLY : LHOOK, DR_HOOK USE MODE_ll @@ -72,6 +74,7 @@ YDDIMPHYEX%NKA=1 YDDIMPHYEX%NKU=KKT YDDIMPHYEX%NKB=1+JPVEXT YDDIMPHYEX%NKE=KKT-JPVEXT +YDDIMPHYEX%NKLES=KKT-2*JPVEXT YDDIMPHYEX%NKTB=1+JPVEXT YDDIMPHYEX%NKTE=KKT-JPVEXT ! @@ -94,5 +97,11 @@ ELSE END IF IF (LHOOK) CALL DR_HOOK('FILL_DIMPHYEX', 1, ZHOOK_HANDLE) ! +YDDIMPHYEX%NLESMASK = 1 +IF (LLES_MY_MASK) YDDIMPHYEX%NLESMASK = YDDIMPHYEX%NLESMASK + NLES_MASKS_USER +IF (LLES_NEB_MASK) YDDIMPHYEX%NLESMASK = YDDIMPHYEX%NLESMASK + 2 +IF (LLES_CORE_MASK) YDDIMPHYEX%NLESMASK = YDDIMPHYEX%NLESMASK + 2 +IF (LLES_CS_MASK) YDDIMPHYEX%NLESMASK = YDDIMPHYEX%NLESMASK + 3 +! END SUBROUTINE FILL_DIMPHYEX END MODULE MODE_FILL_DIMPHYEX diff --git a/src/mesonh/turb/les_mean_subgrid_phy.f90 b/src/mesonh/turb/les_mean_subgrid_phy.f90 new file mode 100644 index 0000000000000000000000000000000000000000..637d1cc7326f4a9e0181dfdedba578d7e3adcabf --- /dev/null +++ b/src/mesonh/turb/les_mean_subgrid_phy.f90 @@ -0,0 +1,130 @@ +!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. +!----------------------------------------------------------------- +!--------------- special set of characters for RCS information +!----------------------------------------------------------------- +! $Source$ $Revision$ +! MASDEV4_7 les 2006/08/30 18:41:10 +!----------------------------------------------------------------- +! ##################### +MODULE MODI_LES_MEAN_SUBGRID_PHY +! ##################### +! +INTERFACE LES_MEAN_SUBGRID_PHY +! + +SUBROUTINE LES_MEAN_SUBGRID_3D_PHY(D,PA, PA_MEAN, OSUM) +USE MODD_DIMPHYEX, ONLY: DIMPHYEX_t +USE MODD_LES, ONLY: NLES_CURRENT_TCOUNT +! +IMPLICIT NONE +! +TYPE(DIMPHYEX_t), INTENT(IN) :: D +REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PA +! +REAL, DIMENSION(D%NKLES,NLES_CURRENT_TCOUNT,D%NLESMASK), INTENT(INOUT) :: PA_MEAN +! +LOGICAL, OPTIONAL, INTENT(IN) :: OSUM +! +END SUBROUTINE LES_MEAN_SUBGRID_3D_PHY +! +SUBROUTINE LES_MEAN_SUBGRID_SURF_PHY(D,PA, PA_MEAN, OSUM) +USE MODD_DIMPHYEX, ONLY: DIMPHYEX_t +USE MODD_LES, ONLY: NLES_CURRENT_TCOUNT +! +IMPLICIT NONE +! +TYPE(DIMPHYEX_t), INTENT(IN) :: D +REAL, DIMENSION(D%NIJT), INTENT(IN) :: PA +! +REAL, DIMENSION(NLES_CURRENT_TCOUNT), INTENT(INOUT) :: PA_MEAN +! +LOGICAL, OPTIONAL, INTENT(IN) :: OSUM +! +END SUBROUTINE LES_MEAN_SUBGRID_SURF_PHY +! +END INTERFACE LES_MEAN_SUBGRID_PHY +! +END MODULE MODI_LES_MEAN_SUBGRID_PHY +! +! ############################################## + SUBROUTINE LES_MEAN_SUBGRID_3D_PHY(D, PA, PA_MEAN, OSUM) +! ############################################## +! +USE MODD_DIMPHYEX, ONLY: DIMPHYEX_t +USE MODD_LES, ONLY: NLES_CURRENT_TCOUNT +! +IMPLICIT NONE +! +TYPE(DIMPHYEX_t), INTENT(IN) :: D +REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PA +REAL, DIMENSION(D%NKLES,NLES_CURRENT_TCOUNT,D%NLESMASK), INTENT(INOUT) :: PA_MEAN +LOGICAL, OPTIONAL, INTENT(IN) :: OSUM +! +CALL LES_MEAN_SUBGRID_unpack3D(D,PA, PA_MEAN, OSUM) +! +END SUBROUTINE LES_MEAN_SUBGRID_3D_PHY +! +! ############################################## + SUBROUTINE LES_MEAN_SUBGRID_SURF_PHY(D, PA, PA_MEAN, OSUM) +! ############################################## +! +!* 0. DECLARATIONS +! ------------ +! +USE MODD_DIMPHYEX, ONLY: DIMPHYEX_t +USE MODD_LES, ONLY: NLES_CURRENT_TCOUNT +! +IMPLICIT NONE +! +TYPE(DIMPHYEX_t), INTENT(IN) :: D +REAL, DIMENSION(D%NIJT), INTENT(IN) :: PA +REAL, DIMENSION(NLES_CURRENT_TCOUNT), INTENT(INOUT) :: PA_MEAN +LOGICAL, OPTIONAL, INTENT(IN) :: OSUM +! +CALL LES_MEAN_SUBGRID_unpackSURF(D,PA, PA_MEAN, OSUM) +! +END SUBROUTINE LES_MEAN_SUBGRID_SURF_PHY +! +! ############################################## + SUBROUTINE LES_MEAN_SUBGRID_unpack3D(D, PA, PA_MEAN, OSUM) +! ############################################## +! +USE MODD_DIMPHYEX, ONLY: DIMPHYEX_t +USE MODD_LES, ONLY: NLES_CURRENT_TCOUNT +USE MODI_LES_MEAN_SUBGRID +! +IMPLICIT NONE +! +TYPE(DIMPHYEX_t), INTENT(IN) :: D +REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PA +REAL, DIMENSION(D%NKLES,NLES_CURRENT_TCOUNT,D%NLESMASK), INTENT(INOUT) :: PA_MEAN +LOGICAL, OPTIONAL, INTENT(IN) :: OSUM +! +CALL LES_MEAN_SUBGRID_3D(PA, PA_MEAN, OSUM) +! +END SUBROUTINE LES_MEAN_SUBGRID_unpack3D +! +! ############################################## + SUBROUTINE LES_MEAN_SUBGRID_unpackSURF(D, PA, PA_MEAN, OSUM) +! ############################################## +! +!* 0. DECLARATIONS +! ------------ +! +USE MODD_DIMPHYEX, ONLY: DIMPHYEX_t +USE MODD_LES, ONLY: NLES_CURRENT_TCOUNT +USE MODI_LES_MEAN_SUBGRID +! +IMPLICIT NONE +! +TYPE(DIMPHYEX_t), INTENT(IN) :: D +REAL, DIMENSION(D%NIT,D%NJT), INTENT(IN) :: PA +REAL, DIMENSION(NLES_CURRENT_TCOUNT), INTENT(INOUT) :: PA_MEAN +LOGICAL, OPTIONAL, INTENT(IN) :: OSUM +! +CALL LES_MEAN_SUBGRID_SURF(PA, PA_MEAN, OSUM) +! +END SUBROUTINE LES_MEAN_SUBGRID_unpackSURF