1 |
mmazloff |
1.1 |
C $Header: $ |
2 |
|
|
C $Name: $ |
3 |
|
|
|
4 |
|
|
#include "BLING_OPTIONS.h" |
5 |
|
|
|
6 |
|
|
CBOP |
7 |
|
|
subroutine BLING_MAIN( PTR_DIC, PTR_ALK, PTR_NUT, |
8 |
|
|
& PTR_DOM, PTR_O2, PTR_FE, |
9 |
|
|
& bi, bj, imin, imax, jmin, jmax, |
10 |
|
|
& myIter, myTime, myThid) |
11 |
|
|
|
12 |
|
|
C ========================================================== |
13 |
|
|
C | subroutine bling_main |
14 |
|
|
C | o updates all the tracers for the effects of air-sea exchange, |
15 |
|
|
C | biological production, and remineralization. |
16 |
|
|
C ========================================================== |
17 |
|
|
|
18 |
|
|
implicit none |
19 |
|
|
|
20 |
|
|
C === Global variables === |
21 |
|
|
#include "SIZE.h" |
22 |
|
|
#include "EEPARAMS.h" |
23 |
|
|
#include "PARAMS.h" |
24 |
|
|
#include "GRID.h" |
25 |
|
|
#include "BLING_VARS.h" |
26 |
|
|
#include "PTRACERS_SIZE.h" |
27 |
|
|
#include "PTRACERS_PARAMS.h" |
28 |
|
|
#ifdef ALLOW_EXF |
29 |
|
|
# include "EXF_FIELDS.h" |
30 |
|
|
#endif |
31 |
|
|
#ifdef ALLOW_AUTODIFF_TAMC |
32 |
|
|
# include "tamc.h" |
33 |
|
|
#endif |
34 |
|
|
|
35 |
|
|
C === Routine arguments === |
36 |
|
|
C bi,bj :: tile indices |
37 |
|
|
C iMin,iMax :: computation domain: 1rst index range |
38 |
|
|
C jMin,jMax :: computation domain: 2nd index range |
39 |
|
|
C myTime :: current time |
40 |
|
|
C myIter :: current timestep |
41 |
|
|
C myThid :: thread Id. number |
42 |
|
|
INTEGER bi, bj, imin, imax, jmin, jmax |
43 |
|
|
_RL myTime |
44 |
|
|
INTEGER myIter |
45 |
|
|
INTEGER myThid |
46 |
|
|
C === Input === |
47 |
|
|
C PTR_DIC :: dissolved inorganic carbon |
48 |
|
|
C PTR_ALK :: alkalinity |
49 |
|
|
C PTR_NUT :: macro-nutrient concentration |
50 |
|
|
C PTR_DOM :: dissolved organic matter concentration |
51 |
|
|
C PTR_O2 :: oxygen concentration |
52 |
|
|
C PTR_FE :: iron concentration |
53 |
|
|
_RL PTR_DIC(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr) |
54 |
|
|
_RL PTR_ALK(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr) |
55 |
|
|
_RL PTR_NUT(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr) |
56 |
|
|
_RL PTR_DOM(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr) |
57 |
|
|
_RL PTR_O2 (1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr) |
58 |
|
|
_RL PTR_FE (1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr) |
59 |
|
|
|
60 |
|
|
|
61 |
|
|
C === Local variables === |
62 |
|
|
C i,j,k :: loop indices |
63 |
|
|
C G* :: tendency term for the tracers |
64 |
|
|
C SURC :: tendency of DIC due to air-sea exchange |
65 |
|
|
C SURO :: tendency of O2 due to air-sea exchange |
66 |
|
|
C NUT_uptake :: nutrient uptake for biological production |
67 |
|
|
C POM_prod :: nutrient converted to particulate |
68 |
|
|
C organic matter |
69 |
|
|
C DOM_prod :: nutrient converted to dissolved organic |
70 |
|
|
C matter |
71 |
|
|
C DOM_remin :: DOM remineralization |
72 |
|
|
C POM_remin :: POM sinking and instant remineralization |
73 |
|
|
C NUT_remin :: Total nutrient remineralization |
74 |
|
|
C NUT_recyc :: Fast nutrient recycling |
75 |
|
|
C Fe_uptake :: iron converted to particulate organic or |
76 |
|
|
C inorganic (colloidal) iron |
77 |
|
|
C Fe_remin :: particulate iron converted to total iron |
78 |
|
|
C CaCO3_prod :: uptake of carbonate ions for CaCO3 formation |
79 |
|
|
C CaCO3_diss :: dissolution of CaCO3 |
80 |
|
|
C Car :: carbonate ion biological production |
81 |
|
|
C BioUp :: DIC biological production (<0) |
82 |
|
|
C Remin :: DIC remineralization |
83 |
|
|
C runoff* :: tendency due to river runoff |
84 |
|
|
|
85 |
|
|
INTEGER i,j,k |
86 |
|
|
_RL GDIC(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr) |
87 |
|
|
_RL GALK(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr) |
88 |
|
|
_RL GNUT(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr) |
89 |
|
|
_RL GDOM(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr) |
90 |
|
|
_RL GO2 (1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr) |
91 |
|
|
_RL GFE (1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr) |
92 |
|
|
_RL SURC(1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
93 |
|
|
_RL SURO(1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
94 |
|
|
_RL NUT_uptake(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr) |
95 |
|
|
_RL NUT_remin (1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr) |
96 |
|
|
_RL NUT_recyc (1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr) |
97 |
|
|
_RL POM_remin (1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr) |
98 |
|
|
_RL POM_diss (1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr) |
99 |
|
|
_RL POM_prod (1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr) |
100 |
|
|
_RL DOM_prod (1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr) |
101 |
|
|
_RL DOM_remin (1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr) |
102 |
|
|
_RL CaCO3_prod(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr) |
103 |
|
|
_RL CaCO3_diss(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr) |
104 |
|
|
_RL Fe_uptake (1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr) |
105 |
|
|
_RL Fe_remin (1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr) |
106 |
|
|
_RL runoff_dic(1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
107 |
|
|
_RL runoff_alk(1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
108 |
|
|
_RL runoff_nut(1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
109 |
|
|
_RL runoff_dom(1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
110 |
|
|
_RL runoff_o2 (1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
111 |
|
|
_RL runoff_fe (1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
112 |
|
|
_RL BioUp (1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr) |
113 |
|
|
_RL Remin (1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr) |
114 |
|
|
_RL Car (1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr) |
115 |
|
|
|
116 |
|
|
CEOP |
117 |
|
|
|
118 |
|
|
C----------------------------------------------------------- |
119 |
|
|
C Initialize local variables |
120 |
|
|
|
121 |
|
|
DO k=1,Nr |
122 |
|
|
DO j=1-OLy,sNy+OLy |
123 |
|
|
DO i=1-OLx,sNx+OLx |
124 |
|
|
GDIC(i,j,k) = 0. _d 0 |
125 |
|
|
GALK(i,j,k) = 0. _d 0 |
126 |
|
|
GNUT(i,j,k) = 0. _d 0 |
127 |
|
|
GDOM(i,j,k) = 0. _d 0 |
128 |
|
|
GO2(i,j,k) = 0. _d 0 |
129 |
|
|
GFE(i,j,k) = 0. _d 0 |
130 |
|
|
NUT_uptake(i,j,k) = 0. _d 0 |
131 |
|
|
NUT_remin(i,j,k) = 0. _d 0 |
132 |
|
|
NUT_recyc(i,j,k) = 0. _d 0 |
133 |
|
|
DOM_remin(i,j,k) = 0. _d 0 |
134 |
|
|
POM_remin(i,j,k) = 0. _d 0 |
135 |
|
|
DOM_prod(i,j,k) = 0. _d 0 |
136 |
|
|
POM_prod(i,j,k) = 0. _d 0 |
137 |
|
|
CaCO3_prod(i,j,k) = 0. _d 0 |
138 |
|
|
CaCO3_diss(i,j,k) = 0. _d 0 |
139 |
|
|
Fe_uptake(i,j,k) = 0. _d 0 |
140 |
|
|
Fe_remin(i,j,k) = 0. _d 0 |
141 |
|
|
BioUp(i,j,k) = 0. _d 0 |
142 |
|
|
Remin(i,j,k) = 0. _d 0 |
143 |
|
|
Car(i,j,k) = 0. _d 0 |
144 |
|
|
ENDDO |
145 |
|
|
ENDDO |
146 |
|
|
ENDDO |
147 |
|
|
DO j=1-OLy,sNy+OLy |
148 |
|
|
DO i=1-OLx,sNx+OLx |
149 |
|
|
SURC(i,j) = 0. _d 0 |
150 |
|
|
SURO(i,j) = 0. _d 0 |
151 |
|
|
runoff_dic(i,j) = 0. _d 0 |
152 |
|
|
runoff_alk(i,j) = 0. _d 0 |
153 |
|
|
runoff_NUT(i,j) = 0. _d 0 |
154 |
|
|
runoff_DOM(i,j) = 0. _d 0 |
155 |
|
|
runoff_o2(i,j) = 0. _d 0 |
156 |
|
|
runoff_fe(i,j) = 0. _d 0 |
157 |
|
|
ENDDO |
158 |
|
|
ENDDO |
159 |
|
|
|
160 |
|
|
C----------------------------------------------------------- |
161 |
|
|
C carbon and oxygen air-sea interaction |
162 |
|
|
CALL BLING_AIRSEAFLUX( |
163 |
|
|
I PTR_DIC, PTR_ALK, PTR_NUT, PTR_O2, |
164 |
|
|
U SURC, SURO, |
165 |
|
|
I bi, bj, imin, imax, jmin, jmax, |
166 |
|
|
I myIter, myTime, myThid) |
167 |
|
|
|
168 |
|
|
C$TAF STORE irr_mem = comlev1, key = ikey_dynamics, kind=isbyte |
169 |
|
|
C$TAF STORE irr_inst = comlev1, key = ikey_dynamics, kind=isbyte |
170 |
|
|
C$TAF STORE P_sm = comlev1, key = ikey_dynamics, kind=isbyte |
171 |
|
|
C$TAF STORE P_lg = comlev1, key = ikey_dynamics, kind=isbyte |
172 |
|
|
|
173 |
|
|
C----------------------------------------------------------- |
174 |
|
|
C biological production of organic matter |
175 |
|
|
CALL BLING_PROD( |
176 |
|
|
I PTR_NUT, PTR_FE, PTR_DOM, PTR_O2, |
177 |
|
|
U NUT_uptake, POM_prod, DOM_prod, |
178 |
|
|
U Fe_uptake, CaCO3_prod, |
179 |
|
|
I bi, bj, imin, imax, jmin, jmax, |
180 |
|
|
I myIter, myTime, myThid) |
181 |
|
|
|
182 |
|
|
C----------------------------------------------------------- |
183 |
|
|
C determine calcite saturation for use in bling_remin |
184 |
|
|
CALL BLING_CARBONATE_SYS( |
185 |
|
|
I PTR_DIC, PTR_ALK, PTR_NUT, |
186 |
|
|
I bi, bj, imin, imax, jmin, jmax, |
187 |
|
|
I myIter, myTime, myThid) |
188 |
|
|
|
189 |
|
|
C----------------------------------------------------------- |
190 |
|
|
C flux of NUT, CaCO3, and Fe from remineralization |
191 |
|
|
CALL BLING_REMIN( |
192 |
|
|
I PTR_O2, PTR_FE, |
193 |
|
|
U POM_prod, Fe_uptake, CaCO3_prod, |
194 |
|
|
U POM_remin, POM_diss, Fe_remin, CaCO3_diss, |
195 |
|
|
I bi, bj, imin, imax, jmin, jmax, |
196 |
|
|
I myIter, myTime, myThid) |
197 |
|
|
|
198 |
|
|
C$TAF STORE P_sm = comlev1, key = ikey_dynamics, kind=isbyte |
199 |
|
|
C$TAF STORE P_lg = comlev1, key = ikey_dynamics, kind=isbyte |
200 |
|
|
|
201 |
|
|
C----------------------------------------------------------- |
202 |
|
|
C Calculate river runoff source |
203 |
|
|
C Tracers are already diluted by freswater input, P-E+R |
204 |
|
|
C This accounts for tracer concentration in river runoff |
205 |
|
|
DO j=jmin,jmax |
206 |
|
|
DO i=imin,imax |
207 |
|
|
#ifdef ALLOW_EXF |
208 |
|
|
runoff_dic(i,j) = riverconc_DIC*runoff(i,j,bi,bj) |
209 |
|
|
& *recip_drF(1)*recip_hFacC(i,j,1,bi,bj) |
210 |
|
|
runoff_alk(i,j) = riverconc_ALK*runoff(i,j,bi,bj) |
211 |
|
|
& *recip_drF(1)*recip_hFacC(i,j,1,bi,bj) |
212 |
|
|
runoff_nut(i,j) = riverconc_NUT*runoff(i,j,bi,bj) |
213 |
|
|
& *recip_drF(1)*recip_hFacC(i,j,1,bi,bj) |
214 |
|
|
runoff_dom(i,j) = riverconc_DOM*runoff(i,j,bi,bj) |
215 |
|
|
& *recip_drF(1)*recip_hFacC(i,j,1,bi,bj) |
216 |
|
|
runoff_o2(i,j) = riverconc_O2 *runoff(i,j,bi,bj) |
217 |
|
|
& *recip_drF(1)*recip_hFacC(i,j,1,bi,bj) |
218 |
|
|
runoff_fe(i,j) = riverconc_FE *runoff(i,j,bi,bj) |
219 |
|
|
& *recip_drF(1)*recip_hFacC(i,j,1,bi,bj) |
220 |
|
|
C else it is 0 as initialized |
221 |
|
|
#endif |
222 |
|
|
ENDDO |
223 |
|
|
ENDDO |
224 |
|
|
|
225 |
|
|
C----------------------------------------------------------- |
226 |
|
|
C add all tendencies |
227 |
|
|
DO k=1,Nr |
228 |
|
|
DO j=jmin,jmax |
229 |
|
|
DO i=imin,imax |
230 |
|
|
|
231 |
|
|
C Dissolved organic matter slow remineralization |
232 |
|
|
#ifdef BLING_NO_NEG |
233 |
|
|
DOM_remin(i,j,k) = MAX(maskC(i,j,k,bi,bj)*gamma_DOM |
234 |
|
|
& *PTR_DOM(i,j,k),0. _d 0) |
235 |
|
|
#else |
236 |
|
|
DOM_remin(i,j,k) = maskC(i,j,k,bi,bj)*gamma_DOM |
237 |
|
|
& *PTR_DOM(i,j,k) |
238 |
|
|
#endif |
239 |
|
|
C Total nutrient remin, recycling |
240 |
|
|
NUT_remin(i,j,k) = POM_remin(i,j,k) + DOM_remin(i,j,k) |
241 |
|
|
NUT_recyc(i,j,k) = NUT_uptake(i,j,k) - POM_prod(i,j,k) |
242 |
|
|
& - DOM_prod(i,j,k) |
243 |
|
|
|
244 |
|
|
C Carbon system diagnostics |
245 |
|
|
C Change in DIC from primary production, from recycling and |
246 |
|
|
C remineralization, change in carbonate ions concentration |
247 |
|
|
C from biological activity: |
248 |
|
|
BioUp(i,j,k) = -NUT_uptake(i,j,k)*CtoP/NUTfac |
249 |
|
|
Remin(i,j,k) = (DOM_remin(i,j,k) + NUT_recyc(i,j,k) |
250 |
|
|
& + POM_remin(i,j,k))*CtoP/NUTfac |
251 |
|
|
Car(i,j,k) = CaCO3_diss(i,j,k) - CaCO3_prod(i,j,k) |
252 |
|
|
|
253 |
|
|
C Tendencies |
254 |
|
|
GNUT(i,j,k) = -NUT_uptake(i,j,k) + NUT_recyc(i,j,k) |
255 |
|
|
& + DOM_remin(i,j,k) + POM_remin(i,j,k) |
256 |
|
|
|
257 |
|
|
GDOM(i,j,k) = DOM_prod(i,j,k) - DOM_remin(i,j,k) |
258 |
|
|
& + POM_diss(i,j,k) |
259 |
|
|
|
260 |
|
|
GALK(i,j,k) = 2. _d 0*Car(i,j,k) - NtoP/NUTfac*GNUT(i,j,k) |
261 |
|
|
|
262 |
|
|
GDIC(i,j,k) = BioUp(i,j,k) + Remin(i,j,k) + Car(i,j,k) |
263 |
|
|
|
264 |
|
|
if ( PTR_O2(i,j,k) .GT. O2_min ) then |
265 |
|
|
GO2(i,j,k) = O2toP/NUTfac*GNUT(i,j,k) |
266 |
|
|
else |
267 |
|
|
GO2(i,j,k) = 0. _d 0 |
268 |
|
|
endif |
269 |
|
|
|
270 |
|
|
GFE(i,j,k) = Fe_remin(i,j,k) - Fe_uptake(i,j,k) |
271 |
|
|
|
272 |
|
|
ENDDO |
273 |
|
|
ENDDO |
274 |
|
|
ENDDO |
275 |
|
|
|
276 |
|
|
C----------------------------------------------------------- |
277 |
|
|
C adding surface tendencies due to air-sea exchange |
278 |
|
|
C adding surface tendencies due to river runoff |
279 |
|
|
C adding aeolian iron source |
280 |
|
|
DO j=jmin,jmax |
281 |
|
|
DO i=imin,imax |
282 |
|
|
GDIC(i,j,1)=GDIC(i,j,1)+runoff_dic(i,j)+SURC(i,j) |
283 |
|
|
GALK(i,j,1)=GALK(i,j,1)+runoff_alk(i,j) |
284 |
|
|
GNUT(i,j,1)=GNUT(i,j,1)+runoff_nut(i,j) |
285 |
|
|
GDOM(i,j,1)=GDOM(i,j,1)+runoff_dom(i,j) |
286 |
|
|
GO2(i,j,1) =GO2(i,j,1) +runoff_o2(i,j) +SURO(i,j) |
287 |
|
|
GFE(i,j,1) =GFE(i,j,1) +runoff_fe(i,j) |
288 |
|
|
& +alpfe*InputFe(i,j,bi,bj)*recip_drF(1) |
289 |
|
|
& *recip_hFacC(i,j,1,bi,bj) |
290 |
|
|
ENDDO |
291 |
|
|
ENDDO |
292 |
|
|
|
293 |
|
|
C----------------------------------------------------------- |
294 |
|
|
C update |
295 |
|
|
DO k=1,Nr |
296 |
|
|
DO j=jmin,jmax |
297 |
|
|
DO i=imin,imax |
298 |
|
|
PTR_DIC(i,j,k)= PTR_DIC(i,j,k)+GDIC(i,j,k)*PTRACERS_dTLev(k) |
299 |
|
|
PTR_ALK(i,j,k)= PTR_ALK(i,j,k)+GALK(i,j,k)*PTRACERS_dTLev(k) |
300 |
|
|
PTR_NUT(i,j,k)= PTR_NUT(i,j,k)+GNUT(i,j,k)*PTRACERS_dTLev(k) |
301 |
|
|
PTR_DOM(i,j,k)= PTR_DOM(i,j,k)+GDOM(i,j,k)*PTRACERS_dTLev(k) |
302 |
|
|
PTR_O2(i,j,k) = PTR_O2(i,j,k) +GO2(i,j,k) *PTRACERS_dTLev(k) |
303 |
|
|
PTR_FE(i,j,k) = PTR_FE(i,j,k) +GFE(i,j,k) *PTRACERS_dTLev(k) |
304 |
|
|
ENDDO |
305 |
|
|
ENDDO |
306 |
|
|
ENDDO |
307 |
|
|
|
308 |
|
|
C----------------------------------------------------------- |
309 |
|
|
#ifdef ALLOW_DIAGNOSTICS |
310 |
|
|
IF ( useDiagnostics ) THEN |
311 |
|
|
CALL DIAGNOSTICS_FILL(BioUp ,'BLGBIOA ',0,Nr,2,bi,bj,myThid) |
312 |
|
|
CALL DIAGNOSTICS_FILL(Remin ,'BLGREMI ',0,Nr,2,bi,bj,myThid) |
313 |
|
|
CALL DIAGNOSTICS_FILL(Car ,'BLGCARB ',0,Nr,2,bi,bj,myThid) |
314 |
|
|
CALL DIAGNOSTICS_FILL(pH ,'BLGPH3D ',0,Nr,1,bi,bj,myThid) |
315 |
|
|
CALL DIAGNOSTICS_FILL(OmegaAr ,'BLGOMAR ',0,Nr,1,bi,bj,myThid) |
316 |
|
|
CALL DIAGNOSTICS_FILL(pCO2 ,'BLGPCO2 ',0,1 ,1,bi,bj,myThid) |
317 |
|
|
CALL DIAGNOSTICS_FILL(fluxCO2 ,'BLGCFLX ',0,1 ,1,bi,bj,myThid) |
318 |
|
|
CALL DIAGNOSTICS_FILL(SURC ,'BLGTFLX ',0,1 ,2,bi,bj,myThid) |
319 |
|
|
CALL DIAGNOSTICS_FILL(SURO ,'BLGOFLX ',0,1 ,2,bi,bj,myThid) |
320 |
|
|
ENDIF |
321 |
|
|
#endif /* ALLOW_DIAGNOSTICS */ |
322 |
|
|
|
323 |
|
|
RETURN |
324 |
|
|
END |
325 |
|
|
|
326 |
|
|
|
327 |
|
|
|