SURFEX v8.1
General documentation of Surfex
diag_inline_tebn.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 diag_inline_teb_n (DGO, D, SB, T, &
7  OCANOPY, PTA, PTS, PQA, PPA, PPS, PRHOA, &
8  PZONA, PMERA, PWIND, PHT, PHW, &
9  PCD, PCDN, PRI, PCH, PZ0, &
10  PTRAD, PEMIS, PDIR_ALB, PSCA_ALB, &
11  PLW, PDIR_SW, PSCA_SW, &
12  PSFTH, PSFTQ, PSFZON, PSFMER, PSFCO2, &
13  PRN, PH, PLE, PGFLUX )
14 ! ###############################################################################!
15 !!**** *DIAG_INLINE_TEB_n * - Computes diagnostics during TEB time-step
16 !!
17 !! PURPOSE
18 !! -------
19 !
20 !!** METHOD
21 !! ------
22 !!
23 !! REFERENCE
24 !! ---------
25 !!
26 !!
27 !! AUTHOR
28 !! ------
29 !! V. Masson
30 !!
31 !! MODIFICATIONS
32 !! -------------
33 !! Original 01/2004
34 !! S. Riette 06/2009 CLS_WIND has one more argument (height of diagnostic)
35 !! S. Riette 01/2010 Use of interpol_sbl to compute 10m wind diagnostic
36 ! B. decharme 04/2013 : Add EVAP and SUBL diag
37 !!------------------------------------------------------------------
38 !
39 
40 !
41 !
42 !
44 USE modd_canopy_n, ONLY : canopy_t
45 USE modd_teb_n, ONLY : teb_t
46 !
47 USE modd_surf_par, ONLY : xundef
48 !
49 USE modi_cls_wind
50 USE modi_diag_surf_budget_teb
51 USE modi_interpol_sbl
52 !
53 USE mode_thermos
55 !
56 USE yomhook ,ONLY : lhook, dr_hook
57 USE parkind1 ,ONLY : jprb
58 !
59 IMPLICIT NONE
60 !
61 !* 0.1 declarations of arguments
62 !
63 !
64 TYPE(diag_options_t), INTENT(INOUT) :: DGO
65 TYPE(diag_t), INTENT(INOUT) :: D
66 TYPE(canopy_t), INTENT(INOUT) :: SB
67 TYPE(teb_t), INTENT(INOUT) :: T
68 !
69 LOGICAL, INTENT(IN) :: OCANOPY ! Flag for canopy
70 REAL, DIMENSION(:), INTENT(IN) :: PTA ! atmospheric temperature
71 REAL, DIMENSION(:), INTENT(IN) :: PTS ! surface temperature
72 REAL, DIMENSION(:), INTENT(IN) :: PQA ! atmospheric specific humidity
73 REAL, DIMENSION(:), INTENT(IN) :: PPA ! atmospheric level pressure
74 REAL, DIMENSION(:), INTENT(IN) :: PPS ! surface pressure
75 REAL, DIMENSION(:), INTENT(IN) :: PRHOA ! air density
76 REAL, DIMENSION(:), INTENT(IN) :: PZONA ! zonal wind
77 REAL, DIMENSION(:), INTENT(IN) :: PMERA ! meridian wind
78 REAL, DIMENSION(:), INTENT(IN) :: PWIND ! wind
79 REAL, DIMENSION(:), INTENT(IN) :: PHT ! atmospheric level height
80 REAL, DIMENSION(:), INTENT(IN) :: PHW ! atmospheric level height for wind
81 REAL, DIMENSION(:), INTENT(IN) :: PCD ! drag coefficient for momentum
82 REAL, DIMENSION(:), INTENT(IN) :: PCDN ! neutral drag coefficient
83 REAL, DIMENSION(:), INTENT(IN) :: PSFZON ! zonal friction
84 REAL, DIMENSION(:), INTENT(IN) :: PSFMER ! meridian friction
85 REAL, DIMENSION(:), INTENT(IN) :: PSFCO2 ! CO2 flux (m/s*kg_CO2/kg_air)
86 REAL, DIMENSION(:), INTENT(IN) :: PSFTH ! heat flux (W/m2)
87 REAL, DIMENSION(:), INTENT(IN) :: PSFTQ ! water flux (kg/m2/s)
88 REAL, DIMENSION(:), INTENT(IN) :: PRI ! Richardson number
89 REAL, DIMENSION(:), INTENT(IN) :: PCH ! drag coefficient for heat
90 REAL, DIMENSION(:), INTENT(IN) :: PZ0 ! roughness length for momentum
91 REAL, DIMENSION(:), INTENT(IN) :: PRN ! net radiation
92 REAL, DIMENSION(:), INTENT(IN) :: PH ! sensible heat flux
93 REAL, DIMENSION(:), INTENT(IN) :: PLE ! latent heat flux
94 REAL, DIMENSION(:), INTENT(IN) :: PGFLUX ! storage flux
95 REAL, DIMENSION(:,:),INTENT(IN) :: PDIR_SW ! direct solar radiation (on horizontal surf.)
96 ! ! (W/m2)
97 REAL, DIMENSION(:,:),INTENT(IN) :: PSCA_SW ! diffuse solar radiation (on horizontal surf.)
98 ! ! (W/m2)
99 REAL, DIMENSION(:), INTENT(IN) :: PLW ! longwave radiation (on horizontal surf.)
100 REAL, DIMENSION(:), INTENT(IN) :: PTRAD ! radiative temperature (K)
101 REAL, DIMENSION(:,:),INTENT(IN) :: PDIR_ALB ! direct albedo for each spectral band (-)
102 REAL, DIMENSION(:,:),INTENT(IN) :: PSCA_ALB ! diffuse albedo for each spectral band (-)
103 REAL, DIMENSION(:), INTENT(IN) :: PEMIS ! emissivity (-)
104 !
105 !* 0.2 declarations of local variables
106 !
107 REAL :: ZZ0_O_Z0H
108 REAL, DIMENSION(SIZE(PTA)) :: ZH
109 REAL, DIMENSION(SIZE(PTA)) :: ZU10
110 REAL, DIMENSION(SIZE(PTA)) :: ZWIND10M_MAX
111 REAL, DIMENSION(SIZE(PTA)) :: ZT2M_MIN
112 REAL, DIMENSION(SIZE(PTA)) :: ZT2M_MAX
113 REAL, DIMENSION(SIZE(PTA)) :: ZHU2M_MIN
114 REAL, DIMENSION(SIZE(PTA)) :: ZHU2M_MAX
115 INTEGER :: JJ ! loop counter
116 
117 REAL(KIND=JPRB) :: ZHOOK_HANDLE
118 !-------------------------------------------------------------------------------------
119 !
120 IF (lhook) CALL dr_hook('DIAG_INLINE_TEB_N',0,zhook_handle)
121 !
122 ! * Mean surface temperature need to couple with AGCM
123 !
124 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
125 !Here it is the radiative temperature that is wrong !
126 !It should be the arithmetic mean of the surface temperature
127 !of each independant energy budget, if there is. See ISBA for more detail.
128 !
129 d%XTS(:) = pts(:)
130 !
131 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
132 !
133 zz0_o_z0h = 200.
134 !
135 !* 2m and 10m variables interpolated from canopy if used
136 !
137 IF (ocanopy) THEN
138  zt2m_min(:) = xundef
139  zt2m_max(:) = xundef
140  zhu2m_min(:) = xundef
141  zhu2m_max(:) = xundef
142  zwind10m_max(:) = xundef
143  IF (dgo%N2M>0) CALL init_2m_10m( sb, d, pzona, pmera, pwind, prhoa )
144 ELSE
145 !* 2m and 10m variables using CLS laws
146  IF (dgo%N2M==2) THEN
147  zh(:)=10.
148  CALL cls_wind(pzona, pmera, phw, pcd, pcdn, pri, zh, d%XZON10M, d%XMER10M )
149  d%XT2M = t%XT_CANYON
150  d%XQ2M = t%XQ_CANYON
151  d%XRI = pri
152  d%XHU2M = min(t%XQ_CANYON /qsat(t%XT_CANYON,ppa),1.)
153  END IF
154  !
155  IF (dgo%N2M>=1) THEN
156  !
157  d%XT2M_MIN(:) = min(d%XT2M_MIN(:),d%XT2M(:))
158  d%XT2M_MAX(:) = max(d%XT2M_MAX(:),d%XT2M(:))
159  !
160  d%XHU2M_MIN(:) = min(d%XHU2M_MIN(:),d%XHU2M(:))
161  d%XHU2M_MAX(:) = max(d%XHU2M_MAX(:),d%XHU2M(:))
162  !
163  d%XWIND10M (:) = sqrt(d%XZON10M**2+d%XMER10M**2)
164  d%XWIND10M_MAX(:) = max(d%XWIND10M_MAX(:),d%XWIND10M(:))
165  !
166  END IF
167 ENDIF
168 !
169 IF (dgo%LSURF_BUDGET) THEN
170  !
171  CALL diag_surf_budget_teb(d, pdir_sw, psca_sw, pdir_alb, psca_alb, plw, pemis, ptrad )
172  !
173  d%XRN = prn
174  d%XH = ph
175  d%XLE = ple
176  d%XGFLUX = pgflux
177  d%XFMU = psfzon
178  d%XFMV = psfmer
179  d%XSFCO2 = psfco2
180  !
181 END IF
182 !
183 IF (dgo%LCOEF) THEN
184  d%XCD = pcd
185  d%XCH = pch
186  d%XCE = pch
187  d%XZ0 = pz0
188  d%XZ0H = pz0 / zz0_o_z0h
189 END IF
190 !
191 IF (dgo%LSURF_VARS) THEN
192  d%XQS = t%XQ_CANYON
193 END IF
194 IF (lhook) CALL dr_hook('DIAG_INLINE_TEB_N',1,zhook_handle)
195 !-------------------------------------------------------------------------------------
196 !
197 END SUBROUTINE diag_inline_teb_n
subroutine cls_wind(PZONA, PMERA, PHW, PCD, PCDN, PRI, PHV, PZON10M, PMER10M)
Definition: cls_wind.F90:7
subroutine init_2m_10m(SB, D, PU, PV, PWIND, PRHOA)
real, parameter xundef
integer, parameter jprb
Definition: parkind1.F90:32
subroutine diag_inline_teb_n(DGO, D, SB, T, OCANOPY, PTA, PTS, PQA, PPA, PPS, PRHOA, PZONA, PMERA, PWIND, PHT, PHW, PCD, PCDN, PRI, PCH, PZ0, PTRAD, PEMIS, PDIR_ALB, PSCA_ALB, PLW, PDIR_SW, PSCA_SW, PSFTH, PSFTQ, PSFZON, PSFMER, PSFCO2, PRN, PH, PLE, PGFLUX)
logical lhook
Definition: yomhook.F90:15
subroutine diag_surf_budget_teb(D, PDIR_SW, PSCA_SW, PDIR_ALB, PSCA_ALB, PLW, PEMIS, PTRAD)