From 2d670e5545fd88609182933933160a356ed2e3fc Mon Sep 17 00:00:00 2001 From: Quentin Rodier <quentin.rodier@meteo.fr> Date: Thu, 7 Jul 2022 17:04:58 +0200 Subject: [PATCH] Quentin 07/07/2022: Packing LES_MEAN_SUBGRID budgets --- docs/TODO | 4 + src/arome/aux/mode_fill_dimphyexn.F90 | 2 + src/arome/turb/les_mean_subgrid_phy.F90 | 78 ++++++++++++++ src/common/aux/modd_dimphyexn.F90 | 3 + src/mesonh/aux/mode_fill_dimphyexn.F90 | 9 ++ src/mesonh/turb/les_mean_subgrid_phy.f90 | 130 +++++++++++++++++++++++ 6 files changed, 226 insertions(+) create mode 100644 src/arome/turb/les_mean_subgrid_phy.F90 create mode 100644 src/mesonh/turb/les_mean_subgrid_phy.f90 diff --git a/docs/TODO b/docs/TODO index 5e2a3d112..0c4fed3b5 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 713626623..9771b9e91 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 000000000..66f29f61e --- /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 b1a9ef2c9..a2767fe04 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 1f5cc3c3c..80679f8e1 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 000000000..637d1cc73 --- /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 -- GitLab