SURFEX v8.1
General documentation of Surfex
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 (FM, IM, SM, TM, WM, DGO, U, SV, &
7  OFRAC, ODIAG_GRID, K2M, OSURF_BUDGET, ORAD_BUDGET, OCOEF, &
8  OSURF_VARS, KBEQ, KDSTEQ, ODIAG_OCEAN, ODIAG_MISC_SEAICE, &
9  OWATER_PROFILE, OSURF_EVAP_BUDGET, OFLOOD, OPGD_ISBA, &
10  OCH_NO_FLUX_ISBA, OSURF_MISC_BUDGET_ISBA, OPGD_TEB, &
11  OSURF_MISC_BUDGET_TEB )
12 ! ############################################################
13 !
14 !!**** *FLAG_DIAG_UPDATE* - routine to modify selection of output fields
15 !!
16 !! PURPOSE
17 !! -------
18 !!
19 !!** METHOD
20 !! ------
21 !!
22 !! EXTERNAL
23 !! --------
24 !!
25 !!
26 !! IMPLICIT ARGUMENTS
27 !! ------------------
28 !!
29 !! REFERENCE
30 !! ---------
31 !!
32 !!
33 !! AUTHOR
34 !! ------
35 !! P. Le Moigne *Meteo France*
36 !!
37 !! MODIFICATIONS
38 !! -------------
39 !! Original 02/2008
40 !
41 ! B.Decharme 10/2009 flag to desactivate writing of pgd
42 !! Modified 04/2013, P. Le Moigne: FLake chemistry
43 !! Modified 01/2014, S. Senesi : introduce sea-ice model
44 !-------------------------------------------------------------------------------
45 !
46 !* 0. DECLARATIONS
47 ! ------------
48 !
51 USE modd_diag_n, ONLY : diag_options_t
52 USE modd_surf_atm_n, ONLY : surf_atm_t
53 USE modd_sv_n, ONLY : sv_t
54 !
55 USE yomhook ,ONLY : lhook, dr_hook
56 USE parkind1 ,ONLY : jprb
57 !
58 IMPLICIT NONE
59 !
60 !* 0.1 Declarations of arguments
61 ! -------------------------
62 !
63 TYPE(flake_model_t), INTENT(INOUT) :: FM
64 TYPE(isba_model_t), INTENT(INOUT) :: IM
65 TYPE(seaflux_model_t), INTENT(INOUT) :: SM
66 TYPE(teb_model_t), INTENT(INOUT) :: TM
67 TYPE(watflux_model_t), INTENT(INOUT) :: WM
68 !
69 TYPE(diag_options_t), INTENT(INOUT) :: DGO
70 TYPE(surf_atm_t), INTENT(INOUT) :: U
71 TYPE(sv_t), INTENT(INOUT) :: SV
72 !
73 LOGICAL, INTENT(IN) :: OFRAC
74 LOGICAL, INTENT(IN) :: ODIAG_GRID
75 INTEGER, INTENT(IN) :: K2M
76 LOGICAL, INTENT(IN) :: OSURF_BUDGET
77 LOGICAL, INTENT(IN) :: ORAD_BUDGET
78 LOGICAL, INTENT(IN) :: OCOEF
79 LOGICAL, INTENT(IN) :: OSURF_VARS
80 !
81 INTEGER, INTENT(IN) :: KBEQ
82 INTEGER, INTENT(IN) :: KDSTEQ
83 !
84 LOGICAL, INTENT(IN) :: ODIAG_OCEAN
85 LOGICAL, INTENT(IN) :: ODIAG_MISC_SEAICE
86 LOGICAL, INTENT(IN) :: OWATER_PROFILE
87 LOGICAL, INTENT(IN) :: OSURF_EVAP_BUDGET
88 LOGICAL, INTENT(IN) :: OFLOOD
89 LOGICAL, INTENT(IN) :: OSURF_MISC_BUDGET_ISBA
90 LOGICAL, INTENT(IN) :: OCH_NO_FLUX_ISBA
91 LOGICAL, INTENT(IN) :: OPGD_ISBA
92 LOGICAL, INTENT(IN) :: OSURF_MISC_BUDGET_TEB
93 LOGICAL, INTENT(IN) :: OPGD_TEB
94 !
95 !* 0.2 Declarations of local variables
96 ! -------------------------------
97 !
98 REAL(KIND=JPRB) :: ZHOOK_HANDLE
99 !-------------------------------------------------------------------------------
100 IF (lhook) CALL dr_hook('FLAG_DIAG_UPDATE',0,zhook_handle)
101 !
102 dgo%LFRAC = ofrac
103 dgo%LDIAG_GRID = odiag_grid
104 dgo%N2M = k2m
105 dgo%LSURF_BUDGET = osurf_budget
106 dgo%LRAD_BUDGET = orad_budget
107 dgo%LCOEF = ocoef
108 dgo%LSURF_VARS = osurf_vars
109 !
110 sv%NBEQ = kbeq
111 !
112 dgo%LSURF_BUDGETC = .false.
113 IF (.NOT.dgo%LRESET_BUDGETC) dgo%LSURF_BUDGETC = .true.
114 !
115 IF (u%CSEA =='SEAFLX') CALL flag_sea_update(kbeq, odiag_ocean, odiag_misc_seaice, &
116  dgo%LSURF_BUDGETC, dgo%LRAD_BUDGET, k2m)
117 IF (u%CWATER =='FLAKE ') CALL flag_flake_update(kbeq, owater_profile, dgo%LSURF_BUDGETC, dgo%LRAD_BUDGET, k2m)
118 IF (u%CWATER =='WATFLX') CALL flag_water_update(kbeq, dgo%LSURF_BUDGETC, dgo%LRAD_BUDGET, k2m)
119 IF (u%CNATURE=='ISBA ') CALL flag_isba_update(kbeq, kdsteq, osurf_evap_budget, oflood, &
120  opgd_isba, och_no_flux_isba, osurf_misc_budget_isba,&
121  dgo%LSURF_BUDGETC, dgo%LRAD_BUDGET, k2m)
122 IF (u%CTOWN =='TEB ') CALL flag_teb_update(kbeq, opgd_teb, osurf_misc_budget_teb, dgo%LRAD_BUDGET, k2m)
123 !
124 IF (lhook) CALL dr_hook('FLAG_DIAG_UPDATE',1,zhook_handle)
125 !-------------------------------------------------------------------------------
126 CONTAINS
127 !
128 SUBROUTINE flag_sea_update(KBEQ, ODIAG_OCEAN, ODIAG_MISC_SEAICE, OSURF_BUDGETC, ORAD_BUDGET, K2M)
129 !
130 IMPLICIT NONE
131 !
132 INTEGER, INTENT(IN) :: KBEQ
133 LOGICAL, INTENT(IN) :: ODIAG_OCEAN
134 LOGICAL, INTENT(IN) :: ODIAG_MISC_SEAICE
135 LOGICAL, INTENT(IN) :: OSURF_BUDGETC
136 LOGICAL, INTENT(IN) :: ORAD_BUDGET
137 INTEGER, INTENT(IN) :: K2M
138 !
139 REAL(KIND=JPRB) :: ZHOOK_HANDLE
140 !
141 IF (lhook) CALL dr_hook('FLAG_DIAG_UPDATE:FLAG_SEA_UPDATE',0,zhook_handle)
142 sm%CHS%SVS%NBEQ = kbeq
143 sm%SD%GO%LDIAG_OCEAN = odiag_ocean
144 sm%SD%DMI%LDIAG_MISC_SEAICE = odiag_misc_seaice
145 sm%SD%O%LSURF_BUDGETC = osurf_budgetc
146 sm%SD%O%LRAD_BUDGET = orad_budget
147 sm%SD%O%N2M = k2m
148 IF (lhook) CALL dr_hook('FLAG_DIAG_UPDATE:FLAG_SEA_UPDATE',1,zhook_handle)
149 !
150 END SUBROUTINE flag_sea_update
151 !
152 SUBROUTINE flag_water_update(KBEQ, OSURF_BUDGETC, ORAD_BUDGET, K2M)
153 !
154 !
155 IMPLICIT NONE
156 !
157 INTEGER, INTENT(IN) :: KBEQ
158 LOGICAL, INTENT(IN) :: OSURF_BUDGETC
159 LOGICAL, INTENT(IN) :: ORAD_BUDGET
160 INTEGER, INTENT(IN) :: K2M
161 !
162 REAL(KIND=JPRB) :: ZHOOK_HANDLE
163 !
164 IF (lhook) CALL dr_hook('FLAG_DIAG_UPDATE:FLAG_WATER_UPDATE',0,zhook_handle)
165 wm%CHW%SVW%NBEQ = kbeq
166 wm%DWO%LSURF_BUDGETC = osurf_budgetc
167 wm%DWO%LRAD_BUDGET = orad_budget
168 wm%DWO%N2M = k2m
169 IF (lhook) CALL dr_hook('FLAG_DIAG_UPDATE:FLAG_WATER_UPDATE',1,zhook_handle)
170 !
171 END SUBROUTINE flag_water_update
172 !
173 SUBROUTINE flag_flake_update(KBEQ, OWATER_PROFILE, OSURF_BUDGETC, ORAD_BUDGET, K2M)
174 !
175 !
176 IMPLICIT NONE
177 !
178 INTEGER, INTENT(IN) :: KBEQ
179 LOGICAL, INTENT(IN) :: OWATER_PROFILE
180 LOGICAL, INTENT(IN) :: OSURF_BUDGETC
181 LOGICAL, INTENT(IN) :: ORAD_BUDGET
182 INTEGER, INTENT(IN) :: K2M
183 !
184 REAL(KIND=JPRB) :: ZHOOK_HANDLE
185 !
186 IF (lhook) CALL dr_hook('FLAG_DIAG_UPDATE:FLAG_FLAKE_UPDATE',0,zhook_handle)
187 fm%CHF%SVF%NBEQ = kbeq
188 fm%DMF%LWATER_PROFILE = owater_profile
189 fm%DFO%LSURF_BUDGETC = osurf_budgetc
190 fm%DFO%LRAD_BUDGET = orad_budget
191 fm%DFO%N2M = k2m
192 IF (lhook) CALL dr_hook('FLAG_DIAG_UPDATE:FLAG_FLAKE_UPDATE',1,zhook_handle)
193 !
194 END SUBROUTINE flag_flake_update
195 !
196 !
197 SUBROUTINE flag_isba_update(KBEQ, KDSTEQ, OSURF_EVAP_BUDGET, OFLOOD, &
198  OPGD, OCH_NO_FLUX, OSURF_MISC_BUDGET, &
199  OSURF_BUDGETC, ORAD_BUDGET, K2M)
200 !
201 !
202 IMPLICIT NONE
203 !
204 INTEGER, INTENT(IN) :: KBEQ
205 INTEGER, INTENT(IN) :: KDSTEQ
206 LOGICAL, INTENT(IN) :: OSURF_EVAP_BUDGET
207 LOGICAL, INTENT(IN) :: OFLOOD
208 LOGICAL, INTENT(IN) :: OPGD
209 LOGICAL, INTENT(IN) :: OCH_NO_FLUX
210 LOGICAL, INTENT(IN) :: OSURF_MISC_BUDGET
211 LOGICAL, INTENT(IN) :: OSURF_BUDGETC
212 LOGICAL, INTENT(IN) :: ORAD_BUDGET
213 INTEGER, INTENT(IN) :: K2M
214 !
215 REAL(KIND=JPRB) :: ZHOOK_HANDLE
216 !
217 IF (lhook) CALL dr_hook('FLAG_DIAG_UPDATE:FLAG_ISBA_UPDATE',0,zhook_handle)
218 im%CHI%SVI%NBEQ = kbeq
219 im%CHI%SVI%NDSTEQ = kdsteq
220 im%ID%DE%LSURF_EVAP_BUDGET = osurf_evap_budget
221 im%O%LFLOOD = oflood
222 im%ID%O%LPGD = opgd
223 im%CHI%LCH_NO_FLUX = och_no_flux
224 im%ID%DM%LSURF_MISC_BUDGET = osurf_misc_budget
225 im%ID%O%LSURF_BUDGETC = osurf_budgetc
226 im%ID%O%LPATCH_BUDGET = osurf_budgetc
227 im%ID%O%LRAD_BUDGET = orad_budget
228 im%ID%O%N2M = k2m
229 IF (lhook) CALL dr_hook('FLAG_DIAG_UPDATE:FLAG_ISBA_UPDATE',1,zhook_handle)
230 !
231 END SUBROUTINE flag_isba_update
232 !
233 SUBROUTINE flag_teb_update(KBEQ, OPGD, OSURF_MISC_BUDGET, ORAD_BUDGET, K2M)
234 !
235 !
236 IMPLICIT NONE
237 !
238 INTEGER, INTENT(IN) :: KBEQ
239 LOGICAL, INTENT(IN) :: OPGD
240 LOGICAL, INTENT(IN) :: OSURF_MISC_BUDGET
241 LOGICAL, INTENT(IN) :: ORAD_BUDGET
242 INTEGER, INTENT(IN) :: K2M
243 !
244 REAL(KIND=JPRB) :: ZHOOK_HANDLE
245 !
246 IF (lhook) CALL dr_hook('FLAG_DIAG_UPDATE:FLAG_TEB_UPDATE',0,zhook_handle)
247 tm%CHT%SVT%NBEQ = kbeq
248 tm%TD%O%LPGD = opgd
249 tm%TD%MTO%LSURF_MISC_BUDGET = osurf_misc_budget
250 tm%TD%O%LRAD_BUDGET = orad_budget
251 tm%TD%O%N2M = k2m
252 IF (lhook) CALL dr_hook('FLAG_DIAG_UPDATE:FLAG_TEB_UPDATE',1,zhook_handle)
253 !
254 END SUBROUTINE flag_teb_update
255 !
256 END SUBROUTINE flag_diag_update
257 
subroutine flag_isba_update(KBEQ, KDSTEQ, OSURF_EVAP_BUDGET, OFLOOD, OPGD, OCH_NO_FLUX, OSURF_MISC_BUDGET, OSURF_BUDGETC, ORAD_BUDGET, K2M)
integer, parameter jprb
Definition: parkind1.F90:32
subroutine flag_diag_update(FM, IM, SM, TM, WM, DGO, U, SV, OFRAC, ODIAG_GRID, K2M, OSURF_BUDGET, ORAD_BUDGET, OCOEF, OSURF_VARS, KBEQ, KDSTEQ, ODIAG_OCEAN, ODIAG_MISC_SEAICE, OWATER_PROFILE, OSURF_EVAP_BUDGET, OFLOOD, OPGD_ISBA, OCH_NO_FLUX_ISBA, OSURF_MISC_BUDGET_ISBA, OPGD_TEB, OSURF_MISC_BUDGET_TEB)
logical lhook
Definition: yomhook.F90:15
subroutine flag_sea_update(KBEQ, ODIAG_OCEAN, ODIAG_MISC_SEAICE, OSURF_BUDGETC, ORAD_BUDGET, K2M)
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)