SURFEX v8.1
General documentation of Surfex
coupling_flaken.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_flake_n (CHF, DGO, D, DC, DMF, F, DST, SLT, &
7  HPROGRAM, HCOUPLING, PTSTEP, KYEAR, KMONTH, KDAY, PTIME, &
8  KI, KSV, KSW, PTSUN, PZENITH, PZENITH2, PAZIM, PZREF, &
9  PUREF, PU, PV, PQA, PTA, PRHOA, PSV, PCO2, HSV, PRAIN, &
10  PSNOW, PLW, PDIR_SW, PSCA_SW, PSW_BANDS, PPS, PPA, PSFTQ, &
11  PSFTH, PSFTS, PSFCO2, PSFU, PSFV, PTSRAD, PDIR_ALB, &
12  PSCA_ALB, PEMIS, PTSURF, PZ0, PZ0H, PQSURF, PPEW_A_COEF, &
13  PPEW_B_COEF, PPET_A_COEF, PPEQ_A_COEF, PPET_B_COEF, &
14  PPEQ_B_COEF, HTEST )
15 ! ###############################################################################
16 
17 !
18 !!**** *COUPLING_FLAKE_n * - Driver for FLAKE scheme for lakes
19 !!
20 !! PURPOSE
21 !! -------
22 !
23 !!** METHOD
24 !! ------
25 !!
26 !! REFERENCE
27 !! ---------
28 !!
29 !!
30 !! AUTHOR
31 !! ------
32 !! V. Masson
33 !!
34 !! MODIFICATIONS
35 !! -------------
36 !! Original 01/2004
37 !! V. Masson 05/2009 Implicitation of momentum fluxes
38 !! B. Decharme 01/2010 Add XTT in water_flux
39 !! V. Masson 11/2011 Ch limited to 1.E-7 in all cases and Cd coming from
40 !! Flake_interface routine if computed by flake
41 !! B. Decharme 09/2012 New wind implicitation
42 !! P. Le Moigne 10/2012 ECUME option for FLake. Remove wind threshold
43 !! P. Le Moigne 04/2013 Remove ECUME option for FLake
44 !! P. Le Moigne 04/2013 Chemistry, UPDATE_RAD_FLAKE
45 !! B. Decharme 04/2013 New diag, new coupling variables
46 !! P. Le Moigne 10/2014 Threshold on Cd when fluxes computed by FLake
47 !!------------------------------------------------------------------------------
48 !
49 !
50 USE modd_ch_flake_n, ONLY : ch_flake_t
53 USE modd_flake_n, ONLY : flake_t
54 !
55 USE modd_dst_n, ONLY : dst_t
56 USE modd_slt_n, ONLY : slt_t
57 !
59 !
60 USE modd_csts, ONLY : xrd, xcpd, xp00, xlvtt, xlstt, xkarman, xtt
61 USE modd_surf_par, ONLY : xundef
62 !
63 !
64 !
65 USE modd_slt_surf
66 USE modd_dst_surf
67 !
69 USE mode_thermos
70 !
71 USE modi_water_flux
72 USE modi_add_forecast_to_date_surf
73 USE modi_diag_inline_flake_n
74 USE modi_diag_misc_flake_n
75 USE modi_ch_aer_dep
76 USE modi_ch_dep_water
77 USE modi_dslt_dep
78 USE modi_flake_albedo
79 USE modi_update_rad_flake
80 USE modi_abor1_sfx
81 USE modi_flake_interface
82 !
83 USE yomhook ,ONLY : lhook, dr_hook
84 USE parkind1 ,ONLY : jprb
85 !
86 !
87 IMPLICIT NONE
88 !
89 !* 0.1 declarations of arguments
90 !
91 !
92 TYPE(ch_flake_t), INTENT(INOUT) :: CHF
93 TYPE(diag_options_t), INTENT(INOUT) :: DGO
94 TYPE(diag_t), INTENT(INOUT) :: D
95 TYPE(diag_t), INTENT(INOUT) :: DC
96 TYPE(diag_misc_flake_t), INTENT(INOUT) :: DMF
97 TYPE(flake_t), INTENT(INOUT) :: F
98 !
99 TYPE(dst_t), INTENT(INOUT) :: DST
100 TYPE(slt_t), INTENT(INOUT) :: SLT
101 !
102  CHARACTER(LEN=6), INTENT(IN) :: HPROGRAM ! program calling surf. schemes
103  CHARACTER(LEN=1), INTENT(IN) :: HCOUPLING ! type of coupling
104  ! 'E' : explicit
105  ! 'I' : implicit
106 INTEGER, INTENT(IN) :: KYEAR ! current year (UTC)
107 INTEGER, INTENT(IN) :: KMONTH ! current month (UTC)
108 INTEGER, INTENT(IN) :: KDAY ! current day (UTC)
109 REAL, INTENT(IN) :: PTIME ! current time since midnight (UTC, s)
110 INTEGER, INTENT(IN) :: KI ! number of points
111 INTEGER, INTENT(IN) :: KSV ! number of scalars
112 INTEGER, INTENT(IN) :: KSW ! number of short-wave spectral bands
113 REAL, DIMENSION(KI), INTENT(IN) :: PTSUN ! solar time (s from midnight)
114 REAL, INTENT(IN) :: PTSTEP ! atmospheric time-step (s)
115 REAL, DIMENSION(KI), INTENT(IN) :: PZREF ! height of T,q forcing (m)
116 REAL, DIMENSION(KI), INTENT(IN) :: PUREF ! height of wind forcing (m)
117 !
118 REAL, DIMENSION(KI), INTENT(IN) :: PTA ! air temperature forcing (K)
119 REAL, DIMENSION(KI), INTENT(IN) :: PQA ! air humidity forcing (kg/m3)
120 REAL, DIMENSION(KI), INTENT(IN) :: PRHOA ! air density (kg/m3)
121 REAL, DIMENSION(KI,KSV),INTENT(IN) :: PSV ! scalar variables
122 ! ! chemistry: first char. in HSV: '#' (molecule/m3)
123 ! !
124  CHARACTER(LEN=6), DIMENSION(KSV),INTENT(IN):: HSV ! name of all scalar variables
125 REAL, DIMENSION(KI), INTENT(IN) :: PU ! zonal wind (m/s)
126 REAL, DIMENSION(KI), INTENT(IN) :: PV ! meridian wind (m/s)
127 REAL, DIMENSION(KI,KSW),INTENT(IN) :: PDIR_SW ! direct solar radiation (on horizontal surf.)
128 ! ! (W/m2)
129 REAL, DIMENSION(KI,KSW),INTENT(IN) :: PSCA_SW ! diffuse solar radiation (on horizontal surf.)
130 ! ! (W/m2)
131 REAL, DIMENSION(KSW),INTENT(IN) :: PSW_BANDS ! mean wavelength of each shortwave band (m)
132 REAL, DIMENSION(KI), INTENT(IN) :: PZENITH ! zenithal angle at t (radian from the vertical)
133 REAL, DIMENSION(KI), INTENT(IN) :: PZENITH2 ! zenithal angle at t+1 (radian from the vertical)
134 REAL, DIMENSION(KI), INTENT(IN) :: PAZIM ! azimuthal angle (radian from North, clockwise)
135 REAL, DIMENSION(KI), INTENT(IN) :: PLW ! longwave radiation (on horizontal surf.)
136 ! ! (W/m2)
137 REAL, DIMENSION(KI), INTENT(IN) :: PPS ! pressure at atmospheric model surface (Pa)
138 REAL, DIMENSION(KI), INTENT(IN) :: PPA ! pressure at forcing level (Pa)
139 REAL, DIMENSION(KI), INTENT(IN) :: PCO2 ! CO2 concentration in the air (kg/m3)
140 REAL, DIMENSION(KI), INTENT(IN) :: PSNOW ! snow precipitation (kg/m2/s)
141 REAL, DIMENSION(KI), INTENT(IN) :: PRAIN ! liquid precipitation (kg/m2/s)
142 !
143 !
144 REAL, DIMENSION(KI), INTENT(OUT) :: PSFTH ! flux of heat (W/m2)
145 REAL, DIMENSION(KI), INTENT(OUT) :: PSFTQ ! flux of water vapor (kg/m2/s)
146 REAL, DIMENSION(KI), INTENT(OUT) :: PSFU ! zonal momentum flux (Pa)
147 REAL, DIMENSION(KI), INTENT(OUT) :: PSFV ! meridian momentum flux (Pa)
148 REAL, DIMENSION(KI), INTENT(OUT) :: PSFCO2 ! flux of CO2 (m/s*kg_CO2/kg_air)
149 REAL, DIMENSION(KI,KSV),INTENT(OUT):: PSFTS ! flux of scalar var. (kg/m2/s)
150 !
151 REAL, DIMENSION(KI), INTENT(OUT) :: PTSRAD ! radiative temperature (K)
152 REAL, DIMENSION(KI,KSW),INTENT(OUT):: PDIR_ALB! direct albedo for each spectral band (-)
153 REAL, DIMENSION(KI,KSW),INTENT(OUT):: PSCA_ALB! diffuse albedo for each spectral band (-)
154 REAL, DIMENSION(KI), INTENT(OUT) :: PEMIS ! emissivity (-)
155 !
156 REAL, DIMENSION(KI), INTENT(OUT) :: PTSURF ! surface effective temperature (K)
157 REAL, DIMENSION(KI), INTENT(OUT) :: PZ0 ! roughness length for momentum (m)
158 REAL, DIMENSION(KI), INTENT(OUT) :: PZ0H ! roughness length for heat (m)
159 REAL, DIMENSION(KI), INTENT(OUT) :: PQSURF ! specific humidity at surface (kg/kg)
160 !
161 REAL, DIMENSION(KI), INTENT(IN) :: PPEW_A_COEF! implicit coefficients (m2s/kg)
162 REAL, DIMENSION(KI), INTENT(IN) :: PPEW_B_COEF! needed if HCOUPLING='I' (m/s)
163 REAL, DIMENSION(KI), INTENT(IN) :: PPET_A_COEF
164 REAL, DIMENSION(KI), INTENT(IN) :: PPEQ_A_COEF
165 REAL, DIMENSION(KI), INTENT(IN) :: PPET_B_COEF
166 REAL, DIMENSION(KI), INTENT(IN) :: PPEQ_B_COEF
167  CHARACTER(LEN=2), INTENT(IN) :: HTEST ! must be equal to 'OK'
168 !
169 !* 0.2 declarations of local variables
170 !
171 REAL, DIMENSION(KI,KSW) :: ZDIR_ALB ! Direct albedo at time t ,
172 REAL, DIMENSION(KI,KSW) :: ZSCA_ALB ! Diffuse albedo at time t
173 !
174 REAL, DIMENSION(KI) :: ZALB ! surface albedo
175 REAL, DIMENSION(KI) :: ZSWE ! snow water equivalent (kg.m-2)
176 !
177 REAL, DIMENSION(KI) :: ZEXNA ! Exner function at forcing level
178 REAL, DIMENSION(KI) :: ZEXNS ! Exner function at surface level
179 !
180 REAL, DIMENSION(KI) :: ZWIND ! Wind
181 REAL, DIMENSION(KI) :: ZGLOBAL_SW ! Solar radiation flux at the surface (W/m2)
182 REAL, DIMENSION(KI) :: ZQA ! Air specific humidity (kg/kg)
183 !
184 REAL, DIMENSION(KI) :: ZUSTAR ! friction velocity (m/s)
185 REAL, DIMENSION(KI) :: ZUSTAR2! square of friction velocity (m2/s2)
186 REAL, DIMENSION(KI) :: ZSFM ! flux of momentum (Pa)
187 !
188 REAL, DIMENSION(KI) :: ZRESA_WATER ! aerodynamical resistance
189 !
190 !salgado only for inline diagnostics - not used for the moment
191 ! flake don't have it
192 REAL, DIMENSION(KI) :: ZCD ! Drag coefficient
193 REAL, DIMENSION(KI) :: ZCDN ! Neutral Drag coefficient
194 REAL, DIMENSION(KI) :: ZCH ! Heat transfer coefficient
195 REAL, DIMENSION(KI) :: ZCE ! Heat transfer coefficient
196 REAL, DIMENSION(KI) :: ZRI ! Richardson number
197 REAL, DIMENSION(KI) :: ZHU ! Near surface relative humidity
198 REAL, DIMENSION(KI) :: ZZ0H ! heat roughness length
199 REAL, DIMENSION(KI) :: ZQSAT ! humidity at saturation
200 REAL, DIMENSION(KI) :: ZTSTEP ! time-step
201 REAL, DIMENSION(KI) :: ZLE ! total latent heat flux (W/m2)
202 REAL, DIMENSION(KI) :: ZLEI ! sublimation heat flux (W/m2)
203 REAL, DIMENSION(KI) :: ZSUBL ! sublimation (kg/m2/s)
204 REAL, DIMENSION(KI) :: ZLWUP ! upward longwave flux at t
205 REAL, DIMENSION(KI) :: ZTRAD ! Radiative temperature at time t
206 REAL, DIMENSION(KI) :: ZWORK ! Work array
207 !
208 REAL :: ZCONVERTFACM0_SLT, ZCONVERTFACM0_DST
209 REAL :: ZCONVERTFACM3_SLT, ZCONVERTFACM3_DST
210 REAL :: ZCONVERTFACM6_SLT, ZCONVERTFACM6_DST
211 !
212 INTEGER :: ISWB ! number of shortwave spectral bands
213 INTEGER :: JSWB ! loop counter on shortwave spectral bands
214 !
215 INTEGER :: ILUOUT ! output logical unit
216 !
217 LOGICAL :: GPWG = .false.
218 LOGICAL :: GHANDLE_SIC = .false. ! no sea-ice model
219 !
220 REAL :: ZEPS = 1.e-7
221 !
222 INTEGER :: IBEG, IEND
223 !
224 REAL(KIND=JPRB) :: ZHOOK_HANDLE
225 !-------------------------------------------------------------------------------------
226 ! Preliminaries:
227 !-------------------------------------------------------------------------------------
228 IF (lhook) CALL dr_hook('COUPLING_FLAKE_N',0,zhook_handle)
229 IF (htest/='OK') THEN
230  CALL abor1_sfx('COUPLING_FLAKEN: FATAL ERROR DURING ARGUMENT TRANSFER')
231 END IF
232 !-------------------------------------------------------------------------------------
233 ! Variables needed by flake:
234 !-------------------------------------------------------------------------------------
235 !
236 zcd(:) = xundef
237 zcdn(:) = xundef
238 zch(:) = xundef
239 zri(:) = xundef
240 zresa_water(:) = xundef
241 zz0h(:) = xundef
242 zqsat(:) = xundef
243 zwork(:) = xundef
244 zalb(:) = xundef
245 zglobal_sw(:) = xundef
246 zswe(:) = xundef
247 !
248 zdir_alb(:,:) = xundef
249 zsca_alb(:,:) = xundef
250 zle(:) = xundef
251 zlei(:) = xundef
252 zsubl(:) = xundef
253 zlwup(:) = xundef
254 ztrad(:) = xundef
255 !
256 ztstep(:) = ptstep
257 !
258 zexns(:) = (pps(:)/xp00)**(xrd/xcpd)
259 zexna(:) = (ppa(:)/xp00)**(xrd/xcpd)
260 !
261 !
262 zwind(:) = sqrt(pu(:)**2+pv(:)**2)
263 !
264 zqa(:) = pqa(:)/prhoa(:)
265 !
266 psfts(:,:) = 0.
267 !
268 zhu(:) = 1.
269 !
270 ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
271 ! Time evolution
272 ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
273 !
274 f%TTIME%TIME = f%TTIME%TIME + ptstep
275  CALL add_forecast_to_date_surf(f%TTIME%TDATE%YEAR,f%TTIME%TDATE%MONTH,f%TTIME%TDATE%DAY,f%TTIME%TIME)
276 !
277 !----------------------------------------
278 !
279 psfu(:) = 0.
280 psfv(:) = 0.
281 zsfm(:) = 0.
282 !
283 IF (f%CFLK_FLUX=='DEF ') THEN
284 !
285  CALL water_flux(f%XZ0, pta, zexna, prhoa, f%XTS, zexns, pqa, &
286  prain, psnow, xtt, zwind, pzref, puref, &
287  pps, ghandle_sic, zqsat, psfth, psftq, zustar,&
288  zcd, zcdn, zch, zri, zresa_water, zz0h )
289 !
290  WHERE (f%XTS(:)<xtt)
291  zle(:) = psftq(:) * xlstt
292  zlei(:) = psftq(:) * xlstt
293  zsubl(:) = psftq(:)
294  ELSEWHERE
295  zle(:) = psftq(:) * xlvtt
296  zlei(:) = 0.0
297  zsubl(:) = 0.0
298  END WHERE
299 !
300  IF(cimplicit_wind=='OLD')THEN
301 ! old implicitation (m2/s2)
302  zustar2(:) = (zcd(:)*zwind(:)*ppew_b_coef(:))/ &
303  (1.0-prhoa(:)*zcd(:)*zwind(:)*ppew_a_coef(:))
304  ELSE
305 ! new implicitation (m2/s2)
306  zustar2(:) = (zcd(:)*zwind(:)*(2.*ppew_b_coef(:)-zwind(:))) /&
307  (1.0-2.0*prhoa(:)*zcd(:)*zwind(:)*ppew_a_coef(:))
308 !
309  zwork(:) = prhoa(:)*ppew_a_coef(:)*zustar2(:) + ppew_b_coef(:)
310  zwork(:) = max(zwork(:),0.)
311 !
312  WHERE(ppew_a_coef(:)/= 0.)
313  zustar2(:) = max( ( zwork(:) - ppew_b_coef(:) ) / (prhoa(:)*ppew_a_coef(:)), 0.)
314  ENDWHERE
315 !
316  ENDIF
317 !
318  WHERE (zwind(:)>0.)
319  zsfm(:) = - prhoa(:) * zustar2(:)
320  psfu(:) = zsfm(:) * pu(:) / zwind(:)
321  psfv(:) = zsfm(:) * pv(:) / zwind(:)
322  END WHERE
323 !
324 ELSE
325  zustar(:) = f%XUSTAR(:)
326  zz0h(:) = f%XZ0 (:)
327 ENDIF
328 !
329 !----------------------------------------
330 !radiative properties at t
331 !----------------------------------------
332 !
333 iswb = SIZE(psw_bands)
334 !
335 DO jswb=1,iswb
336  zdir_alb(:,jswb) = f%XDIR_ALB(:)
337  zsca_alb(:,jswb) = f%XSCA_ALB(:)
338 END DO
339 !
340 ztrad = f%XTS
341 !
342  CALL flake_albedo(pdir_sw,psca_sw,ksw,zdir_alb,zsca_alb,zglobal_sw,zalb)
343 !
344  CALL flake_interface(f, ki, &
345 ! Atmospheric forcing:
346  psnow, zglobal_sw, plw, puref, pzref, zwind, pta, zqa, pps, &
347 ! Constant parameters
348  ztstep, &
349 ! surface albedo
350  zalb, &
351 ! Surface heat, momentum fluxes, and other diags
352  psfth, zle, zsfm, zz0h, zqsat, zri, zustar, &
353  zcd, psftq, zlei, zsubl, zlwup, zswe, &
354 ! Flags
355  ppew_a_coef, ppew_b_coef, prhoa, cimplicit_wind )
356 !
357 !-------------------------------------------------------------------------------------
358 !
359 ! Momentum fluxes
360 !
361 IF (f%CFLK_FLUX=='FLAKE') THEN
362  psfu = 0.
363  psfv = 0.
364  WHERE (zwind(:)>0.)
365  psfu(:) = zsfm(:) * pu(:) / zwind(:)
366  psfv(:) = zsfm(:) * pv(:) / zwind(:)
367  END WHERE
368  !
369  ! ZUSTAR and ZRESA_WATER are not in Flake but are needed to the ch_* routines
370  !
371  zustar(:) = sqrt(abs(zsfm(:))/prhoa(:))
372  zexns(:) = (pps(:)/xp00)**(xrd/xcpd)
373  zexna(:) = (ppa(:)/xp00)**(xrd/xcpd)
374  zresa_water=2.e4
375  WHERE (psfth/=0.)
376  zresa_water(:) = xcpd * prhoa(:) * (f%XTS(:) - pta(:) * zexns(:)/zexna(:)) &
377  / (psfth(:) * zexns(:))
378  END WHERE
379 !
380 ENDIF
381 !
382 f%XUSTAR(:) = zustar(:)
383 !
384 ! CO2 flux
385 !
386 psfco2(:) = 0.0 ! Assumes no CO2 emission over water bodies
387 !
388 !-------------------------------------------------------------------------------------
389 ! Scalar fluxes:
390 !-------------------------------------------------------------------------------------
391 !
392 !
393 !salgado The scalar fluxes are computed as in watflux
394 IF (chf%SVF%NBEQ>0) THEN
395  !
396  IF (chf%CCH_DRY_DEP == "WES89") THEN
397  !
398  ibeg = chf%SVF%NSV_CHSBEG
399  iend = chf%SVF%NSV_CHSEND
400  !
401  CALL ch_dep_water (zresa_water, zustar, pta, ztrad, psv(:,ibeg:iend), &
402  chf%SVF%CSV(ibeg:iend), chf%XDEP(:,1:chf%SVF%NBEQ) )
403 
404  psfts(:,ibeg:iend) = - psv(:,ibeg:iend) * chf%XDEP(:,1:chf%SVF%NBEQ)
405  !
406  IF (chf%SVF%NAEREQ > 0 ) THEN
407  ibeg = chf%SVF%NSV_AERBEG
408  iend = chf%SVF%NSV_AEREND
409  !
410  CALL ch_aer_dep(psv(:,ibeg:iend),psfts(:,ibeg:iend),zustar,zresa_water,pta,prhoa)
411  END IF
412 
413  ELSE
414  ibeg = chf%SVF%NSV_AERBEG
415  iend = chf%SVF%NSV_AEREND
416  !
417  psfts(:,ibeg:iend) =0.
418  IF(ibeg.LT.iend) psfts(:,ibeg:iend) =0.
419  ENDIF
420  !
421 ENDIF
422 
423 IF (chf%SVF%NDSTEQ>0) THEN
424  !
425  ibeg = chf%SVF%NSV_DSTBEG
426  iend = chf%SVF%NSV_DSTEND
427  !
428  CALL dslt_dep(psv(:,ibeg:iend), psfts(:,ibeg:iend), zustar, zresa_water, pta, prhoa, &
429  dst%XEMISSIG_DST, dst%XEMISRADIUS_DST, jpmode_dst, xdensity_dst, &
430  xmolarweight_dst, zconvertfacm0_dst, zconvertfacm6_dst, zconvertfacm3_dst, &
432 
433  CALL massflux2momentflux( &
434  psfts(:,ibeg:iend), & !I/O ![kg/m2/sec] In: flux of only mass, out: flux of moments
435  prhoa, & !I [kg/m3] air density
436  dst%XEMISRADIUS_DST, &!I [um] emitted radius for the modes (max 3)
437  dst%XEMISSIG_DST, &!I [-] emitted sigma for the different modes (max 3)
438  ndstmde, &
439  zconvertfacm0_dst, &
440  zconvertfacm6_dst, &
441  zconvertfacm3_dst, &
443 ENDIF
444 
445 
446 IF (chf%SVF%NSLTEQ>0) THEN
447  !
448  ibeg = chf%SVF%NSV_SLTBEG
449  iend = chf%SVF%NSV_SLTEND
450  !
451  CALL dslt_dep(psv(:,ibeg:iend), psfts(:,ibeg:iend), zustar, zresa_water, pta, prhoa, &
452  slt%XEMISSIG_SLT, slt%XEMISRADIUS_SLT, jpmode_slt, xdensity_slt, &
453  xmolarweight_slt, zconvertfacm0_slt, zconvertfacm6_slt, zconvertfacm3_slt, &
455 
456  CALL massflux2momentflux( &
457  psfts(:,ibeg:iend), & !I/O ![kg/m2/sec] In: flux of only mass, out: flux of moments
458  prhoa, & !I [kg/m3] air density
459  slt%XEMISRADIUS_SLT, &!I [um] emitted radius for the modes (max 3)
460  slt%XEMISSIG_SLT, &!I [-] emitted sigma for the different modes (max 3)
461  nsltmde, &
462  zconvertfacm0_slt, &
463  zconvertfacm6_slt, &
464  zconvertfacm3_slt, &
466 ENDIF
467 
468 !
469 ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
470 ! Inline diagnostics
471 ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
472 !
473 IF (f%CFLK_FLUX=='FLAKE') THEN !compute some variables not present in FLake code
474 !
475  zch = zeps
476 !
477  WHERE (abs((f%XTS(:) - pta(:) * zexns(:)/zexna(:))) > 1.e-2 .AND. zwind(:)/=0.)
478  zch = max(zeps,psfth / (xcpd * prhoa(:) * zwind(:) * (f%XTS(:) - pta(:) * zexns(:)/zexna(:))) * zexns(:))
479  END WHERE
480 !
481  zcdn(:) = (xkarman/log(puref(:)/f%XZ0(:)))**2
482  zcd(:) = max(zeps,zcd(:))
483 !
484 ENDIF
485 !
486  CALL diag_inline_flake_n(dgo, d, dc, f, &
487  ptstep, pta, zqa, ppa, pps, prhoa, pu, &
488  pv, pzref, puref, prain, psnow, &
489  zcd, zcdn, zch, zri, zhu, &
490  zz0h, zqsat, psfth, psftq, psfu, psfv, &
491  pdir_sw, psca_sw, plw, zdir_alb, zsca_alb, &
492  zle, zlei, zsubl, zlwup, zalb, zswe )
493 !
494 !-------------------------------------------------------------------------------------
495 !
496  CALL diag_misc_flake_n(dmf, f)
497 !
498 !-------------------------------------------------------------------------------
499 !Physical properties see by the atmosphere in order to close the energy budget
500 !between surfex and the atmosphere. All variables should be at t+1 but very
501 !difficult to do. Maybe it will be done later. However, Ts can be at time t+1
502 !-------------------------------------------------------------------------------
503 !
504 ptsurf(:) = f%XTS (:)
505 pz0(:) = f%XZ0 (:)
506 pz0h(:) = zz0h(:)
507 pqsurf(:) = zqsat(:)
508 !
509 !-------------------------------------------------------------------------------------
510 !Radiative properties at time t+1 (see by the atmosphere) in order to close
511 !the energy budget between surfex and the atmosphere
512 !-------------------------------------------------------------------------------------
513 !
514  CALL update_rad_flake(f,pzenith2,pdir_alb,psca_alb,pemis,ptsrad )
515 !
516 IF (lhook) CALL dr_hook('COUPLING_FLAKE_N',1,zhook_handle)
517 !
518 !-------------------------------------------------------------------------------------
519 !
520 END SUBROUTINE coupling_flake_n
subroutine diag_misc_flake_n(DMF, F)
subroutine massflux2momentflux(PFLUX, PRHODREF, PEMISRADIUS, PEMISSIG, KMDE, PCONVERTFACM0, PCONVERTFACM6, PCONVERTFACM3, OVARSIG, ORGFIX)
character(len=3) cimplicit_wind
real, parameter xmolarweight_slt
subroutine coupling_flake_n(CHF, DGO, D, DC, DMF, F, DST, SLT, HPROGRAM, HCOUPLING, PTSTEP, KYEAR, KMONTH, KDAY, PTIME, KI, KSV, KSW, PTSUN, PZENITH, PZENITH2, PAZIM, PZREF, PUREF, 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, PTSRAD, 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)
real, save xcpd
Definition: modd_csts.F90:63
real, parameter xmolarweight_dst
logical lvarsig_dst
real, parameter xdensity_dst
subroutine diag_inline_flake_n(DGO, D, DC, F, PTSTEP, PTA, PQA, PPA, PPS, PRHOA, PZONA, PMERA, PHT, PHW, PRAIN, PSNOW, PCD, PCDN, PCH, PRI, PHU, PZ0H, PQSAT, PSFTH, PSFTQ, PSFZON, PSFMER, PDIR_SW, PSCA_SW, PLW, PDIR_ALB, PSCA_ALB, PLE, PLEI, PSUBL, PLWUP, PALB, PSWE)
subroutine ch_aer_dep(PSVT, PFSVT, PUSTAR, PRESA, PTA, PRHODREF)
Definition: ch_aer_dep.F90:8
real, save xlvtt
Definition: modd_csts.F90:70
real, save xlstt
Definition: modd_csts.F90:71
integer jpmode_slt
real, save xkarman
Definition: modd_csts.F90:48
subroutine abor1_sfx(YTEXT)
Definition: abor1_sfx.F90:7
real, parameter xundef
real, save xrd
Definition: modd_csts.F90:62
logical lrgfix_dst
subroutine water_flux(PZ0SEA,
Definition: water_flux.F90:7
integer, parameter jprb
Definition: parkind1.F90:32
logical lvarsig_slt
subroutine update_rad_flake(F, PZENITH, PDIR_ALB_ATMOS, PSCA_ALB_ATMOS, PEMIS_ATMOS, PTRAD)
subroutine flake_albedo(PDIR_SW, PSCA_SW, KSW, PDIR_ALB, PSCA_ALB, PGLOBAL_SW, PALB)
Definition: flake_albedo.F90:9
subroutine dslt_dep(PSVT, PFSVT, PUSTAR, PRESA, PTA, PRHODREF, PEMISSIG, PEMISRADIUS, KPMODE, PDENSITY, PMOLARWEIGHT, PCONVERTFACM0, PCONVERTFACM6, PCONVERTFACM3, OVARSIG, ORGFIX, HVERMOD)
Definition: dslt_dep.F90:10
logical lhook
Definition: yomhook.F90:15
integer jpmode_dst
subroutine add_forecast_to_date_surf(KYEAR, KMONTH, KDAY, PSEC)
character(len=6) cvermod
real, parameter xdensity_slt
subroutine ch_dep_water(PRESA, PUSTAR, PTA, PTRAD, PSV, HSV, PDEP)
Definition: ch_dep_water.F90:7
real, save xtt
Definition: modd_csts.F90:66
logical lrgfix_slt
real, save xp00
Definition: modd_csts.F90:57
subroutine flake_interface(F, KI, dMsnowdt_in, I_atm_in, Q_atm_lw_in, height_u_in, height_tq_in, U_a_in, T_a_in, q_a_in, P_a_in, del_time, albedo, Q_sensible, Q_latent, Q_momentum, z0t, Qsat, Ri, ustar, Cd_a, Q_watvap, Q_latenti, Q_sublim, Q_atm_lw_up, pswe, PPEW_A_COEF, PPEW_B_COEF, rho_a, HIMPLICIT_WIND)