Skip to content
Snippets Groups Projects
Commit e65ed0af authored by WAUTELET Philippe's avatar WAUTELET Philippe
Browse files

Philippe 24/11/2023: fix problem in INTERP_HORGRID_1DIR_TO_MASSPOINTS if domain is cyclic

(cherry picked from commit e83d72ab)
parent d814b6e7
No related branches found
No related tags found
No related merge requests found
!MNH_LIC Copyright 1994-2022 CNRS, Meteo-France and Universite Paul Sabatier !MNH_LIC Copyright 1994-2023 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 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. !MNH_LIC for details. version 1.
...@@ -6,6 +6,7 @@ ...@@ -6,6 +6,7 @@
! Modifications: ! Modifications:
! P. Wautelet 31/08/2022: add PXHATM and PYHATM variables ! P. Wautelet 31/08/2022: add PXHATM and PYHATM variables
! P. Wautelet 07/09/2022: add INTERP_HORGRID_1DIR_TO_MASSPOINTS, INTERP_HORGRID_TO_MASSPOINTS, INTERP_VERGRID_TO_MASSPOINTS ! P. Wautelet 07/09/2022: add INTERP_HORGRID_1DIR_TO_MASSPOINTS, INTERP_HORGRID_TO_MASSPOINTS, INTERP_VERGRID_TO_MASSPOINTS
! P. Wautelet 24/11/2023: fix problem in INTERP_HORGRID_1DIR_TO_MASSPOINTS if domain is cyclic
!----------------------------------------------------------------- !-----------------------------------------------------------------
! #################### ! ####################
MODULE MODE_SET_GRID MODULE MODE_SET_GRID
...@@ -450,10 +451,12 @@ SUBROUTINE INTERP_HORGRID_1DIR_TO_MASSPOINTS( HDIR, PHAT, PHATM ) ...@@ -450,10 +451,12 @@ SUBROUTINE INTERP_HORGRID_1DIR_TO_MASSPOINTS( HDIR, PHAT, PHATM )
! Interpolate 1 direction of horizontal grid to mass points ! Interpolate 1 direction of horizontal grid to mass points
USE MODD_ARGSLIST_ll, ONLY: LIST1D_ll USE MODD_ARGSLIST_ll, ONLY: LIST1D_ll
USE MODD_PARAMETERS, ONLY: JPHEXT
USE MODE_ARGSLIST_ll, ONLY: ADD1DFIELD_ll, CLEANLIST1D_ll USE MODE_ARGSLIST_ll, ONLY: ADD1DFIELD_ll, CLEANLIST1D_ll
USE MODE_EXCHANGE_ll, ONLY: UPDATE_1DHALO_ll USE MODE_EXCHANGE_ll, ONLY: UPDATE_1DHALO_ll
USE MODE_MSG USE MODE_MSG
USE MODE_TOOLS_ll, ONLY: LNORTH_ll, LSOUTH_ll, LEAST_ll, LWEST_ll
IMPLICIT NONE IMPLICIT NONE
...@@ -463,6 +466,7 @@ SUBROUTINE INTERP_HORGRID_1DIR_TO_MASSPOINTS( HDIR, PHAT, PHATM ) ...@@ -463,6 +466,7 @@ SUBROUTINE INTERP_HORGRID_1DIR_TO_MASSPOINTS( HDIR, PHAT, PHATM )
CHARACTER(LEN=:), ALLOCATABLE :: YNAME CHARACTER(LEN=:), ALLOCATABLE :: YNAME
INTEGER :: IINFO_ll ! return code INTEGER :: IINFO_ll ! return code
REAL, DIMENSION(JPHEXT) :: ZBEG, ZEND
TYPE(LIST1D_ll), POINTER :: TZLIST ! pointer for the list of 1D fields to be communicated TYPE(LIST1D_ll), POINTER :: TZLIST ! pointer for the list of 1D fields to be communicated
...@@ -481,10 +485,28 @@ SUBROUTINE INTERP_HORGRID_1DIR_TO_MASSPOINTS( HDIR, PHAT, PHATM ) ...@@ -481,10 +485,28 @@ SUBROUTINE INTERP_HORGRID_1DIR_TO_MASSPOINTS( HDIR, PHAT, PHATM )
CALL PRINT_MSG( NVERB_ERROR, 'GEN', 'INTERP_HORGRID_1DIR_TO_MASSPOINTS', 'invalid direction (valid: X or Y)' ) CALL PRINT_MSG( NVERB_ERROR, 'GEN', 'INTERP_HORGRID_1DIR_TO_MASSPOINTS', 'invalid direction (valid: X or Y)' )
END IF END IF
! Save state outside of the physical domain (necessary to overcome overwrite in UPDATE_1DHALO_ll if cyclic domain)
! This is a relatively clean hack. An other way would be to force CLBCX/Y to 'OPEN' but it seems to have
! unexpected results later.
IF ( ( HDIR == 'X' .AND. LWEST_ll() ) .OR. ( HDIR == 'Y' .AND. LSOUTH_ll() ) ) THEN
ZBEG(:) = PHATM( LBOUND(PHATM,1) : LBOUND(PHATM,1)+JPHEXT-1 )
END IF
IF ( ( HDIR == 'X' .AND. LEAST_ll() ) .OR. ( HDIR == 'Y' .AND. LNORTH_ll() ) ) THEN
ZEND(:) = PHATM( UBOUND(PHATM,1)-JPHEXT+1 : UBOUND(PHATM,1) )
END IF
CALL ADD1DFIELD_ll( HDIR, TZLIST, PHATM, YNAME ) CALL ADD1DFIELD_ll( HDIR, TZLIST, PHATM, YNAME )
CALL UPDATE_1DHALO_ll( TZLIST, IINFO_ll ) CALL UPDATE_1DHALO_ll( TZLIST, IINFO_ll )
CALL CLEANLIST1D_ll( TZLIST ) CALL CLEANLIST1D_ll( TZLIST )
! Restore state outside of the physical domain (necessary to overcome overwrite in UPDATE_1DHALO_ll if cyclic domain)
IF ( ( HDIR == 'X' .AND. LWEST_ll() ) .OR. ( HDIR == 'Y' .AND. LSOUTH_ll() ) ) THEN
PHATM( LBOUND(PHATM,1) : LBOUND(PHATM,1)+JPHEXT-1 ) = ZBEG(:)
END IF
IF ( ( HDIR == 'X' .AND. LEAST_ll() ) .OR. ( HDIR == 'Y' .AND. LNORTH_ll() ) ) THEN
PHATM( UBOUND(PHATM,1)-JPHEXT+1 : UBOUND(PHATM,1) ) = ZEND(:)
END IF
END SUBROUTINE INTERP_HORGRID_1DIR_TO_MASSPOINTS END SUBROUTINE INTERP_HORGRID_1DIR_TO_MASSPOINTS
!----------------------------------------------------------------- !-----------------------------------------------------------------
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment