33
33
! based on a NPZD (nutrient–phytoplankton–zooplankton–detritus) model.
34
34
! This is the "mid" version of WOMBAT which includes two classes each of
35
35
! phytoplankton, zooplankton and sinking detritus, as well as nitrate
36
- ! (NO3), ammonium (NH4), bio-available iron (Fe), dissolved inorganic carbon (DIC),
37
- ! calcium carbonate (CaCO3), alkalinity (ALK), and oxygen (O2). Fe is
38
- ! carried through the zooplankton and detrital pools as well.
39
- ! Gas exchange follows OCMIP2 protocols.
36
+ ! (NO3), ammonium (NH4), bio-available iron (Fe), dissolved organic carbon
37
+ ! (DOC), dissolved inorganic carbon (DIC), calcium carbonate (CaCO3),
38
+ ! alkalinity (ALK), and oxygen (O2). Fe is carried through the all
39
+ ! exosystem biomass pools (phytoplankton, zooplankton and detritus).
40
+ ! Gas exchange follows MOCSY protocols.
40
41
! </DESCRIPTION>
41
42
!
42
43
! <INFO>
@@ -301,6 +302,8 @@ module generic_WOMBATmid
301
302
npp2d, &
302
303
det_btm, &
303
304
detfe_btm, &
305
+ bdet_btm, &
306
+ bdetfe_btm, &
304
307
caco3_btm, &
305
308
det_sed_remin, &
306
309
detfe_sed_remin, &
@@ -358,6 +361,9 @@ module generic_WOMBATmid
358
361
f_mesfe, &
359
362
f_det, &
360
363
f_detfe, &
364
+ f_bdet, &
365
+ f_bdetfe, &
366
+ f_doc, &
361
367
f_o2, &
362
368
f_caco3, &
363
369
f_fe, &
@@ -480,6 +486,8 @@ module generic_WOMBATmid
480
486
real , dimension (:,:,:), pointer :: &
481
487
p_wdet, &
482
488
p_wdetfe, &
489
+ p_wbdet, &
490
+ p_wbdetfe, &
483
491
p_wcaco3
484
492
485
493
real , dimension (:,:), pointer :: &
@@ -2111,7 +2119,7 @@ subroutine user_add_params
2111
2119
2112
2120
! CaCO3 dissolution factor due to detritus remineralisation creating anoxic microenvironment
2113
2121
!- ----------------------------------------------------------------------
2114
- call g_tracer_add_param(' dissdet' , wombat% dissdet, 0.100 )
2122
+ call g_tracer_add_param(' dissdet' , wombat% dissdet, 0.200 )
2115
2123
2116
2124
! Background concentration of iron-binding ligand [umol/m3]
2117
2125
!- ----------------------------------------------------------------------
@@ -2400,6 +2408,34 @@ subroutine user_add_tracers(tracer_list)
2400
2408
move_vertical = .true. , &
2401
2409
btm_reservoir = .true. )
2402
2410
2411
+ ! Big detritus
2412
+ !- ----------------------------------------------------------------------
2413
+ call g_tracer_add(tracer_list, package_name, &
2414
+ name = ' bdet' , &
2415
+ longname = ' Big detritus' , &
2416
+ units = ' mol/kg' , &
2417
+ prog = .true. , &
2418
+ move_vertical = .true. , &
2419
+ btm_reservoir = .true. )
2420
+
2421
+ ! Big detrital iron content
2422
+ !- ----------------------------------------------------------------------
2423
+ call g_tracer_add(tracer_list, package_name, &
2424
+ name = ' bdetfe' , &
2425
+ longname = ' Big detrital iron content' , &
2426
+ units = ' mol/kg' , &
2427
+ prog = .true. , &
2428
+ move_vertical = .true. , &
2429
+ btm_reservoir = .true. )
2430
+
2431
+ ! Dissolved organic matter
2432
+ !- ----------------------------------------------------------------------
2433
+ call g_tracer_add(tracer_list, package_name, &
2434
+ name = ' doc' , &
2435
+ longname = ' Dissolved organic carbon' , &
2436
+ units = ' mol/kg' , &
2437
+ prog = .true. )
2438
+
2403
2439
! CaCO3
2404
2440
!- ----------------------------------------------------------------------
2405
2441
call g_tracer_add(tracer_list, package_name, &
@@ -2627,14 +2663,16 @@ subroutine generic_WOMBATmid_update_from_bottom(tracer_list, dt, tau, model_time
2627
2663
!- ----------------------------------------------------------------------
2628
2664
call g_tracer_get_values(tracer_list, ' det' , ' btm_reservoir' , wombat% det_btm, isd, jsd)
2629
2665
call g_tracer_get_values(tracer_list, ' detfe' , ' btm_reservoir' , wombat% detfe_btm, isd, jsd)
2666
+ call g_tracer_get_values(tracer_list, ' bdet' , ' btm_reservoir' , wombat% bdet_btm, isd, jsd)
2667
+ call g_tracer_get_values(tracer_list, ' bdetfe' , ' btm_reservoir' , wombat% bdetfe_btm, isd, jsd)
2630
2668
call g_tracer_get_values(tracer_list, ' caco3' , ' btm_reservoir' , wombat% caco3_btm, isd, jsd)
2631
2669
2632
2670
! Calculate burial of deposited detritus (Dunne et al., 2007)
2633
2671
wombat% fbury(:,:) = 0.0
2634
2672
if (do_burial) then
2635
2673
do i = isc, iec
2636
2674
do j = jsc, jec
2637
- orgflux = wombat% det_btm(i,j) / dt * 86400 * 1e3 ! mmol C m-2 day-1
2675
+ orgflux = ( wombat% det_btm(i,j) + wombat % bdet_btm(i,j) ) / dt * 86400 * 1e3 ! mmol C m-2 day-1
2638
2676
wombat% fbury(i,j) = 0.013 + 0.53 * orgflux** 2.0 / (7.0 + orgflux)** 2.0 ! Eq. 3 Dunne et al. 2007
2639
2677
enddo
2640
2678
enddo
@@ -2643,19 +2681,19 @@ subroutine generic_WOMBATmid_update_from_bottom(tracer_list, dt, tau, model_time
2643
2681
call g_tracer_get_pointer(tracer_list, ' detbury' , ' field' , wombat% p_detbury)
2644
2682
call g_tracer_get_pointer(tracer_list, ' caco3bury' , ' field' , wombat% p_caco3bury)
2645
2683
if (do_conserve_tracers) then
2646
- wombat% p_detbury(:,:,1 ) = wombat% det_btm(:,:) / dt * wombat% fbury(:,:)
2684
+ wombat% p_detbury(:,:,1 ) = ( wombat% det_btm(:,:) + wombat % bdet_btm(:,:) ) / dt * wombat% fbury(:,:)
2647
2685
wombat% p_caco3bury(:,:,1 ) = wombat% caco3_btm(:,:) / dt * wombat% fbury(:,:)
2648
2686
else
2649
2687
wombat% p_detbury(:,:,1 ) = 0.0
2650
2688
wombat% p_caco3bury(:,:,1 ) = 0.0
2651
2689
endif
2652
2690
2653
2691
call g_tracer_get_pointer(tracer_list, ' det_sediment' , ' field' , wombat% p_det_sediment)
2654
- wombat% p_det_sediment(:,:,1 ) = wombat% p_det_sediment(:,:,1 ) + wombat% det_btm(:,:) * (1.0 - wombat% fbury(:,:)) ! [mol/m2]
2692
+ wombat% p_det_sediment(:,:,1 ) = wombat% p_det_sediment(:,:,1 ) + ( wombat% det_btm(:,:) + wombat % bdet_btm(:,:) ) * (1.0 - wombat% fbury(:,:)) ! [mol/m2]
2655
2693
call g_tracer_set_values(tracer_list, ' det' , ' btm_reservoir' , 0.0 )
2656
2694
2657
2695
call g_tracer_get_pointer(tracer_list, ' detfe_sediment' , ' field' , wombat% p_detfe_sediment)
2658
- wombat% p_detfe_sediment(:,:,1 ) = wombat% p_detfe_sediment(:,:,1 ) + wombat% detfe_btm(:,:) * (1.0 - wombat% fbury(:,:)) ! [mol/m2]
2696
+ wombat% p_detfe_sediment(:,:,1 ) = wombat% p_detfe_sediment(:,:,1 ) + ( wombat% detfe_btm(:,:) + wombat % bdetfe_btm(:,:) ) * (1.0 - wombat% fbury(:,:)) ! [mol/m2]
2659
2697
call g_tracer_set_values(tracer_list, ' detfe' , ' btm_reservoir' , 0.0 )
2660
2698
2661
2699
call g_tracer_get_pointer(tracer_list, ' caco3_sediment' , ' field' , wombat% p_caco3_sediment)
@@ -2665,11 +2703,11 @@ subroutine generic_WOMBATmid_update_from_bottom(tracer_list, dt, tau, model_time
2665
2703
! Send diagnostics
2666
2704
!- ----------------------------------------------------------------------
2667
2705
if (wombat% id_det_sed_depst .gt. 0 ) &
2668
- used = g_send_data(wombat% id_det_sed_depst, wombat% det_btm / dt, model_time, &
2706
+ used = g_send_data(wombat% id_det_sed_depst, ( wombat% det_btm + wombat % bdet_btm) / dt, model_time, &
2669
2707
rmask= grid_tmask(:,:,1 ), is_in= isc, js_in= jsc, ie_in= iec, je_in= jec)
2670
2708
2671
2709
if (wombat% id_detfe_sed_depst .gt. 0 ) &
2672
- used = g_send_data(wombat% id_detfe_sed_depst, wombat% detfe_btm / dt, model_time, &
2710
+ used = g_send_data(wombat% id_detfe_sed_depst, ( wombat% detfe_btm + wombat % bdetfe_btm) / dt, model_time, &
2673
2711
rmask= grid_tmask(:,:,1 ), is_in= isc, js_in= jsc, ie_in= iec, je_in= jec)
2674
2712
2675
2713
if (wombat% id_caco3_sed_depst .gt. 0 ) &
@@ -2774,7 +2812,7 @@ subroutine generic_WOMBATmid_update_from_source(tracer_list, Temp, Salt, &
2774
2812
real :: swpar
2775
2813
real :: u_npz, g_npz, m_npz, g_peffect
2776
2814
real :: biono3, bionh4, biooxy, biofer
2777
- real :: biophy, biodia, biozoo, biomes, biodet, biocaco3
2815
+ real :: biophy, biodia, biozoo, biomes, biodet, biobdet, biodoc, biocaco3
2778
2816
real :: biophyfe, biodiafe, biozoofe, biomesfe, biophy1, zooprey, mesprey
2779
2817
real :: fbc
2780
2818
real :: no3_bgc_change, caco3_bgc_change
@@ -2800,8 +2838,8 @@ subroutine generic_WOMBATmid_update_from_source(tracer_list, Temp, Salt, &
2800
2838
real , dimension (4 ,61 ) :: zbgr
2801
2839
real :: ztemk, I_ztemk, fe_keq, fe_par, fe_sfe, fe_tfe, partic
2802
2840
real :: fesol1, fesol2, fesol3, fesol4, fesol5, hp, fe3sol
2803
- real :: biof, biodoc, zno3, zfermin
2804
- real :: phy_Fe2C, dia_Fe2C, zoo_Fe2C, mes_Fe2C, det_Fe2C
2841
+ real :: biof, zno3, zfermin
2842
+ real :: phy_Fe2C, dia_Fe2C, zoo_Fe2C, mes_Fe2C, det_Fe2C, bdet_Fe2C
2805
2843
real :: phy_minqfe, phy_maxqfe
2806
2844
real :: dia_minqfe, dia_maxqfe
2807
2845
real :: zoo_slmor, mes_slmor, epsmin
@@ -3164,6 +3202,12 @@ subroutine generic_WOMBATmid_update_from_source(tracer_list, Temp, Salt, &
3164
3202
positive= .true. ) ! [mol/kg]
3165
3203
call g_tracer_get_values(tracer_list, ' detfe' , ' field' , wombat% f_detfe, isd, jsd, ntau= tau, &
3166
3204
positive= .true. ) ! [mol/kg]
3205
+ call g_tracer_get_values(tracer_list, ' bdet' , ' field' , wombat% f_bdet, isd, jsd, ntau= tau, &
3206
+ positive= .true. ) ! [mol/kg]
3207
+ call g_tracer_get_values(tracer_list, ' bdetfe' , ' field' , wombat% f_bdetfe, isd, jsd, ntau= tau, &
3208
+ positive= .true. ) ! [mol/kg]
3209
+ call g_tracer_get_values(tracer_list, ' doc' , ' field' , wombat% f_doc, isd, jsd, ntau= tau, &
3210
+ positive= .true. ) ! [mol/kg]
3167
3211
call g_tracer_get_values(tracer_list, ' o2' , ' field' , wombat% f_o2, isd, jsd, ntau= tau, &
3168
3212
positive= .true. ) ! [mol/kg]
3169
3213
call g_tracer_get_values(tracer_list, ' caco3' , ' field' , wombat% f_caco3, isd, jsd, ntau= tau, &
@@ -3350,6 +3394,8 @@ subroutine generic_WOMBATmid_update_from_source(tracer_list, Temp, Salt, &
3350
3394
biomes = max (epsi, wombat% f_mes(i,j,k) ) / mmol_m3_to_mol_kg ! [mmol/m3]
3351
3395
biomesfe = max (epsi, wombat% f_mesfe(i,j,k) ) / mmol_m3_to_mol_kg ! [mmol/m3]
3352
3396
biodet = max (epsi, wombat% f_det(i,j,k) ) / mmol_m3_to_mol_kg ! [mmol/m3]
3397
+ biobdet = max (epsi, wombat% f_bdet(i,j,k) ) / mmol_m3_to_mol_kg ! [mmol/m3]
3398
+ biodoc = max (epsi, wombat% f_doc(i,j,k) ) / mmol_m3_to_mol_kg ! [mmol/m3]
3353
3399
biono3 = max (epsi, wombat% f_no3(i,j,k) ) / mmol_m3_to_mol_kg ! [mmol/m3]
3354
3400
bionh4 = max (epsi, wombat% f_nh4(i,j,k) ) / mmol_m3_to_mol_kg ! [mmol/m3]
3355
3401
biooxy = max (epsi, wombat% f_o2(i,j,k) ) / mmol_m3_to_mol_kg ! [mmol/m3]
@@ -3362,6 +3408,7 @@ subroutine generic_WOMBATmid_update_from_source(tracer_list, Temp, Salt, &
3362
3408
zoo_Fe2C = max (epsi, wombat% f_zoofe(i,j,k))/ max (epsi, wombat% f_zoo(i,j,k))
3363
3409
mes_Fe2C = max (epsi, wombat% f_mesfe(i,j,k))/ max (epsi, wombat% f_mes(i,j,k))
3364
3410
det_Fe2C = max (epsi, wombat% f_detfe(i,j,k))/ max (epsi, wombat% f_det(i,j,k))
3411
+ bdet_Fe2C= max (epsi, wombat% f_bdetfe(i,j,k))/ max (epsi, wombat% f_bdet(i,j,k))
3365
3412
3366
3413
3367
3414
!- ----------------------------------------------------------------------!
@@ -4074,6 +4121,18 @@ subroutine generic_WOMBATmid_update_from_source(tracer_list, Temp, Salt, &
4074
4121
wombat% fescadet(i,j,k) + &
4075
4122
wombat% fecoag2det(i,j,k) )
4076
4123
4124
+ ! Big detritus equation ! [molC/kg]
4125
+ !- ----------------------------------------------------------------------
4126
+ wombat% f_bdet(i,j,k) = wombat% f_bdet(i,j,k) + dtsb * ( 0.0 )
4127
+
4128
+ ! Big detrital iron equation ! [molFe/kg]
4129
+ !- ----------------------------------------------------------------------
4130
+ wombat% f_bdetfe(i,j,k) = wombat% f_bdetfe(i,j,k) + dtsb * ( 0.0 )
4131
+
4132
+ ! Dissolved organic carbon equation ! [molC/kg]
4133
+ !- ----------------------------------------------------------------------
4134
+ wombat% f_doc(i,j,k) = wombat% f_doc(i,j,k) + dtsb * ( 0.0 )
4135
+
4077
4136
! Oxygen equation ! [molO2/kg]
4078
4137
!- ----------------------------------------------------------------------
4079
4138
if (wombat% f_o2(i,j,k) .gt. epsi) &
@@ -4409,6 +4468,9 @@ subroutine generic_WOMBATmid_update_from_source(tracer_list, Temp, Salt, &
4409
4468
call g_tracer_set_values(tracer_list, ' mesfe' , ' field' , wombat% f_mesfe, isd, jsd, ntau= tau)
4410
4469
call g_tracer_set_values(tracer_list, ' det' , ' field' , wombat% f_det, isd, jsd, ntau= tau)
4411
4470
call g_tracer_set_values(tracer_list, ' detfe' , ' field' , wombat% f_detfe, isd, jsd, ntau= tau)
4471
+ call g_tracer_set_values(tracer_list, ' bdet' , ' field' , wombat% f_bdet, isd, jsd, ntau= tau)
4472
+ call g_tracer_set_values(tracer_list, ' bdetfe' , ' field' , wombat% f_bdetfe, isd, jsd, ntau= tau)
4473
+ call g_tracer_set_values(tracer_list, ' doc' , ' field' , wombat% f_doc, isd, jsd, ntau= tau)
4412
4474
call g_tracer_set_values(tracer_list, ' o2' , ' field' , wombat% f_o2, isd, jsd, ntau= tau)
4413
4475
call g_tracer_set_values(tracer_list, ' caco3' , ' field' , wombat% f_caco3, isd, jsd, ntau= tau)
4414
4476
call g_tracer_set_values(tracer_list, ' fe' , ' field' , wombat% f_fe, isd, jsd, ntau= tau)
@@ -4422,6 +4484,8 @@ subroutine generic_WOMBATmid_update_from_source(tracer_list, Temp, Salt, &
4422
4484
!- ----------------------------------------------------------------------
4423
4485
call g_tracer_get_pointer(tracer_list, ' det' , ' vmove' , wombat% p_wdet) ! [m/s]
4424
4486
call g_tracer_get_pointer(tracer_list, ' detfe' , ' vmove' , wombat% p_wdetfe) ! [m/s]
4487
+ call g_tracer_get_pointer(tracer_list, ' bdet' , ' vmove' , wombat% p_wbdet) ! [m/s]
4488
+ call g_tracer_get_pointer(tracer_list, ' bdetfe' , ' vmove' , wombat% p_wbdetfe) ! [m/s]
4425
4489
call g_tracer_get_pointer(tracer_list, ' caco3' , ' vmove' , wombat% p_wcaco3) ! [m/s]
4426
4490
4427
4491
! Variable sinking rates of organic detritus (positive for sinking when GOLDtridiag == .true.)
@@ -4442,15 +4506,20 @@ subroutine generic_WOMBATmid_update_from_source(tracer_list, Temp, Salt, &
4442
4506
enddo
4443
4507
wombat% p_wdet(i,j,:) = wsink(:)
4444
4508
wombat% p_wdetfe(i,j,:) = wsink(:)
4509
+ wombat% p_wbdet(i,j,:) = wsink(:)
4510
+ wombat% p_wbdetfe(i,j,:) = wsink(:)
4445
4511
wombat% p_wcaco3(i,j,:) = wsinkcal(:)
4446
4512
else
4447
4513
wombat% p_wdet(i,j,:) = 0.0
4448
4514
wombat% p_wdetfe(i,j,:) = 0.0
4515
+ wombat% p_wbdet(i,j,:) = 0.0
4516
+ wombat% p_wbdetfe(i,j,:) = 0.0
4449
4517
wombat% p_wcaco3(i,j,:) = 0.0
4450
4518
endif
4451
4519
! PJB: export production through 100 metres
4452
4520
k = k100(i,j)
4453
- wombat% export_prod(i,j) = (wombat% Rho_0 * wombat% p_wdet(i,j,k)) * wombat% f_det(i,j,k) ! [mol/m2/s]
4521
+ wombat% export_prod(i,j) = (wombat% Rho_0 * wombat% p_wdet(i,j,k)) * wombat% f_det(i,j,k) + &
4522
+ (wombat% Rho_0 * wombat% p_wbdet(i,j,k)) * wombat% f_bdet(i,j,k) ! [mol/m2/s]
4454
4523
wombat% export_inorg(i,j) = (wombat% Rho_0 * wombat% p_wcaco3(i,j,k)) * wombat% f_caco3(i,j,k) ! [mol/m2/s]
4455
4524
enddo ; enddo
4456
4525
@@ -5515,6 +5584,9 @@ subroutine user_allocate_arrays
5515
5584
allocate (wombat% f_mesfe(isd:ied, jsd:jed, 1 :nk)); wombat% f_mesfe(:,:,:)= 0.0
5516
5585
allocate (wombat% f_det(isd:ied, jsd:jed, 1 :nk)); wombat% f_det(:,:,:)= 0.0
5517
5586
allocate (wombat% f_detfe(isd:ied, jsd:jed, 1 :nk)); wombat% f_detfe(:,:,:)= 0.0
5587
+ allocate (wombat% f_bdet(isd:ied, jsd:jed, 1 :nk)); wombat% f_bdet(:,:,:)= 0.0
5588
+ allocate (wombat% f_bdetfe(isd:ied, jsd:jed, 1 :nk)); wombat% f_bdetfe(:,:,:)= 0.0
5589
+ allocate (wombat% f_doc(isd:ied, jsd:jed, 1 :nk)); wombat% f_doc(:,:,:)= 0.0
5518
5590
allocate (wombat% f_o2(isd:ied, jsd:jed, 1 :nk)); wombat% f_o2(:,:,:)= 0.0
5519
5591
allocate (wombat% f_caco3(isd:ied, jsd:jed, 1 :nk)); wombat% f_caco3(:,:,:)= 0.0
5520
5592
allocate (wombat% f_fe(isd:ied, jsd:jed, 1 :nk)); wombat% f_fe(:,:,:)= 0.0
@@ -5638,10 +5710,12 @@ subroutine user_allocate_arrays
5638
5710
allocate (wombat% det_sed_remin(isd:ied, jsd:jed)); wombat% det_sed_remin(:,:)= 0.0
5639
5711
allocate (wombat% det_sed_denit(isd:ied, jsd:jed)); wombat% det_sed_denit(:,:)= 0.0
5640
5712
allocate (wombat% det_btm(isd:ied, jsd:jed)); wombat% det_btm(:,:)= 0.0
5713
+ allocate (wombat% bdet_btm(isd:ied, jsd:jed)); wombat% bdet_btm(:,:)= 0.0
5641
5714
allocate (wombat% fbury(isd:ied, jsd:jed)); wombat% fbury(:,:)= 0.0
5642
5715
allocate (wombat% fdenit(isd:ied, jsd:jed)); wombat% fdenit(:,:)= 0.0
5643
5716
allocate (wombat% detfe_sed_remin(isd:ied, jsd:jed)); wombat% detfe_sed_remin(:,:)= 0.0
5644
5717
allocate (wombat% detfe_btm(isd:ied, jsd:jed)); wombat% detfe_btm(:,:)= 0.0
5718
+ allocate (wombat% bdetfe_btm(isd:ied, jsd:jed)); wombat% bdetfe_btm(:,:)= 0.0
5645
5719
allocate (wombat% caco3_sed_remin(isd:ied, jsd:jed)); wombat% caco3_sed_remin(:,:)= 0.0
5646
5720
allocate (wombat% caco3_btm(isd:ied, jsd:jed)); wombat% caco3_btm(:,:)= 0.0
5647
5721
allocate (wombat% zw(isd:ied, jsd:jed, 1 :nk)); wombat% zw(:,:,:)= 0.0
@@ -5727,6 +5801,9 @@ subroutine user_deallocate_arrays
5727
5801
wombat% f_mesfe, &
5728
5802
wombat% f_det, &
5729
5803
wombat% f_detfe, &
5804
+ wombat% f_bdet, &
5805
+ wombat% f_bdetfe, &
5806
+ wombat% f_doc, &
5730
5807
wombat% f_o2, &
5731
5808
wombat% f_caco3, &
5732
5809
wombat% f_fe)
@@ -5848,10 +5925,12 @@ subroutine user_deallocate_arrays
5848
5925
wombat% det_sed_remin, &
5849
5926
wombat% det_sed_denit, &
5850
5927
wombat% det_btm, &
5928
+ wombat% bdet_btm, &
5851
5929
wombat% fbury, &
5852
5930
wombat% fdenit, &
5853
5931
wombat% detfe_sed_remin, &
5854
5932
wombat% detfe_btm, &
5933
+ wombat% bdetfe_btm, &
5855
5934
wombat% caco3_sed_remin, &
5856
5935
wombat% caco3_btm, &
5857
5936
wombat% zw, &
0 commit comments