/[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.2 - (hide annotations) (download)
Wed Jul 9 19:59:18 2003 UTC (20 years, 10 months ago) by stephd
Branch: MAIN
CVS Tags: checkpoint51e_post, checkpoint51f_pre, checkpoint51f_post, branchpoint-genmake2, checkpoint51g_post, checkpoint51d_post
Branch point for: branch-genmake2
Changes since 1.1: +2 -0 lines
add variable Si; fix bugs in dic_diags, dic_fields_load

1 stephd 1.1 C modified for external_forcing_DIC.F August 1999
2     CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
3     c
4     c modified swd Oct 01 and Feb 02, for use as package for c40_patch1
5     c modified to use with c44 and ptracers: swd May 2002
6     c modified to have carbonate and biological influences: swd June 2002
7     C
8    
9     #include "CPP_OPTIONS.h"
10     #include "GCHEM_OPTIONS.h"
11    
12     CStartOfInterFace
13     SUBROUTINE DIC_BIOTIC_FORCING( PTR_DIC, PTR_ALK, PTR_PO4,
14     & PTR_DOP, PTR_O2,
15     #ifdef ALLOW_FE
16     & PTR_FE,
17     #endif
18     & bi,bj,imin,imax,jmin,jmax,
19     & myIter,myTime,myThid)
20    
21     C /==========================================================\
22     C | SUBROUTINE DIC_BIOTIC_FORCING |
23     C | o Calculate the changes to DIC through air-sea fluxes |
24     C | carbonates, and biology (parameterizes by PO4) |
25     C |==========================================================|
26     IMPLICIT NONE
27    
28     C == GLobal variables ==
29     #include "SIZE.h"
30     #include "DYNVARS.h"
31     #include "EEPARAMS.h"
32     #include "PARAMS.h"
33     #include "GRID.h"
34     #include "DIC_BIOTIC.h"
35     #include "DIC_ABIOTIC.h"
36    
37     C == Routine arguments ==
38     INTEGER myIter
39     _RL myTime
40     INTEGER myThid
41     _RL PTR_DIC(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
42     _RL PTR_ALK(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
43     _RL PTR_PO4(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
44     _RL PTR_DOP(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
45     _RL PTR_O2(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
46     #ifdef ALLOW_FE
47     _RL PTR_FE(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
48     #endif
49     INTEGER bi, bj, imin, imax, jmin, jmax
50    
51     #ifdef ALLOW_PTRACERS
52     #ifdef DIC_BIOTIC
53     C == Local variables ==
54     _RL GDIC(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
55     _RL GALK(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
56     _RL GPO4(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
57     _RL GDOP(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
58     _RL GO2(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
59     _RL SURA(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
60     _RL SURC(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
61     _RL SURO(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
62     _RL BIO(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
63     _RL CAR(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
64     _RL bioac(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
65     _RL pflux(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
66     _RL cflux(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
67     #ifdef ALLOW_FE
68     _RL GFE(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
69     _RL freefe(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
70     #endif
71     INTEGER I,J,k
72    
73     DO k=1,Nr
74     DO j=1-OLy,sNy+OLy
75     DO i=1-OLx,sNx+OLx
76     GDIC(i,j,k)=0.d0
77     GALK(i,j,k)=0.d0
78     GPO4(i,j,k)=0.d0
79     GDOP(i,j,k)=0.d0
80     GO2(i,j,k)=0.d0
81     SURA(i,j)=0.d0
82     SURC(i,j)=0.d0
83     CAR(i,j,k)=0.d0
84     BIO(i,j,k)=0.d0
85     bioac(i,j,k)=0.d0
86     pflux(i,j,k)=0.d0
87     cflux(i,j,k)=0.d0
88     #ifdef ALLOW_FE
89     GFE(i,j,k)=0.d0
90     freefe(i,j,k)=0.d0
91     #endif
92     ENDDO
93     ENDDO
94     ENDDO
95    
96     c carbon air-sea interaction
97     CALL DIC_SURFFORCING( PTR_DIC, SURC,
98     & bi,bj,imin,imax,jmin,jmax,
99     & myIter,myTime,myThid)
100    
101     c alkalinity air-sea interaction
102     CALL ALK_SURFFORCING( PTR_ALK, SURA,
103     & bi,bj,imin,imax,jmin,jmax,
104     & myIter,myTime,myThid)
105    
106     c carbon air-sea interaction
107     CALL O2_SURFFORCING( PTR_O2, SURO,
108     & bi,bj,imin,imax,jmin,jmax,
109     & myIter,myTime,myThid)
110    
111     #ifdef ALLOW_FE
112     c find free iron
113     call fe_chem(bi,bj,iMin,iMax,jMin,jMax, PTR_FE, freefe,
114     & myIter, mythid)
115     #endif
116    
117    
118     c biological activity
119     CALL BIO_EXPORT( PTR_PO4 ,
120     #ifdef ALLOW_FE
121     I PTR_FE,
122     #endif
123     I bioac,
124     I bi,bj,imin,imax,jmin,jmax,
125     I myIter,myTime,myThid)
126    
127     c flux of po4 from layers with biological activity
128     CALL PHOS_FLUX( bioac, pflux,
129     & bi,bj,imin,imax,jmin,jmax,
130     & myIter,myTime,myThid)
131    
132     c carbonate
133     CALL CAR_FLUX( bioac, cflux,
134     & bi,bj,imin,imax,jmin,jmax,
135     & myIter,myTime,myThid)
136    
137     c add all tendencies for PO4, DOP, ALK, DIC
138     DO k=1,Nr
139     DO j=1-OLy,sNy+OLy
140     DO i=1-OLx,sNx+OLx
141     bio(i,j,k)=-bioac(i,j,k)+pflux(i,j,k)
142     & + maskC(i,j,k,bi,bj)*Kdopremin*PTR_DOP(i,j,k)
143     car(i,j,k)=-bioac(i,j,k)* R_cp*rain_ratio(i,j,bi,bj)*
144     & (1.0-DOPfraction)+cflux(i,j,k)
145     GPO4(i,j,k)=bio(i,j,k)
146     GDOP(i,j,k)=+bioac(i,j,k)*DOPfraction
147     & - maskC(i,j,k,bi,bj)*Kdopremin*PTR_DOP(i,j,k)
148     GALK(i,j,k)=+2.d0*car(i,j,k)-R_NP*bio(i,j,k)
149     GDIC(i,j,k)=car(i,j,k)+R_CP*bio(i,j,k)
150     cQQchange start
151     if (PTR_O2(i,j,k).gt.o2crit) then
152     GO2(i,j,k)=R_OP*bio(i,j,k)
153     else
154     GO2(i,j,k)=0.d0
155     endif
156     cQQchange end
157     #ifdef ALLOW_FE
158     GFE(i,j,k)=R_FeP*bio(i,j,k)
159     & -Kscav*freefe(i,j,k)
160     #endif
161     IF (K.eq.1) then
162     GALK(i,j,1)=GALK(i,j,1)+SURA(i,j)
163     GDIC(i,j,1)=GDIC(i,j,1)+SURC(i,j)
164     GO2(i,j,1)=GO2(i,j,1)+SURO(i,j)
165     #ifdef ALLOW_FE
166     GFE(i,j,1)=GFE(i,j,1)+alpfe*
167     & InputFe(i,j,bi,bj)/delz(1)
168     #endif
169     ENDIF
170     ENDDO
171     ENDDO
172     ENDDO
173    
174    
175     C update
176     DO k=1,Nr
177     DO j=1-OLy,sNy+OLy
178     DO i=1-OLx,sNx+OLx
179     PTR_DIC(i,j,k)=
180     & PTR_DIC(i,j,k)+GDIC(i,j,k)*deltaTtracer
181     PTR_ALK(i,j,k)=
182     & PTR_ALK(i,j,k)+GALK(i,j,k)*deltaTtracer
183     PTR_PO4(i,j,k)=
184     & PTR_PO4(i,j,k)+GPO4(i,j,k)*deltaTtracer
185     PTR_DOP(i,j,k)=
186     & PTR_DOP(i,j,k)+GDOP(i,j,k)*deltaTtracer
187     PTR_O2(i,j,k)=
188     & PTR_O2(i,j,k)+GO2(i,j,k)*deltaTtracer
189     #ifdef ALLOW_FE
190     PTR_FE(i,j,k)=
191     & PTR_FE(i,j,k)+GFE(i,j,k)*deltaTtracer
192     #endif
193     cQQchange start
194     cQQ PTR_O2(i,j,k)=max(PTR_O2(i,j,k),O2crit)
195     cQQchange end
196     ENDDO
197     ENDDO
198     ENDDO
199    
200     #ifdef ALLOW_TIMEAVE
201     c save averages
202     DO k=1,Nr
203     DO j=1-OLy,sNy+OLy
204     DO i=1-OLx,sNx+OLx
205     BIOave(i,j,k,bi,bj)=BIOave(i,j,k,bi,bj)+
206     & BIOac(i,j,k)*deltaTclock
207     CARave(i,j,k,bi,bj)=CARave(i,j,k,bi,bj)+
208     & CAR(i,j,k)*deltaTclock
209     if (k.eq.1) then
210     SURave(i,j,bi,bj)=SURave(i,j,bi,bj)+
211     & SURC(i,j)*deltaTclock
212     SUROave(i,j,bi,bj)=SUROave(i,j,bi,bj)+
213     & SURO(i,j)*deltaTclock
214     pCO2ave(i,j,bi,bj)=pCO2ave(i,j,bi,bj)+
215     & pCO2(i,j,bi,bj)*deltaTclock
216     pHave(i,j,bi,bj)=pHave(i,j,bi,bj)+
217     & pH(i,j,bi,bj)*deltaTclock
218 stephd 1.2 fluxCO2ave(i,j,bi,bj)=fluxCO2ave(i,j,bi,bj)+
219     & fluxCO2(i,j,bi,bj)*deltaTclock
220 stephd 1.1 endif
221     ENDDO
222     ENDDO
223     ENDDO
224     do k=1,Nr
225     dic_timeave(bi,bj,k)=dic_timeave(bi,bj,k)+deltaTclock
226     enddo
227     #endif
228    
229     #endif
230     #endif
231    
232     c
233     RETURN
234     END

  ViewVC Help
Powered by ViewVC 1.1.22