SURFEX  V8_0
Surfex V8_0 release
 All Classes Files Functions Variables
coupling_tsz0n.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 coupling_tsz0_n (DTCO, UG, U, USS, IM, DTZ, DTGD, DTGR, TGRO, DST, SLT, &
7  hprogram, hcoupling, &
8  ptstep, kyear, kmonth, kday, ptime, ki, ksv, ksw, ptsun, pzenith, pzenith2, &
9  pazim, pzref, puref, pzs, pu, pv, pqa, pta, prhoa, psv, pco2, hsv, &
10  prain, psnow, plw, pdir_sw, psca_sw, psw_bands, pps, ppa, &
11  psftq, psfth, psfts, psfco2, psfu, psfv, &
12  ptrad, pdir_alb, psca_alb, pemis, ptsurf, pz0, pz0h, pqsurf, &
13  ppew_a_coef, ppew_b_coef, &
14  ppet_a_coef, ppeq_a_coef, ppet_b_coef, ppeq_b_coef, &
15  htest )
16 ! ###############################################################################
17 !
18 !!**** *COUPLING_TSZ0_n * - Call of fluxes from vegetation scheme ISBA but
19 !! without temporal evolution of the soil/vegetation.
20 !!
21 !! PURPOSE
22 !! -------
23 !
24 !!** METHOD
25 !! ------
26 !!
27 !! REFERENCE
28 !! ---------
29 !!
30 !!
31 !! AUTHOR
32 !! ------
33 !! V. Masson
34 !!
35 !! MODIFICATIONS
36 !! -------------
37 !! Original 01/2004
38 !! Modified 09/2012 : J. Escobar , SIZE(PTA) not allowed without-interface , replace by KI
39 !! B. Decharme 04/2013 new coupling variables
40 !! P. LeMoigne 12/2014 bug in "implicit" coefficients
41 !!------------------------------------------------------------------
42 !
43 !
44 USE modd_surfex_n, ONLY : isba_model_t
45 !
48 USE modd_surf_atm_n, ONLY : surf_atm_t
50 USE modd_data_tsz0_n, ONLY : data_tsz0_t
54 USE modd_dst_n, ONLY : dst_t
55 USE modd_slt_n, ONLY : slt_t
56 !
57 !
58 USE modd_surf_par, ONLY : xundef
59 USE modd_csts, ONLY : xp00, xrd, xcpd
60 !
61 USE modi_tsz0
62 USE modi_coupling_isba_orography_n
63 !
64 USE yomhook ,ONLY : lhook, dr_hook
65 USE parkind1 ,ONLY : jprb
66 !
67 IMPLICIT NONE
68 !
69 !* 0.1 declarations of arguments
70 !
71 !
72 TYPE(isba_model_t), INTENT(INOUT) :: im
73 TYPE(data_cover_t), INTENT(INOUT) :: dtco
74 TYPE(surf_atm_grid_t), INTENT(INOUT) :: ug
75 TYPE(surf_atm_t), INTENT(INOUT) :: u
76 TYPE(surf_atm_sso_t), INTENT(INOUT) :: uss
77 TYPE(data_tsz0_t), INTENT(INOUT) :: dtz
78 TYPE(data_teb_garden_t), INTENT(INOUT) :: dtgd
79 TYPE(data_teb_greenroof_t), INTENT(INOUT) :: dtgr
80 TYPE(teb_greenroof_options_t), INTENT(INOUT) :: tgro
81 TYPE(dst_t), INTENT(INOUT) :: dst
82 TYPE(slt_t), INTENT(INOUT) :: slt
83 !
84  CHARACTER(LEN=6), INTENT(IN) :: hprogram ! program calling surf. schemes
85  CHARACTER(LEN=1), INTENT(IN) :: hcoupling ! type of coupling
86  ! 'E' : explicit
87  ! 'I' : implicit
88 INTEGER, INTENT(IN) :: kyear ! current year (UTC)
89 INTEGER, INTENT(IN) :: kmonth ! current month (UTC)
90 INTEGER, INTENT(IN) :: kday ! current day (UTC)
91 REAL, INTENT(IN) :: ptime ! current time since midnight (UTC, s)
92 INTEGER, INTENT(IN) :: ki ! number of points
93 INTEGER, INTENT(IN) :: ksv ! number of scalars
94 INTEGER, INTENT(IN) :: ksw ! number of short-wave spectral bands
95 REAL, DIMENSION(KI), INTENT(IN) :: ptsun ! solar time (s from midnight)
96 REAL, INTENT(IN) :: ptstep ! atmospheric time-step (s)
97 REAL, DIMENSION(KI), INTENT(IN) :: pzref ! height of T,q forcing (m)
98 REAL, DIMENSION(KI), INTENT(IN) :: puref ! height of wind forcing (m)
99 !
100 REAL, DIMENSION(KI), INTENT(IN) :: pta ! air temperature forcing (K)
101 REAL, DIMENSION(KI), INTENT(IN) :: pqa ! air humidity forcing (kg/m3)
102 REAL, DIMENSION(KI), INTENT(IN) :: prhoa ! air density (kg/m3)
103 REAL, DIMENSION(KI,KSV),INTENT(IN) :: psv ! scalar variables
104 ! ! chemistry: first char. in HSV: '#' (molecule/m3)
105 ! !
106  CHARACTER(LEN=6), DIMENSION(KSV),INTENT(IN):: hsv ! name of all scalar variables
107 REAL, DIMENSION(KI), INTENT(IN) :: pu ! zonal wind (m/s)
108 REAL, DIMENSION(KI), INTENT(IN) :: pv ! meridian wind (m/s)
109 REAL, DIMENSION(KI,KSW),INTENT(IN) :: pdir_sw ! direct solar radiation (on horizontal surf.)
110 ! ! (W/m2)
111 REAL, DIMENSION(KI,KSW),INTENT(IN) :: psca_sw ! diffuse solar radiation (on horizontal surf.)
112 ! ! (W/m2)
113 REAL, DIMENSION(KSW),INTENT(IN) :: psw_bands ! mean wavelength of each shortwave band (m)
114 REAL, DIMENSION(KI), INTENT(IN) :: pzenith ! zenithal angle at t (radian from the vertical)
115 REAL, DIMENSION(KI), INTENT(IN) :: pzenith2 ! zenithal angle at t+1 (radian from the vertical)
116 REAL, DIMENSION(KI), INTENT(IN) :: pazim ! azimuthal angle (radian from North, clockwise)
117 REAL, DIMENSION(KI), INTENT(IN) :: plw ! longwave radiation (on horizontal surf.)
118 ! ! (W/m2)
119 REAL, DIMENSION(KI), INTENT(IN) :: pps ! pressure at atmospheric model surface (Pa)
120 REAL, DIMENSION(KI), INTENT(IN) :: ppa ! pressure at forcing level (Pa)
121 REAL, DIMENSION(KI), INTENT(IN) :: pzs ! atmospheric model orography (m)
122 REAL, DIMENSION(KI), INTENT(IN) :: pco2 ! CO2 concentration in the air (kg/m3)
123 REAL, DIMENSION(KI), INTENT(IN) :: psnow ! snow precipitation (kg/m2/s)
124 REAL, DIMENSION(KI), INTENT(IN) :: prain ! liquid precipitation (kg/m2/s)
125 !
126 !
127 REAL, DIMENSION(KI), INTENT(OUT) :: psfth ! flux of heat (W/m2)
128 REAL, DIMENSION(KI), INTENT(OUT) :: psftq ! flux of water vapor (kg/m2/s)
129 REAL, DIMENSION(KI), INTENT(OUT) :: psfu ! zonal momentum flux (Pa)
130 REAL, DIMENSION(KI), INTENT(OUT) :: psfv ! meridian momentum flux (Pa)
131 REAL, DIMENSION(KI), INTENT(OUT) :: psfco2 ! flux of CO2 (m/s*kg_CO2/kg_air)
132 REAL, DIMENSION(KI,KSV),INTENT(OUT):: psfts ! flux of scalar var. (kg/m2/s)
133 !
134 REAL, DIMENSION(KI), INTENT(OUT) :: ptrad ! radiative temperature (K)
135 REAL, DIMENSION(KI,KSW),INTENT(OUT):: pdir_alb! direct albedo for each spectral band (-)
136 REAL, DIMENSION(KI,KSW),INTENT(OUT):: psca_alb! diffuse albedo for each spectral band (-)
137 REAL, DIMENSION(KI), INTENT(OUT) :: pemis ! emissivity (-)
138 !
139 REAL, DIMENSION(KI), INTENT(OUT) :: ptsurf ! surface effective temperature (K)
140 REAL, DIMENSION(KI), INTENT(OUT) :: pz0 ! roughness length for momentum (m)
141 REAL, DIMENSION(KI), INTENT(OUT) :: pz0h ! roughness length for heat (m)
142 REAL, DIMENSION(KI), INTENT(OUT) :: pqsurf ! specific humidity at surface (kg/kg)
143 !
144 REAL, DIMENSION(KI), INTENT(IN) :: ppew_a_coef! implicit coefficients
145 REAL, DIMENSION(KI), INTENT(IN) :: ppew_b_coef! needed if HCOUPLING='I'
146 REAL, DIMENSION(KI), INTENT(IN) :: ppet_a_coef
147 REAL, DIMENSION(KI), INTENT(IN) :: ppeq_a_coef
148 REAL, DIMENSION(KI), INTENT(IN) :: ppet_b_coef
149 REAL, DIMENSION(KI), INTENT(IN) :: ppeq_b_coef
150  CHARACTER(LEN=2), INTENT(IN) :: htest ! must be equal to 'OK'
151 
152 !
153 !* 0.2 declarations of local variables
154 !
155 !
156 REAL, DIMENSION(KI,IM%I%NGROUND_LAYER,IM%I%NPATCH) :: ztg ! soil temperature
157 REAL, DIMENSION(KI,IM%I%NGROUND_LAYER,IM%I%NPATCH) :: zwg ! soil water content
158 REAL, DIMENSION(KI,IM%I%NGROUND_LAYER,IM%I%NPATCH) :: zwgi ! soil ice content
159 REAL, DIMENSION(KI,IM%I%NPATCH) :: zwr ! interception reservoir
160 REAL, DIMENSION(KI,IM%I%NPATCH) :: zresa ! aerodynamical resistance
161 REAL, DIMENSION(KI,IM%I%TSNOW%NLAYER,IM%I%NPATCH) :: zwsnow! snow reservoir
162 REAL, DIMENSION(KI,IM%I%TSNOW%NLAYER,IM%I%NPATCH) :: zrhosn! snow density
163 REAL, DIMENSION(KI,IM%I%TSNOW%NLAYER,IM%I%NPATCH) :: zheasn! snow heat content
164 REAL, DIMENSION(KI,IM%I%NPATCH) :: zalbsn! snow albedo
165 REAL, DIMENSION(KI,IM%I%NPATCH) :: zemisn! snow emissivity
166 !
167 REAL, DIMENSION(KI) :: zpew_a_coef ! implicit coefficients
168 REAL, DIMENSION(KI) :: zpew_b_coef ! needed if HCOUPLING='I'
169 REAL, DIMENSION(KI) :: zpet_a_coef
170 REAL, DIMENSION(KI) :: zpeq_a_coef
171 REAL, DIMENSION(KI) :: zpet_b_coef
172 REAL, DIMENSION(KI) :: zpeq_b_coef
173 REAL(KIND=JPRB) :: zhook_handle
174 !-------------------------------------------------------------------------------------
175 !
176 IF (lhook) CALL dr_hook('COUPLING_TSZ0_N',0,zhook_handle)
177 !
178 !* 1. Specified evolution of ISBA prognostic variables
179 ! ------------------------------------------------
180 !
181  CALL tsz0(dtz, &
182  ptime, ptstep, im%I%XWFC, im%I%XTG, im%I%XWG)
183 !
184 !
185 !* 2. Saves the prognostic variables
186 ! ------------------------------
187 !
188 ztg(:,:,:) = im%I%XTG (:,:,:)
189 zwg(:,:,:) = im%I%XWG (:,:,:)
190 zwgi(:,:,:) = im%I%XWGI (:,:,:)
191 zwr(:,:) = im%I%XWR (:,:)
192 zresa(:,:) = im%I%XRESA (:,:)
193 zwsnow(:,:,:)= im%I%TSNOW%WSNOW(:,:,:)
194 zrhosn(:,:,:)= im%I%TSNOW%RHO (:,:,:)
195 zalbsn(:,:) = im%I%TSNOW%ALB (:,:)
196 IF (im%I%TSNOW%SCHEME=='3-L' .OR. im%I%TSNOW%SCHEME=='CRO') THEN
197  zheasn(:,:,:)= im%I%TSNOW%HEAT (:,:,:)
198  zemisn(:,:) = im%I%TSNOW%EMIS (:,:)
199 END IF
200 !
201 !
202 !* 3. Call to surface scheme
203 ! ----------------------
204 !
205  CALL coupling_isba_orography_n(dtco, ug, u, uss, im, dtgd, dtgr, tgro, dst, slt, &
206  hprogram, 'E', &
207  0.001, kyear, kmonth, kday, ptime, &
208  ki, ksv, ksw, &
209  ptsun, pzenith, pzenith2, pazim, &
210  pzref, puref, pzs, pu, pv, pqa, pta, prhoa, psv, pco2, hsv, &
211  prain, psnow, plw, pdir_sw, psca_sw, psw_bands, pps, ppa, &
212  psftq, psfth, psfts, psfco2, psfu, psfv, &
213  ptrad, pdir_alb, psca_alb, pemis, ptsurf, pz0, pz0h, pqsurf, &
214  ppew_a_coef, ppew_b_coef, &
215  ppet_a_coef, ppeq_a_coef, ppet_b_coef, ppeq_b_coef, &
216  'OK' )
217 !
218 !
219 !* 4. Removes temporal evolution of ISBA variables
220 ! --------------------------------------------
221 !
222 !
223 im%I%XTG (:,:,:) = ztg
224 im%I%XWG (:,:,:) = zwg
225 im%I%XWGI (:,:,:) = zwgi
226 im%I%XWR (:,:) = zwr
227 im%I%XRESA(:,:) = zresa
228 im%I%TSNOW%WSNOW(:,:,:) = zwsnow
229 im%I%TSNOW%RHO (:,:,:) = zrhosn
230 im%I%TSNOW%ALB (:,:) = zalbsn
231 IF (im%I%TSNOW%SCHEME=='3-L' .OR. im%I%TSNOW%SCHEME=='CRO') THEN
232  im%I%TSNOW%HEAT (:,:,:) = zheasn
233  im%I%TSNOW%EMIS (:,:) = zemisn
234 END IF
235 !
236 IF (lhook) CALL dr_hook('COUPLING_TSZ0_N',1,zhook_handle)
237 !
238 !-------------------------------------------------------------------------------------
239 !
240 END SUBROUTINE coupling_tsz0_n
subroutine coupling_tsz0_n(DTCO, UG, U, USS, IM, DTZ, DTGD, DTGR, TGRO, DST, SLT, HPROGRAM, HCOUPLING, PTSTEP, KYEAR, KMONTH, KDAY, PTIME, KI, KSV, KSW, PTSUN, PZENITH, PZENITH2, PAZIM, PZREF, PUREF, PZS, PU, PV, PQA, PTA, PRHOA, PSV, PCO2, HSV, PRAIN, PSNOW, PLW, PDIR_SW, PSCA_SW, PSW_BANDS, PPS, PPA, PSFTQ, PSFTH, PSFTS, PSFCO2, PSFU, PSFV, PTRAD, PDIR_ALB, PSCA_ALB, PEMIS, PTSURF, PZ0, PZ0H, PQSURF, PPEW_A_COEF, PPEW_B_COEF, PPET_A_COEF, PPEQ_A_COEF, PPET_B_COEF, PPEQ_B_COEF, HTEST)
subroutine coupling_isba_orography_n(DTCO, UG, U, USS, IM, DTGD, DTGR, TGRO, DST, SLT, HPROGRAM, HCOUPLING, PTSTEP, KYEAR, KMONTH, KDAY, PTIME, KI, KSV, KSW, PTSUN, PZENITH, PZENITH2, PAZIM, PZREF, PUREF, PZS, PU, PV, PQA, PTA, PRHOA, PSV, PCO2, HSV, PRAIN, PSNOW, PLW, PDIR_SW, PSCA_SW, PSW_BANDS, PPS, PPA, PSFTQ, PSFTH, PSFTS, PSFCO2, PSFU, PSFV, PTRAD, PDIR_ALB, PSCA_ALB, PEMIS, PTSURF, PZ0, PZ0H, PQSURF, PPEW_A_COEF, PPEW_B_COEF, PPET_A_COEF, PPEQ_A_COEF, PPET_B_COEF, PPEQ_B_COEF, HTEST)
subroutine tsz0(DTZ, PTIME, PTSTEP, PWFC, PTG, PWG)
Definition: tsz0.F90:6