/[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.18 by dfer, Mon Oct 29 16:49:49 2007 UTC revision 1.26 by dfer, Fri Oct 7 21:36:39 2011 UTC
# Line 2  C $Header$ Line 2  C $Header$
2  C $Name$  C $Name$
3    
4  #include "DIC_OPTIONS.h"  #include "DIC_OPTIONS.h"
 #include "GCHEM_OPTIONS.h"  
5    
6  CBOP  CBOP
7  C !ROUTINE: DIC_BIOTIC_FORCING  C !ROUTINE: DIC_BIOTIC_FORCING
8    
9  C !INTERFACE: ==========================================================  C !INTERFACE: ==========================================================
10        SUBROUTINE DIC_BIOTIC_FORCING( PTR_DIC, PTR_ALK, PTR_PO4,        SUBROUTINE DIC_BIOTIC_FORCING( PTR_DIC, PTR_ALK, PTR_PO4,
11       &                            PTR_DOP,       &                            PTR_DOP,
12  #ifdef ALLOW_O2  #ifdef ALLOW_O2
13       &                            PTR_O2,       &                            PTR_O2,
14  #endif  #endif
15  #ifdef ALLOW_FE  #ifdef ALLOW_FE
16       &                            PTR_FE,       &                            PTR_FE,
# Line 30  C !USES: =============================== Line 29  C !USES: ===============================
29  #include "EEPARAMS.h"  #include "EEPARAMS.h"
30  #include "PARAMS.h"  #include "PARAMS.h"
31  #include "GRID.h"  #include "GRID.h"
32  #include "DIC_BIOTIC.h"  #include "DIC_VARS.h"
33  #include "DIC_ABIOTIC.h"  #include "PTRACERS_SIZE.h"
34    #include "PTRACERS_PARAMS.h"
35    
36  C !INPUT PARAMETERS: ===================================================  C !INPUT PARAMETERS: ===================================================
37  C  myThid               :: thread number  C  myThid               :: thread number
# Line 70  C                            and virtual Line 70  C                            and virtual
70  C  SURO                   :: tendency of O2 due to air-sea exchange  C  SURO                   :: tendency of O2 due to air-sea exchange
71  C  GPO4                   :: 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 remineralization  C                             productivity and remineralization
75  C  BIOac                  :: biological productivity  C  BIOac                  :: biological productivity
76  C  RDOP                   :: DOP sink due to remineralization  C  RDOP                   :: DOP sink due to remineralization
77  C  pflux                  :: changes to PO4 due to flux and remineralization  C  pflux                  :: changes to PO4 due to flux and remineralization
78  C  CAR_S                  :: carbonate sink  C  CAR_S                  :: carbonate sink
79  C  cflux                  :: carbonate changes due to flux and remineralization  C  cflux                  :: carbonate changes due to flux and remineralization
80  C  freefe                 :: iron not bound to ligand  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)
# Line 99  C  freefe                 :: iron not bo Line 99  C  freefe                 :: iron not bo
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)
101  #endif  #endif
102         INTEGER I,J,k         INTEGER i,j,k
103    #ifdef CAR_DISS
104         INTEGER nCALCITEstep         INTEGER nCALCITEstep
105    #endif
106  CEOP  CEOP
        jmin=1  
        jmax=sNy  
        imin=1  
        imax=sNx  
107    
108         DO k=1,Nr         DO k=1,Nr
109           DO j=1-OLy,sNy+OLy           DO j=1-OLy,sNy+OLy
# Line 139  CEOP Line 137  CEOP
137            ENDDO            ENDDO
138           ENDDO           ENDDO
139    
140  c carbon air-sea interaction  C carbon air-sea interaction
141         CALL DIC_SURFFORCING( PTR_DIC, PTR_ALK, PTR_PO4, SURC,         CALL DIC_SURFFORCING( PTR_DIC, PTR_ALK, PTR_PO4, SURC,
142       &                    bi,bj,imin,imax,jmin,jmax,       &                    bi,bj,imin,imax,jmin,jmax,
143       &                    myIter,myTime,myThid)       &                    myIter,myTime,myThid)
144    
145  c alkalinity air-sea interaction  C alkalinity air-sea interaction
146         CALL ALK_SURFFORCING( PTR_ALK, SURA,         CALL ALK_SURFFORCING( PTR_ALK, SURA,
147       &                    bi,bj,imin,imax,jmin,jmax,       &                    bi,bj,imin,imax,jmin,jmax,
148       &                    myIter,myTime,myThid)       &                    myIter,myTime,myThid)
149    
150  #ifdef ALLOW_O2  #ifdef ALLOW_O2
151  c oxygen air-sea interaction  C oxygen air-sea interaction
152         CALL O2_SURFFORCING( PTR_O2, SURO,         CALL O2_SURFFORCING( PTR_O2, SURO,
153       &                    bi,bj,imin,imax,jmin,jmax,       &                    bi,bj,imin,imax,jmin,jmax,
154       &                    myIter,myTime,myThid)       &                    myIter,myTime,myThid)
155  #endif  #endif
156    
157  #ifdef ALLOW_FE  #ifdef ALLOW_FE
158  c find free iron  C find free iron
159         call fe_chem(bi,bj,iMin,iMax,jMin,jMax, PTR_FE, freefe,         CALL FE_CHEM(bi,bj,iMin,iMax,jMin,jMax, PTR_FE, freefe,
160       &                myIter, mythid)       &                myIter, mythid)
161  #endif  #endif
162    
163    
164  c biological activity  C biological activity
165         CALL BIO_EXPORT( PTR_PO4 ,         CALL BIO_EXPORT( PTR_PO4 ,
166  #ifdef ALLOW_FE  #ifdef ALLOW_FE
167       I           PTR_FE,       I           PTR_FE,
168  #endif  #endif
169       I           BIOac,       I           BIOac,
170       I           bi,bj,imin,imax,jmin,jmax,       I           bi,bj,imin,imax,jmin,jmax,
171       I           myIter,myTime,myThid)       I           myIter,myTime,myThid)
172    
173  c flux of po4 from layers with biological activity  C flux of po4 from layers with biological activity
174         CALL PHOS_FLUX( BIOac, pflux, exportflux,         CALL PHOS_FLUX( BIOac, pflux, exportflux,
175       &                    bi,bj,imin,imax,jmin,jmax,       &                    bi,bj,imin,imax,jmin,jmax,
176       &                    myIter,myTime,myThid)       &                    myIter,myTime,myThid)
# Line 182  C- Carbonate sink Line 180  C- Carbonate sink
180           DO j=jmin,jmax           DO j=jmin,jmax
181            DO i=imin,imax            DO i=imin,imax
182               CAR_S(i,j,k)=BIOac(i,j,k)*R_CP*rain_ratio(i,j,bi,bj)*               CAR_S(i,j,k)=BIOac(i,j,k)*R_CP*rain_ratio(i,j,bi,bj)*
183       &                    (1. _d 0-DOPfraction)       &                    (1. _d 0-DOPfraction)
184            ENDDO            ENDDO
185           ENDDO           ENDDO
186         ENDDO         ENDDO
187    
188  c carbonate  C carbonate
189  #ifdef CAR_DISS  #ifdef CAR_DISS
190  c dissolution only below saturation horizon  C dissolution only below saturation horizon
191  c code following methid by Karsten Friis  C code following method by Karsten Friis
192           nCALCITEstep = 3600           nCALCITEstep = 3600
193           IF(myIter .lt. (nIter0+5) .or.           IF(myIter .lt. (nIter0+5) .or.
194       &               mod(myIter,nCALCITEstep) .eq. 0)THEN       &               mod(myIter,nCALCITEstep) .eq. 0)THEN
# Line 203  c Line 201  c
201       &                    bi,bj,imin,imax,jmin,jmax,       &                    bi,bj,imin,imax,jmin,jmax,
202       &                    myIter,myTime,myThid)       &                    myIter,myTime,myThid)
203  #else  #else
204  c old OCMIP way  C old OCMIP way
205          CALL CAR_FLUX( CAR_S, cflux,          CALL CAR_FLUX( CAR_S, cflux,
206       &                    bi,bj,imin,imax,jmin,jmax,       &                    bi,bj,imin,imax,jmin,jmax,
207       &                    myIter,myTime,myThid)       &                    myIter,myTime,myThid)
208  #endif  #endif
209    
210  c add all tendencies for PO4, DOP, ALK, DIC  C add all tendencies for PO4, DOP, ALK, DIC
211         DO k=1,Nr         DO k=1,Nr
212           DO j=jmin,jmax           DO j=jmin,jmax
213            DO i=imin,imax            DO i=imin,imax
214             RDOP(i,j,k)= maskC(i,j,k,bi,bj)*KDOPRemin*PTR_DOP(i,j,k)  #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             GPO4(i,j,k)=-BIOac(i,j,k)+pflux(i,j,k) + RDOP(i,j,k)             GPO4(i,j,k)=-BIOac(i,j,k)+pflux(i,j,k) + RDOP(i,j,k)
221    
222             car(i,j,k) = cflux(i,j,k) - CAR_S(i,j,k)             car(i,j,k) = cflux(i,j,k) - CAR_S(i,j,k)
# Line 261  C update Line 263  C update
263           DO j=jmin,jmax           DO j=jmin,jmax
264            DO i=imin,imax            DO i=imin,imax
265             PTR_DIC(i,j,k)=             PTR_DIC(i,j,k)=
266       &      PTR_DIC(i,j,k)+GDIC(i,j,k)*dTtracerLev(k)       &      PTR_DIC(i,j,k)+GDIC(i,j,k)*PTRACERS_dTLev(k)
267             PTR_ALK(i,j,k)=             PTR_ALK(i,j,k)=
268       &      PTR_ALK(i,j,k)+GALK(i,j,k)*dTtracerLev(k)       &      PTR_ALK(i,j,k)+GALK(i,j,k)*PTRACERS_dTLev(k)
269             PTR_PO4(i,j,k)=             PTR_PO4(i,j,k)=
270       &      PTR_PO4(i,j,k)+GPO4(i,j,k)*dTtracerLev(k)       &      PTR_PO4(i,j,k)+GPO4(i,j,k)*PTRACERS_dTLev(k)
271             PTR_DOP(i,j,k)=             PTR_DOP(i,j,k)=
272       &      PTR_DOP(i,j,k)+GDOP(i,j,k)*dTtracerLev(k)       &      PTR_DOP(i,j,k)+GDOP(i,j,k)*PTRACERS_dTLev(k)
273  #ifdef ALLOW_O2  #ifdef ALLOW_O2
274             PTR_O2(i,j,k)=             PTR_O2(i,j,k)=
275       &      PTR_O2(i,j,k)+GO2(i,j,k)*dTtracerLev(k)       &      PTR_O2(i,j,k)+GO2(i,j,k)*PTRACERS_dTLev(k)
276  #endif  #endif
277  #ifdef ALLOW_FE  #ifdef ALLOW_FE
278             PTR_FE(i,j,k)=             PTR_FE(i,j,k)=
279       &      PTR_FE(i,j,k)+GFE(i,j,k)*dTtracerLev(k)       &      PTR_FE(i,j,k)+GFE(i,j,k)*PTRACERS_dTLev(k)
280  #endif  #endif
281            ENDDO            ENDDO
282           ENDDO           ENDDO
# Line 285  C update Line 287  C update
287  c find free iron and get rid of insoluble part  c find free iron and get rid of insoluble part
288         call fe_chem(bi,bj,iMin,iMax,jMin,jMax, PTR_FE, freefe,         call fe_chem(bi,bj,iMin,iMax,jMin,jMax, PTR_FE, freefe,
289       &                myIter, mythid)       &                myIter, mythid)
290  #endif  #endif
291  #endif  #endif
292    
293    
294  #ifdef ALLOW_TIMEAVE  #ifdef ALLOW_TIMEAVE
295  c save averages  C save averages
296        IF ( taveFreq.GT.0. ) THEN         IF ( taveFreq.GT.0. ) THEN
297        DO k=1,Nr          DO k=1,Nr
298           DO j=jmin,jmax           DO j=jmin,jmax
299            DO i=imin,imax            DO i=imin,imax
300              BIOave(i,j,k,bi,bj)   =BIOave(i,j,k,bi,bj)+              BIOave(i,j,k,bi,bj)   =BIOave(i,j,k,bi,bj)+
# Line 309  c save averages Line 311  c save averages
311       &                             cflux(i,j,k)*deltaTclock       &                             cflux(i,j,k)*deltaTclock
312            ENDDO            ENDDO
313           ENDDO           ENDDO
314        ENDDO          ENDDO
315           DO j=jmin,jmax           DO j=jmin,jmax
316            DO i=imin,imax            DO i=imin,imax
317                SURave(i,j,bi,bj)    =SURave(i,j,bi,bj)+                SURave(i,j,bi,bj)    =SURave(i,j,bi,bj)+
# Line 326  c save averages Line 328  c save averages
328       &                           fluxCO2(i,j,bi,bj)*deltaTclock       &                           fluxCO2(i,j,bi,bj)*deltaTclock
329            ENDDO            ENDDO
330           ENDDO           ENDDO
331        do k=1,Nr           DIC_timeAve(bi,bj) = DIC_timeAve(bi,bj)+deltaTclock
332         dic_timeave(bi,bj,k)=dic_timeave(bi,bj,k)+deltaTclock         ENDIF
       enddo  
       ENDIF  
333  #endif /* ALLOW_TIMEAVE*/  #endif /* ALLOW_TIMEAVE*/
334    
335  C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|  C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
# Line 355  C---+----1----+----2----+----3----+----4 Line 355  C---+----1----+----2----+----3----+----4
355  #endif /* DIC_BIOTIC */  #endif /* DIC_BIOTIC */
356  #endif /* ALLOW_PTRACERS */  #endif /* ALLOW_PTRACERS */
357    
 c  
358         RETURN         RETURN
359         END         END

Legend:
Removed from v.1.18  
changed lines
  Added in v.1.26

  ViewVC Help
Powered by ViewVC 1.1.22