Skip to content

Commit d884c56

Browse files
pearsebdougiesquire
authored andcommitted
* DOC, BDet and BdetFe added as inert tracers
1 parent cdec99a commit d884c56

File tree

1 file changed

+94
-15
lines changed

1 file changed

+94
-15
lines changed

generic_tracers/generic_WOMBATmid.F90

Lines changed: 94 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -33,10 +33,11 @@
3333
! based on a NPZD (nutrient–phytoplankton–zooplankton–detritus) model.
3434
! This is the "mid" version of WOMBAT which includes two classes each of
3535
! 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.
4041
! </DESCRIPTION>
4142
!
4243
! <INFO>
@@ -301,6 +302,8 @@ module generic_WOMBATmid
301302
npp2d, &
302303
det_btm, &
303304
detfe_btm, &
305+
bdet_btm, &
306+
bdetfe_btm, &
304307
caco3_btm, &
305308
det_sed_remin, &
306309
detfe_sed_remin, &
@@ -358,6 +361,9 @@ module generic_WOMBATmid
358361
f_mesfe, &
359362
f_det, &
360363
f_detfe, &
364+
f_bdet, &
365+
f_bdetfe, &
366+
f_doc, &
361367
f_o2, &
362368
f_caco3, &
363369
f_fe, &
@@ -480,6 +486,8 @@ module generic_WOMBATmid
480486
real, dimension(:,:,:), pointer :: &
481487
p_wdet, &
482488
p_wdetfe, &
489+
p_wbdet, &
490+
p_wbdetfe, &
483491
p_wcaco3
484492

485493
real, dimension(:,:), pointer :: &
@@ -2111,7 +2119,7 @@ subroutine user_add_params
21112119

21122120
! CaCO3 dissolution factor due to detritus remineralisation creating anoxic microenvironment
21132121
!-----------------------------------------------------------------------
2114-
call g_tracer_add_param('dissdet', wombat%dissdet, 0.100)
2122+
call g_tracer_add_param('dissdet', wombat%dissdet, 0.200)
21152123

21162124
! Background concentration of iron-binding ligand [umol/m3]
21172125
!-----------------------------------------------------------------------
@@ -2400,6 +2408,34 @@ subroutine user_add_tracers(tracer_list)
24002408
move_vertical = .true., &
24012409
btm_reservoir = .true.)
24022410

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+
24032439
! CaCO3
24042440
!-----------------------------------------------------------------------
24052441
call g_tracer_add(tracer_list, package_name, &
@@ -2627,14 +2663,16 @@ subroutine generic_WOMBATmid_update_from_bottom(tracer_list, dt, tau, model_time
26272663
!-----------------------------------------------------------------------
26282664
call g_tracer_get_values(tracer_list, 'det', 'btm_reservoir', wombat%det_btm, isd, jsd)
26292665
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)
26302668
call g_tracer_get_values(tracer_list, 'caco3', 'btm_reservoir', wombat%caco3_btm, isd, jsd)
26312669

26322670
! Calculate burial of deposited detritus (Dunne et al., 2007)
26332671
wombat%fbury(:,:) = 0.0
26342672
if (do_burial) then
26352673
do i = isc, iec
26362674
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
26382676
wombat%fbury(i,j) = 0.013 + 0.53 * orgflux**2.0 / (7.0 + orgflux)**2.0 ! Eq. 3 Dunne et al. 2007
26392677
enddo
26402678
enddo
@@ -2643,19 +2681,19 @@ subroutine generic_WOMBATmid_update_from_bottom(tracer_list, dt, tau, model_time
26432681
call g_tracer_get_pointer(tracer_list, 'detbury', 'field', wombat%p_detbury)
26442682
call g_tracer_get_pointer(tracer_list, 'caco3bury', 'field', wombat%p_caco3bury)
26452683
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(:,:)
26472685
wombat%p_caco3bury(:,:,1) = wombat%caco3_btm(:,:) / dt * wombat%fbury(:,:)
26482686
else
26492687
wombat%p_detbury(:,:,1) = 0.0
26502688
wombat%p_caco3bury(:,:,1) = 0.0
26512689
endif
26522690

26532691
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]
26552693
call g_tracer_set_values(tracer_list, 'det', 'btm_reservoir', 0.0)
26562694

26572695
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]
26592697
call g_tracer_set_values(tracer_list, 'detfe', 'btm_reservoir', 0.0)
26602698

26612699
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
26652703
! Send diagnostics
26662704
!-----------------------------------------------------------------------
26672705
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, &
26692707
rmask=grid_tmask(:,:,1), is_in=isc, js_in=jsc, ie_in=iec, je_in=jec)
26702708

26712709
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, &
26732711
rmask=grid_tmask(:,:,1), is_in=isc, js_in=jsc, ie_in=iec, je_in=jec)
26742712

26752713
if (wombat%id_caco3_sed_depst .gt. 0) &
@@ -2774,7 +2812,7 @@ subroutine generic_WOMBATmid_update_from_source(tracer_list, Temp, Salt, &
27742812
real :: swpar
27752813
real :: u_npz, g_npz, m_npz, g_peffect
27762814
real :: biono3, bionh4, biooxy, biofer
2777-
real :: biophy, biodia, biozoo, biomes, biodet, biocaco3
2815+
real :: biophy, biodia, biozoo, biomes, biodet, biobdet, biodoc, biocaco3
27782816
real :: biophyfe, biodiafe, biozoofe, biomesfe, biophy1, zooprey, mesprey
27792817
real :: fbc
27802818
real :: no3_bgc_change, caco3_bgc_change
@@ -2800,8 +2838,8 @@ subroutine generic_WOMBATmid_update_from_source(tracer_list, Temp, Salt, &
28002838
real, dimension(4,61) :: zbgr
28012839
real :: ztemk, I_ztemk, fe_keq, fe_par, fe_sfe, fe_tfe, partic
28022840
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
28052843
real :: phy_minqfe, phy_maxqfe
28062844
real :: dia_minqfe, dia_maxqfe
28072845
real :: zoo_slmor, mes_slmor, epsmin
@@ -3164,6 +3202,12 @@ subroutine generic_WOMBATmid_update_from_source(tracer_list, Temp, Salt, &
31643202
positive=.true.) ! [mol/kg]
31653203
call g_tracer_get_values(tracer_list, 'detfe', 'field', wombat%f_detfe, isd, jsd, ntau=tau, &
31663204
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]
31673211
call g_tracer_get_values(tracer_list, 'o2', 'field', wombat%f_o2, isd, jsd, ntau=tau, &
31683212
positive=.true.) ! [mol/kg]
31693213
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, &
33503394
biomes = max(epsi, wombat%f_mes(i,j,k) ) / mmol_m3_to_mol_kg ![mmol/m3]
33513395
biomesfe = max(epsi, wombat%f_mesfe(i,j,k) ) / mmol_m3_to_mol_kg ![mmol/m3]
33523396
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]
33533399
biono3 = max(epsi, wombat%f_no3(i,j,k) ) / mmol_m3_to_mol_kg ![mmol/m3]
33543400
bionh4 = max(epsi, wombat%f_nh4(i,j,k) ) / mmol_m3_to_mol_kg ![mmol/m3]
33553401
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, &
33623408
zoo_Fe2C = max(epsi, wombat%f_zoofe(i,j,k))/ max(epsi, wombat%f_zoo(i,j,k))
33633409
mes_Fe2C = max(epsi, wombat%f_mesfe(i,j,k))/ max(epsi, wombat%f_mes(i,j,k))
33643410
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))
33653412

33663413

33673414
!-----------------------------------------------------------------------!
@@ -4074,6 +4121,18 @@ subroutine generic_WOMBATmid_update_from_source(tracer_list, Temp, Salt, &
40744121
wombat%fescadet(i,j,k) + &
40754122
wombat%fecoag2det(i,j,k) )
40764123

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+
40774136
! Oxygen equation ! [molO2/kg]
40784137
!-----------------------------------------------------------------------
40794138
if (wombat%f_o2(i,j,k) .gt. epsi) &
@@ -4409,6 +4468,9 @@ subroutine generic_WOMBATmid_update_from_source(tracer_list, Temp, Salt, &
44094468
call g_tracer_set_values(tracer_list, 'mesfe', 'field', wombat%f_mesfe, isd, jsd, ntau=tau)
44104469
call g_tracer_set_values(tracer_list, 'det', 'field', wombat%f_det, isd, jsd, ntau=tau)
44114470
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)
44124474
call g_tracer_set_values(tracer_list, 'o2', 'field', wombat%f_o2, isd, jsd, ntau=tau)
44134475
call g_tracer_set_values(tracer_list, 'caco3', 'field', wombat%f_caco3, isd, jsd, ntau=tau)
44144476
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, &
44224484
!-----------------------------------------------------------------------
44234485
call g_tracer_get_pointer(tracer_list, 'det', 'vmove', wombat%p_wdet) ! [m/s]
44244486
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]
44254489
call g_tracer_get_pointer(tracer_list, 'caco3', 'vmove', wombat%p_wcaco3) ! [m/s]
44264490

44274491
! 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, &
44424506
enddo
44434507
wombat%p_wdet(i,j,:) = wsink(:)
44444508
wombat%p_wdetfe(i,j,:) = wsink(:)
4509+
wombat%p_wbdet(i,j,:) = wsink(:)
4510+
wombat%p_wbdetfe(i,j,:) = wsink(:)
44454511
wombat%p_wcaco3(i,j,:) = wsinkcal(:)
44464512
else
44474513
wombat%p_wdet(i,j,:) = 0.0
44484514
wombat%p_wdetfe(i,j,:) = 0.0
4515+
wombat%p_wbdet(i,j,:) = 0.0
4516+
wombat%p_wbdetfe(i,j,:) = 0.0
44494517
wombat%p_wcaco3(i,j,:) = 0.0
44504518
endif
44514519
! PJB: export production through 100 metres
44524520
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]
44544523
wombat%export_inorg(i,j) = (wombat%Rho_0 * wombat%p_wcaco3(i,j,k)) * wombat%f_caco3(i,j,k) ! [mol/m2/s]
44554524
enddo; enddo
44564525

@@ -5515,6 +5584,9 @@ subroutine user_allocate_arrays
55155584
allocate(wombat%f_mesfe(isd:ied, jsd:jed, 1:nk)); wombat%f_mesfe(:,:,:)=0.0
55165585
allocate(wombat%f_det(isd:ied, jsd:jed, 1:nk)); wombat%f_det(:,:,:)=0.0
55175586
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
55185590
allocate(wombat%f_o2(isd:ied, jsd:jed, 1:nk)); wombat%f_o2(:,:,:)=0.0
55195591
allocate(wombat%f_caco3(isd:ied, jsd:jed, 1:nk)); wombat%f_caco3(:,:,:)=0.0
55205592
allocate(wombat%f_fe(isd:ied, jsd:jed, 1:nk)); wombat%f_fe(:,:,:)=0.0
@@ -5638,10 +5710,12 @@ subroutine user_allocate_arrays
56385710
allocate(wombat%det_sed_remin(isd:ied, jsd:jed)); wombat%det_sed_remin(:,:)=0.0
56395711
allocate(wombat%det_sed_denit(isd:ied, jsd:jed)); wombat%det_sed_denit(:,:)=0.0
56405712
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
56415714
allocate(wombat%fbury(isd:ied, jsd:jed)); wombat%fbury(:,:)=0.0
56425715
allocate(wombat%fdenit(isd:ied, jsd:jed)); wombat%fdenit(:,:)=0.0
56435716
allocate(wombat%detfe_sed_remin(isd:ied, jsd:jed)); wombat%detfe_sed_remin(:,:)=0.0
56445717
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
56455719
allocate(wombat%caco3_sed_remin(isd:ied, jsd:jed)); wombat%caco3_sed_remin(:,:)=0.0
56465720
allocate(wombat%caco3_btm(isd:ied, jsd:jed)); wombat%caco3_btm(:,:)=0.0
56475721
allocate(wombat%zw(isd:ied, jsd:jed, 1:nk)); wombat%zw(:,:,:)=0.0
@@ -5727,6 +5801,9 @@ subroutine user_deallocate_arrays
57275801
wombat%f_mesfe, &
57285802
wombat%f_det, &
57295803
wombat%f_detfe, &
5804+
wombat%f_bdet, &
5805+
wombat%f_bdetfe, &
5806+
wombat%f_doc, &
57305807
wombat%f_o2, &
57315808
wombat%f_caco3, &
57325809
wombat%f_fe)
@@ -5848,10 +5925,12 @@ subroutine user_deallocate_arrays
58485925
wombat%det_sed_remin, &
58495926
wombat%det_sed_denit, &
58505927
wombat%det_btm, &
5928+
wombat%bdet_btm, &
58515929
wombat%fbury, &
58525930
wombat%fdenit, &
58535931
wombat%detfe_sed_remin, &
58545932
wombat%detfe_btm, &
5933+
wombat%bdetfe_btm, &
58555934
wombat%caco3_sed_remin, &
58565935
wombat%caco3_btm, &
58575936
wombat%zw, &

0 commit comments

Comments
 (0)