Line data Source code
1 : !------------------------------------------------------------------------------
2 : ! Harmonized Emissions Component (HEMCO) !
3 : !------------------------------------------------------------------------------
4 : !BOP
5 : !
6 : ! !MODULE: hcox_driver_mod.F90
7 : !
8 : ! !DESCRIPTION: Module hcox\_driver\_mod.F90 contains the driver routines
9 : ! (INIT, RUN, FINAL) for the HEMCO extensions. It determines the extensions
10 : ! to be used (based on the settings specified in the configuration file)
11 : ! and invokes the respective extension module calls.
12 : !\\
13 : !\\
14 : ! Call this module at the HEMCO - model interface level to execute the
15 : ! HEMCO extensions.
16 : !\\
17 : !\\
18 : ! !INTERFACE:
19 : !
20 : MODULE HCOX_Driver_Mod
21 : !
22 : ! !USES:
23 : !
24 : USE HCO_Error_Mod
25 : USE HCO_State_Mod, ONLY : HCO_State
26 : USE HCOX_State_Mod, ONLY : Ext_State
27 :
28 : IMPLICIT NONE
29 : PRIVATE
30 : !
31 : ! !PUBLIC MEMBER FUNCTIONS:
32 : !
33 : PUBLIC :: HCOX_Init
34 : PUBLIC :: HCOX_Run
35 : PUBLIC :: HCOX_Final
36 :
37 : PRIVATE :: HCOX_DiagnDefine
38 : PRIVATE :: HCOX_DiagnFill
39 : !
40 : ! !REMARKS:
41 : ! (1) The extension option objects (e.g. meteorological variables) are
42 : ! defined in the HEMCO - model interface module and passed to this
43 : ! module.
44 : ! (2) To add/remove HEMCO extensions from a model application, just
45 : ! add/remove the corresponding initialize, run, and finalize calls
46 : ! in the respective driver routines!
47 : !
48 : ! !REVISION HISTORY:
49 : ! 15 Dec 2013 - C. Keller - Initial version
50 : ! See https://github.com/geoschem/hemco for complete history
51 : !EOP
52 : !------------------------------------------------------------------------------
53 : !BOC
54 : !
55 : ! !PRIVATE VARIABLES
56 : !
57 :
58 : ! Variables for diagnostics: diagnostics toggle and output frequency.
59 : LOGICAL, PARAMETER :: DoDiagn = .FALSE.
60 :
61 : ! Arrays needed for diagnostics. Diagnostics are defined / filled via
62 : ! subroutines HCOX_DiagnDefine and HCOX_DiagnFill, respectively.
63 : REAL(sp), ALLOCATABLE, TARGET :: DGN_SUNCOS (:,: )
64 : REAL(sp), ALLOCATABLE, TARGET :: DGN_DRYTOTN (:,: )
65 : REAL(sp), ALLOCATABLE, TARGET :: DGN_WETTOTN (:,: )
66 : REAL(sp), ALLOCATABLE, TARGET :: DGN_LAI (:,: )
67 : ! REAL(sp), ALLOCATABLE, TARGET :: DGN_T2M (:,: )
68 : ! REAL(sp), ALLOCATABLE, TARGET :: DGN_GWET (:,: )
69 : ! REAL(sp), ALLOCATABLE, TARGET :: DGN_U10M (:,: )
70 : ! REAL(sp), ALLOCATABLE, TARGET :: DGN_V10M (:,: )
71 : ! REAL(sp), ALLOCATABLE, TARGET :: DGN_PARDR (:,: )
72 : ! REAL(sp), ALLOCATABLE, TARGET :: DGN_PARDF (:,: )
73 : ! REAL(sp), ALLOCATABLE, TARGET :: DGN_SZAFACT (:,: )
74 : ! REAL(sp), ALLOCATABLE, TARGET :: DGN_CLDFRC (:,: )
75 : ! REAL(sp), ALLOCATABLE, TARGET :: DGN_ALBD (:,: )
76 : ! REAL(sp), ALLOCATABLE, TARGET :: DGN_WLI (:,: )
77 : ! REAL(sp), ALLOCATABLE, TARGET :: DGN_TROPP (:,: )
78 :
79 : CONTAINS
80 : !EOC
81 : !------------------------------------------------------------------------------
82 : ! Harmonized Emissions Component (HEMCO) !
83 : !------------------------------------------------------------------------------
84 : !BOP
85 : !
86 : ! !IROUTINE: HCOX_Init
87 : !
88 : ! !DESCRIPTION: Subroutine HCOX\_Init is the driver routine to initialize
89 : ! all enabled HEMCO extensions.
90 : !\\
91 : ! !INTERFACE:
92 : !
93 0 : SUBROUTINE HCOX_Init( HcoState, ExtState, RC )
94 : !
95 : ! !USES:
96 : !
97 : USE HCOX_State_MOD, ONLY : ExtStateInit
98 : USE HCOX_Custom_Mod, ONLY : HCOX_Custom_Init
99 : USE HCOX_SeaFlux_Mod, ONLY : HCOX_SeaFlux_Init
100 : USE HCOX_ParaNOx_Mod, ONLY : HCOX_ParaNOx_Init
101 : USE HCOX_LightNox_Mod, ONLY : HCOX_LightNox_Init
102 : USE HCOX_SoilNox_Mod, ONLY : HCOX_SoilNox_Init
103 : USE HCOX_DustDead_Mod, ONLY : HCOX_DustDead_Init
104 : USE HCOX_DustGinoux_Mod, ONLY : HCOX_DustGinoux_Init
105 : USE HCOX_SeaSalt_Mod, ONLY : HCOX_SeaSalt_Init
106 : USE HCOX_GFED_Mod, ONLY : HCOX_GFED_Init
107 : USE HCOX_MEGAN_Mod, ONLY : HCOX_MEGAN_Init
108 : USE HCOX_Finn_Mod, ONLY : HCOX_FINN_Init
109 : USE HCOX_GC_RnPbBe_Mod, ONLY : HCOX_GC_RnPbBe_Init
110 : USE HCOX_GC_POPs_Mod, ONLY : HCOX_GC_POPs_Init
111 : USE HCOX_Volcano_Mod, ONLY : HCOX_Volcano_Init
112 : USE HCOX_Iodine_Mod, ONLY : HCOX_Iodine_Init
113 : #if defined( TOMAS )
114 : USE HCOX_TOMAS_Jeagle_Mod, ONLY : HCOX_TOMAS_Jeagle_Init
115 : USE HCOX_TOMAS_DustDead_Mod, ONLY : HCOX_TOMAS_DustDead_Init
116 : #endif
117 : !
118 : ! !INPUT/OUTPUT PARAMETERS:
119 : !
120 : TYPE(HCO_State), POINTER :: HcoState ! HEMCO state object
121 : TYPE(Ext_State), POINTER :: ExtState ! HEMCO extension object
122 : INTEGER, INTENT(INOUT) :: RC ! Failure or success
123 : !
124 : ! !REMARKS:
125 : ! By default we will call routine ExtStateInit, which initializes the
126 : ! ExtState object. In some instances, we may want to call ExtStateInit
127 : ! from a higher-level routine. For example, this allows us to pass
128 : ! via ExtState additional scalar quantities from the driving model to
129 : ! HEMCO. To do this, you will need to (1) call ExtStateInit separately,
130 : ! and (2) set the optional argument NoExtStateInit=.FALSE. flag in the
131 : ! call to HCOX_INIT.
132 : !
133 : ! !REVISION HISTORY:
134 : ! 12 Sep 2013 - C. Keller - Initial version
135 : ! See https://github.com/geoschem/hemco for complete history
136 : !EOP
137 : !------------------------------------------------------------------------------
138 : !BOC
139 : !
140 : ! !LOCAL VARIABLES:
141 : !
142 : CHARACTER(LEN=255) :: ErrMsg, ThisLoc, LOC
143 :
144 : !=======================================================================
145 : ! HCOX_INIT begins here!
146 : !=======================================================================
147 0 : LOC = 'HCOX_INIT (HCOX_DRIVER_MOD.F90)'
148 :
149 : ! Initialize
150 0 : RC = HCO_SUCCESS
151 0 : ErrMsg = ''
152 : ThisLoc = &
153 0 : ' -> at HCOX_INIT (in module HEMCO/Extensions/hcox_driver_mod.F90'
154 :
155 : ! Error handling
156 0 : CALL HCO_ENTER(HcoState%Config%Err, LOC, RC )
157 0 : IF ( RC /= HCO_SUCCESS ) THEN
158 0 : CALL HCO_ERROR( 'ERROR 0', RC, THISLOC=LOC )
159 0 : RETURN
160 : ENDIF
161 :
162 : !=======================================================================
163 : ! Initialize extensions
164 : !=======================================================================
165 0 : CALL ExtStateInit( ExtState, RC )
166 0 : IF ( RC /= HCO_SUCCESS ) THEN
167 0 : ErrMsg = 'Error encountered in "ExtState_Init"!'
168 0 : CALL HCO_ERROR( ErrMsg, RC, ThisLoc )
169 0 : RETURN
170 : ENDIF
171 :
172 : !=======================================================================
173 : ! The LIGHTNOX, PARANOX, and VOLCANO extensions read data files
174 : ! (lookup tables or text files) whose formats cannot be read by
175 : ! the HCOIO_READ_* routines. Therefore we need to always initialize
176 : ! these extensions so that we can print out the required file paths
177 : ! when performing a GEOS-Chem dry-run or HEMCO standalone dry-run.
178 : !=======================================================================
179 :
180 : !-----------------------------------------------------------------------
181 : ! ParaNox
182 : !-----------------------------------------------------------------------
183 0 : CALL HCOX_PARANOX_INIT( HcoState, 'ParaNOx', ExtState, RC )
184 0 : IF ( RC /= HCO_SUCCESS ) THEN
185 0 : ErrMsg = 'Error encountered in "HCOX_ParaNOx_Init"!'
186 0 : CALL HCO_ERROR( ErrMsg, RC, ThisLoc )
187 0 : RETURN
188 : ENDIF
189 :
190 : !-----------------------------------------------------------------------
191 : ! LightNox
192 : !-----------------------------------------------------------------------
193 0 : CALL HCOX_LightNox_Init( HcoState, 'LightNOx', ExtState, RC )
194 0 : IF ( RC /= HCO_SUCCESS ) THEN
195 0 : ErrMsg = 'Error encountered in "HCOX_LightNox_Init"!'
196 0 : CALL HCO_ERROR( ErrMsg, RC, ThisLoc )
197 0 : RETURN
198 : ENDIF
199 :
200 : !-----------------------------------------------------------------------
201 : ! Volcano emissions
202 : !-----------------------------------------------------------------------
203 0 : CALL HCOX_Volcano_Init( HcoState, 'Volcano', ExtState, RC )
204 0 : IF ( RC /= HCO_SUCCESS ) THEN
205 0 : ErrMsg = 'Error encountered in "HCOX_Volcano_Init"!'
206 0 : CALL HCO_ERROR( ErrMsg, RC, ThisLoc )
207 0 : RETURN
208 : ENDIF
209 :
210 : !=======================================================================
211 : ! We can skip initializing all of the other extensions when
212 : ! performing a GEOS-Chem dry-run or HEMCO standalone dry-run.
213 : !=======================================================================
214 0 : IF ( .not. HcoState%Options%isDryRun ) THEN
215 :
216 : !--------------------------------------------------------------------
217 : ! Custom
218 : !--------------------------------------------------------------------
219 0 : CALL HCOX_Custom_Init( HcoState, 'Custom', ExtState, RC )
220 0 : IF ( RC /= HCO_SUCCESS ) THEN
221 0 : ErrMsg = 'Error encountered in "HCOX_Custom_Init"!'
222 0 : CALL HCO_ERROR( ErrMsg, RC, ThisLoc )
223 0 : RETURN
224 : ENDIF
225 :
226 : !--------------------------------------------------------------------
227 : ! SeaFlux
228 : !--------------------------------------------------------------------
229 0 : CALL HCOX_SeaFlux_Init( HcoState, 'SeaFlux', ExtState, RC )
230 0 : IF ( RC /= HCO_SUCCESS ) THEN
231 0 : ErrMsg = 'Error encountered in "HCOX_SeaFlux_Init"!'
232 0 : CALL HCO_ERROR( ErrMsg, RC, ThisLoc )
233 0 : RETURN
234 : ENDIF
235 :
236 : !--------------------------------------------------------------------
237 : ! SoilNox
238 : !--------------------------------------------------------------------
239 0 : CALL HCOX_SoilNox_Init( HcoState, 'SoilNOx', ExtState, RC )
240 0 : IF ( RC /= HCO_SUCCESS ) THEN
241 0 : ErrMsg = 'Error encountered in "HCOX_SoilNox_Init"!'
242 0 : CALL HCO_ERROR( ErrMsg, RC, ThisLoc )
243 0 : RETURN
244 : ENDIF
245 :
246 : !--------------------------------------------------------------------
247 : ! Dust emissions (DEAD model)
248 : !--------------------------------------------------------------------
249 0 : CALL HCOX_DustDead_Init( HcoState, 'DustDead', ExtState, RC )
250 0 : IF ( RC /= HCO_SUCCESS ) THEN
251 0 : ErrMsg = 'Error encountered in "HCOX_DustDead_Init"!'
252 0 : CALL HCO_ERROR( ErrMsg, RC, ThisLoc )
253 0 : RETURN
254 : ENDIF
255 : #if defined( TOMAS )
256 : CALL HCOX_TOMAS_DustDead_Init( HcoState, 'TOMAS_DustDead', &
257 : ExtState, RC )
258 : IF ( RC /= HCO_SUCCESS ) THEN
259 : ErrMsg = 'Error encountered in "HCOX_TOMAS_DustDead_Init"!'
260 : CALL HCO_ERROR( ErrMsg, RC, ThisLoc )
261 : RETURN
262 : ENDIF
263 : #endif
264 :
265 : !--------------------------------------------------------------------
266 : ! Dust Ginoux emissions
267 : !--------------------------------------------------------------------
268 0 : CALL HCOX_DustGinoux_Init( HcoState, 'DustGinoux', ExtState, RC )
269 0 : IF ( RC /= HCO_SUCCESS ) THEN
270 0 : ErrMsg = 'Error encountered in "HCOX_DustGinoux_Init"!'
271 0 : CALL HCO_ERROR( ErrMsg, RC, ThisLoc )
272 0 : RETURN
273 : ENDIF
274 :
275 : !--------------------------------------------------------------------
276 : ! SeaSalt aerosol extension
277 : !--------------------------------------------------------------------
278 0 : CALL HCOX_SeaSalt_Init( HcoState, 'SeaSalt', ExtState, RC )
279 0 : IF ( RC /= HCO_SUCCESS ) THEN
280 0 : ErrMsg = 'Error encountered in "HCOX_SeaSalt_Init"!'
281 0 : CALL HCO_ERROR( ErrMsg, RC, ThisLoc )
282 0 : RETURN
283 : ENDIF
284 :
285 : !--------------------------------------------------------------------
286 : ! MEGAN extension
287 : !--------------------------------------------------------------------
288 0 : CALL HCOX_Megan_Init( HcoState, 'MEGAN', ExtState, RC )
289 0 : IF ( RC /= HCO_SUCCESS ) THEN
290 0 : ErrMsg = 'Error encountered in "HCOX_Megan_Init"!'
291 0 : CALL HCO_ERROR( ErrMsg, RC, ThisLoc )
292 0 : RETURN
293 : ENDIF
294 :
295 : !--------------------------------------------------------------------
296 : ! GFED extension
297 : !--------------------------------------------------------------------
298 0 : CALL HCOX_GFED_Init( HcoState, 'GFED', ExtState, RC )
299 0 : IF ( RC /= HCO_SUCCESS ) THEN
300 0 : ErrMsg = 'Error encountered in "HCOX_GFED_Init"!'
301 0 : CALL HCO_ERROR( ErrMsg, RC, ThisLoc )
302 0 : RETURN
303 : ENDIF
304 :
305 : !--------------------------------------------------------------------
306 : ! FINN biomass burning emissions
307 : !--------------------------------------------------------------------
308 0 : CALL HCOX_FINN_Init( HcoState, 'FINN', ExtState, RC )
309 0 : IF ( RC /= HCO_SUCCESS ) THEN
310 0 : ErrMsg = 'Error encountered in "HCOX_FINN_Init"!'
311 0 : CALL HCO_ERROR( ErrMsg, RC, ThisLoc )
312 0 : RETURN
313 : ENDIF
314 :
315 : !--------------------------------------------------------------------
316 : ! Extension for GEOS-Chem Rn-Pb-Be specialty simulation
317 : !--------------------------------------------------------------------
318 0 : CALL HCOX_GC_RnPbBe_Init( HcoState, 'GC_Rn-Pb-Be', ExtState, RC )
319 0 : IF ( RC /= HCO_SUCCESS ) THEN
320 0 : ErrMsg = 'Error encountered in "HCOX_GC_RnPbBe_Init"!'
321 0 : CALL HCO_ERROR( ErrMsg, RC, ThisLoc )
322 0 : RETURN
323 : ENDIF
324 :
325 : !--------------------------------------------------------------------
326 : ! Extension for GEOS-Chem POPs specialty simulation
327 : !--------------------------------------------------------------------
328 0 : CALL HCOX_GC_POPs_Init( HcoState, 'GC_POPs', ExtState, RC )
329 0 : IF ( RC /= HCO_SUCCESS ) THEN
330 0 : ErrMsg = 'Error encountered in "HCOX_GC_POPs_Init"!'
331 0 : CALL HCO_ERROR( ErrMsg, RC, ThisLoc )
332 0 : RETURN
333 : ENDIF
334 :
335 : !--------------------------------------------------------------------
336 : ! Ocean inorganic iodine emissions
337 : !--------------------------------------------------------------------
338 0 : CALL HCOX_Iodine_Init( HcoState, 'Inorg_Iodine', ExtState, RC )
339 0 : IF ( RC /= HCO_SUCCESS ) THEN
340 0 : ErrMsg = 'Error encountered in "HCOX_Iodine_Init"!'
341 0 : CALL HCO_ERROR( ErrMsg, RC, ThisLoc )
342 0 : RETURN
343 : ENDIF
344 :
345 : #if defined( TOMAS )
346 : !--------------------------------------------------------------------
347 : ! TOMAS sectional sea salt aerosol emissions
348 : !--------------------------------------------------------------------
349 : CALL HCOX_TOMAS_Jeagle_Init( HcoState, 'TOMAS_Jeagle', ExtState, RC )
350 : IF ( RC /= HCO_SUCCESS ) THEN
351 : ErrMsg = 'Error encountered in "HCOX_TOMAS_Jeagle_Init"!'
352 : CALL HCO_ERROR( ErrMsg, RC, ThisLoc )
353 : RETURN
354 : ENDIF
355 : #endif
356 :
357 : !--------------------------------------------------------------------
358 : ! Add extensions here ...
359 : !--------------------------------------------------------------------
360 : ENDIF
361 :
362 : !=======================================================================
363 : ! Sanity checks
364 : !=======================================================================
365 :
366 : ! Cannot have both DustDead and DustGinoux turned on!
367 0 : IF ( ExtState%DustDead > 0 .AND. ExtState%DustGinoux > 0 ) THEN
368 0 : ErrMsg = 'Ginoux and DEAD dust emissions switched on!'
369 0 : CALL HCO_ERROR( ErrMsg, RC, ThisLoc )
370 0 : RETURN
371 : ENDIF
372 :
373 : !=======================================================================
374 : ! Define diagnostics (can skip for dry-run)
375 : !=======================================================================
376 0 : IF ( .not. HcoState%Options%isDryRun ) THEN
377 0 : CALL HCOX_DiagnDefine( HcoState, ExtState, RC )
378 0 : IF ( RC /= HCO_SUCCESS ) THEN
379 0 : ErrMsg = 'Error encountered in "ExtState_Init"!'
380 0 : CALL HCO_ERROR( ErrMsg, RC, ThisLoc )
381 0 : RETURN
382 : ENDIF
383 : ENDIF
384 :
385 : !=======================================================================
386 : ! Leave w/ success
387 : !=======================================================================
388 0 : CALL HCO_LEAVE( HcoState%Config%Err,RC )
389 :
390 : END SUBROUTINE HCOX_Init
391 : !EOC
392 : !------------------------------------------------------------------------------
393 : ! Harmonized Emissions Component (HEMCO) !
394 : !------------------------------------------------------------------------------
395 : !BOP
396 : !
397 : ! !IROUTINE: HCOX_Run
398 : !
399 : ! !DESCRIPTION: Subroutine HCOX\_Run is the driver routine to run the HEMCO
400 : ! extensions. All enabled emission extensions are executed, and the
401 : ! emissions calculated therein become added to the respective flux arrays
402 : ! in HcoState.\\
403 : !\\
404 : !\\
405 : ! !INTERFACE:
406 : !
407 0 : SUBROUTINE HCOX_Run( HcoState, ExtState, RC )
408 : !
409 : ! !USES:
410 : !
411 : USE HCO_Clock_Mod, ONLY : HcoClock_Get
412 : USE HCOX_Custom_Mod, ONLY : HCOX_Custom_Run
413 : USE HCOX_SeaFlux_Mod, ONLY : HCOX_SeaFlux_Run
414 : USE HCOX_ParaNox_Mod, ONLY : HCOX_ParaNox_Run
415 : USE HCOX_LightNox_Mod, ONLY : HCOX_LightNox_Run
416 : USE HCOX_SoilNox_Mod, ONLY : HCOX_SoilNox_Run
417 : USE HCOX_DustDead_Mod, ONLY : HCOX_DustDead_Run
418 : USE HCOX_DustGinoux_Mod, ONLY : HCOX_DustGinoux_Run
419 : USE HCOX_SeaSalt_Mod, ONLY : HCOX_SeaSalt_Run
420 : USE HCOX_Megan_Mod, ONLY : HCOX_Megan_Run
421 : USE HCOX_GFED_Mod, ONLY : HCOX_GFED_Run
422 : USE HCOX_FINN_Mod, ONLY : HCOX_FINN_Run
423 : USE HCOX_GC_RnPbBe_Mod, ONLY : HCOX_GC_RnPbBe_Run
424 : USE HCOX_GC_POPs_Mod, ONLY : HCOX_GC_POPs_Run
425 : USE HCOX_Volcano_Mod, ONLY : HCOX_Volcano_Run
426 : USE HCOX_Iodine_Mod, ONLY : HCOX_Iodine_Run
427 : #if defined( TOMAS )
428 : USE HCOX_TOMAS_Jeagle_Mod, ONLY : HCOX_TOMAS_Jeagle_Run
429 : USE HCOX_TOMAS_DustDead_Mod, ONLY : HCOX_TOMAS_DustDead_Run
430 : #endif
431 : !
432 : ! !INPUT/OUTPUT PARAMETERS:
433 : !
434 : TYPE(HCO_State), POINTER :: HcoState ! HEMCO state object
435 : TYPE(Ext_State), POINTER :: ExtState ! Extension options object
436 : INTEGER, INTENT(INOUT) :: RC ! Failure or success
437 : !
438 : ! !NOTE:
439 : !
440 : ! The ExtState object contains all extension option objects. In particular,
441 : ! it contains the pointers to all met fields used by the extensions. These
442 : ! pointers have to be set in the HEMCO-model interface module beforehand!
443 : !
444 : ! !REVISION HISTORY:
445 : ! 15 Dec 2013 - C. Keller - Initial version
446 : ! See https://github.com/geoschem/hemco for complete history
447 : !EOP
448 : !------------------------------------------------------------------------------
449 : !BOC
450 : !
451 : ! !LOCAL VARIABLES:
452 : !
453 : CHARACTER(LEN=255) :: ErrMsg, ThisLoc, LOC
454 : LOGICAL :: IsEmisTime
455 :
456 : !=======================================================================
457 : ! HCOX_RUN begins here!
458 : !=======================================================================
459 :
460 : ! Initialize
461 0 : LOC = 'HCOX_RUN (HCOX_DRIVER_MOD.F90)'
462 0 : RC = HCO_SUCCESS
463 0 : ErrMsg = ''
464 0 : ThisLoc = ' -> at HCOX_RUN (in module HEMCO/Extensions/hcox_driver_mod.F90'
465 :
466 : ! For error handling
467 0 : CALL HCO_ENTER( HcoState%Config%Err, LOC, RC )
468 0 : IF ( RC /= HCO_SUCCESS ) THEN
469 0 : CALL HCO_ERROR( 'ERROR 1', RC, THISLOC=LOC )
470 0 : RETURN
471 : ENDIF
472 :
473 : ! Is it time for emissions?
474 0 : CALL HcoClock_Get ( HcoState%Clock, IsEmisTime=IsEmisTime, RC=RC )
475 0 : IF ( RC /= HCO_SUCCESS ) THEN
476 0 : CALL HCO_ERROR( 'ERROR 2', RC, THISLOC=LOC )
477 0 : RETURN
478 : ENDIF
479 :
480 : ! Can leave here if it's not time for emissions
481 0 : IF ( .NOT. IsEmisTime ) THEN
482 0 : CALL HCO_LEAVE( HcoState%Config%Err,RC )
483 0 : RETURN
484 : ENDIF
485 :
486 : !=======================================================================
487 : ! The VOLCANO extension is the only extension that reads data files
488 : ! from text files in the Run phase. Therefore, we always need to
489 : ! run the VOLCANO extension, so that we can print out the path names
490 : ! of files being read in to the dry-run log file.
491 : !=======================================================================
492 :
493 : !-----------------------------------------------------------------------
494 : ! AeroCom volcano emissions
495 : !-----------------------------------------------------------------------
496 0 : IF ( ExtState%Volcano > 0 ) THEN
497 0 : CALL HCOX_Volcano_Run( ExtState, HcoState, RC )
498 0 : IF ( RC /= HCO_SUCCESS ) THEN
499 0 : ErrMsg = 'Error encountered in "HCOX_Volcano_Run"!'
500 0 : CALL HCO_ERROR( ErrMsg, RC, ThisLoc )
501 0 : RETURN
502 : ENDIF
503 : ENDIF
504 :
505 : !=======================================================================
506 : ! We can skip running all of the other extensions when
507 : ! performing a GEOS-Chem dry-run or HEMCO standalone dry-run.
508 : !
509 : ! NOTE: LIGHTNING and PARANOX read data in the Init phase, and
510 : ! not the Run phase. So we can skip running these as well.
511 : !=======================================================================
512 0 : IF ( .not. HcoState%Options%isDryRun ) THEN
513 :
514 : !--------------------------------------------------------------------
515 : ! Customized emissions
516 : !--------------------------------------------------------------------
517 0 : IF ( ExtState%Custom > 0 ) THEN
518 0 : CALL HCOX_Custom_Run( ExtState, HcoState, RC)
519 0 : IF ( RC /= HCO_SUCCESS ) THEN
520 0 : ErrMsg = 'Error encountered in "HCOX_Custom_Run"!'
521 0 : CALL HCO_ERROR( ErrMsg, RC, ThisLoc )
522 0 : RETURN
523 : ENDIF
524 : ENDIF
525 :
526 : !--------------------------------------------------------------------
527 : ! SeaFlux (Air-sea exchange)
528 : !--------------------------------------------------------------------
529 0 : IF ( ExtState%SeaFlux > 0 ) THEN
530 0 : CALL HCOX_SeaFlux_Run( ExtState, HcoState, RC)
531 0 : IF ( RC /= HCO_SUCCESS ) THEN
532 0 : ErrMsg = 'Error encountered in "HCOX_SeaFlux_Run"!'
533 0 : CALL HCO_ERROR( ErrMsg, RC, ThisLoc )
534 0 : RETURN
535 : ENDIF
536 : ENDIF
537 :
538 : !--------------------------------------------------------------------
539 : ! ParaNox (Ship NO emissions)
540 : !--------------------------------------------------------------------
541 0 : IF ( ExtState%ParaNOx > 0 ) THEN
542 0 : CALL HCOX_ParaNox_Run( ExtState, HcoState, RC )
543 0 : IF ( RC /= HCO_SUCCESS ) THEN
544 0 : ErrMsg = 'Error encountered in "HCOX_ParaNOx_Run"!'
545 0 : CALL HCO_ERROR( ErrMsg, RC, ThisLoc )
546 0 : RETURN
547 : ENDIF
548 : ENDIF
549 :
550 : !--------------------------------------------------------------------
551 : ! Lightning NOx
552 : !--------------------------------------------------------------------
553 0 : IF ( ExtState%LightNOx > 0 ) THEN
554 0 : CALL HCOX_LightNox_Run( ExtState, HcoState, RC )
555 0 : IF ( RC /= HCO_SUCCESS ) THEN
556 0 : ErrMsg = 'Error encountered in "HCOX_LightNox_Run"!'
557 0 : CALL HCO_ERROR( ErrMsg, RC, ThisLoc )
558 0 : RETURN
559 : ENDIF
560 : ENDIF
561 :
562 : !--------------------------------------------------------------------
563 : ! SoilNOx
564 : !--------------------------------------------------------------------
565 0 : IF ( ExtState%SoilNOx > 0 ) THEN
566 0 : CALL HCOX_SoilNox_Run( ExtState, HcoState, RC )
567 0 : IF ( RC /= HCO_SUCCESS ) THEN
568 0 : ErrMsg = 'Error encountered in "HCOX_SoilNOx_Run"!'
569 0 : CALL HCO_ERROR( ErrMsg, RC, ThisLoc )
570 0 : RETURN
571 : ENDIF
572 : ENDIF
573 :
574 : !--------------------------------------------------------------------
575 : ! Dust emissions (DEAD model)
576 : !--------------------------------------------------------------------
577 0 : IF ( ExtState%DustDead > 0 ) THEN
578 0 : CALL HCOX_DustDead_Run( ExtState, HcoState, RC )
579 0 : IF ( RC /= HCO_SUCCESS ) THEN
580 0 : ErrMsg = 'Error encountered in "HCOX_DustDead_Run"!'
581 0 : CALL HCO_ERROR( ErrMsg, RC, ThisLoc )
582 0 : RETURN
583 : ENDIF
584 : ENDIF
585 :
586 : #ifdef TOMAS
587 : IF ( ExtState%TOMAS_DustDead > 0 ) THEN
588 : !print*, 'JACK TOMAS_DustDead is on'
589 : CALL HCOX_TOMAS_DustDead_Run( ExtState, HcoState, RC )
590 : IF ( RC /= HCO_SUCCESS ) THEN
591 : ErrMsg = 'Error encountered in "HCOX_TOMAS_DustDead_Run"!'
592 : CALL HCO_ERROR( ErrMsg, RC, ThisLoc )
593 : RETURN
594 : ENDIF
595 : ENDIF
596 : #endif
597 :
598 : !--------------------------------------------------------------------
599 : ! Dust emissions (Ginoux)
600 : !--------------------------------------------------------------------
601 0 : IF ( ExtState%DustGinoux > 0 ) THEN
602 0 : CALL HCOX_DustGinoux_Run( ExtState, HcoState, RC )
603 0 : IF ( RC /= HCO_SUCCESS ) THEN
604 0 : ErrMsg = 'Error encountered in "HCOX_DustGinoux_Run"!'
605 0 : CALL HCO_ERROR( ErrMsg, RC, ThisLoc )
606 0 : RETURN
607 : ENDIF
608 : ENDIF
609 :
610 : !--------------------------------------------------------------------
611 : ! Sea salt aerosols
612 : !--------------------------------------------------------------------
613 0 : IF ( ExtState%SeaSalt > 0 ) THEN
614 0 : CALL HCOX_SeaSalt_Run( ExtState, HcoState, RC )
615 0 : IF ( RC /= HCO_SUCCESS ) THEN
616 0 : ErrMsg = 'Error encountered in "HCOX_SeaSalt_Run"!'
617 0 : CALL HCO_ERROR( ErrMsg, RC, ThisLoc )
618 0 : RETURN
619 : ENDIF
620 : ENDIF
621 :
622 : !--------------------------------------------------------------------
623 : ! MEGAN biogenic emissions
624 : !--------------------------------------------------------------------
625 0 : IF ( ExtState%Megan > 0 ) THEN
626 0 : CALL HCOX_Megan_Run( ExtState, HcoState, RC )
627 0 : IF ( RC /= HCO_SUCCESS ) THEN
628 0 : ErrMsg = 'Error encountered in "HCOX__Run"!'
629 0 : CALL HCO_ERROR( ErrMsg, RC, ThisLoc )
630 0 : RETURN
631 : ENDIF
632 : ENDIF
633 :
634 : !--------------------------------------------------------------------
635 : ! GFED biomass burning emissions
636 : !--------------------------------------------------------------------
637 0 : IF ( ExtState%GFED > 0 ) THEN
638 0 : CALL HCOX_GFED_Run( ExtState, HcoState, RC )
639 0 : IF ( RC /= HCO_SUCCESS ) THEN
640 0 : ErrMsg = 'Error encountered in "HCOX_GFED_Run"!'
641 0 : CALL HCO_ERROR( ErrMsg, RC, ThisLoc )
642 0 : RETURN
643 : ENDIF
644 : ENDIF
645 :
646 : !--------------------------------------------------------------------
647 : ! FINN biomass burning emissions
648 : ! -------------------------------------------------------------------
649 0 : IF ( ExtState%FINN > 0 ) THEN
650 0 : CALL HCOX_FINN_Run( ExtState, HcoState, RC )
651 0 : IF ( RC /= HCO_SUCCESS ) THEN
652 0 : ErrMsg = 'Error encountered in "HCOX_FINN_Run"!'
653 0 : CALL HCO_ERROR( ErrMsg, RC, ThisLoc )
654 0 : RETURN
655 : ENDIF
656 : ENDIF
657 :
658 : !--------------------------------------------------------------------
659 : ! Emissions for GEOS-Chem Rn-Pb-Be specialty simulation
660 : !--------------------------------------------------------------------
661 0 : IF ( ExtState%GC_RnPbBe > 0 ) THEN
662 0 : CALL HCOX_GC_RnPbBe_Run( ExtState, HcoState, RC )
663 0 : IF ( RC /= HCO_SUCCESS ) THEN
664 0 : ErrMsg = 'Error encountered in "HCOX_GC_RnPbBe_Run"!'
665 0 : CALL HCO_ERROR( ErrMsg, RC, ThisLoc )
666 0 : RETURN
667 : ENDIF
668 : ENDIF
669 :
670 : !--------------------------------------------------------------------
671 : ! Emissions for GEOS-Chem POPs specialty simulation
672 : !--------------------------------------------------------------------
673 0 : IF ( ExtState%GC_POPs > 0 ) THEN
674 0 : CALL HCOX_GC_POPs_Run( ExtState, HcoState, RC )
675 0 : IF ( RC /= HCO_SUCCESS ) THEN
676 0 : ErrMsg = 'Error encountered in "HCOX_GC_POPs_Run"!'
677 0 : CALL HCO_ERROR( ErrMsg, RC, ThisLoc )
678 0 : RETURN
679 : ENDIF
680 : ENDIF
681 :
682 : #ifdef TOMAS
683 : !--------------------------------------------------------------------
684 : ! TOMAS sectional sea salt emissions
685 : !--------------------------------------------------------------------
686 : IF ( ExtState%TOMAS_Jeagle > 0 ) THEN
687 : CALL HCOX_TOMAS_Jeagle_Run( ExtState, HcoState, RC )
688 : IF ( RC /= HCO_SUCCESS ) THEN
689 : ErrMsg = 'Error encountered in "HCOX_TOMAS_Jeagle_Run"!'
690 : CALL HCO_ERROR( ErrMsg, RC, ThisLoc )
691 : RETURN
692 : ENDIF
693 : ENDIF
694 : #endif
695 :
696 : !--------------------------------------------------------------------
697 : ! Ocean inorganic iodine emissions
698 : !--------------------------------------------------------------------
699 0 : IF ( ExtState%Inorg_Iodine > 0 ) THEN
700 0 : CALL HCOX_Iodine_Run( ExtState, HcoState, RC )
701 0 : IF ( RC /= HCO_SUCCESS ) THEN
702 0 : ErrMsg = 'Error encountered in "HCOX_Iodine_Run"!'
703 0 : CALL HCO_ERROR( ErrMsg, RC, ThisLoc )
704 0 : RETURN
705 : ENDIF
706 : ENDIF
707 :
708 : !--------------------------------------------------------------------
709 : ! Add extensions here ...
710 : !--------------------------------------------------------------------
711 :
712 : !====================================================================
713 : ! Fill diagnostics
714 : !
715 : ! This updates the diagnostics defined in HCOX_DiagnDefine.
716 : ! Subroutine HCOIO_DIAGN_WRITEOUT can be used to write out
717 : ! diagnostics to disk. This subroutine is called in higher-level
718 : ! routines.
719 : !
720 : ! Skip for GEOS-Chem dry-run or HEMCO standalone dry-run
721 : !====================================================================
722 0 : CALL HCOX_DiagnFill( HcoState, ExtState, RC )
723 0 : IF ( RC /= HCO_SUCCESS ) THEN
724 0 : ErrMsg = 'Error encountered in "HCOX_DiagnFill_Run"!'
725 0 : CALL HCO_ERROR( ErrMsg, RC, ThisLoc )
726 0 : RETURN
727 : ENDIF
728 :
729 : ENDIF
730 :
731 : !=======================================================================
732 : ! Return w/ success
733 : !=======================================================================
734 0 : CALL HCO_LEAVE( HcoState%Config%Err, RC )
735 :
736 : END SUBROUTINE HCOX_Run
737 : !EOC
738 : !------------------------------------------------------------------------------
739 : ! Harmonized Emissions Component (HEMCO) !
740 : !------------------------------------------------------------------------------
741 : !BOP
742 : !
743 : ! !IROUTINE: HCOX_Final
744 : !
745 : ! !DESCRIPTION: Subroutine HCOX\_Final finalizes all HEMCO extensions.
746 : !\\
747 : !\\
748 : ! !INTERFACE:
749 : !
750 0 : SUBROUTINE HCOX_Final( HcoState, ExtState, RC )
751 : !
752 : ! !USES:
753 : !
754 : USE HCOX_State_Mod, ONLY : ExtStateFinal
755 : USE HCOX_Custom_Mod, ONLY : HCOX_Custom_Final
756 : USE HCOX_SeaFlux_Mod, ONLY : HCOX_SeaFlux_Final
757 : USE HCOX_ParaNOx_Mod, ONLY : HCOX_PARANOX_Final
758 : USE HCOX_LightNox_Mod, ONLY : HCOX_LightNox_Final
759 : USE HCOX_SoilNox_Mod, ONLY : HCOX_SoilNox_Final
760 : USE HCOX_DustDead_Mod, ONLY : HCOX_DustDead_Final
761 : USE HCOX_DustGinoux_Mod, ONLY : HCOX_DustGinoux_Final
762 : USE HCOX_SeaSalt_Mod, ONLY : HCOX_SeaSalt_Final
763 : USE HCOX_MEGAN_Mod, ONLY : HCOX_MEGAN_Final
764 : USE HCOX_GFED_Mod, ONLY : HCOX_GFED_Final
765 : USE HCOX_FINN_Mod, ONLY : HCOX_FINN_Final
766 : USE HCOX_GC_RnPbBe_Mod, ONLY : HCOX_GC_RnPbBe_Final
767 : USE HCOX_GC_POPs_Mod, ONLY : HCOX_GC_POPs_Final
768 : USE HCOX_Volcano_Mod, ONLY : HCOX_Volcano_Final
769 : USE HCOX_Iodine_Mod, ONLY : HCOX_Iodine_Final
770 : #if defined( TOMAS )
771 : USE HCOX_TOMAS_Jeagle_Mod, ONLY : HCOX_TOMAS_Jeagle_Final
772 : USE HCOX_TOMAS_DustDead_Mod, ONLY : HCOX_TOMAS_DustDead_Final
773 : #endif
774 : !
775 : ! !INPUT/OUTPUT PARAMETERS:
776 : !
777 : TYPE(HCO_State), POINTER :: HcoState ! HEMCO state object
778 : TYPE(Ext_State), POINTER :: ExtState ! Extension options object
779 : INTEGER, INTENT(INOUT) :: RC ! Failure or success
780 : !
781 : ! !REVISION HISTORY:
782 : ! 12 Sep 2013 - C. Keller - Initial version
783 : ! See https://github.com/geoschem/hemco for complete history
784 : !EOP
785 : !------------------------------------------------------------------------------
786 : !BOC
787 : !
788 : ! !LOCAL VARIABLES:
789 : !
790 :
791 : !=======================================================================
792 : ! HCOX_FINAL begins here!
793 : !=======================================================================
794 :
795 0 : IF ( ASSOCIATED( ExtState ) ) THEN
796 :
797 : ! Nullify all ExtState object pointers
798 0 : CALL ExtStateFinal( ExtState )
799 :
800 : !--------------------------------------------------------------------
801 : ! NOTE: For the GEOS-Chem dry-run or the HEMCO-standalone dry-run,
802 : ! we don't actually allocate any memory to the extensions. We only
803 : ! print out the file paths of data files that are read independently
804 : ! of the HCOIO_READ_* routines. Therefore, we can skip finalizing
805 : ! these extensions when performing a dry-run.
806 : !--------------------------------------------------------------------
807 0 : IF ( .not. HcoState%Options%IsDryRun ) THEN
808 :
809 : ! Call individual cleanup routines
810 0 : IF ( ExtState%Custom > 0 ) THEN
811 0 : CALL HCOX_Custom_Final ( ExtState )
812 : ENDIF
813 :
814 0 : IF ( ExtState%SeaFlux > 0 ) THEN
815 0 : CALL HCOX_SeaFlux_Final( ExtState )
816 : ENDIF
817 :
818 0 : IF ( ExtState%ParaNOx > 0 ) THEN
819 0 : CALL HCOX_PARANOX_Final( HcoState, ExtState, RC )
820 : ENDIF
821 :
822 0 : IF ( ExtState%LightNOx > 0 ) THEN
823 0 : CALL HCOX_LIGHTNOX_Final( ExtState )
824 : ENDIF
825 :
826 0 : IF ( ExtState%DustDead > 0 ) THEN
827 0 : CALL HCOX_DustDead_Final( ExtState )
828 : ENDIF
829 :
830 : #ifdef TOMAS
831 : IF ( ExtState%TOMAS_DustDead > 0 ) THEN
832 : CALL HCOX_TOMAS_DustDead_Final( ExtState )
833 : ENDIF
834 :
835 : IF ( ExtState%TOMAS_Jeagle > 0 ) THEN
836 : CALL HCOX_TOMAS_Jeagle_Final( ExtState )
837 : ENDIF
838 : #endif
839 0 : IF ( ExtState%DustGinoux > 0 ) THEN
840 0 : CALL HCOX_DustGinoux_Final( ExtState )
841 : ENDIF
842 :
843 0 : IF ( ExtState%SeaSalt > 0 ) THEN
844 0 : CALL HCOX_SeaSalt_Final( ExtState )
845 : ENDIF
846 :
847 0 : IF ( ExtState%Megan > 0 ) THEN
848 0 : CALL HCOX_Megan_Final( HcoState, ExtState, RC)
849 : ENDIF
850 :
851 0 : IF ( ExtState%GFED > 0 ) THEN
852 0 : CALL HCOX_GFED_Final( ExtState )
853 : ENDIF
854 :
855 0 : IF ( ExtState%SoilNOx > 0 ) THEN
856 0 : CALL HCOX_SoilNox_Final( HcoState, ExtState, RC )
857 : ENDIF
858 :
859 0 : IF ( ExtState%FINN > 0 ) THEN
860 0 : CALL HcoX_FINN_Final( ExtState )
861 : ENDIF
862 :
863 0 : IF ( ExtState%GC_RnPbBe > 0 ) THEN
864 0 : CALL HCOX_GC_RnPbBe_Final( ExtState )
865 : ENDIF
866 :
867 0 : IF ( ExtState%GC_POPs > 0 ) THEN
868 0 : CALL HCOX_GC_POPs_Final( ExtState )
869 : ENDIF
870 :
871 0 : IF ( ExtState%Volcano > 0 ) THEN
872 0 : CALL HCOX_Volcano_Final( ExtState )
873 : ENDIF
874 :
875 0 : IF ( ExtState%Inorg_Iodine > 0 ) THEN
876 0 : CALL HCOX_Iodine_Final( ExtState )
877 : ENDIF
878 :
879 : ENDIF
880 :
881 : ! Deallocate ExtState object
882 0 : DEALLOCATE( ExtState )
883 : ExtState => NULL()
884 : ENDIF
885 :
886 : ! Eventually deallocate diagnostics array
887 0 : IF ( ALLOCATED( DGN_LAI ) ) DEALLOCATE( DGN_LAI )
888 : ! IF ( ALLOCATED( DGN_T2M ) ) DEALLOCATE( DGN_T2M )
889 : ! IF ( ALLOCATED( DGN_GWET ) ) DEALLOCATE( DGN_GWET )
890 : ! IF ( ALLOCATED( DGN_U10M ) ) DEALLOCATE( DGN_U10M )
891 : ! IF ( ALLOCATED( DGN_V10M ) ) DEALLOCATE( DGN_V10M )
892 : ! IF ( ALLOCATED( DGN_PARDR ) ) DEALLOCATE( DGN_PARDR )
893 : ! IF ( ALLOCATED( DGN_PARDF ) ) DEALLOCATE( DGN_PARDF )
894 : ! IF ( ALLOCATED( DGN_SZAFACT ) ) DEALLOCATE( DGN_SZAFACT )
895 : ! IF ( ALLOCATED( DGN_CLDFRC ) ) DEALLOCATE( DGN_CLDFRC )
896 : ! IF ( ALLOCATED( DGN_ALBD ) ) DEALLOCATE( DGN_ALBD )
897 : ! IF ( ALLOCATED( DGN_WLI ) ) DEALLOCATE( DGN_WLI )
898 : ! IF ( ALLOCATED( DGN_TROPP ) ) DEALLOCATE( DGN_TROPP )
899 0 : IF ( ALLOCATED( DGN_SUNCOS ) ) DEALLOCATE( DGN_SUNCOS )
900 0 : IF ( ALLOCATED( DGN_DRYTOTN ) ) DEALLOCATE( DGN_DRYTOTN )
901 0 : IF ( ALLOCATED( DGN_WETTOTN ) ) DEALLOCATE( DGN_WETTOTN )
902 :
903 : ! Return w/ success
904 0 : RC = HCO_SUCCESS
905 :
906 0 : END SUBROUTINE HCOX_Final
907 : !EOC
908 : !------------------------------------------------------------------------------
909 : ! Harmonized Emissions Component (HEMCO) !
910 : !------------------------------------------------------------------------------
911 : !BOP
912 : !
913 : ! !IROUTINE: HCOX_DiagnDefine
914 : !
915 : ! !DESCRIPTION: Subroutine HCOX\_DiagnDefine creates custom-defined diagnostics.
916 : ! This is very preliminary and for testing only.
917 : !\\
918 : !\\
919 : ! !INTERFACE:
920 : !
921 0 : SUBROUTINE HCOX_DiagnDefine( HcoState, ExtState, RC )
922 : !
923 : ! !INPUT/OUTPUT PARAMETERS:
924 : !
925 : TYPE(HCO_State), POINTER :: HcoState ! HEMCO state object
926 : TYPE(Ext_State), POINTER :: ExtState ! Extension options object
927 : INTEGER, INTENT(INOUT) :: RC ! Failure or success
928 : !
929 : ! !REVISION HISTORY:
930 : ! 19 Feb 2015 - C. Keller - Initial version
931 : ! See https://github.com/geoschem/hemco for complete history
932 : !EOP
933 : !------------------------------------------------------------------------------
934 : !
935 : ! !LOCAL VARIABLES:
936 : !
937 : INTEGER :: I, J, AS
938 : INTEGER :: ExtNr, II
939 : CHARACTER(LEN=255) :: LOC = 'HCOX_DiagnDefine (hcox_driver_mod.F90)'
940 :
941 : !=======================================================================
942 : ! HCOX_DiagnDefine begins here!
943 : !=======================================================================
944 :
945 0 : I = HcoState%NX
946 0 : J = HcoState%NY
947 0 : ExtNr = -1
948 :
949 : IF ( DoDiagn ) THEN
950 :
951 : ALLOCATE( DGN_LAI(I,J), STAT=AS )
952 : IF ( AS /= 0 ) THEN
953 : CALL HCO_ERROR( 'Diagnostics allocation error 1', RC, THISLOC=LOC )
954 : RETURN
955 : ENDIF
956 : ! ALLOCATE( DGN_GWET(I,J), STAT=AS )
957 : ! IF ( AS /= 0 ) THEN
958 : ! CALL HCO_ERROR( 'Diagnostics allocation error 1', RC, THISLOC=LOC )
959 : ! RETURN
960 : ! ENDIF
961 : ! ALLOCATE( DGN_T2M(I,J), DGN_V10M(I,J), DGN_U10M(I,J), STAT=AS )
962 : ! IF ( AS /= 0 ) THEN
963 : ! CALL HCO_ERROR( 'Diagnostics allocation error 2', RC, THISLOC=LOC )
964 : ! RETURN
965 : ! ENDIF
966 : ! ALLOCATE( DGN_PARDR(I,J), DGN_PARDF(I,J), DGN_SZAFACT(I,J), STAT=AS )
967 : ! IF ( AS /= 0 ) THEN
968 : ! CALL HCO_ERROR( 'Diagnostics allocation error 3', RC, THISLOC=LOC )
969 : ! RETURN
970 : ! ENDIF
971 : ! ALLOCATE( DGN_CLDFRC(I,J), DGN_ALBD(I,J), DGN_WLI(I,J), STAT=AS )
972 : ! IF ( AS /= 0 ) THEN
973 : ! CALL HCO_ERROR( 'Diagnostics allocation error 4', RC, THISLOC=LOC )
974 : ! RETURN
975 : ! ENDIF
976 : ! ALLOCATE( DGN_TROPP(I,J), STAT=AS )
977 : ! IF ( AS /= 0 ) THEN
978 : ! CALL HCO_ERROR( 'Diagnostics allocation error 5', RC, THISLOC=LOC )
979 : ! RETURN
980 : ! ENDIF
981 :
982 : ALLOCATE( DGN_SUNCOS(I,J), DGN_DRYTOTN(I,J), DGN_WETTOTN(I,J), STAT=AS )
983 : IF ( AS /= 0 ) THEN
984 : CALL HCO_ERROR( 'Diagnostics allocation error 6', RC, THISLOC=LOC )
985 : RETURN
986 : ENDIF
987 :
988 : DGN_LAI = 0.0_sp
989 : ! DGN_T2M = 0.0_sp
990 : ! DGN_GWET = 0.0_sp
991 : ! DGN_V10M = 0.0_sp
992 : ! DGN_U10M = 0.0_sp
993 : ! DGN_PARDR = 0.0_sp
994 : ! DGN_PARDF = 0.0_sp
995 : ! DGN_SZAFACT = 0.0_sp
996 : ! DGN_CLDFRC = 0.0_sp
997 : ! DGN_ALBD = 0.0_sp
998 : ! DGN_WLI = 0.0_sp
999 : ! DGN_TROPP = 0.0_sp
1000 : DGN_SUNCOS = 0.0_sp
1001 : DGN_DRYTOTN = 0.0_sp
1002 : DGN_WETTOTN = 0.0_sp
1003 :
1004 : ! CALL DgnDefine ( HcoState, 'HCO_T2M', DGN_T2M, RC )
1005 : ! IF ( RC /= HCO_SUCCESS ) RETURN
1006 : !
1007 : ! CALL DgnDefine ( HcoState, 'HCO_GWET', DGN_GWET, RC )
1008 : ! IF ( RC /= HCO_SUCCESS ) RETURN
1009 : !
1010 : CALL DgnDefine ( HcoState, 'HCO_LAI', DGN_LAI, RC )
1011 : IF ( RC /= HCO_SUCCESS ) THEN
1012 : CALL HCO_ERROR( 'ERROR 3', RC, THISLOC=LOC )
1013 : RETURN
1014 : ENDIF
1015 :
1016 : ! CALL DgnDefine ( HcoState, 'HCO_U10M', DGN_U10M, RC )
1017 : ! IF ( RC /= HCO_SUCCESS ) RETURN
1018 : !
1019 : ! CALL DgnDefine ( HcoState, 'HCO_V10M', DGN_V10M, RC )
1020 : ! IF ( RC /= HCO_SUCCESS ) RETURN
1021 : !
1022 : ! CALL DgnDefine ( HcoState, 'HCO_PARDR', DGN_PARDR, RC )
1023 : ! IF ( RC /= HCO_SUCCESS ) RETURN
1024 : !
1025 : ! CALL DgnDefine ( HcoState, 'HCO_PARDF', DGN_PARDF, RC )
1026 : ! IF ( RC /= HCO_SUCCESS ) RETURN
1027 : !
1028 : ! CALL DgnDefine ( HcoState, 'HCO_SZAFACT', DGN_SZAFACT, RC )
1029 : ! IF ( RC /= HCO_SUCCESS ) RETURN
1030 : !
1031 : ! CALL DgnDefine ( HcoState, 'HCO_CLDFRC', DGN_CLDFRC, RC )
1032 : ! IF ( RC /= HCO_SUCCESS ) RETURN
1033 : !
1034 : ! CALL DgnDefine ( HcoState, 'HCO_ALBD', DGN_ALBD, RC )
1035 : ! IF ( RC /= HCO_SUCCESS ) RETURN
1036 : !
1037 : ! CALL DgnDefine ( HcoState, 'HCO_WLI', DGN_WLI, RC )
1038 : ! IF ( RC /= HCO_SUCCESS ) RETURN
1039 : !
1040 : ! CALL DgnDefine ( HcoState, 'HCO_TROPP', DGN_TROPP, RC )
1041 : ! IF ( RC /= HCO_SUCCESS ) RETURN
1042 :
1043 : CALL DgnDefine ( HcoState, 'HCO_SUNCOS', DGN_SUNCOS, RC )
1044 : IF ( RC /= HCO_SUCCESS ) THEN
1045 : CALL HCO_ERROR( 'ERROR 4', RC, THISLOC=LOC )
1046 : RETURN
1047 : ENDIF
1048 :
1049 : CALL DgnDefine ( HcoState, 'DRY_TOTN', DGN_DRYTOTN, RC )
1050 : IF ( RC /= HCO_SUCCESS ) THEN
1051 : CALL HCO_ERROR( 'ERROR 5', RC, THISLOC=LOC )
1052 : RETURN
1053 : ENDIF
1054 :
1055 : CALL DgnDefine ( HcoState, 'WET_TOTN', DGN_WETTOTN, RC )
1056 : IF ( RC /= HCO_SUCCESS ) THEN
1057 : CALL HCO_ERROR( 'ERROR 6', RC, THISLOC=LOC )
1058 : RETURN
1059 : ENDIF
1060 :
1061 : ENDIF
1062 :
1063 : ! Return w/ success
1064 0 : RC = HCO_SUCCESS
1065 :
1066 : END SUBROUTINE HCOX_DiagnDefine
1067 : !EOC
1068 : !------------------------------------------------------------------------------
1069 : ! Harmonized Emissions Component (HEMCO) !
1070 : !------------------------------------------------------------------------------
1071 : !BOP
1072 : !
1073 : ! !IROUTINE: DgnDefine
1074 : !
1075 : ! !DESCRIPTION: Helper routine to define a target diagnostics.
1076 : !\\
1077 : !\\
1078 : ! !INTERFACE:
1079 : !
1080 : SUBROUTINE DgnDefine ( HcoState, DgnName, Trgt2D, RC )
1081 : !
1082 : ! !USES:
1083 : !
1084 : USE HCO_DIAGN_MOD, ONLY : Diagn_Create
1085 : !
1086 : ! !INPUT/OUTPUT PARAMETERS:
1087 : !
1088 : TYPE(HCO_State), POINTER :: HcoState ! HEMCO state object
1089 : CHARACTER(LEN=*), INTENT(IN ) :: DgnName ! diagnostics name
1090 : REAL(sp), INTENT(IN ) :: Trgt2D(HcoState%NX,HcoState%NY)
1091 : INTEGER, INTENT(INOUT) :: RC ! Failure or success
1092 : !
1093 : ! !REVISION HISTORY:
1094 : ! 19 Feb 2015 - C. Keller - Initial version
1095 : ! See https://github.com/geoschem/hemco for complete history
1096 : !EOP
1097 : !------------------------------------------------------------------------------
1098 : !BOC
1099 : !
1100 : ! !LOCAL VARIABLES:
1101 : !
1102 : CHARACTER(LEN=255) :: LOC
1103 :
1104 : LOC = 'DgnDefine (HCOX_DRIVER_MOD.F90)'
1105 :
1106 : CALL Diagn_Create ( HcoState = HcoState, &
1107 : cName = TRIM(DgnName), &
1108 : ExtNr = -1, &
1109 : Cat = -1, &
1110 : Hier = -1, &
1111 : HcoID = -1, &
1112 : SpaceDim = 2, &
1113 : OutUnit = '1', &
1114 : AutoFill = 0, &
1115 : Trgt2D = Trgt2D, &
1116 : COL = HcoState%Diagn%HcoDiagnIDDefault, &
1117 : RC = RC )
1118 : IF ( RC /= HCO_SUCCESS ) THEN
1119 : CALL HCO_ERROR( 'ERROR 7', RC, THISLOC=LOC )
1120 : RETURN
1121 : ENDIF
1122 :
1123 : ! Return w/ success
1124 : RC = HCO_SUCCESS
1125 :
1126 : END SUBROUTINE DgnDefine
1127 : !EOC
1128 : !------------------------------------------------------------------------------
1129 : ! Harmonized Emissions Component (HEMCO) !
1130 : !------------------------------------------------------------------------------
1131 : !BOP
1132 : !
1133 : ! !IROUTINE: HCOX_DiagnFill
1134 : !
1135 : ! !DESCRIPTION: Subroutine HCOX\_DiagnFill fills custom-defined diagnostics.
1136 : !\\
1137 : !\\
1138 : ! !INTERFACE:
1139 : !
1140 0 : SUBROUTINE HCOX_DiagnFill( HcoState, ExtState, RC )
1141 : !
1142 : ! !INPUT/OUTPUT PARAMETERS:
1143 : !
1144 : TYPE(HCO_State), POINTER :: HcoState ! HEMCO state object
1145 : TYPE(Ext_State), POINTER :: ExtState ! Extension options object
1146 : INTEGER, INTENT(INOUT) :: RC ! Failure or success
1147 : !
1148 : ! !REVISION HISTORY:
1149 : ! 19 Feb 2015 - C. Keller - Initial version
1150 : ! See https://github.com/geoschem/hemco for complete history
1151 : !EOP
1152 : !------------------------------------------------------------------------------
1153 :
1154 : IF ( DoDiagn ) THEN
1155 : DGN_LAI = ExtState%LAI%Arr%Val
1156 : ! DGN_T2M = ExtState%T2M%Arr%Val
1157 : ! DGN_GWET = ExtState%GWETTOP%Arr%Val
1158 : ! DGN_U10M = ExtState%U10M%Arr%Val
1159 : ! DGN_V10M = ExtState%V10M%Arr%Val
1160 : ! DGN_PARDR = ExtState%PARDR%Arr%Val
1161 : ! DGN_PARDF = ExtState%PARDF%Arr%Val
1162 : ! DGN_SZAFACT = ExtState%SZAFACT%Arr%Val
1163 : ! DGN_CLDFRC = ExtState%CLDFRC%Arr%Val
1164 : ! DGN_ALBD = ExtState%ALBD%Arr%Val
1165 : ! DGN_WLI = ExtState%WLI%Arr%Val
1166 : ! DGN_TROPP = ExtState%TROPP%Arr%Val
1167 : DGN_SUNCOS = ExtState%SUNCOS%Arr%Val
1168 : DGN_DRYTOTN = ExtState%DRY_TOTN%Arr%Val
1169 : DGN_WETTOTN = ExtState%WET_TOTN%Arr%Val
1170 : ENDIF
1171 :
1172 : ! Return w/ success
1173 0 : RC = HCO_SUCCESS
1174 :
1175 0 : END SUBROUTINE HCOX_DiagnFill
1176 : !EOC
1177 : END MODULE HCOX_Driver_Mod
|