/[MITgcm]/MITgcm/pkg/gchem/gchem_forcing_sep.F
ViewVC logotype

Contents of /MITgcm/pkg/gchem/gchem_forcing_sep.F

Parent Directory Parent Directory | Revision Log Revision Log | View Revision Graph Revision Graph


Revision 1.45 - (show annotations) (download)
Fri Dec 29 19:42:09 2017 UTC (6 years, 4 months ago) by jmc
Branch: MAIN
CVS Tags: checkpoint66o, checkpoint66n, HEAD
Changes since 1.44: +3 -3 lines
tracer diagnostics specific to Separate Forcing option

1 C $Header: /u/gcmpack/MITgcm/pkg/gchem/gchem_forcing_sep.F,v 1.44 2017/03/29 15:46:27 mmazloff Exp $
2 C $Name: $
3
4 #include "GCHEM_OPTIONS.h"
5 #ifdef ALLOW_DIC
6 # include "DIC_OPTIONS.h"
7 #endif
8 #ifdef ALLOW_BLING
9 # include "BLING_OPTIONS.h"
10 #endif
11 #ifdef ALLOW_DARWIN
12 # include "DARWIN_OPTIONS.h"
13 #endif
14
15 CBOP
16 C !ROUTINE: GCHEM_FORCING_SEP
17 C !INTERFACE: ==========================================================
18 SUBROUTINE GCHEM_FORCING_SEP( myTime, myIter, myThid )
19
20 C !DESCRIPTION:
21 C calls subroutine that will update passive tracers values
22 C with a separate timestep. Since GCHEM_FORCING_SEP is now
23 C called before DO_FIELDS_BLOCKING_EXCHANGES, the passive
24 C tracer values in the halo regions are not up to date and
25 C must not be used.
26
27 C !USES: ===============================================================
28 IMPLICIT NONE
29 #include "SIZE.h"
30 #include "EEPARAMS.h"
31 #include "PARAMS.h"
32 #include "GRID.h"
33 #include "DYNVARS.h"
34 #include "PTRACERS_SIZE.h"
35 #include "PTRACERS_PARAMS.h"
36 #include "PTRACERS_FIELDS.h"
37 #include "GCHEM.h"
38 #ifdef ALLOW_DIC
39 # include "DIC_VARS.h"
40 #endif /* ALLOW_DIC */
41 #ifdef ALLOW_BLING
42 # include "BLING_VARS.h"
43 #endif /* ALLOW_BLING */
44 #ifdef ALLOW_DARWIN
45 # include "DARWIN_FLUX.h"
46 # include "DARWIN_SIZE.h"
47 #endif
48
49 C !INPUT PARAMETERS: ===================================================
50 C myThid :: thread number
51 _RL myTime
52 INTEGER myIter, myThid
53 CEOP
54
55 #ifdef ALLOW_GCHEM
56 #ifdef GCHEM_SEPARATE_FORCING
57
58 C!LOCAL VARIABLES: ====================================================
59 C i,j :: loop indices
60 C bi,bj :: tile indices
61 C k :: vertical level
62 INTEGER bi,bj,iMin,iMax,jMin,jMax
63 c INTEGER i,j
64 PARAMETER( iMin = 1 , iMax = sNx )
65 PARAMETER( jMin = 1 , jMax = sNy )
66 #if (defined ALLOW_OBCS) || (defined ALLOW_DIAGNOSTICS)
67 INTEGER iTr
68 #endif
69 #ifdef ALLOW_DIAGNOSTICS
70 CHARACTER*8 diagName
71 #endif /* ALLOW_DIAGNOSTICS */
72
73 #ifdef ALLOW_DEBUG
74 IF (debugMode) CALL DEBUG_ENTER('GCHEM_FORCING_SEP',myThid)
75 #endif
76
77 #ifdef ALLOW_DIAGNOSTICS
78 IF ( useDiagnostics ) THEN
79 C-- fill-in tracer diagnostics before any GChem udate
80 DO iTr = 1,gchem_sepFTr_num
81 diagName = ' '
82 WRITE(diagName,'(A5,A2)') 'GC_Tr', PTRACERS_ioLabel(iTr)
83 CALL DIAGNOSTICS_FILL( pTracer(1-OLx,1-OLy,1,1,1,iTr), diagName,
84 & 0, Nr, 0, 1, 1, myThid )
85 ENDDO
86 ENDIF
87 #endif /* ALLOW_DIAGNOSTICS */
88
89 ccccccccccccccccccccccccc
90 c global calculations c
91 ccccccccccccccccccccccccc
92 #ifdef ALLOW_OLD_VIRTUALFLUX
93 #ifdef ALLOW_DIC
94 # ifdef ALLOW_AUTODIFF
95 IF ( .NOT.useDIC ) STOP 'ABNORMAL END: S/R GCHEM_FORCING_SEP (1)'
96 # else /* ALLOW_AUTODIFF */
97 IF ( useDIC ) THEN
98 # endif /* ALLOW_AUTODIFF */
99 c find global surface averages
100 gsm_s = 0. _d 0
101 gsm_dic = 0. _d 0
102 gsm_alk = 0. _d 0
103 CALL GCHEM_SURFMEAN(salt,gsm_s,myThid)
104 CALL GCHEM_SURFMEAN(
105 & pTracer(1-OLx,1-OLy,1,1,1,1), gsm_dic, myThid )
106 print*,'mean surface dic', gsm_dic,gsm_s
107 CALL GCHEM_SURFMEAN(
108 & pTracer(1-OLx,1-OLy,1,1,1,2), gsm_alk, myThid )
109 # ifndef ALLOW_AUTODIFF
110 ENDIF
111 # endif /* ALLOW_AUTODIFF */
112 #endif /* ALLOW_DIC */
113 #ifdef ALLOW_DARWIN
114 c IF ( useDARWIN ) THEN
115 c find global surface averages
116 gsm_s = 0. _d 0
117 gsm_dic = 0. _d 0
118 gsm_alk = 0. _d 0
119 CALL GCHEM_SURFMEAN(salt,gsm_s,myThid)
120 CALL GCHEM_SURFMEAN(
121 & pTracer(1-OLx,1-OLy,1,1,1,iDIC), gsm_dic, myThid )
122 print*,'mean surface dic', gsm_dic,gsm_s
123 CALL GCHEM_SURFMEAN(
124 & pTracer(1-OLx,1-OLy,1,1,1,iALK), gsm_alk, myThid )
125 c ENDIF
126 #endif
127 ccccccccccccccccccccccccccccccccccccccccccc
128 #endif /* ALLOW_OLD_VIRTUALFLUX */
129
130 #ifdef ALLOW_DARWIN
131 IF ( useDARWIN ) THEN
132 CALL DARWIN_CONS( myIter, myTime, myThid )
133 ENDIF
134 #endif
135
136 ccccccccccccccccccccccccc
137 c chemical forcing c
138 ccccccccccccccccccccccccc
139 C$taf loop = parallel
140 DO bj=myByLo(myThid),myByHi(myThid)
141 C$taf loop = parallel
142 DO bi=myBxLo(myThid),myBxHi(myThid)
143
144 ccccccccccccccccccccccccccc DIC cccccccccccccccccccccccccccccccc
145 #ifdef ALLOW_DIC
146 # ifdef ALLOW_AUTODIFF
147 IF (.NOT.useDIC) STOP 'ABNORMAL END: S/R GCHEM_FORCING_SEP (2)'
148 # else /* ALLOW_AUTODIFF */
149 IF ( useDIC ) THEN
150 # endif /* ALLOW_AUTODIFF */
151 #ifdef ALLOW_DEBUG
152 IF (debugMode) CALL DEBUG_CALL('DIC_BIOTIC_FORCING',myThid)
153 #endif
154 #ifdef ALLOW_FE
155 CALL DIC_BIOTIC_FORCING( pTracer(1-OLx,1-OLy,1,bi,bj,1),
156 & pTracer(1-OLx,1-OLy,1,bi,bj,2),
157 & pTracer(1-OLx,1-OLy,1,bi,bj,3),
158 & pTracer(1-OLx,1-OLy,1,bi,bj,4),
159 & pTracer(1-OLx,1-OLy,1,bi,bj,5),
160 & pTracer(1-OLx,1-OLy,1,bi,bj,6),
161 & bi, bj, iMin, iMax, jMin, jMax,
162 & myIter, myTime, myThid )
163 #else
164 #ifdef ALLOW_O2
165 CALL DIC_BIOTIC_FORCING( pTracer(1-OLx,1-OLy,1,bi,bj,1),
166 & pTracer(1-OLx,1-OLy,1,bi,bj,2),
167 & pTracer(1-OLx,1-OLy,1,bi,bj,3),
168 & pTracer(1-OLx,1-OLy,1,bi,bj,4),
169 & pTracer(1-OLx,1-OLy,1,bi,bj,5),
170 & bi, bj, iMin, iMax, jMin, jMax,
171 & myIter, myTime, myThid )
172 #else
173 CALL DIC_BIOTIC_FORCING( pTracer(1-OLx,1-OLy,1,bi,bj,1),
174 & pTracer(1-OLx,1-OLy,1,bi,bj,2),
175 & pTracer(1-OLx,1-OLy,1,bi,bj,3),
176 & pTracer(1-OLx,1-OLy,1,bi,bj,4),
177 & bi, bj, iMin, iMax, jMin, jMax,
178 & myIter, myTime, myThid )
179 #endif
180 #endif
181 # ifndef ALLOW_AUTODIFF
182 ENDIF
183 # endif /* ALLOW_AUTODIFF */
184 #endif /* ALLOW_DIC */
185 cccccccccccccccccccccccccc END DIC cccccccccccccccccccccccccccccccccc
186
187 ccccccccccccccccccccccccccc BLING cccccccccccccccccccccccccccccccc
188 #ifdef ALLOW_BLING
189 IF ( useBLING ) THEN
190 CALL BLING_MAIN( pTracer(1-OLx,1-OLy,1,bi,bj,1),
191 & pTracer(1-OLx,1-OLy,1,bi,bj,2),
192 & pTracer(1-OLx,1-OLy,1,bi,bj,3),
193 & pTracer(1-OLx,1-OLy,1,bi,bj,4),
194 & pTracer(1-OLx,1-OLy,1,bi,bj,5),
195 & pTracer(1-OLx,1-OLy,1,bi,bj,6),
196 & pTracer(1-OLx,1-OLy,1,bi,bj,7),
197 & pTracer(1-OLx,1-OLy,1,bi,bj,8),
198 # ifdef ADVECT_PHYTO
199 & pTracer(1-OLx,1-OLy,1,bi,bj,9),
200 # endif
201 & bi, bj, iMin, iMax, jMin, jMax,
202 & myIter, myTime, myThid )
203 ENDIF
204 #endif /* ALLOW_BLING */
205 cccccccccccccccccccccccccc END BLING cccccccccccccccccccccccccccccccccc
206
207 #ifdef ALLOW_DARWIN
208 IF ( useDARWIN ) THEN
209 #ifdef NUT_SUPPLY
210 c articficial supply of nutrients
211 #ifdef ALLOW_DEBUG
212 IF (debugMode) CALL DEBUG_CALL('DARWIN_NUT_SUPPLY',myThid)
213 #endif
214 CALL DARWIN_NUT_SUPPLY( pTracer(1-OLx,1-OLy,1,bi,bj,1),
215 & bi, bj, iMin, iMax, jMin, jMax,
216 & myIter, myTime, myThid )
217 CALL DARWIN_NUT_SUPPLY( pTracer(1-OLx,1-OLy,1,bi,bj,2),
218 & bi, bj, iMin, iMax, jMin, jMax,
219 & myIter, myTime, myThid )
220 CALL DARWIN_NUT_SUPPLY( pTracer(1-OLx,1-OLy,1,bi,bj,3),
221 & bi, bj, iMin, iMax, jMin, jMax,
222 & myIter, myTime, myThid )
223 CALL DARWIN_NUT_SUPPLY( pTracer(1-OLx,1-OLy,1,bi,bj,4),
224 & bi, bj, iMin, iMax, jMin, jMax,
225 & myIter, myTime, myThid )
226 #endif
227 ccccccccccccccc
228 C darwin_forcing operates on bi,bj part only, but needs to get full
229 C array because of last (iPtr) index
230 #ifdef ALLOW_DEBUG
231 IF (debugMode) CALL DEBUG_CALL('DARWIN_FORCING',myThid)
232 #endif
233 CALL DARWIN_FORCING( pTracer(1-OLx,1-OLy,1,1,1,1),
234 & bi, bj, iMin, iMax, jMin, jMax,
235 & myIter, myTime, myThid )
236 ENDIF
237 #endif /* ALLOW_DARWIN */
238
239 #ifdef ALLOW_OBCS
240 C-- Apply (again) open boundary conditions for each passive tracer
241 C Note: could skip this 2nd call to OBCS_APPLY if all DIC/DARWIN
242 C updates of ptracers were only done in the interior (i.e. with
243 C tendency multiplied by maskInC)
244 IF ( useOBCS .AND. .NOT.useDIC ) THEN
245 #ifdef ALLOW_DEBUG
246 IF (debugMode) CALL DEBUG_CALL('OBCS_APPLY_PTRACER',myThid)
247 #endif
248 DO iTr = 1,gchem_sepFTr_num
249 CALL OBCS_APPLY_PTRACER(
250 I bi, bj, 0, iTr,
251 U pTracer(1-OLx,1-OLy,1,bi,bj,iTr),
252 I myThid )
253 ENDDO
254 ENDIF
255 #endif /* ALLOW_OBCS */
256
257 ENDDO
258 ENDDO
259
260 #ifdef ALLOW_DARWIN
261 IF ( useDARWIN ) THEN
262 CALL DARWIN_CONS( myIter, myTime, myThid )
263 #ifdef ALLOW_CARBON
264 CALL DIC_ATMOS( 1, myTime, myIter, myThid )
265 #endif
266 ENDIF
267 #endif /* ALLOW_DARWIN */
268
269 #ifdef ALLOW_DIC
270 # ifdef ALLOW_AUTODIFF
271 IF ( .NOT.useDIC ) STOP 'ABNORMAL END: S/R GCHEM_FORCING_SEP (3)'
272 # else /* ALLOW_AUTODIFF */
273 IF ( useDIC ) THEN
274 # endif /* ALLOW_AUTODIFF */
275 #ifdef ALLOW_DEBUG
276 IF (debugMode) CALL DEBUG_CALL('DIC_ATMOS',myThid)
277 #endif
278 CALL DIC_ATMOS( myTime, myIter, myThid )
279 # ifdef COMPONENT_MODULE
280 CALL DIC_STORE_FLUXCO2( myTime, myIter, myThid )
281 # endif
282 # ifdef ALLOW_COST
283 CALL DIC_COST( myTime, myIter, myThid )
284 # endif
285 # ifndef ALLOW_AUTODIFF
286 ENDIF
287 # endif /* ALLOW_AUTODIFF */
288 #endif /* ALLOW_DIC */
289
290 #ifdef ALLOW_DEBUG
291 IF (debugMode) CALL DEBUG_LEAVE('GCHEM_FORCING_SEP',myThid)
292 #endif
293
294 #endif /* GCHEM_SEPARATE_FORCING */
295 #endif /* ALLOW_GCHEM */
296
297 RETURN
298 END

  ViewVC Help
Powered by ViewVC 1.1.22