File indexing completed on 2024-11-09 06:11:07 UTC
view on githubraw file Latest commit 9edc0e3a on 2024-11-08 15:50:10 UTC
e0f9a7ba0b Matt*0001 #include "BLING_OPTIONS.h"
a284455135 Matt*0002 #ifdef ALLOW_AUTODIFF
0003 # include "AUTODIFF_OPTIONS.h"
0004 #endif
e0f9a7ba0b Matt*0005
0006
a284455135 Matt*0007 SUBROUTINE BLING_BIO_NITROGEN(
e0f9a7ba0b Matt*0008 I PTR_O2, PTR_FE, PTR_PO4, PTR_DOP,
0009 I PTR_NO3, PTR_DON,
0010 #ifdef USE_SIBLING
0011 I PTR_SI,
0012 #endif
0013 #ifdef ADVECT_PHYTO
0014 I PTR_PHY,
0015 #endif
0016 O G_DIC, G_ALK, G_O2, G_FE,
0017 O G_PO4, G_DOP, G_NO3, G_DON,
0018 #ifdef USE_SIBLING
0019 O G_SI,
0020 #endif
0021 I bi, bj, imin, imax, jmin, jmax,
0022 I myTime, myIter, myThid)
0023
0024
0025
0026
0027
0028
0029
0030
0031
0032
0033
0034
0035
0036
0037
0038
0039
0040
0041 IMPLICIT NONE
0042
0043
0044
0045
0046
0047
0048
0049 #include "SIZE.h"
0050 #include "DYNVARS.h"
0051 #include "EEPARAMS.h"
0052 #include "PARAMS.h"
0053 #include "GRID.h"
0054 #include "BLING_VARS.h"
0055 #include "PTRACERS_SIZE.h"
0056 #include "PTRACERS_PARAMS.h"
a284455135 Matt*0057 #ifdef ALLOW_AUTODIFF_TAMC
e0f9a7ba0b Matt*0058 # include "tamc.h"
0059 #endif
0060
0061
0062
0063
0064
0065
0066
0067
0068 INTEGER bi, bj, imin, imax, jmin, jmax
0069 _RL myTime
0070 INTEGER myIter
0071 INTEGER myThid
0072
0073
0074
0075
0076
0077
0078
0079
0080
0081 _RL PTR_O2 (1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
0082 _RL PTR_FE (1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
0083 _RL PTR_PO4(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
0084 _RL PTR_DOP(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
0085 _RL PTR_NO3(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
0086 _RL PTR_DON(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
0087 #ifdef USE_SIBLING
0088 _RL PTR_SI (1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
0089 #endif
0090 #ifdef ADVECT_PHYTO
0091 _RL PTR_PHY(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
0092 #endif
0093
0094
0095
0096 _RL G_DIC (1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
0097 _RL G_ALK (1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
0098 _RL G_O2 (1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
0099 _RL G_FE (1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
0100 _RL G_PO4 (1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
0101 _RL G_DOP (1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
0102 _RL G_NO3 (1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
0103 _RL G_DON (1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
0104 #ifdef USE_SIBLING
0105 _RL G_SI (1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
0106 #endif
0107
0108 #ifdef ALLOW_BLING
0109 # ifndef USE_BLING_V1
0110
0111
0112
0113
0114
0115
0116
0117
0118
0119
0120
0121
0122
0123
0124
0125
0126
0127
0128
0129
0130
0131
0132
0133
0134
0135
0136
0137
0138
0139
0140
0141
0142
0143
0144
0145
0146
0147
0148
0149
0150
0151
0152
0153
0154
0155
0156
0157
0158
0159
0160
0161
0162
0163
0164
0165
0166
0167
0168
0169
0170
0171
0172
0173
0174
0175
0176
0177
0178
0179
0180
0181
0182
0183
0184
0185 INTEGER i,j,k
0186 _RL Phy_lg_local(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
0187 _RL Phy_sm_local(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
0188 _RL Phy_diaz_local(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
0189 _RL NO3_lim(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
0190 _RL PO4_lim(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
0191 _RL Fe_lim(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
0192 _RL Fe_lim_diaz(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
0193 _RL light_lim(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
0194 _RL expkT(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
0195 _RL Pc_m
0196 _RL Pc_m_diaz
0197 _RL theta_Fe_max
0198 _RL theta_Fe(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
0199 _RL theta_Fe_inv(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
0200 _RL irrk(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
0201 _RL irr_eff(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
a284455135 Matt*0202 _RL irr_inst(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
e0f9a7ba0b Matt*0203 _RL mld(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
0204 _RL mu(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
0205 _RL mu_diaz(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
0206 _RL PtoN(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
0207 _RL FetoN(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
0208 _RL N_uptake(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
0209 _RL N_fix(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
0210 _RL N_den_pelag(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
0211 _RL N_den_benthic(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
0212 _RL P_uptake(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
0213 _RL Fe_uptake(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
0214 _RL CaCO3_uptake(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
0215 _RL CaCO3_diss(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
0216 _RL G_CACO3(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
0217 _RL DON_prod(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
0218 _RL DOP_prod(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
0219 _RL DON_remin(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
0220 _RL DOP_remin(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
0221 _RL O2_prod(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
0222 _RL frac_exp
0223 _RL N_spm(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
0224 _RL P_spm(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
0225 _RL Fe_spm(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
0226 _RL N_dvm(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
0227 _RL P_dvm(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
0228 _RL Fe_dvm(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
0229 _RL N_recycle(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
0230 _RL P_recycle(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
0231 _RL Fe_recycle(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
0232 _RL N_reminp(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
0233 _RL P_reminp(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
0234 _RL Fe_reminp(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
0235 _RL Fe_reminsum(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
0236 _RL N_remindvm(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
0237 _RL P_remindvm(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
0238 _RL Fe_remindvm(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
0239 _RL POC_flux(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
0240 _RL NPP(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
0241 _RL NCP(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
0242 _RL depth_l
0243 _RL PONflux_u
0244 _RL PONflux_l
0245 _RL POPflux_u
0246 _RL POPflux_l
0247 _RL PFEflux_u
0248 _RL PFEflux_l
0249 _RL CaCO3flux_u
0250 _RL CaCO3flux_l
0251 _RL zremin
0252 _RL zremin_caco3
0253 _RL wsink
0254 _RL POC_sed
0255 _RL Fe_sed(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
0256 _RL kFe_eq_lig
0257 _RL FreeFe
0258 _RL Fe_ads_inorg(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
0259 _RL Fe_ads_org(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
0260 _RL log_btm_flx
0261 _RL NO3_btmflx(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
0262 _RL PO4_btmflx(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
0263 _RL O2_btmflx(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
0264 _RL Fe_burial(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
0265 _RL no3_adj(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
0266 _RL po4_adj(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
0267 _RL fe_adj(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
0268 _RL o2_adj(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
0269 _RL don_adj(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
0270 _RL dop_adj(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
0271 #ifdef ML_MEAN_PHYTO
0272 _RL tmp_p_sm_ML
0273 _RL tmp_p_lg_ML
0274 _RL tmp_p_diaz_ML
0275 _RL tmp_ML
0276 #endif
0277 #ifdef USE_BLING_DVM
0278 INTEGER tmp_dvm
0279 _RL o2_upper
0280 _RL o2_lower
0281 _RL dz_upper
0282 _RL dz_lower
0283 _RL temp_upper
0284 _RL temp_lower
0285 _RL z_dvm_regr
0286 _RL frac_migr
0287 _RL fdvm_migr
0288 _RL fdvm_stat
0289 _RL fdvmn_vint
0290 _RL fdvmp_vint
0291 _RL fdvmfe_vint
0292 _RL z_dvm
0293 _RL dvm(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
0294 _RL x_erfcc,z_erfcc,t_erfcc,erfcc
0295 #endif
0296 #ifdef USE_SIBLING
0297 _RL Si_lim(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
0298 _RL Si_uptake(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
00fa2d4ddd mmaz*0299 _RL Si_spm(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
e0f9a7ba0b Matt*0300 _RL Si_recycle(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
0301 _RL Si_reminp(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
00fa2d4ddd mmaz*0302 _RL SitoN_uptake(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
e0f9a7ba0b Matt*0303 _RL Phy_diatom_local(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
0304 _RL frac_diss_Si(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
0305 _RL Pc_m_diatom
0306 _RL mu_diatom(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
0307 _RL zremin_Si
00fa2d4ddd mmaz*0308 _RL Siflux_u
0309 _RL Siflux_l
e0f9a7ba0b Matt*0310 _RL si_adj(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
0311 #endif
0312 #ifdef ADVECT_PHYTO
0313 _RL phy_adj(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
0314 #endif
a284455135 Matt*0315 #ifdef SIZE_DEP_LIM
0316 _RL light_lim_sm(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
0317 _RL light_lim_lg(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
0318 _RL NO3_lim_sm(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
0319 _RL NO3_lim_lg(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
0320 _RL PO4_lim_sm(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
0321 _RL PO4_lim_lg(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
0322 _RL Fe_lim_sm(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
0323 _RL Fe_lim_lg(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
0324 _RL Pc_m_sm
0325 _RL Pc_m_lg
0326 _RL mu_sm(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
0327 _RL mu_lg(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
0328 #endif
7c50f07931 Mart*0329 #ifdef ALLOW_AUTODIFF_TAMC
edb6656069 Mart*0330
0331
0332 INTEGER tkey, ijkkey
7c50f07931 Mart*0333 #endif
e0f9a7ba0b Matt*0334
0335
a284455135 Matt*0336 #ifdef ALLOW_AUTODIFF_TAMC
edb6656069 Mart*0337 tkey = bi + (bj - 1)*nSx + (ikey_dynamics - 1)*nSx*nSy
a284455135 Matt*0338 #endif
0339
0340
6df47d206d Jean*0341 DO j=1-OLy,sNy+OLy
0342 DO i=1-OLx,sNx+OLx
e0f9a7ba0b Matt*0343 mld(i,j) = 0. _d 0
0344 NO3_btmflx(i,j) = 0. _d 0
0345 PO4_btmflx(i,j) = 0. _d 0
0346 O2_btmflx(i,j) = 0. _d 0
0347 Fe_burial(i,j) = 0. _d 0
6df47d206d Jean*0348 ENDDO
e0f9a7ba0b Matt*0349 ENDDO
0350 DO k=1,Nr
6df47d206d Jean*0351 DO j=1-OLy,sNy+OLy
0352 DO i=1-OLx,sNx+OLx
e0f9a7ba0b Matt*0353 G_DIC(i,j,k) = 0. _d 0
0354 G_ALK(i,j,k) = 0. _d 0
0355 G_O2(i,j,k) = 0. _d 0
0356 G_Fe(i,j,k) = 0. _d 0
0357 G_PO4(i,j,k) = 0. _d 0
0358 G_DOP(i,j,k) = 0. _d 0
0359 G_NO3(i,j,k) = 0. _d 0
0360 G_DON(i,j,k) = 0. _d 0
0361 G_CaCO3(i,j,k) = 0. _d 0
0362 Phy_lg_local(i,j,k) = 0. _d 0
0363 Phy_sm_local(i,j,k) = 0. _d 0
0364 Phy_diaz_local(i,j,k) = 0. _d 0
0365 NO3_lim(i,j,k) = 0. _d 0
0366 PO4_lim(i,j,k) = 0. _d 0
0367 Fe_lim(i,j,k) = 0. _d 0
0368 Fe_lim_diaz(i,j,k) = 0. _d 0
0369 light_lim(i,j,k) = 0. _d 0
0370 expkT(i,j,k) = 0. _d 0
0371 theta_Fe(i,j,k) = 0. _d 0
0372 irrk(i,j,k) = 0. _d 0
0373 irr_inst(i,j,k) = 0. _d 0
0374 irr_eff(i,j,k) = 0. _d 0
0375 mu(i,j,k) = 0. _d 0
0376 mu_diaz(i,j,k) = 0. _d 0
0377 PtoN(i,j,k) = 0. _d 0
0378 FetoN(i,j,k) = 0. _d 0
0379 N_uptake(i,j,k) = 0. _d 0
0380 N_fix(i,j,k) = 0. _d 0
0381 N_den_pelag(i,j,k) = 0. _d 0
0382 N_den_benthic(i,j,k) = 0. _d 0
0383 P_uptake(i,j,k) = 0. _d 0
0384 Fe_uptake(i,j,k) = 0. _d 0
0385 CaCO3_uptake(i,j,k) = 0. _d 0
0386 CaCO3_diss(i,j,k) = 0. _d 0
0387 DON_prod(i,j,k) = 0. _d 0
0388 DOP_prod(i,j,k) = 0. _d 0
0389 DON_remin(i,j,k) = 0. _d 0
0390 DOP_remin(i,j,k) = 0. _d 0
0391 O2_prod(i,j,k) = 0. _d 0
0392 N_spm(i,j,k) = 0. _d 0
0393 P_spm(i,j,k) = 0. _d 0
0394 Fe_spm(i,j,k) = 0. _d 0
0395 N_dvm(i,j,k) = 0. _d 0
0396 P_dvm(i,j,k) = 0. _d 0
0397 Fe_dvm(i,j,k) = 0. _d 0
0398 N_recycle(i,j,k) = 0. _d 0
0399 P_recycle(i,j,k) = 0. _d 0
0400 Fe_recycle(i,j,k) = 0. _d 0
0401 N_reminp(i,j,k) = 0. _d 0
0402 P_reminp(i,j,k) = 0. _d 0
0403 Fe_reminp(i,j,k) = 0. _d 0
0404 Fe_reminsum(i,j,k) = 0. _d 0
0405 N_remindvm(i,j,k) = 0. _d 0
0406 P_remindvm(i,j,k) = 0. _d 0
0407 Fe_remindvm(i,j,k) = 0. _d 0
0408 NCP(i,j,k) = 0. _d 0
0409 Fe_sed(i,j,k) = 0. _d 0
0410 Fe_ads_org(i,j,k) = 0. _d 0
0411 Fe_ads_inorg(i,j,k) = 0. _d 0
0412 #ifdef USE_BLING_DVM
0413 dvm(i,j,k) = 0. _d 0
0414 #endif
0415 #ifdef USE_SIBLING
00fa2d4ddd mmaz*0416 G_SI(i,j,k) = 0. _d 0
e0f9a7ba0b Matt*0417 Si_lim(i,j,k) = 0. _d 0
00fa2d4ddd mmaz*0418 Si_spm(i,j,k) = 0. _d 0
e0f9a7ba0b Matt*0419 Si_uptake(i,j,k) = 0. _d 0
0420 Si_recycle(i,j,k) = 0. _d 0
0421 Si_reminp(i,j,k) = 0. _d 0
00fa2d4ddd mmaz*0422 SitoN_uptake(i,j,k) = 0. _d 0
e0f9a7ba0b Matt*0423 Phy_diatom_local(i,j,k) = 0. _d 0
0424 frac_diss_Si(i,j,k) = 0. _d 0
0425 mu_diatom(i,j,k) = 0. _d 0
0426 #endif
6df47d206d Jean*0427 ENDDO
0428 ENDDO
e0f9a7ba0b Matt*0429 ENDDO
0430
a284455135 Matt*0431
0432
0433
e0f9a7ba0b Matt*0434
0435 #ifdef BLING_NO_NEG
82e538d851 aver*0436 # ifdef ALLOW_AUTODIFF_TAMC
0437
0438 # ifdef USE_SIBLING
0439
0440 # endif
0441 # ifdef ADVECT_PHYTO
0442
0443 # endif
0444
0445 # endif /* ALLOW_AUTODIFF_TAMC */
e0f9a7ba0b Matt*0446 CALL BLING_MIN_VAL(PTR_O2, 1. _d -11, o2_adj, bi, bj)
0447 CALL BLING_MIN_VAL(PTR_FE, 1. _d -11, fe_adj, bi, bj)
0448 CALL BLING_MIN_VAL(PTR_PO4, 1. _d -8, po4_adj, bi, bj)
0449 CALL BLING_MIN_VAL(PTR_DOP, 1. _d -11, dop_adj, bi, bj)
0450 CALL BLING_MIN_VAL(PTR_NO3, 1. _d -7, no3_adj, bi, bj)
0451 CALL BLING_MIN_VAL(PTR_DON, 1. _d -11, don_adj, bi, bj)
0452 # ifdef USE_SIBLING
0453 CALL BLING_MIN_VAL(PTR_SI , 1. _d -7, si_adj, bi, bj)
0454 # endif
0455 # ifdef ADVECT_PHYTO
0456 CALL BLING_MIN_VAL(PTR_PHY, 1. _d -11, phy_adj, bi, bj)
0457 # endif
0458 #endif
0459
a284455135 Matt*0460
0461
e0f9a7ba0b Matt*0462
6df47d206d Jean*0463 DO k=1,Nr
0464 DO j=jmin,jmax
0465 DO i=imin,imax
e0f9a7ba0b Matt*0466 #ifdef ADVECT_PHYTO
0467 Phy_lg_local(i,j,k) = PTR_PHY(i,j,k)*phyto_lg(i,j,k,bi,bj)
0468 Phy_sm_local(i,j,k) = PTR_PHY(i,j,k)*phyto_sm(i,j,k,bi,bj)
0469 Phy_diaz_local(i,j,k) = PTR_PHY(i,j,k)*phyto_diaz(i,j,k,bi,bj)
0470 #else
0471 Phy_lg_local(i,j,k) = phyto_lg(i,j,k,bi,bj)
0472 Phy_sm_local(i,j,k) = phyto_sm(i,j,k,bi,bj)
0473 Phy_diaz_local(i,j,k) = phyto_diaz(i,j,k,bi,bj)
0474 #endif
0475 ENDDO
0476 ENDDO
6df47d206d Jean*0477 ENDDO
e0f9a7ba0b Matt*0478
a284455135 Matt*0479
0480
0481
0482
0483
e0f9a7ba0b Matt*0484
0485 #if ( defined (ML_MEAN_LIGHT) || \
0486 defined (ML_MEAN_PHYTO) || \
0487 defined (USE_BLING_DVM) )
6df47d206d Jean*0488 CALL BLING_MIXEDLAYER(
e0f9a7ba0b Matt*0489 U mld,
0490 I bi, bj, imin, imax, jmin, jmax,
0491 I myTime, myIter, myThid)
fe1862e69b Mart*0492 # ifdef ALLOW_AUTODIFF_TAMC
0493
edb6656069 Mart*0494
fe1862e69b Mart*0495 # endif
e0f9a7ba0b Matt*0496 #endif
0497
a284455135 Matt*0498
0499
0500
0501
0502
e0f9a7ba0b Matt*0503
0504 #ifdef ML_MEAN_PHYTO
82e538d851 aver*0505 # ifdef ALLOW_AUTODIFF_TAMC
edb6656069 Mart*0506
0507
0508
82e538d851 aver*0509 # endif
e0f9a7ba0b Matt*0510 DO j=jmin,jmax
0511 DO i=imin,imax
0512
0513 tmp_p_sm_ML = 0. _d 0
0514 tmp_p_lg_ML = 0. _d 0
0515 tmp_p_diaz_ML = 0. _d 0
0516 tmp_ML = 0. _d 0
0517
0518 DO k=1,Nr
0519
a284455135 Matt*0520 IF ( maskC(i,j,k,bi,bj).EQ.oneRS ) THEN
e0f9a7ba0b Matt*0521 IF ((-rf(k+1) .le. mld(i,j)).and.
0522 & (-rf(k+1).lt.MLmix_max)) THEN
0523 tmp_p_sm_ML = tmp_p_sm_ML+Phy_sm_local(i,j,k)*drF(k)
0524 & *hFacC(i,j,k,bi,bj)
0525 tmp_p_lg_ML = tmp_p_lg_ML+Phy_lg_local(i,j,k)*drF(k)
0526 & *hFacC(i,j,k,bi,bj)
0527 tmp_p_diaz_ML = tmp_p_diaz_ML+Phy_diaz_local(i,j,k)*drF(k)
0528 & *hFacC(i,j,k,bi,bj)
0529 tmp_ML = tmp_ML + drF(k)
0530 ENDIF
0531 ENDIF
0532
0533 ENDDO
0534
0535 DO k=1,Nr
0536
a284455135 Matt*0537 IF ( maskC(i,j,k,bi,bj).EQ.oneRS ) THEN
e0f9a7ba0b Matt*0538 IF ((-rf(k+1) .le. mld(i,j)).and.
0539 & (-rf(k+1).lt.MLmix_max)) THEN
0540
0541 Phy_lg_local(i,j,k) = max(1. _d -8,tmp_p_lg_ML/tmp_ML)
0542 Phy_sm_local(i,j,k) = max(1. _d -8,tmp_p_sm_ML/tmp_ML)
0543 Phy_diaz_local(i,j,k) = max(1. _d -8,tmp_p_diaz_ML/tmp_ML)
0544
0545 ENDIF
0546 ENDIF
0547
0548 ENDDO
0549 ENDDO
0550 ENDDO
82e538d851 aver*0551 # ifdef ALLOW_AUTODIFF_TAMC
0552
0553
0554
0555 # endif
e0f9a7ba0b Matt*0556 #endif
0557
0558 #ifdef USE_SIBLING
0559 DO k=1,Nr
0560 DO j=jmin,jmax
0561 DO i=imin,imax
0562 Phy_diatom_local(i,j,k) = Phy_lg_local(i,j,k)
0563 ENDDO
0564 ENDDO
0565 ENDDO
0566 #endif
0567
a284455135 Matt*0568
0569
e0f9a7ba0b Matt*0570
6df47d206d Jean*0571 CALL BLING_LIGHT(
e0f9a7ba0b Matt*0572 I mld,
0573 U irr_inst, irr_eff,
0574 I bi, bj, imin, imax, jmin, jmax,
0575 I myTime, myIter, myThid )
fe1862e69b Mart*0576 #ifdef ALLOW_AUTODIFF_TAMC
0577
edb6656069 Mart*0578
0579
fe1862e69b Mart*0580 #endif
e0f9a7ba0b Matt*0581
a284455135 Matt*0582
0583
0584
0585
0586
e0f9a7ba0b Matt*0587
0588 DO k=1,Nr
0589 DO j=jmin,jmax
0590 DO i=imin,imax
0591
0592 irr_mem(i,j,k,bi,bj) = irr_mem(i,j,k,bi,bj) +
0593 & (irr_eff(i,j,k) - irr_mem(i,j,k,bi,bj))*
0594 & min( 1. _d 0, gamma_irr_mem*PTRACERS_dTLev(k) )
0595
0596 ENDDO
0597 ENDDO
0598 ENDDO
0599
a284455135 Matt*0600
e0f9a7ba0b Matt*0601
0602 DO k=1,Nr
0603 DO j=jmin,jmax
0604 DO i=imin,imax
a284455135 Matt*0605 IF ( maskC(i,j,k,bi,bj).EQ.oneRS ) THEN
e0f9a7ba0b Matt*0606
82e538d851 aver*0607
a284455135 Matt*0608
0609
0610
0611
0612
0613
0614
0615
0616
e0f9a7ba0b Matt*0617
a284455135 Matt*0618
e0f9a7ba0b Matt*0619
0620 NO3_lim(i,j,k) = PTR_NO3(i,j,k)/(PTR_NO3(i,j,k)+k_NO3)
0621
0622 PO4_lim(i,j,k) = PTR_PO4(i,j,k)/(PTR_PO4(i,j,k)+k_PO4)
0623
a284455135 Matt*0624
e0f9a7ba0b Matt*0625
0626 Fe_lim(i,j,k) = PTR_FE(i,j,k)
0627 & / (PTR_FE(i,j,k)+k_Fe_2d(i,j,bi,bj))
0628
0629 Fe_lim_diaz(i,j,k) = PTR_FE(i,j,k)
0630 & / (PTR_FE(i,j,k)+k_Fe_diaz_2d(i,j,bi,bj))
0631
0632 #ifdef USE_SIBLING
0633 Si_lim(i,j,k) = PTR_Si(i,j,k)/(PTR_Si(i,j,k)+k_Si)
0634 #endif
0635
9edc0e3a85 aver*0636 #ifdef SIZE_DEP_LIM
82e538d851 aver*0637 NO3_lim_sm(i,j,k) = PTR_NO3(i,j,k)/(PTR_NO3(i,j,k)+k_NO3_sm)
0638
0639 PO4_lim_sm(i,j,k) = PTR_PO4(i,j,k)/(PTR_PO4(i,j,k)+k_PO4_sm)
0640
0641 Fe_lim_sm(i,j,k) = PTR_FE(i,j,k)/(PTR_FE(i,j,k)+k_Fe_sm)
0642
0643 NO3_lim_lg(i,j,k) = PTR_NO3(i,j,k)/(PTR_NO3(i,j,k)+k_NO3_lg)
0644
0645 PO4_lim_lg(i,j,k) = PTR_PO4(i,j,k)/(PTR_PO4(i,j,k)+k_PO4_lg)
0646
0647 Fe_lim_lg(i,j,k) = PTR_FE(i,j,k)/(PTR_FE(i,j,k)+k_Fe_lg)
9edc0e3a85 aver*0648 #endif
82e538d851 aver*0649
0650
0651
0652
0653
0654
0655
a284455135 Matt*0656
0657
e0f9a7ba0b Matt*0658
a284455135 Matt*0659
0660
0661
0662
0663
0664
e0f9a7ba0b Matt*0665
0666 expkT(i,j,k) = exp(kappa_eppley * theta(i,j,k,bi,bj))
0667
a284455135 Matt*0668
0669
0670
0671
0672
0673
0674
e0f9a7ba0b Matt*0675
a284455135 Matt*0676
e0f9a7ba0b Matt*0677
0678 #ifdef MIN_NUT_LIM
0679 Pc_m = Pc_0_2d(i,j,bi,bj) * expkT(i,j,k)
0680 & * min(NO3_lim(i,j,k), PO4_lim(i,j,k), Fe_lim(i,j,k))
0681 & * maskC(i,j,k,bi,bj)
0682 #else
0683 Pc_m = Pc_0_2d(i,j,bi,bj) * expkT(i,j,k)
0684 & * (NO3_lim(i,j,k) * PO4_lim(i,j,k) * Fe_lim(i,j,k))
0685 & **(1./3.) * maskC(i,j,k,bi,bj)
0686 #endif
0687
a284455135 Matt*0688
0689
0690
0691
0692
e0f9a7ba0b Matt*0693
0694 #ifdef MIN_NUT_LIM
0695 Pc_m_diaz = Pc_0_diaz_2d(i,j,bi,bj)
0696 & * exp(kappa_eppley_diaz * theta(i,j,k,bi,bj))
0697 & * min(PO4_lim(i,j,k), Fe_lim_diaz(i,j,k))
0698 & * maskC(i,j,k,bi,bj)
0699 #else
0700 Pc_m_diaz = Pc_0_diaz_2d(i,j,bi,bj)
0701 & * exp(kappa_eppley_diaz * theta(i,j,k,bi,bj))
0702 & * (PO4_lim(i,j,k) * Fe_lim_diaz(i,j,k))**(1./2.)
0703 & * maskC(i,j,k,bi,bj)
0704 #endif
0705
a284455135 Matt*0706
0707
e0f9a7ba0b Matt*0708
0709 #ifdef USE_SIBLING
0710 # ifdef MIN_NUT_LIM
0711 Pc_m_diatom = Pc_0_2d(i,j,bi,bj) * expkT(i,j,k)
0712 & * min(NO3_lim(i,j,k), PO4_lim(i,j,k), Fe_lim(i,j,k),
0713 & Si_lim(i,j,k)) * maskC(i,j,k,bi,bj)
0714 # else
0715 Pc_m_diatom = Pc_0_2d(i,j,bi,bj) * expkT(i,j,k)
0716 & * (NO3_lim(i,j,k) * PO4_lim(i,j,k) * Fe_lim(i,j,k)
0717 & * Si_lim(i,j,k)) **(1./4.) * maskC(i,j,k,bi,bj)
0718 # endif
0719 #endif
0720
a284455135 Matt*0721
e0f9a7ba0b Matt*0722 #ifdef BLING_ADJOINT_SAFE
0723 Pc_m = max(Pc_m ,maskC(i,j,k,bi,bj)*1. _d -15)
0724 Pc_m_diaz = max(Pc_m_diaz ,maskC(i,j,k,bi,bj)*1. _d -15)
0725 # ifdef USE_SIBLING
0726 Pc_m_diatom = max(Pc_m_diatom,maskC(i,j,k,bi,bj)*1. _d -15)
0727 # endif
0728 #endif
0729
a284455135 Matt*0730
0731
0732
0733
0734
e0f9a7ba0b Matt*0735
0736 theta_Fe_max = theta_Fe_max_lo+
0737 & (theta_Fe_max_hi-theta_Fe_max_lo)*Fe_lim(i,j,k)
0738
0739 theta_Fe(i,j,k) = theta_Fe_max
0740 & / (1. _d 0 + alpha_photo_2d(i,j,bi,bj)
0741 & *theta_Fe_max
0742 & *irr_mem(i,j,k,bi,bj)/(epsln + 2. _d 0*Pc_m))
0743
a284455135 Matt*0744
0745
0746
0747
0748
0749
0750
0751
e0f9a7ba0b Matt*0752
0753 irrk(i,j,k) = Pc_m
0754 & /(epsln + alpha_photo_2d(i,j,bi,bj)*theta_Fe_max)
0755 & + irr_mem(i,j,k,bi,bj)/2. _d 0
0756
0757 light_lim(i,j,k) = ( 1. _d 0 - exp(-irr_eff(i,j,k)
0758 & /(epsln + irrk(i,j,k))))
0759
a284455135 Matt*0760
e0f9a7ba0b Matt*0761
0762 mu(i,j,k) = Pc_m * light_lim(i,j,k)
0763
0764 #ifdef USE_SIBLING
0765 mu_diatom(i,j,k) = Pc_m_diatom * light_lim(i,j,k)
0766 #endif
0767
a284455135 Matt*0768
e0f9a7ba0b Matt*0769
0770 IF (theta(i,j,k,bi,bj) .gt. 14) THEN
0771 mu_diaz(i,j,k) = Pc_m_diaz * light_lim(i,j,k)
0772 ELSE
0773 mu_diaz(i,j,k) = 0. _d 0
0774 ENDIF
0775
a284455135 Matt*0776
e0f9a7ba0b Matt*0777
0778 PtoN(i,j,k) = PtoN_min + (PtoN_max - PtoN_min) *
0779 & PTR_PO4(i,j,k) / (k_PtoN + PTR_PO4(i,j,k))
0780
0781 FetoN(i,j,k) = FetoN_min + (FetoN_max - FetoN_min) *
0782 & PTR_FE(i,j,k) / (k_FetoN + PTR_FE(i,j,k))
0783
0784 #ifdef USE_SIBLING
a284455135 Matt*0785
0786
0787
0788
e0f9a7ba0b Matt*0789
6ffd1aa797 Jean*0790 SitoN_uptake(i,j,k) = min(SitoN_uptake_max,
00fa2d4ddd mmaz*0791 & Si_lim(i,j,k) * max(SitoN_uptake_min,
0792 & (1. / epsln + SitoN_uptake_scale + min(
e0f9a7ba0b Matt*0793 & PO4_lim(i,j,k), Fe_lim(i,j,k) ) * (1. -
a284455135 Matt*0794 & exp(-irr_eff(i,j,k)/(epsln + irrk(i,j,k) )) ))
00fa2d4ddd mmaz*0795 & **SitoN_uptake_exp))
e0f9a7ba0b Matt*0796 #endif
0797
a284455135 Matt*0798
e0f9a7ba0b Matt*0799
0800 N_uptake(i,j,k) = mu(i,j,k) * (Phy_sm_local(i,j,k)
0801 & + Phy_lg_local(i,j,k))
0802
a284455135 Matt*0803 #ifdef SIZE_DEP_LIM
0804 Pc_m_sm = Pc_0_2d(i,j,bi,bj) * expkT(i,j,k)
0805 & * min(NO3_lim_sm(i,j,k), PO4_lim_sm(i,j,k),
0806 & Fe_lim_sm(i,j,k)) * maskC(i,j,k,bi,bj)
0807
0808 Pc_m_lg = Pc_0_2d(i,j,bi,bj) * expkT(i,j,k)
0809 & * min(NO3_lim_lg(i,j,k), PO4_lim_lg(i,j,k),
0810 & Fe_lim_lg(i,j,k)) * maskC(i,j,k,bi,bj)
0811
0812 light_lim_sm(i,j,k) = light_lim(i,j,k)
0813
0814 light_lim_lg(i,j,k) = light_lim(i,j,k)
0815
0816 mu_sm(i,j,k) = Pc_m_sm * light_lim_sm(i,j,k)
0817 mu_lg(i,j,k) = Pc_m_lg * light_lim_lg(i,j,k)
0818
0819 N_uptake(i,j,k) = mu_sm(i,j,k) * Phy_sm_local(i,j,k)
0820 & + mu_lg(i,j,k) * Phy_lg_local(i,j,k)
0821 #endif /* SIZE_DEP_LIM */
0822
e0f9a7ba0b Matt*0823 N_fix(i,j,k) = mu_diaz(i,j,k) * Phy_diaz_local(i,j,k)
0824
0825 P_uptake(i,j,k) = (N_uptake(i,j,k) +
0826 & N_fix(i,j,k)) * PtoN(i,j,k)
0827
0828 Fe_uptake(i,j,k) = (N_uptake(i,j,k) +
0829 & N_fix(i,j,k)) * FetoN(i,j,k)
0830
0831 #ifdef USE_SIBLING
0832 Si_uptake(i,j,k) = mu(i,j,k) * Phy_diatom_local(i,j,k)
00fa2d4ddd mmaz*0833 & * SitoN_uptake(i,j,k)
e0f9a7ba0b Matt*0834 #endif
0835
a284455135 Matt*0836
e0f9a7ba0b Matt*0837
a284455135 Matt*0838
0839
0840
0841
0842
e0f9a7ba0b Matt*0843
9edc0e3a85 aver*0844 #ifdef SIZE_DEP_LIM
a284455135 Matt*0845 CaCO3_uptake(i,j,k) = mu_sm(i,j,k) * Phy_sm_local(i,j,k)
0846 & * phi_sm_2d(i,j,bi,bj) * CatoN
82e538d851 aver*0847 #else
0848 CaCO3_uptake(i,j,k) = mu(i,j,k) * Phy_sm_local(i,j,k)
0849 & * phi_sm_2d(i,j,bi,bj) * CatoN
a284455135 Matt*0850 #endif
0851
e0f9a7ba0b Matt*0852 ENDIF
0853 ENDDO
0854 ENDDO
0855 ENDDO
0856
a284455135 Matt*0857
0858
0859
0860
0861
0862
0863
0864
0865
0866
0867
0868
0869
0870
0871
0872
0873
0874
0875
0876
e0f9a7ba0b Matt*0877
0878 DO k=1,Nr
0879 DO j=jmin,jmax
0880 DO i=imin,imax
a284455135 Matt*0881 IF ( maskC(i,j,k,bi,bj).EQ.oneRS ) THEN
e0f9a7ba0b Matt*0882
6df47d206d Jean*0883 Phy_lg_local(i,j,k) = Phy_lg_local(i,j,k) +
e0f9a7ba0b Matt*0884 & Phy_lg_local(i,j,k)*(mu(i,j,k) - lambda_0
0885 & * expkT(i,j,k) *
0886 & (Phy_lg_local(i,j,k)/pivotal)**(1. / 3.))
0887 & * PTRACERS_dTLev(k)
0888
0889 Phy_sm_local(i,j,k) = Phy_sm_local(i,j,k) +
0890 & Phy_sm_local(i,j,k)*(mu(i,j,k) - lambda_0
0891 & * expkT(i,j,k) * (Phy_sm_local(i,j,k)/pivotal))
0892 & * PTRACERS_dTLev(k)
0893
0894 Phy_diaz_local(i,j,k) = Phy_diaz_local(i,j,k) +
82e538d851 aver*0895 & Phy_diaz_local(i,j,k)*(mu_diaz(i,j,k)-20*lambda_0
e0f9a7ba0b Matt*0896 & * expkT(i,j,k) * (Phy_diaz_local(i,j,k)/pivotal))
0897 & * PTRACERS_dTLev(k)
0898
82e538d851 aver*0899 #ifdef ALLOW_AUTODIFF
0900
a284455135 Matt*0901 ENDIF
0902 ENDDO
0903 ENDDO
0904 ENDDO
0905 #ifdef ALLOW_AUTODIFF_TAMC
82e538d851 aver*0906
0907
0908
0909
0910 #endif
0911 DO k=1,Nr
0912 DO j=jmin,jmax
0913 DO i=imin,imax
0914 IF ( maskC(i,j,k,bi,bj).EQ.oneRS ) THEN
0915 #endif
0916 Phy_lg_local(i,j,k) = max( epsln, Phy_lg_local(i,j,k) )
0917 Phy_sm_local(i,j,k) = max( epsln, Phy_sm_local(i,j,k) )
0918 Phy_diaz_local(i,j,k) = max( epsln, Phy_diaz_local(i,j,k) )
0919 ENDIF
0920 ENDDO
0921 ENDDO
0922 ENDDO
0923
0924 #if ( defined SIZE_DEP_LIM || defined USE_SIBLING )
0925 # ifdef ALLOW_AUTODIFF_TAMC
edb6656069 Mart*0926
0927
82e538d851 aver*0928
0929 # endif
a284455135 Matt*0930 DO k=1,Nr
0931 DO j=jmin,jmax
0932 DO i=imin,imax
0933 IF ( maskC(i,j,k,bi,bj).EQ.oneRS ) THEN
82e538d851 aver*0934 # ifdef SIZE_DEP_LIM
a284455135 Matt*0935
0936 Phy_lg_local(i,j,k) = Phy_lg_local(i,j,k) +
0937 & Phy_lg_local(i,j,k)*(mu_lg(i,j,k) - lambda_0
0938 & * expkT(i,j,k) *
0939 & (Phy_lg_local(i,j,k)/pivotal)**(1. / 3.))
0940 & * PTRACERS_dTLev(k)
0941
0942 Phy_sm_local(i,j,k) = Phy_sm_local(i,j,k) +
0943 & Phy_sm_local(i,j,k)*(mu_sm(i,j,k) - lambda_0
0944 & * expkT(i,j,k) * (Phy_sm_local(i,j,k)/pivotal))
0945 & * PTRACERS_dTLev(k)
0946
82e538d851 aver*0947 # endif
a284455135 Matt*0948
82e538d851 aver*0949 # ifdef USE_SIBLING
a284455135 Matt*0950
0951
0952
0953
e0f9a7ba0b Matt*0954 Phy_diatom_local(i,j,k) = Phy_lg_local(i,j,k)
0955
0956
0957
0958
0959
82e538d851 aver*0960 # endif
e0f9a7ba0b Matt*0961
0962 ENDIF
0963 ENDDO
0964 ENDDO
0965 ENDDO
a284455135 Matt*0966 #endif /* SIZE_DEP_LIM or USE_SIBLING */
e0f9a7ba0b Matt*0967
a284455135 Matt*0968
0969 #ifdef ALLOW_AUTODIFF_TAMC
edb6656069 Mart*0970
0971
0972
a284455135 Matt*0973 #endif
e0f9a7ba0b Matt*0974
0975 DO k=1,Nr
0976 DO j=jmin,jmax
0977 DO i=imin,imax
0978
a284455135 Matt*0979 IF ( maskC(i,j,k,bi,bj).EQ.oneRS ) THEN
e0f9a7ba0b Matt*0980
0981 #ifdef ADVECT_PHYTO
a284455135 Matt*0982
6df47d206d Jean*0983 PTR_PHY(i,j,k) = Phy_lg_local(i,j,k) + Phy_sm_local(i,j,k)
e0f9a7ba0b Matt*0984 & + Phy_diaz_local(i,j,k)
a284455135 Matt*0985
6df47d206d Jean*0986 phyto_lg(i,j,k,bi,bj) = Phy_lg_local(i,j,k)/PTR_PHY(i,j,k)
0987 phyto_sm(i,j,k,bi,bj) = Phy_sm_local(i,j,k)/PTR_PHY(i,j,k)
0988 phyto_diaz(i,j,k,bi,bj) = Phy_diaz_local(i,j,k)/PTR_PHY(i,j,k)
e0f9a7ba0b Matt*0989 #else
a284455135 Matt*0990
6df47d206d Jean*0991 phyto_lg(i,j,k,bi,bj) = Phy_lg_local(i,j,k)
0992 phyto_sm(i,j,k,bi,bj) = Phy_sm_local(i,j,k)
0993 phyto_diaz(i,j,k,bi,bj) = Phy_diaz_local(i,j,k)
e0f9a7ba0b Matt*0994 #endif
0995
a284455135 Matt*0996
0997
e0f9a7ba0b Matt*0998
0999 chl(i,j,k,bi,bj) = max(chl_min, CtoN * 12.01 * 1. _d 3 *
1000 & theta_Fe(i,j,k) *
1001 & (Phy_lg_local(i,j,k) + Phy_sm_local(i,j,k)
1002 & + Phy_diaz_local(i,j,k)))
1003
1004 ENDIF
1005 ENDDO
1006 ENDDO
1007 ENDDO
82e538d851 aver*1008 #ifdef ALLOW_AUTODIFF_TAMC
1009
1010
1011
1012 #endif
e0f9a7ba0b Matt*1013
a284455135 Matt*1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
e0f9a7ba0b Matt*1035
1036 DO k=1,Nr
1037 DO j=jmin,jmax
1038 DO i=imin,imax
1039
a284455135 Matt*1040 IF ( maskC(i,j,k,bi,bj).EQ.oneRS ) THEN
e0f9a7ba0b Matt*1041
a284455135 Matt*1042
1043
1044 #ifdef NEW_FRAC_EXP
9edc0e3a85 aver*1045
1046
1047
a284455135 Matt*1048
1049 frac_exp = (phi_sm_2d(i,j,bi,bj) * (phyto_sm(i,j,k,bi,bj) +
1050 & phyto_diaz(i,j,k,bi,bj)) + phi_lg_2d(i,j,bi,bj) *
1051 & phyto_lg(i,j,k,bi,bj)) /
1052 & (phyto_sm(i,j,k,bi,bj) + phyto_diaz(i,j,k,bi,bj) +
1053 & phyto_lg(i,j,k,bi,bj)) *
1054 & exp(kappa_remin * theta(i,j,k,bi,bj))
1055
1056 #else
1057
9edc0e3a85 aver*1058
1059
e0f9a7ba0b Matt*1060 frac_exp = (phi_sm_2d(i,j,bi,bj) + phi_lg_2d(i,j,bi,bj) *
a284455135 Matt*1061 & (mu(i,j,k)/(epsln + lambda_0*expkT(i,j,k)))**2)/
1062 & (1. + (mu(i,j,k)/
1063 & (epsln + lambda_0*expkT(i,j,k)))**2)*
e0f9a7ba0b Matt*1064 & exp(kappa_remin * theta(i,j,k,bi,bj))
1065
a284455135 Matt*1066 #endif
1067
e0f9a7ba0b Matt*1068 #ifdef USE_BLING_DVM
1069 N_dvm(i,j,k) = phi_dvm * frac_exp *
1070 & (N_uptake(i,j,k) + N_fix(i,j,k))
1071
1072 P_dvm(i,j,k) = phi_dvm * frac_exp * P_uptake(i,j,k)
1073
1074 Fe_dvm(i,j,k) = phi_dvm * frac_exp * Fe_uptake(i,j,k)
1075
1076 N_spm(i,j,k) = frac_exp * (1.0 - phi_dvm) *
1077 & (N_uptake(i,j,k) + N_fix(i,j,k))
1078
1079 P_spm(i,j,k) = frac_exp * (1.0 - phi_dvm) *
1080 & P_uptake(i,j,k)
1081
1082 Fe_spm(i,j,k) = frac_exp * (1.0 - phi_dvm) *
1083 & Fe_uptake(i,j,k)
1084 #else
1085 N_spm(i,j,k) = frac_exp * (N_uptake(i,j,k) + N_fix(i,j,k))
1086 P_spm(i,j,k) = frac_exp * P_uptake(i,j,k)
1087 Fe_spm(i,j,k) = frac_exp * Fe_uptake(i,j,k)
1088
1089 N_dvm(i,j,k) = 0
1090 P_dvm(i,j,k) = 0
1091 Fe_dvm(i,j,k) = 0
1092 #endif
1093
a284455135 Matt*1094
1095
e0f9a7ba0b Matt*1096
1097 DON_prod(i,j,k) = phi_DOM_2d(i,j,bi,bj)*(N_uptake(i,j,k)
1098 & + N_fix(i,j,k) - N_spm(i,j,k)
1099 & - N_dvm(i,j,k))
1100
1101 DOP_prod(i,j,k) = phi_DOM_2d(i,j,bi,bj)*(P_uptake(i,j,k)
1102 & - P_spm(i,j,k) - P_dvm(i,j,k))
1103
1104 N_recycle(i,j,k) = N_uptake(i,j,k) + N_fix(i,j,k)
1105 & - N_spm(i,j,k) - DON_prod(i,j,k)
1106 & - N_dvm(i,j,k)
1107
1108 P_recycle(i,j,k) = P_uptake(i,j,k)
1109 & - P_spm(i,j,k) - DOP_prod(i,j,k)
1110 & - P_dvm(i,j,k)
1111
1112 Fe_recycle(i,j,k) = Fe_uptake(i,j,k)
1113 & - Fe_spm(i,j,k) - Fe_dvm(i,j,k)
1114
00fa2d4ddd mmaz*1115 #ifdef USE_SIBLING
6ffd1aa797 Jean*1116 frac_diss_Si(i,j,k) = exp(-SitoN_uptake(i,j,k) /
1117 & (q_SitoN_diss *
00fa2d4ddd mmaz*1118 & exp(kappa_remin_Si * theta(i,j,k,bi,bj))))
1119
1120 Si_recycle(i,j,k) = Si_uptake(i,j,k) * frac_diss_Si(i,j,k)
1121
1122 Si_spm(i,j,k) = Si_uptake(i,j,k) - Si_recycle(i,j,k)
1123 #endif
1124
e0f9a7ba0b Matt*1125 ENDIF
1126
1127 ENDDO
1128 ENDDO
1129 ENDDO
1130
82e538d851 aver*1131
1132
1133
1134
1135
1136
1137
1138
1139
fe1862e69b Mart*1140
e0f9a7ba0b Matt*1141
a284455135 Matt*1142
1143
1144
1145
1146
1147
1148
1149
1150
e0f9a7ba0b Matt*1151
1152
6df47d206d Jean*1153 DO j=jmin,jmax
e0f9a7ba0b Matt*1154
6df47d206d Jean*1155 DO i=imin,imax
e0f9a7ba0b Matt*1156
a284455135 Matt*1157
e0f9a7ba0b Matt*1158
1159 PONflux_u = 0. _d 0
1160 POPflux_u = 0. _d 0
1161 PFEflux_u = 0. _d 0
1162 CaCO3flux_u = 0. _d 0
00fa2d4ddd mmaz*1163 #ifdef USE_SIBLING
1164 Siflux_u = 0. _d 0
1165 #endif
e0f9a7ba0b Matt*1166
1167 DO k=1,Nr
fe1862e69b Mart*1168 #ifdef ALLOW_AUTODIFF_TAMC
edb6656069 Mart*1169 ijkkey = k + ( (i-1) + (j-1) * (2*OLx+sNx) ) * Nr
1170 & + (tkey - 1) * (2*OLx+sNx) * (2*OLy+sNy) * Nr
fe1862e69b Mart*1171
1172
1173
1174
1175 # ifdef USE_SIBLING
82e538d851 aver*1176
fe1862e69b Mart*1177 # endif
1178 #endif
e0f9a7ba0b Matt*1179
a284455135 Matt*1180
e0f9a7ba0b Matt*1181
1182 Fe_ads_org(i,j,k) = 0. _d 0
1183
a284455135 Matt*1184 IF ( maskC(i,j,k,bi,bj).EQ.oneRS ) THEN
e0f9a7ba0b Matt*1185
a284455135 Matt*1186
1187
1188
1189
1190
1191
1192
1193
e0f9a7ba0b Matt*1194
1195 depth_l=-rF(k+1)
1196 IF (depth_l .LE. wsink0z) THEN
1197 wsink = wsink0_2d(i,j,bi,bj)
1198 ELSE
1199 wsink = wsinkacc * (depth_l - wsink0z) + wsink0_2d(i,j,bi,bj)
1200 ENDIF
1201
1202 zremin = gamma_POM_2d(i,j,bi,bj) * ( PTR_O2(i,j,k)**2 /
1203 & (k_O2**2 + PTR_O2(i,j,k)**2) * (1-remin_min)
1204 & + remin_min )/(wsink + epsln)
1205
1206
1207
1208
1209 zremin_caco3 = 1. _d 0/ca_remin_depth*(1. _d 0 - min(1. _d 0,
1210 & omegaC(i,j,k,bi,bj) + epsln ))
1211
00fa2d4ddd mmaz*1212 #ifdef USE_SIBLING
1213 zremin_Si = gamma_Si_0 / wsink_Si
1214 #endif
1215
e0f9a7ba0b Matt*1216
1217
1218 PONflux_l = (PONflux_u+N_spm(i,j,k)*drF(k)
1219 & *hFacC(i,j,k,bi,bj))/(1+zremin*drF(k)
1220 & *hFacC(i,j,k,bi,bj))
1221
1222 POPflux_l = (POPflux_u+P_spm(i,j,k)*drF(k)
1223 & *hFacC(i,j,k,bi,bj))/(1+zremin*drF(k)
1224 & *hFacC(i,j,k,bi,bj))
1225
1226
1227
1228 CaCO3flux_l = (caco3flux_u+CaCO3_uptake(i,j,k)*drF(k)
1229 & *hFacC(i,j,k,bi,bj))/(1+zremin_caco3*drF(k)
1230 & *hFacC(i,j,k,bi,bj))
1231
00fa2d4ddd mmaz*1232 #ifdef USE_SIBLING
1233 Siflux_l = (Siflux_u+Si_spm(i,j,k)*drF(k)
1234 & *hFacC(i,j,k,bi,bj))/(1+zremin_Si*drF(k)
1235 & *hFacC(i,j,k,bi,bj))
1236 #endif
1237
a284455135 Matt*1238
e0f9a7ba0b Matt*1239
a284455135 Matt*1240 IF ( k.NE.kLowC(i,j,bi,bj) ) THEN
1241
e0f9a7ba0b Matt*1242
1243
1244
1245
1246
1247
1248 N_reminp(i,j,k) = (PONflux_u + N_spm(i,j,k)*drF(k)
1249 & - PONflux_l)*recip_drF(k)
1250
1251 P_reminp(i,j,k) = (POPflux_u + P_spm(i,j,k)*drF(k)
1252 & - POPflux_l)*recip_drF(k)
1253
1254 CaCO3_diss(i,j,k) = (CaCO3flux_u + CaCO3_uptake(i,j,k)
1255 & *drF(k) - CaCO3flux_l)*recip_drF(k)
1256
00fa2d4ddd mmaz*1257 #ifdef USE_SIBLING
1258 Si_reminp(i,j,k) = (Siflux_u + Si_spm(i,j,k)*drF(k)
1259 & - Siflux_l)*recip_drF(k)
1260 #endif
1261
e0f9a7ba0b Matt*1262 Fe_sed(i,j,k) = 0. _d 0
1263
1264 ELSE
a284455135 Matt*1265
e0f9a7ba0b Matt*1266
1267
1268
1269
1270
1271 N_reminp(i,j,k) = PONflux_u*recip_drF(k)
1272 & *recip_hFacC(i,j,k,bi,bj) + N_spm(i,j,k)
1273
1274 P_reminp(i,j,k) = POPflux_u*recip_drF(k)
1275 & *recip_hFacC(i,j,k,bi,bj) + P_spm(i,j,k)
1276
1277 CaCO3_diss(i,j,k) = CaCO3flux_u*recip_drF(k)
1278 & *recip_hFacC(i,j,k,bi,bj) + CaCO3_uptake(i,j,k)
1279
00fa2d4ddd mmaz*1280 #ifdef USE_SIBLING
1281 Si_reminp(i,j,k) = Siflux_u*recip_drF(k)
1282 & *recip_hFacC(i,j,k,bi,bj) + Si_spm(i,j,k)
1283 #endif
1284
e0f9a7ba0b Matt*1285
1286
1287
1288
1289
1290 POC_sed = PONflux_l * CtoN
1291
1292 Fe_sed(i,j,k) = max(epsln, FetoC_sed * POC_sed * recip_drF(k)
1293 & *recip_hFacC(i,j,k,bi,bj))
1294
1295 log_btm_flx = 1. _d -20
1296
1297
1298 #ifndef BLING_ADJOINT_SAFE
1299 IF (POC_sed .gt. 0. _d 0) THEN
1300
1301
1302
1303 log_btm_flx = log10(min(43.0 _d 0, POC_sed *
1304 & 86400. _d 0 * 100.0 _d 0))
1305
1306
1307
1308
6df47d206d Jean*1309 N_den_benthic(i,j,k) = min (POC_sed * NO3toN / CtoN,
e0f9a7ba0b Matt*1310 & (10 _d 0)**(-0.9543 _d 0 + 0.7662 _d 0 *
1311 & log_btm_flx - 0.235 _d 0 * log_btm_flx * log_btm_flx)
1312 & / (CtoN * 86400. _d 0 * 100.0 _d 0) * NO3toN *
1313 & PTR_NO3(i,j,k) / (k_no3 + PTR_NO3(i,j,k)) ) *
1314 & recip_drF(k)
1315
6df47d206d Jean*1316 ENDIF
e0f9a7ba0b Matt*1317 #endif
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
6df47d206d Jean*1337 NO3_btmflx(i,j) = PONflux_l*drF(k)*hFacC(i,j,k,bi,bj)
e0f9a7ba0b Matt*1338 & - N_den_benthic(i,j,k) / NO3toN
1339
6df47d206d Jean*1340 PO4_btmflx(i,j) = POPflux_l*drF(k)*hFacC(i,j,k,bi,bj)
e0f9a7ba0b Matt*1341
1342
1343
1344
1345
1346
b3fa08b734 Jean*1347 O2_btmflx(i,j) = -( O2toN*PONflux_l*drF(k)*hFacC(i,j,k,bi,bj)
e0f9a7ba0b Matt*1348 & - N_den_benthic(i,j,k)* 1.25)
1349
1350 ENDIF
1351
a284455135 Matt*1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
e0f9a7ba0b Matt*1363
1364 kFe_eq_lig = kFe_eq_lig_max-(kFe_eq_lig_max-kFe_eq_lig_min)
1365 & *(irr_inst(i,j,k)**2
1366 & /(kFe_eq_lig_irr**2+irr_inst(i,j,k)**2))
1367 & *max(epsln,min(1. _d 0,(PTR_FE(i,j,k)
1368 & -kFe_eq_lig_Femin)/
1369 & (PTR_FE(i,j,k)+epsln)*1.2 _d 0))
1370
1371 FreeFe = (-(1+kFe_eq_lig*(ligand-PTR_FE(i,j,k)))
1372 & +((1+kFe_eq_lig*(ligand-PTR_FE(i,j,k)))**2+4*
1373 & kFe_eq_lig*PTR_FE(i,j,k))**(0.5))/(2*
1374 & kFe_eq_lig)
1375
1376 IF (PTR_O2(i,j,k) .LT. oxic_min) THEN
1377 FreeFe = 0. _d 0
1378 ENDIF
1379
6df47d206d Jean*1380 Fe_ads_inorg(i,j,k) =
e0f9a7ba0b Matt*1381 & kFe_inorg*(max(1. _d -8,FreeFe))**(1.5)
1382
a284455135 Matt*1383
1384
1385
1386
e0f9a7ba0b Matt*1387
6df47d206d Jean*1388 IF ( PONflux_l .GT. 0. _d 0 ) THEN
e0f9a7ba0b Matt*1389 Fe_ads_org(i,j,k) =
1390 & kFE_org*(PONflux_l/(epsln + wsink)
1391 & * MasstoN)**(0.58)*FreeFe
6df47d206d Jean*1392 ENDIF
e0f9a7ba0b Matt*1393
6df47d206d Jean*1394 PFEflux_l = (PFEflux_u+(Fe_spm(i,j,k)+Fe_ads_inorg(i,j,k)
e0f9a7ba0b Matt*1395 & +Fe_ads_org(i,j,k))*drF(k)
1396 & *hFacC(i,j,k,bi,bj))/(1+zremin*drF(k)
1397 & *hFacC(i,j,k,bi,bj))
1398
1399
1400
1401
1402
6df47d206d Jean*1403 Fe_burial(i,j) = PFEflux_l
e0f9a7ba0b Matt*1404
6df47d206d Jean*1405 IF ( PTR_O2(i,j,k) .LT. oxic_min ) THEN
e0f9a7ba0b Matt*1406 PFEflux_l = 0. _d 0
6df47d206d Jean*1407 ENDIF
e0f9a7ba0b Matt*1408
6df47d206d Jean*1409 Fe_reminp(i,j,k) = (PFEflux_u+(Fe_spm(i,j,k)
e0f9a7ba0b Matt*1410 & +Fe_ads_inorg(i,j,k)
1411 & +Fe_ads_org(i,j,k))*drF(k)
1412 & *hFacC(i,j,k,bi,bj)-PFEflux_l)*recip_drF(k)
1413 & *recip_hFacC(i,j,k,bi,bj)
1414
1415 Fe_reminsum(i,j,k) = Fe_reminp(i,j,k) + Fe_sed(i,j,k)
1416 & - Fe_ads_org(i,j,k) - Fe_ads_inorg(i,j,k)
1417
1418
1419
1420 PONflux_u = PONflux_l
1421 POPflux_u = POPflux_l
1422 PFEflux_u = PFEflux_l
1423 CaCO3flux_u = CaCO3flux_l
00fa2d4ddd mmaz*1424 #ifdef USE_SIBLING
1425 Siflux_u = Siflux_l
1426 #endif
e0f9a7ba0b Matt*1427
1428 ENDIF
1429
1430 ENDDO
1431 ENDDO
1432 ENDDO
fe1862e69b Mart*1433 #ifdef ALLOW_AUTODIFF_TAMC
edb6656069 Mart*1434
fe1862e69b Mart*1435 #endif
a284455135 Matt*1436
1437
e0f9a7ba0b Matt*1438 #ifdef USE_BLING_DVM
1439
a284455135 Matt*1440
1441
1442
1443
1444
1445
1446
1447
1448
e0f9a7ba0b Matt*1449
1450
1451 DO j=jmin,jmax
1452
1453 DO i=imin,imax
1454
a284455135 Matt*1455
e0f9a7ba0b Matt*1456 o2_upper = 0.
1457 o2_lower = 0.
1458 dz_upper = 0.
1459 dz_lower = 0.
1460 temp_upper = 0.
1461 temp_lower = 0.
1462 z_dvm_regr = 0.
1463 z_dvm = 0.
1464 frac_migr = 0.
1465 fdvm_migr = 0.
1466 fdvm_stat = 0.
1467 fdvmn_vint = 0.
1468 fdvmp_vint = 0.
1469 fdvmfe_vint = 0.
1470
1471 DO k=1,Nr
1472
a284455135 Matt*1473 IF ( maskC(i,j,k,bi,bj).EQ.oneRS ) THEN
e0f9a7ba0b Matt*1474
a284455135 Matt*1475
e0f9a7ba0b Matt*1476
6df47d206d Jean*1477 depth_l=-rF(k+1)
e0f9a7ba0b Matt*1478
a284455135 Matt*1479
1480
e0f9a7ba0b Matt*1481
1482 if ( abs(depth_l) .lt. 35.) then
1483 dz_upper = dz_upper + drf(k)
1484 temp_upper = temp_upper + theta(i,j,k,bi,bj)*drf(k)
1485 o2_upper = o2_upper + PTR_O2(i,j,k) * drf(k)*1.0 _d 3
1486 endif
1487 if ( (abs(depth_l) .gt. 140.0 _d 0) .and.
1488 & (abs(depth_l) .lt. 515. _d 0)) then
1489 dz_lower = dz_lower + drf(k)
1490 temp_lower = temp_lower + theta(i,j,k,bi,bj)*drf(k)
1491 o2_lower = o2_lower + PTR_O2(i,j,k) * drf(k)*1.0 _d 3
1492 endif
1493
1494 ENDIF
1495 ENDDO
1496
1497 o2_upper = o2_upper / (epsln + dz_upper)
1498 temp_upper = temp_upper / (epsln + dz_upper)
1499 o2_lower = o2_lower / (epsln + dz_lower)
1500 temp_lower = temp_lower / (epsln + dz_lower)
1501
a284455135 Matt*1502
1503
1504
1505
1506
1507
e0f9a7ba0b Matt*1508
1509 z_dvm_regr = 398. _d 0
1510 & - 0.56 _d 0*min(300. _d 0,max(-10. _d 0,(o2_upper - o2_lower)))
1511 & - 115. _d 0*min(0.85 _d 0,max(-1.80 _d 0,
1512 & log10(max(chl(i,j,1,bi,bj),chl_min))))
1513 & + 0.36 _d 0*min(500. _d 0,max(epsln,mld(i,j)))
1514 & - 2.40 _d 0*min(20. _d 0,max(-3. _d 0,(temp_upper-temp_lower)))
1515
a284455135 Matt*1516
1517
1518
1519
1520
e0f9a7ba0b Matt*1521
1522 if ( irr_mem(i,j,1,bi,bj) .lt. 10. ) then
1523 z_dvm_regr = 150. _d 0 + (z_dvm_regr - 150. _d 0) *
1524 & irr_mem(i,j,1,bi,bj) / 10. _d 0
1525 endif
1526
a284455135 Matt*1527
1528
1529
1530
1531
e0f9a7ba0b Matt*1532
1533 tmp_dvm = 0
1534 DO k=1,Nr-2
1535
a284455135 Matt*1536 IF ( maskC(i,j,k,bi,bj).EQ.oneRS .AND. tmp_dvm.EQ.0 ) THEN
e0f9a7ba0b Matt*1537
1538 z_dvm = -rf(k+1)
1539 if (PTR_O2(i,j,k+2) .lt. (5. _d 0*oxic_min)) tmp_dvm = 1
1540
1541 ENDIF
1542
6df47d206d Jean*1543 ENDDO
e0f9a7ba0b Matt*1544
a284455135 Matt*1545
1546
e0f9a7ba0b Matt*1547
1548 z_dvm = min(700. _d 0,max(150. _d 0,z_dvm_regr),z_dvm,-rf(k+1))
1549
a284455135 Matt*1550
1551
1552
1553
1554
e0f9a7ba0b Matt*1555
1556 frac_migr = max( 0.0 _d 0, min( 1.0 _d 0, (2.0 _d 0 * z_dvm) /
1557 & (epsln + 0.05 _d 0 * 0.5 _d 0 * 86400. _d 0)))
1558
a284455135 Matt*1559
1560
1561
e0f9a7ba0b Matt*1562
1563 tmp_dvm = 0
1564 DO k=1,Nr
1565
a284455135 Matt*1566 IF ( maskC(i,j,k,bi,bj).EQ.oneRS .AND. tmp_dvm.EQ.0 ) THEN
e0f9a7ba0b Matt*1567
a284455135 Matt*1568
1569
e0f9a7ba0b Matt*1570 if (-rf(k+1) .lt. z_dvm) then
1571 fdvm_migr = frac_migr / (epsln + z_dvm - (-rf(2))) *
1572 & (z_dvm - (-rf(k+1)) )
1573 else
1574 fdvm_migr = 0.0
1575 endif
1576
a284455135 Matt*1577
e0f9a7ba0b Matt*1578
a284455135 Matt*1579
1580
1581
1582
e0f9a7ba0b Matt*1583
6df47d206d Jean*1584 x_erfcc = (-rf(k) - z_dvm) /
e0f9a7ba0b Matt*1585 & ( (epsln + 2. _d 0 * sigma_dvm**2. _d 0)**0.5)
1586
6df47d206d Jean*1587 z_erfcc = abs(x_erfcc)
e0f9a7ba0b Matt*1588
6df47d206d Jean*1589 t_erfcc = 1. _d 0/(1. _d 0+0.5 _d 0*z_erfcc)
e0f9a7ba0b Matt*1590
6df47d206d Jean*1591 erfcc = t_erfcc*exp(-z_erfcc*z_erfcc-1.26551223+t_erfcc*
e0f9a7ba0b Matt*1592 & (1.00002368+t_erfcc*(0.37409196+t_erfcc*
1593 & (.09678418+t_erfcc*(-.18628806+t_erfcc*(.27886807+
1594 & t_erfcc*(-1.13520398+t_erfcc*(1.48851587+
1595 & t_erfcc*(-0.82215223+t_erfcc*0.17087277)))))))))
1596
1597 if (x_erfcc .lt. 0.0) then
1598 erfcc = 2.0 - erfcc
1599 endif
1600
1601 fdvm_stat = (1. _d 0 - frac_migr) / 2. _d 0 * erfcc
1602
a284455135 Matt*1603
1604
1605
1606
1607
e0f9a7ba0b Matt*1608
a284455135 Matt*1609 IF (k.LT.Nr-1) THEN
e0f9a7ba0b Matt*1610 if (PTR_O2(i,j,k+2) .lt. (5. _d 0*oxic_min)) tmp_dvm = 1
1611 ENDIF
1612
1613 dvm(i,j,k) = fdvm_migr + fdvm_stat
1614
1615 ENDIF
1616
6df47d206d Jean*1617 ENDDO
e0f9a7ba0b Matt*1618
a284455135 Matt*1619
e0f9a7ba0b Matt*1620
fe1862e69b Mart*1621 do k = 1, Nr
e0f9a7ba0b Matt*1622 fdvmn_vint = fdvmn_vint + N_dvm(i,j,k) * drf(k)
1623 fdvmp_vint = fdvmp_vint + P_dvm(i,j,k) * drf(k)
1624 fdvmfe_vint = fdvmfe_vint + Fe_dvm(i,j,k) * drf(k)
1625 enddo
1626
a284455135 Matt*1627
e0f9a7ba0b Matt*1628
1629 N_remindvm(i,j,1) = fdvmn_vint * (1 - dvm(i,j,1)) /
1630 & (epsln + drf(1))
1631 P_remindvm(i,j,1) = fdvmp_vint * (1 - dvm(i,j,1)) /
1632 & (epsln + drf(1))
1633 Fe_remindvm(i,j,1) = fdvmfe_vint * (1 - dvm(i,j,1)) /
1634 & (epsln + drf(1))
1635
fe1862e69b Mart*1636 do k = 2, Nr
e0f9a7ba0b Matt*1637 N_remindvm(i,j,k) = fdvmn_vint *
1638 & (dvm(i,j,k-1) - dvm(i,j,k)) / (epsln + drf(k))
1639 P_remindvm(i,j,k) = fdvmp_vint *
1640 & (dvm(i,j,k-1) - dvm(i,j,k)) / (epsln + drf(k))
1641 Fe_remindvm(i,j,k) = fdvmfe_vint *
1642 & (dvm(i,j,k-1) - dvm(i,j,k)) / (epsln + drf(k))
1643 enddo
1644
1645 enddo
1646 enddo
1647
1648 #endif
1649
a284455135 Matt*1650
e0f9a7ba0b Matt*1651
1652 DO k=1,Nr
1653 DO j=jmin,jmax
1654 DO i=imin,imax
1655
a284455135 Matt*1656 IF ( maskC(i,j,k,bi,bj).EQ.oneRS ) THEN
e0f9a7ba0b Matt*1657
a284455135 Matt*1658
e0f9a7ba0b Matt*1659
1660 #ifdef BLING_NO_NEG
1661 DON_remin(i,j,k) = MAX(maskC(i,j,k,bi,bj)*gamma_DON
1662 & *PTR_DON(i,j,k),0. _d 0)
1663
1664 DOP_remin(i,j,k) = MAX(maskC(i,j,k,bi,bj)*gamma_DOP
1665 & *PTR_DOP(i,j,k),0. _d 0)
1666 #else
1667 DON_remin(i,j,k) = maskC(i,j,k,bi,bj)*gamma_DON
1668 & *PTR_DON(i,j,k)
1669
1670 DOP_remin(i,j,k) = maskC(i,j,k,bi,bj)*gamma_DOP
1671 & *PTR_DOP(i,j,k)
1672 #endif
1673
a284455135 Matt*1674
1675
e0f9a7ba0b Matt*1676
1677 IF (PTR_O2(i,j,k) .lt. oxic_min) THEN
1678 IF (PTR_NO3(i,j,k) .gt. oxic_min) THEN
1679 N_den_pelag(i,j,k) = max(epsln, (NO3toN *
1680 & ((1. _d 0 - phi_DOM_2d(i,j,bi,bj))
1681 & * (N_reminp(i,j,k)
1682 & + N_remindvm(i,j,k)) + DON_remin(i,j,k) +
1683 & N_recycle(i,j,k))) - N_den_benthic(i,j,k))
1684 ENDIF
1685 ENDIF
1686
a284455135 Matt*1687
e0f9a7ba0b Matt*1688
1689 O2_prod(i,j,k) = O2toN * N_uptake(i,j,k)
1690 & + (O2toN - 1.25 _d 0) * N_fix(i,j,k)
1691
a284455135 Matt*1692
e0f9a7ba0b Matt*1693
1694
a284455135 Matt*1695
1696
1697
e0f9a7ba0b Matt*1698
1699 G_PO4(i,j,k) = -P_uptake(i,j,k) + P_recycle(i,j,k)
1700 & + (1. _d 0 - phi_DOM_2d(i,j,bi,bj))
1701 & * (P_reminp(i,j,k)
1702 & + P_remindvm(i,j,k)) + DOP_remin(i,j,k)
1703
1704 G_NO3(i,j,k) = -N_uptake(i,j,k)
1705 IF (PTR_O2(i,j,k) .lt. oxic_min) THEN
a284455135 Matt*1706
e0f9a7ba0b Matt*1707 G_NO3(i,j,k) = G_NO3(i,j,k)
1708 & - N_den_pelag(i,j,k) - N_den_benthic(i,j,k)
1709 ELSE
a284455135 Matt*1710
e0f9a7ba0b Matt*1711 G_NO3(i,j,k) = G_NO3(i,j,k)
1712 & + N_recycle(i,j,k)
1713 & + (1. _d 0 - phi_DOM_2d(i,j,bi,bj))
1714 & * (N_reminp(i,j,k) + N_remindvm(i,j,k))
1715 & + DON_remin(i,j,k)
a284455135 Matt*1716 & - N_den_benthic(i,j,k)
e0f9a7ba0b Matt*1717 ENDIF
1718
a284455135 Matt*1719
1720
1721
e0f9a7ba0b Matt*1722
1723 G_FE(i,j,k) = -Fe_uptake(i,j,k) + Fe_reminsum(i,j,k)
1724 & + Fe_remindvm(i,j,k) + Fe_recycle(i,j,k)
1725
a284455135 Matt*1726
1727
e0f9a7ba0b Matt*1728
1729 G_DON(i,j,k) = DON_prod(i,j,k) + phi_DOM_2d(i,j,bi,bj)
1730 & * (N_reminp(i,j,k) + N_remindvm(i,j,k))
1731 & - DON_remin(i,j,k)
1732
1733 G_DOP(i,j,k) = DOP_prod(i,j,k) + phi_DOM_2d(i,j,bi,bj)
1734 & * (P_reminp(i,j,k) + P_remindvm(i,j,k))
1735 & - DOP_remin(i,j,k)
1736
a284455135 Matt*1737
1738
1739
1740
1741
1742
1743
1744
e0f9a7ba0b Matt*1745
1746 G_O2(i,j,k) = O2_prod(i,j,k)
a284455135 Matt*1747
e0f9a7ba0b Matt*1748 IF (PTR_O2(i,j,k) .gt. oxic_min) THEN
6df47d206d Jean*1749 G_O2(i,j,k) = G_O2(i,j,k)
e0f9a7ba0b Matt*1750 & -O2toN * ((1. _d 0 - phi_DOM_2d(i,j,bi,bj))
1751 & * (N_reminp(i,j,k) + N_remindvm(i,j,k))
1752 & + DON_remin(i,j,k) + N_recycle(i,j,k))
a284455135 Matt*1753 & + N_den_benthic(i,j,k) * 1.25 _d 0
1754
1755
e0f9a7ba0b Matt*1756 ELSEIF (PTR_NO3(i,j,k) .lt. oxic_min) THEN
6df47d206d Jean*1757 G_O2(i,j,k) = G_O2(i,j,k)
e0f9a7ba0b Matt*1758 & -O2toN * ((1. _d 0 - phi_DOM_2d(i,j,bi,bj))
1759 & * (N_reminp(i,j,k) + N_remindvm(i,j,k))
1760 & + DON_remin(i,j,k) + N_recycle(i,j,k))
1761 ENDIF
1762
00fa2d4ddd mmaz*1763 #ifdef USE_SIBLING
1764 G_Si(i,j,k) = -Si_uptake(i,j,k) + Si_recycle(i,j,k)
1765 & + Si_reminp(i,j,k)
1766 #endif
1767
a284455135 Matt*1768
e0f9a7ba0b Matt*1769
1770 NCP(i,j,k) = (N_uptake(i,j,k) + N_fix(i,j,k)
1771 & - N_recycle(i,j,k)
1772 & - (1. _d 0 - phi_DOM_2d(i,j,bi,bj))
1773 & * (N_reminp(i,j,k) + N_remindvm(i,j,k))
1774 & - DON_remin(i,j,k) ) * CtoN
1775
1776 G_CaCO3(i,j,k) = CaCO3_diss(i,j,k) - CaCO3_uptake(i,j,k)
1777
1778 G_ALK(i,j,k) = - G_NO3(i,j,k)
1779 & + 2. _d 0*G_CaCO3(i,j,k)
1780
1781 G_DIC(i,j,k) = -NCP(i,j,k) + G_CaCO3(i,j,k)
1782
a284455135 Matt*1783
e0f9a7ba0b Matt*1784
6df47d206d Jean*1785 Phy_lg_local(i,j,k) = Phy_lg_local(i,j,k) * CtoN
1786 Phy_sm_local(i,j,k) = Phy_sm_local(i,j,k) * CtoN
1787 Phy_diaz_local(i,j,k) = Phy_diaz_local(i,j,k) * CtoN
e0f9a7ba0b Matt*1788
a284455135 Matt*1789
1790
e0f9a7ba0b Matt*1791
6df47d206d Jean*1792 poc(i,j,k,bi,bj) = (Phy_lg_local(i,j,k) + Phy_sm_local(i,j,k)
82e538d851 aver*1793 & + Phy_diaz_local(i,j,k) ) * CtoN * 3.33333 _d 0
e0f9a7ba0b Matt*1794
1795 ENDIF
1796
1797 ENDDO
1798 ENDDO
1799 ENDDO
1800
a284455135 Matt*1801
e0f9a7ba0b Matt*1802
1803 #ifdef ALLOW_DIAGNOSTICS
1804 IF ( useDiagnostics ) THEN
1805
82e538d851 aver*1806 DO k=1,Nr
1807 DO j=jmin,jmax
1808 DO i=imin,imax
1809
1810 IF ( maskC(i,j,k,bi,bj).EQ.oneRS ) THEN
1811
1812 NPP(i,j,k) = (N_uptake(i,j,k) + N_fix(i,j,k)) * CtoN
1813
1814
1815
1816 Phy_lg_local(i,j,k) = Phy_lg_local(i,j,k) * CtoN
1817 Phy_sm_local(i,j,k) = Phy_sm_local(i,j,k) * CtoN
1818 Phy_diaz_local(i,j,k) = Phy_diaz_local(i,j,k) * CtoN
1819
1820
1821
1822 POC_flux(i,j,k) = CtoN * N_spm(i,j,k)
1823
1824
1825
1826 IF ( theta_Fe(i,j,k).EQ.zeroRL ) THEN
1827 theta_Fe_inv(i,j,k) = 0. _d 0
1828 ELSE
1829 theta_Fe_inv(i,j,k) = oneRL/theta_Fe(i,j,k)
1830 ENDIF
1831
1832 ELSE
1833 NPP(i,j,k) = 0. _d 0
1834 Phy_lg_local(i,j,k) = 0. _d 0
1835 Phy_sm_local(i,j,k) = 0. _d 0
1836 Phy_diaz_local(i,j,k) = 0. _d 0
1837 POC_flux(i,j,k) = 0. _d 0
1838 theta_Fe_inv(i,j,k) = 0. _d 0
1839 ENDIF
1840
1841 ENDDO
1842 ENDDO
1843 ENDDO
1844
a284455135 Matt*1845
e0f9a7ba0b Matt*1846 CALL DIAGNOSTICS_FILL(chl, 'BLGCHL ',0,Nr,1,bi,bj,myThid)
1847 CALL DIAGNOSTICS_FILL(poc, 'BLGPOC ',0,Nr,1,bi,bj,myThid)
1848 CALL DIAGNOSTICS_FILL(irr_mem,'BLGIMEM ',0,Nr,1,bi,bj,myThid)
a284455135 Matt*1849
e0f9a7ba0b Matt*1850 CALL DIAGNOSTICS_FILL(G_DIC ,'BLGBIOC ',0,Nr,2,bi,bj,myThid)
1851 CALL DIAGNOSTICS_FILL(G_ALK ,'BLGBIOAL',0,Nr,2,bi,bj,myThid)
1852 CALL DIAGNOSTICS_FILL(G_O2 ,'BLGBIOO2',0,Nr,2,bi,bj,myThid)
1853 CALL DIAGNOSTICS_FILL(G_Fe ,'BLGBIOFE',0,Nr,2,bi,bj,myThid)
1854 CALL DIAGNOSTICS_FILL(G_PO4 ,'BLGBIOP ',0,Nr,2,bi,bj,myThid)
1855 CALL DIAGNOSTICS_FILL(G_NO3 ,'BLGBION ',0,Nr,2,bi,bj,myThid)
1856 CALL DIAGNOSTICS_FILL(Phy_sm_local,'BLGPSM ',0,Nr,2,bi,bj,
1857 & myThid)
1858 CALL DIAGNOSTICS_FILL(Phy_lg_local,'BLGPLG ',0,Nr,2,bi,bj,
1859 & myThid)
1860 CALL DIAGNOSTICS_FILL(Phy_diaz_local,'BLGPDIA ',0,Nr,2,bi,bj,
1861 & myThid)
1862 CALL DIAGNOSTICS_FILL(irrk, 'BLGIRRK ',0,Nr,2,bi,bj,myThid)
1863 CALL DIAGNOSTICS_FILL(irr_eff, 'BLGIEFF ',0,Nr,2,bi,bj,myThid)
00fa2d4ddd mmaz*1864 CALL DIAGNOSTICS_FILL(irr_inst,'BLGIRRIS',0,Nr,2,bi,bj,myThid)
e0f9a7ba0b Matt*1865 CALL DIAGNOSTICS_FILL(theta_Fe,'BLGCHL2C',0,Nr,2,bi,bj,myThid)
1866 CALL DIAGNOSTICS_FILL(theta_Fe_inv,'BLGC2CHL',0,Nr,2,bi,bj,
1867 & myThid)
1868 CALL DIAGNOSTICS_FILL(Fe_lim, 'BLGFELIM',0,Nr,2,bi,bj,myThid)
1869 CALL DIAGNOSTICS_FILL(NO3_lim, 'BLGNLIM ',0,Nr,2,bi,bj,myThid)
1870 CALL DIAGNOSTICS_FILL(PO4_lim, 'BLGPLIM ',0,Nr,2,bi,bj,myThid)
1871 #ifdef USE_SIBLING
00fa2d4ddd mmaz*1872 CALL DIAGNOSTICS_FILL(G_SI ,'BLGBIOSI',0,Nr,2,bi,bj,myThid)
e0f9a7ba0b Matt*1873 CALL DIAGNOSTICS_FILL(Si_lim, 'BLGSILIM',0,Nr,2,bi,bj,myThid)
00fa2d4ddd mmaz*1874 CALL DIAGNOSTICS_FILL(Si_uptake,'BLGSIUP ',0,Nr,2,bi,bj,myThid)
1875 CALL DIAGNOSTICS_FILL(Si_recycle,'BLGSIREC',0,Nr,2,bi,bj,myThid)
1876 CALL DIAGNOSTICS_FILL(Si_reminp,'BLGSIREM',0,Nr,2,bi,bj,myThid)
1877 CALL DIAGNOSTICS_FILL(SitoN_uptake,'BLGSI2N ',0,Nr,2,bi,bj,
1878 & myThid)
1879 CALL DIAGNOSTICS_FILL(frac_diss_Si,'BLGSIDIS',0,Nr,2,bi,bj,
1880 & myThid)
e0f9a7ba0b Matt*1881 #endif
1882 CALL DIAGNOSTICS_FILL(light_lim,'BLGLLIM ',0,Nr,2,bi,bj,myThid)
1883 CALL DIAGNOSTICS_FILL(POC_flux,'BLGPOCF ',0,Nr,2,bi,bj,myThid)
1884 CALL DIAGNOSTICS_FILL(PtoN, 'BLGP2N ',0,Nr,2,bi,bj,myThid)
1885 CALL DIAGNOSTICS_FILL(FetoN, 'BLGFE2N ',0,Nr,2,bi,bj,myThid)
1886 CALL DIAGNOSTICS_FILL(NPP, 'BLGNPP ',0,Nr,2,bi,bj,myThid)
1887 CALL DIAGNOSTICS_FILL(NCP, 'BLGNCP ',0,Nr,2,bi,bj,myThid)
1888 CALL DIAGNOSTICS_FILL(Fe_dvm, 'BLGFEDVM',0,Nr,2,bi,bj,myThid)
1889 CALL DIAGNOSTICS_FILL(Fe_spm, 'BLGFESPM',0,Nr,2,bi,bj,myThid)
1890 CALL DIAGNOSTICS_FILL(Fe_recycle, 'BLGFEREC',0,Nr,2,bi,bj,
1891 & myThid)
1892 CALL DIAGNOSTICS_FILL(Fe_remindvm, 'BLGFERD ',0,Nr,2,bi,bj,
1893 & myThid)
1894 CALL DIAGNOSTICS_FILL(Fe_uptake,'BLGFEUP ',0,Nr,2,bi,bj,myThid)
1895 CALL DIAGNOSTICS_FILL(N_den_benthic,'BLGNDENB',0,Nr,2,bi,bj,
1896 & myThid)
1897 CALL DIAGNOSTICS_FILL(N_den_pelag, 'BLGNDENP',0,Nr,2,bi,bj,
1898 & myThid)
1899 CALL DIAGNOSTICS_FILL(N_dvm, 'BLGNDVM ',0,Nr,2,bi,bj,myThid)
1900 CALL DIAGNOSTICS_FILL(N_fix, 'BLGNFIX ',0,Nr,2,bi,bj,myThid)
1901 CALL DIAGNOSTICS_FILL(DON_prod, 'BLGDONP ',0,Nr,2,bi,bj,myThid)
1902 CALL DIAGNOSTICS_FILL(DON_remin,'BLGDONR ',0,Nr,2,bi,bj,myThid)
1903 CALL DIAGNOSTICS_FILL(N_spm, 'BLGNSPM ',0,Nr,2,bi,bj,myThid)
1904 CALL DIAGNOSTICS_FILL(N_recycle,'BLGNREC ',0,Nr,2,bi,bj,myThid)
1905 CALL DIAGNOSTICS_FILL(N_remindvm,'BLGNRD ',0,Nr,2,bi,bj,myThid)
1906 CALL DIAGNOSTICS_FILL(N_reminp, 'BLGNREM ',0,Nr,2,bi,bj,myThid)
1907 CALL DIAGNOSTICS_FILL(N_uptake, 'BLGNUP ',0,Nr,2,bi,bj,myThid)
1908 CALL DIAGNOSTICS_FILL(P_dvm, 'BLGPDVM ',0,Nr,2,bi,bj,myThid)
1909 CALL DIAGNOSTICS_FILL(DOP_prod, 'BLGDOPP ',0,Nr,2,bi,bj,myThid)
1910 CALL DIAGNOSTICS_FILL(DOP_remin,'BLGDOPR ',0,Nr,2,bi,bj,myThid)
1911 CALL DIAGNOSTICS_FILL(P_spm, 'BLGPSPM ',0,Nr,2,bi,bj,myThid)
1912 CALL DIAGNOSTICS_FILL(P_recycle,'BLGPREC ',0,Nr,2,bi,bj,myThid)
1913 CALL DIAGNOSTICS_FILL(P_remindvm,'BLGPRD ',0,Nr,2,bi,bj,myThid)
1914 CALL DIAGNOSTICS_FILL(P_reminp, 'BLGPREM ',0,Nr,2,bi,bj,myThid)
1915 CALL DIAGNOSTICS_FILL(P_uptake, 'BLGPUP ',0,Nr,2,bi,bj,myThid)
1916 CALL DIAGNOSTICS_FILL(mu, 'BLGMU ',0,Nr,2,bi,bj,myThid)
1917 CALL DIAGNOSTICS_FILL(mu_diaz, 'BLGMUDIA',0,Nr,2,bi,bj,myThid)
1918 CALL DIAGNOSTICS_FILL(CaCO3_diss, 'BLGCCdis',0,Nr,2,bi,bj,
1919 & myThid)
1920 CALL DIAGNOSTICS_FILL(CaCO3_uptake,'BLGCCpro',0,Nr,2,bi,bj,
1921 & myThid)
1922 CALL DIAGNOSTICS_FILL(Fe_ads_org, 'BLGFEADO',0,Nr,2,bi,bj,
1923 & myThid)
1924 CALL DIAGNOSTICS_FILL(Fe_ads_inorg,'BLGFEADI',0,Nr,2,bi,bj,
1925 & myThid)
1926 CALL DIAGNOSTICS_FILL(Fe_sed, 'BLGFESED',0,Nr,2,bi,bj,myThid)
1927 CALL DIAGNOSTICS_FILL(Fe_reminp, 'BLGFEREM',0,Nr,2,bi,bj,myThid)
1928 CALL DIAGNOSTICS_FILL(N_reminp, 'BLGNREM ',0,Nr,2,bi,bj,myThid)
1929 CALL DIAGNOSTICS_FILL(P_reminp, 'BLGPREM ',0,Nr,2,bi,bj,myThid)
1930 CALL DIAGNOSTICS_FILL(no3_adj, 'BLGNONEN',0,Nr,2,bi,bj,myThid)
a284455135 Matt*1931
82e538d851 aver*1932 CALL DIAGNOSTICS_FILL(mld, 'BLGMLD ',0,1,2,bi,bj,myThid)
e0f9a7ba0b Matt*1933 CALL DIAGNOSTICS_FILL(Fe_burial, 'BLGFEBUR',0,1,2,bi,bj,myThid)
1934 CALL DIAGNOSTICS_FILL(NO3_btmflx,'BLGNSED ',0,1,2,bi,bj,myThid)
1935 CALL DIAGNOSTICS_FILL(PO4_btmflx,'BLGPSED ',0,1,2,bi,bj,myThid)
1936 CALL DIAGNOSTICS_FILL(O2_btmflx, 'BLGO2SED',0,1,2,bi,bj,myThid)
1937 ENDIF
1938 #endif /* ALLOW_DIAGNOSTICS */
1939
1940 #endif /* USE_BLING_V1 */
1941
1942 #endif /* ALLOW_BLING */
1943
1944 RETURN
1945 END