SURFEX  V8_0
Surfex V8_0 release
 All Classes Files Functions Variables
minzs_vert_shift.F90
Go to the documentation of this file.
1 !SFX_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
2 !SFX_LIC This is part of the SURFEX software governed by the CeCILL-C licence
3 !SFX_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
4 !SFX_LIC for details. version 1.
5 ! #########
6  SUBROUTINE minzs_vert_shift(PZS_MOY,PZS_MIN,PTA_2M,PQA_2M,PPA_2M,PRHOA_2M, &
7  pta_2m_min,pqa_2m_min,ppa_2m_min,prhoa_2m_min )
8 ! #########################################
9 !
10 !
11 !!**** *MINZS_VERT_SHIFT* - routine to shift 2m variables to 2m variables
12 !! above the minimum orography of the grid mesh
13 !!
14 !!
15 !! PURPOSE
16 !! -------
17 !
18 !!** METHOD
19 !! ------
20 !!
21 !! Same method like in forcing_vert_shift.F90
22 !!
23 !! EXTERNAL
24 !! --------
25 !!
26 !! NONE
27 !!
28 !! IMPLICIT ARGUMENTS
29 !! ------------------
30 !!
31 !! REFERENCE
32 !! ---------
33 !!
34 !! AUTHOR
35 !! ------
36 !! B. Decharme
37 !!
38 !! MODIFICATIONS
39 !! -------------
40 !! Original 06/2013
41 !! ---------------------------------------------------------------------
42 !
43 !* 0. DECLARATIONS
44 !
45 USE modd_csts, ONLY : xrd, xg, xrv
46 USE modd_atm_cst, ONLY : xclim_t_grad
47 !
48 USE mode_thermos
49 !
50 !
51 USE yomhook ,ONLY : lhook, dr_hook
52 USE parkind1 ,ONLY : jprb
53 !
54 IMPLICIT NONE
55 !
56 !
57 !* 0.1 declarations of arguments
58 !
59 REAL, DIMENSION(:), INTENT(IN) :: pzs_moy ! mean orography of atmospheric grid
60 REAL, DIMENSION(:), INTENT(IN) :: pzs_min ! min orography of atmospheric grid
61 REAL, DIMENSION(:), INTENT(IN) :: pta_2m ! temperature at 2m
62 REAL, DIMENSION(:), INTENT(IN) :: pqa_2m ! humidity at 2m (kg/m3)
63 REAL, DIMENSION(:), INTENT(IN) :: ppa_2m ! pressure at 2m
64 REAL, DIMENSION(:), INTENT(IN) :: prhoa_2m ! density at 2m
65 !
66 REAL, DIMENSION(:), INTENT(OUT) :: pta_2m_min ! temperature at surface altitude
67 REAL, DIMENSION(:), INTENT(OUT) :: pqa_2m_min ! humidity at surface altitude (kg/m3)
68 REAL, DIMENSION(:), INTENT(OUT) :: ppa_2m_min ! pressure at surface altitude
69 REAL, DIMENSION(:), INTENT(OUT) :: prhoa_2m_min ! density at surface altitude
70 !
71 !* 0.2 declarations of local variables
72 !
73 REAL, DIMENSION(SIZE(PQA_2M )) :: zqa_2m ! air humidity (kg/kg)
74 REAL, DIMENSION(SIZE(PQA_2M )) :: zqa_2m_min ! air humidity (kg/kg)
75 REAL, DIMENSION(SIZE(PRHOA_2M)) :: zrhoa_2m ! approximated density
76 REAL, DIMENSION(SIZE(PRHOA_2M)) :: zrhoa_2m_min ! approximated density
77 !
78 REAL(KIND=JPRB) :: zhook_handle
79 !
80 ! ---------------------------------------------------------------------------
81 !
82 IF (lhook) CALL dr_hook('MINZS_VERT_SHIFT',0,zhook_handle)
83 !
84 zqa_2m = pqa_2m / prhoa_2m
85 !
86 !* 1. climatological gradient for temperature
87 ! ---------------------------------------
88 !
89 pta_2m_min = pta_2m + xclim_t_grad * (pzs_min - pzs_moy)
90 !
91 !-------------------------------------------------------------------------------
92 !
93 !* 2. hydrostatism for pressure
94 ! -------------------------
95 !
96 ppa_2m_min = ppa_2m * exp( - xg/xrd/(0.5*(pta_2m+pta_2m_min)*( 1.+((xrv/xrd)-1.)*zqa_2m(:) )) &
97  * (pzs_min-pzs_moy) )
98 !
99 !-------------------------------------------------------------------------------
100 !
101 !* 3. conservation of relative humidity for humidity
102 ! ----------------------------------------------
103 !
104 zqa_2m_min = zqa_2m / qsat(pta_2m, ppa_2m) * qsat(pta_2m_min,ppa_2m_min)
105 !
106 !-------------------------------------------------------------------------------
107 !
108 !* 4. estimation of air density from temperature and humidity
109 ! -------------------------------------------------------
110 !
111 zrhoa_2m(:) = ppa_2m(:) / xrd / pta_2m(:) / ( 1.+((xrv/xrd)-1.)*zqa_2m(:) )
112 zrhoa_2m_min(:) = ppa_2m_min(:) / xrd / pta_2m_min(:) / ( 1.+((xrv/xrd)-1.)*zqa_2m_min(:) )
113 !
114 prhoa_2m_min(:) = prhoa_2m(:) * zrhoa_2m_min(:) / zrhoa_2m(:)
115 !
116 !-------------------------------------------------------------------------------
117 !
118 !* 5. new humidity in kg/m3
119 ! ---------------------
120 !
121 pqa_2m_min = zqa_2m_min * prhoa_2m_min
122 !
123 IF (lhook) CALL dr_hook('MINZS_VERT_SHIFT',1,zhook_handle)
124 !
125 !-------------------------------------------------------------------------------
126 !
127 END SUBROUTINE minzs_vert_shift
subroutine minzs_vert_shift(PZS_MOY, PZS_MIN, PTA_2M, PQA_2M, PPA_2M, PRHOA_2M, PTA_2M_MIN, PQA_2M_MIN, PPA_2M_MIN, PRHOA_2M_MIN)