SURFEX  V8_0
Surfex V8_0 release
 All Classes Files Functions Variables
flag_diag_update.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 flag_diag_update (CHF, CHI, CHS, CHT, CHW, DGEI, DGF, DGI, DGMF, DGMI, DGMTO, &
7  dgo, dgs, dgsi, dgu, dgt, dgw, i, u, &
8  ofrac, odiag_grid, k2m, osurf_budget, orad_budget, ocoef, &
9  osurf_vars, kbeq, kdsteq, odiag_ocean, odiag_seaice, &
10  owater_profile, &
11  osurf_evap_budget, oflood, opgd_isba, och_no_flux_isba, &
12  osurf_misc_budget_isba, opgd_teb, osurf_misc_budget_teb )
13 ! ############################################################
14 !
15 !!**** *FLAG_DIAG_UPDATE* - routine to modify selection of output fields
16 !!
17 !! PURPOSE
18 !! -------
19 !!
20 !!** METHOD
21 !! ------
22 !!
23 !! EXTERNAL
24 !! --------
25 !!
26 !!
27 !! IMPLICIT ARGUMENTS
28 !! ------------------
29 !!
30 !! REFERENCE
31 !! ---------
32 !!
33 !!
34 !! AUTHOR
35 !! ------
36 !! P. Le Moigne *Meteo France*
37 !!
38 !! MODIFICATIONS
39 !! -------------
40 !! Original 02/2008
41 !
42 ! B.Decharme 10/2009 flag to desactivate writing of pgd
43 !! Modified 04/2013, P. Le Moigne: FLake chemistry
44 !! Modified 01/2014, S. Senesi : introduce sea-ice model
45 !-------------------------------------------------------------------------------
46 !
47 !* 0. DECLARATIONS
48 ! ------------
49 !
50 !
51 !
52 !
53 USE modd_ch_flake_n, ONLY : ch_flake_t
54 USE modd_ch_isba_n, ONLY : ch_isba_t
56 USE modd_ch_teb_n, ONLY : ch_teb_t
60 USE modd_diag_isba_n, ONLY : diag_isba_t
68 USE modd_diag_teb_n, ONLY : diag_teb_t
70 USE modd_isba_n, ONLY : isba_t
71 USE modd_surf_atm_n, ONLY : surf_atm_t
72 !
73 USE yomhook ,ONLY : lhook, dr_hook
74 USE parkind1 ,ONLY : jprb
75 !
76 IMPLICIT NONE
77 !
78 !* 0.1 Declarations of arguments
79 ! -------------------------
80 !
81 !
82 TYPE(ch_flake_t), INTENT(INOUT) :: chf
83 TYPE(ch_isba_t), INTENT(INOUT) :: chi
84 TYPE(ch_seaflux_t), INTENT(INOUT) :: chs
85 TYPE(ch_teb_t), INTENT(INOUT) :: cht
86 TYPE(ch_watflux_t), INTENT(INOUT) :: chw
87 TYPE(diag_evap_isba_t), INTENT(INOUT) :: dgei
88 TYPE(diag_flake_t), INTENT(INOUT) :: dgf
89 TYPE(diag_isba_t), INTENT(INOUT) :: dgi
90 TYPE(diag_misc_flake_t), INTENT(INOUT) :: dgmf
91 TYPE(diag_misc_isba_t), INTENT(INOUT) :: dgmi
92 TYPE(diag_misc_teb_options_t), INTENT(INOUT) :: dgmto
93 TYPE(diag_ocean_t), INTENT(INOUT) :: dgo
94 TYPE(diag_seaflux_t), INTENT(INOUT) :: dgs
95 TYPE(diag_seaice_t), INTENT(INOUT) :: dgsi
96 TYPE(diag_surf_atm_t), INTENT(INOUT) :: dgu
97 TYPE(diag_teb_t), INTENT(INOUT) :: dgt
98 TYPE(diag_watflux_t), INTENT(INOUT) :: dgw
99 TYPE(isba_t), INTENT(INOUT) :: i
100 TYPE(surf_atm_t), INTENT(INOUT) :: u
101 !
102 LOGICAL, INTENT(IN) :: ofrac
103 LOGICAL, INTENT(IN) :: odiag_grid
104 INTEGER, INTENT(IN) :: k2m
105 LOGICAL, INTENT(IN) :: osurf_budget
106 LOGICAL, INTENT(IN) :: orad_budget
107 LOGICAL, INTENT(IN) :: ocoef
108 LOGICAL, INTENT(IN) :: osurf_vars
109 !
110 INTEGER, INTENT(IN) :: kbeq
111 INTEGER, INTENT(IN) :: kdsteq
112 !
113 LOGICAL, INTENT(IN) :: odiag_ocean
114 LOGICAL, INTENT(IN) :: odiag_seaice
115 LOGICAL, INTENT(IN) :: owater_profile
116 LOGICAL, INTENT(IN) :: osurf_evap_budget
117 LOGICAL, INTENT(IN) :: oflood
118 LOGICAL, INTENT(IN) :: osurf_misc_budget_isba
119 LOGICAL, INTENT(IN) :: och_no_flux_isba
120 LOGICAL, INTENT(IN) :: opgd_isba
121 LOGICAL, INTENT(IN) :: osurf_misc_budget_teb
122 LOGICAL, INTENT(IN) :: opgd_teb
123 !
124 !* 0.2 Declarations of local variables
125 ! -------------------------------
126 !
127 REAL(KIND=JPRB) :: zhook_handle
128 !-------------------------------------------------------------------------------
129 IF (lhook) CALL dr_hook('FLAG_DIAG_UPDATE',0,zhook_handle)
130 !
131 dgu%LFRAC = ofrac
132 dgu%LDIAG_GRID = odiag_grid
133 dgu%N2M = k2m
134 dgu%LSURF_BUDGET = osurf_budget
135 dgu%LRAD_BUDGET = orad_budget
136 dgu%LCOEF = ocoef
137 dgu%LSURF_VARS = osurf_vars
138 !
139 dgu%LSURF_BUDGETC = .false.
140 IF (.NOT.dgu%LRESET_BUDGETC) dgu%LSURF_BUDGETC = .true.
141 !
142 IF (u%CSEA =='SEAFLX') CALL flag_sea_update(kbeq, odiag_ocean, odiag_seaice, &
143  dgu%LSURF_BUDGETC, dgu%LRAD_BUDGET, k2m)
144 IF (u%CWATER =='FLAKE ') CALL flag_flake_update(kbeq, owater_profile, dgu%LSURF_BUDGETC, dgu%LRAD_BUDGET, k2m)
145 IF (u%CWATER =='WATFLX') CALL flag_water_update(kbeq, dgu%LSURF_BUDGETC, dgu%LRAD_BUDGET, k2m)
146 IF (u%CNATURE=='ISBA ') CALL flag_isba_update(kbeq, kdsteq, osurf_evap_budget, oflood, &
147  opgd_isba, och_no_flux_isba, osurf_misc_budget_isba,&
148  dgu%LSURF_BUDGETC, dgu%LRAD_BUDGET, k2m)
149 IF (u%CTOWN =='TEB ') CALL flag_teb_update(kbeq, opgd_teb, osurf_misc_budget_teb, dgu%LRAD_BUDGET, k2m)
150 !
151 IF (lhook) CALL dr_hook('FLAG_DIAG_UPDATE',1,zhook_handle)
152 !-------------------------------------------------------------------------------
153  CONTAINS
154 !
155 SUBROUTINE flag_sea_update(KBEQ, ODIAG_OCEAN, ODIAG_SEAICE, OSURF_BUDGETC, ORAD_BUDGET, K2M)
156 !
157 !
158 IMPLICIT NONE
159 !
160 INTEGER, INTENT(IN) :: kbeq
161 LOGICAL, INTENT(IN) :: odiag_ocean
162 LOGICAL, INTENT(IN) :: odiag_seaice
163 LOGICAL, INTENT(IN) :: osurf_budgetc
164 LOGICAL, INTENT(IN) :: orad_budget
165 INTEGER, INTENT(IN) :: k2m
166 !
167 REAL(KIND=JPRB) :: zhook_handle
168 !
169 IF (lhook) CALL dr_hook('FLAG_DIAG_UPDATE:FLAG_SEA_UPDATE',0,zhook_handle)
170  chs%SVS%NBEQ = kbeq
171 dgo%LDIAG_OCEAN = odiag_ocean
172 dgsi%LDIAG_SEAICE = odiag_seaice
173 dgs%LSURF_BUDGETC = osurf_budgetc
174 dgs%LRAD_BUDGET = orad_budget
175 dgs%N2M = k2m
176 IF (lhook) CALL dr_hook('FLAG_DIAG_UPDATE:FLAG_SEA_UPDATE',1,zhook_handle)
177 !
178 END SUBROUTINE flag_sea_update
179 !
180 SUBROUTINE flag_water_update(KBEQ, OSURF_BUDGETC, ORAD_BUDGET, K2M)
181 !
182 !
183 IMPLICIT NONE
184 !
185 INTEGER, INTENT(IN) :: kbeq
186 LOGICAL, INTENT(IN) :: osurf_budgetc
187 LOGICAL, INTENT(IN) :: orad_budget
188 INTEGER, INTENT(IN) :: k2m
189 !
190 REAL(KIND=JPRB) :: zhook_handle
191 !
192 IF (lhook) CALL dr_hook('FLAG_DIAG_UPDATE:FLAG_WATER_UPDATE',0,zhook_handle)
193  chw%SVW%NBEQ = kbeq
194 dgw%LSURF_BUDGETC = osurf_budgetc
195 dgw%LRAD_BUDGET = orad_budget
196 dgw%N2M = k2m
197 IF (lhook) CALL dr_hook('FLAG_DIAG_UPDATE:FLAG_WATER_UPDATE',1,zhook_handle)
198 !
199 END SUBROUTINE flag_water_update
200 !
201 SUBROUTINE flag_flake_update(KBEQ, OWATER_PROFILE, OSURF_BUDGETC, ORAD_BUDGET, K2M)
202 !
203 !
204 IMPLICIT NONE
205 !
206 INTEGER, INTENT(IN) :: kbeq
207 LOGICAL, INTENT(IN) :: owater_profile
208 LOGICAL, INTENT(IN) :: osurf_budgetc
209 LOGICAL, INTENT(IN) :: orad_budget
210 INTEGER, INTENT(IN) :: k2m
211 !
212 REAL(KIND=JPRB) :: zhook_handle
213 !
214 IF (lhook) CALL dr_hook('FLAG_DIAG_UPDATE:FLAG_FLAKE_UPDATE',0,zhook_handle)
215  chf%SVF%NBEQ = kbeq
216 dgmf%LWATER_PROFILE = owater_profile
217 dgf%LSURF_BUDGETC = osurf_budgetc
218 dgf%LRAD_BUDGET = orad_budget
219 dgf%N2M = k2m
220 IF (lhook) CALL dr_hook('FLAG_DIAG_UPDATE:FLAG_FLAKE_UPDATE',1,zhook_handle)
221 !
222 END SUBROUTINE flag_flake_update
223 !
224 !
225 SUBROUTINE flag_isba_update(KBEQ, KDSTEQ, OSURF_EVAP_BUDGET, OFLOOD, &
226  opgd, och_no_flux, osurf_misc_budget, &
227  osurf_budgetc, orad_budget, k2m)
228 !
229 !
230 IMPLICIT NONE
231 !
232 INTEGER, INTENT(IN) :: kbeq
233 INTEGER, INTENT(IN) :: kdsteq
234 LOGICAL, INTENT(IN) :: osurf_evap_budget
235 LOGICAL, INTENT(IN) :: oflood
236 LOGICAL, INTENT(IN) :: opgd
237 LOGICAL, INTENT(IN) :: och_no_flux
238 LOGICAL, INTENT(IN) :: osurf_misc_budget
239 LOGICAL, INTENT(IN) :: osurf_budgetc
240 LOGICAL, INTENT(IN) :: orad_budget
241 INTEGER, INTENT(IN) :: k2m
242 !
243 REAL(KIND=JPRB) :: zhook_handle
244 !
245 IF (lhook) CALL dr_hook('FLAG_DIAG_UPDATE:FLAG_ISBA_UPDATE',0,zhook_handle)
246  chi%SVI%NBEQ = kbeq
247  chi%SVI%NDSTEQ = kdsteq
248 dgei%LSURF_EVAP_BUDGET = osurf_evap_budget
249 i%LFLOOD = oflood
250 dgi%LPGD = opgd
251  chi%LCH_NO_FLUX = och_no_flux
252 dgmi%LSURF_MISC_BUDGET = osurf_misc_budget
253 dgei%LSURF_BUDGETC = osurf_budgetc
254 dgi%LPATCH_BUDGET = osurf_budgetc
255 dgi%LRAD_BUDGET = orad_budget
256 dgi%N2M = k2m
257 IF (lhook) CALL dr_hook('FLAG_DIAG_UPDATE:FLAG_ISBA_UPDATE',1,zhook_handle)
258 !
259 END SUBROUTINE flag_isba_update
260 !
261 SUBROUTINE flag_teb_update(KBEQ, OPGD, OSURF_MISC_BUDGET, ORAD_BUDGET, K2M)
262 !
263 !
264 IMPLICIT NONE
265 !
266 INTEGER, INTENT(IN) :: kbeq
267 LOGICAL, INTENT(IN) :: opgd
268 LOGICAL, INTENT(IN) :: osurf_misc_budget
269 LOGICAL, INTENT(IN) :: orad_budget
270 INTEGER, INTENT(IN) :: k2m
271 !
272 REAL(KIND=JPRB) :: zhook_handle
273 !
274 IF (lhook) CALL dr_hook('FLAG_DIAG_UPDATE:FLAG_TEB_UPDATE',0,zhook_handle)
275  cht%SVT%NBEQ = kbeq
276 dgt%LPGD = opgd
277 dgmto%LSURF_MISC_BUDGET = osurf_misc_budget
278 dgt%LRAD_BUDGET = orad_budget
279 dgt%N2M = k2m
280 IF (lhook) CALL dr_hook('FLAG_DIAG_UPDATE:FLAG_TEB_UPDATE',1,zhook_handle)
281 !
282 END SUBROUTINE flag_teb_update
283 !
284 END SUBROUTINE flag_diag_update
285 
subroutine flag_isba_update(KBEQ, KDSTEQ, OSURF_EVAP_BUDGET, OFLOOD, OPGD, OCH_NO_FLUX, OSURF_MISC_BUDGET, OSURF_BUDGETC, ORAD_BUDGET, K2M)
subroutine flag_sea_update(KBEQ, ODIAG_OCEAN, ODIAG_SEAICE, OSURF_BUDGETC, ORAD_BUDGET, K2M)
subroutine flag_diag_update(CHF, CHI, CHS, CHT, CHW, DGEI, DGF, DGI, DGMF, DGMI, DGMTO, DGO, DGS, DGSI, DGU, DGT, DGW, I, U, OFRAC, ODIAG_GRID, K2M, OSURF_BUDGET, ORAD_BUDGET, OCOEF, OSURF_VARS, KBEQ, KDSTEQ, ODIAG_OCEAN, ODIAG_SEAICE, OWATER_PROFILE, OSURF_EVAP_BUDGET, OFLOOD, OPGD_ISBA, OCH_NO_FLUX_ISBA, OSURF_MISC_BUDGET_ISBA, OPGD_TEB, OSURF_MISC_BUDGET_TEB)
subroutine flag_flake_update(KBEQ, OWATER_PROFILE, OSURF_BUDGETC, ORAD_BUDGET, K2M)
subroutine flag_teb_update(KBEQ, OPGD, OSURF_MISC_BUDGET, ORAD_BUDGET, K2M)
subroutine flag_water_update(KBEQ, OSURF_BUDGETC, ORAD_BUDGET, K2M)