From 43ee55168a3c63ce03f3fbb5245f51c8c2c8ff2d Mon Sep 17 00:00:00 2001 From: Philippe WAUTELET <philippe.wautelet@aero.obs-mip.fr> Date: Wed, 18 Dec 2019 17:13:54 +0100 Subject: [PATCH] Philippe 18/12/2019: OpenACC: ground_param_n: use allocatables for local variables + improve data directive --- src/MNH/ground_paramn.f90 | 120 +++++++++++++++++++++++++------------- 1 file changed, 78 insertions(+), 42 deletions(-) diff --git a/src/MNH/ground_paramn.f90 b/src/MNH/ground_paramn.f90 index 9ec06f34f..484a29f90 100644 --- a/src/MNH/ground_paramn.f90 +++ b/src/MNH/ground_paramn.f90 @@ -1,6 +1,6 @@ -!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier +!MNH_LIC Copyright 1995-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 version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt !MNH_LIC for details. version 1. !----------------------------------------------------------------- ! ########## @@ -227,41 +227,41 @@ REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZRV ! vapor mixing ratio ! ! suffix 'A' stands for atmospheric variable at first model level ! -REAL, DIMENSION(SIZE(PSFTH,1),SIZE(PSFTH,2)) :: ZZREF ! Forcing height -REAL, DIMENSION(SIZE(PSFTH,1),SIZE(PSFTH,2)) :: ZTA ! Temperature -REAL, DIMENSION(SIZE(PSFTH,1),SIZE(PSFTH,2)) :: ZRVA ! vapor mixing ratio -REAL, DIMENSION(SIZE(PSFTH,1),SIZE(PSFTH,2)) :: ZQA ! humidity (kg/m3) -REAL, DIMENSION(SIZE(PSFTH,1),SIZE(PSFTH,2)) :: ZPA ! Pressure -REAL, DIMENSION(SIZE(PSFTH,1),SIZE(PSFTH,2)) :: ZPS ! Pressure -REAL, DIMENSION(SIZE(PSFTH,1),SIZE(PSFTH,2)) :: ZEXNA ! Exner function -REAL, DIMENSION(SIZE(PSFTH,1),SIZE(PSFTH,2)) :: ZEXNS ! Exner function -REAL, DIMENSION(SIZE(PSFTH,1),SIZE(PSFTH,2)) :: ZTHA ! potential temperature -REAL, DIMENSION(SIZE(PSFTH,1),SIZE(PSFTH,2)) :: ZRAIN ! liquid precipitation (kg/m2/s) -REAL, DIMENSION(SIZE(PSFTH,1),SIZE(PSFTH,2)) :: ZSNOW ! solid precipitation (kg/m2/s) -REAL, DIMENSION(SIZE(PSFTH,1),SIZE(PSFTH,2)) :: ZTSUN ! solar time (s since midnight) -! -REAL, DIMENSION(SIZE(PSFTH,1),SIZE(PSFTH,2)) :: ZUA ! u component of the wind +REAL, DIMENSION(:,:), allocatable :: ZZREF ! Forcing height +REAL, DIMENSION(:,:), allocatable :: ZTA ! Temperature +REAL, DIMENSION(:,:), allocatable :: ZRVA ! vapor mixing ratio +REAL, DIMENSION(:,:), allocatable :: ZQA ! humidity (kg/m3) +REAL, DIMENSION(:,:), allocatable :: ZPA ! Pressure +REAL, DIMENSION(:,:), allocatable :: ZPS ! Pressure +REAL, DIMENSION(:,:), allocatable :: ZEXNA ! Exner function +REAL, DIMENSION(:,:), allocatable :: ZEXNS ! Exner function +REAL, DIMENSION(:,:), allocatable :: ZTHA ! potential temperature +REAL, DIMENSION(:,:), allocatable :: ZRAIN ! liquid precipitation (kg/m2/s) +REAL, DIMENSION(:,:), allocatable :: ZSNOW ! solid precipitation (kg/m2/s) +REAL, DIMENSION(:,:), allocatable :: ZTSUN ! solar time (s since midnight) +! +REAL, DIMENSION(:,:), allocatable :: ZUA ! u component of the wind ! ! parallel to the orography -REAL, DIMENSION(SIZE(PSFTH,1),SIZE(PSFTH,2)) :: ZVA ! v component of the wind +REAL, DIMENSION(:,:), allocatable :: ZVA ! v component of the wind ! ! parallel to the orography -REAL, DIMENSION(SIZE(PSFTH,1),SIZE(PSFTH,2)) :: ZU ! zonal wind -REAL, DIMENSION(SIZE(PSFTH,1),SIZE(PSFTH,2)) :: ZV ! meridian wind -REAL, DIMENSION(SIZE(PSFTH,1),SIZE(PSFTH,2)) :: ZWIND ! wind parallel to the orography -REAL, DIMENSION(SIZE(PSFTH,1),SIZE(PSFTH,2)) :: ZRHOA ! air density -REAL, DIMENSION(SIZE(PSFTH,1),SIZE(PSFTH,2)) :: ZDIR ! wind direction (rad from N clockwise) -REAL, DIMENSION(SIZE(PSFTH,1),SIZE(PSFTH,2)) :: ZSFU ! zonal momentum flux -REAL, DIMENSION(SIZE(PSFTH,1),SIZE(PSFTH,2)) :: ZSFV ! meridian momentum flux -REAL, DIMENSION(SIZE(PSFTH,1),SIZE(PSFTH,2)) :: ZCO2 ! CO2 concentration (kg/kg) -REAL, DIMENSION(SIZE(PSFTH,1),SIZE(PSFTH,2)) :: ZALFA ! angle between the wind +REAL, DIMENSION(:,:), allocatable :: ZU ! zonal wind +REAL, DIMENSION(:,:), allocatable :: ZV ! meridian wind +REAL, DIMENSION(:,:), allocatable :: ZWIND ! wind parallel to the orography +REAL, DIMENSION(:,:), allocatable :: ZRHOA ! air density +REAL, DIMENSION(:,:), allocatable :: ZDIR ! wind direction (rad from N clockwise) +REAL, DIMENSION(:,:), allocatable :: ZSFU ! zonal momentum flux +REAL, DIMENSION(:,:), allocatable :: ZSFV ! meridian momentum flux +REAL, DIMENSION(:,:), allocatable :: ZCO2 ! CO2 concentration (kg/kg) +REAL, DIMENSION(:,:), allocatable :: ZALFA ! angle between the wind ! ! and the x axis -REAL, DIMENSION(SIZE(PSFTH,1),SIZE(PSFTH,2),1):: ZU2D ! u and v component of the -REAL, DIMENSION(SIZE(PSFTH,1),SIZE(PSFTH,2),1):: ZV2D ! wind at mass point -REAL, DIMENSION(SIZE(PSFTH,1),SIZE(PSFTH,2)) :: ZSFTH ! Turbulent flux of heat -REAL, DIMENSION(SIZE(PSFTH,1),SIZE(PSFTH,2)) :: ZSFTQ ! Turbulent flux of water -REAL, DIMENSION(SIZE(PSFTH,1),SIZE(PSFTH,2)) :: ZSFCO2 ! Turbulent flux of CO2 -REAL, DIMENSION(SIZE(PSFTH,1),SIZE(PSFTH,2),NSV):: ZSFTS! Turbulent flux of scalar -! -REAL, DIMENSION(SIZE(PSFTH,1),SIZE(PSFTH,2),NBLOWSNOW_2D) :: ZBLOWSNOW_2D ! 2D blowing snow variables +REAL, DIMENSION(:,:,:), allocatable :: ZU2D ! u and v component of the +REAL, DIMENSION(:,:,:), allocatable :: ZV2D ! wind at mass point +REAL, DIMENSION(:,:), allocatable :: ZSFTH ! Turbulent flux of heat +REAL, DIMENSION(:,:), allocatable :: ZSFTQ ! Turbulent flux of water +REAL, DIMENSION(:,:), allocatable :: ZSFCO2 ! Turbulent flux of CO2 +REAL, DIMENSION(:,:,:), allocatable :: ZSFTS! Turbulent flux of scalar +! +REAL, DIMENSION(:,:,:), allocatable :: ZBLOWSNOW_2D ! 2D blowing snow variables ! after advection ! They refer to the 2D fields advected by MNH including: ! - total number concentration in Canopy @@ -356,15 +356,51 @@ REAL :: ZTIMEC INTEGER :: ILUOUT ! logical unit ! !------------------------------------------------------------------------------- -! -! ILUOUT=TLUOUT%NLU IKB= 1+JPVEXT IKU=NKMAX + 2* JPVEXT IKE=IKU-JPVEXT -! + CALL GET_INDICE_ll (IIB,IJB,IIE,IJE) -! + +allocate( ZZREF (SIZE(PSFTH,1),SIZE(PSFTH,2)) ) +allocate( ZTA (SIZE(PSFTH,1),SIZE(PSFTH,2)) ) +allocate( ZRVA (SIZE(PSFTH,1),SIZE(PSFTH,2)) ) +allocate( ZQA (SIZE(PSFTH,1),SIZE(PSFTH,2)) ) +allocate( ZPA (SIZE(PSFTH,1),SIZE(PSFTH,2)) ) +allocate( ZPS (SIZE(PSFTH,1),SIZE(PSFTH,2)) ) +allocate( ZEXNA (SIZE(PSFTH,1),SIZE(PSFTH,2)) ) +allocate( ZEXNS (SIZE(PSFTH,1),SIZE(PSFTH,2)) ) +allocate( ZTHA (SIZE(PSFTH,1),SIZE(PSFTH,2)) ) +allocate( ZRAIN (SIZE(PSFTH,1),SIZE(PSFTH,2)) ) +allocate( ZSNOW (SIZE(PSFTH,1),SIZE(PSFTH,2)) ) +allocate( ZTSUN (SIZE(PSFTH,1),SIZE(PSFTH,2)) ) + +allocate( ZUA (SIZE(PSFTH,1),SIZE(PSFTH,2)) ) + +allocate( ZVA (SIZE(PSFTH,1),SIZE(PSFTH,2)) ) + +allocate( ZU (SIZE(PSFTH,1),SIZE(PSFTH,2)) ) +allocate( ZV (SIZE(PSFTH,1),SIZE(PSFTH,2)) ) +allocate( ZWIND (SIZE(PSFTH,1),SIZE(PSFTH,2)) ) +allocate( ZRHOA (SIZE(PSFTH,1),SIZE(PSFTH,2)) ) +allocate( ZDIR (SIZE(PSFTH,1),SIZE(PSFTH,2)) ) +allocate( ZSFU (SIZE(PSFTH,1),SIZE(PSFTH,2)) ) +allocate( ZSFV (SIZE(PSFTH,1),SIZE(PSFTH,2)) ) +allocate( ZCO2 (SIZE(PSFTH,1),SIZE(PSFTH,2)) ) +allocate( ZALFA (SIZE(PSFTH,1),SIZE(PSFTH,2)) ) + +allocate( ZU2D (SIZE(PSFTH,1),SIZE(PSFTH,2),1)) +allocate( ZV2D (SIZE(PSFTH,1),SIZE(PSFTH,2),1)) +allocate( ZSFTH (SIZE(PSFTH,1),SIZE(PSFTH,2)) ) +allocate( ZSFTQ (SIZE(PSFTH,1),SIZE(PSFTH,2)) ) +allocate( ZSFCO2(SIZE(PSFTH,1),SIZE(PSFTH,2)) ) +allocate( ZSFTS (SIZE(PSFTH,1),SIZE(PSFTH,2),NSV) ) + +allocate( ZBLOWSNOW_2D(SIZE(PSFTH,1),SIZE(PSFTH,2),NBLOWSNOW_2D) ) + +ALLOCATE(ZRV(SIZE(PSFTH,1),SIZE(PSFTH,2),IKU)) + PSFTH = XUNDEF PSFRV = XUNDEF PSFSV = XUNDEF @@ -380,13 +416,12 @@ PTSRAD = XUNDEF !------------------------------------------------------------------------------- ! !* 1. CONVERSION OF THE ATMOSPHERIC VARIABLES -! --------------------------------------- +! --------------------------------------- ! ! 1.1 water vapor ! ----------- ! -ALLOCATE(ZRV(SIZE(PSFTH,1),SIZE(PSFTH,2),IKU)) ! IF(NRR>0) THEN ZRV(:,:,:)=XRT(:,:,:,1) @@ -421,7 +456,8 @@ END IF ! --------------- ! !$acc data copyin(XUT,XVT,XWT,XDIRCOSXW, XDIRCOSYW, XDIRCOSZW, & -!$acc & XCOSSLOPE,XSINSLOPE,XDXX,XDYY,XDZZ) & +!$acc & XCOSSLOPE,XSINSLOPE) & +!$acc & present(XDXX,XDYY,XDZZ) & !$acc copyout(ZUA,ZVA) CALL ROTATE_WIND(XUT,XVT,XWT, & XDIRCOSXW, XDIRCOSYW, XDIRCOSZW, & @@ -597,7 +633,7 @@ END IF #endif ! ! Call to surface schemes -! +! CALL COUPLING_SURF_ATM_n(YSURF_CUR,'MESONH', 'E',ZTIMEC, & XTSTEP, TDTCUR%TDATE%YEAR, TDTCUR%TDATE%MONTH, TDTCUR%TDATE%DAY, TDTCUR%TIME, & IDIM1D,KSV_SURF,SIZE(XSW_BANDS), & -- GitLab