C $Header: /home/ubuntu/mnt/e9_copy/MITgcm/pkg/dic/dic_biotic_forcing.F,v 1.7 2004/12/04 00:15:14 jmc Exp $ C $Name: $ #include "DIC_OPTIONS.h" #include "GCHEM_OPTIONS.h" CBOP C !ROUTINE: DIC_BIOTIC_FORCING C !INTERFACE: ========================================================== SUBROUTINE DIC_BIOTIC_FORCING( PTR_DIC, PTR_ALK, PTR_PO4, & PTR_DOP, PTR_O2, #ifdef ALLOW_FE & PTR_FE, #endif & bi,bj,imin,imax,jmin,jmax, & myIter,myTime,myThid) C !DESCRIPTION: C updates all the tracers for the effects of air-sea exchange, biological c activity and remineralization C !USES: =============================================================== IMPLICIT NONE #include "SIZE.h" #include "DYNVARS.h" #include "EEPARAMS.h" #include "PARAMS.h" #include "GRID.h" #include "DIC_BIOTIC.h" #include "DIC_ABIOTIC.h" C !INPUT PARAMETERS: =================================================== C myThid :: thread number C myIter :: current timestep C myTime :: current time C PTR_DIC :: dissolced inorganic carbon C PTR_ALK :: alkalinity C PTR_PO4 :: phosphate c PTR_DOP :: dissolve organic phosphurous c PTR_O2 :: oxygen C PTR_FE :: iron INTEGER myIter _RL myTime INTEGER myThid _RL PTR_DIC(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr) _RL PTR_ALK(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr) _RL PTR_PO4(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr) _RL PTR_DOP(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr) _RL PTR_O2(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr) #ifdef ALLOW_FE _RL PTR_FE(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr) #endif INTEGER bi, bj, imin, imax, jmin, jmax #ifdef ALLOW_PTRACERS #ifdef DIC_BIOTIC C !LOCAL VARIABLES: ==================================================== C i,j,k :: loop indices C G* :: tendency term for the tracers C SURA :: tendency of alkalinity due to freshwater C SURC :: tendency of DIC due to air-sea exchange C and virtual flux C SURO :: tendency of O2 due to air-sea exchange C BIO :: tendency of PO4 due to biological productivity, C exchange with DOP pool and reminerization C CAR :: carbonate changes due to biological C productivity and reminerization C bioac :: biological productivity C pflux :: changes to PO4 due to flux and reminerlization c cflux :: carbonate changes due to flux and reminerlization c freefe :: iron not bound to ligand _RL GDIC(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr) _RL GALK(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr) _RL GPO4(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) _RL SURA(1-OLx:sNx+OLx,1-OLy:sNy+OLy) _RL SURC(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 CAR(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr) _RL bioac(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr) _RL pflux(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr) _RL cflux(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr) #ifdef ALLOW_FE _RL GFE(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr) _RL freefe(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr) #endif INTEGER I,J,k CEOP DO k=1,Nr DO j=1-OLy,sNy+OLy DO i=1-OLx,sNx+OLx GDIC(i,j,k)=0.d0 GALK(i,j,k)=0.d0 GPO4(i,j,k)=0.d0 GDOP(i,j,k)=0.d0 GO2(i,j,k)=0.d0 SURA(i,j)=0.d0 SURC(i,j)=0.d0 CAR(i,j,k)=0.d0 BIO(i,j,k)=0.d0 bioac(i,j,k)=0.d0 pflux(i,j,k)=0.d0 cflux(i,j,k)=0.d0 #ifdef ALLOW_FE GFE(i,j,k)=0.d0 freefe(i,j,k)=0.d0 #endif ENDDO ENDDO ENDDO c carbon air-sea interaction CALL DIC_SURFFORCING( PTR_DIC, SURC, & bi,bj,imin,imax,jmin,jmax, & myIter,myTime,myThid) c alkalinity air-sea interaction CALL ALK_SURFFORCING( PTR_ALK, SURA, & bi,bj,imin,imax,jmin,jmax, & myIter,myTime,myThid) c carbon air-sea interaction CALL O2_SURFFORCING( PTR_O2, SURO, & bi,bj,imin,imax,jmin,jmax, & myIter,myTime,myThid) #ifdef ALLOW_FE c find free iron call fe_chem(bi,bj,iMin,iMax,jMin,jMax, PTR_FE, freefe, & myIter, mythid) #endif c biological activity CALL BIO_EXPORT( PTR_PO4 , #ifdef ALLOW_FE I PTR_FE, #endif I bioac, I bi,bj,imin,imax,jmin,jmax, I myIter,myTime,myThid) c flux of po4 from layers with biological activity CALL PHOS_FLUX( bioac, pflux, & bi,bj,imin,imax,jmin,jmax, & myIter,myTime,myThid) c carbonate CALL CAR_FLUX( bioac, cflux, & bi,bj,imin,imax,jmin,jmax, & myIter,myTime,myThid) c add all tendencies for PO4, DOP, ALK, DIC DO k=1,Nr DO j=1-OLy,sNy+OLy DO i=1-OLx,sNx+OLx bio(i,j,k)=-bioac(i,j,k)+pflux(i,j,k) & + maskC(i,j,k,bi,bj)*Kdopremin*PTR_DOP(i,j,k) car(i,j,k)=-bioac(i,j,k)* R_cp*rain_ratio(i,j,bi,bj)* & (1.0-DOPfraction)+cflux(i,j,k) GPO4(i,j,k)=bio(i,j,k) GDOP(i,j,k)=+bioac(i,j,k)*DOPfraction & - maskC(i,j,k,bi,bj)*Kdopremin*PTR_DOP(i,j,k) GALK(i,j,k)=+2.d0*car(i,j,k)-R_NP*bio(i,j,k) GDIC(i,j,k)=car(i,j,k)+R_CP*bio(i,j,k) if (PTR_O2(i,j,k).gt.o2crit) then GO2(i,j,k)=R_OP*bio(i,j,k) else GO2(i,j,k)=0.d0 endif #ifdef ALLOW_FE GFE(i,j,k)=R_FeP*bio(i,j,k) & -Kscav*freefe(i,j,k) #endif IF (K.eq.1) then GALK(i,j,1)=GALK(i,j,1)+SURA(i,j) GDIC(i,j,1)=GDIC(i,j,1)+SURC(i,j) GO2(i,j,1)=GO2(i,j,1)+SURO(i,j) #ifdef ALLOW_FE GFE(i,j,1)=GFE(i,j,1)+alpfe* & InputFe(i,j,bi,bj)/drF(1) #endif ENDIF ENDDO ENDDO ENDDO C update DO k=1,Nr DO j=1-OLy,sNy+OLy DO i=1-OLx,sNx+OLx PTR_DIC(i,j,k)= & PTR_DIC(i,j,k)+GDIC(i,j,k)*dTtracerLev(k) PTR_ALK(i,j,k)= & PTR_ALK(i,j,k)+GALK(i,j,k)*dTtracerLev(k) PTR_PO4(i,j,k)= & PTR_PO4(i,j,k)+GPO4(i,j,k)*dTtracerLev(k) PTR_DOP(i,j,k)= & PTR_DOP(i,j,k)+GDOP(i,j,k)*dTtracerLev(k) PTR_O2(i,j,k)= & PTR_O2(i,j,k)+GO2(i,j,k)*dTtracerLev(k) #ifdef ALLOW_FE PTR_FE(i,j,k)= & PTR_FE(i,j,k)+GFE(i,j,k)*dTtracerLev(k) #endif ENDDO ENDDO ENDDO #ifdef ALLOW_TIMEAVE c save averages DO k=1,Nr DO j=1-OLy,sNy+OLy DO i=1-OLx,sNx+OLx BIOave(i,j,k,bi,bj)=BIOave(i,j,k,bi,bj)+ & BIOac(i,j,k)*deltaTclock CARave(i,j,k,bi,bj)=CARave(i,j,k,bi,bj)+ & CAR(i,j,k)*deltaTclock if (k.eq.1) then SURave(i,j,bi,bj)=SURave(i,j,bi,bj)+ & SURC(i,j)*deltaTclock SUROave(i,j,bi,bj)=SUROave(i,j,bi,bj)+ & SURO(i,j)*deltaTclock pCO2ave(i,j,bi,bj)=pCO2ave(i,j,bi,bj)+ & pCO2(i,j,bi,bj)*deltaTclock pHave(i,j,bi,bj)=pHave(i,j,bi,bj)+ & pH(i,j,bi,bj)*deltaTclock fluxCO2ave(i,j,bi,bj)=fluxCO2ave(i,j,bi,bj)+ & fluxCO2(i,j,bi,bj)*deltaTclock endif ENDDO ENDDO ENDDO do k=1,Nr dic_timeave(bi,bj,k)=dic_timeave(bi,bj,k)+deltaTclock enddo #endif #endif #endif c RETURN END