SURFEX  V8_0
Surfex V8_0 release
 All Classes Files Functions Variables
init_water_sbl.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 init_water_sbl(KLVL, PPA, PPS, PTA, PQA, PRHOA, PU, PV, PRAIN, PSNOW, &
7  psfth, psftq, pzref, puref, pts, pz0, pz, &
8  pt, pq, pwind, ptke, pp)
9 ! #################################################################################
10 !
11 !!**** *INIT_WATER_SBL* - inits water SBL profiles
12 !!
13 !! PURPOSE
14 !! -------
15 !
16 !!** METHOD
17 !! ------
18 !!
19 !! REFERENCE
20 !! ---------
21 !!
22 !!
23 !! AUTHOR
24 !! ------
25 !! S. Riette
26 !!
27 !! MODIFICATIONS
28 !! -------------
29 !! Original 03/2010
30 !!------------------------------------------------------------------
31 !
32 USE modd_csts, ONLY : xcpd, xrd, xp00, xtt, xg
33 USE modd_canopy_turb, ONLY : xalpsbl
34 !
35 USE modi_cls_wind
36 USE modi_cls_tq
37 USE modi_water_flux
38 !
39 USE yomhook ,ONLY : lhook, dr_hook
40 USE parkind1 ,ONLY : jprb
41 !
42 IMPLICIT NONE
43 !
44 !* 0.1 declarations of arguments
45 !
46 INTEGER , INTENT(IN) :: klvl ! number of levels in canopy
47 REAL, DIMENSION(:), INTENT(IN) :: ppa ! pressure at forcing level (Pa)
48 REAL, DIMENSION(:), INTENT(IN) :: pps ! pressure at atmospheric model surface (Pa)
49 REAL, DIMENSION(:), INTENT(IN) :: pta ! air temperature forcing (K)
50 REAL, DIMENSION(:), INTENT(IN) :: pqa ! air humidity forcing (kg/m3)
51 REAL, DIMENSION(:), INTENT(IN) :: prhoa ! air density (kg/m3)
52 REAL, DIMENSION(:), INTENT(IN) :: pu ! zonal wind (m/s)
53 REAL, DIMENSION(:), INTENT(IN) :: pv ! meridian wind (m/s)
54 REAL, DIMENSION(:), INTENT(IN) :: psnow ! snow precipitation (kg/m2/s)
55 REAL, DIMENSION(:), INTENT(IN) :: prain ! liquid precipitation (kg/m2/s)
56 REAL, DIMENSION(:), INTENT(IN) :: pzref ! height of T,q forcing (m)
57 REAL, DIMENSION(:), INTENT(IN) :: puref ! height of wind forcing (m)
58 REAL, DIMENSION(:), INTENT(IN) :: pts ! surface temperature
59 REAL, DIMENSION(:,:), INTENT(IN):: pz ! height of middle of each level grid (m)
60 REAL, DIMENSION(:), INTENT(INOUT) :: pz0 ! roughness length
61 REAL, DIMENSION(:), INTENT(OUT) :: psfth ! flux of heat (W/m2)
62 REAL, DIMENSION(:), INTENT(OUT) :: psftq ! flux of water vapor (kg/m2/s)
63 !
64 REAL, DIMENSION(:,:), INTENT(OUT) :: pt ! temperature at each level in SBL (m/s)
65 REAL, DIMENSION(:,:), INTENT(OUT) :: pq ! humidity at each level in SBL (kg/m3)
66 REAL, DIMENSION(:,:), INTENT(OUT) :: pwind! wind at each level in SBL (m/s)
67 REAL, DIMENSION(:,:), INTENT(OUT) :: ptke ! Tke at each level in SBL (m2/s2)
68 REAL, DIMENSION(:,:), INTENT(OUT) :: pp ! pressure at each level in SBL (kg/m3)
69 !
70 !* 0.2 declarations of local variables
71 !
72 !* forcing variables
73 !
74 REAL, DIMENSION(SIZE(PTA)) :: zwind ! lowest atmospheric level wind speed (m/s)
75 REAL, DIMENSION(SIZE(PTA)) :: zexna ! Exner function at lowest SBL scheme level (-)
76 REAL, DIMENSION(SIZE(PTA)) :: zqa ! specific humidity (kg/m3)
77 !
78 ! SBL turbulence scheme
79 !
80 REAL, DIMENSION(SIZE(PTA)) :: zustar ! friction velocity (m/s)
81 !
82 REAL, DIMENSION(SIZE(PTA)) :: zexns
83 REAL, DIMENSION(SIZE(PTA)) :: zqsat
84 REAL, DIMENSION(SIZE(PTA)) :: zcd
85 REAL, DIMENSION(SIZE(PTA)) :: zcdn
86 REAL, DIMENSION(SIZE(PTA)) :: zch
87 REAL, DIMENSION(SIZE(PTA)) :: zri
88 REAL, DIMENSION(SIZE(PTA)) :: zresa_sea
89 REAL, DIMENSION(SIZE(PTA)) :: zz0h
90 REAL, DIMENSION(SIZE(PTA)) :: zcls_wind_zon
91 REAL, DIMENSION(SIZE(PTA)) :: zcls_wind_mer
92 REAL, DIMENSION(SIZE(PTA)) :: ztnm
93 REAL, DIMENSION(SIZE(PTA)) :: zqnm
94 REAL, DIMENSION(SIZE(PTA)) :: zhunm
95 REAL, DIMENSION(SIZE(PTA)) :: zhu
96 INTEGER :: j
97 INTEGER :: jlayer
98 LOGICAL :: ghandle_sic = .false. ! no sea-ice model
99 REAL(KIND=JPRB) :: zhook_handle
100 !-------------------------------------------------------------------------------------
101 !
102 !* 1.2 Initialisation at first time step
103 ! ---------------------------------
104 !
105 IF (lhook) CALL dr_hook('INIT_WATER_SBL',0,zhook_handle)
106 !
107 zexna(:) = (ppa(:)/xp00)**(xrd/xcpd)
108 zexns(:) = (pps(:)/xp00)**(xrd/xcpd)
109 zqa(:) = pqa(:) / prhoa(:)
110 zwind(:) = sqrt(pu**2+pv**2)
111 !
112 !We choose the case CSEA_FLUX=DIRECT to compute CD, CDN, CH, RI and ZZ0H
113 !Iterative computation of PZ0 / CD, CDN, CH, ZH0
114 DO j=1,5
115  CALL water_flux(pz0, &
116  pta, zexna, prhoa, pts, zexns, zqa, prain, &
117  psnow, xtt, zwind, pzref, puref, &
118  pps, ghandle_sic, zqsat, psfth, psftq, zustar, &
119  zcd, zcdn, zch, zri, zresa_sea, zz0h )
120 ENDDO
121 !
122 !Initialisation of T, Q, Wind and TKE on all canopy levels
123 zhu(:)=1.
124 DO jlayer=1,klvl
125  !
126  CALL cls_tq(pta, zqa, ppa, pps, pzref, zcd, zch, zri, pts, zhu, zz0h, &
127  pz(:,jlayer), ztnm, zqnm, zhunm )
128  !
129  pt(:,jlayer)=ztnm
130  pq(:,jlayer)=zqnm
131  !
132  CALL cls_wind(pu, pv, puref, zcd, zcdn, zri, pz(:,jlayer), &
133  zcls_wind_zon, zcls_wind_mer )
134  !
135  pwind(:,jlayer) = sqrt( zcls_wind_zon(:)**2 + zcls_wind_mer(:)**2 )
136  ptke(:,jlayer) = xalpsbl * zcd(:) * ( pu(:)**2 + pv(:)**2 )
137  pp(:,jlayer) = ppa(:) + xg * prhoa(:) * ( pz(:,klvl) - pz(:,jlayer) )
138  !
139 ENDDO
140 !
141 IF (lhook) CALL dr_hook('INIT_WATER_SBL',1,zhook_handle)
142 !
143 END SUBROUTINE init_water_sbl
subroutine cls_wind(PZONA, PMERA, PHW, PCD, PCDN, PRI, PHV, PZON10M, PMER10M)
Definition: cls_wind.F90:6
subroutine init_water_sbl(KLVL, PPA, PPS, PTA, PQA, PRHOA, PU, PV, PRAIN, PSNOW, PSFTH, PSFTQ, PZREF, PUREF, PTS, PZ0, PZ, PT, PQ, PWIND, PTKE, PP)
subroutine water_flux(PZ0SEA, PTA, PEXNA, PRHOA, PSST, PEXNS, PQA, PRR, PRS, PTT, PVMOD, PZREF, PUREF, PPS, OHANDLE_SIC, PQSAT, PSFTH, PSFTQ, PUSTAR, PCD, PCDN, PCH, PRI, PRESA, PZ0HSEA)
Definition: water_flux.F90:6
subroutine cls_tq(PTA, PQA, PPA, PPS, PHT, PCD, PCH, PRI, PTS, PHU, PZ0H, PH, PTNM, PQNM, PHUNM)
Definition: cls_tq.F90:6