Newer
Older
!MNH_LIC Copyright 2021-2021 CNRS, Meteo-France and Universite Paul Sabatier

RODIER Quentin
committed
!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

RODIER Quentin
committed
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
!MNH_LIC for details. version 1.
!-----------------------------------------------------------------
! #####################
MODULE MODI_RECYCLING
! #####################
!
INTERFACE
!
SUBROUTINE RECYCLING (PFLUCTUNW,PFLUCTVNN,PFLUCTUTN,PFLUCTVTW,PFLUCTWTW,PFLUCTWTN, &
PFLUCTUNE,PFLUCTVNS,PFLUCTUTS,PFLUCTVTE,PFLUCTWTE,PFLUCTWTS, &
PTCOUNT)
INTEGER ,INTENT(IN) :: PTCOUNT
REAL, DIMENSION(:,:) ,INTENT(INOUT) :: PFLUCTUNW,PFLUCTVTW,PFLUCTVNN,PFLUCTUTN,PFLUCTWTW,PFLUCTWTN
REAL, DIMENSION(:,:) ,INTENT(INOUT) :: PFLUCTUNE,PFLUCTVTE,PFLUCTVNS,PFLUCTUTS,PFLUCTWTE,PFLUCTWTS
END SUBROUTINE RECYCLING
!
END INTERFACE
!
END MODULE MODI_RECYCLING
!
!
!
! ####################################
SUBROUTINE RECYCLING (PFLUCTUNW,PFLUCTVNN,PFLUCTUTN,PFLUCTVTW,PFLUCTWTW,PFLUCTWTN, &
PFLUCTUNE,PFLUCTVNS,PFLUCTUTS,PFLUCTVTE,PFLUCTWTE,PFLUCTWTS, &
PTCOUNT)
! ####################################
!
!!**** *RECYCLING* - routine initializing and building the velocity fluctuations fields
!!
!! PURPOSE
!! -------
! The purpose of this routine is to initialize and calculate
! turbulent fluctuations in order to be applied at the domain
! boundaries.
!
!! METHOD
!! ------
!!!
!! EXTERNAL
!! --------
!! NONE
!!
!! IMPLICIT ARGUMENTS
!! ------------------
!!
!! REFERENCE
!! ---------
!!
!! AUTHOR
!! ------
!! Tim Nagel * Meteo-France*
!!
!! MODIFICATIONS
!! -------------
!! Original 01/02/2021
!!
!------------------------------------------------------------------------------
!
!**** 0. DECLARATIONS
! ---------------
!

WAUTELET Philippe
committed
USE MODD_CONF, ONLY: CCONF
USE MODD_FIELD_n, ONLY: XTHT, XUT, XVT, XWT
USE MODD_GRID_n, ONLY: XXHAT, XYHAT
USE MODD_METRICS_n, ONLY: XDZZ
USE MODD_PARAMETERS, ONLY: JPHEXT

RODIER Quentin
committed
USE MODD_RECYCL_PARAM_n

WAUTELET Philippe
committed
USE MODE_MSG

RODIER Quentin
committed
USE MODI_RECYCL_FLUC

WAUTELET Philippe
committed

RODIER Quentin
committed
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
IMPLICIT NONE
!
!------------------------------------------------------------------------------
!
! 0.1 declarations of arguments
INTEGER ,INTENT(IN) :: PTCOUNT ! temporal loop index of model KMODEL
REAL, DIMENSION(:,:) ,INTENT(INOUT) :: PFLUCTUNW,PFLUCTVTW,PFLUCTVNN,PFLUCTUTN,PFLUCTWTW,PFLUCTWTN
REAL, DIMENSION(:,:) ,INTENT(INOUT) :: PFLUCTUNE,PFLUCTVTE,PFLUCTVNS,PFLUCTUTS,PFLUCTWTE,PFLUCTWTS
!
!------------------------------------------------------------------------------
!
! 0.2 declaration of local variables
INTEGER :: PMINW,PMINE,PMINN,PMINS
INTEGER :: JIDIST,JJDIST
REAL :: Z_DELTX,Z_DELTY
!
!------------------------------------------------------------------------------
!
! 0.3 allocation
PMINW=0
PMINN=0
PMINS=0
PMINE=0
Z_DELTX = XXHAT(2)-XXHAT(1)
Z_DELTY = XYHAT(2)-XYHAT(1)
!------------------------------------------------------------------------------
!
!**** 1. Recycling distance calculation
! ---------------
!
!Moving averaged parameter verification
IF (PTCOUNT==1 .AND. INT(XTMOY)/INT(XTMOYCOUNT) /= INT(XNUMBELT)) THEN
CMNHMSG(1) = 'XTMOY/XTMOYCOUNT must be equal to XNUMBELT'
CMNHMSG(2) = 'Please change the above parameters accordingly in NAM_RECYCL_PARAMn'
CALL PRINT_MSG( NVERB_FATAL, 'GEN', 'RECYCLING' )

RODIER Quentin
committed
END IF
IF(CCONF == "RESTA" .AND. PTCOUNT == 1 ) THEN
NR_COUNT = NR_COUNT

RODIER Quentin
committed
ELSE
NR_COUNT = NR_COUNT +1
!IF (IP==1) WRITE(*,*)'RCOUNT: ', NR_COUNT

RODIER Quentin
committed
ENDIF
IF (LRECYCLW) THEN
JIDIST = INT(XDRECYCLW*cos(XARECYCLW)/Z_DELTX)
JJDIST = INT(XDRECYCLW*sin(XARECYCLW)/Z_DELTY)
PMINW = 1+JPHEXT+JIDIST
ENDIF
IF (LRECYCLN) THEN
JIDIST = INT(XDRECYCLN*cos(XARECYCLN)/Z_DELTX)
JJDIST = INT(XDRECYCLN*sin(XARECYCLN)/Z_DELTY)
PMINN = 1+JPHEXT+JJDIST
ENDIF
IF (LRECYCLE) THEN
JIDIST = INT(XDRECYCLE*cos(XARECYCLE)/Z_DELTX)
JJDIST = INT(XDRECYCLE*sin(XARECYCLE)/Z_DELTY)
PMINE = 1+JPHEXT+JIDIST
ENDIF
IF (LRECYCLS) THEN
JIDIST = INT(XDRECYCLS*cos(XARECYCLS)/Z_DELTX)
JJDIST = INT(XDRECYCLS*sin(XARECYCLS)/Z_DELTY)
PMINS = 1+JPHEXT+JJDIST!
ENDIF
CALL RECYCL_FLUC (XUT,XVT,XWT,XTHT,XDZZ,NR_COUNT,PTCOUNT,PMINW,PMINN,PMINE,PMINS,&
PFLUCTUNW,PFLUCTVNN,PFLUCTUTN,PFLUCTVTW,PFLUCTWTW,PFLUCTWTN, &
PFLUCTUNE,PFLUCTVNS,PFLUCTUTS,PFLUCTVTE,PFLUCTWTE,PFLUCTWTS )

RODIER Quentin
committed
RETURN
END SUBROUTINE RECYCLING