/[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.20 - (hide annotations) (download)
Fri Apr 4 21:37:05 2008 UTC (16 years, 2 months ago) by dfer
Branch: MAIN
Changes since 1.19: +2 -3 lines
Merging DIC_ABIOTIC.h and DIC_BIOTIC.h

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

  ViewVC Help
Powered by ViewVC 1.1.22