-
Notifications
You must be signed in to change notification settings - Fork 195
Expand file tree
/
Copy pathcleanup.F90
More file actions
198 lines (177 loc) · 5.89 KB
/
Copy pathcleanup.F90
File metadata and controls
198 lines (177 loc) · 5.89 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
!------------------------------------------------------------------------------
! GEOS-Chem Global Chemical Transport Model !
!------------------------------------------------------------------------------
!BOP
!
! !MODULE: cleanup.F90
!
! !DESCRIPTION: Subroutine CLEANUP deallocates the memory assigned to
! dynamically allocatable arrays just before exiting a GEOS-Chem simulation.
!\\
!\\
! !INTERFACE:
!
SUBROUTINE CLEANUP( Input_Opt, State_Grid, ERROR, RC )
!
! !USES:
!
USE CARBON_MOD, ONLY : CLEANUP_CARBON
USE Carbon_Gases_Mod, ONLY : Cleanup_Carbon_Gases
USE DEPO_MERCURY_MOD, ONLY : CLEANUP_DEPO_MERCURY
USE DRYDEP_MOD, ONLY : CLEANUP_DRYDEP
USE ErrCode_Mod
USE ERROR_MOD, ONLY : DEBUG_MSG
USE FullChem_MOD, ONLY : Cleanup_FullChem
USE GLOBAL_Br_MOD, ONLY : CLEANUP_GLOBAL_Br
USE History_Mod, ONLY : History_Cleanup
USE Input_Opt_Mod, ONLY : OptInput
USE AEROSOL_THERMODYNAMICS_MOD, ONLY : CLEANUP_ATE
USE LAND_MERCURY_MOD, ONLY : CLEANUP_LAND_MERCURY
USE LINEAR_CHEM_MOD, ONLY : CLEANUP_LINEAR_CHEM
USE MERCURY_MOD, ONLY : CLEANUP_MERCURY
USE ObsPack_Mod, ONLY : ObsPack_SpeciesMap_Cleanup
USE OCEAN_MERCURY_MOD, ONLY : CLEANUP_OCEAN_MERCURY
USE PJC_PFIX_MOD, ONLY : CLEANUP_PJC_PFIX
USE PLANEFLIGHT_MOD, ONLY : CLEANUP_PLANEFLIGHT
USE POPs_Mod, ONLY : Cleanup_POPs
USE PRESSURE_MOD, ONLY : CLEANUP_PRESSURE
USE SEASALT_MOD, ONLY : CLEANUP_SEASALT
USE SULFATE_MOD, ONLY : CLEANUP_SULFATE
USE State_Grid_Mod, ONLY : GrdState
USE EMISSIONS_MOD, ONLY : EMISSIONS_FINAL
USE SFCVMR_MOD, ONLY : FixSfcVmr_Final
USE VDiff_Mod, ONLY : Cleanup_Vdiff
#ifdef TOMAS
USE TOMAS_MOD, ONLY : CLEANUP_TOMAS !sfarina, 1/16/13
#endif
#ifdef MODEL_CLASSIC
USE TPCORE_FVDAS_MOD, ONLY : EXIT_TPCORE
USE TPCORE_WINDOW_MOD, ONLY : EXIT_TPCORE_WINDOW
USE TRANSPORT_MOD, ONLY : CLEANUP_TRANSPORT
#endif
#ifdef RRTMG
USE RRTMG_RAD_TRANSFER_MOD, ONLY : Cleanup_RRTMG_Rad_Transfer
#endif
IMPLICIT NONE
!
! !INPUT PARAMETERS:
!
TYPE(OptInput), INTENT(IN) :: Input_Opt ! Input options
TYPE(GrdState), INTENT(IN) :: State_Grid ! Grid state object
LOGICAL, INTENT(IN) :: ERROR ! Cleanup after error?
!
! !OUTPUT PARAMETERS:
!
INTEGER, INTENT(OUT) :: RC ! Success or failure
!
! !REVISION HISTORY:
! 29 Nov 1999 - R. Yantosca - Initial version
! See https://github.com/geoschem/geos-chem for complete history
!EOP
!------------------------------------------------------------------------------
!BOC
!
! !LOCAL VARIABLES:
!
! Strings
CHARACTER(LEN=255) :: ErrMsg, ThisLoc
!=================================================================
! CLEANUP begins here!
!=================================================================
! Initialize
RC = GC_SUCCESS
ErrMsg = ''
ThisLoc = ' -> at CLEANUP (in module GeosCore/cleanup.F)'
! Echo info
IF ( Input_Opt%amIRoot ) THEN
WRITE( 6, 100 )
ENDIF
100 FORMAT( ' - CLEANUP: deallocating arrays now...' )
!=================================================================
! ***** H I S T O R Y C L E A N U P *****
!
! Finalize the History Component.
! Also closes all netCDF files that may still be open.
!=================================================================
! Finalize the history component
CALL History_Cleanup( RC )
IF ( RC /= GC_SUCCESS ) THEN
ErrMsg = 'Error encountered in "History_Cleanup"!'
CALL GC_Error( ErrMsg, RC, ThisLoc )
RETURN
ENDIF
!=================================================================
! Cleanup HEMCO
!=================================================================
CALL EMISSIONS_FINAL( ERROR, RC )
! Cleanup surface mixing concentration module
CALL FixSfcVmr_Final( RC )
!=================================================================
! Call cleanup routines from individual F90 modules
!=================================================================
CALL CLEANUP_CARBON()
CALL CLEANUP_DRYDEP()
CALL CLEANUP_ATE()
CALL CLEANUP_PJC_PFIX()
CALL CLEANUP_PRESSURE()
CALL CLEANUP_SEASALT()
CALL CLEANUP_SULFATE()
CALL CLEANUP_LINEAR_CHEM()
CALL Cleanup_FullChem( RC )
IF ( RC /= GC_SUCCESS ) THEN
ErrMsg = 'Error encountered in "Cleanup_FlexChem"!'
CALL GC_Error( ErrMsg, RC, ThisLoc )
RETURN
ENDIF
CALL Cleanup_Carbon_Gases( RC )
IF ( RC /= GC_SUCCESS ) THEN
ErrMsg = 'Error encountered in "Cleanup_Carbon_Gases"!'
CALL GC_Error( ErrMsg, RC, ThisLoc )
RETURN
ENDIF
#if defined( MODEL_CLASSIC )
IF ( State_Grid%NestedGrid ) THEN
CALL EXIT_TPCORE_WINDOW()
ELSE
CALL EXIT_TPCORE()
ENDIF
#endif
CALL CLEANUP_MERCURY()
CALL CLEANUP_OCEAN_MERCURY()
CALL CLEANUP_DEPO_MERCURY()
CALL CLEANUP_LAND_MERCURY()
CALL CLEANUP_PLANEFLIGHT()
CALL Cleanup_Global_Br( RC )
IF ( RC /= GC_SUCCESS ) THEN
ErrMsg = 'Error encountered in "Cleanup_Global_Br"!'
CALL GC_Error( ErrMsg, RC, ThisLoc )
RETURN
ENDIF
CALL Cleanup_POPs( RC )
IF ( RC /= GC_SUCCESS ) THEN
ErrMsg = 'Error encountered in "Cleanup_POPs"!'
CALL GC_Error( ErrMsg, RC, ThisLoc )
RETURN
ENDIF
CALL CleanUp_Vdiff( RC )
IF ( RC /= GC_SUCCESS ) THEN
ErrMsg = 'Error encountered in "Cleanup_Vdiff"!'
CALL GC_Error( ErrMsg, RC, ThisLoc )
RETURN
ENDIF
#ifdef RRTMG
CALL Cleanup_RRTMG_Rad_Transfer( RC )
IF ( RC /= GC_SUCCESS ) THEN
ErrMsg = 'Error encountered in "Cleanup_RRTMG_Rad_Transfer"!'
CALL GC_Error( ErrMsg, RC, ThisLoc )
RETURN
ENDIF
#endif
#ifdef TOMAS
CALL CLEANUP_TOMAS()
#endif
#if defined( MODEL_CLASSIC )
CALL CLEANUP_TRANSPORT()
#endif
END SUBROUTINE CLEANUP
!EOC