Skip to content
Snippets Groups Projects
Commit 27ae6bc9 authored by RODIER Quentin's avatar RODIER Quentin
Browse files

F.Couvreux 30/06/2021: add LRELAX_UVMEAN_FRC forcing. Instead of LRELAX_UV_FRC...

F.Couvreux 30/06/2021: add LRELAX_UVMEAN_FRC forcing. Instead of LRELAX_UV_FRC which applies the u,v relaxation read in namelist on each atmospheric column,
LRELAX_UVMEAN_FRC applies the relaxation on the horizontal mean of u and v at each level. To be used in LES mode.
parent 4a79e573
No related branches found
No related tags found
No related merge requests found
...@@ -95,7 +95,8 @@ END MODULE MODI_DEFAULT_DESFM_n ...@@ -95,7 +95,8 @@ END MODULE MODI_DEFAULT_DESFM_n
!! Module MODD_FRC : !! Module MODD_FRC :
!! !!
!! LGEOST_UV_FRC,LGEOST_TH_FRC,LTEND_THRV_FRC !! LGEOST_UV_FRC,LGEOST_TH_FRC,LTEND_THRV_FRC
!! LVERT_MOTION_FRC,LRELAX_THRV_FRC,LRELAX_UV_FRC,XRELAX_TIME_FRC !! LVERT_MOTION_FRC,LRELAX_THRV_FRC,LRELAX_UV_FRC,LRELAX_UVMEAN_FRC,
!! XRELAX_TIME_FRC
!! XRELAX_HEIGHT_FRC,CRELAX_HEIGHT_TYPE,LTRANS,XUTRANS,XVTRANS, !! XRELAX_HEIGHT_FRC,CRELAX_HEIGHT_TYPE,LTRANS,XUTRANS,XVTRANS,
!! LPGROUND_FRC !! LPGROUND_FRC
!! !!
...@@ -216,6 +217,7 @@ END MODULE MODI_DEFAULT_DESFM_n ...@@ -216,6 +217,7 @@ END MODULE MODI_DEFAULT_DESFM_n
! JL Redelsperger 06/2021: add parameters allowing to active idealized oceanic convection ! JL Redelsperger 06/2021: add parameters allowing to active idealized oceanic convection
! B. Vie 06/2021: add prognostic supersaturation for LIMA ! B. Vie 06/2021: add prognostic supersaturation for LIMA
! Q. Rodier 06/2021: modify default value to LGZ=F (grey-zone corr.), LSEDI and OSEDC=T (LIMA sedimentation) ! Q. Rodier 06/2021: modify default value to LGZ=F (grey-zone corr.), LSEDI and OSEDC=T (LIMA sedimentation)
! F. Couvreux 06/2021: add LRELAX_UVMEAN_FRC
!------------------------------------------------------------------------------- !-------------------------------------------------------------------------------
! !
!* 0. DECLARATIONS !* 0. DECLARATIONS
...@@ -796,6 +798,7 @@ IF (KMI == 1) THEN ...@@ -796,6 +798,7 @@ IF (KMI == 1) THEN
LVERT_MOTION_FRC = .FALSE. LVERT_MOTION_FRC = .FALSE.
LRELAX_THRV_FRC = .FALSE. LRELAX_THRV_FRC = .FALSE.
LRELAX_UV_FRC = .FALSE. LRELAX_UV_FRC = .FALSE.
LRELAX_UVMEAN_FRC = .FALSE.
XRELAX_TIME_FRC = 10800. XRELAX_TIME_FRC = 10800.
XRELAX_HEIGHT_FRC = 0. XRELAX_HEIGHT_FRC = 0.
CRELAX_HEIGHT_TYPE = "FIXE" CRELAX_HEIGHT_TYPE = "FIXE"
......
...@@ -149,6 +149,7 @@ END MODULE MODI_FORCING ...@@ -149,6 +149,7 @@ END MODULE MODI_FORCING
! use overloaded comparison operator for date_time ! use overloaded comparison operator for date_time
! P. Wautelet 05/2016-04/2018: new data structures and calls for I/O ! P. Wautelet 05/2016-04/2018: new data structures and calls for I/O
! P. Wautelet 02/2020: use the new data structures and subroutines for budgets ! P. Wautelet 02/2020: use the new data structures and subroutines for budgets
! F. Couvreux 06/2021: add LRELAX_UVMEAN_FRC : relaxation applied to the horizontal avg. wind (for LES)
!------------------------------------------------------------------------------- !-------------------------------------------------------------------------------
! !
!* 0. DECLARATIONS !* 0. DECLARATIONS
...@@ -169,9 +170,13 @@ USE MODD_TIME ...@@ -169,9 +170,13 @@ USE MODD_TIME
! !
use mode_budget, only: Budget_store_init, Budget_store_end use mode_budget, only: Budget_store_init, Budget_store_end
USE MODE_DATETIME USE MODE_DATETIME
USE MODE_GATHER_ll
USE MODE_MSG USE MODE_MSG
USE MODE_ll
USE MODE_REPRO_SUM
! !
USE MODI_GET_HALO USE MODI_GET_HALO
USE MODI_LES_MEAN_ll
USE MODI_SHUMAN USE MODI_SHUMAN
USE MODI_UPSTREAM_Z USE MODI_UPSTREAM_Z
! !
...@@ -209,6 +214,9 @@ REAL, DIMENSION(:,:,:), INTENT(IN) :: PJ ...@@ -209,6 +214,9 @@ REAL, DIMENSION(:,:,:), INTENT(IN) :: PJ
!* 0.2 Declarations of local variables !* 0.2 Declarations of local variables
! !
INTEGER :: IIU, IJU, IKU ! dimensions INTEGER :: IIU, IJU, IKU ! dimensions
INTEGER :: IIB,IJB,IIE,IJE ! physical domain dimensions
INTEGER :: IKB, IKE !
INTEGER :: IIMAX_ll,IJMAX_ll
INTEGER, SAVE :: JSX ! saved loop index INTEGER, SAVE :: JSX ! saved loop index
INTEGER :: JI, JJ, JK, JL, JXP! loop indexes INTEGER :: JI, JJ, JK, JL, JXP! loop indexes
! !
...@@ -248,11 +256,18 @@ INTEGER :: IRESP ! Return code of FM-routines ...@@ -248,11 +256,18 @@ INTEGER :: IRESP ! Return code of FM-routines
! !
LOGICAL,DIMENSION(SIZE(PTHT,1),SIZE(PTHT,2),SIZE(PTHT,3)) :: GRELAX_MASK_FRC LOGICAL,DIMENSION(SIZE(PTHT,1),SIZE(PTHT,2),SIZE(PTHT,3)) :: GRELAX_MASK_FRC
! !
REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZUMEAN, ZVMEAN
REAL :: ZTEMPU, ZTEMPV
!
!---------------------------------------------------------------------------- !----------------------------------------------------------------------------
! !
IIU=SIZE(PUT,1) IIU=SIZE(PUT,1)
IJU=SIZE(PUT,2) IJU=SIZE(PUT,2)
IKU=SIZE(PUT,3) IKU=SIZE(PUT,3)
IKE = SIZE(PUT,3) - JPVEXT
IKB = 1 + JPVEXT
CALL GET_INDICE_ll( IIB,IJB,IIE,IJE)
CALL GET_GLOBALDIMS_ll ( IIMAX_ll,IJMAX_ll)
! !
ILUOUT0 = TLUOUT0%NLU ILUOUT0 = TLUOUT0%NLU
...@@ -479,6 +494,8 @@ ALLOCATE(ZDUF(SIZE(PUT,1),SIZE(PUT,2),SIZE(PUT,3))) ...@@ -479,6 +494,8 @@ ALLOCATE(ZDUF(SIZE(PUT,1),SIZE(PUT,2),SIZE(PUT,3)))
ALLOCATE(ZDVF(SIZE(PVT,1),SIZE(PVT,2),SIZE(PVT,3))) ALLOCATE(ZDVF(SIZE(PVT,1),SIZE(PVT,2),SIZE(PVT,3)))
ALLOCATE(ZTENDUF(SIZE(PUT,1),SIZE(PUT,2),SIZE(PUT,3))) ALLOCATE(ZTENDUF(SIZE(PUT,1),SIZE(PUT,2),SIZE(PUT,3)))
ALLOCATE(ZTENDVF(SIZE(PVT,1),SIZE(PVT,2),SIZE(PVT,3))) ALLOCATE(ZTENDVF(SIZE(PVT,1),SIZE(PVT,2),SIZE(PVT,3)))
ALLOCATE(ZUMEAN(SIZE(PUT,1),SIZE(PUT,2),SIZE(PUT,3)))
ALLOCATE(ZVMEAN(SIZE(PVT,1),SIZE(PVT,2),SIZE(PVT,3)))
! !
IF (LFLAT) THEN IF (LFLAT) THEN
! !
...@@ -782,7 +799,7 @@ PVFRC_PAST(:,:,:) = ZVF(:,:,:) ...@@ -782,7 +799,7 @@ PVFRC_PAST(:,:,:) = ZVF(:,:,:)
! !
!* 4.4 integration of the thermal, moisture and wind relaxation !* 4.4 integration of the thermal, moisture and wind relaxation
! !
IF( LRELAX_THRV_FRC .OR. LRELAX_UV_FRC ) THEN IF( LRELAX_THRV_FRC .OR. LRELAX_UV_FRC .OR. LRELAX_UVMEAN_FRC) THEN
! !
ZDZZ(:,:,:) = DZM(MZF(PZZ(:,:,:))) ZDZZ(:,:,:) = DZM(MZF(PZZ(:,:,:)))
ZDZZ(:,:,IKU) = PZZ(:,:,IKU) - PZZ(:,:,IKU-1) ZDZZ(:,:,IKU) = PZZ(:,:,IKU) - PZZ(:,:,IKU-1)
...@@ -837,6 +854,25 @@ IF( LRELAX_THRV_FRC .OR. LRELAX_UV_FRC ) THEN ...@@ -837,6 +854,25 @@ IF( LRELAX_THRV_FRC .OR. LRELAX_UV_FRC ) THEN
END WHERE END WHERE
! !
END IF END IF
!
IF ( LRELAX_UVMEAN_FRC ) THEN
DO JK=IKB,IKE
ZTEMPU=SUM_DD_R2_ll(PUT(IIB:IIE,IJB:IJE,JK))/REAL(IIMAX_ll*IJMAX_ll)
ZUMEAN(:,:,JK) = ZTEMPU
ZTEMPV=SUM_DD_R2_ll(PVT(IIB:IIE,IJB:IJE,JK))/REAL(IIMAX_ll*IJMAX_ll)
ZVMEAN(:,:,JK) = ZTEMPV
END DO
!
! apply UV relaxation on the horizontal-average value of UV
!
WHERE( GRELAX_MASK_FRC )
PRUS(:,:,:) = PRUS(:,:,:) - MXM(PRHODJ(:,:,:))*(ZUMEAN(:,:,:)-ZUF(:,:,:)) &
/ XRELAX_TIME_FRC
PRVS(:,:,:) = PRVS(:,:,:) - MYM(PRHODJ(:,:,:))*(ZVMEAN(:,:,:)-ZVF(:,:,:)) &
/ XRELAX_TIME_FRC
END WHERE
!
END IF
! !
END IF END IF
! !
...@@ -891,6 +927,8 @@ DEALLOCATE(ZDZZ) ...@@ -891,6 +927,8 @@ DEALLOCATE(ZDZZ)
DEALLOCATE(ZRWCF) DEALLOCATE(ZRWCF)
DEALLOCATE(ZDUF) DEALLOCATE(ZDUF)
DEALLOCATE(ZDVF) DEALLOCATE(ZDVF)
DEALLOCATE(ZUMEAN)
DEALLOCATE(ZVMEAN)
! !
!---------------------------------------------------------------------------- !----------------------------------------------------------------------------
! !
......
...@@ -17,9 +17,9 @@ ...@@ -17,9 +17,9 @@
! and the translation speed of the domain of simulation. ! and the translation speed of the domain of simulation.
! The following control parameters are used by FORCING: ! The following control parameters are used by FORCING:
! - LGEOST_UV_FRC and LGEOST_TH_FRC ! - LGEOST_UV_FRC and LGEOST_TH_FRC
! - LTEND_THRV_FRC ! - LTEND_THRV_FRC and LTEND_UV_FRC
! - LVERT_MOTION_FRC ! - LVERT_MOTION_FRC
! - LRELAX_THRV_FRC and LRELAX_UV_FRC using: ! - LRELAX_THRV_FRC, LRELAX_UV_FRC and LRELAX_UVMEAN_FRC using:
! XRELAX_TIME_FRC, XRELAX_HEIGHT_FRC and CRELAX_HEIGHT_TYPE ! XRELAX_TIME_FRC, XRELAX_HEIGHT_FRC and CRELAX_HEIGHT_TYPE
! - LTRANS ! - LTRANS
!! !!
...@@ -46,6 +46,7 @@ ...@@ -46,6 +46,7 @@
!! 01/2004 V. Masson surface externalization: removes SST forcing !! 01/2004 V. Masson surface externalization: removes SST forcing
!! 09/2017 Q.Rodier add LTEND_UV_FRC !! 09/2017 Q.Rodier add LTEND_UV_FRC
!! 03/2021 JL Redelsperger Parameters defining sfc forcing shape for idealized ocean case !! 03/2021 JL Redelsperger Parameters defining sfc forcing shape for idealized ocean case
!! 06/2021 F. Couvreux add LRELAX_UVMEAN_FRC
!------------------------------------------------------------------------------- !-------------------------------------------------------------------------------
! !
!* 0. DECLARATIONS !* 0. DECLARATIONS
...@@ -88,7 +89,8 @@ LOGICAL, SAVE :: LTEND_UV_FRC ! enables tendency forcing of the wind ...@@ -88,7 +89,8 @@ LOGICAL, SAVE :: LTEND_UV_FRC ! enables tendency forcing of the wind
LOGICAL, SAVE :: LVERT_MOTION_FRC ! enables prescribed a forced vertical LOGICAL, SAVE :: LVERT_MOTION_FRC ! enables prescribed a forced vertical
! transport for all prognostic variables ! transport for all prognostic variables
LOGICAL, SAVE :: LRELAX_THRV_FRC ! enables temp. and humidity relaxation LOGICAL, SAVE :: LRELAX_THRV_FRC ! enables temp. and humidity relaxation
LOGICAL, SAVE :: LRELAX_UV_FRC ! enables horizontal wind relaxation LOGICAL, SAVE :: LRELAX_UV_FRC ! enables horizontal wind relaxation applied to the full wind field
LOGICAL, SAVE :: LRELAX_UVMEAN_FRC ! enables horizontal wind relaxation applied to the horiz. avg. wind
! !
REAL, SAVE :: XRELAX_TIME_FRC ! e-folding time for relaxation REAL, SAVE :: XRELAX_TIME_FRC ! e-folding time for relaxation
REAL, SAVE :: XRELAX_HEIGHT_FRC ! height below which relaxation REAL, SAVE :: XRELAX_HEIGHT_FRC ! height below which relaxation
......
...@@ -14,9 +14,9 @@ ...@@ -14,9 +14,9 @@
! This module contains the following control parameters are used ! This module contains the following control parameters are used
! by FORCING: ! by FORCING:
! - LGEOST_UV_FRC and LGEOST_TH_FRC ! - LGEOST_UV_FRC and LGEOST_TH_FRC
! - LTEND_THRV_FRC ! - LTEND_THRV_FRC and LTEND_UV_FRC
! - LVERT_MOTION_FRC ! - LVERT_MOTION_FRC
! - LRELAX_THRV_FRC and LRELAX_UV_FRC using: ! - LRELAX_THRV_FRC, LRELAX_UV_FRC and LRELAX_UVMEAN_FRC using:
! XRELAX_TIME_FRC, XRELAX_HEIGHT_FRC and CRELAX_HEIGHT_TYPE ! XRELAX_TIME_FRC, XRELAX_HEIGHT_FRC and CRELAX_HEIGHT_TYPE
! - LTRANS ! - LTRANS
! XUTRANS, XVTRANS ! XUTRANS, XVTRANS
...@@ -43,6 +43,7 @@ ...@@ -43,6 +43,7 @@
!! add SST and surf pressure forcing !! add SST and surf pressure forcing
!! 06/2003 (V. Masson) removes SST forcing (externalisation of surface) !! 06/2003 (V. Masson) removes SST forcing (externalisation of surface)
!! 09/2017 Q.Rodier add LTEND_UV_FRC !! 09/2017 Q.Rodier add LTEND_UV_FRC
!! 06/2021 F.Couvreux add LRELAX_UVMEAN_FRC
!------------------------------------------------------------------------------- !-------------------------------------------------------------------------------
USE MODD_FRC USE MODD_FRC
! !
...@@ -55,6 +56,7 @@ NAMELIST /NAM_FRC/ LGEOST_UV_FRC , & ...@@ -55,6 +56,7 @@ NAMELIST /NAM_FRC/ LGEOST_UV_FRC , &
LVERT_MOTION_FRC , & LVERT_MOTION_FRC , &
LRELAX_THRV_FRC , & LRELAX_THRV_FRC , &
LRELAX_UV_FRC , & LRELAX_UV_FRC , &
LRELAX_UVMEAN_FRC , &
XRELAX_TIME_FRC , & XRELAX_TIME_FRC , &
XRELAX_HEIGHT_FRC , & XRELAX_HEIGHT_FRC , &
CRELAX_HEIGHT_TYPE , & CRELAX_HEIGHT_TYPE , &
......
...@@ -2363,15 +2363,24 @@ IF ( LFORCING ) THEN ...@@ -2363,15 +2363,24 @@ IF ( LFORCING ) THEN
WRITE(ILUOUT,FMT=*) 'YOU CHOSE A TEMPERATURE AND HUMIDITY RELAXATION' WRITE(ILUOUT,FMT=*) 'YOU CHOSE A TEMPERATURE AND HUMIDITY RELAXATION'
WRITE(ILUOUT,FMT=*) 'TOGETHER WITH TENDENCY OR GEOSTROPHIC FORCING' WRITE(ILUOUT,FMT=*) 'TOGETHER WITH TENDENCY OR GEOSTROPHIC FORCING'
WRITE(ILUOUT,FMT=*) & WRITE(ILUOUT,FMT=*) &
'YOU MIGHT CHECK YOUR SWITCHES: LRELAX_THRV_FRC, LTEND_THRV_FRC, AND' 'YOU MIGHT CHECK YOUR SWITCHES: LRELAX_THRV_FRC, LTEND_THRV_FRC, AND'
WRITE(ILUOUT,FMT=*) 'LGEOST_TH_FRC' WRITE(ILUOUT,FMT=*) 'LGEOST_TH_FRC'
END IF END IF
! !
IF ( LRELAX_UV_FRC .AND. LGEOST_UV_FRC ) THEN IF ( LRELAX_UV_FRC .AND. LRELAX_UVMEAN_FRC) THEN
WRITE(UNIT=ILUOUT,FMT=9003) KMI
WRITE(ILUOUT,FMT=*) 'YOU MUST CHOOSE BETWEEN A RELAXATION APPLIED TO'
WRITE(ILUOUT,FMT=*) 'THE 3D FULL WIND FIELD (LRELAX_UV_FRC) OR'
WRITE(ILUOUT,FMT=*) 'THE HORIZONTAL MEAN WIND (LRELAX_UVMEAN_FRC)'
!callabortstop
CALL PRINT_MSG(NVERB_FATAL,'GEN','READ_EXSEG_n','')
END IF
!
IF ( (LRELAX_UV_FRC .OR. LRELAX_UVMEAN_FRC) .AND. LGEOST_UV_FRC ) THEN
WRITE(UNIT=ILUOUT,FMT=9003) KMI WRITE(UNIT=ILUOUT,FMT=9003) KMI
WRITE(ILUOUT,FMT=*) 'YOU MUST NOT USE A WIND RELAXATION' WRITE(ILUOUT,FMT=*) 'YOU MUST NOT USE A WIND RELAXATION'
WRITE(ILUOUT,FMT=*) 'TOGETHER WITH A GEOSTROPHIC FORCING' WRITE(ILUOUT,FMT=*) 'TOGETHER WITH A GEOSTROPHIC FORCING'
WRITE(ILUOUT,FMT=*) 'CHECK SWITCHES: LRELAX_UV_FRC, LGEOST_UV_FRC' WRITE(ILUOUT,FMT=*) 'CHECK SWITCHES: LRELAX_UV_FRC, LRELAX_UVMEAN_FRC, LGEOST_UV_FRC'
!callabortstop !callabortstop
CALL PRINT_MSG(NVERB_FATAL,'GEN','READ_EXSEG_n','') CALL PRINT_MSG(NVERB_FATAL,'GEN','READ_EXSEG_n','')
END IF END IF
......
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