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