SURFEX v8.1
General documentation of Surfex
modd_diagn.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 MODULE modd_diag_n
7 !######################
8 !
9 !!**** *MODD_DIAG - declaration of diagnostics for ISBA scheme
10 !!
11 !! PURPOSE
12 !! -------
13 !
14 !!
15 !!** IMPLICIT ARGUMENTS
16 !! ------------------
17 !! None
18 !!
19 !! REFERENCE
20 !! ---------
21 !!
22 !! AUTHOR
23 !! ------
24 !! V. Masson *Meteo France*
25 !!
26 !! MODIFICATIONS
27 !! -------------
28 !! Original 01/2004
29 !! Modified 01/2006 : sea flux parameterization.
30 !! Modified 04/2009 : precip for/from restart file.
31 !! Modified 08/2009 : BUDGETC for all tiles
32 !! P. Samuelsson 10/2014 : added min max for XT2M
33 !! Modified 09/2015 : M Lafaysse LSNOWDIMNC
34 !! Modified 06/2016 : M Lafaysse LRESETCUMUL
35 !
36 !* 0. DECLARATIONS
37 ! ------------
38 !
40 !
41 USE yomhook ,ONLY : lhook, dr_hook
42 USE parkind1 ,ONLY : jprb
43 !
44 IMPLICIT NONE
45 !
47 !
48  REAL :: xdiag_tstep ! time step for diagnostics writing
49 !
50  INTEGER :: n2m ! flag for 2 meters (and 10 meters) quantities
51  LOGICAL :: lt2mmw ! flag to perform modified weighting of 2m temperature
52  LOGICAL :: l2m_min_zs ! flag for 2 meters quantities evaluated on
53 ! ! the minimum orographyy of the grid
54  LOGICAL :: lsurf_budget ! flag for surface energy budget
55  LOGICAL :: lrad_budget ! flag for radiative energy budget
56 !
57  LOGICAL :: lcoef ! flag for transfer coefficients
58  LOGICAL :: lsurf_vars ! flag for surface variables
59  LOGICAL :: lfrac ! flag for writing fractions of each four tiles
60  LOGICAL :: ldiag_grid ! flag for mean grid diag
61 !
62  LOGICAL :: lsurf_budgetc ! flag for surface cumulated energy budget
63  LOGICAL :: lreset_budgetc ! flag for surface cumulated energy budget
64  LOGICAL :: lread_budgetc ! flag for surface cumulated energy budget
65  LOGICAL :: lprovar_to_diag ! switch to write (or not) prognostic variable
66  ! and allows puting field in diagnostics
67  LOGICAL :: lsnowdimnc ! if true create a snow layer dimension in nc files
68  LOGICAL :: lresetcumul ! reset cumulated variables at 0 at each output timestep
69  LOGICAL :: lselect ! switch to control which fields are written
70  ! (only those whose naem appears in in text array)
71 !
72  TYPE(date_time):: time_budgetc
73 !
74  CHARACTER(LEN=12), POINTER, DIMENSION(:) :: cselect ! Name of ouput fields if LSELECT=true
75 !
76  LOGICAL :: lpgd ! flag for writing of PGD files
77  LOGICAL :: lpatch_budget ! flag for patch output
78 !
79 END TYPE diag_options_t
80 !
81 TYPE diag_t
82 !------------------------------------------------------------------------------
83 !
84 !* variables for each patch
85 !
86 !* averaged variables
87 !
88  REAL, POINTER, DIMENSION(:) :: xri ! Bulk-Richardson number (-)
89  REAL, POINTER, DIMENSION(:) :: xcd ! drag coefficient for wind (W/s2)
90  REAL, POINTER, DIMENSION(:) :: xcdn ! neutral drag coefficient (-)
91  REAL, POINTER, DIMENSION(:) :: xch ! drag coefficient for heat (W/s)
92  REAL, POINTER, DIMENSION(:) :: xce ! drag coefficient for vapor (W/s/K)
93 !
94  REAL, POINTER, DIMENSION(:) :: xhu ! area averaged surface humidity coefficient (-)
95  REAL, POINTER, DIMENSION(:) :: xhug ! baresoil surface humidity coefficient (-)
96  REAL, POINTER, DIMENSION(:) :: xhv ! Halstead coefficient (-)
97 !
98  REAL, POINTER, DIMENSION(:) :: xrn ! net radiation at surface (W/m2)
99  REAL, POINTER, DIMENSION(:) :: xh ! sensible heat flux (W/m2)
100  REAL, POINTER, DIMENSION(:) :: xle ! total latent heat flux (W/m2)
101  REAL, POINTER, DIMENSION(:) :: xlei ! sublimation latent heat flux (W/m2)
102  REAL, POINTER, DIMENSION(:) :: xgflux ! net soil-vegetation flux (W/m2)
103 !
104  REAL, POINTER, DIMENSION(:) :: xevap ! total evaporation (kg/m2/s)
105  REAL, POINTER, DIMENSION(:) :: xsubl ! sublimation (kg/m2/s)
106 !
107  REAL, POINTER, DIMENSION(:) :: xts ! surface temperature (K)
108  REAL, POINTER, DIMENSION(:) :: xtsrad ! surface temperature (K)
109  REAL, POINTER, DIMENSION(:) :: xalbt ! Total Albedo
110  REAL, POINTER, DIMENSION(:) :: xswe ! snow water equivalent (kg/m2)
111 !
112  REAL, POINTER, DIMENSION(:) :: xt2m ! temperature at 2 meters (K)
113  REAL, POINTER, DIMENSION(:) :: xt2m_min ! Minimum temperature at 2 meters (K)
114  REAL, POINTER, DIMENSION(:) :: xt2m_max ! Maximum temperature at 2 meters (K)
115  REAL, POINTER, DIMENSION(:) :: xq2m ! humidity at 2 meters (kg/kg)
116  REAL, POINTER, DIMENSION(:) :: xhu2m ! relative humidity at 2 meters (-)
117  REAL, POINTER, DIMENSION(:) :: xhu2m_min ! Minimum relative humidity at 2 meters (-)
118  REAL, POINTER, DIMENSION(:) :: xhu2m_max ! Maximum relative humidity at 2 meters (-)
119  REAL, POINTER, DIMENSION(:) :: xqs ! humidity at surface (kg/kg)
120  REAL, POINTER, DIMENSION(:) :: xzon10m ! zonal wind at 10 meters (m/s)
121  REAL, POINTER, DIMENSION(:) :: xmer10m ! meridian wind at 10 meters (m/s)
122  REAL, POINTER, DIMENSION(:) :: xwind10m ! wind at 10 meters (m/s)
123  REAL, POINTER, DIMENSION(:) :: xwind10m_max ! Maximum wind at 10 meters (m/s)
124 !
125  REAL, POINTER, DIMENSION(:) :: xsfco2 ! CO2 flux (m/s*kg_CO2/kg_air)
126 !
127  REAL, POINTER, DIMENSION(:,:) :: xswbd ! downward short wave radiation by spectral band (W/m2)
128  REAL, POINTER, DIMENSION(:,:) :: xswbu ! upward short wave radiation by spectral band (W/m2)
129 !
130  REAL, POINTER, DIMENSION(:) :: xlwd ! downward long wave radiation (W/m2)
131  REAL, POINTER, DIMENSION(:) :: xlwu ! upward long wave radiation (W/m2)
132  REAL, POINTER, DIMENSION(:) :: xswd ! downward short wave radiation (W/m2)
133  REAL, POINTER, DIMENSION(:) :: xswu ! upward short wave radiation (W/m2)
134 !
135  REAL, POINTER, DIMENSION(:) :: xfmu ! horizontal momentum flux zonal (m2/s2)
136  REAL, POINTER, DIMENSION(:) :: xfmv ! horizontal momentum flux meridian (m2/s2)
137  !
138  REAL, POINTER, DIMENSION(:) :: xz0 ! roughness length for momentum
139  ! for vegetation and snow (m)
140  REAL, POINTER, DIMENSION(:) :: xz0h ! roughness length for heat
141  ! for vegetation and snow (m)
142  REAL, POINTER, DIMENSION(:) :: xz0eff ! effective roughness length for heat
143  ! for vegetation and snow (m)
144 !
145  REAL, POINTER, DIMENSION(:) :: xt2m_min_zs ! air temperature at 2 meters (K)
146  REAL, POINTER, DIMENSION(:) :: xq2m_min_zs ! air humidity at 2 meters (kg/kg)
147  REAL, POINTER, DIMENSION(:) :: xhu2m_min_zs! air relative humidity at 2 m (-)
148 
149 
150 
151  REAL, POINTER, DIMENSION(:) :: xps ! air pressure at the surface (Pa)
152  REAL, POINTER, DIMENSION(:) :: xrhoa ! air density at the surface (kg/m3)
153 
154  REAL, POINTER, DIMENSION(:) :: xsso_fmu ! zonal friction (with SSO) (Pa)
155  REAL, POINTER, DIMENSION(:) :: xsso_fmv ! meridian friction (with SSO) (Pa)
156 !
157 
158  REAL, POINTER, DIMENSION(:) :: xuref ! reference height for momentum (m)
159  REAL, POINTER, DIMENSION(:) :: xzref ! reference height for heat (m)
160  REAL, POINTER, DIMENSION(:) :: xtrad ! radiative temperature at t (K)
161  REAL, POINTER, DIMENSION(:) :: xemis ! surface emissivity at t (-)
162 
163 !------------------------------------------------------------------------------
164 !
165 END TYPE diag_t
166 !
168 !
169 TYPE(diag_t), POINTER :: al(:)=>null()
170 !
171 END TYPE diag_np_t
172 !
173 CONTAINS
174 !
175 SUBROUTINE diag_options_init(DGO)
176 TYPE(diag_options_t), INTENT(INOUT) :: DGO
177 REAL(KIND=JPRB) :: ZHOOK_HANDLE
178 IF (lhook) CALL dr_hook("MODD_DIAG_N:DIAG_OPTIONS_INIT",0,zhook_handle)
179  NULLIFY(dgo%CSELECT)
180 dgo%XDIAG_TSTEP=0.
181 dgo%N2M=0
182 dgo%LT2MMW=.false.
183 dgo%L2M_MIN_ZS=.false.
184 dgo%LSURF_BUDGET=.false.
185 dgo%LRAD_BUDGET=.false.
186 dgo%LCOEF=.false.
187 dgo%LSURF_VARS=.false.
188 dgo%LFRAC=.false.
189 dgo%LDIAG_GRID=.false.
190 dgo%LPGD=.false.
191 dgo%LPATCH_BUDGET=.false.
192 dgo%LSURF_BUDGETC=.false.
193 dgo%LRESET_BUDGETC=.false.
194 dgo%LREAD_BUDGETC=.false.
195 dgo%LPROVAR_TO_DIAG=.false.
196 dgo%LSNOWDIMNC=.false.
197 dgo%LRESETCUMUL=.false.
198 dgo%LSELECT=.false.
199 IF (lhook) CALL dr_hook("MODD_DIAG_N:DIAG_OPTIONS_INIT",1,zhook_handle)
200 END SUBROUTINE diag_options_init
201 !
202 SUBROUTINE diag_np_init(ND,KPATCH)
203 TYPE(diag_np_t), INTENT(INOUT) :: ND
204 INTEGER, INTENT(IN) :: KPATCH
205 INTEGER :: JP
206 REAL(KIND=JPRB) :: ZHOOK_HANDLE
207 IF (lhook) CALL dr_hook("MODD_DIAG_N:DIAG_NP_INIT",0,zhook_handle)
208 IF (.NOT.ASSOCIATED(nd%AL)) THEN
209  ALLOCATE(nd%AL(kpatch))
210  DO jp=1,kpatch
211  CALL diag_init(nd%AL(jp))
212  ENDDO
213 ELSE
214  DO jp=1,kpatch
215  CALL diag_init(nd%AL(jp))
216  ENDDO
217  DEALLOCATE(nd%AL)
218 ENDIF
219 IF (lhook) CALL dr_hook("MODD_DIAG_N:DIAG_NP_INIT",1,zhook_handle)
220 END SUBROUTINE diag_np_init
221 !
222 !
223 SUBROUTINE diag_init(D)
224 TYPE(diag_t), INTENT(INOUT) :: D
225 REAL(KIND=JPRB) :: ZHOOK_HANDLE
226 IF (lhook) CALL dr_hook("MODD_DIAG_N:DIAG_INIT",0,zhook_handle)
227  NULLIFY(d%XRI)
228  NULLIFY(d%XCD)
229  NULLIFY(d%XCDN)
230  NULLIFY(d%XCH)
231  NULLIFY(d%XCE)
232  NULLIFY(d%XHU)
233  NULLIFY(d%XHUG)
234  NULLIFY(d%XHV)
235  NULLIFY(d%XRN)
236  NULLIFY(d%XH)
237  NULLIFY(d%XLE)
238  NULLIFY(d%XLEI)
239  NULLIFY(d%XGFLUX)
240  NULLIFY(d%XEVAP)
241  NULLIFY(d%XSUBL)
242  NULLIFY(d%XTS)
243  NULLIFY(d%XTSRAD)
244  NULLIFY(d%XALBT)
245  NULLIFY(d%XSWE)
246  NULLIFY(d%XT2M)
247  NULLIFY(d%XT2M_MIN)
248  NULLIFY(d%XT2M_MAX)
249  NULLIFY(d%XQ2M)
250  NULLIFY(d%XHU2M)
251  NULLIFY(d%XQS)
252  NULLIFY(d%XZON10M)
253  NULLIFY(d%XMER10M)
254  NULLIFY(d%XWIND10M)
255  NULLIFY(d%XWIND10M_MAX)
256  NULLIFY(d%XLWD)
257  NULLIFY(d%XLWU)
258  NULLIFY(d%XSWD)
259  NULLIFY(d%XSWU)
260  NULLIFY(d%XSWBD)
261  NULLIFY(d%XSWBU)
262  NULLIFY(d%XFMU)
263  NULLIFY(d%XFMV)
264  NULLIFY(d%XZ0)
265  NULLIFY(d%XZ0H)
266  NULLIFY(d%XZ0EFF)
267  NULLIFY(d%XT2M_MIN_ZS)
268  NULLIFY(d%XQ2M_MIN_ZS)
269  NULLIFY(d%XHU2M_MIN_ZS)
270  NULLIFY(d%XPS)
271  NULLIFY(d%XRHOA)
272  NULLIFY(d%XSSO_FMU)
273  NULLIFY(d%XSSO_FMV)
274  NULLIFY(d%XUREF)
275  NULLIFY(d%XZREF)
276  NULLIFY(d%XTRAD)
277  NULLIFY(d%XEMIS)
278 IF (lhook) CALL dr_hook("MODD_DIAG_N:DIAG_INIT",1,zhook_handle)
279 END SUBROUTINE diag_init
280 
281 
282 END MODULE modd_diag_n
subroutine diag_init(D)
Definition: modd_diagn.F90:224
subroutine diag_np_init(ND, KPATCH)
Definition: modd_diagn.F90:203
integer, parameter jprb
Definition: parkind1.F90:32
logical lhook
Definition: yomhook.F90:15
subroutine diag_options_init(DGO)
Definition: modd_diagn.F90:176