/[MITgcm]/MITgcm/pkg/dic/dic_biotic_forcing.F
ViewVC logotype

Contents of /MITgcm/pkg/dic/dic_biotic_forcing.F

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


Revision 1.19 - (show annotations) (download)
Wed Dec 12 01:41:26 2007 UTC (16 years, 6 months ago) by dfer
Branch: MAIN
CVS Tags: checkpoint59m, checkpoint59l, checkpoint59o, checkpoint59n
Changes since 1.18: +7 -3 lines
Add to DIC_NO_NEG macro: do not allow for negative DOP remineralization.

1 C $Header: /u/gcmpack/MITgcm/pkg/dic/dic_biotic_forcing.F,v 1.18 2007/10/29 16:49:49 dfer Exp $
2 C $Name: $
3
4 #include "DIC_OPTIONS.h"
5 #include "GCHEM_OPTIONS.h"
6
7 CBOP
8 C !ROUTINE: DIC_BIOTIC_FORCING
9
10 C !INTERFACE: ==========================================================
11 SUBROUTINE DIC_BIOTIC_FORCING( PTR_DIC, PTR_ALK, PTR_PO4,
12 & PTR_DOP,
13 #ifdef ALLOW_O2
14 & PTR_O2,
15 #endif
16 #ifdef ALLOW_FE
17 & PTR_FE,
18 #endif
19 & bi,bj,imin,imax,jmin,jmax,
20 & myIter,myTime,myThid)
21
22 C !DESCRIPTION:
23 C updates all the tracers for the effects of air-sea exchange, biological
24 c activity and remineralization
25
26 C !USES: ===============================================================
27 IMPLICIT NONE
28 #include "SIZE.h"
29 #include "DYNVARS.h"
30 #include "EEPARAMS.h"
31 #include "PARAMS.h"
32 #include "GRID.h"
33 #include "DIC_BIOTIC.h"
34 #include "DIC_ABIOTIC.h"
35
36 C !INPUT PARAMETERS: ===================================================
37 C myThid :: thread number
38 C myIter :: current timestep
39 C myTime :: current time
40 C PTR_DIC :: dissolced inorganic carbon
41 C PTR_ALK :: alkalinity
42 C PTR_PO4 :: phosphate
43 c PTR_DOP :: dissolve organic phosphurous
44 c PTR_O2 :: oxygen
45 C PTR_FE :: iron
46 INTEGER myIter
47 _RL myTime
48 INTEGER myThid
49 _RL PTR_DIC(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
50 _RL PTR_ALK(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
51 _RL PTR_PO4(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
52 _RL PTR_DOP(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
53 #ifdef ALLOW_O2
54 _RL PTR_O2(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
55 #endif
56 #ifdef ALLOW_FE
57 _RL PTR_FE(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
58 #endif
59 INTEGER bi, bj, imin, imax, jmin, jmax
60
61 #ifdef ALLOW_PTRACERS
62 #ifdef DIC_BIOTIC
63
64 C !LOCAL VARIABLES: ====================================================
65 C i,j,k :: loop indices
66 C G* :: tendency term for the tracers
67 C SURA :: tendency of alkalinity due to freshwater
68 C SURC :: tendency of DIC due to air-sea exchange
69 C and virtual flux
70 C SURO :: tendency of O2 due to air-sea exchange
71 C GPO4 :: tendency of PO4 due to biological productivity,
72 C exchange with DOP pool and reminerization
73 C CAR :: carbonate changes due to biological
74 C productivity and remineralization
75 C BIOac :: biological productivity
76 C RDOP :: DOP sink due to remineralization
77 C pflux :: changes to PO4 due to flux and remineralization
78 C CAR_S :: carbonate sink
79 C cflux :: carbonate changes due to flux and remineralization
80 C freefe :: iron not bound to ligand
81 _RL GDIC(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
82 _RL GALK(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
83 _RL GPO4(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
84 _RL GDOP(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
85 _RL SURA(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
86 _RL SURC(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
87 _RL SURO(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
88 _RL CAR(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
89 _RL BIOac(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
90 _RL RDOP(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
91 _RL pflux(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
92 _RL exportflux(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
93 _RL CAR_S(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
94 _RL cflux(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
95 #ifdef ALLOW_O2
96 _RL GO2(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
97 #endif
98 #ifdef ALLOW_FE
99 _RL GFE(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
100 _RL freefe(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
101 #endif
102 INTEGER I,J,k
103 INTEGER nCALCITEstep
104 CEOP
105 jmin=1
106 jmax=sNy
107 imin=1
108 imax=sNx
109
110 DO k=1,Nr
111 DO j=1-OLy,sNy+OLy
112 DO i=1-OLx,sNx+OLx
113 RDOP(i,j,k) =0. _d 0
114 GDIC(i,j,k) =0. _d 0
115 GALK(i,j,k) =0. _d 0
116 GPO4(i,j,k) =0. _d 0
117 GDOP(i,j,k) =0. _d 0
118 CAR(i,j,k) =0. _d 0
119 BIOac(i,j,k) =0. _d 0
120 pflux(i,j,k) =0. _d 0
121 exportflux(i,j,k)=0. _d 0
122 cflux(i,j,k) =0. _d 0
123 CAR_S(i,j,k) =0. _d 0
124 #ifdef ALLOW_O2
125 GO2(i,j,k) =0. _d 0
126 #endif
127 #ifdef ALLOW_FE
128 GFE(i,j,k) =0. _d 0
129 freefe(i,j,k) =0. _d 0
130 #endif
131 ENDDO
132 ENDDO
133 ENDDO
134 DO j=1-OLy,sNy+OLy
135 DO i=1-OLx,sNx+OLx
136 SURA(i,j) =0. _d 0
137 SURC(i,j) =0. _d 0
138 SURO(i,j) =0. _d 0
139 ENDDO
140 ENDDO
141
142 c carbon air-sea interaction
143 CALL DIC_SURFFORCING( PTR_DIC, PTR_ALK, PTR_PO4, SURC,
144 & bi,bj,imin,imax,jmin,jmax,
145 & myIter,myTime,myThid)
146
147 c alkalinity air-sea interaction
148 CALL ALK_SURFFORCING( PTR_ALK, SURA,
149 & bi,bj,imin,imax,jmin,jmax,
150 & myIter,myTime,myThid)
151
152 #ifdef ALLOW_O2
153 c oxygen air-sea interaction
154 CALL O2_SURFFORCING( PTR_O2, SURO,
155 & bi,bj,imin,imax,jmin,jmax,
156 & myIter,myTime,myThid)
157 #endif
158
159 #ifdef ALLOW_FE
160 c find free iron
161 call fe_chem(bi,bj,iMin,iMax,jMin,jMax, PTR_FE, freefe,
162 & myIter, mythid)
163 #endif
164
165
166 c biological activity
167 CALL BIO_EXPORT( PTR_PO4 ,
168 #ifdef ALLOW_FE
169 I PTR_FE,
170 #endif
171 I BIOac,
172 I bi,bj,imin,imax,jmin,jmax,
173 I myIter,myTime,myThid)
174
175 c flux of po4 from layers with biological activity
176 CALL PHOS_FLUX( BIOac, pflux, exportflux,
177 & bi,bj,imin,imax,jmin,jmax,
178 & myIter,myTime,myThid)
179
180 C- Carbonate sink
181 DO k=1,Nr
182 DO j=jmin,jmax
183 DO i=imin,imax
184 CAR_S(i,j,k)=BIOac(i,j,k)*R_CP*rain_ratio(i,j,bi,bj)*
185 & (1. _d 0-DOPfraction)
186 ENDDO
187 ENDDO
188 ENDDO
189
190 c carbonate
191 #ifdef CAR_DISS
192 c dissolution only below saturation horizon
193 c code following methid by Karsten Friis
194 nCALCITEstep = 3600
195 IF(myIter .lt. (nIter0+5) .or.
196 & mod(myIter,nCALCITEstep) .eq. 0)THEN
197 CALL CALCITE_SATURATION(PTR_DIC, PTR_ALK, PTR_PO4,
198 I bi,bj,imin,imax,jmin,jmax,
199 I myIter,myTime,myThid)
200 ENDIF
201 c
202 CALL CAR_FLUX_OMEGA_TOP( BIOac, cflux,
203 & bi,bj,imin,imax,jmin,jmax,
204 & myIter,myTime,myThid)
205 #else
206 c old OCMIP way
207 CALL CAR_FLUX( CAR_S, cflux,
208 & bi,bj,imin,imax,jmin,jmax,
209 & myIter,myTime,myThid)
210 #endif
211
212 c add all tendencies for PO4, DOP, ALK, DIC
213 DO k=1,Nr
214 DO j=jmin,jmax
215 DO i=imin,imax
216 #ifdef DIC_NO_NEG
217 RDOP(i,j,k)= MAX(maskC(i,j,k,bi,bj)*KDOPRemin*PTR_DOP(i,j,k)
218 & ,0. _d 0)
219 #else
220 RDOP(i,j,k)= maskC(i,j,k,bi,bj)*KDOPRemin*PTR_DOP(i,j,k)
221 #endif
222 GPO4(i,j,k)=-BIOac(i,j,k)+pflux(i,j,k) + RDOP(i,j,k)
223
224 car(i,j,k) = cflux(i,j,k) - CAR_S(i,j,k)
225
226 GDOP(i,j,k)=+BIOac(i,j,k)*DOPfraction - RDOP(i,j,k)
227
228 GALK(i,j,k)=+2. _d 0 *car(i,j,k)-R_NP*GPO4(i,j,k)
229
230 GDIC(i,j,k)=car(i,j,k)+R_CP*GPO4(i,j,k)
231
232 #ifdef ALLOW_O2
233 if (PTR_O2(i,j,k).GT.O2crit) then
234 GO2(i,j,k)= R_OP*GPO4(i,j,k)
235 else
236 GO2(i,j,k)= 0. _d 0
237 endif
238 #endif
239 #ifdef ALLOW_FE
240 GFE(i,j,k) = R_FeP*GPO4(i,j,k)
241 & -Kscav*freefe(i,j,k)
242 #endif
243 ENDDO
244 ENDDO
245 ENDDO
246
247 DO j=jmin,jmax
248 DO i=imin,imax
249 GALK(i,j,1)=GALK(i,j,1)+SURA(i,j)
250 GDIC(i,j,1)=GDIC(i,j,1)+SURC(i,j)
251 #ifdef ALLOW_O2
252 GO2(i,j,1) =GO2(i,j,1)+SURO(i,j)
253 #endif
254 #ifdef ALLOW_FE
255 GFE(i,j,1)=GFE(i,j,1)+alpfe*
256 & InputFe(i,j,bi,bj)*recip_drF(1)
257 & *recip_hFacC(i,j,1,bi,bj)
258 #endif
259 ENDDO
260 ENDDO
261
262
263 C update
264 DO k=1,Nr
265 DO j=jmin,jmax
266 DO i=imin,imax
267 PTR_DIC(i,j,k)=
268 & PTR_DIC(i,j,k)+GDIC(i,j,k)*dTtracerLev(k)
269 PTR_ALK(i,j,k)=
270 & PTR_ALK(i,j,k)+GALK(i,j,k)*dTtracerLev(k)
271 PTR_PO4(i,j,k)=
272 & PTR_PO4(i,j,k)+GPO4(i,j,k)*dTtracerLev(k)
273 PTR_DOP(i,j,k)=
274 & PTR_DOP(i,j,k)+GDOP(i,j,k)*dTtracerLev(k)
275 #ifdef ALLOW_O2
276 PTR_O2(i,j,k)=
277 & PTR_O2(i,j,k)+GO2(i,j,k)*dTtracerLev(k)
278 #endif
279 #ifdef ALLOW_FE
280 PTR_FE(i,j,k)=
281 & PTR_FE(i,j,k)+GFE(i,j,k)*dTtracerLev(k)
282 #endif
283 ENDDO
284 ENDDO
285 ENDDO
286
287 #ifdef ALLOW_FE
288 #ifdef MINFE
289 c find free iron and get rid of insoluble part
290 call fe_chem(bi,bj,iMin,iMax,jMin,jMax, PTR_FE, freefe,
291 & myIter, mythid)
292 #endif
293 #endif
294
295
296 #ifdef ALLOW_TIMEAVE
297 c save averages
298 IF ( taveFreq.GT.0. ) THEN
299 DO k=1,Nr
300 DO j=jmin,jmax
301 DO i=imin,imax
302 BIOave(i,j,k,bi,bj) =BIOave(i,j,k,bi,bj)+
303 & BIOac(i,j,k)*deltaTclock
304 CARave(i,j,k,bi,bj) =CARave(i,j,k,bi,bj)+
305 & CAR(i,j,k)*deltaTclock
306 OmegaCave(i,j,k,bi,bj)=OmegaCave(i,j,k,bi,bj)+
307 & OmegaC(i,j,k,bi,bj)*deltaTclock
308 pfluxave(i,j,k,bi,bj) =pfluxave(i,j,k,bi,bj) +
309 & pflux(i,j,k)*deltaTclock
310 epfluxave(i,j,k,bi,bj)=epfluxave(i,j,k,bi,bj) +
311 & exportflux(i,j,k)*deltaTclock
312 cfluxave(i,j,k,bi,bj) =cfluxave(i,j,k,bi,bj) +
313 & cflux(i,j,k)*deltaTclock
314 ENDDO
315 ENDDO
316 ENDDO
317 DO j=jmin,jmax
318 DO i=imin,imax
319 SURave(i,j,bi,bj) =SURave(i,j,bi,bj)+
320 & SURC(i,j)*deltaTclock
321 #ifdef ALLOW_O2
322 SUROave(i,j,bi,bj) =SUROave(i,j,bi,bj)+
323 & SURO(i,j)*deltaTclock
324 #endif
325 pCO2ave(i,j,bi,bj) =pCO2ave(i,j,bi,bj)+
326 & pCO2(i,j,bi,bj)*deltaTclock
327 pHave(i,j,bi,bj) =pHave(i,j,bi,bj)+
328 & pH(i,j,bi,bj)*deltaTclock
329 fluxCO2ave(i,j,bi,bj)=fluxCO2ave(i,j,bi,bj)+
330 & fluxCO2(i,j,bi,bj)*deltaTclock
331 ENDDO
332 ENDDO
333 do k=1,Nr
334 dic_timeave(bi,bj,k)=dic_timeave(bi,bj,k)+deltaTclock
335 enddo
336 ENDIF
337 #endif /* ALLOW_TIMEAVE*/
338
339 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
340
341 #ifdef ALLOW_DIAGNOSTICS
342
343 IF ( useDiagnostics ) THEN
344
345 CALL DIAGNOSTICS_FILL(BIOac ,'DICBIOA ',0,Nr,2,bi,bj,myThid)
346 CALL DIAGNOSTICS_FILL(CAR ,'DICCARB ',0,Nr,2,bi,bj,myThid)
347 CALL DIAGNOSTICS_FILL(pCO2 ,'DICPCO2 ',0,1 ,1,bi,bj,myThid)
348 CALL DIAGNOSTICS_FILL(fluxCO2,'DICCFLX ',0,1 ,1,bi,bj,myThid)
349 CALL DIAGNOSTICS_FILL(pH ,'DICPHAV ',0,1 ,1,bi,bj,myThid)
350 CALL DIAGNOSTICS_FILL(SURC ,'DICTFLX ',0,1 ,2,bi,bj,myThid)
351 #ifdef ALLOW_O2
352 CALL DIAGNOSTICS_FILL(SURO ,'DICOFLX ',0,1 ,2,bi,bj,myThid)
353 #endif
354
355 ENDIF
356
357 #endif /* ALLOW_DIAGNOSTICS */
358
359 #endif /* DIC_BIOTIC */
360 #endif /* ALLOW_PTRACERS */
361
362 c
363 RETURN
364 END

  ViewVC Help
Powered by ViewVC 1.1.22