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

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

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


Revision 1.25 - (hide annotations) (download)
Sat Jan 2 22:59:16 2010 UTC (14 years, 5 months ago) by jmc
Branch: MAIN
CVS Tags: checkpoint63a, checkpoint63b, checkpoint63c, checkpoint63, checkpoint62c, checkpoint62b, checkpoint62a, checkpoint62g, checkpoint62f, checkpoint62e, checkpoint62d, checkpoint62k, checkpoint62j, checkpoint62i, checkpoint62h, checkpoint62o, checkpoint62n, checkpoint62m, checkpoint62l, checkpoint62s, checkpoint62r, checkpoint62q, checkpoint62p, checkpoint62w, checkpoint62v, checkpoint62u, checkpoint62t, checkpoint62z, checkpoint62y, checkpoint62x
Changes since 1.24: +17 -18 lines
time-ave: use simpler (no level index) cumulative-time counter: DIC_timeAve(bi,bj)

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

  ViewVC Help
Powered by ViewVC 1.1.22