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

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

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

revision 1.12 by stephd, Tue Nov 28 21:16:03 2006 UTC revision 1.19 by dfer, Wed Dec 12 01:41:26 2007 UTC
# Line 9  C !ROUTINE: DIC_BIOTIC_FORCING Line 9  C !ROUTINE: DIC_BIOTIC_FORCING
9    
10  C !INTERFACE: ==========================================================  C !INTERFACE: ==========================================================
11        SUBROUTINE DIC_BIOTIC_FORCING( PTR_DIC, PTR_ALK, PTR_PO4,        SUBROUTINE DIC_BIOTIC_FORCING( PTR_DIC, PTR_ALK, PTR_PO4,
12       &                            PTR_DOP, PTR_O2,       &                            PTR_DOP,
13    #ifdef ALLOW_O2
14         &                            PTR_O2,
15    #endif
16  #ifdef ALLOW_FE  #ifdef ALLOW_FE
17       &                            PTR_FE,       &                            PTR_FE,
18  #endif  #endif
# Line 47  C  PTR_FE               :: iron Line 50  C  PTR_FE               :: iron
50        _RL  PTR_ALK(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)        _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)        _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)        _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)        _RL  PTR_O2(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
55    #endif
56  #ifdef ALLOW_FE  #ifdef ALLOW_FE
57        _RL  PTR_FE(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)        _RL  PTR_FE(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
58  #endif  #endif
# Line 63  C  SURA                   :: tendency of Line 68  C  SURA                   :: tendency of
68  C  SURC                   :: tendency of DIC due to air-sea exchange  C  SURC                   :: tendency of DIC due to air-sea exchange
69  C                            and virtual flux  C                            and virtual flux
70  C  SURO                   :: tendency of O2 due to air-sea exchange  C  SURO                   :: tendency of O2 due to air-sea exchange
71  C  BIO                    :: tendency of PO4 due to biological productivity,  C  GPO4                   :: tendency of PO4 due to biological productivity,
72  C                            exchange with DOP pool and reminerization  C                            exchange with DOP pool and reminerization
73  C  CAR                    :: carbonate changes due to biological  C  CAR                    :: carbonate changes due to biological
74  C                             productivity and reminerization  C                             productivity and remineralization
75  C  bioac                  :: biological productivity  C  BIOac                  :: biological productivity
76  C  pflux                  :: changes to PO4 due to flux and reminerlization  C  RDOP                   :: DOP sink due to remineralization
77  c  cflux                  :: carbonate changes due to flux and reminerlization  C  pflux                  :: changes to PO4 due to flux and remineralization
78  c  freefe                 :: iron not bound to ligand  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)        _RL  GDIC(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
82        _RL  GALK(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)        _RL  GALK(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
83        _RL  GPO4(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)        _RL  GPO4(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
84        _RL  GDOP(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)        _RL  GDOP(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
       _RL  GO2(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)  
85        _RL  SURA(1-OLx:sNx+OLx,1-OLy:sNy+OLy)        _RL  SURA(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
86        _RL  SURC(1-OLx:sNx+OLx,1-OLy:sNy+OLy)        _RL  SURC(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
87        _RL  SURO(1-OLx:sNx+OLx,1-OLy:sNy+OLy)        _RL  SURO(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
       _RL  BIO(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)  
       _RL  BIO_kar(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)  
88        _RL  CAR(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)        _RL  CAR(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
89        _RL  bioac(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)        _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)        _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)        _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  #ifdef ALLOW_FE
99        _RL  GFE(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)        _RL  GFE(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
100        _RL  freefe(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)        _RL  freefe(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
# Line 100  CEOP Line 110  CEOP
110         DO k=1,Nr         DO k=1,Nr
111           DO j=1-OLy,sNy+OLy           DO j=1-OLy,sNy+OLy
112            DO i=1-OLx,sNx+OLx            DO i=1-OLx,sNx+OLx
113             GDIC(i,j,k)=0.d0             RDOP(i,j,k) =0. _d 0
114             GALK(i,j,k)=0.d0             GDIC(i,j,k) =0. _d 0
115             GPO4(i,j,k)=0.d0             GALK(i,j,k) =0. _d 0
116             GDOP(i,j,k)=0.d0             GPO4(i,j,k) =0. _d 0
117             GO2(i,j,k)=0.d0             GDOP(i,j,k) =0. _d 0
118             SURA(i,j)=0.d0             CAR(i,j,k)  =0. _d 0
119             SURC(i,j)=0.d0             BIOac(i,j,k)   =0. _d 0
120             CAR(i,j,k)=0.d0             pflux(i,j,k)   =0. _d 0
121             BIO(i,j,k)=0.d0             exportflux(i,j,k)=0. _d 0
122             BIO_kar(i,j,k)=0.d0             cflux(i,j,k)   =0. _d 0
123             bioac(i,j,k)=0.d0             CAR_S(i,j,k)   =0. _d 0
124             pflux(i,j,k)=0.d0  #ifdef ALLOW_O2
125             cflux(i,j,k)=0.d0             GO2(i,j,k)     =0. _d 0
126    #endif
127  #ifdef ALLOW_FE  #ifdef ALLOW_FE
128             GFE(i,j,k)=0.d0             GFE(i,j,k)     =0. _d 0
129             freefe(i,j,k)=0.d0             freefe(i,j,k)  =0. _d 0
130  #endif  #endif
131            ENDDO            ENDDO
132           ENDDO           ENDDO
133         ENDDO         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  c carbon air-sea interaction
143         CALL DIC_SURFFORCING( PTR_DIC, PTR_ALK, PTR_PO4, SURC,         CALL DIC_SURFFORCING( PTR_DIC, PTR_ALK, PTR_PO4, SURC,
# Line 131  c alkalinity air-sea interaction Line 149  c alkalinity air-sea interaction
149       &                    bi,bj,imin,imax,jmin,jmax,       &                    bi,bj,imin,imax,jmin,jmax,
150       &                    myIter,myTime,myThid)       &                    myIter,myTime,myThid)
151    
152  c carbon air-sea interaction  #ifdef ALLOW_O2
153    c oxygen air-sea interaction
154         CALL O2_SURFFORCING( PTR_O2, SURO,         CALL O2_SURFFORCING( PTR_O2, SURO,
155       &                    bi,bj,imin,imax,jmin,jmax,       &                    bi,bj,imin,imax,jmin,jmax,
156       &                    myIter,myTime,myThid)       &                    myIter,myTime,myThid)
157    #endif
158    
159  #ifdef ALLOW_FE  #ifdef ALLOW_FE
160  c find free iron  c find free iron
# Line 148  c biological activity Line 168  c biological activity
168  #ifdef ALLOW_FE  #ifdef ALLOW_FE
169       I           PTR_FE,       I           PTR_FE,
170  #endif  #endif
171       I           bioac,       I           BIOac,
172       I           bi,bj,imin,imax,jmin,jmax,       I           bi,bj,imin,imax,jmin,jmax,
173       I           myIter,myTime,myThid)       I           myIter,myTime,myThid)
174    
175  c flux of po4 from layers with biological activity  c flux of po4 from layers with biological activity
176         CALL PHOS_FLUX( bioac, pflux,         CALL PHOS_FLUX( BIOac, pflux, exportflux,
177       &                    bi,bj,imin,imax,jmin,jmax,       &                    bi,bj,imin,imax,jmin,jmax,
178       &                    myIter,myTime,myThid)       &                    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  c carbonate
191  #ifdef CAR_DISS  #ifdef CAR_DISS
192  c dissolution only below saturation horizon  c dissolution only below saturation horizon
# Line 169  c code following methid by Karsten Friis Line 199  c code following methid by Karsten Friis
199       I                    myIter,myTime,myThid)       I                    myIter,myTime,myThid)
200          ENDIF          ENDIF
201  c  c
202          CALL CAR_FLUX_OMEGA_TOP( bioac, cflux,          CALL CAR_FLUX_OMEGA_TOP( BIOac, cflux,
203       &                    bi,bj,imin,imax,jmin,jmax,       &                    bi,bj,imin,imax,jmin,jmax,
204       &                    myIter,myTime,myThid)       &                    myIter,myTime,myThid)
205  #else  #else
206  c old OCMIP way  c old OCMIP way
207          CALL CAR_FLUX( bioac, cflux,          CALL CAR_FLUX( CAR_S, cflux,
208       &                    bi,bj,imin,imax,jmin,jmax,       &                    bi,bj,imin,imax,jmin,jmax,
209       &                    myIter,myTime,myThid)       &                    myIter,myTime,myThid)
210  #endif  #endif
# Line 183  c add all tendencies for PO4, DOP, ALK, Line 213  c add all tendencies for PO4, DOP, ALK,
213         DO k=1,Nr         DO k=1,Nr
214           DO j=jmin,jmax           DO j=jmin,jmax
215            DO i=imin,imax            DO i=imin,imax
216             bio(i,j,k)=-bioac(i,j,k)+pflux(i,j,k)  #ifdef DIC_NO_NEG
217       &         + maskC(i,j,k,bi,bj)*Kdopremin*PTR_DOP(i,j,k)             RDOP(i,j,k)= MAX(maskC(i,j,k,bi,bj)*KDOPRemin*PTR_DOP(i,j,k)
218             car(i,j,k)=-bioac(i,j,k)* R_cp*rain_ratio(i,j,bi,bj)*       &                     ,0. _d 0)
219       &                (1.0-DOPfraction)+cflux(i,j,k)  #else
220             GPO4(i,j,k)=bio(i,j,k)             RDOP(i,j,k)= maskC(i,j,k,bi,bj)*KDOPRemin*PTR_DOP(i,j,k)
221             GDOP(i,j,k)=+bioac(i,j,k)*DOPfraction  #endif
222       &         - maskC(i,j,k,bi,bj)*Kdopremin*PTR_DOP(i,j,k)             GPO4(i,j,k)=-BIOac(i,j,k)+pflux(i,j,k) + RDOP(i,j,k)
223             GALK(i,j,k)=+2.d0*car(i,j,k)-R_NP*bio(i,j,k)  
224             BIO_kar(i,j,k)=R_NP*bio(i,j,k)             car(i,j,k) = cflux(i,j,k) - CAR_S(i,j,k)
225             GDIC(i,j,k)=car(i,j,k)+R_CP*bio(i,j,k)  
226             if (PTR_O2(i,j,k).gt.o2crit) then             GDOP(i,j,k)=+BIOac(i,j,k)*DOPfraction - RDOP(i,j,k)
227               GO2(i,j,k)=R_OP*bio(i,j,k)  
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             else
236               GO2(i,j,k)=0.d0               GO2(i,j,k)= 0. _d 0
237             endif             endif
238    #endif
239  #ifdef ALLOW_FE  #ifdef ALLOW_FE
240             GFE(i,j,k)=R_FeP*bio(i,j,k)             GFE(i,j,k) = R_FeP*GPO4(i,j,k)
241       &             -Kscav*freefe(i,j,k)       &                 -Kscav*freefe(i,j,k)
242  #endif  #endif
243             IF (K.eq.1) then            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)                 GALK(i,j,1)=GALK(i,j,1)+SURA(i,j)
250                 GDIC(i,j,1)=GDIC(i,j,1)+SURC(i,j)                 GDIC(i,j,1)=GDIC(i,j,1)+SURC(i,j)
251                 GO2(i,j,1)=GO2(i,j,1)+SURO(i,j)  #ifdef ALLOW_O2
252                   GO2(i,j,1) =GO2(i,j,1)+SURO(i,j)
253    #endif
254  #ifdef ALLOW_FE  #ifdef ALLOW_FE
255                 GFE(i,j,1)=GFE(i,j,1)+alpfe*                 GFE(i,j,1)=GFE(i,j,1)+alpfe*
256       &                    InputFe(i,j,bi,bj)*recip_drF(1)       &                    InputFe(i,j,bi,bj)*recip_drF(1)
257       &                       *recip_hFacC(i,j,1,bi,bj)       &                       *recip_hFacC(i,j,1,bi,bj)
258  #endif  #endif
            ENDIF  
259            ENDDO            ENDDO
260           ENDDO           ENDDO
        ENDDO  
261    
262    
263  C update  C update
# Line 229  C update Line 272  C update
272       &      PTR_PO4(i,j,k)+GPO4(i,j,k)*dTtracerLev(k)       &      PTR_PO4(i,j,k)+GPO4(i,j,k)*dTtracerLev(k)
273             PTR_DOP(i,j,k)=             PTR_DOP(i,j,k)=
274       &      PTR_DOP(i,j,k)+GDOP(i,j,k)*dTtracerLev(k)       &      PTR_DOP(i,j,k)+GDOP(i,j,k)*dTtracerLev(k)
275    #ifdef ALLOW_O2
276             PTR_O2(i,j,k)=             PTR_O2(i,j,k)=
277       &      PTR_O2(i,j,k)+GO2(i,j,k)*dTtracerLev(k)       &      PTR_O2(i,j,k)+GO2(i,j,k)*dTtracerLev(k)
278    #endif
279  #ifdef ALLOW_FE  #ifdef ALLOW_FE
280             PTR_FE(i,j,k)=             PTR_FE(i,j,k)=
281       &      PTR_FE(i,j,k)+GFE(i,j,k)*dTtracerLev(k)       &      PTR_FE(i,j,k)+GFE(i,j,k)*dTtracerLev(k)
# Line 250  c find free iron and get rid of insolubl Line 295  c find free iron and get rid of insolubl
295    
296  #ifdef ALLOW_TIMEAVE  #ifdef ALLOW_TIMEAVE
297  c save averages  c save averages
298          IF ( taveFreq.GT.0. ) THEN
299        DO k=1,Nr        DO k=1,Nr
300           DO j=jmin,jmax           DO j=jmin,jmax
301            DO i=imin,imax            DO i=imin,imax
302              BIOave(i,j,k,bi,bj)=BIOave(i,j,k,bi,bj)+              BIOave(i,j,k,bi,bj)   =BIOave(i,j,k,bi,bj)+
303       &                          BIOac(i,j,k)*deltaTclock       &                             BIOac(i,j,k)*deltaTclock
304              CARave(i,j,k,bi,bj)=CARave(i,j,k,bi,bj)+              CARave(i,j,k,bi,bj)   =CARave(i,j,k,bi,bj)+
305       &                          CAR(i,j,k)*deltaTclock       &                             CAR(i,j,k)*deltaTclock
306              OmegaCave(i,j,k,bi,bj)= OmegaCave(i,j,k,bi,bj)+              OmegaCave(i,j,k,bi,bj)=OmegaCave(i,j,k,bi,bj)+
307       &                           OmegaC(i,j,k,bi,bj)*deltaTclock       &                             OmegaC(i,j,k,bi,bj)*deltaTclock
308              pfluxave(i,j,k,bi,bj)= pfluxave(i,j,k,bi,bj) +              pfluxave(i,j,k,bi,bj) =pfluxave(i,j,k,bi,bj) +
309       &                           pflux(i,j,k)*deltaTclock       &                             pflux(i,j,k)*deltaTclock
310              cfluxave(i,j,k,bi,bj)= cfluxave(i,j,k,bi,bj) +              epfluxave(i,j,k,bi,bj)=epfluxave(i,j,k,bi,bj) +
311       &                           cflux(i,j,k)*deltaTclock       &                             exportflux(i,j,k)*deltaTclock
312              if (k.eq.1) then              cfluxave(i,j,k,bi,bj) =cfluxave(i,j,k,bi,bj) +
313                SURave(i,j,bi,bj)=SURave(i,j,bi,bj)+       &                             cflux(i,j,k)*deltaTclock
314       &                          SURC(i,j)*deltaTclock            ENDDO
315                SUROave(i,j,bi,bj)=SUROave(i,j,bi,bj)+           ENDDO
316       &                           SURO(i,j)*deltaTclock        ENDDO
317                pCO2ave(i,j,bi,bj)=pCO2ave(i,j,bi,bj)+           DO j=jmin,jmax
318       &                           pCO2(i,j,bi,bj)*deltaTclock            DO i=imin,imax
319                pHave(i,j,bi,bj)=pHave(i,j,bi,bj)+                SURave(i,j,bi,bj)    =SURave(i,j,bi,bj)+
320       &                           pH(i,j,bi,bj)*deltaTclock       &                              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)+                fluxCO2ave(i,j,bi,bj)=fluxCO2ave(i,j,bi,bj)+
330       &                           fluxCO2(i,j,bi,bj)*deltaTclock       &                           fluxCO2(i,j,bi,bj)*deltaTclock
             endif  
331            ENDDO            ENDDO
332           ENDDO           ENDDO
       ENDDO  
333        do k=1,Nr        do k=1,Nr
334         dic_timeave(bi,bj,k)=dic_timeave(bi,bj,k)+deltaTclock         dic_timeave(bi,bj,k)=dic_timeave(bi,bj,k)+deltaTclock
335        enddo        enddo
336  #endif        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  #endif
354  #endif  
355          ENDIF
356    
357    #endif /* ALLOW_DIAGNOSTICS */
358    
359    #endif /* DIC_BIOTIC */
360    #endif /* ALLOW_PTRACERS */
361    
362  c  c
363         RETURN         RETURN

Legend:
Removed from v.1.12  
changed lines
  Added in v.1.19

  ViewVC Help
Powered by ViewVC 1.1.22