diff --git a/generic_tracers/generic_WOMBATmid.F90 b/generic_tracers/generic_WOMBATmid.F90 index 359b71a..76587ab 100644 --- a/generic_tracers/generic_WOMBATmid.F90 +++ b/generic_tracers/generic_WOMBATmid.F90 @@ -44,7 +44,8 @@ ! "colloidal shunt". C:N ratios are fixed in all biomass pools except ! for dissolved organics, since we represent both DOC and DON. Si is ! carried through microphytoplankton, large detrtis and, like for carbon -! and Fe, is deposited into a sediment pool. +! and Fe, is deposited into a sediment pool. Finally, we also track the +! nominal oxidation state of carbon within DOM (NOSDOC). ! Gas exchange follows MOCSY protocols. ! ! @@ -77,11 +78,6 @@ ! If true, permanently bury organics and CaCO3 in sediments ! ! -! -! If true and do_burial is true, add back the lost NO3 and Alk due to -! burial to surface -! -! ! ! If true, do nitrogen fixation ! @@ -167,17 +163,16 @@ module generic_WOMBATmid character(len=10) :: co2_calc = 'mocsy' ! other option is 'ocmip2' logical :: do_caco3_dynamics = .true. ! do dynamic CaCO3 precipitation, dissolution and ballasting? logical :: do_burial = .false. ! permanently bury organics and CaCO3 in sediments? - logical :: do_conserve_tracers = .false. ! add back the lost NO3 and Alk due to burial to surface? logical :: do_nitrogen_fixation= .true. ! N cycle has nitrogen fixation? logical :: do_anammox = .true. ! N cycle has anammox? logical :: do_wc_denitrification = .true. ! N cycle has water column denitrification? logical :: do_benthic_denitrification = .true. ! N cycle has N loss in sediments? logical :: do_viscous_sinking = .true. ! Rubey's formula uses a non-constant dynamic viscosity? logical :: do_check_n_conserve = .false. ! check that the N fluxes balance in the ecosystem - logical :: do_check_c_conserve = .true. ! check that the C fluxes balance in the ecosystem - logical :: do_check_si_conserve = .true. ! check that the Si fluxes balance in the ecosystem + logical :: do_check_c_conserve = .false. ! check that the C fluxes balance in the ecosystem + logical :: do_check_si_conserve = .false. ! check that the Si fluxes balance in the ecosystem - namelist /generic_wombatmid_nml/ co2_calc, do_caco3_dynamics, do_burial, do_conserve_tracers, & + namelist /generic_wombatmid_nml/ co2_calc, do_caco3_dynamics, do_burial, & do_nitrogen_fixation, do_anammox, do_wc_denitrification, do_benthic_denitrification, & do_viscous_sinking, do_check_n_conserve, do_check_c_conserve, do_check_si_conserve @@ -205,7 +200,7 @@ module generic_WOMBATmid phykn, & phykf, & phyminqc, & - phyoptqc, & + phymaxqc, & phyoptqf, & phymaxqf, & phylmor, & @@ -214,7 +209,7 @@ module generic_WOMBATmid diakf, & diaks, & diaminqc, & - diaoptqc, & + diamaxqc, & diaoptqf, & diamaxqf, & diaminqs, & @@ -223,7 +218,7 @@ module generic_WOMBATmid diaVmaxs, & dialmor, & diaqmor, & - chlkWm2, & + chltau, & overflow, & trikf, & trichlc, & @@ -254,6 +249,7 @@ module generic_WOMBATmid mesFeingest, & mesFeassim, & mesexcrdom, & + fgutdiss, & meskz, & mesgmax, & mesepsbac1, & @@ -292,7 +288,6 @@ module generic_WOMBATmid diabiot, & caco3lrem, & caco3lrem_sed, & - omegamax_sed, & f_inorg, & disscal, & dissara, & @@ -313,44 +308,51 @@ module generic_WOMBATmid aoa_poxy, & aoa_ynh4, & aoa_yoxy, & - aoa_yn2omin, & + aoa_en2omin, & aoa_C2N, & aoa_C2Fe, & aoalmor, & aoaqmor, & + bacanapen, & + bac_ydonmin, & + bac_ydonmax, & bac1_Vmax_doc, & + bac1_Vmax_don, & + bac1_Vmax_nh4, & + bac1_Vmax_dfe, & bac1_Vmax_no3, & bac1_poxy, & bac1_kno3, & - bac1_kdoc_min, & - bac1_kdoc_max, & + bac1_kdoc, & + bac1_kdon, & bac1_knh4, & bac1_kfer, & - bac1_yoxy, & - bac1_yaerC, & - bac1_yno3, & - bac1_yanaC, & bac1_C2N, & bac1_C2Fe, & bac1lmor, & bac1qmor, & bac2_Vmax_doc, & + bac2_Vmax_don, & + bac2_Vmax_dfe, & + bac2_Vmax_nh4, & bac2_poxy, & bac2_pn2o, & - bac2_kdoc_min, & - bac2_kdoc_max, & + bac2_kdoc, & + bac2_kdon, & bac2_knh4, & bac2_kfer, & - bac2_yoxy, & - bac2_yaerC, & - bac2_yn2o, & - bac2_yanaC, & bac2_C2N, & bac2_C2Fe, & bac2lmor, & bac2qmor, & aoxkn, & aoxmumax, & + noscphyover, & + nosczooexcr, & + noscphylyse, & + noscbaclyse, & + noscdethydr, & + noscdocproc, & dt_npzd, & sal_global, & dic_global, & @@ -402,15 +404,15 @@ module generic_WOMBATmid b_dic, & b_dicr, & b_alk, & - b_nh4, & + b_doc, & + b_don, & b_no3, & b_sil, & b_o2, & b_fe, & - pprod_gross_2d, & - export_prod, & - export_inorg, & npp2d, & + rpp2d, & + zsp2d, & det_btm, & detfe_btm, & bdet_btm, & @@ -426,25 +428,9 @@ module generic_WOMBATmid det_sed_denit, & fbury, & fdenit, & - dic_intmld, & - o2_intmld, & - no3_intmld, & - fe_intmld, & - phy_intmld, & - det_intmld, & - pprod_gross_intmld, & - npp_intmld, & - radbio_intmld, & - dic_int100, & - o2_int100, & - no3_int100, & - fe_int100, & - phy_int100, & - det_int100, & - pprod_gross_int100, & - npp_int100, & - radbio_int100, & zeuphot, & + det_radius, & + bdet_radius, & seddep, & sedmask, & sedtemp, & @@ -484,6 +470,7 @@ module generic_WOMBATmid f_bdetsi, & f_doc, & f_don, & + f_nosdoc, & f_bac1, & f_bac2, & f_aoa, & @@ -493,16 +480,15 @@ module generic_WOMBATmid f_fe, & f_afe, & f_bafe, & - pprod_gross, & - zprod_gross, & radbio, & radmid, & radmld, & npp3d, & + rpp3d, & + zsp3d, & phy_mumax, & phy_mu, & pchl_mu, & - pchl_lpar, & phy_kni, & phy_kfe, & phy_lpar, & @@ -514,7 +500,6 @@ module generic_WOMBATmid dia_mumax, & dia_mu, & dchl_mu, & - dchl_lpar, & dia_kni, & dia_kfe, & dia_ksi, & @@ -548,15 +533,15 @@ module generic_WOMBATmid phy_fedoreg, & phygrow, & phydoc, & - phylyse, & - phymort, & + phymorl, & + phymorq, & dia_feupreg, & dia_fedoreg, & dia_sidoreg, & diagrow, & diadoc, & - dialyse, & - diamort, & + diamorl, & + diamorq, & zooeps, & zooprefbac1, & zooprefbac2, & @@ -570,8 +555,8 @@ module generic_WOMBATmid zoograzphy, & zoograzdia, & zoograzdet, & - zooresp, & - zoomort, & + zoomorl, & + zoomorq, & zooexcrbac1, & zooexcrbac2, & zooexcraoa, & @@ -601,8 +586,8 @@ module generic_WOMBATmid mesgrazdet, & mesgrazbdet, & mesgrazzoo, & - mesresp, & - mesmort, & + mesmorl, & + mesmorq, & mesexcrbac1, & mesexcrbac2, & mesexcraoa, & @@ -622,55 +607,72 @@ module generic_WOMBATmid reminr, & doc1remi, & don1remi, & + bac1nupt, & doc2remi, & don2remi, & + bac2nupt, & detremi, & bdetremi, & pic2poc, & - dissrat, & + det_density, & + bdet_density, & + dissratcal, & + dissratara, & + dissratpoc, & caldiss, & + aradiss, & + pocdiss, & + zoodiss, & + mesdiss, & aoa_loxy, & aoa_lnh4, & - aoa_yn2o, & + aoa_en2o, & + aoa_eno3, & aoa_mumax, & aoa_mu, & aoagrow, & aoaresp, & - aoamor1, & - aoamor2, & + aoamorl, & + aoamorq, & + bac_ydon, & + bac1_ydoc, & + bac2_ydoc, & bac1grow, & bac1resp, & bac1unh4, & bac1ufer, & - bac1_lnit, & - bac1_lfer, & bac1_mu, & - bac1_kdoc, & bac1_fanaer, & - bac1mor1, & - bac1mor2, & + bac1_fnlim, & + bac1_ffelim, & + bac1morl, & + bac1morq, & bac1deni, & bac2grow, & bac2resp, & bac2unh4, & bac2ufer, & - bac2_lnit, & - bac2_lfer, & bac2_mu, & - bac2_kdoc, & bac2_fanaer, & - bac2mor1, & - bac2mor2, & + bac2_fnlim, & + bac2_ffelim, & + bac2morl, & + bac2morq, & bac2deni, & aox_lnh4, & aox_mu, & nitrfix, & ammox, & anammox, & + nosdoc_overflow, & + nosdoc_excretion, & + nosdoc_phylysis, & + nosdoc_baclysis, & + nosdoc_dethydro, & + nosdoc_docconsu, & no3_prev, & + nh4_prev, & caco3_prev, & - dic_correct, & - alk_correct, & dynvis_sw, & zw, & zm @@ -682,8 +684,7 @@ module generic_WOMBATmid p_det_sediment, & p_detfe_sediment, & p_detsi_sediment, & - p_caco3_sediment, & - p_detbury, p_caco3bury + p_caco3_sediment real, dimension(:,:,:), pointer :: & p_wdet, & @@ -718,17 +719,12 @@ module generic_WOMBATmid id_dicp_vstf = -1, & id_alk_vstf = -1, & id_dynvis_sw = -1, & - id_dic_correct = -1, & - id_alk_correct = -1, & id_radbio = -1, & id_radmid = -1, & id_radmld = -1, & - id_radbio1 = -1, & - id_pprod_gross = -1, & id_phy_kni = -1, & id_phy_kfe = -1, & id_phy_lpar = -1, & - id_pchl_lpar = -1, & id_phy_lnit = -1, & id_phy_lnh4 = -1, & id_phy_lno3 = -1, & @@ -738,7 +734,6 @@ module generic_WOMBATmid id_dia_kfe = -1, & id_dia_ksi = -1, & id_dia_lpar = -1, & - id_dchl_lpar = -1, & id_dia_lnit = -1, & id_dia_lnh4 = -1, & id_dia_lno3 = -1, & @@ -768,15 +763,15 @@ module generic_WOMBATmid id_phy_fedoreg = -1, & id_phygrow = -1, & id_phydoc = -1, & - id_phylyse = -1, & - id_phymort = -1, & + id_phymorl = -1, & + id_phymorq = -1, & id_dia_feupreg = -1, & id_dia_fedoreg = -1, & id_dia_sidoreg = -1, & id_diagrow = -1, & id_diadoc = -1, & - id_dialyse = -1, & - id_diamort = -1, & + id_diamorl = -1, & + id_diamorq = -1, & id_zooeps = -1, & id_zooprefbac1 = -1, & id_zooprefbac2 = -1, & @@ -790,8 +785,8 @@ module generic_WOMBATmid id_zoograzphy = -1, & id_zoograzdia = -1, & id_zoograzdet = -1, & - id_zooresp = -1, & - id_zoomort = -1, & + id_zoomorl = -1, & + id_zoomorq = -1, & id_zooexcrbac1 = -1, & id_zooexcrbac2 = -1, & id_zooexcraoa = -1, & @@ -821,8 +816,8 @@ module generic_WOMBATmid id_mesgrazdet = -1, & id_mesgrazbdet = -1, & id_mesgrazzoo = -1, & - id_mesresp = -1, & - id_mesmort = -1, & + id_mesmorl = -1, & + id_mesmorq = -1, & id_mesexcrbac1 = -1, & id_mesexcrbac2 = -1, & id_mesexcraoa = -1, & @@ -842,82 +837,79 @@ module generic_WOMBATmid id_reminr = -1, & id_doc1remi = -1, & id_don1remi = -1, & + id_bac1nupt = -1, & id_doc2remi = -1, & id_don2remi = -1, & + id_bac2nupt = -1, & id_detremi = -1, & id_bdetremi = -1, & id_pic2poc = -1, & - id_dissrat = -1, & + id_dissratcal = -1, & + id_dissratara = -1, & + id_dissratpoc = -1, & id_caldiss = -1, & + id_aradiss = -1, & + id_pocdiss = -1, & + id_zoodiss = -1, & + id_mesdiss = -1, & id_aoa_loxy = -1, & id_aoa_lnh4 = -1, & - id_aoa_yn2o = -1, & + id_aoa_en2o = -1, & + id_aoa_eno3 = -1, & id_aoa_mumax = -1, & id_aoa_mu = -1, & id_aoagrow = -1, & id_aoaresp = -1, & - id_aoamor1 = -1, & - id_aoamor2 = -1, & + id_aoamorl = -1, & + id_aoamorq = -1, & + id_bac_ydon = -1, & + id_bac1_ydoc = -1, & + id_bac2_ydoc = -1, & id_bac1grow = -1, & id_bac1resp = -1, & id_bac1unh4 = -1, & id_bac1ufer = -1, & - id_bac1_lnit = -1, & - id_bac1_lfer = -1, & id_bac1_mu = -1, & - id_bac1_kdoc = -1, & id_bac1_fanaer = -1, & - id_bac1mor1 = -1, & - id_bac1mor2 = -1, & + id_bac1_fnlim = -1, & + id_bac1_ffelim = -1, & + id_bac1morl = -1, & + id_bac1morq = -1, & id_bac1deni = -1, & id_bac2grow = -1, & id_bac2resp = -1, & id_bac2unh4 = -1, & id_bac2ufer = -1, & - id_bac2_lnit = -1, & - id_bac2_lfer = -1, & id_bac2_mu = -1, & - id_bac2_kdoc = -1, & id_bac2_fanaer = -1, & - id_bac2mor1 = -1, & - id_bac2mor2 = -1, & + id_bac2_fnlim = -1, & + id_bac2_ffelim = -1, & + id_bac2morl = -1, & + id_bac2morq = -1, & id_bac2deni = -1, & id_aox_lnh4 = -1, & id_aox_mu = -1, & id_nitrfix = -1, & id_ammox = -1, & id_anammox = -1, & + id_nosdoc_overflow = -1, & + id_nosdoc_excretion = -1, & + id_nosdoc_phylysis = -1, & + id_nosdoc_baclysis = -1, & + id_nosdoc_dethydro = -1, & + id_nosdoc_docconsu = -1, & id_phy_mumax = -1, & id_phy_mu = -1, & id_pchl_mu = -1, & id_dia_mumax = -1, & id_dia_mu = -1, & id_dchl_mu = -1, & - id_pprod_gross_2d = -1, & - id_export_prod = -1, & - id_export_inorg = -1, & id_npp3d = -1, & + id_rpp3d = -1, & + id_zsp3d = -1, & id_npp2d = -1, & - id_npp1 = -1, & - id_zprod_gross = -1, & - id_dic_intmld = -1, & - id_o2_intmld = -1, & - id_no3_intmld = -1, & - id_fe_intmld = -1, & - id_phy_intmld = -1, & - id_det_intmld = -1, & - id_pprod_gross_intmld = -1, & - id_npp_intmld = -1, & - id_radbio_intmld = -1, & - id_dic_int100 = -1, & - id_o2_int100 = -1, & - id_no3_int100 = -1, & - id_fe_int100 = -1, & - id_phy_int100 = -1, & - id_det_int100 = -1, & - id_pprod_gross_int100 = -1, & - id_npp_int100 = -1, & - id_radbio_int100 = -1, & + id_rpp2d = -1, & + id_zsp2d = -1, & id_det_sed_remin = -1, & id_det_sed_depst = -1, & id_det_sed_denit = -1, & @@ -930,6 +922,10 @@ module generic_WOMBATmid id_caco3_sed_remin = -1, & id_caco3_sed_depst = -1, & id_zeuphot = -1, & + id_det_radius = -1, & + id_bdet_radius = -1, & + id_det_density = -1, & + id_bdet_density = -1, & id_seddep = -1, & id_sedmask = -1, & id_sedtemp = -1, & @@ -1026,13 +1022,6 @@ subroutine generic_WOMBATmid_register(tracer_list) if (do_burial) then write (stdoutunit,*) trim(note_header), & 'Permanently burying organics and CaCO3 in sediments' - if (do_conserve_tracers) then - write (stdoutunit,*) trim(note_header), & - 'Adding back the lost NO3 and Alk due to burial to surface' - endif - elseif (do_conserve_tracers) then - call mpp_error(WARNING, trim(warn_header) // & - 'do_conserve_tracers = .true. is doing nothing because do_burial = .false.') endif if (do_nitrogen_fixation .or. do_anammox .or. do_wc_denitrification .or. do_benthic_denitrification) then @@ -1268,16 +1257,6 @@ subroutine generic_WOMBATmid_register_diag(diag_list) wombat%id_dynvis_sw = register_diag_field(package_name, vardesc_temp%name, axes(1:3), & init_time, vardesc_temp%longname, vardesc_temp%units, missing_value=missing_value1) - vardesc_temp = vardesc( & - 'dic_correct', 'Correction to DIC tracer (min limit)', 'h', 'L', 's', 'mol/kg', 'f') - wombat%id_dic_correct = register_diag_field(package_name, vardesc_temp%name, axes(1:3), & - init_time, vardesc_temp%longname, vardesc_temp%units, missing_value=missing_value1) - - vardesc_temp = vardesc( & - 'alk_correct', 'Correction to Alk tracer (min limit)', 'h', 'L', 's', 'mol/kg', 'f') - wombat%id_alk_correct = register_diag_field(package_name, vardesc_temp%name, axes(1:3), & - init_time, vardesc_temp%longname, vardesc_temp%units, missing_value=missing_value1) - vardesc_temp = vardesc( & 'radbio', 'Photosynthetically active radiation available for phytoplankton growth', & 'h', 'L', 's', 'W m-2', 'f') @@ -1296,12 +1275,6 @@ subroutine generic_WOMBATmid_register_diag(diag_list) wombat%id_radmld = register_diag_field(package_name, vardesc_temp%name, axes(1:3), & init_time, vardesc_temp%longname, vardesc_temp%units, missing_value=missing_value1) - vardesc_temp = vardesc( & - 'radbio1', 'Photosynthetically active radiation for phytoplankton growth at surface', & - 'h', '1', 's', 'W m-2', 'f') - wombat%id_radbio1 = register_diag_field(package_name, vardesc_temp%name, axes(1:2), & - init_time, vardesc_temp%longname, vardesc_temp%units, missing_value=missing_value1) - vardesc_temp = vardesc( & 'det_sed_remin', 'Rate of remineralisation of detritus in accumulated sediment', & 'h', '1', 's', 'mol/m^2/s', 'f') @@ -1369,35 +1342,33 @@ subroutine generic_WOMBATmid_register_diag(diag_list) init_time, vardesc_temp%longname, vardesc_temp%units, missing_value=missing_value1) vardesc_temp = vardesc( & - 'export_prod', 'Organic export through 100m', 'h', '1', 's', 'mol/m^2/s', 'f') - wombat%id_export_prod = register_diag_field(package_name, vardesc_temp%name, axes(1:2), & + 'npp3d', 'Net primary productivity', 'h', 'L', 's', 'mol/kg/s', 'f') + wombat%id_npp3d = register_diag_field(package_name, vardesc_temp%name, axes(1:3), & init_time, vardesc_temp%longname, vardesc_temp%units, missing_value=missing_value1) vardesc_temp = vardesc( & - 'export_inorg', 'Inorganic export through 100m', 'h', '1', 's', 'mol/m^2/s', 'f') - wombat%id_export_inorg = register_diag_field(package_name, vardesc_temp%name, axes(1:2), & + 'rpp3d', 'Regenerated phytoplankton production', 'h', 'L', 's', 'mol/kg/s', 'f') + wombat%id_rpp3d = register_diag_field(package_name, vardesc_temp%name, axes(1:3), & init_time, vardesc_temp%longname, vardesc_temp%units, missing_value=missing_value1) vardesc_temp = vardesc( & - 'npp3d', 'Net primary productivity', 'h', 'L', 's', 'mol/kg/s', 'f') - wombat%id_npp3d = register_diag_field(package_name, vardesc_temp%name, axes(1:3), & + 'zsp3d', 'Gross zooplankton production', 'h', 'L', 's', 'mol/kg/s', 'f') + wombat%id_zsp3d = register_diag_field(package_name, vardesc_temp%name, axes(1:3), & init_time, vardesc_temp%longname, vardesc_temp%units, missing_value=missing_value1) vardesc_temp = vardesc( & - 'npp2d', 'Vertically integrated net primary productivity', & - 'h', '1', 's', 'mol/m^2/s', 'f') + 'npp2d', 'Vertically integrated net primary productivity', 'h', '1', 's', 'mol/m^2/s', 'f') wombat%id_npp2d = register_diag_field(package_name, vardesc_temp%name, axes(1:2), & init_time, vardesc_temp%longname, vardesc_temp%units, missing_value=missing_value1) vardesc_temp = vardesc( & - 'npp1', 'Net primary productivity in the first ocean layer', & - 'h', '1', 's', 'mol/kg/s', 'f') - wombat%id_npp1 = register_diag_field(package_name, vardesc_temp%name, axes(1:2), & + 'rpp2d', 'Vertically integrated regenerated primary productivity', 'h', '1', 's', 'mol/m^2/s', 'f') + wombat%id_rpp2d = register_diag_field(package_name, vardesc_temp%name, axes(1:2), & init_time, vardesc_temp%longname, vardesc_temp%units, missing_value=missing_value1) vardesc_temp = vardesc( & - 'pprod_gross', 'Gross phytoplankton production', 'h', 'L', 's', 'mol/kg/s', 'f') - wombat%id_pprod_gross = register_diag_field(package_name, vardesc_temp%name, axes(1:3), & + 'zsp2d', 'Vertically integrated zooplankton secondary productivity', 'h', '1', 's', 'mol/m^2/s', 'f') + wombat%id_zsp2d = register_diag_field(package_name, vardesc_temp%name, axes(1:2), & init_time, vardesc_temp%longname, vardesc_temp%units, missing_value=missing_value1) vardesc_temp = vardesc( & @@ -1415,11 +1386,6 @@ subroutine generic_WOMBATmid_register_diag(diag_list) wombat%id_pchl_mu = register_diag_field(package_name, vardesc_temp%name, axes(1:3), & init_time, vardesc_temp%longname, vardesc_temp%units, missing_value=missing_value1) - vardesc_temp = vardesc( & - 'pchl_lpar', 'Limitation of phytoplankton chlorophyll production by light', 'h', 'L', 's', '[0-1]', 'f') - wombat%id_pchl_lpar = register_diag_field(package_name, vardesc_temp%name, axes(1:3), & - init_time, vardesc_temp%longname, vardesc_temp%units, missing_value=missing_value1) - vardesc_temp = vardesc( & 'phy_lpar', 'Limitation of phytoplankton by light', 'h', 'L', 's', '[0-1]', 'f') wombat%id_phy_lpar = register_diag_field(package_name, vardesc_temp%name, axes(1:3), & @@ -1475,11 +1441,6 @@ subroutine generic_WOMBATmid_register_diag(diag_list) wombat%id_dchl_mu = register_diag_field(package_name, vardesc_temp%name, axes(1:3), & init_time, vardesc_temp%longname, vardesc_temp%units, missing_value=missing_value1) - vardesc_temp = vardesc( & - 'dchl_lpar', 'Limitation of microphytoplankton chlorophyll production by light', 'h', 'L', 's', '[0-1]', 'f') - wombat%id_dchl_lpar = register_diag_field(package_name, vardesc_temp%name, axes(1:3), & - init_time, vardesc_temp%longname, vardesc_temp%units, missing_value=missing_value1) - vardesc_temp = vardesc( & 'dia_lpar', 'Limitation of microphytoplankton by light', 'h', 'L', 's', '[0-1]', 'f') wombat%id_dia_lpar = register_diag_field(package_name, vardesc_temp%name, axes(1:3), & @@ -1646,13 +1607,13 @@ subroutine generic_WOMBATmid_register_diag(diag_list) init_time, vardesc_temp%longname, vardesc_temp%units, missing_value=missing_value1) vardesc_temp = vardesc( & - 'phylyse', 'Respiration of phytoplankton', 'h', 'L', 's', 'molC/kg/s', 'f') - wombat%id_phylyse = register_diag_field(package_name, vardesc_temp%name, axes(1:3), & + 'phymorl', 'Linear mortality of phytoplankton', 'h', 'L', 's', 'molC/kg/s', 'f') + wombat%id_phymorl = register_diag_field(package_name, vardesc_temp%name, axes(1:3), & init_time, vardesc_temp%longname, vardesc_temp%units, missing_value=missing_value1) vardesc_temp = vardesc( & - 'phymort', 'Mortality of phytoplankton', 'h', 'L', 's', 'molC/kg/s', 'f') - wombat%id_phymort = register_diag_field(package_name, vardesc_temp%name, axes(1:3), & + 'phymorq', 'Quadratic (density-dependent) mortality of phytoplankton', 'h', 'L', 's', 'molC/kg/s', 'f') + wombat%id_phymorq = register_diag_field(package_name, vardesc_temp%name, axes(1:3), & init_time, vardesc_temp%longname, vardesc_temp%units, missing_value=missing_value1) vardesc_temp = vardesc( & @@ -1681,13 +1642,13 @@ subroutine generic_WOMBATmid_register_diag(diag_list) init_time, vardesc_temp%longname, vardesc_temp%units, missing_value=missing_value1) vardesc_temp = vardesc( & - 'dialyse', 'Respiration of microphytoplankton', 'h', 'L', 's', 'molC/kg/s', 'f') - wombat%id_dialyse = register_diag_field(package_name, vardesc_temp%name, axes(1:3), & + 'diamorl', 'Linear mortality of microphytoplankton', 'h', 'L', 's', 'molC/kg/s', 'f') + wombat%id_diamorl = register_diag_field(package_name, vardesc_temp%name, axes(1:3), & init_time, vardesc_temp%longname, vardesc_temp%units, missing_value=missing_value1) vardesc_temp = vardesc( & - 'diamort', 'Mortality of microphytoplankton', 'h', 'L', 's', 'molC/kg/s', 'f') - wombat%id_diamort = register_diag_field(package_name, vardesc_temp%name, axes(1:3), & + 'diamorq', 'Quadratic (density-dependent) mortality of microphytoplankton', 'h', 'L', 's', 'molC/kg/s', 'f') + wombat%id_diamorq = register_diag_field(package_name, vardesc_temp%name, axes(1:3), & init_time, vardesc_temp%longname, vardesc_temp%units, missing_value=missing_value1) vardesc_temp = vardesc( & @@ -1756,13 +1717,13 @@ subroutine generic_WOMBATmid_register_diag(diag_list) init_time, vardesc_temp%longname, vardesc_temp%units, missing_value=missing_value1) vardesc_temp = vardesc( & - 'zooresp', 'Respiration of zooplankton', 'h', 'L', 's', 'molC/kg/s', 'f') - wombat%id_zooresp = register_diag_field(package_name, vardesc_temp%name, axes(1:3), & + 'zoomorl', 'Linear mortality of zooplankton', 'h', 'L', 's', 'molC/kg/s', 'f') + wombat%id_zoomorl = register_diag_field(package_name, vardesc_temp%name, axes(1:3), & init_time, vardesc_temp%longname, vardesc_temp%units, missing_value=missing_value1) vardesc_temp = vardesc( & - 'zoomort', 'Mortality of zooplankton', 'h', 'L', 's', 'molC/kg/s', 'f') - wombat%id_zoomort = register_diag_field(package_name, vardesc_temp%name, axes(1:3), & + 'zoomorq', 'Quadratic (density-dependent) mortality of zooplankton', 'h', 'L', 's', 'molC/kg/s', 'f') + wombat%id_zoomorq = register_diag_field(package_name, vardesc_temp%name, axes(1:3), & init_time, vardesc_temp%longname, vardesc_temp%units, missing_value=missing_value1) vardesc_temp = vardesc( & @@ -1911,13 +1872,13 @@ subroutine generic_WOMBATmid_register_diag(diag_list) init_time, vardesc_temp%longname, vardesc_temp%units, missing_value=missing_value1) vardesc_temp = vardesc( & - 'mesresp', 'Respiration of mesozooplankton', 'h', 'L', 's', 'molC/kg/s', 'f') - wombat%id_mesresp = register_diag_field(package_name, vardesc_temp%name, axes(1:3), & + 'mesmorl', 'Linear mortality of mesozooplankton', 'h', 'L', 's', 'molC/kg/s', 'f') + wombat%id_mesmorl = register_diag_field(package_name, vardesc_temp%name, axes(1:3), & init_time, vardesc_temp%longname, vardesc_temp%units, missing_value=missing_value1) vardesc_temp = vardesc( & - 'mesmort', 'Mortality of mesozooplankton', 'h', 'L', 's', 'molC/kg/s', 'f') - wombat%id_mesmort = register_diag_field(package_name, vardesc_temp%name, axes(1:3), & + 'mesmorq', 'Quadratic (density-dependent) mortality of mesozooplankton', 'h', 'L', 's', 'molC/kg/s', 'f') + wombat%id_mesmorq = register_diag_field(package_name, vardesc_temp%name, axes(1:3), & init_time, vardesc_temp%longname, vardesc_temp%units, missing_value=missing_value1) vardesc_temp = vardesc( & @@ -2015,6 +1976,11 @@ subroutine generic_WOMBATmid_register_diag(diag_list) wombat%id_don1remi = register_diag_field(package_name, vardesc_temp%name, axes(1:3), & init_time, vardesc_temp%longname, vardesc_temp%units, missing_value=missing_value1) + vardesc_temp = vardesc( & + 'bac1nupt', 'Total uptake of dissolved nitrogen by bacteria #1', 'h', 'L', 's', 'molN/kg/s', 'f') + wombat%id_bac1nupt = register_diag_field(package_name, vardesc_temp%name, axes(1:3), & + init_time, vardesc_temp%longname, vardesc_temp%units, missing_value=missing_value1) + vardesc_temp = vardesc( & 'doc2remi', 'Remineralisation of dissolved organic carbon by bacteria #2', 'h', 'L', 's', 'molC/kg/s', 'f') wombat%id_doc2remi = register_diag_field(package_name, vardesc_temp%name, axes(1:3), & @@ -2025,6 +1991,11 @@ subroutine generic_WOMBATmid_register_diag(diag_list) wombat%id_don2remi = register_diag_field(package_name, vardesc_temp%name, axes(1:3), & init_time, vardesc_temp%longname, vardesc_temp%units, missing_value=missing_value1) + vardesc_temp = vardesc( & + 'bac2nupt', 'Total uptake of dissolved nitrogen by bacteria #2', 'h', 'L', 's', 'molN/kg/s', 'f') + wombat%id_bac2nupt = register_diag_field(package_name, vardesc_temp%name, axes(1:3), & + init_time, vardesc_temp%longname, vardesc_temp%units, missing_value=missing_value1) + vardesc_temp = vardesc( & 'detremi', 'Hydrolysation of detritus', 'h', 'L', 's', 'molC/kg/s', 'f') wombat%id_detremi = register_diag_field(package_name, vardesc_temp%name, axes(1:3), & @@ -2041,15 +2012,45 @@ subroutine generic_WOMBATmid_register_diag(diag_list) init_time, vardesc_temp%longname, vardesc_temp%units, missing_value=missing_value1) vardesc_temp = vardesc( & - 'dissrat', 'Dissolution rate of CaCO3', 'h', 'L', 's', '/s', 'f') - wombat%id_dissrat = register_diag_field(package_name, vardesc_temp%name, axes(1:3), & + 'dissratcal', 'Dissolution rate of Calcite CaCO3', 'h', 'L', 's', '/s', 'f') + wombat%id_dissratcal = register_diag_field(package_name, vardesc_temp%name, axes(1:3), & + init_time, vardesc_temp%longname, vardesc_temp%units, missing_value=missing_value1) + + vardesc_temp = vardesc( & + 'dissratara', 'Dissolution rate of Aragonite CaCO3', 'h', 'L', 's', '/s', 'f') + wombat%id_dissratara = register_diag_field(package_name, vardesc_temp%name, axes(1:3), & + init_time, vardesc_temp%longname, vardesc_temp%units, missing_value=missing_value1) + + vardesc_temp = vardesc( & + 'dissratpoc', 'Dissolution rate of CaCO3 due to POC remin', 'h', 'L', 's', '/s', 'f') + wombat%id_dissratpoc = register_diag_field(package_name, vardesc_temp%name, axes(1:3), & + init_time, vardesc_temp%longname, vardesc_temp%units, missing_value=missing_value1) + + vardesc_temp = vardesc( & + 'zoodiss', 'Dissolution of CaCO3 due to microzooplankton grazing', 'h', 'L', 's', 'molCaCO3/kg/s', 'f') + wombat%id_zoodiss = register_diag_field(package_name, vardesc_temp%name, axes(1:3), & + init_time, vardesc_temp%longname, vardesc_temp%units, missing_value=missing_value1) + + vardesc_temp = vardesc( & + 'mesdiss', 'Dissolution of CaCO3 due to mesozooplankton grazing', 'h', 'L', 's', 'molCaCO3/kg/s', 'f') + wombat%id_mesdiss = register_diag_field(package_name, vardesc_temp%name, axes(1:3), & init_time, vardesc_temp%longname, vardesc_temp%units, missing_value=missing_value1) vardesc_temp = vardesc( & - 'caldiss', 'Dissolution of CaCO3', 'h', 'L', 's', 'molCaCO3/kg/s', 'f') + 'caldiss', 'Dissolution of Calcite CaCO3', 'h', 'L', 's', 'molCaCO3/kg/s', 'f') wombat%id_caldiss = register_diag_field(package_name, vardesc_temp%name, axes(1:3), & init_time, vardesc_temp%longname, vardesc_temp%units, missing_value=missing_value1) + vardesc_temp = vardesc( & + 'aradiss', 'Dissolution of Aragonite CaCO3', 'h', 'L', 's', 'molCaCO3/kg/s', 'f') + wombat%id_aradiss = register_diag_field(package_name, vardesc_temp%name, axes(1:3), & + init_time, vardesc_temp%longname, vardesc_temp%units, missing_value=missing_value1) + + vardesc_temp = vardesc( & + 'pocdiss', 'Dissolution of CaCO3 due to POC remin', 'h', 'L', 's', 'molCaCO3/kg/s', 'f') + wombat%id_pocdiss = register_diag_field(package_name, vardesc_temp%name, axes(1:3), & + init_time, vardesc_temp%longname, vardesc_temp%units, missing_value=missing_value1) + vardesc_temp = vardesc( & 'aoa_loxy', 'Limitation of Ammonia Oxidizing Archaea by oxygen', 'h', 'L', 's', '[0-1]', 'f') wombat%id_aoa_loxy = register_diag_field(package_name, vardesc_temp%name, axes(1:3), & @@ -2061,9 +2062,15 @@ subroutine generic_WOMBATmid_register_diag(diag_list) init_time, vardesc_temp%longname, vardesc_temp%units, missing_value=missing_value1) vardesc_temp = vardesc( & - 'aoa_yn2o', 'Yield of N2O produced by Ammonia Oxidizing Archaea during oxidation', 'h', 'L', 's', & + 'aoa_en2o', 'Excretion of N2O produced by Ammonia Oxidizing Archaea during oxidation', 'h', 'L', 's', & + 'mol N / mol Biomass', 'f') + wombat%id_aoa_en2o = register_diag_field(package_name, vardesc_temp%name, axes(1:3), & + init_time, vardesc_temp%longname, vardesc_temp%units, missing_value=missing_value1) + + vardesc_temp = vardesc( & + 'aoa_eno3', 'Excretion of NO3 produced by Ammonia Oxidizing Archaea during oxidation', 'h', 'L', 's', & 'mol N / mol Biomass', 'f') - wombat%id_aoa_yn2o = register_diag_field(package_name, vardesc_temp%name, axes(1:3), & + wombat%id_aoa_eno3 = register_diag_field(package_name, vardesc_temp%name, axes(1:3), & init_time, vardesc_temp%longname, vardesc_temp%units, missing_value=missing_value1) vardesc_temp = vardesc( & @@ -2087,13 +2094,28 @@ subroutine generic_WOMBATmid_register_diag(diag_list) init_time, vardesc_temp%longname, vardesc_temp%units, missing_value=missing_value1) vardesc_temp = vardesc( & - 'aoamor1', 'Linear mortality of Ammonia Oxidizing Archaea', 'h', 'L', 's', 'molC/kg/s', 'f') - wombat%id_aoamor1 = register_diag_field(package_name, vardesc_temp%name, axes(1:3), & + 'aoamorl', 'Linear mortality of Ammonia Oxidizing Archaea', 'h', 'L', 's', 'molC/kg/s', 'f') + wombat%id_aoamorl = register_diag_field(package_name, vardesc_temp%name, axes(1:3), & + init_time, vardesc_temp%longname, vardesc_temp%units, missing_value=missing_value1) + + vardesc_temp = vardesc( & + 'aoamorq', 'Quadratic mortality of Ammonia Oxidizing Archaea', 'h', 'L', 's', 'molC/kg/s', 'f') + wombat%id_aoamorq = register_diag_field(package_name, vardesc_temp%name, axes(1:3), & + init_time, vardesc_temp%longname, vardesc_temp%units, missing_value=missing_value1) + + vardesc_temp = vardesc( & + 'bac_ydon', 'Biomass yield of bacteria (mol DON+NH4 per mol biomass grown)', 'h', 'L', 's', 'molN/molB', 'f') + wombat%id_bac_ydon = register_diag_field(package_name, vardesc_temp%name, axes(1:3), & + init_time, vardesc_temp%longname, vardesc_temp%units, missing_value=missing_value1) + + vardesc_temp = vardesc( & + 'bac1_ydoc', 'Biomass yield of bacteria #1 (mol DOC per mol biomass grown)', 'h', 'L', 's', 'molDOC/molB', 'f') + wombat%id_bac1_ydoc = register_diag_field(package_name, vardesc_temp%name, axes(1:3), & init_time, vardesc_temp%longname, vardesc_temp%units, missing_value=missing_value1) vardesc_temp = vardesc( & - 'aoamor2', 'Quadratic mortality of Ammonia Oxidizing Archaea', 'h', 'L', 's', 'molC/kg/s', 'f') - wombat%id_aoamor2 = register_diag_field(package_name, vardesc_temp%name, axes(1:3), & + 'bac2_ydoc', 'Biomass yield of bacteria #2 (mol DOC per mol biomass grown)', 'h', 'L', 's', 'molDOC/molB', 'f') + wombat%id_bac2_ydoc = register_diag_field(package_name, vardesc_temp%name, axes(1:3), & init_time, vardesc_temp%longname, vardesc_temp%units, missing_value=missing_value1) vardesc_temp = vardesc( & @@ -2117,39 +2139,33 @@ subroutine generic_WOMBATmid_register_diag(diag_list) init_time, vardesc_temp%longname, vardesc_temp%units, missing_value=missing_value1) vardesc_temp = vardesc( & - 'bac1_lfer', 'Limitation of facultative heterotrophic bacteria 1 by dFe', 'h', 'L', 's', '[0-1]', 'f') - wombat%id_bac1_lfer = register_diag_field(package_name, vardesc_temp%name, axes(1:3), & - init_time, vardesc_temp%longname, vardesc_temp%units, missing_value=missing_value1) - - vardesc_temp = vardesc( & - 'bac1_lnit', 'Limitation of facultative heterotrophic bacteria 1 by DON and NH4', 'h', 'L', 's', '[0-1]', 'f') - wombat%id_bac1_lnit = register_diag_field(package_name, vardesc_temp%name, axes(1:3), & + 'bac1_mu', 'Realized growth rate of facultative heterotrophic bacteria 1', 'h', 'L', 's', '/s', 'f') + wombat%id_bac1_mu = register_diag_field(package_name, vardesc_temp%name, axes(1:3), & init_time, vardesc_temp%longname, vardesc_temp%units, missing_value=missing_value1) vardesc_temp = vardesc( & - 'bac1_mu', 'Realized growth rate of facultative heterotrophic bacteria 1', 'h', 'L', 's', '/s', 'f') - wombat%id_bac1_mu = register_diag_field(package_name, vardesc_temp%name, axes(1:3), & + 'bac1_fanaer', 'Fraction of growth supported by anaerobic metabolism', 'h', 'L', 's', '[0-1]', 'f') + wombat%id_bac1_fanaer = register_diag_field(package_name, vardesc_temp%name, axes(1:3), & init_time, vardesc_temp%longname, vardesc_temp%units, missing_value=missing_value1) vardesc_temp = vardesc( & - 'bac1_kdoc', 'Half saturation coefficient for DOC uptake by facultative heterotrophic bacteria 1', 'h', 'L', 's', & - 'mol/kg', 'f') - wombat%id_bac1_kdoc = register_diag_field(package_name, vardesc_temp%name, axes(1:3), & + 'bac1_fnlim', 'Bacteria #1 growth limited by nitrogen?', 'h', 'L', 's', '[0-1]', 'f') + wombat%id_bac1_fnlim = register_diag_field(package_name, vardesc_temp%name, axes(1:3), & init_time, vardesc_temp%longname, vardesc_temp%units, missing_value=missing_value1) vardesc_temp = vardesc( & - 'bac1_fanaer', 'Fraction of growth supported by anaerobic metabolism', 'h', 'L', 's', '[0-1]', 'f') - wombat%id_bac1_fanaer = register_diag_field(package_name, vardesc_temp%name, axes(1:3), & + 'bac1_ffelim', 'Bacteria #1 growth limited by iron?', 'h', 'L', 's', '[0-1]', 'f') + wombat%id_bac1_ffelim = register_diag_field(package_name, vardesc_temp%name, axes(1:3), & init_time, vardesc_temp%longname, vardesc_temp%units, missing_value=missing_value1) vardesc_temp = vardesc( & - 'bac1mor1', 'Linear mortality of facultative heterotrophic bacteria 1', 'h', 'L', 's', 'molC/kg/s', 'f') - wombat%id_bac1mor1 = register_diag_field(package_name, vardesc_temp%name, axes(1:3), & + 'bac1morl', 'Linear mortality of facultative heterotrophic bacteria 1', 'h', 'L', 's', 'molC/kg/s', 'f') + wombat%id_bac1morl = register_diag_field(package_name, vardesc_temp%name, axes(1:3), & init_time, vardesc_temp%longname, vardesc_temp%units, missing_value=missing_value1) vardesc_temp = vardesc( & - 'bac1mor2', 'Quadratic mortality of facultative heterotrophic bacteria 1', 'h', 'L', 's', 'molC/kg/s', 'f') - wombat%id_bac1mor2 = register_diag_field(package_name, vardesc_temp%name, axes(1:3), & + 'bac1morq', 'Quadratic mortality of facultative heterotrophic bacteria 1', 'h', 'L', 's', 'molC/kg/s', 'f') + wombat%id_bac1morq = register_diag_field(package_name, vardesc_temp%name, axes(1:3), & init_time, vardesc_temp%longname, vardesc_temp%units, missing_value=missing_value1) vardesc_temp = vardesc( & @@ -2178,43 +2194,37 @@ subroutine generic_WOMBATmid_register_diag(diag_list) init_time, vardesc_temp%longname, vardesc_temp%units, missing_value=missing_value1) vardesc_temp = vardesc( & - 'bac2_lfer', 'Limitation of facultative heterotrophic bacteria 2 by dFe', 'h', 'L', 's', '[0-1]', 'f') - wombat%id_bac2_lfer = register_diag_field(package_name, vardesc_temp%name, axes(1:3), & - init_time, vardesc_temp%longname, vardesc_temp%units, missing_value=missing_value1) - - vardesc_temp = vardesc( & - 'bac2_lnit', 'Limitation of facultative heterotrophic bacteria 2 by DON and NH4', 'h', 'L', 's', '[0-1]', 'f') - wombat%id_bac2_lnit = register_diag_field(package_name, vardesc_temp%name, axes(1:3), & + 'bac2_mu', 'Realized growth rate of facultative heterotrophic bacteria 2', 'h', 'L', 's', '/s', 'f') + wombat%id_bac2_mu = register_diag_field(package_name, vardesc_temp%name, axes(1:3), & init_time, vardesc_temp%longname, vardesc_temp%units, missing_value=missing_value1) vardesc_temp = vardesc( & - 'bac2_mu', 'Realized growth rate of facultative heterotrophic bacteria 2', 'h', 'L', 's', '/s', 'f') - wombat%id_bac2_mu = register_diag_field(package_name, vardesc_temp%name, axes(1:3), & + 'bac2_fanaer', 'Fraction of growth supported by anaerobic metabolism', 'h', 'L', 's', '[0-1]', 'f') + wombat%id_bac2_fanaer = register_diag_field(package_name, vardesc_temp%name, axes(1:3), & init_time, vardesc_temp%longname, vardesc_temp%units, missing_value=missing_value1) vardesc_temp = vardesc( & - 'bac2_kdoc', 'Half saturation coefficient for DOC uptake by facultative heterotrophic bacteria 2', 'h', 'L', 's', & - 'mol/kg', 'f') - wombat%id_bac2_kdoc = register_diag_field(package_name, vardesc_temp%name, axes(1:3), & + 'bac2_fnlim', 'Bacteria #2 growth limited by nitrogen?', 'h', 'L', 's', '[0-1]', 'f') + wombat%id_bac2_fnlim = register_diag_field(package_name, vardesc_temp%name, axes(1:3), & init_time, vardesc_temp%longname, vardesc_temp%units, missing_value=missing_value1) vardesc_temp = vardesc( & - 'bac2_fanaer', 'Fraction of growth supported by anaerobic metabolism', 'h', 'L', 's', '[0-1]', 'f') - wombat%id_bac2_fanaer = register_diag_field(package_name, vardesc_temp%name, axes(1:3), & + 'bac2_ffelim', 'Bacteria #2 growth limited by iron?', 'h', 'L', 's', '[0-1]', 'f') + wombat%id_bac2_ffelim = register_diag_field(package_name, vardesc_temp%name, axes(1:3), & init_time, vardesc_temp%longname, vardesc_temp%units, missing_value=missing_value1) vardesc_temp = vardesc( & - 'bac2mor1', 'Linear mortality of facultative heterotrophic bacteria 2', 'h', 'L', 's', 'molC/kg/s', 'f') - wombat%id_bac2mor1 = register_diag_field(package_name, vardesc_temp%name, axes(1:3), & + 'bac2morl', 'Linear mortality of facultative heterotrophic bacteria 2', 'h', 'L', 's', 'molC/kg/s', 'f') + wombat%id_bac2morl = register_diag_field(package_name, vardesc_temp%name, axes(1:3), & init_time, vardesc_temp%longname, vardesc_temp%units, missing_value=missing_value1) vardesc_temp = vardesc( & - 'bac2mor2', 'Quadratic mortality of facultative heterotrophic bacteria 2', 'h', 'L', 's', 'molC/kg/s', 'f') - wombat%id_bac2mor2 = register_diag_field(package_name, vardesc_temp%name, axes(1:3), & + 'bac2morq', 'Quadratic mortality of facultative heterotrophic bacteria 2', 'h', 'L', 's', 'molC/kg/s', 'f') + wombat%id_bac2morq = register_diag_field(package_name, vardesc_temp%name, axes(1:3), & init_time, vardesc_temp%longname, vardesc_temp%units, missing_value=missing_value1) vardesc_temp = vardesc( & - 'bac2deni', 'bacterial denitrification rate (N2O consumption)', 'h', 'L', 's', '[molN2/kg/s]', 'f') + 'bac2deni', 'bacterial denitrification rate (N2O consumption)', 'h', 'L', 's', '[molN2O/kg/s]', 'f') wombat%id_bac2deni = register_diag_field(package_name, vardesc_temp%name, axes(1:3), & init_time, vardesc_temp%longname, vardesc_temp%units, missing_value=missing_value1) @@ -2244,119 +2254,58 @@ subroutine generic_WOMBATmid_register_diag(diag_list) init_time, vardesc_temp%longname, vardesc_temp%units, missing_value=missing_value1) vardesc_temp = vardesc( & - 'pprod_gross_2d', 'Vertically integrated gross phytoplankton production', & - 'h', '1', 's', 'mol/m^2/s', 'f') - wombat%id_pprod_gross_2d = register_diag_field(package_name, vardesc_temp%name, axes(1:2), & - init_time, vardesc_temp%longname, vardesc_temp%units, missing_value=missing_value1) - - vardesc_temp = vardesc( & - 'zprod_gross', 'Gross zooplankton production', 'h', 'L', 's', 'mol/kg/s', 'f') - wombat%id_zprod_gross = register_diag_field(package_name, vardesc_temp%name, axes(1:3), & - init_time, vardesc_temp%longname, vardesc_temp%units, missing_value=missing_value1) - - ! MLD-integrated diagnostics - !----------------------------------------------------------------------- - vardesc_temp = vardesc( & - 'dic_intmld', 'MLD-integrated dissolved inorganic carbon', & - 'h', '1', 's', 'mol/m^2', 'f') - wombat%id_dic_intmld = register_diag_field(package_name, vardesc_temp%name, axes(1:2), & - init_time, vardesc_temp%longname, vardesc_temp%units, missing_value=missing_value1) - - vardesc_temp = vardesc( & - 'o2_intmld', 'MLD-integrated dissolved oxygen', 'h', '1', 's', 'mol/m^2', 'f') - wombat%id_o2_intmld = register_diag_field(package_name, vardesc_temp%name, axes(1:2), & - init_time, vardesc_temp%longname, vardesc_temp%units, missing_value=missing_value1) - - vardesc_temp = vardesc( & - 'no3_intmld', 'MLD-integrated nitrate', 'h', '1', 's', 'mol/m^2', 'f') - wombat%id_no3_intmld = register_diag_field(package_name, vardesc_temp%name, axes(1:2), & - init_time, vardesc_temp%longname, vardesc_temp%units, missing_value=missing_value1) - - vardesc_temp = vardesc( & - 'fe_intmld', 'MLD-integrated iron', 'h', '1', 's', 'mol/m^2', 'f') - wombat%id_fe_intmld = register_diag_field(package_name, vardesc_temp%name, axes(1:2), & - init_time, vardesc_temp%longname, vardesc_temp%units, missing_value=missing_value1) - - vardesc_temp = vardesc( & - 'phy_intmld', 'MLD-integrated phytoplankton', 'h', '1', 's', 'mol/m^2', 'f') - wombat%id_phy_intmld = register_diag_field(package_name, vardesc_temp%name, axes(1:2), & - init_time, vardesc_temp%longname, vardesc_temp%units, missing_value=missing_value1) - - vardesc_temp = vardesc( & - 'det_intmld', 'MLD-integrated detritus', 'h', '1', 's', 'mol/m^2', 'f') - wombat%id_det_intmld = register_diag_field(package_name, vardesc_temp%name, axes(1:2), & - init_time, vardesc_temp%longname, vardesc_temp%units, missing_value=missing_value1) - - vardesc_temp = vardesc( & - 'pprod_gross_intmld', 'MLD-integrated gross phytoplankton production', & - 'h', '1', 's', 'mol/m^2/s', 'f') - wombat%id_pprod_gross_intmld = register_diag_field(package_name, vardesc_temp%name, axes(1:2), & - init_time, vardesc_temp%longname, vardesc_temp%units, missing_value=missing_value1) - - vardesc_temp = vardesc( & - 'npp_intmld', 'MLD-integrated net primary productivity', 'h', '1', 's', 'mol/m^2/s', 'f') - wombat%id_npp_intmld = register_diag_field(package_name, vardesc_temp%name, axes(1:2), & + 'nosdoc_overflow', 'Rate of change to local NOSC by phytoplankton exudation of DOC', 'h', 'L', 's', '[NOSC/s]', 'f') + wombat%id_nosdoc_overflow = register_diag_field(package_name, vardesc_temp%name, axes(1:3), & init_time, vardesc_temp%longname, vardesc_temp%units, missing_value=missing_value1) vardesc_temp = vardesc( & - 'radbio_intmld', 'MLD-integrated photosynthetically active radiation for phytoplankton '// & - 'growth', 'h', '1', 's', 'W m-1', 'f') - wombat%id_radbio_intmld = register_diag_field(package_name, vardesc_temp%name, axes(1:2), & - init_time, vardesc_temp%longname, vardesc_temp%units, missing_value=missing_value1) - - ! 100m-integrated diagnostics - !----------------------------------------------------------------------- - vardesc_temp = vardesc( & - 'dic_int100', '100m-integrated dissolved inorganic carbon', & - 'h', '1', 's', 'mol/m^2', 'f') - wombat%id_dic_int100 = register_diag_field(package_name, vardesc_temp%name, axes(1:2), & + 'nosdoc_excretion', 'Rate of change to local NOSC by zooplankton excretion of DOC', 'h', 'L', 's', '[NOSC/s]', 'f') + wombat%id_nosdoc_excretion = register_diag_field(package_name, vardesc_temp%name, axes(1:3), & init_time, vardesc_temp%longname, vardesc_temp%units, missing_value=missing_value1) vardesc_temp = vardesc( & - 'o2_int100', '100m-integrated dissolved oxygen', 'h', '1', 's', 'mol/m^2', 'f') - wombat%id_o2_int100 = register_diag_field(package_name, vardesc_temp%name, axes(1:2), & + 'nosdoc_phylysis', 'Rate of change to local NOSC by phytoplankton lysis', 'h', 'L', 's', '[NOSC/s]', 'f') + wombat%id_nosdoc_phylysis = register_diag_field(package_name, vardesc_temp%name, axes(1:3), & init_time, vardesc_temp%longname, vardesc_temp%units, missing_value=missing_value1) vardesc_temp = vardesc( & - 'no3_int100', '100m-integrated nitrate', 'h', '1', 's', 'mol/m^2', 'f') - wombat%id_no3_int100 = register_diag_field(package_name, vardesc_temp%name, axes(1:2), & + 'nosdoc_baclysis', 'Rate of change to local NOSC by bacterial/archaeal lysis', 'h', 'L', 's', '[NOSC/s]', 'f') + wombat%id_nosdoc_baclysis = register_diag_field(package_name, vardesc_temp%name, axes(1:3), & init_time, vardesc_temp%longname, vardesc_temp%units, missing_value=missing_value1) vardesc_temp = vardesc( & - 'fe_int100', '100m-integrated iron', 'h', '1', 's', 'mol/m^2', 'f') - wombat%id_fe_int100 = register_diag_field(package_name, vardesc_temp%name, axes(1:2), & + 'nosdoc_dethydro', 'Rate of change to local NOSC by detrital hydrolysis', 'h', 'L', 's', '[NOSC/s]', 'f') + wombat%id_nosdoc_dethydro = register_diag_field(package_name, vardesc_temp%name, axes(1:3), & init_time, vardesc_temp%longname, vardesc_temp%units, missing_value=missing_value1) vardesc_temp = vardesc( & - 'phy_int100', '100m-integrated phytoplankton', 'h', '1', 's', 'mol/m^2', 'f') - wombat%id_phy_int100 = register_diag_field(package_name, vardesc_temp%name, axes(1:2), & + 'nosdoc_docconsu', 'Rate of change to local NOSC by DOC consumption', 'h', 'L', 's', '[NOSC/s]', 'f') + wombat%id_nosdoc_docconsu = register_diag_field(package_name, vardesc_temp%name, axes(1:3), & init_time, vardesc_temp%longname, vardesc_temp%units, missing_value=missing_value1) vardesc_temp = vardesc( & - 'det_int100', '100m-integrated detritus', 'h', '1', 's', 'mol/m^2', 'f') - wombat%id_det_int100 = register_diag_field(package_name, vardesc_temp%name, axes(1:2), & + 'det_density', 'Mean density of small detrital particles', 'h', 'L', 's', 'kg/m3', 'f') + wombat%id_det_density = register_diag_field(package_name, vardesc_temp%name, axes(1:3), & init_time, vardesc_temp%longname, vardesc_temp%units, missing_value=missing_value1) vardesc_temp = vardesc( & - 'pprod_gross_int100', '100m-integrated gross phytoplankton production', & - 'h', '1', 's', 'mol/m^2/s', 'f') - wombat%id_pprod_gross_int100 = register_diag_field(package_name, vardesc_temp%name, axes(1:2), & + 'bdet_density', 'Mean density of large detrital particles', 'h', 'L', 's', 'kg/m3', 'f') + wombat%id_bdet_density = register_diag_field(package_name, vardesc_temp%name, axes(1:3), & init_time, vardesc_temp%longname, vardesc_temp%units, missing_value=missing_value1) vardesc_temp = vardesc( & - 'npp_int100', '100m-integrated net primary productivity', 'h', '1', 's', 'mol/m^2/s', 'f') - wombat%id_npp_int100 = register_diag_field(package_name, vardesc_temp%name, axes(1:2), & + 'zeuphot', 'Depth of the euphotic zone (%1 incident light)', 'h', '1', 's', 'm', 'f') + wombat%id_zeuphot = register_diag_field(package_name, vardesc_temp%name, axes(1:2), & init_time, vardesc_temp%longname, vardesc_temp%units, missing_value=missing_value1) vardesc_temp = vardesc( & - 'radbio_int100', '100m-integrated photosynthetically active radiation for phytoplankton '// & - 'growth', 'h', '1', 's', 'W m-1', 'f') - wombat%id_radbio_int100 = register_diag_field(package_name, vardesc_temp%name, axes(1:2), & + 'det_radius', 'Mean radius of small detrital particles', 'h', '1', 's', 'm', 'f') + wombat%id_det_radius = register_diag_field(package_name, vardesc_temp%name, axes(1:2), & init_time, vardesc_temp%longname, vardesc_temp%units, missing_value=missing_value1) vardesc_temp = vardesc( & - 'zeuphot', 'Depth of the euphotic zone (%1 incident light)', 'h', '1', 's', 'm', 'f') - wombat%id_zeuphot = register_diag_field(package_name, vardesc_temp%name, axes(1:2), & + 'bdet_radius', 'Mean radius of large detrital particles', 'h', '1', 's', 'm', 'f') + wombat%id_bdet_radius = register_diag_field(package_name, vardesc_temp%name, axes(1:2), & init_time, vardesc_temp%longname, vardesc_temp%units, missing_value=missing_value1) vardesc_temp = vardesc( & @@ -2532,19 +2481,19 @@ subroutine user_add_params ! Absolute minimum of dissolved inorganic carbon [mmol/m3] for co2 sys calcs !----------------------------------------------------------------------- - call g_tracer_add_param('dic_min', wombat%dic_min, 1000.0) + call g_tracer_add_param('dic_min', wombat%dic_min, 100.0) ! Absolute maximum of dissolved inorganic carbon [mmol/m3] for co2 sys calcs !----------------------------------------------------------------------- - call g_tracer_add_param('dic_max', wombat%dic_max, 3000.0) + call g_tracer_add_param('dic_max', wombat%dic_max, 100000.0) ! Absolute minimum of alkalinity [mmol/m3] for co2 sys calcs !----------------------------------------------------------------------- - call g_tracer_add_param('alk_min', wombat%alk_min, 1000.0) + call g_tracer_add_param('alk_min', wombat%alk_min, 100.0) ! Absolute maximum of alkalinity [mmol/m3] for co2 sys calcs !----------------------------------------------------------------------- - call g_tracer_add_param('alk_max', wombat%alk_max, 3000.0) + call g_tracer_add_param('alk_max', wombat%alk_max, 100000.0) !======================================================================= ! NPZD parameters @@ -2556,15 +2505,15 @@ subroutine user_add_params ! Initial slope of P-I curve for phytoplankton [(mg Chl m-3)-1 (W m-2)-1] !----------------------------------------------------------------------- - call g_tracer_add_param('alphabio_phy', wombat%alphabio_phy, 2.25) + call g_tracer_add_param('alphabio_phy', wombat%alphabio_phy, 1.5) ! Autotrophy maximum growth rate parameter a for phytoplankton [1/s] !----------------------------------------------------------------------- - call g_tracer_add_param('abioa_phy', wombat%abioa_phy, 1.0/86400.0) + call g_tracer_add_param('abioa_phy', wombat%abioa_phy, 0.7/86400.0) ! Autotrophy maximum growth rate parameter b for phytoplankton [1] !----------------------------------------------------------------------- - call g_tracer_add_param('bbioa_phy', wombat%bbioa_phy, 1.050) + call g_tracer_add_param('bbioa_phy', wombat%bbioa_phy, 1.055) ! Initial slope of P-I curve for microphytoplankton [(mg Chl m-3)-1 (W m-2)-1] ! "When diatoms are compared to other groups of phytoplankton, they tend to differ @@ -2576,36 +2525,36 @@ subroutine user_add_params ! Initial slope of P-I curve for trichodesmium [(mg Chl m-3)-1 (W m-2)-1] !----------------------------------------------------------------------- - call g_tracer_add_param('alphabio_tri', wombat%alphabio_tri, 1.0) + call g_tracer_add_param('alphabio_tri', wombat%alphabio_tri, 1.8) ! Autotrophy maximum growth rate parameter a for microphytoplankton [1/s] ! [Anderson et al., 2021 Nat Communications] !----------------------------------------------------------------------- - call g_tracer_add_param('abioa_dia', wombat%abioa_dia, 1.25/86400.0) + call g_tracer_add_param('abioa_dia', wombat%abioa_dia, 1.0/86400.0) ! Autotrophy maximum growth rate parameter b for microphytoplankton [1] !----------------------------------------------------------------------- - call g_tracer_add_param('bbioa_dia', wombat%bbioa_dia, 1.050) + call g_tracer_add_param('bbioa_dia', wombat%bbioa_dia, 1.070) ! Heterotrophy maximum growth rate parameter b [1] !----------------------------------------------------------------------- - call g_tracer_add_param('bbioh', wombat%bbioh, 1.066) + call g_tracer_add_param('bbioh', wombat%bbioh, 1.072) ! Phytoplankton half saturation constant for nitrogen uptake [mmolN/m3] !----------------------------------------------------------------------- - call g_tracer_add_param('phykn', wombat%phykn, 0.3) + call g_tracer_add_param('phykn', wombat%phykn, 1.0) ! Phytoplankton half saturation constant for iron uptake [umolFe/m3] !----------------------------------------------------------------------- - call g_tracer_add_param('phykf', wombat%phykf, 0.5) + call g_tracer_add_param('phykf', wombat%phykf, 1.0) ! Phytoplankton minimum quota of chlorophyll to carbon [mg/mg] !----------------------------------------------------------------------- call g_tracer_add_param('phyminqc', wombat%phyminqc, 0.008) - ! Phytoplankton optimal quota of chlorophyll to carbon [mg/mg] + ! Phytoplankton maximum quota of chlorophyll to carbon [mg/mg] !----------------------------------------------------------------------- - call g_tracer_add_param('phyoptqc', wombat%phyoptqc, 0.040) + call g_tracer_add_param('phymaxqc', wombat%phymaxqc, 0.065) ! Phytoplankton optimal quota of iron to carbon [mol/mol] !----------------------------------------------------------------------- @@ -2617,7 +2566,7 @@ subroutine user_add_params ! Phytoplankton linear mortality rate constant [1/s] !----------------------------------------------------------------------- - call g_tracer_add_param('phylmor', wombat%phylmor, 0.005/86400.0) + call g_tracer_add_param('phylmor', wombat%phylmor, 0.001/86400.0) ! Phytoplankton quadratic mortality rate constant [m3/mmolN/s] !----------------------------------------------------------------------- @@ -2625,26 +2574,26 @@ subroutine user_add_params ! microphytoplankton half saturation constant for nitrogen uptake [mmolN/m3] !----------------------------------------------------------------------- - call g_tracer_add_param('diakn', wombat%diakn, 3.0) + call g_tracer_add_param('diakn', wombat%diakn, 2.4) ! microphytoplankton half saturation constant for iron uptake [umolFe/m3] !----------------------------------------------------------------------- - call g_tracer_add_param('diakf', wombat%diakf, 1.0) + call g_tracer_add_param('diakf', wombat%diakf, 2.7) ! microphytoplankton half saturation constant for silicic acid uptake [mmolSi/m3] ! - minimal Ks in natural assemblages of 0.5 - 0.9 mmolSi/m3 ! [Nelson & Brzezinski, 1990, Marine Ecology Progress Series, 62, 283-292] ! - We set 5.0 here as default due to recalculation of variable Ksi below !----------------------------------------------------------------------- - call g_tracer_add_param('diaks', wombat%diaks, 5.0) + call g_tracer_add_param('diaks', wombat%diaks, 6.7) - ! microphytoplankton minimum quota of chlorodiall to carbon [mg/mg] + ! microphytoplankton minimum quota of chlorophyll to carbon [mg/mg] !----------------------------------------------------------------------- call g_tracer_add_param('diaminqc', wombat%diaminqc, 0.004) - ! microphytoplankton optimal quota of chlorophyll to carbon [mg/mg] + ! microphytoplankton maximum quota of chlorophyll to carbon [mg/mg] !----------------------------------------------------------------------- - call g_tracer_add_param('diaoptqc', wombat%diaoptqc, 0.036) + call g_tracer_add_param('diamaxqc', wombat%diamaxqc, 0.060) ! microphytoplankton optimal quota of iron to carbon [mol/mol] !----------------------------------------------------------------------- @@ -2652,7 +2601,7 @@ subroutine user_add_params ! microphytoplankton maximum quota of iron to carbon [mol/mol] !----------------------------------------------------------------------- - call g_tracer_add_param('diamaxqf', wombat%diamaxqf, 50e-6) + call g_tracer_add_param('diamaxqf', wombat%diamaxqf, 65e-6) ! microphytoplankton minimal quota of silicon to carbon to build a valve [mol/mol] ! Brzezinksi (1985) J. Phycology, 21, 347-357 @@ -2667,7 +2616,7 @@ subroutine user_add_params ! microphytoplankton maximum quota of silicon to carbon [mol/mol] ! Brzezinski et al., (2003) Deep-Sea Research II, 50, 619-633 !----------------------------------------------------------------------- - call g_tracer_add_param('diamaxqs', wombat%diamaxqs, 0.52) + call g_tracer_add_param('diamaxqs', wombat%diamaxqs, 0.60) ! microphytoplankton maximum uptake rate of silicon to carbon [/s] ! 1.2 - 950 fmol Si cell h-1 [Kolbe & Brunner 2022, in "Molecular Life of Diatoms"] @@ -2675,27 +2624,27 @@ subroutine user_add_params ! for a 100 pg C cell (8.3 pmol), this maps to roughly 0.0012 - 0.012 mol Si/mol C h-1 ! which is roughly 0.03 to 0.3 mol Si/mol C day-1 !----------------------------------------------------------------------- - call g_tracer_add_param('diaVmaxs', wombat%diaVmaxs, 0.3/86400.0) + call g_tracer_add_param('diaVmaxs', wombat%diaVmaxs, 0.1/86400.0) ! microphytoplankton linear mortality rate constant [1/s] !----------------------------------------------------------------------- - call g_tracer_add_param('dialmor', wombat%dialmor, 0.005/86400.0) + call g_tracer_add_param('dialmor', wombat%dialmor, 0.001/86400.0) ! microphytoplankton quadratic mortality rate constant [m3/mmolN/s] !----------------------------------------------------------------------- call g_tracer_add_param('diaqmor', wombat%diaqmor, 0.05/86400.0) - ! Chlorophyll darkness growth reduction half-saturation coefficient [W/m2] + ! Timescale of chlorophyll synthesis by phytoplankton [s] !----------------------------------------------------------------------- - call g_tracer_add_param('chlkWm2', wombat%chlkWm2, 5.0) + call g_tracer_add_param('chltau', wombat%chltau, 86400.0) ! Maximum fraction of NPP that can be routed to DOC exudation by phytoplankton [0-1] !----------------------------------------------------------------------- - call g_tracer_add_param('overflow', wombat%overflow, 0.5) + call g_tracer_add_param('overflow', wombat%overflow, 0.75) ! Trichodesmium half saturation constant for iron uptake [umolFe/m3] !----------------------------------------------------------------------- - call g_tracer_add_param('trikf', wombat%trikf, 0.5) + call g_tracer_add_param('trikf', wombat%trikf, 0.125) ! Trichodesmium typical chlorophyll to carbon ratio [mg/mg] !----------------------------------------------------------------------- @@ -2707,23 +2656,23 @@ subroutine user_add_params ! Zooplankton carbon bulk ingestion efficiency [0-1] !----------------------------------------------------------------------- - call g_tracer_add_param('zooCingest', wombat%zooCingest, 0.90) + call g_tracer_add_param('zooCingest', wombat%zooCingest, 0.70) ! Zooplankton carbon assimilation efficiency [0-1] !----------------------------------------------------------------------- - call g_tracer_add_param('zooCassim', wombat%zooCassim, 0.30) + call g_tracer_add_param('zooCassim', wombat%zooCassim, 0.40) ! Zooplankton iron bulk ingestion efficiency [0-1] !----------------------------------------------------------------------- - call g_tracer_add_param('zooFeingest', wombat%zooFeingest, 0.20) + call g_tracer_add_param('zooFeingest', wombat%zooFeingest, 0.06) ! Zooplankton iron assimilation efficiency [0-1] !----------------------------------------------------------------------- - call g_tracer_add_param('zooFeassim', wombat%zooFeassim, 0.90) + call g_tracer_add_param('zooFeassim', wombat%zooFeassim, 0.60) ! Zooplankton fraction of excretion to DOM [0-1] !----------------------------------------------------------------------- - call g_tracer_add_param('zooexcrdom', wombat%zooexcrdom, 0.20) + call g_tracer_add_param('zooexcrdom', wombat%zooexcrdom, 0.70) ! Zooplankton half saturation coefficient for linear mortality !----------------------------------------------------------------------- @@ -2731,7 +2680,7 @@ subroutine user_add_params ! Zooplankton maximum grazing rate constant [1/s] !----------------------------------------------------------------------- - call g_tracer_add_param('zoogmax', wombat%zoogmax, 3.0/86400.0) + call g_tracer_add_param('zoogmax', wombat%zoogmax, 3.3/86400.0) ! Zooplankton prey capture rate constant for bacteria 1 [m6/mmol2/s] ! - e.g., protozoans feeding on bacteria @@ -2755,51 +2704,51 @@ subroutine user_add_params ! - e.g., ciliates feeding on small (nano/pico)phytoplankton ! - aim for half-saturation coefficent B1/2 = 2.5 mmolC/m3, where B1/2 = (gmax/eps)^(0.5) !----------------------------------------------------------------------- - call g_tracer_add_param('zooepsphy', wombat%zooepsphy, 0.50/86400.0) + call g_tracer_add_param('zooepsphy', wombat%zooepsphy, 0.40/86400.0) ! Zooplankton prey capture rate constant for microphytoplankton [m6/mmol2/s] ! - e.g., larger ciliates feeding on smaller diatoms and other microphytoplankton ! - aim for half-saturation coefficent B1/2 = 3.5 mmolC/m3, where B1/2 = (gmax/eps)^(0.5) !----------------------------------------------------------------------- - call g_tracer_add_param('zooepsdia', wombat%zooepsdia, 0.20/86400.0) + call g_tracer_add_param('zooepsdia', wombat%zooepsdia, 0.40/86400.0) ! Zooplankton prey capture rate constant for small detritus [m6/mmol2/s] ! - e.g., protozoa grazing on slowly sinking detrital particles ! - aim for half-saturation coefficent B1/2 = 5.0 mmolC/m3, where B1/2 = (gmax/eps)^(0.5) !----------------------------------------------------------------------- - call g_tracer_add_param('zooepsdet', wombat%zooepsdet, 0.10/86400.0) + call g_tracer_add_param('zooepsdet', wombat%zooepsdet, 0.25/86400.0) ! Zooplankton preference for bacteria 1 [0-1] ! Landry (2025) J. Plankton Res. --> find that ~100 mg C m-2 day-1 of ~500 mg C m-2 d-1 ! of microzooplankton grazing/biomass gain comes from bacterivory !----------------------------------------------------------------------- - call g_tracer_add_param('zprefbac1', wombat%zprefbac1, 0.1) + call g_tracer_add_param('zprefbac1', wombat%zprefbac1, 0.25) ! Zooplankton preference for bacteria 2 [0-1] ! Landry (2025) J. Plankton Res. --> find that ~100 mg C m-2 day-1 of ~500 mg C m-2 d-1 ! of microzooplankton grazing/biomass gain comes from bacterivory !----------------------------------------------------------------------- - call g_tracer_add_param('zprefbac2', wombat%zprefbac2, 0.1) + call g_tracer_add_param('zprefbac2', wombat%zprefbac2, 0.25) ! Zooplankton preference for ammonia oxidizing archaea [0-1] !----------------------------------------------------------------------- - call g_tracer_add_param('zprefaoa', wombat%zprefaoa, 0.25) + call g_tracer_add_param('zprefaoa', wombat%zprefaoa, 0.40) ! Zooplankton preference for phytoplankton [0-1] !----------------------------------------------------------------------- - call g_tracer_add_param('zprefphy', wombat%zprefphy, 0.5) + call g_tracer_add_param('zprefphy', wombat%zprefphy, 1.0) ! Zooplankton preference for microphytoplankton [0-1] !----------------------------------------------------------------------- - call g_tracer_add_param('zprefdia', wombat%zprefdia, 0.025) + call g_tracer_add_param('zprefdia', wombat%zprefdia, 0.25) ! Zooplankton preference for detritus [0-1] !----------------------------------------------------------------------- - call g_tracer_add_param('zprefdet', wombat%zprefdet, 0.025) + call g_tracer_add_param('zprefdet', wombat%zprefdet, 0.80) ! Zooplankton respiration rate constant [1/s] !----------------------------------------------------------------------- - call g_tracer_add_param('zoolmor', wombat%zoolmor, 0.001/86400.0) + call g_tracer_add_param('zoolmor', wombat%zoolmor, 0.002/86400.0) ! Zooplankton quadratic mortality rate constant [m3/mmolN/s] !----------------------------------------------------------------------- @@ -2807,7 +2756,7 @@ subroutine user_add_params ! Mesozooplankton carbon bulk ingestion efficiency [0-1] !----------------------------------------------------------------------- - call g_tracer_add_param('mesCingest', wombat%mesCingest, 0.90) + call g_tracer_add_param('mesCingest', wombat%mesCingest, 0.75) ! Mesozooplankton carbon assimilation efficiency [0-1] !----------------------------------------------------------------------- @@ -2815,23 +2764,27 @@ subroutine user_add_params ! Mesozooplankton iron bulk ingestion efficiency [0-1] !----------------------------------------------------------------------- - call g_tracer_add_param('mesFeingest', wombat%mesFeingest, 0.20) + call g_tracer_add_param('mesFeingest', wombat%mesFeingest, 0.43) ! Mesozooplankton iron assimilation efficiency [0-1] !----------------------------------------------------------------------- - call g_tracer_add_param('mesFeassim', wombat%mesFeassim, 0.90) + call g_tracer_add_param('mesFeassim', wombat%mesFeassim, 0.75) ! Mesozooplankton fraction of excretion to DOM [0-1] !----------------------------------------------------------------------- - call g_tracer_add_param('mesexcrdom', wombat%mesexcrdom, 0.20) + call g_tracer_add_param('mesexcrdom', wombat%mesexcrdom, 0.35) + + ! Zooplankton dissolution efficiency of CaCO3 within guts [1] + !----------------------------------------------------------------------- + call g_tracer_add_param('fgutdiss', wombat%fgutdiss, 0.80) ! Mesozooplankton half saturation coefficient for linear mortality !----------------------------------------------------------------------- - call g_tracer_add_param('meskz', wombat%meskz, 0.25) + call g_tracer_add_param('meskz', wombat%meskz, 0.30) ! Mesozooplankton maximum grazing rate constant [1/s] !----------------------------------------------------------------------- - call g_tracer_add_param('mesgmax', wombat%mesgmax, 1.0/86400.0) + call g_tracer_add_param('mesgmax', wombat%mesgmax, 0.30/86400.0) ! Mesozooplankton prey capture rate constant for bacteria 1 [m6/mmol2/s] ! - e.g., appendicularians filter feeding on bacteria @@ -2867,68 +2820,68 @@ subroutine user_add_params ! - e.g., appendicularians filter feeding on fine detritus ! - aim for half-saturation coefficent B1/2 = 3.5 mmolC/m3, where B1/2 = (gmax/eps)^(0.5) !----------------------------------------------------------------------- - call g_tracer_add_param('mesepsdet', wombat%mesepsdet, 0.08/86400.0) + call g_tracer_add_param('mesepsdet', wombat%mesepsdet, 0.05/86400.0) ! Mesozooplankton prey capture rate constant for large detritus [m6/mmol2/s] ! - e.g., copepods consuming sinking aggregates of marine snow ! - aim for half-saturation coefficent B1/2 = 10.0 mmolC/m3, where B1/2 = (gmax/eps)^(0.5) !----------------------------------------------------------------------- - call g_tracer_add_param('mesepsbdet', wombat%mesepsbdet, 0.01/86400.0) + call g_tracer_add_param('mesepsbdet', wombat%mesepsbdet, 0.10/86400.0) ! Mesozooplankton prey capture rate constant for microzooplankton [m6/mmol2/s] ! - e.g., chaetognaths preying on copepods; copepods consuming ciliates ! - aim for half-saturation coefficent B1/2 = 5.0 mmolC/m3, where B1/2 = (gmax/eps)^(0.5) !----------------------------------------------------------------------- - call g_tracer_add_param('mesepszoo', wombat%mesepszoo, 0.04/86400.0) + call g_tracer_add_param('mesepszoo', wombat%mesepszoo, 0.10/86400.0) ! Mesozooplankton preference for bacteria 1 [0-1] !----------------------------------------------------------------------- - call g_tracer_add_param('mprefbac1', wombat%mprefbac1, 0.05) + call g_tracer_add_param('mprefbac1', wombat%mprefbac1, 0.25) ! Mesozooplankton preference for bacteria 2 [0-1] !----------------------------------------------------------------------- - call g_tracer_add_param('mprefbac2', wombat%mprefbac2, 0.05) + call g_tracer_add_param('mprefbac2', wombat%mprefbac2, 0.25) ! Mesozooplankton preference for ammonia oxidizing archaea [0-1] !----------------------------------------------------------------------- - call g_tracer_add_param('mprefaoa', wombat%mprefaoa, 0.1) + call g_tracer_add_param('mprefaoa', wombat%mprefaoa, 0.4) ! Mesozooplankton preference for phytoplankton [0-1] !----------------------------------------------------------------------- - call g_tracer_add_param('mprefphy', wombat%mprefphy, 0.05) + call g_tracer_add_param('mprefphy', wombat%mprefphy, 0.1) ! Mesozooplankton preference for microphytoplankton [0-1] !----------------------------------------------------------------------- - call g_tracer_add_param('mprefdia', wombat%mprefdia, 0.3) + call g_tracer_add_param('mprefdia', wombat%mprefdia, 0.85) ! Mesozooplankton preference for detritus [0-1] !----------------------------------------------------------------------- - call g_tracer_add_param('mprefdet', wombat%mprefdet, 0.05) + call g_tracer_add_param('mprefdet', wombat%mprefdet, 0.80) ! Mesozooplankton preference for large detritus (aggregates) [0-1] !----------------------------------------------------------------------- - call g_tracer_add_param('mprefbdet', wombat%mprefbdet, 0.1) + call g_tracer_add_param('mprefbdet', wombat%mprefbdet, 0.80) ! Mesozooplankton preference for zooplankton [0-1] !----------------------------------------------------------------------- - call g_tracer_add_param('mprefzoo', wombat%mprefzoo, 0.3) + call g_tracer_add_param('mprefzoo', wombat%mprefzoo, 0.85) ! Mesozooplankton respiration rate constant [1/s] !----------------------------------------------------------------------- - call g_tracer_add_param('meslmor', wombat%meslmor, 0.001/86400.0) + call g_tracer_add_param('meslmor', wombat%meslmor, 0.002/86400.0) ! Mesozooplankton quadratic mortality rate constant [m3/mmolN/s] !----------------------------------------------------------------------- - call g_tracer_add_param('mesqmor', wombat%mesqmor, 0.5/86400.0) + call g_tracer_add_param('mesqmor', wombat%mesqmor, 0.75/86400.0) - ! Prey switching exponent for microzooplantkon + ! Prey switching exponent for microzooplantkon [van Leeuwen et al. (2013), J. Theor. Biol.] ! when <1, more even feeding across prey items ! when =1, grazing proportional to prey biomasses ! when >1, overweighting abundant prey and downweighting scarce prey !----------------------------------------------------------------------- - call g_tracer_add_param('zoopreyswitch', wombat%zoopreyswitch, 1.4) + call g_tracer_add_param('zoopreyswitch', wombat%zoopreyswitch, 1.8) - ! Prey switching exponent for mesozooplantkon + ! Prey switching exponent for mesozooplantkon [van Leeuwen et al. (2013), J. Theor. Biol.] ! when <1, more even feeding across prey items ! when =1, grazing proportional to prey biomasses ! when >1, overweighting abundant prey and downweighting scarce prey @@ -2937,11 +2890,15 @@ subroutine user_add_params ! Detritus remineralisation rate constant [m3/mmolC/s] !----------------------------------------------------------------------- - call g_tracer_add_param('detlrem', wombat%detlrem, 0.5/86400.0) + call g_tracer_add_param('detlrem', wombat%detlrem, 0.7/86400.0) + + ! Detritus remineralisation rate constant in sediments [1/s] + !----------------------------------------------------------------------- + call g_tracer_add_param('detlrem_sed', wombat%detlrem_sed, 0.005/86400.0) ! Porosity of sinking small detritus [0-1] !----------------------------------------------------------------------- - call g_tracer_add_param('detphi', wombat%detphi, 0.0) + call g_tracer_add_param('detphi', wombat%detphi, 0.03) ! Porosity of sinking large aggregated detritus [0-1] !----------------------------------------------------------------------- @@ -2958,17 +2915,19 @@ subroutine user_add_params call g_tracer_add_param('diarad0', wombat%diarad0, 50.0) ! Base radius of microzooplankton [µm] + ! takes into account fecal pellets / waste produced !----------------------------------------------------------------------- - call g_tracer_add_param('zoorad0', wombat%zoorad0, 40.0) + call g_tracer_add_param('zoorad0', wombat%zoorad0, 30.0) ! Base radius of mesoozooplankton [µm] - ! Hatton et al. 2021 Sci Adv - near 1mm + ! takes into account fecal pellets / waste produced + ! [Hatton et al. 2021 Sci Adv - near 1mm] !----------------------------------------------------------------------- - call g_tracer_add_param('mesrad0', wombat%mesrad0, 500.0) + call g_tracer_add_param('mesrad0', wombat%mesrad0, 1000.0) ! Density of organic detritus [kg/m3] !----------------------------------------------------------------------- - call g_tracer_add_param('detrho', wombat%detrho, 1060.0) + call g_tracer_add_param('detrho', wombat%detrho, 1375.0) ! Density of calcium carbonate [kg/m3] !----------------------------------------------------------------------- @@ -2978,18 +2937,9 @@ subroutine user_add_params !----------------------------------------------------------------------- call g_tracer_add_param('bsirho', wombat%bsirho, 2000.0) - ! Bottom thickness [m] - !----------------------------------------------------------------------- - ! Thickness over which tracer values are integrated to define the bottom layer - call g_tracer_add_param('bottom_thickness', wombat%bottom_thickness, 1.0) - - ! Detritus remineralisation rate constant in sediments [1/s] - !----------------------------------------------------------------------- - call g_tracer_add_param('detlrem_sed', wombat%detlrem_sed, 0.005/86400.0) - ! Phytoplankton biomass threshold to scale recycling [mmolC/m3] !----------------------------------------------------------------------- - call g_tracer_add_param('phybiot', wombat%phybiot, 0.5) + call g_tracer_add_param('phybiot', wombat%phybiot, 1.0) ! Microphytoplankton biomass threshold to scale recycling [mmolC/m3] !----------------------------------------------------------------------- @@ -3003,35 +2953,29 @@ subroutine user_add_params !----------------------------------------------------------------------- call g_tracer_add_param('caco3lrem_sed', wombat%caco3lrem_sed, 0.01/86400.0) - ! Ceiling of omega in the sediments (controls rate of CaCO3 dissolution) [0-1] - ! - if == 1.0, then there may be at minimum no dissolution of CaCO3 - ! - if < 1.0, then there is always some dissolution of CaCO3 when when supersaturated - !----------------------------------------------------------------------- - call g_tracer_add_param('omegamax_sed', wombat%omegamax_sed, 0.7) - ! CaCO3 inorganic fraction [1] !----------------------------------------------------------------------- call g_tracer_add_param('f_inorg', wombat%f_inorg, 0.04) ! CaCO3 dissolution factor due to calcite undersaturation !----------------------------------------------------------------------- - call g_tracer_add_param('disscal', wombat%disscal, 0.250) + call g_tracer_add_param('disscal', wombat%disscal, 0.10) ! CaCO3 dissolution factor due to aragonite undersaturation !----------------------------------------------------------------------- - call g_tracer_add_param('dissara', wombat%dissara, 0.100) + call g_tracer_add_param('dissara', wombat%dissara, 0.45) ! CaCO3 dissolution factor due to detritus remineralisation creating anoxic microenvironment !----------------------------------------------------------------------- - call g_tracer_add_param('dissdet', wombat%dissdet, 0.200) + call g_tracer_add_param('dissdet', wombat%dissdet, 0.20) ! Background concentration of iron-binding ligand [umol/m3] !----------------------------------------------------------------------- - call g_tracer_add_param('ligand', wombat%ligand, 0.7) + call g_tracer_add_param('ligand', wombat%ligand, 1.2) ! Scavenging of Fe` onto biogenic particles [(mmolC/m3)-1 d-1] !----------------------------------------------------------------------- - call g_tracer_add_param('kscav_dfe', wombat%kscav_dfe, 5e-2) + call g_tracer_add_param('kscav_dfe', wombat%kscav_dfe, 0.4) ! Coagulation of dFe onto organic particles [(mmolC/m3)-1 d-1] ! 1e-5 ---> coagulation at roughly 0.1 per day in productive surface waters @@ -3039,7 +2983,7 @@ subroutine user_add_params ! 1e-6 ---> coagulation at roughly 0.01 per day in productive surface waters ! and 1/10000 per day in deep ocean !----------------------------------------------------------------------- - call g_tracer_add_param('kcoag_dfe', wombat%kcoag_dfe, 1e-7) + call g_tracer_add_param('kcoag_dfe', wombat%kcoag_dfe, 5e-8) ! Rate of aggregation of colloidal iron into authigenic Fe particles [d-1] !----------------------------------------------------------------------- @@ -3059,7 +3003,7 @@ subroutine user_add_params ! Sinking speed of authigenic iron (oxyhydroxide) [m/s] !----------------------------------------------------------------------- - call g_tracer_add_param('wafe', wombat%wafe, 0.5/86400.0) + call g_tracer_add_param('wafe', wombat%wafe, 2.5/86400.0) ! Sinking speed of bigger authigenic iron (oxyhydroxide) [m/s] !----------------------------------------------------------------------- @@ -3067,7 +3011,7 @@ subroutine user_add_params ! Factor increase in biogenic silica dissolution caused by bacterial activity [ ] !----------------------------------------------------------------------- - call g_tracer_add_param('bsi_fbac', wombat%bsi_fbac, 10.0) + call g_tracer_add_param('bsi_fbac', wombat%bsi_fbac, 20.0) ! Half-saturation coefficient modulating increase in biogenic silica dissolution due to bacterial activity [mmolC/m3] !----------------------------------------------------------------------- @@ -3088,6 +3032,10 @@ subroutine user_add_params !----------------------------------------------------------------------- call g_tracer_add_param('aoa_poxy', wombat%aoa_poxy, 275.0/86400.0) + ! Ammonia Oxidizing Archaea biomass yield per NH4 [mol NH4 / mol Biomass] + !----------------------------------------------------------------------- + call g_tracer_add_param('aoa_ynh4', wombat%aoa_ynh4, 11.0) + ! Ammonia Oxidizing Archaea biomass yield per O2 [mol O2 / mol Biomass] !----------------------------------------------------------------------- call g_tracer_add_param('aoa_yoxy', wombat%aoa_yoxy, 15.5) @@ -3095,14 +3043,11 @@ subroutine user_add_params ! Ammonia Oxidizing Archaea minimum biomass yield of N2O [mol N2O / mol Biomass] ! Frey et al. (2023) find a baseline yield of ~0.5% in oxic conditions ! (i.e., when O2 is not limiting), which we note here is in excess of the baseline - ! yields of other studies (Ji et al., 2018; Santoro et al., 2011; Qin et al., 2017) - ! that place the baseline near 0.05 - 0.1% - !----------------------------------------------------------------------- - call g_tracer_add_param('aoa_yn2omin', wombat%aoa_yn2omin, 0.05) - - ! Ammonia Oxidizing Archaea biomass yield per NH4 [mol NH4 / mol Biomass] + ! yields of other studies (Ji et al., 2018; Santoro et al., 2011; Qin et al., 2017; + ! Kelly et al., 2024) that place the baseline near 0.05% - 0.1%. We set it at + ! 0.08% to align with Kelly et al., 2024. !----------------------------------------------------------------------- - call g_tracer_add_param('aoa_ynh4', wombat%aoa_ynh4, 11.0) + call g_tracer_add_param('aoa_en2omin', wombat%aoa_en2omin, 0.0008) ! Ammonia Oxidizing Archaea biomass carbon to nitrogen ratio [mol C / mol N] !----------------------------------------------------------------------- @@ -3118,16 +3063,44 @@ subroutine user_add_params ! Ammonia Oxidizing Archaea quadratic mortality rate constant [m3/mmolN/s] !----------------------------------------------------------------------- - call g_tracer_add_param('aoaqmor', wombat%aoaqmor, 0.05/86400.0) + call g_tracer_add_param('aoaqmor', wombat%aoaqmor, 0.001/86400.0) + + ! Penalty to heterotrophic bacterial growth yield due to anaerobic growth + !----------------------------------------------------------------------- + ! Zakem et al., 2020 ISME make this assumption, following LaRowe & Van Cappellen 2011 + call g_tracer_add_param('bacanapen', wombat%bacanapen, 0.9) + + ! Minimum possible biomass yield per mol of DON+NH4 [mol biomas per mol DON] + !----------------------------------------------------------------------- + call g_tracer_add_param('bac_ydonmin', wombat%bac_ydonmin, 0.15) + + ! Maximum possible biomass yield per mol of DON+NH4 [mol biomas per mol DON] + !----------------------------------------------------------------------- + call g_tracer_add_param('bac_ydonmax', wombat%bac_ydonmax, 0.65) ! Facultative heterotrophic bacteria #1 maximum rate of uptake of DOC [mmol/m3/s] !----------------------------------------------------------------------- call g_tracer_add_param('bac1_Vmax_doc', wombat%bac1_Vmax_doc, 6.7/86400.0) + ! Facultative heterotrophic bacteria #1 maximum rate of uptake of DON [mmol/m3/s] + !----------------------------------------------------------------------- + call g_tracer_add_param('bac1_Vmax_don', wombat%bac1_Vmax_don, 1.0/86400.0) + + ! Facultative heterotrophic bacteria #1 maximum rate of uptake of NH4 [mmol/m3/s] + !----------------------------------------------------------------------- + call g_tracer_add_param('bac1_Vmax_nh4', wombat%bac1_Vmax_nh4, 1.0/86400.0) + ! Facultative heterotrophic bacteria #1 maximum rate of uptake of NO3 [mmol/m3/s] !----------------------------------------------------------------------- call g_tracer_add_param('bac1_Vmax_no3', wombat%bac1_Vmax_no3, 7.2/86400.0) + ! Facultative heterotrophic bacteria #1 maximum rate of uptake of dFe [mmol/m3/s] + !----------------------------------------------------------------------- + ! From Fourquez et al., 2020 Frontiers in Marine Science: Heterotrophic bacteria + ! took up dFe at a rate of 100 pmol L-1 day-1 --> 0.00010 mmol m-3 day-1 + ! in unfiltered seawater when they added Fe+C + call g_tracer_add_param('bac1_Vmax_dFe', wombat%bac1_Vmax_dFe, 0.0001/86400.0) + ! Facultative heterotrophic bacteria #1 diffusive uptake limit of O2 [m3/mmolC/s] !----------------------------------------------------------------------- call g_tracer_add_param('bac1_poxy', wombat%bac1_poxy, 450.0/86400.0) @@ -3136,13 +3109,17 @@ subroutine user_add_params !----------------------------------------------------------------------- call g_tracer_add_param('bac1_kno3', wombat%bac1_kno3, 15.0) - ! Facultative heterotrophic bacteria #1 minimum half saturation constant for DOC uptake [mmolC/m3] + ! Facultative heterotrophic bacteria #1 half saturation constant for DOC uptake [mmol/m3] !----------------------------------------------------------------------- - call g_tracer_add_param('bac1_kdoc_min', wombat%bac1_kdoc_min, 10.0) + ! DON is preferentially targeted by heterotrophs for remineralisation over DOC + ! (Letscher & Moore, 2015 GBC; Hach et al., 2020 Sci. Rep; Zakem et al., 2019 GBC) + call g_tracer_add_param('bac1_kdoc', wombat%bac1_kdoc, 60.0) - ! Facultative heterotrophic bacteria #1 maximum half saturation constant for DOC uptake [mmolC/m3] + ! Facultative heterotrophic bacteria #1 half saturation constant for DON uptake [mmol/m3] !----------------------------------------------------------------------- - call g_tracer_add_param('bac1_kdoc_max', wombat%bac1_kdoc_max, 100.0) + ! DON is preferentially targeted by heterotrophs for remineralisation over DOC + ! (Letscher & Moore, 2015 GBC; Hach et al., 2020 Sci. Rep; Zakem et al., 2019 GBC) + call g_tracer_add_param('bac1_kdon', wombat%bac1_kdon, 5.0) ! Facultative heterotrophic bacteria #1 half saturation constant for ammonium uptake [mmolN/m3] !----------------------------------------------------------------------- @@ -3150,25 +3127,7 @@ subroutine user_add_params ! Facultative heterotrophic bacteria #1 half saturation constant for dissolved iron uptake [umolFe/m3] !----------------------------------------------------------------------- - call g_tracer_add_param('bac1_kfer', wombat%bac1_kfer, 0.5) - - ! Facultative heterotrophic bacteria #1 aerobic biomass yield per DOC [mol DOC / mol Biomass] - !----------------------------------------------------------------------- - call g_tracer_add_param('bac1_yaerC', wombat%bac1_yaerC, 6.7) - - ! Facultative heterotrophic bacteria #1 aerobic biomass yield per O2 [mol O2/ mol Biomass] - !----------------------------------------------------------------------- - call g_tracer_add_param('bac1_yoxy', wombat%bac1_yoxy, 6.3) - - ! Facultative heterotrophic bacteria #1 anaerobic biomass yield per DOC [mol DOC / mol Biomass] - ! NO3 --> N2O - !----------------------------------------------------------------------- - call g_tracer_add_param('bac1_yanaC', wombat%bac1_yanaC, 9.9) - - ! Facultative heterotrophic bacteria #1 aerobic biomass yield per NO3 [mol NO3/ mol Biomass] - ! NO3 --> N2O - !----------------------------------------------------------------------- - call g_tracer_add_param('bac1_yno3', wombat%bac1_yno3, 9.8) + call g_tracer_add_param('bac1_kfer', wombat%bac1_kfer, 0.35) ! Facultative heterotrophic bacteria #1 biomass carbon to nitrogen ratio [mol C / mol N] !----------------------------------------------------------------------- @@ -3176,7 +3135,9 @@ subroutine user_add_params ! Facultative heterotrophic bacteria #1 biomass carbon to iron ratio [mol C / mol Fe] !----------------------------------------------------------------------- - call g_tracer_add_param('bac1_C2Fe', wombat%bac1_C2Fe, 1.0/20e-6) + ! From Fourquez et al., 2020 Frontiers in Marine Science: Heterotrophic bacteria + ! measured 20 - 50 µmol Fe per mol C in unfiltered seawater samples + call g_tracer_add_param('bac1_C2Fe', wombat%bac1_C2Fe, 1.0/40e-6) ! Facultative heterotrophic bacteria #1 linear mortality rate constant [1/s] !----------------------------------------------------------------------- @@ -3190,6 +3151,21 @@ subroutine user_add_params !----------------------------------------------------------------------- call g_tracer_add_param('bac2_Vmax_doc', wombat%bac2_Vmax_doc, 6.7/86400.0) + ! Facultative heterotrophic bacteria #2 maximum rate of uptake of DON [mmol/m3/s] + !----------------------------------------------------------------------- + call g_tracer_add_param('bac2_Vmax_don', wombat%bac2_Vmax_don, 1.0/86400.0) + + ! Facultative heterotrophic bacteria #2 maximum rate of uptake of NH4 [mmol/m3/s] + !----------------------------------------------------------------------- + call g_tracer_add_param('bac2_Vmax_nh4', wombat%bac2_Vmax_nh4, 1.0/86400.0) + + ! Facultative heterotrophic bacteria #2 maximum rate of uptake of dFe [mmol/m3/s] + !----------------------------------------------------------------------- + ! From Fourquez et al., 2020 Frontiers in Marine Science: Heterotrophic bacteria + ! took up dFe at a rate of 100 pmol L-1 day-1 --> 0.00010 mmol m-3 day-1 + ! in unfiltered seawater when they added Fe+C + call g_tracer_add_param('bac2_Vmax_dFe', wombat%bac2_Vmax_dFe, 0.0001/86400.0) + ! Facultative heterotrophic bacteria #2 diffusive uptake limit of O2 [m3/mmolC/s] !----------------------------------------------------------------------- call g_tracer_add_param('bac2_poxy', wombat%bac2_poxy, 450.0/86400.0) @@ -3198,13 +3174,17 @@ subroutine user_add_params !----------------------------------------------------------------------- call g_tracer_add_param('bac2_pn2o', wombat%bac2_pn2o, 452.0/86400.0) - ! Facultative heterotrophic bacteria #2 minimum half saturation constant for DOC uptake [mmolC/m3] + ! Facultative heterotrophic bacteria #2 half saturation constant for DOC uptake [mmol/m3] !----------------------------------------------------------------------- - call g_tracer_add_param('bac2_kdoc_min', wombat%bac2_kdoc_min, 10.0) + ! DON is preferentially targeted by heterotrophs for remineralisation over DOC + ! (Letscher & Moore, 2015 GBC; Hach et al., 2020 Sci. Rep; Zakem et al., 2019 GBC) + call g_tracer_add_param('bac2_kdoc', wombat%bac2_kdoc, 60.0) - ! Facultative heterotrophic bacteria #2 maximum half saturation constant for DOC uptake [mmolC/m3] + ! Facultative heterotrophic bacteria #2 half saturation constant for DON uptake [mmol/m3] !----------------------------------------------------------------------- - call g_tracer_add_param('bac2_kdoc_max', wombat%bac2_kdoc_max, 100.0) + ! DON is preferentially targeted by heterotrophs for remineralisation over DOC + ! (Letscher & Moore, 2015 GBC; Hach et al., 2020 Sci. Rep; Zakem et al., 2019 GBC) + call g_tracer_add_param('bac2_kdon', wombat%bac2_kdon, 5.0) ! Facultative heterotrophic bacteria #2 half saturation constant for ammonium uptake [mmolN/m3] !----------------------------------------------------------------------- @@ -3212,25 +3192,7 @@ subroutine user_add_params ! Facultative heterotrophic bacteria #2 half saturation constant for dissolved iron uptake [umolFe/m3] !----------------------------------------------------------------------- - call g_tracer_add_param('bac2_kfer', wombat%bac2_kfer, 0.5) - - ! Facultative heterotrophic bacteria #2 aerobic biomass yield per DOC [mol DOC / mol Biomass] - !----------------------------------------------------------------------- - call g_tracer_add_param('bac2_yaerC', wombat%bac2_yaerC, 6.7) - - ! Facultative heterotrophic bacteria #2 aerobic biomass yield per O2 [mol O2/ mol Biomass] - !----------------------------------------------------------------------- - call g_tracer_add_param('bac2_yoxy', wombat%bac2_yoxy, 6.3) - - ! Facultative heterotrophic bacteria #2 aerobic biomass yield per N2O [mol N2/ mol Biomass] - ! N2O --> N2 - !----------------------------------------------------------------------- - call g_tracer_add_param('bac2_yn2o', wombat%bac2_yn2o, 25.3/2.0) - - ! Facultative heterotrophic bacteria #2 anaerobic biomass yield per DOC [mol DOC / mol Biomass] - ! N2O --> N2 | must be >= `bac_yaerC` to ensure that N2O actually accumulates in the ocean - !----------------------------------------------------------------------- - call g_tracer_add_param('bac2_yanaC', wombat%bac2_yanaC, 6.701) + call g_tracer_add_param('bac2_kfer', wombat%bac2_kfer, 0.35) ! Facultative heterotrophic bacteria #2 biomass carbon to nitrogen ratio [mol C / mol N] !----------------------------------------------------------------------- @@ -3238,7 +3200,9 @@ subroutine user_add_params ! Facultative heterotrophic bacteria #2 biomass carbon to iron ratio [mol C / mol Fe] !----------------------------------------------------------------------- - call g_tracer_add_param('bac2_C2Fe', wombat%bac2_C2Fe, 1.0/20e-6) + ! From Fourquez et al., 2020 Frontiers in Marine Science: Heterotrophic bacteria + ! measured 20 - 50 µmol Fe per mol C in unfiltered seawater samples + call g_tracer_add_param('bac2_C2Fe', wombat%bac2_C2Fe, 1.0/40e-6) ! Facultative heterotrophic bacteria #2 linear mortality rate constant [1/s] !----------------------------------------------------------------------- @@ -3256,6 +3220,65 @@ subroutine user_add_params !----------------------------------------------------------------------- call g_tracer_add_param('aoxmumax', wombat%aoxmumax, 0.0025/86400.0) + ! Nominal oxidation state of carbon of phytoplankton overflow exudation of DOC + !----------------------------------------------------------------------- + ! We assume very simple sugars and amino acids + call g_tracer_add_param('noscphyover', wombat%noscphyover, 1.0 -0.0) + + ! Nominal oxidation state of carbon of zooplankton excretion of DOC + !----------------------------------------------------------------------- + ! Composition of copepod excreta [Maas et al., 2020 Frontiers in Marine Science] + ! - ~40% proteins, with a NOSC of -0.15 [Fig. 5 of Dick 2024 J. Royal Society] + ! - ~9% lipids (C16H32O2), with a NOSC of -1.6 + ! - ~50% carbohydrate (C6H12O6), with a NOSC of ~0.0 [lots of TEP: Passow et al 2001 Continental Shelf Research] + ! - ~1% nucleic acids (C10H14O6N5P), with a NOSC of +0.85 + ! This gives an overal NOSC of of roughly -0.20 + call g_tracer_add_param('nosczooexcr', wombat%nosczooexcr, 1.0 -0.20) + + ! Nominal oxidation state of carbon of phytoplankton lysis producing DOC + !----------------------------------------------------------------------- + ! Composition of phytoplankton cells by dry weight [Hedges et al., 2002; Inomura et al., 2020] + ! - ~61% protein, with a NOSC of -0.15 [Fig. 5 of Dick 2024 J. Royal Society] + ! - ~18% lipids (C16H32O2), with a NOSC of -1.6 + ! - ~16% carbohydrate (C6H12O6), with a NOSC of ~0.0 + ! - ~4% nucleic acids (C10H14O6N5P), with a NOSC of +0.85 + ! - ~1% chlorophyll (C55H72N4O5), with a NOSC of -0.91 + ! This gives an overal NOSC of lysed phytoplankton cells of roughly -0.35 + call g_tracer_add_param('noscphylyse', wombat%noscphylyse, 1.0 -0.35) + + ! Nominal oxidation state of carbon of bacterial lysis producing DOC + !----------------------------------------------------------------------- + ! Composition of E. coli cells by dry weight [Schonheit et al., 2016 Trends in Microbiology; their Table 1] + ! - ~55% protein, with a NOSC of -0.15 [Fig. 5 of Dick 2024 J. Royal Society] + ! - ~10% lipid (C16H32O2), with a NOSC of -1.6 + ! - ~10% carbohydrate (C6H12O6), with a NOSC of ~0.0 + ! - ~25% nucleic acids (C10H14O6N5P), with a NOSC of +0.85 + ! This gives an overal NOSC of lysed bacterial cells of roughly -0.03 + call g_tracer_add_param('noscbaclyse', wombat%noscbaclyse, 1.0 -0.03) + + ! Nominal oxidation state of carbon of sinking marine detritus producing DOC + !----------------------------------------------------------------------- + ! Composition of marine organic detritus by dry weight + ! [Minor et al. 2003 Geochim. et Cosmochim. Acta; Lopez-Fernandez et al., 2013 Progress in Oceanography] + ! - ~30% protein, with a NOSC of -0.15 [Fig. 5 of Dick 2024 J. Royal Society] + ! - ~23% lipids (C16H32O2), with a NOSC of -1.6 + ! - ~45% carbohydrate (C6H12O6), with a NOSC of ~0.0 [lots of TEP: Passow et al 2001 Continental Shelf Research] + ! - ~1% nucleic acids (C10H14O6N5P), with a NOSC of +0.85 + ! - ~1% chlorophyll (C55H72N4O5), with a NOSC of -0.91 + ! This gives an overal NOSC of sinking organic detritus of roughly -0.40 + call g_tracer_add_param('noscdethydr', wombat%noscdethydr, 1.0 -0.40) + + ! Offset to the in-situ nominal oxidation state of carbon targetted by bacteria + !----------------------------------------------------------------------- + ! i.e., bacteria consume DOM at a NOSC x units ABOVE the in situ NOSC + ! and therefore shift the NOSC down if this number is positive + call g_tracer_add_param('noscdocproc', wombat%noscdocproc, 0.9) + + ! Bottom thickness [m] + !----------------------------------------------------------------------- + ! Thickness over which tracer values are integrated to define the bottom layer + call g_tracer_add_param('bottom_thickness', wombat%bottom_thickness, 1.0) + ! Nested timestep for the ecosystem model [s] !----------------------------------------------------------------------- call g_tracer_add_param('dt_npzd', wombat%dt_npzd, 900.) @@ -3356,7 +3379,6 @@ subroutine user_add_tracers(tracer_list) longname = 'Ammonium', & units = 'mol/kg', & prog = .true., & - flux_bottom = .true., & flux_virtual = .true.) ! Silicic acid (H4SiO4) @@ -3535,6 +3557,7 @@ subroutine user_add_tracers(tracer_list) name = 'doc', & longname = 'Dissolved organic carbon', & units = 'mol/kg', & + flux_bottom = .true., & prog = .true.) ! Dissolved organic nitrogen @@ -3543,6 +3566,15 @@ subroutine user_add_tracers(tracer_list) name = 'don', & longname = 'Dissolved organic nitrogen', & units = 'mol/kg', & + flux_bottom = .true., & + prog = .true.) + + ! Nominal oxidation state of dissolved organic carbon + !----------------------------------------------------------------------- + call g_tracer_add(tracer_list, package_name, & + name = 'nosdoc', & + longname = 'Nominal oxidation state of dissolved organic carbon', & + units = 'none', & prog = .true.) ! Facultative heterotrophic bacteria #1 @@ -3711,20 +3743,6 @@ subroutine user_add_tracers(tracer_list) units = 'mol m-2', & prog = .false.) - ! pjb: included here so included in restart - call g_tracer_add(tracer_list, package_name, & - name = 'detbury', & - longname = 'Amount of detritus lost to burial', & - units = 'mol m-2 s-1', & - prog = .false.) - - ! pjb: included here so included in restart - call g_tracer_add(tracer_list, package_name, & - name = 'caco3bury', & - longname = 'Amount of CaCO3 lost to burial', & - units = 'mol m-2 s-1', & - prog = .false.) - end subroutine user_add_tracers !####################################################################### @@ -3858,16 +3876,6 @@ subroutine generic_WOMBATmid_update_from_bottom(tracer_list, dt, tau, model_time enddo endif - call g_tracer_get_pointer(tracer_list, 'detbury', 'field', wombat%p_detbury) - call g_tracer_get_pointer(tracer_list, 'caco3bury', 'field', wombat%p_caco3bury) - if (do_conserve_tracers) then - wombat%p_detbury(:,:,1) = (wombat%det_btm(:,:) + wombat%bdet_btm(:,:)) / dt * wombat%fbury(:,:) - wombat%p_caco3bury(:,:,1) = wombat%caco3_btm(:,:) / dt * wombat%fbury(:,:) - else - wombat%p_detbury(:,:,1) = 0.0 - wombat%p_caco3bury(:,:,1) = 0.0 - endif - call g_tracer_get_pointer(tracer_list, 'det_sediment', 'field', wombat%p_det_sediment) wombat%p_det_sediment(:,:,1) = wombat%p_det_sediment(:,:,1) + (wombat%det_btm(:,:) + wombat%bdet_btm(:,:)) * (1.0-wombat%fbury(:,:)) ! [mol/m2] call g_tracer_set_values(tracer_list, 'det', 'btm_reservoir', 0.0) @@ -4004,13 +4012,12 @@ subroutine generic_WOMBATmid_update_from_source(tracer_list, Temp, Salt, & real :: rdtts ! 1 / dt real, dimension(nbands) :: sw_pen real :: swpar - real :: g_npz, m_npz, Xzoo, I_Xzoo, Xmes, I_Xmes + real :: g_zoo, g_mes, Xzoo, I_Xzoo, Xmes, I_Xmes real :: biono3, bion2o, bionh4, biooxy, biofer, biosil, biodoc, biodon, biocaco3 real :: biophy, biodia, biozoo, biomes, biodet, biobdet, biobdetsi, biobac1, biobac2, bioaoa - real :: biophyfe, biodiafe, biodiasi, biozoofe, biomesfe, zooprey, mesprey - real :: I_denom, wzbac1, wzbac2, wzaoa, wzphy, wzdia, wzdet, wzbdet, wzzoo, wzmes, I_wzsum + real :: biophyfe, biodiafe + real :: I_denom, wzbac1, wzbac2, wzaoa, wzphy, wzdia, wzdet, wzbdet, wzzoo, I_wzsum real :: fbc - real :: no3_bgc_change, caco3_bgc_change real, parameter :: epsi = 1.0e-30 real, parameter :: pi = 3.14159265358979 real, parameter :: Rgas = 8.314462168 ! J/(K mol) @@ -4028,13 +4035,10 @@ subroutine generic_WOMBATmid_update_from_source(tracer_list, Temp, Salt, & real :: mass_det, mass_bdet, mass_caco3, mass_bsi, mass_small, mass_large real :: w1, w2, rho_small, rho_large real :: par_phy_mldsum, par_z_mldsum - real :: chl, ndet, carb, zchl, zval, sqrt_zval, phy_chlc, dia_chlc, phi + real :: chl, ndet, carb, zchl, zval, sqrt_zval, phy_chlc, dia_chlc real :: phy_limnh4, phy_limno3, phy_limdin real :: dia_limnh4, dia_limno3, dia_limdin - real :: phy_pisl, phy_pisl2 - real :: pchl_pisl, pchl_mumin, pchl_muopt - real :: dia_pisl, dia_pisl2 - real :: dchl_pisl, dchl_mumin, dchl_muopt + real :: phy_pisl, dia_pisl real :: zooegesbac1fe, zooegesbac2fe, zooegesaoafe, zooegesphyfe, zooegesdiafe, zooegesdetfe real :: zooassibac1fe, zooassibac2fe, zooassiaoafe, zooassiphyfe, zooassidiafe, zooassidetfe real :: zooexcrbac1fe, zooexcrbac2fe, zooexcraoafe, zooexcrphyfe, zooexcrdiafe, zooexcrdetfe @@ -4046,28 +4050,34 @@ subroutine generic_WOMBATmid_update_from_source(tracer_list, Temp, Salt, & real :: mesexcrdetfe, mesexcrbdetfe, mesexcrzoofe real :: zooexcrbac1n, zooexcrbac2n, mesexcrbac1n, mesexcrbac2n,zooexcraoan, mesexcraoan real, dimension(:,:), allocatable :: ek_bgr, par_bgr_mid, par_bgr_top - real, dimension(:), allocatable :: wsink1, wsink2, wsinkcal - real :: max_wsink + real, dimension(:), allocatable :: wsink1, wsink2 real, dimension(4,61) :: zbgr real, dimension(3) :: dbgr, cbgr - real :: ztemk, I_ztemk, fe_keq, fe_par, fe_sfe, fe_tfe, partic + real :: ztemk, I_ztemk, fe_keq, fe_sfe, partic real :: fesol1, fesol2, fesol3, fesol4, fesol5, hp, fe3sol real :: feagg1, feagg2, feagg3, feagg4, feagg5 real :: biof, zno3, zfermin, shear real :: phy_Fe2C, dia_Fe2C, zoo_Fe2C, mes_Fe2C, det_Fe2C, bdet_Fe2C - real :: dom_N2C, dia_Si2C, bdet_Si2C + real :: dom_N2C, dia_Si2C + real :: theta_opt real :: phy_minqfe, phy_maxqfe - real :: dia_minqfe, dia_maxqfe, dia_maxqsi + real :: dia_minqfe, dia_maxqfe real :: zoo_slmor, mes_slmor - real :: hco3, diss_cal, diss_ara, diss_det - real :: avedetbury, avecaco3bury + real :: hco3 real :: dzt_bot, dzt_bot_os - real :: bac_Vdoc, bac_Voxy, bac_Vno3, bac_Vn2o, bac_muana, bac_muaer, bac_limnh4 - real :: aoa_Vnh4, aoa_Voxy + real :: e_dom, e_bac, f_bac + real :: bac1_yoxy, bac1_yana, bac1_yno3, bac2_yoxy, bac2_yana, bac2_yn2o + real :: bac1_ydonC, bac1_yoxyC, bac1_yanaC, bac1_yno3C + real :: bac2_ydonC, bac2_yoxyC, bac2_yanaC, bac2_yn2oC + real :: bac_Vdoc, bac1_Vdon, bac1_Vnh4, bac2_Vdon, bac2_Vnh4 + real :: bac_VdFe, bac_Voxy, bac_Vno3, bac_Vn2o + real :: bac_gC, bac_gN, bac_gFe, bac_gEA + real :: bac_muana, bac_muaer + real :: aoa_Vnh4, aoa_Voxy, aoa_en2o_nh4, aoa_en2o_hyb real :: K_am_silica, gamma0, alphaH2O, deltaV0, spmvcorrect real :: disssi_temp, disssi_usat, disssi_bact real, dimension(:,:,:,:), allocatable :: n_pools, c_pools, si_pools - logical :: used, converged + logical :: used character(len=fm_string_len), parameter :: sub_name = 'generic_WOMBATmid_update_from_source' character(len=256), parameter :: error_header = & @@ -4256,7 +4266,7 @@ subroutine generic_WOMBATmid_update_from_source(tracer_list, Temp, Salt, & if (k==1) then !{ call FMS_ocmip2_co2calc(CO2_dope_vec, grid_tmask(:,:,k), & - Temp(:,:,k), Salt(:,:,k), & + Temp(:,:,k), max(1.0, Salt(:,:,k)), & min(wombat%dic_max*mmol_m3_to_mol_kg, max(wombat%f_dic(:,:,k), wombat%dic_min*mmol_m3_to_mol_kg)), & max(wombat%f_no3(:,:,k) / 16., 1e-9), & wombat%f_sil(:,:,k), & @@ -4276,7 +4286,7 @@ subroutine generic_WOMBATmid_update_from_source(tracer_list, Temp, Salt, & else call FMS_ocmip2_co2calc(CO2_dope_vec, grid_tmask(:,:,k), & - Temp(:,:,k), Salt(:,:,k), & + Temp(:,:,k), max(1.0, Salt(:,:,k)), & min(wombat%dic_max*mmol_m3_to_mol_kg, max(wombat%f_dic(:,:,k), wombat%dic_min*mmol_m3_to_mol_kg)), & max(wombat%f_no3(:,:,k) / 16., 1e-9), & wombat%f_sil(:,:,k), & @@ -4295,21 +4305,18 @@ subroutine generic_WOMBATmid_update_from_source(tracer_list, Temp, Salt, & !======================================================================= wombat%dynvis_sw(:,:,:) = 1e-3 - wombat%dic_correct(:,:,:) = 0.0 - wombat%alk_correct(:,:,:) = 0.0 - wombat%pprod_gross(:,:,:) = 0.0 - wombat%zprod_gross(:,:,:) = 0.0 wombat%radbio(:,:,:) = 0.0 wombat%radmid(:,:,:) = 0.0 wombat%radmld(:,:,:) = 0.0 wombat%npp3d(:,:,:) = 0.0 + wombat%rpp3d(:,:,:) = 0.0 + wombat%zsp3d(:,:,:) = 0.0 wombat%phy_mumax(:,:,:) = 0.0 wombat%phy_mu(:,:,:) = 0.0 wombat%pchl_mu(:,:,:) = 0.0 wombat%phy_kni(:,:,:) = 0.0 wombat%phy_kfe(:,:,:) = 0.0 wombat%phy_lpar(:,:,:) = 0.0 - wombat%pchl_lpar(:,:,:) = 0.0 wombat%phy_lnit(:,:,:) = 0.0 wombat%phy_lnh4(:,:,:) = 0.0 wombat%phy_lno3(:,:,:) = 0.0 @@ -4322,7 +4329,6 @@ subroutine generic_WOMBATmid_update_from_source(tracer_list, Temp, Salt, & wombat%dia_kfe(:,:,:) = 0.0 wombat%dia_ksi(:,:,:) = 0.0 wombat%dia_lpar(:,:,:) = 0.0 - wombat%dchl_lpar(:,:,:) = 0.0 wombat%dia_lnit(:,:,:) = 0.0 wombat%dia_lnh4(:,:,:) = 0.0 wombat%dia_lno3(:,:,:) = 0.0 @@ -4352,15 +4358,15 @@ subroutine generic_WOMBATmid_update_from_source(tracer_list, Temp, Salt, & wombat%phy_fedoreg(:,:,:) = 0.0 wombat%phygrow(:,:,:) = 0.0 wombat%phydoc(:,:,:) = 0.0 - wombat%phylyse(:,:,:) = 0.0 - wombat%phymort(:,:,:) = 0.0 + wombat%phymorl(:,:,:) = 0.0 + wombat%phymorq(:,:,:) = 0.0 wombat%dia_feupreg(:,:,:) = 0.0 wombat%dia_fedoreg(:,:,:) = 0.0 wombat%dia_sidoreg(:,:,:) = 0.0 wombat%diagrow(:,:,:) = 0.0 wombat%diadoc(:,:,:) = 0.0 - wombat%dialyse(:,:,:) = 0.0 - wombat%diamort(:,:,:) = 0.0 + wombat%diamorl(:,:,:) = 0.0 + wombat%diamorq(:,:,:) = 0.0 wombat%zooeps(:,:,:) = 0.0 wombat%zooprefbac1(:,:,:) = 0.0 wombat%zooprefbac2(:,:,:) = 0.0 @@ -4374,8 +4380,8 @@ subroutine generic_WOMBATmid_update_from_source(tracer_list, Temp, Salt, & wombat%zoograzphy(:,:,:) = 0.0 wombat%zoograzdia(:,:,:) = 0.0 wombat%zoograzdet(:,:,:) = 0.0 - wombat%zooresp(:,:,:) = 0.0 - wombat%zoomort(:,:,:) = 0.0 + wombat%zoomorl(:,:,:) = 0.0 + wombat%zoomorq(:,:,:) = 0.0 wombat%zooexcrbac1(:,:,:) = 0.0 wombat%zooexcrbac2(:,:,:) = 0.0 wombat%zooexcraoa(:,:,:) = 0.0 @@ -4405,8 +4411,8 @@ subroutine generic_WOMBATmid_update_from_source(tracer_list, Temp, Salt, & wombat%mesgrazdet(:,:,:) = 0.0 wombat%mesgrazbdet(:,:,:) = 0.0 wombat%mesgrazzoo(:,:,:) = 0.0 - wombat%mesresp(:,:,:) = 0.0 - wombat%mesmort(:,:,:) = 0.0 + wombat%mesmorl(:,:,:) = 0.0 + wombat%mesmorq(:,:,:) = 0.0 wombat%mesexcrbac1(:,:,:) = 0.0 wombat%mesexcrbac2(:,:,:) = 0.0 wombat%mesexcraoa(:,:,:) = 0.0 @@ -4426,72 +4432,72 @@ subroutine generic_WOMBATmid_update_from_source(tracer_list, Temp, Salt, & wombat%reminr(:,:,:) = 0.0 wombat%doc1remi(:,:,:) = 0.0 wombat%don1remi(:,:,:) = 0.0 + wombat%bac1nupt(:,:,:) = 0.0 wombat%doc2remi(:,:,:) = 0.0 wombat%don2remi(:,:,:) = 0.0 + wombat%bac2nupt(:,:,:) = 0.0 wombat%detremi(:,:,:) = 0.0 wombat%bdetremi(:,:,:) = 0.0 wombat%pic2poc(:,:,:) = 0.0 - wombat%dissrat(:,:,:) = 0.0 + wombat%dissratcal(:,:,:) = 0.0 + wombat%dissratara(:,:,:) = 0.0 + wombat%dissratpoc(:,:,:) = 0.0 wombat%caldiss(:,:,:) = 0.0 + wombat%aradiss(:,:,:) = 0.0 + wombat%pocdiss(:,:,:) = 0.0 + wombat%zoodiss(:,:,:) = 0.0 + wombat%mesdiss(:,:,:) = 0.0 wombat%aoa_loxy(:,:,:) = 0.0 wombat%aoa_lnh4(:,:,:) = 0.0 - wombat%aoa_yn2o(:,:,:) = 0.0 + wombat%aoa_en2o(:,:,:) = 0.0 + wombat%aoa_eno3(:,:,:) = 0.0 wombat%aoa_mumax(:,:,:) = 0.0 wombat%aoa_mu(:,:,:) = 0.0 wombat%aoagrow(:,:,:) = 0.0 wombat%aoaresp(:,:,:) = 0.0 - wombat%aoamor1(:,:,:) = 0.0 - wombat%aoamor2(:,:,:) = 0.0 + wombat%aoamorl(:,:,:) = 0.0 + wombat%aoamorq(:,:,:) = 0.0 + wombat%bac_ydon(:,:,:) = 1.0 + wombat%bac1_ydoc(:,:,:) = 1.0 + wombat%bac2_ydoc(:,:,:) = 1.0 wombat%bac1grow(:,:,:) = 0.0 wombat%bac1resp(:,:,:) = 0.0 wombat%bac1unh4(:,:,:) = 0.0 wombat%bac1ufer(:,:,:) = 0.0 - wombat%bac1_lnit(:,:,:) = 1.0 - wombat%bac1_lfer(:,:,:) = 1.0 wombat%bac1_mu(:,:,:) = 0.0 - wombat%bac1_kdoc(:,:,:) = 10.0 wombat%bac1_fanaer(:,:,:) = 0.0 - wombat%bac1mor1(:,:,:) = 0.0 - wombat%bac1mor2(:,:,:) = 0.0 + wombat%bac1_fnlim(:,:,:) = 0.0 + wombat%bac1_ffelim(:,:,:) = 0.0 + wombat%bac1morl(:,:,:) = 0.0 + wombat%bac1morq(:,:,:) = 0.0 wombat%bac1deni(:,:,:) = 0.0 wombat%bac2grow(:,:,:) = 0.0 wombat%bac2resp(:,:,:) = 0.0 wombat%bac2unh4(:,:,:) = 0.0 wombat%bac2ufer(:,:,:) = 0.0 - wombat%bac2_lnit(:,:,:) = 1.0 - wombat%bac2_lfer(:,:,:) = 1.0 wombat%bac2_mu(:,:,:) = 0.0 - wombat%bac2_kdoc(:,:,:) = 10.0 wombat%bac2_fanaer(:,:,:) = 0.0 - wombat%bac2mor1(:,:,:) = 0.0 - wombat%bac2mor2(:,:,:) = 0.0 + wombat%bac2_fnlim(:,:,:) = 0.0 + wombat%bac2_ffelim(:,:,:) = 0.0 + wombat%bac2morl(:,:,:) = 0.0 + wombat%bac2morq(:,:,:) = 0.0 wombat%bac2deni(:,:,:) = 0.0 wombat%aox_lnh4(:,:,:) = 0.0 wombat%aox_mu(:,:,:) = 0.0 wombat%nitrfix(:,:,:) = 0.0 wombat%ammox(:,:,:) = 0.0 wombat%anammox(:,:,:) = 0.0 - wombat%export_prod(:,:) = 0.0 - wombat%export_inorg(:,:) = 0.0 - wombat%dic_intmld(:,:) = 0.0 - wombat%o2_intmld(:,:) = 0.0 - wombat%no3_intmld(:,:) = 0.0 - wombat%fe_intmld(:,:) = 0.0 - wombat%phy_intmld(:,:) = 0.0 - wombat%det_intmld(:,:) = 0.0 - wombat%pprod_gross_intmld(:,:) = 0.0 - wombat%npp_intmld(:,:) = 0.0 - wombat%radbio_intmld(:,:) = 0.0 - wombat%dic_int100(:,:) = 0.0 - wombat%o2_int100(:,:) = 0.0 - wombat%no3_int100(:,:) = 0.0 - wombat%fe_int100(:,:) = 0.0 - wombat%phy_int100(:,:) = 0.0 - wombat%det_int100(:,:) = 0.0 - wombat%pprod_gross_int100(:,:) = 0.0 - wombat%npp_int100(:,:) = 0.0 - wombat%radbio_int100(:,:) = 0.0 + wombat%nosdoc_overflow(:,:,:) = 0.0 + wombat%nosdoc_excretion(:,:,:) = 0.0 + wombat%nosdoc_phylysis(:,:,:) = 0.0 + wombat%nosdoc_baclysis(:,:,:) = 0.0 + wombat%nosdoc_dethydro(:,:,:) = 0.0 + wombat%nosdoc_docconsu(:,:,:) = 0.0 wombat%zeuphot(:,:) = 0.0 + wombat%det_radius(:,:) = 0.0 + wombat%bdet_radius(:,:) = 0.0 + wombat%det_density(:,:,:) = 0.0 + wombat%bdet_density(:,:,:) = 0.0 wombat%fbury(:,:) = 0.0 wombat%seddep(:,:) = 0.0 wombat%sedmask(:,:) = 0.0 @@ -4510,7 +4516,6 @@ subroutine generic_WOMBATmid_update_from_source(tracer_list, Temp, Salt, & ! Allocate and initialise some multi-dimensional variables allocate(wsink1(nk)); wsink1(:)=0.0 allocate(wsink2(nk)); wsink2(:)=0.0 - allocate(wsinkcal(nk)); wsinkcal(:)=0.0 allocate(ek_bgr(nk,3)); ek_bgr(:,:)=0.0 allocate(par_bgr_mid(nk,3)); par_bgr_mid(:,:)=0.0 allocate(par_bgr_top(nk,3)); par_bgr_top(:,:)=0.0 @@ -4582,6 +4587,8 @@ subroutine generic_WOMBATmid_update_from_source(tracer_list, Temp, Salt, & positive=.true.) ! [mol/kg] call g_tracer_get_values(tracer_list, 'don', 'field', wombat%f_don, isd, jsd, ntau=tau, & positive=.true.) ! [mol/kg] + call g_tracer_get_values(tracer_list, 'nosdoc', 'field', wombat%f_nosdoc, isd, jsd, ntau=tau, & + positive=.false.) ! [unitless] call g_tracer_get_values(tracer_list, 'bac1', 'field', wombat%f_bac1, isd, jsd, ntau=tau, & positive=.true.) ! [mol/kg] call g_tracer_get_values(tracer_list, 'bac2', 'field', wombat%f_bac2, isd, jsd, ntau=tau, & @@ -4621,22 +4628,27 @@ subroutine generic_WOMBATmid_update_from_source(tracer_list, Temp, Salt, & ! Steps: ! ! 1. Light attenuation through water column ! ! 2. Nutrient limitation of phytoplankton ! - ! 3. Temperature-dependence of heterotrophy ! + ! 3. Temperature-dependent heterotrophy and POM-->DOM ! ! 4. Light limitation of phytoplankton ! - ! 5. Growth of chlorophyll ! - ! 6. Phytoplankton uptake of iron ! - ! 7. Phytoplankton uptake of silicic acid ! - ! 8. Iron chemistry ! - ! 9. Silicic acid chemistry and dissolution ! - ! 10. Mortality scalings and grazing ! - ! 11. CaCO3 calculations ! - ! 12. Implicit nitrogen fixation ! - ! 13. Facultative heterotrophy calculations ! - ! 14. Chemoautotroph calculations ! - ! 15. Sources and sinks ! - ! 16. Tracer tendencies ! - ! 17. Check for conservation by ecosystem component ! - ! 18. Compute sinking rates of detrital pools ! + ! 5. Realized growth rate of phytoplankton ! + ! 6. Dissolved organic carbon release by phytoplankton ! + ! 7. Growth of chlorophyll ! + ! 8. Phytoplankton uptake of iron ! + ! 9. Phytoplankton uptake of silicic acid ! + ! 10. Iron chemistry (scavenging, coagulation, dissolution) ! + ! 11. Biogenic silica dissolution ! + ! 12. Mortality terms ! + ! 13. Zooplankton grazing, egestion, excretion, assimilation ! + ! 14. Calcium carbonate production and dissolution ! + ! 15. Implicit nitrogen fixation ! + ! 16. Facultative bacterial heterotrophy ! + ! 17. Chemoautotrophy ! + ! 18. Nominal oxidation state of dissolved organic carbon ! + ! 19. Tracer tendencies ! + ! 20. Check for conservation of mass ! + ! 21. Additional operations on tracers ! + ! 22. Sinking rates of particulates ! + ! 23. Sedimentary processes ! ! ! !-----------------------------------------------------------------------! !-----------------------------------------------------------------------! @@ -4763,6 +4775,7 @@ subroutine generic_WOMBATmid_update_from_source(tracer_list, Temp, Salt, & enddo; enddo wombat%no3_prev(:,:,:) = wombat%f_no3(:,:,:) + wombat%nh4_prev(:,:,:) = wombat%f_nh4(:,:,:) wombat%caco3_prev(:,:,:) = wombat%f_caco3(:,:,:) ! Arrays for assessing conservation of mass within ecosystem component @@ -4783,11 +4796,8 @@ subroutine generic_WOMBATmid_update_from_source(tracer_list, Temp, Salt, & biodia = max(epsi, wombat%f_dia(i,j,k) ) / mmol_m3_to_mol_kg ![mmol/m3] biophyfe = max(epsi, wombat%f_phyfe(i,j,k))/ mmol_m3_to_mol_kg ![mmol/m3] biodiafe = max(epsi, wombat%f_diafe(i,j,k))/ mmol_m3_to_mol_kg ![mmol/m3] - biodiasi = max(epsi, wombat%f_diasi(i,j,k))/ mmol_m3_to_mol_kg ![mmol/m3] biozoo = max(epsi, wombat%f_zoo(i,j,k) ) / mmol_m3_to_mol_kg ![mmol/m3] - biozoofe = max(epsi, wombat%f_zoofe(i,j,k) ) / mmol_m3_to_mol_kg ![mmol/m3] biomes = max(epsi, wombat%f_mes(i,j,k) ) / mmol_m3_to_mol_kg ![mmol/m3] - biomesfe = max(epsi, wombat%f_mesfe(i,j,k) ) / mmol_m3_to_mol_kg ![mmol/m3] biodet = max(epsi, wombat%f_det(i,j,k) ) / mmol_m3_to_mol_kg ![mmol/m3] biobdet = max(epsi, wombat%f_bdet(i,j,k) ) / mmol_m3_to_mol_kg ![mmol/m3] biobdetsi= max(epsi, wombat%f_bdetsi(i,j,k) ) / mmol_m3_to_mol_kg ![mmol/m3] @@ -4813,7 +4823,6 @@ subroutine generic_WOMBATmid_update_from_source(tracer_list, Temp, Salt, & bdet_Fe2C= max(epsi, wombat%f_bdetfe(i,j,k))/max(epsi, wombat%f_bdet(i,j,k)) dom_N2C = max(epsi, wombat%f_don(i,j,k)) / max(epsi, wombat%f_doc(i,j,k)) dia_Si2C = max(epsi, wombat%f_diasi(i,j,k))/ max(epsi, wombat%f_dia(i,j,k)) - bdet_Si2C= max(epsi, wombat%f_bdetsi(i,j,k))/max(epsi, wombat%f_bdet(i,j,k)) !-----------------------------------------------------------------------! @@ -4854,7 +4863,7 @@ subroutine generic_WOMBATmid_update_from_source(tracer_list, Temp, Salt, & dia_limnh4 = bionh4 / (bionh4 + wombat%dia_kni(i,j,k) + epsi) dia_limno3 = biono3 / (biono3 + wombat%dia_kni(i,j,k) + epsi) dia_limdin = (biono3 + bionh4) / (biono3 + bionh4 + wombat%dia_kni(i,j,k) + epsi) - wombat%dia_lnh4(i,j,k) = 5.0 * dia_limdin * phy_limnh4 / (dia_limno3 + 5.0 * dia_limnh4 + epsi) + wombat%dia_lnh4(i,j,k) = 5.0 * dia_limdin * dia_limnh4 / (dia_limno3 + 5.0 * dia_limnh4 + epsi) wombat%dia_lno3(i,j,k) = dia_limdin * dia_limno3 / (dia_limno3 + 5.0 * dia_limnh4 + epsi) wombat%dia_lnit(i,j,k) = wombat%dia_lno3(i,j,k) + wombat%dia_lnh4(i,j,k) ! Iron limitation (Quota model, constants from Flynn & Hipkin 1999) @@ -4869,7 +4878,7 @@ subroutine generic_WOMBATmid_update_from_source(tracer_list, Temp, Salt, & !-----------------------------------------------------------------------! !-----------------------------------------------------------------------! !-----------------------------------------------------------------------! - ! [Step 3] Heterotrophy and remineralisation ! + ! [Step 3] Temperature-dependent heterotrophy and POM-->DOM ! !-----------------------------------------------------------------------! !-----------------------------------------------------------------------! !-----------------------------------------------------------------------! @@ -4880,6 +4889,18 @@ subroutine generic_WOMBATmid_update_from_source(tracer_list, Temp, Salt, & ! Variable rates of remineralisation wombat%reminr(i,j,k) = wombat%detlrem * fbc + ! remineralisation of POM --> DOM + if (wombat%f_det(i,j,k) > epsi) then + wombat%detremi(i,j,k) = wombat%reminr(i,j,k) / mmol_m3_to_mol_kg * wombat%f_det(i,j,k)**2.0 ! [molC/kg/s] + else + wombat%detremi(i,j,k) = 0.0 + endif + if (wombat%f_bdet(i,j,k) > epsi) then + wombat%bdetremi(i,j,k) = wombat%reminr(i,j,k) / mmol_m3_to_mol_kg * wombat%f_bdet(i,j,k)**2.0 ! [molC/kg/s] + else + wombat%bdetremi(i,j,k) = 0.0 + endif + !-----------------------------------------------------------------------! !-----------------------------------------------------------------------! @@ -4890,91 +4911,132 @@ subroutine generic_WOMBATmid_update_from_source(tracer_list, Temp, Salt, & !-----------------------------------------------------------------------! ! 1. initial slope of Photosynthesis-Irradiance curve - ! 2. Alter the slope to account for respiration and daylength limitation - ! 3. Light limitation - ! 4. Apply light and nutrient limitations to maximum growth rate - ! 5. Determine difference in light-limited and realized growth to get DOC exudation + ! 2. Light limitation !!!~~~ Phytoplankton ~~~!!! phy_pisl = max(wombat%alphabio_phy * phy_chlc, wombat%alphabio_phy * wombat%phyminqc) - phy_pisl2 = phy_pisl / ( (1. + wombat%phylmor*86400.0 * fbc) ) ! add daylength estimate here - wombat%phy_lpar(i,j,k) = (1. - exp(-phy_pisl2 * wombat%radbio(i,j,k))) - wombat%phy_mu(i,j,k) = wombat%phy_mumax(i,j,k) * wombat%phy_lpar(i,j,k) * & - min(wombat%phy_lnit(i,j,k), wombat%phy_lfer(i,j,k)) + wombat%phy_lpar(i,j,k) = (1. - exp(-phy_pisl * wombat%radbio(i,j,k))) + !!!~~~ Microphytoplankton ~~~!!! dia_pisl = max(wombat%alphabio_dia * dia_chlc, wombat%alphabio_dia * wombat%diaminqc) - dia_pisl2 = dia_pisl / ( (1. + wombat%dialmor*86400.0 * fbc) ) ! add daylength estimate here - wombat%dia_lpar(i,j,k) = (1. - exp(-dia_pisl2 * wombat%radbio(i,j,k))) - wombat%dia_mu(i,j,k) = wombat%dia_mumax(i,j,k) * wombat%dia_lpar(i,j,k) * & - min(wombat%dia_lnit(i,j,k), wombat%dia_lfer(i,j,k)) * wombat%dia_lsil(i,j,k) + wombat%dia_lpar(i,j,k) = (1. - exp(-dia_pisl * wombat%radbio(i,j,k))) + !-----------------------------------------------------------------------! !-----------------------------------------------------------------------! !-----------------------------------------------------------------------! - ! [Step 5] Growth of chlorophyll ! + ! [Step 5] Realized growth rate of phytoplankton ! !-----------------------------------------------------------------------! !-----------------------------------------------------------------------! !-----------------------------------------------------------------------! - ! 1. Light limitation of chlorophyll production - ! 2. minimum and optimal rates of chlorophyll growth - ! 3. Calculate mg Chl m-3 s-1 - - ! Reduced chlorophyll growth during extended periods of darkness - phi = wombat%radmld(i,j,1) / (wombat%radmld(i,j,1) + wombat%chlkWm2) - - !!!~~~ Phytoplankton ~~~!!! - pchl_pisl = phy_pisl / ( wombat%phy_mumax(i,j,k) * 86400.0 * & - (1. - min(wombat%phy_lnit(i,j,k), wombat%phy_lfer(i,j,k))) + epsi ) - wombat%pchl_lpar(i,j,k) = (1. - exp(-pchl_pisl * wombat%radmld(i,j,k))) - pchl_mumin = wombat%phyminqc * wombat%phy_mu(i,j,k) * biophy * 12.0 ![mg/m3/s] - pchl_muopt = wombat%phyoptqc * wombat%phy_mu(i,j,k) * biophy * 12.0 ![mg/m3/s] - wombat%pchl_mu(i,j,k) = (pchl_muopt - pchl_mumin) * wombat%pchl_lpar(i,j,k) * & - min(wombat%phy_lnit(i,j,k), wombat%phy_lfer(i,j,k)) - if ( (phy_pisl * wombat%radmld(i,j,k)) > 0.0 ) then - wombat%pchl_mu(i,j,k) = phi * ( pchl_mumin + wombat%pchl_mu(i,j,k) / & - (phy_pisl * wombat%radmld(i,j,k)) ) - endif - wombat%pchl_mu(i,j,k) = wombat%pchl_mu(i,j,k) / 12.0 * mmol_m3_to_mol_kg ![mol/kg/s] + ! 1. Apply light and nutrient limitations to maximum growth rate + wombat%phy_mu(i,j,k) = wombat%phy_mumax(i,j,k) * wombat%phy_lpar(i,j,k) * & + min(wombat%phy_lnit(i,j,k), wombat%phy_lfer(i,j,k)) + wombat%dia_mu(i,j,k) = wombat%dia_mumax(i,j,k) * wombat%dia_lpar(i,j,k) * & + min(wombat%dia_lnit(i,j,k), wombat%dia_lfer(i,j,k)) * & + wombat%dia_lsil(i,j,k) - !!!~~~ Microphytoplankton ~~~!!! - dchl_pisl = dia_pisl / ( wombat%dia_mumax(i,j,k) * 86400.0 * & - (1. - min(wombat%dia_lnit(i,j,k), wombat%dia_lfer(i,j,k)) * wombat%dia_lsil(i,j,k)) + epsi ) - wombat%dchl_lpar(i,j,k) = (1. - exp(-dchl_pisl * wombat%radmld(i,j,k))) - dchl_mumin = wombat%diaminqc * wombat%dia_mu(i,j,k) * biodia * 12.0 ![mg/m3/s] - dchl_muopt = wombat%diaoptqc * wombat%dia_mu(i,j,k) * biodia * 12.0 ![mg/m3/s] - wombat%dchl_mu(i,j,k) = (dchl_muopt - dchl_mumin) * wombat%dchl_lpar(i,j,k) * & - min(wombat%dia_lnit(i,j,k), wombat%dia_lfer(i,j,k)) * wombat%dia_lsil(i,j,k) - if ( (dia_pisl * wombat%radmld(i,j,k)) > 0.0 ) then - wombat%dchl_mu(i,j,k) = phi * ( dchl_mumin + wombat%dchl_mu(i,j,k) / & - (dia_pisl * wombat%radmld(i,j,k)) ) + if ((wombat%f_nh4(i,j,k) + wombat%f_no3(i,j,k)) > epsi) then + wombat%phygrow(i,j,k) = wombat%phy_mu(i,j,k) * wombat%f_phy(i,j,k) ! [molC/kg/s] + wombat%diagrow(i,j,k) = wombat%dia_mu(i,j,k) * wombat%f_dia(i,j,k) ! [molC/kg/s] + else + wombat%phygrow(i,j,k) = 0.0 + wombat%diagrow(i,j,k) = 0.0 endif - wombat%dchl_mu(i,j,k) = wombat%dchl_mu(i,j,k) / 12.0 * mmol_m3_to_mol_kg ![mol/kg/s] !-----------------------------------------------------------------------! !-----------------------------------------------------------------------! !-----------------------------------------------------------------------! - ! [Step 6] Phytoplankton uptake of iron ! + ! [Step 6] Dissolved organic carbon release by phytoplankton ! !-----------------------------------------------------------------------! !-----------------------------------------------------------------------! !-----------------------------------------------------------------------! - ! 1. Maximum iron content of phytoplankton cell - ! 2. Ensure that dFe uptake increases or decreases in response to cell quota - ! 3. Iron uptake of phytoplankton (reduced to 20% at night and when N is limiting) - - !!!~~~ Phytoplankton ~~~!!! - phy_maxqfe = biophy * wombat%phymaxqf !mmol Fe / m3 - wombat%phy_feupreg(i,j,k) = (4.0 - 4.5 * wombat%phy_lfer(i,j,k) / & - (wombat%phy_lfer(i,j,k) + 0.5) ) - wombat%phy_fedoreg(i,j,k) = max(0.0, (1.0 - biophyfe/phy_maxqfe) / & - abs(1.05 - biophyfe/phy_maxqfe) ) - wombat%phy_dfeupt(i,j,k) = (wombat%phy_mumax(i,j,k) * wombat%phymaxqf * & - max(0.2, wombat%phy_lpar(i,j,k) * wombat%phy_lnit(i,j,k)) * & - biofer / (biofer + wombat%phy_kfe(i,j,k)) * & + ! Excess DOC exudation (active exudation via overflow hypothesis; Fogg 1966, 1983; Williams 1990; Carlson & Hansell 2014) + ! Up to 50% (set by `overflow`) of assimilated carbon can be exuded by phytoplankton as DOC in high light, low nutrient + ! conditions (Thornton 2014) + ! Some small amount of DOC is exuded via passive diffusion even in the healthiest phytoplankton (Bjornsen 1988) + ! If too much DOC is exuded, bacterial competition for nutrients can limit phytoplankton growth (Bratbak & Thingstad, 1985; + ! Ratnarajah et al. 2021) + ! However, active release of DOM by mixotrophic phytoplankton can "farm" heterotrophic bacteria (Mitra et al. 2013) (NOT + ! YET IMPLEMENTED) + if (wombat%f_phy(i,j,k)>epsi) then + zval = wombat%phy_mumax(i,j,k) * wombat%phy_lpar(i,j,k) * wombat%f_phy(i,j,k) ! Gross carbon fixation + wombat%phydoc(i,j,k) = min( wombat%overflow * zval, & + max( 0.02 * zval, max(0.0, zval - wombat%phygrow(i,j,k)) ) ) ! + else + wombat%phydoc(i,j,k) = 0.0 + endif + if (wombat%f_dia(i,j,k)>epsi) then + zval = wombat%dia_mumax(i,j,k) * wombat%dia_lpar(i,j,k) * wombat%f_dia(i,j,k) ! Gross carbon fixation + wombat%diadoc(i,j,k) = min( wombat%overflow * zval, & + max( 0.02 * zval, max(0.0, zval - wombat%diagrow(i,j,k)) ) ) ! + else + wombat%diadoc(i,j,k) = 0.0 + endif + + + !-----------------------------------------------------------------------! + !-----------------------------------------------------------------------! + !-----------------------------------------------------------------------! + ! [Step 7] Growth of chlorophyll ! + !-----------------------------------------------------------------------! + !-----------------------------------------------------------------------! + !-----------------------------------------------------------------------! + + ! 1. Estimate the target Chl:C ratio required to support maximum growth + ! This is a direct approximation of Geider, MacIntyre & Kana (1997): + ! - Chl increased in response to low light (we use the mean of the MLD) + ! - Chl decreased in response to N and Fe limitation + ! 2. Ensure that a minimum chl:c ratio must be maintained by the cell + ! 3. Estimate the rate that chlorophyll is synthesized towards this optimal + ! Rates of chlorophyll synthesis are not instantaneous, and take hours to days + ! Here, we make chlorophyll synthesis respond on a timescale of chltau + + !!!~~~ Nanophytoplankton ~~~!!! + theta_opt = wombat%phymaxqc / (1.0 + & + ( wombat%alphabio_phy * wombat%radmld(i,j,k) * wombat%phymaxqc ) & + /( epsi + 2.0 * wombat%phy_mumax(i,j,k) * 86400.0 & + * max(0.01, min(wombat%phy_lnit(i,j,k), wombat%phy_lfer(i,j,k))) ) ) + theta_opt = max(wombat%phyminqc, theta_opt) + wombat%pchl_mu(i,j,k) = wombat%phy_mu(i,j,k) * wombat%f_pchl(i,j,k) & + + (theta_opt - phy_chlc) / wombat%chltau * wombat%f_phy(i,j,k) + + !!!~~~ Microphytoplankton ~~~!!! + theta_opt = wombat%diamaxqc / (1.0 + & + ( wombat%alphabio_dia * wombat%radmld(i,j,k) * wombat%diamaxqc ) & + /( epsi + 2.0 * wombat%dia_mumax(i,j,k) * 86400.0 & + * max(0.01, min(wombat%dia_lnit(i,j,k), wombat%dia_lfer(i,j,k))) ) ) + theta_opt = max(wombat%diaminqc, theta_opt) + wombat%dchl_mu(i,j,k) = wombat%dia_mu(i,j,k) * wombat%f_dchl(i,j,k) & + + (theta_opt - dia_chlc) / wombat%chltau * wombat%f_dia(i,j,k) + + + !-----------------------------------------------------------------------! + !-----------------------------------------------------------------------! + !-----------------------------------------------------------------------! + ! [Step 8] Phytoplankton uptake of iron ! + !-----------------------------------------------------------------------! + !-----------------------------------------------------------------------! + !-----------------------------------------------------------------------! + + ! 1. Maximum iron content of phytoplankton cell + ! 2. Ensure that dFe uptake increases or decreases in response to cell quota + ! 3. Iron uptake of phytoplankton (reduced 10-fold in darkness) + + !!!~~~ Nano-phytoplankton ~~~!!! + phy_maxqfe = biophy * wombat%phymaxqf !mmol Fe / m3 + wombat%phy_feupreg(i,j,k) = (4.0 - 4.5 * wombat%phy_lfer(i,j,k) / & + (wombat%phy_lfer(i,j,k) + 0.5) ) + wombat%phy_fedoreg(i,j,k) = max(0.0, (1.0 - biophyfe/phy_maxqfe) / & + abs(1.05 - biophyfe/phy_maxqfe) ) + wombat%phy_dfeupt(i,j,k) = (wombat%phy_mumax(i,j,k) * phy_maxqfe * & + max(0.01, wombat%phy_lpar(i,j,k))**0.5 * & + biofer / (biofer + wombat%phy_kfe(i,j,k)) * & wombat%phy_feupreg(i,j,k) * & - wombat%phy_fedoreg(i,j,k) * biophy) * mmol_m3_to_mol_kg + wombat%phy_fedoreg(i,j,k) ) * mmol_m3_to_mol_kg !!!~~~ Microphytoplankton ~~~!!! dia_maxqfe = biodia * wombat%diamaxqf !mmol Fe / m3 @@ -4982,8 +5044,8 @@ subroutine generic_WOMBATmid_update_from_source(tracer_list, Temp, Salt, & (wombat%dia_lfer(i,j,k) + 0.5) ) wombat%dia_fedoreg(i,j,k) = max(0.0, (1.0 - biodiafe/dia_maxqfe) / & abs(1.05 - biodiafe/dia_maxqfe) ) - wombat%dia_dfeupt(i,j,k) = max(0.0, ( wombat%dia_mumax(i,j,k) * wombat%diamaxqf * biodia & - * max(0.2, wombat%dia_lpar(i,j,k) * wombat%dia_lnit(i,j,k)) & + wombat%dia_dfeupt(i,j,k) = max(0.0, ( wombat%dia_mumax(i,j,k) * dia_maxqfe & + * max(0.01, wombat%dia_lpar(i,j,k))**0.5 & * biofer / (biofer + wombat%dia_kfe(i,j,k)) & * wombat%dia_feupreg(i,j,k) & * wombat%dia_fedoreg(i,j,k))) * mmol_m3_to_mol_kg @@ -4992,7 +5054,7 @@ subroutine generic_WOMBATmid_update_from_source(tracer_list, Temp, Salt, & !-----------------------------------------------------------------------! !-----------------------------------------------------------------------! !-----------------------------------------------------------------------! - ! [Step 7] Phytoplankton uptake of silicic acid ! + ! [Step 9] Phytoplankton uptake of silicic acid ! !-----------------------------------------------------------------------! !-----------------------------------------------------------------------! !-----------------------------------------------------------------------! @@ -5017,15 +5079,16 @@ subroutine generic_WOMBATmid_update_from_source(tracer_list, Temp, Salt, & * wombat%dia_sidoreg(i,j,k) )) * mmol_m3_to_mol_kg ! [molSi/kg/s] - !-------------------------------------------------------------------------------------! - !-------------------------------------------------------------------------------------! - !-------------------------------------------------------------------------------------! - ! [Step 8] Iron chemistry (Aumont et al., 2015 GMD & Tagliabue et al., 2023 Nature) ! - !-------------------------------------------------------------------------------------! - !-------------------------------------------------------------------------------------! - !-------------------------------------------------------------------------------------! + !------------------------------------------------------------------------! + !------------------------------------------------------------------------! + !------------------------------------------------------------------------! + ! [Step 10] Iron chemistry (scavenging, coagulation, dissolution) ! + !------------------------------------------------------------------------! + !------------------------------------------------------------------------! + !------------------------------------------------------------------------! - ! Estimate solubility of Fe3+ (free Fe) in solution using temperature, pH and salinity + ! Estimate solubility of Fe3+ (free Fe) in solution using temperature, + ! pH and salinity using the equations of Liu & Millero (2002) ztemk = max(5.0, Temp(i,j,k)) + 273.15 ! temperature in kelvin I_ztemk = 1.0 / ztemk zval = 19.924 * Salt(i,j,k) / ( 1000. - 1.005 * Salt(i,j,k)) @@ -5042,12 +5105,19 @@ subroutine generic_WOMBATmid_update_from_source(tracer_list, Temp, Salt, & endif fe3sol = fesol1 * ( hp*hp*hp + fesol2*hp*hp + fesol3*hp + fesol4 + fesol5/hp ) *1e9 - ! Estimate total colloidal iron (variable, with a 10% of total dissolved Fe floor) + ! Estimate total colloidal iron following Tagliabue et al. (2023). + ! Colloidal dFe is considered to be whatever exceeds the inorganic solubility + ! ceiling, although there is always a hard lower limit of 10% of total dFe. wombat%fecol(i,j,k) = max(0.1*biofer, biofer - fe3sol) - ! Determine equilibriuim fractionation of the remaining dFe (non-colloidal fraction) into Fe' and L-Fe - fe_keq = 10.0**( 17.27 - 1565.7 * I_ztemk ) * 1e-9 ! Temperature reduces solubility - ! - Resolve for soluble Fe after accounting for colloidal fraction above + ! Determine equilibriuim fractionation of the remaining dFe (non-colloidal) + ! between Fe' and ligand-bound iron (L-Fe). Below, temperature increases the + ! solubility constant (reducing free Fe) and light decreases the solubility + ! constant (increasing free Fe). The temperature-dependency comes from Volker + ! & Tagliabue (2015), while the light dependency is informed by Barbeau et al. + ! (2001) who saw a 0.7 log10 unit decrease in K in high light. + fe_keq = 1e-9 * 10.0**( (17.27 - 1565.7 * I_ztemk ) - 0.7 * & + wombat%radbio(i,j,k) / (wombat%radbio(i,j,k) + 10.0) ) fe_sfe = max(0.0, biofer - wombat%fecol(i,j,k)) zval = 1.0 + wombat%ligand * fe_keq - fe_sfe * fe_keq wombat%feIII(i,j,k) = ( -zval + SQRT( zval*zval + 4.0*fe_keq*fe_sfe ) ) & @@ -5056,10 +5126,10 @@ subroutine generic_WOMBATmid_update_from_source(tracer_list, Temp, Salt, & wombat%felig(i,j,k) = fe_sfe - wombat%feIII(i,j,k) ! Scavenging of Fe` onto biogenic particles - partic = (biodet + biobdet*(1.0+bdet_Si2C) + biocaco3) ! total particle concentration [mmol/m3] + partic = (biodet*2 + biobdet*2 + biobdetsi*2 + biocaco3*8.3) ! total particle concentration [mmol/m3] wombat%fescaven(i,j,k) = wombat%feIII(i,j,k) * (1e-7 + wombat%kscav_dfe * partic) / 86400.0 - wombat%fescaafe(i,j,k) = wombat%fescaven(i,j,k) * (biodet + biocaco3) / (partic+epsi) - wombat%fescabafe(i,j,k) = wombat%fescaven(i,j,k) * biobdet * (1.0+bdet_Si2C) / (partic+epsi) + wombat%fescaafe(i,j,k) = wombat%fescaven(i,j,k) * (biodet*2 + biocaco3*8.3) / (partic+epsi) + wombat%fescabafe(i,j,k) = wombat%fescaven(i,j,k) * (biobdet*2 + biobdetsi*2) / (partic+epsi) ! Coagulation of colloidal Fe (umol/m3) to form sinking particles (mmol/m3) ! Following Tagliabue et al. (2023), make coagulation rate dependent on DOC and Phytoplankton biomass @@ -5101,7 +5171,7 @@ subroutine generic_WOMBATmid_update_from_source(tracer_list, Temp, Salt, & !-----------------------------------------------------------------------! !-----------------------------------------------------------------------! !-----------------------------------------------------------------------! - ! [Step 9] Silicic acid chemistry and dissolution ! + ! [Step 11] Silicic acid chemistry and biogenic silica dissolution ! !-----------------------------------------------------------------------! !-----------------------------------------------------------------------! !-----------------------------------------------------------------------! @@ -5120,21 +5190,21 @@ subroutine generic_WOMBATmid_update_from_source(tracer_list, Temp, Salt, & ! accounting for temperature, salinity and pressure effects zval = max(273.15, Temp(i,j,k) + 273.15) ! temperature in Kelvin K_am_silica = 10**( -8.476 - 485.24/zval - 2.268e-6*zval*zval + 3.068 * log10(zval) ) ! Gunnarsson & Arnorsson (2000) - gamma0 = 1.0 + 0.0053 * Salt(i,j,k) - 0.000034 * Salt(i,j,k)**2 ! Svenko 2014 Mar. Chem. + gamma0 = 1.0 + 0.0053 * Salt(i,j,k) - 0.000034 * Salt(i,j,k)**2 ! Savenko 2014 Oceanology alphaH2O = 0.999 ! activity of water in seawater (from TEOS-10) - deltaV0 = -9.9 * 1e-6 ! m3/mol, (Willey 1982 Geochim. et Cosmochim. Acta) (also see Loucaides et al., 2012 Mar. Chem.) + deltaV0 = -9.0 * 1e-6 ! m3/mol, (Willey 1982 Geochim. et Cosmochim. Acta) (also see Loucaides et al., 2012 Mar. Chem.) spmvcorrect = exp( -deltaV0/(Rgas * zval) * wombat%zm(i,j,k) * 1.0e4 ) ! 1.0e4 converts dbar to Pa wombat%sileqc(i,j,k) = (K_am_silica * spmvcorrect) * alphaH2O**2.0 / gamma0 ! mol/kg ! Dissolution of biogenic silica into silicic acid - ! 1. Temperature effect (Arrhenius) - ! - activation energy of 84 kJ/mol (Greenwood et al., 2005 Aqu. Geochem.) + ! 1. Temperature effect + ! - activation energy of 58 kJ/mol (Kamatani 1982 Marine Biology) + ! - Kamatani (1982) measure dissolution rates (K, hr-1) dependent on temperature (T, ºC) + ! according to ln(K) = alpha + 0.0833*T, where alpha is ~-8 to -10. ! - Greenwood et al. (2005) finds dissolution rates [1/s] at a given temperature - ! equal to exp(20 - 10050/T), with T in Kelvin (Figure 4). We use 40ºC, which is - ! their lowest temperature, thus 313.15 in Kelvin - ! - NOTE: Greenwood also estimate a pH dependence, but make their rate measurements - ! at pH 10 - 14. We ignore this for now, but it may be worth revisiting - disssi_temp = exp(20.0 - 10050.0/313.15) * exp( -84.0*1e3/Rgas * (1./zval - 1./313.15) ) ! [1/s] + ! equal to exp(20 - 10050/T), with T in Kelvin (Figure 4). But these T are too high. + ! We use Kamatani (1982): + disssi_temp = exp(-8.0 + 0.0833*Temp(i,j,k)) / 3600.0 ! [1/s] ! 2. Undersaturation term with an exponent of 2.0 ! - see Eq. 2.13 and fits of this equation to ocean data in Figures 3.20 and 3.21 in ! Rickert, D., Dissolution kinetics of biogenic silica in marine environments, Ber. Polarforsch., 351, 2000. @@ -5144,8 +5214,8 @@ subroutine generic_WOMBATmid_update_from_source(tracer_list, Temp, Salt, & ! from a linear dependence on the degree of undersaturation to an exponential one [Van Cappellen ! and Qiu, 1997b; Rickert, 2000]." ! - We therefore assume substantial undersaturation, which is the case in most of the ocean - disssi_usat = max(0.0, (1 - wombat%f_sil(i,j,k) / wombat%sileqc(i,j,k))**2.0 ) - ! 3. Bio-interference term? + disssi_usat = (1 - min(1.0, wombat%f_sil(i,j,k) / wombat%sileqc(i,j,k)) )**2.0 + ! 3. Bio-interference term? ! - "The removal of organic or inorganic coatings enhance the reactivity by at least an order of magnitude." ! Ricket et al., 2002 Geochim. et Cosmochim. Acta ! - Diatom frustule dissolution increased by order of magnitude with bacteria (Bidle & Azam 1999 Nature) @@ -5154,11 +5224,18 @@ subroutine generic_WOMBATmid_update_from_source(tracer_list, Temp, Salt, & ! 4. Dissolution rate of biogenic silica (/s) composed of the above terms wombat%disssi(i,j,k) = disssi_temp * disssi_usat * disssi_bact + ! Biogenic silica dissolution + if (wombat%f_bdetsi(i,j,k) > epsi) then + wombat%bsidiss(i,j,k) = wombat%disssi(i,j,k) * wombat%f_bdetsi(i,j,k) ! [mol/kg/s] + else + wombat%bsidiss(i,j,k) = 0.0 + endif + !-----------------------------------------------------------------------! !-----------------------------------------------------------------------! !-----------------------------------------------------------------------! - ! [Step 10] Mortality scalings and grazing ! + ! [Step 12] Mortality terms ! !-----------------------------------------------------------------------! !-----------------------------------------------------------------------! !-----------------------------------------------------------------------! @@ -5167,6 +5244,66 @@ subroutine generic_WOMBATmid_update_from_source(tracer_list, Temp, Salt, & zoo_slmor = biozoo / (biozoo + wombat%zookz) mes_slmor = biomes / (biomes + wombat%meskz) + ! Mortality terms + if (biophy>1e-3) then + wombat%phymorl(i,j,k) = wombat%phylmor * fbc * wombat%f_phy(i,j,k) ! [molC/kg/s] + wombat%phymorq(i,j,k) = wombat%phyqmor / mmol_m3_to_mol_kg * wombat%f_phy(i,j,k) * wombat%f_phy(i,j,k) ! [molC/kg/s] + else + wombat%phymorl(i,j,k) = 0.0 + wombat%phymorq(i,j,k) = 0.0 + endif + if (biodia>1e-3) then + wombat%diamorl(i,j,k) = wombat%dialmor * fbc * wombat%f_dia(i,j,k) ! [molC/kg/s] + wombat%diamorq(i,j,k) = wombat%diaqmor / mmol_m3_to_mol_kg * wombat%f_dia(i,j,k) * wombat%f_dia(i,j,k) ! [molC/kg/s] + else + wombat%diamorl(i,j,k) = 0.0 + wombat%diamorq(i,j,k) = 0.0 + endif + if (biozoo>1e-3) then + wombat%zoomorl(i,j,k) = wombat%zoolmor * fbc * wombat%f_zoo(i,j,k) * zoo_slmor ! [molC/kg/s] + wombat%zoomorq(i,j,k) = wombat%zooqmor / mmol_m3_to_mol_kg * wombat%f_zoo(i,j,k) * wombat%f_zoo(i,j,k) ! [molC/kg/s] + else + wombat%zoomorl(i,j,k) = 0.0 + wombat%zoomorq(i,j,k) = 0.0 + endif + if (biomes>1e-3) then + wombat%mesmorl(i,j,k) = wombat%meslmor * fbc * wombat%f_mes(i,j,k) * mes_slmor ! [molC/kg/s] + wombat%mesmorq(i,j,k) = wombat%mesqmor / mmol_m3_to_mol_kg * wombat%f_mes(i,j,k) * wombat%f_mes(i,j,k) ! [molC/kg/s] + else + wombat%mesmorl(i,j,k) = 0.0 + wombat%mesmorq(i,j,k) = 0.0 + endif + if (biobac1>1e-3) then + wombat%bac1morl(i,j,k) = wombat%bac1lmor * fbc * wombat%f_bac1(i,j,k) ! [molC/kg/s] + wombat%bac1morq(i,j,k) = wombat%bac1qmor / mmol_m3_to_mol_kg * wombat%f_bac1(i,j,k) * wombat%f_bac1(i,j,k) ! [molC/kg/s] + else + wombat%bac1morl(i,j,k) = 0.0 + wombat%bac1morq(i,j,k) = 0.0 + endif + if (biobac2>1e-3) then + wombat%bac2morl(i,j,k) = wombat%bac2lmor * fbc * wombat%f_bac2(i,j,k) ! [molC/kg/s] + wombat%bac2morq(i,j,k) = wombat%bac2qmor / mmol_m3_to_mol_kg * wombat%f_bac2(i,j,k) * wombat%f_bac2(i,j,k) ! [molC/kg/s] + else + wombat%bac2morl(i,j,k) = 0.0 + wombat%bac2morq(i,j,k) = 0.0 + endif + if (bioaoa>1e-3) then + wombat%aoamorl(i,j,k) = wombat%aoalmor * fbc * wombat%f_aoa(i,j,k) ! [molC/kg/s] + wombat%aoamorq(i,j,k) = wombat%aoaqmor / mmol_m3_to_mol_kg * wombat%f_aoa(i,j,k) * wombat%f_aoa(i,j,k) ! [molC/kg/s] + else + wombat%aoamorl(i,j,k) = 0.0 + wombat%aoamorq(i,j,k) = 0.0 + endif + + + !-----------------------------------------------------------------------! + !-----------------------------------------------------------------------! + !-----------------------------------------------------------------------! + ! [Step 13] Zooplankton grazing ! + !-----------------------------------------------------------------------! + !-----------------------------------------------------------------------! + !-----------------------------------------------------------------------! + !!!~~~ Zooplankton ~~~!!! ! Grazing function ! [1/s] ! normalize the prey preference kernal to reflect dietary fractions (Gentleman et al., (2003) DSRII) @@ -5211,7 +5348,7 @@ subroutine generic_WOMBATmid_update_from_source(tracer_list, Temp, Salt, & + wombat%zooepsphy * (wombat%zooprefphy(i,j,k) * biophy)**2 & + wombat%zooepsdia * (wombat%zooprefdia(i,j,k) * biodia)**2 & + wombat%zooepsdet * (wombat%zooprefdet(i,j,k) * biodet)**2) - g_npz = wombat%zoogmax * fbc * Xzoo / (wombat%zoogmax * fbc + Xzoo) + g_zoo = wombat%zoogmax * fbc * Xzoo / (wombat%zoogmax * fbc + Xzoo) ! find "apparent" community epsilon (prey capture rate coefficient) wombat%zooeps(i,j,k) = Xzoo / ( (wombat%zooprefbac1(i,j,k) * biobac1)**2 & + (wombat%zooprefbac2(i,j,k) * biobac2)**2 & @@ -5220,6 +5357,66 @@ subroutine generic_WOMBATmid_update_from_source(tracer_list, Temp, Salt, & + (wombat%zooprefdia(i,j,k) * biodia)**2 & + (wombat%zooprefdet(i,j,k) * biodet)**2 ) + ! Grazing, egestion, excretion and assimilation + if (Xzoo>epsi) then + I_Xzoo = 1.0 / Xzoo + wombat%zoograzbac1(i,j,k) = g_zoo * wombat%f_zoo(i,j,k) * wombat%zooepsbac1*(wombat%zooprefbac1(i,j,k)*biobac1)**2 * I_Xzoo ! [molC/kg/s] + wombat%zoograzbac2(i,j,k) = g_zoo * wombat%f_zoo(i,j,k) * wombat%zooepsbac2*(wombat%zooprefbac2(i,j,k)*biobac2)**2 * I_Xzoo ! [molC/kg/s] + wombat%zoograzaoa(i,j,k) = g_zoo * wombat%f_zoo(i,j,k) * wombat%zooepsaoa*(wombat%zooprefaoa(i,j,k)*bioaoa)**2 * I_Xzoo ! [molC/kg/s] + wombat%zoograzphy(i,j,k) = g_zoo * wombat%f_zoo(i,j,k) * wombat%zooepsphy*(wombat%zooprefphy(i,j,k)*biophy)**2 * I_Xzoo ! [molC/kg/s] + wombat%zoograzdia(i,j,k) = g_zoo * wombat%f_zoo(i,j,k) * wombat%zooepsdia*(wombat%zooprefdia(i,j,k)*biodia)**2 * I_Xzoo ! [molC/kg/s] + wombat%zoograzdet(i,j,k) = g_zoo * wombat%f_zoo(i,j,k) * wombat%zooepsdet*(wombat%zooprefdet(i,j,k)*biodet)**2 * I_Xzoo ! [molC/kg/s] + else + wombat%zoograzbac1(i,j,k) = 0.0 + wombat%zoograzbac2(i,j,k) = 0.0 + wombat%zoograzaoa(i,j,k) = 0.0 + wombat%zoograzphy(i,j,k) = 0.0 + wombat%zoograzdia(i,j,k) = 0.0 + wombat%zoograzdet(i,j,k) = 0.0 + endif + ! We follow Le Mezo & Galbraith (2021) L&O - The fecal iron pump: Global impact of animals on the iron stoichiometry... + ! - ingestion, assimilation and excretion of carbon and iron by zooplankton are calculated separately + ! - the idea is to enrich fecal pellets in iron compared to carbon + wombat%zooexcrbac1(i,j,k) = wombat%zoograzbac1(i,j,k) * wombat%zooCingest*(1.0 - wombat%zooCassim) + wombat%zooexcrbac2(i,j,k) = wombat%zoograzbac2(i,j,k) * wombat%zooCingest*(1.0 - wombat%zooCassim) + wombat%zooexcraoa(i,j,k) = wombat%zoograzaoa(i,j,k) * wombat%zooCingest*(1.0 - wombat%zooCassim) + wombat%zooexcrphy(i,j,k) = wombat%zoograzphy(i,j,k) * wombat%zooCingest*(1.0 - wombat%zooCassim) + wombat%zooexcrdia(i,j,k) = wombat%zoograzdia(i,j,k) * wombat%zooCingest*(1.0 - wombat%zooCassim) + wombat%zooexcrdet(i,j,k) = wombat%zoograzdet(i,j,k) * wombat%zooCingest*(1.0 - wombat%zooCassim) + wombat%zooegesbac1(i,j,k) = wombat%zoograzbac1(i,j,k) * (1.0-wombat%zooCingest) + wombat%zooegesbac2(i,j,k) = wombat%zoograzbac2(i,j,k) * (1.0-wombat%zooCingest) + wombat%zooegesaoa(i,j,k) = wombat%zoograzaoa(i,j,k) * (1.0-wombat%zooCingest) + wombat%zooegesphy(i,j,k) = wombat%zoograzphy(i,j,k) * (1.0-wombat%zooCingest) + wombat%zooegesdia(i,j,k) = wombat%zoograzdia(i,j,k) * (1.0-wombat%zooCingest) + wombat%zooegesdet(i,j,k) = wombat%zoograzdet(i,j,k) * (1.0-wombat%zooCingest) + zooegesbac1fe = wombat%zoograzbac1(i,j,k) / wombat%bac1_C2Fe * (1.0-wombat%zooFeingest) + zooegesbac2fe = wombat%zoograzbac2(i,j,k) / wombat%bac2_C2Fe * (1.0-wombat%zooFeingest) + zooegesaoafe = wombat%zoograzaoa(i,j,k) / wombat%aoa_C2Fe * (1.0-wombat%zooFeingest) + zooegesphyfe = wombat%zoograzphy(i,j,k) * phy_Fe2C * (1.0-wombat%zooFeingest) + zooegesdiafe = wombat%zoograzdia(i,j,k) * dia_Fe2C * (1.0-wombat%zooFeingest) + zooegesdetfe = wombat%zoograzdet(i,j,k) * det_Fe2C * (1.0-wombat%zooFeingest) + zooassibac1fe = wombat%zoograzbac1(i,j,k) / wombat%bac1_C2Fe * wombat%zooFeingest*wombat%zooFeassim + zooassibac2fe = wombat%zoograzbac2(i,j,k) / wombat%bac2_C2Fe * wombat%zooFeingest*wombat%zooFeassim + zooassiaoafe = wombat%zoograzaoa(i,j,k) / wombat%aoa_C2Fe * wombat%zooFeingest*wombat%zooFeassim + zooassiphyfe = wombat%zoograzphy(i,j,k) * phy_Fe2C * wombat%zooFeingest*wombat%zooFeassim + zooassidiafe = wombat%zoograzdia(i,j,k) * dia_Fe2C * wombat%zooFeingest*wombat%zooFeassim + zooassidetfe = wombat%zoograzdet(i,j,k) * det_Fe2C * wombat%zooFeingest*wombat%zooFeassim + zooexcrbac1fe = wombat%zoograzbac1(i,j,k) / wombat%bac1_C2Fe * wombat%zooFeingest*(1.0 - wombat%zooFeassim) + zooexcrbac2fe = wombat%zoograzbac2(i,j,k) / wombat%bac2_C2Fe * wombat%zooFeingest*(1.0 - wombat%zooFeassim) + zooexcraoafe = wombat%zoograzaoa(i,j,k) / wombat%aoa_C2Fe * wombat%zooFeingest*(1.0 - wombat%zooFeassim) + zooexcrphyfe = wombat%zoograzphy(i,j,k) * phy_Fe2C * wombat%zooFeingest*(1.0 - wombat%zooFeassim) + zooexcrdiafe = wombat%zoograzdia(i,j,k) * dia_Fe2C * wombat%zooFeingest*(1.0 - wombat%zooFeassim) + zooexcrdetfe = wombat%zoograzdet(i,j,k) * det_Fe2C * wombat%zooFeingest*(1.0 - wombat%zooFeassim) + zooexcrbac1n = wombat%zoograzbac1(i,j,k) / wombat%bac1_C2N & + - (wombat%zoograzbac1(i,j,k) * wombat%zooCingest * wombat%zooCassim / (122.0/16.0)) & + - (wombat%zooegesbac1(i,j,k) / (122.0/16.0)) ! [molN/kg/s] + zooexcrbac2n = wombat%zoograzbac2(i,j,k) / wombat%bac2_C2N & + - (wombat%zoograzbac2(i,j,k) * wombat%zooCingest * wombat%zooCassim / (122.0/16.0)) & + - (wombat%zooegesbac2(i,j,k) / (122.0/16.0)) ! [molN/kg/s] + zooexcraoan = wombat%zoograzaoa(i,j,k) / wombat%aoa_C2N & + - (wombat%zoograzaoa(i,j,k) * wombat%zooCingest * wombat%zooCassim / (122.0/16.0)) & + - (wombat%zooegesaoa(i,j,k) / (122.0/16.0)) ! [molN/kg/s] + !!!~~~ Mesozooplankton ~~~!!! ! Grazing function ! [1/s] @@ -5274,7 +5471,7 @@ subroutine generic_WOMBATmid_update_from_source(tracer_list, Temp, Salt, & + wombat%mesepsdet * (wombat%mesprefdet(i,j,k) * biodet)**2 & + wombat%mesepsbdet * (wombat%mesprefbdet(i,j,k) * biobdet)**2 & + wombat%mesepszoo * (wombat%mesprefzoo(i,j,k) * biozoo)**2 ) - m_npz = wombat%mesgmax * fbc * Xmes / (wombat%mesgmax * fbc + Xmes) + g_mes = wombat%mesgmax * fbc * Xmes / (wombat%mesgmax * fbc + Xmes) ! find "apparent" community epsilon (prey capture rate coefficient) wombat%meseps(i,j,k) = Xmes / ( (wombat%mesprefbac1(i,j,k) * biobac1)**2 & + (wombat%mesprefbac2(i,j,k) * biobac2)**2 & @@ -5285,17 +5482,90 @@ subroutine generic_WOMBATmid_update_from_source(tracer_list, Temp, Salt, & + (wombat%mesprefbdet(i,j,k) * biobdet)**2 & + (wombat%mesprefzoo(i,j,k) * biozoo)**2 ) + ! Grazing, egestion, excretion and assimilation + if (Xmes>epsi) then + I_Xmes = 1.0 / Xmes + wombat%mesgrazbac1(i,j,k) = g_mes * wombat%f_mes(i,j,k) * wombat%mesepsbac1*(wombat%mesprefbac1(i,j,k)*biobac1)**2 * I_Xmes ! [molC/kg/s] + wombat%mesgrazbac2(i,j,k) = g_mes * wombat%f_mes(i,j,k) * wombat%mesepsbac2*(wombat%mesprefbac2(i,j,k)*biobac2)**2 * I_Xmes ! [molC/kg/s] + wombat%mesgrazaoa(i,j,k) = g_mes * wombat%f_mes(i,j,k) * wombat%mesepsaoa*(wombat%mesprefaoa(i,j,k)*bioaoa)**2 * I_Xmes ! [molC/kg/s] + wombat%mesgrazphy(i,j,k) = g_mes * wombat%f_mes(i,j,k) * wombat%mesepsphy*(wombat%mesprefphy(i,j,k)*biophy)**2 * I_Xmes ! [molC/kg/s] + wombat%mesgrazdia(i,j,k) = g_mes * wombat%f_mes(i,j,k) * wombat%mesepsdia*(wombat%mesprefdia(i,j,k)*biodia)**2 * I_Xmes ! [molC/kg/s] + wombat%mesgrazdet(i,j,k) = g_mes * wombat%f_mes(i,j,k) * wombat%mesepsdet*(wombat%mesprefdet(i,j,k)*biodet)**2 * I_Xmes ! [molC/kg/s] + wombat%mesgrazbdet(i,j,k) = g_mes * wombat%f_mes(i,j,k) * wombat%mesepsbdet*(wombat%mesprefbdet(i,j,k)*biobdet)**2 * I_Xmes ! [molC/kg/s] + wombat%mesgrazzoo(i,j,k) = g_mes * wombat%f_mes(i,j,k) * wombat%mesepszoo*(wombat%mesprefzoo(i,j,k)*biozoo)**2 * I_Xmes ! [molC/kg/s] + else + wombat%mesgrazbac1(i,j,k) = 0.0 + wombat%mesgrazbac2(i,j,k) = 0.0 + wombat%mesgrazaoa(i,j,k) = 0.0 + wombat%mesgrazphy(i,j,k) = 0.0 + wombat%mesgrazdia(i,j,k) = 0.0 + wombat%mesgrazdet(i,j,k) = 0.0 + wombat%mesgrazbdet(i,j,k) = 0.0 + wombat%mesgrazzoo(i,j,k) = 0.0 + endif + ! We follow Le Mezo & Galbraith (2021) L&O - The fecal iron pump: Global impact of animals on the iron stoichiometry... + ! - ingestion, assimilation and excretion of carbon and iron by zooplankton are calculated separately + ! - the idea is to enrich fecal pellets in iron compared to carbon + wombat%mesexcrbac1(i,j,k) = wombat%mesgrazbac1(i,j,k) * wombat%mesCingest*(1.0 - wombat%mesCassim) + wombat%mesexcrbac2(i,j,k) = wombat%mesgrazbac2(i,j,k) * wombat%mesCingest*(1.0 - wombat%mesCassim) + wombat%mesexcraoa(i,j,k) = wombat%mesgrazaoa(i,j,k) * wombat%mesCingest*(1.0 - wombat%mesCassim) + wombat%mesexcrphy(i,j,k) = wombat%mesgrazphy(i,j,k) * wombat%mesCingest*(1.0 - wombat%mesCassim) + wombat%mesexcrdia(i,j,k) = wombat%mesgrazdia(i,j,k) * wombat%mesCingest*(1.0 - wombat%mesCassim) + wombat%mesexcrdet(i,j,k) = wombat%mesgrazdet(i,j,k) * wombat%mesCingest*(1.0 - wombat%mesCassim) + wombat%mesexcrbdet(i,j,k) = wombat%mesgrazbdet(i,j,k) * wombat%mesCingest*(1.0 - wombat%mesCassim) + wombat%mesexcrzoo(i,j,k) = wombat%mesgrazzoo(i,j,k) * wombat%mesCingest*(1.0 - wombat%mesCassim) + wombat%mesegesbac1(i,j,k) = wombat%mesgrazbac1(i,j,k) * (1.0 - wombat%mesCingest) + wombat%mesegesbac2(i,j,k) = wombat%mesgrazbac2(i,j,k) * (1.0 - wombat%mesCingest) + wombat%mesegesaoa(i,j,k) = wombat%mesgrazaoa(i,j,k) * (1.0 - wombat%mesCingest) + wombat%mesegesphy(i,j,k) = wombat%mesgrazphy(i,j,k) * (1.0 - wombat%mesCingest) + wombat%mesegesdia(i,j,k) = wombat%mesgrazdia(i,j,k) * (1.0 - wombat%mesCingest) + wombat%mesegesdet(i,j,k) = wombat%mesgrazdet(i,j,k) * (1.0 - wombat%mesCingest) + wombat%mesegesbdet(i,j,k) = wombat%mesgrazbdet(i,j,k) * (1.0 - wombat%mesCingest) + wombat%mesegeszoo(i,j,k) = wombat%mesgrazzoo(i,j,k) * (1.0 - wombat%mesCingest) + mesegesbac1fe = wombat%mesegesbac1(i,j,k) / wombat%bac1_C2Fe * (1.0-wombat%mesFeingest) + mesegesbac2fe = wombat%mesegesbac2(i,j,k) / wombat%bac2_C2Fe * (1.0-wombat%mesFeingest) + mesegesaoafe = wombat%mesegesaoa(i,j,k) / wombat%aoa_C2Fe * (1.0-wombat%mesFeingest) + mesegesphyfe = wombat%mesegesphy(i,j,k) * phy_Fe2C * (1.0-wombat%mesFeingest) + mesegesdiafe = wombat%mesegesdia(i,j,k) * dia_Fe2C * (1.0-wombat%mesFeingest) + mesegesdetfe = wombat%mesegesdet(i,j,k) * det_Fe2C * (1.0-wombat%mesFeingest) + mesegesbdetfe = wombat%mesegesbdet(i,j,k) * bdet_Fe2C * (1.0-wombat%mesFeingest) + mesegeszoofe = wombat%mesegeszoo(i,j,k) * zoo_Fe2C * (1.0-wombat%mesFeingest) + mesassibac1fe = wombat%mesgrazbac1(i,j,k) / wombat%bac1_C2Fe * wombat%mesFeingest*wombat%mesFeassim + mesassibac2fe = wombat%mesgrazbac2(i,j,k) / wombat%bac2_C2Fe * wombat%mesFeingest*wombat%mesFeassim + mesassiaoafe = wombat%mesgrazaoa(i,j,k) / wombat%aoa_C2Fe * wombat%mesFeingest*wombat%mesFeassim + mesassiphyfe = wombat%mesgrazphy(i,j,k) * phy_Fe2C * wombat%mesFeingest*wombat%mesFeassim + mesassidiafe = wombat%mesgrazdia(i,j,k) * dia_Fe2C * wombat%mesFeingest*wombat%mesFeassim + mesassidetfe = wombat%mesgrazdet(i,j,k) * det_Fe2C * wombat%mesFeingest*wombat%mesFeassim + mesassibdetfe = wombat%mesgrazbdet(i,j,k) * bdet_Fe2C * wombat%mesFeingest*wombat%mesFeassim + mesassizoofe = wombat%mesgrazzoo(i,j,k) * zoo_Fe2C * wombat%mesFeingest*wombat%mesFeassim + mesexcrbac1fe = wombat%mesgrazbac1(i,j,k) / wombat%bac1_C2Fe * wombat%mesFeingest*(1.0 - wombat%mesFeassim) + mesexcrbac2fe = wombat%mesgrazbac2(i,j,k) / wombat%bac2_C2Fe * wombat%mesFeingest*(1.0 - wombat%mesFeassim) + mesexcraoafe = wombat%mesgrazaoa(i,j,k) / wombat%aoa_C2Fe * wombat%mesFeingest*(1.0 - wombat%mesFeassim) + mesexcrphyfe = wombat%mesgrazphy(i,j,k) * phy_Fe2C * wombat%mesFeingest*(1.0 - wombat%mesFeassim) + mesexcrdiafe = wombat%mesgrazdia(i,j,k) * dia_Fe2C * wombat%mesFeingest*(1.0 - wombat%mesFeassim) + mesexcrdetfe = wombat%mesgrazdet(i,j,k) * det_Fe2C * wombat%mesFeingest*(1.0 - wombat%mesFeassim) + mesexcrbdetfe = wombat%mesgrazbdet(i,j,k) * bdet_Fe2C * wombat%mesFeingest*(1.0 - wombat%mesFeassim) + mesexcrzoofe = wombat%mesgrazzoo(i,j,k) * zoo_Fe2C * wombat%mesFeingest*(1.0 - wombat%mesFeassim) + mesexcrbac1n = wombat%mesgrazbac1(i,j,k) / wombat%bac1_C2N & + - (wombat%mesgrazbac1(i,j,k) * wombat%mesCingest * wombat%mesCassim / (122.0/16.0)) & + - (wombat%mesegesbac1(i,j,k) / (122.0/16.0)) ! [molN/kg/s] + mesexcrbac2n = wombat%mesgrazbac2(i,j,k) / wombat%bac2_C2N & + - (wombat%mesgrazbac2(i,j,k) * wombat%mesCingest * wombat%mesCassim / (122.0/16.0)) & + - (wombat%mesegesbac2(i,j,k) / (122.0/16.0)) ! [molN/kg/s] + mesexcraoan = wombat%mesgrazaoa(i,j,k) / wombat%aoa_C2N & + - (wombat%mesgrazaoa(i,j,k) * wombat%mesCingest * wombat%mesCassim / (122.0/16.0)) & + - (wombat%mesegesaoa(i,j,k) / (122.0/16.0)) ! [molN/kg/s] + !-----------------------------------------------------------------------! !-----------------------------------------------------------------------! !-----------------------------------------------------------------------! - ! [Step 11] CaCO3 calculations ! + ! [Step 14] Calcium carbonate production and dissolution ! !-----------------------------------------------------------------------! !-----------------------------------------------------------------------! !-----------------------------------------------------------------------! if (do_caco3_dynamics) then - ! PIC:POC ratio is a function of the substrate:inhibitor ratio, which is the ! HCO3- to free H+ ions ratio (mol/umol), following Lehmann & Bach (2024). ! We also add a T-dependent function to scale down CaCO3 production in waters colder @@ -5306,31 +5576,44 @@ subroutine generic_WOMBATmid_update_from_source(tracer_list, Temp, Salt, & (0.55 + 0.45 * tanh(Temp(i,j,k) - 4.0)) ) ! The dissolution rate is a function of omegas for calcite and aragonite, as well the - ! concentration of POC, following Kwon et al., 2024, Science Advances; Table S1 - diss_cal = (wombat%disscal * max(0.0, 1.0 - wombat%omega_cal(i,j,k))**2.2) / 86400.0 - diss_ara = (wombat%dissara * max(0.0, 1.0 - wombat%omega_ara(i,j,k))**1.5) / 86400.0 - diss_det = (wombat%dissdet * wombat%reminr(i,j,k) * (biodet**2.0 + biobdet**2.0)) - wombat%dissrat(i,j,k) = diss_cal + diss_ara + diss_det - + ! concentration of POC, following Kwon et al., 2024, Science Advances; Table S1, and + ! we account for the dissolution due to zooplankton grazing on particulates + wombat%dissratcal(i,j,k) = (wombat%disscal * max(0.0, 1.0 - wombat%omega_cal(i,j,k))**2.2) / 86400.0 + wombat%dissratara(i,j,k) = (wombat%dissara * max(0.0, 1.0 - wombat%omega_ara(i,j,k))**1.5) / 86400.0 + wombat%dissratpoc(i,j,k) = (wombat%dissdet * wombat%reminr(i,j,k) * biodet**2.0) else - wombat%pic2poc(i,j,k) = wombat%f_inorg + 0.025 - wombat%dissrat(i,j,k) = wombat%caco3lrem + wombat%dissratcal(i,j,k) = wombat%caco3lrem + wombat%dissratara(i,j,k) = 0.0 + wombat%dissratpoc(i,j,k) = 0.0 + endif + if (wombat%f_caco3(i,j,k) > epsi) then + wombat%zoodiss(i,j,k) = wombat%zoograzdet(i,j,k) * wombat%fgutdiss * biocaco3/biodet + wombat%mesdiss(i,j,k) = wombat%mesgrazdet(i,j,k) * wombat%fgutdiss * biocaco3/biodet + wombat%caldiss(i,j,k) = wombat%dissratcal(i,j,k) * wombat%f_caco3(i,j,k) ! [mol/kg/s] + wombat%aradiss(i,j,k) = wombat%dissratara(i,j,k) * wombat%f_caco3(i,j,k) ! [mol/kg/s] + wombat%pocdiss(i,j,k) = wombat%dissratpoc(i,j,k) * wombat%f_caco3(i,j,k) ! [mol/kg/s] + else + wombat%zoodiss(i,j,k) = 0.0 + wombat%mesdiss(i,j,k) = 0.0 + wombat%caldiss(i,j,k) = 0.0 + wombat%aradiss(i,j,k) = 0.0 + wombat%pocdiss(i,j,k) = 0.0 endif !-----------------------------------------------------------------------! !-----------------------------------------------------------------------! !-----------------------------------------------------------------------! - ! [Step 12] Implicit nitrogen fixation ! + ! [Step 15] Implicit nitrogen fixation ! !-----------------------------------------------------------------------! !-----------------------------------------------------------------------! !-----------------------------------------------------------------------! if (do_nitrogen_fixation) then ! Temperature dependent maximum growth rate of Trichodesmium (Jiang et al., 2018) - if (Temp(i,j,k)>17.2) then + if (Temp(i,j,k)>15.8) then wombat%trimumax(i,j,k) = ( ( -3.99e-4 * Temp(i,j,k)**3.0 ) + & ( 0.02685 * Temp(i,j,k)**2.0 ) + & ( -0.555 * Temp(i,j,k) ) + 3.633 ) / 86400.0 @@ -5348,29 +5631,73 @@ subroutine generic_WOMBATmid_update_from_source(tracer_list, Temp, Salt, & !-----------------------------------------------------------------------! !-----------------------------------------------------------------------! !-----------------------------------------------------------------------! - ! [Step 13] Facultative bacterial heterotrophy ! + ! [Step 16] Facultative bacterial heterotrophy ! !-----------------------------------------------------------------------! !-----------------------------------------------------------------------! !-----------------------------------------------------------------------! - ! Assumptions: - ! 1. We treat DOC and DON as one molecule of DOM, so they must be treated together - ! 2. Bacteria are initially limited by DOC and electron acceptors, reflecting cellular physiology where energy aquisition is prioritized - ! 3. Bacteria take up DON in its ratio with DOC, but may supplement their growth with available NH4 if the DOC:DON ratio is > 5:1 - ! 4. In the case that not enough NH4 is available to support DOC-limited growth, growth becomes N-limited - ! 5. The affinity of bacteria for DOC decreases as the DOC:DON ratio increases + ! Compute variation in yield due to NOSC (Wang & Kuzyakov 2023 Global Change Biology) + ! - We chose to vary the yield (here in terms of N) from a minimum of 0.1 (10 mol DON+NH4 per mol Biomass) + ! to a max of 0.80 (1.25 mol DON+NH4 per mol Biomass) + zval = wombat%bac_ydonmax - wombat%bac_ydonmin + wombat%bac_ydon(i,j,k) = max(wombat%bac_ydonmin, min(wombat%bac_ydonmax, & + wombat%bac_ydonmin + wombat%f_nosdoc(i,j,k)*(zval) )) + + ! From this base biomass yield on N, compute yields for O2 and anaerobic growth on alternative electron acceptors and DOC + ! [ Zakem et al., 2020 ISME; Buchanan et al., 2025 Science] + ! 1. Find electron potential of the bacterial biomass and DOM + e_dom = 4.0/dom_N2C + 10.9 - 2.0*2.6 - 3.0 ! [Anderson et al., 1995] + e_bac = 4.0*wombat%bac1_C2N + 7.0 - 2.0*2.0 - 3.0 ! [Zimmerman et al., 2014] + f_bac = min(0.9, wombat%bac_ydon(i,j,k) * e_bac/e_dom) ! The fraction of electrons used for biomass synthesis (Eq A9 in Zakem et al. 2020 ISME) + bac1_yoxy = (f_bac/e_bac) / ((1.0 - f_bac)/4.0) ! Yield of N biomass per mol oxygen + bac1_yana = wombat%bac_ydon(i,j,k) * wombat%bacanapen ! Yield of N biomass per mol DON during anaerobic growth + f_bac = bac1_yana * e_bac/e_dom ! The fraction of electrons used for biomass synthesis (Eq A9 in Zakem et al. 2020 ISME) + bac1_yno3 = (f_bac/e_bac) / ((1.0 - f_bac)/4.0) ! Yield of N biomass per mol nitrate + + e_dom = 4.0/dom_N2C + 10.9 - 2.0*2.6 - 3.0 ! [Anderson et al., 1995] + e_bac = 4.0*wombat%bac2_C2N + 7.0 - 2.0*2.0 - 3.0 ! [Zimmerman et al., 2014] + f_bac = min(0.9, wombat%bac_ydon(i,j,k) * e_bac/e_dom ) ! The fraction of electrons used for biomass synthesis (Eq A9 in Zakem et al. 2020 ISME) + bac2_yoxy = (f_bac/e_bac) / ((1.0 - f_bac)/4.0) ! Yield of N biomass per mol oxygen + bac2_yana = wombat%bac_ydon(i,j,k) * wombat%bacanapen ! Yield of N biomass per mol DON during anaerobic growth + f_bac = bac2_yana * e_bac/e_dom ! The fraction of electrons used for N biomass synthesis (Eq A9 in Zakem et al. 2020 ISME) + bac2_yn2o = (f_bac/e_bac) / ((1.0 - f_bac)/1.0) ! Yield of N biomass per mol nitrous oxide + + ! Convert from units N of bacterial biomass to C of bacterial biomass + wombat%bac1_ydoc(i,j,k) = min(wombat%bac_ydonmax*0.8, & + wombat%bac_ydon(i,j,k) * wombat%bac1_C2N * dom_N2C) + bac1_ydonC = wombat%bac_ydon(i,j,k) * wombat%bac1_C2N + bac1_yoxyC = bac1_yoxy * wombat%bac1_C2N + bac1_yanaC = bac1_yana * wombat%bac1_C2N * dom_N2C + bac1_yno3C = bac1_yno3 * wombat%bac1_C2N + wombat%bac2_ydoc(i,j,k) = min(wombat%bac_ydonmax*0.8, & + wombat%bac_ydon(i,j,k) * wombat%bac2_C2N * dom_N2C) + bac2_ydonC = wombat%bac_ydon(i,j,k) * wombat%bac2_C2N + bac2_yoxyC = bac2_yoxy * wombat%bac2_C2N + bac2_yanaC = bac2_yana * wombat%bac2_C2N * dom_N2C + bac2_yn2oC = bac2_yn2o * wombat%bac2_C2N + !!!~~~ Bacterial type #1 ~~~!!! - ! Uptake of DOC (i.e., DOC-limited growth) - wombat%bac1_kdoc(i,j,k) = wombat%bac1_kdoc_min + 2.0 * (wombat%bac1_kdoc_max - wombat%bac1_kdoc_min) & - * max(0.0, min(1.0, dom_N2C / (dom_N2C + (1.0/wombat%bac1_C2N)) )) - bac_Vdoc = wombat%bac1_Vmax_doc * biodoc / (biodoc + wombat%bac1_kdoc(i,j,k)) ! Aerobic growth - bac_Voxy = biooxy * wombat%bac1_poxy - bac_muaer = max(0.0, min( (bac_Voxy/wombat%bac1_yoxy), (bac_Vdoc/wombat%bac1_yaerC) ) ) * fbc - ! Anaerobic growth (will always be lower than aerobic growth when DOC is limiting) - bac_Vno3 = wombat%bac1_Vmax_no3 * biono3 / (biono3 + wombat%bac1_kno3) - bac_muana = max(0.0, min( (bac_Vno3/wombat%bac1_yno3), (bac_Vdoc/wombat%bac1_yanaC) ) ) * fbc + bac_Vdoc = wombat%bac1_Vmax_doc * biodoc / (biodoc + wombat%bac1_kdoc) ! Uptake of DOC (i.e., DOC-limited growth) + bac1_Vdon = wombat%bac1_Vmax_don * biodon / (biodon + wombat%bac1_kdon) ! Uptake of DON (i.e., N-limited growth) + bac1_Vnh4 = wombat%bac1_Vmax_nh4 * bionh4 / (bionh4 + wombat%bac1_knh4) ! Uptake of NH4 (i.e., N-limited growth) + bac_VdFe = wombat%bac1_Vmax_dfe * biofer / (biofer + wombat%bac1_kfer) ! Uptake of dFe (i.e., Fe-limited growth) + bac_Voxy = biooxy * wombat%bac1_poxy ! Uptake of O2 (i.e., O2-limited growth) + bac_gC = bac_Vdoc * wombat%bac1_ydoc(i,j,k) ! Growth of C biomass due to DOC uptake + bac_gN = (bac1_Vdon + bac1_Vnh4) * bac1_ydonC ! Growth of C biomass due to N uptake + bac_gFe = bac_VdFe * wombat%bac1_C2Fe ! Growth of C biomass due to Fe uptake + bac_gEA = bac_Voxy*bac1_yoxyC ! Growth of C biomass due to electron acceptor (O2) uptake + bac_muaer = max(0.0, min( bac_gC, bac_gN, bac_gFe, bac_gEA ) ) * fbc + if (bac_gNbac_muaer) wombat%bac1_fanaer(i,j,k) = 1.0 @@ -5378,460 +5705,172 @@ subroutine generic_WOMBATmid_update_from_source(tracer_list, Temp, Salt, & wombat%bac1_mu(i,j,k) = max(bac_muaer, bac_muana) !!!~~~ Bacterial type #2 ~~~!!! - ! Uptake of DOC (i.e., DOC-limited growth) - wombat%bac2_kdoc(i,j,k) = wombat%bac2_kdoc_min + 2.0 * (wombat%bac2_kdoc_max - wombat%bac2_kdoc_min) & - * max(0.0, min(1.0, dom_N2C / (dom_N2C + (1.0/wombat%bac2_C2N)) )) - bac_Vdoc = wombat%bac2_Vmax_doc * biodoc / (biodoc + wombat%bac2_kdoc(i,j,k)) ! Aerobic growth - bac_Voxy = biooxy * wombat%bac2_poxy - bac_muaer = max(0.0, min( (bac_Voxy/wombat%bac2_yoxy), (bac_Vdoc/wombat%bac2_yaerC) ) ) * fbc - ! Anaerobic growth (will always be lower than aerobic growth when DOC is limiting) + bac_Vdoc = wombat%bac2_Vmax_doc * biodoc / (biodoc + wombat%bac2_kdoc) ! Uptake of DOC (i.e., DOC-limited growth) + bac2_Vdon = wombat%bac2_Vmax_don * biodon / (biodon + wombat%bac2_kdon) ! Uptake of DON (i.e., N-limited growth) + bac2_Vnh4 = wombat%bac2_Vmax_nh4 * bionh4 / (bionh4 + wombat%bac2_knh4) ! Uptake of NH4 (i.e., N-limited growth) + bac_VdFe = wombat%bac2_Vmax_dfe * biofer / (biofer + wombat%bac2_kfer) ! Uptake of dFe (i.e., Fe-limited growth) + bac_Voxy = biooxy * wombat%bac2_poxy ! Uptake of O2 (i.e., O2-limited growth) + bac_gC = bac_Vdoc * wombat%bac2_ydoc(i,j,k) ! Growth of C biomass due to DOC uptake + bac_gN = (bac2_Vdon + bac2_Vnh4) * bac2_ydonC ! Growth of C biomass due to N uptake + bac_gFe = bac_VdFe * wombat%bac2_C2Fe ! Growth of C biomass due to Fe uptake + bac_gEA = bac_Voxy * bac2_yoxyC ! Growth of C biomass due to electron acceptor (O2) uptake + bac_muaer = max(0.0, min( bac_gC, bac_gN, bac_gFe, bac_gEA ) ) * fbc + if (bac_gNbac_muaer) wombat%bac2_fanaer(i,j,k) = 1.0 - ! Take the maximum growth rate as the realised growth rate - wombat%bac2_mu(i,j,k) = max(bac_muaer, bac_muana) - - ! Determine if bacteria are limited by N or Fe - if (wombat%bac1_mu(i,j,k)*wombat%f_bac1(i,j,k)>0.0) then - ! Initial estimate of the C biomass growth, DOC and DON assimilation rate by bacteria - wombat%bac1grow(i,j,k) = wombat%bac1_mu(i,j,k) * wombat%f_bac1(i,j,k) ! [molC/kg/s] - wombat%doc1remi(i,j,k) = wombat%bac1_mu(i,j,k) * wombat%f_bac1(i,j,k) * wombat%bac1_yaerC & - * (1. - wombat%bac1_fanaer(i,j,k)) + wombat%bac1_mu(i,j,k) & - * wombat%f_bac1(i,j,k) * wombat%bac1_yanaC * wombat%bac1_fanaer(i,j,k) ! [molC/kg/s] - wombat%don1remi(i,j,k) = wombat%doc1remi(i,j,k) * dom_N2C ! [molN/kg/s] - - ! Determine degree of N limitation of bacteria and adjust growth rate - if (bionh4>1e-3) then ! First, make sure that NH4 is available for uptake - ! Find out what they need to supplement growth (this assumes that bacteria can achieve a N biomass yield of 1.0) - wombat%bac1unh4(i,j,k) = wombat%bac1grow(i,j,k) / wombat%bac1_C2N - wombat%don1remi(i,j,k) ! [molN/kg/s] - ! Find limitation of NH4 uptake - if (wombat%bac1unh4(i,j,k)>0.0) then ! NH4 is needed to support growth - ! Apply uptake kinetics constraint on bacterial NH4 uptake - bac_limnh4 = bionh4 / (bionh4 + wombat%bac1_knh4 + epsi) - wombat%bac1unh4(i,j,k) = wombat%bac1unh4(i,j,k) * bac_limnh4 ! [molN/kg/s] - ! Make sure bacteria don't remove more NH4 than is available (can take up as much as half at a time) - if (wombat%bac1unh4(i,j,k)>wombat%f_nh4(i,j,k)*0.25/dt) then - wombat%bac1unh4(i,j,k) = wombat%f_nh4(i,j,k)*0.25 / dt ! [molN/kg/s] - endif - ! Recompute N limitation of bacteria (DON + NH4 uptake) - wombat%bac1_lnit(i,j,k) = max(0.0, min(1.0, (wombat%don1remi(i,j,k) + wombat%bac1unh4(i,j,k)) & - / (wombat%bac1grow(i,j,k) / wombat%bac1_C2N) )) - else - wombat%bac1unh4(i,j,k) = 0.0 - wombat%bac1_lnit(i,j,k) = 1.0 - endif - else ! No NH4 available to supplement growth - wombat%bac1unh4(i,j,k) = 0.0 - wombat%bac1_lnit(i,j,k) = max(0.0, min(1.0, (wombat%don1remi(i,j,k) + wombat%bac1unh4(i,j,k)) & - / (wombat%bac1grow(i,j,k) / wombat%bac1_C2N) )) - endif - - ! Determine degree of Fe limitation of bacteria and adjust growth rate - if (biofer>1e-3) then ! First, make sure that dFe is available for uptake - ! Apply uptake kinetics constraint on bacterial dFe uptake - wombat%bac1_lfer(i,j,k) = biofer / (biofer + wombat%bac1_kfer + epsi) - wombat%bac1ufer(i,j,k) = wombat%bac1grow(i,j,k) / wombat%bac1_C2Fe * wombat%bac1_lfer(i,j,k) ! [molFe/kg/s] - ! Check that enough dFe is available to support growth (at any one timestep, bacteria can only take up half of the available dFe) - if (wombat%bac1ufer(i,j,k)>wombat%f_fe(i,j,k)*0.25/dt) then - wombat%bac1ufer(i,j,k) = wombat%f_fe(i,j,k)*0.25 / dt ! [molFe/kg/s] - wombat%bac1_lfer(i,j,k) = wombat%bac1ufer(i,j,k) / (wombat%bac1grow(i,j,k) / wombat%bac1_C2Fe) - endif - else ! No dFe available - wombat%bac1_lfer(i,j,k) = 0.0 - endif - - ! Adjust the growth rate to be the minumum of N-limited or dFe-limited - wombat%bac1_mu(i,j,k) = wombat%bac1_mu(i,j,k) * min(wombat%bac1_lfer(i,j,k), wombat%bac1_lnit(i,j,k)) - - ! Final calculation after growth rate adjustment due to possible N or Fe limitation - wombat%bac1grow(i,j,k) = wombat%bac1_mu(i,j,k) * wombat%f_bac1(i,j,k) ! [molC/kg/s] - wombat%doc1remi(i,j,k) = wombat%bac1_mu(i,j,k) * wombat%f_bac1(i,j,k) * wombat%bac1_yaerC & - * (1. - wombat%bac1_fanaer(i,j,k)) + wombat%bac1_mu(i,j,k) & - * wombat%f_bac1(i,j,k) * wombat%bac1_yanaC * wombat%bac1_fanaer(i,j,k) ! [molC/kg/s] - wombat%don1remi(i,j,k) = wombat%doc1remi(i,j,k) * dom_N2C ! [molN/kg/s] - wombat%bac1ufer(i,j,k) = wombat%bac1grow(i,j,k) / wombat%bac1_C2Fe ! [molFe/kg/s] - wombat%bac1resp(i,j,k) = wombat%bac1_mu(i,j,k) * wombat%f_bac1(i,j,k) * wombat%bac1_yoxy & - * (1. - wombat%bac1_fanaer(i,j,k)) ! [molO2/kg/s] - wombat%bac1deni(i,j,k) = wombat%bac1_mu(i,j,k) * wombat%f_bac1(i,j,k) * wombat%bac1_yno3 & - * wombat%bac1_fanaer(i,j,k) ! [molNO3/kg/s] - endif - - ! Determine if bacteria are limited by N or Fe - if (wombat%bac2_mu(i,j,k)*wombat%f_bac2(i,j,k)>0.0) then - ! Initial estimate of the C biomass growth, DOC and DON assimilation rate by bacteria - wombat%bac2grow(i,j,k) = wombat%bac2_mu(i,j,k) * wombat%f_bac2(i,j,k) ! [molC/kg/s] - wombat%doc2remi(i,j,k) = wombat%bac2_mu(i,j,k) * wombat%f_bac2(i,j,k) * wombat%bac2_yaerC & - * (1. - wombat%bac2_fanaer(i,j,k)) + wombat%bac2_mu(i,j,k) & - * wombat%f_bac2(i,j,k) * wombat%bac2_yanaC * wombat%bac2_fanaer(i,j,k) ! [molC/kg/s] - wombat%don2remi(i,j,k) = wombat%doc2remi(i,j,k) * dom_N2C ! [molN/kg/s] - - ! Determine degree of N limitation of bacteria and adjust growth rate - if (bionh4>1e-3) then ! First, make sure that NH4 is available for uptake - ! Find out what they need to supplement growth (this assumes that bacteria can achieve a N biomass yield of 1.0) - wombat%bac2unh4(i,j,k) = wombat%bac2grow(i,j,k) / wombat%bac2_C2N - wombat%don2remi(i,j,k) ! [molN/kg/s] - ! Find limitation of NH4 uptake - if (wombat%bac2unh4(i,j,k)>0.0) then ! NH4 is needed to support growth - ! Apply uptake kinetics constraint on bacterial NH4 uptake - bac_limnh4 = bionh4 / (bionh4 + wombat%bac2_knh4 + epsi) - wombat%bac2unh4(i,j,k) = wombat%bac2unh4(i,j,k) * bac_limnh4 ! [molN/kg/s] - ! Make sure bacteria don't remove more NH4 than is available (can take up as much as half at a time) - if (wombat%bac2unh4(i,j,k)>wombat%f_nh4(i,j,k)*0.25/dt) then - wombat%bac2unh4(i,j,k) = wombat%f_nh4(i,j,k)*0.25 / dt ! [molN/kg/s] - endif - ! Recompute N limitation of bacteria (DON + NH4 uptake) - wombat%bac2_lnit(i,j,k) = max(0.0, min(1.0, (wombat%don2remi(i,j,k) + wombat%bac2unh4(i,j,k)) & - / (wombat%bac2grow(i,j,k) / wombat%bac2_C2N) )) - else - wombat%bac2unh4(i,j,k) = 0.0 - wombat%bac2_lnit(i,j,k) = 1.0 - endif - else ! No NH4 available to supplement growth - wombat%bac2unh4(i,j,k) = 0.0 - wombat%bac2_lnit(i,j,k) = max(0.0, min(1.0, (wombat%don2remi(i,j,k) + wombat%bac2unh4(i,j,k)) & - / (wombat%bac2grow(i,j,k) / wombat%bac2_C2N) )) - endif - - ! Determine degree of Fe limitation of bacteria and adjust growth rate - if (biofer>1e-3) then ! First, make sure that dFe is available for uptake - ! Apply uptake kinetics constraint on bacterial dFe uptake - wombat%bac2_lfer(i,j,k) = biofer / (biofer + wombat%bac2_kfer + epsi) - wombat%bac2ufer(i,j,k) = wombat%bac2grow(i,j,k) / wombat%bac2_C2Fe * wombat%bac2_lfer(i,j,k) ! [molFe/kg/s] - ! Check that enough dFe is available to support growth (at any one timestep, bacteria can - ! only take up half of the available dFe) - if (wombat%bac2ufer(i,j,k)>wombat%f_fe(i,j,k)*0.25/dt) then - wombat%bac2ufer(i,j,k) = wombat%f_fe(i,j,k)*0.25 / dt ! [molFe/kg/s] - wombat%bac2_lfer(i,j,k) = wombat%bac2ufer(i,j,k) / (wombat%bac2grow(i,j,k) / wombat%bac2_C2Fe) - endif - else ! No dFe available - wombat%bac2_lfer(i,j,k) = 0.0 - endif - - ! Adjust the growth rate to be the minumum of N-limited or dFe-limited - wombat%bac2_mu(i,j,k) = wombat%bac2_mu(i,j,k) * min(wombat%bac2_lfer(i,j,k), wombat%bac2_lnit(i,j,k)) - - ! Final calculation after growth rate adjustment due to possible N or Fe limitation - wombat%bac2grow(i,j,k) = wombat%bac2_mu(i,j,k) * wombat%f_bac2(i,j,k) ! [molC/kg/s] - wombat%doc2remi(i,j,k) = wombat%bac2_mu(i,j,k) * wombat%f_bac2(i,j,k) * wombat%bac2_yaerC & - * (1. - wombat%bac2_fanaer(i,j,k)) + wombat%bac2_mu(i,j,k) & - * wombat%f_bac2(i,j,k) * wombat%bac2_yanaC * wombat%bac2_fanaer(i,j,k) ! [molC/kg/s] - wombat%don2remi(i,j,k) = wombat%doc2remi(i,j,k) * dom_N2C ! [molN/kg/s] - wombat%bac2ufer(i,j,k) = wombat%bac2grow(i,j,k) / wombat%bac2_C2Fe ! [molFe/kg/s] - wombat%bac2resp(i,j,k) = wombat%bac2_mu(i,j,k) * wombat%f_bac2(i,j,k) * wombat%bac2_yoxy & - * (1. - wombat%bac2_fanaer(i,j,k)) ! [molO2/kg/s] - wombat%bac2deni(i,j,k) = wombat%bac2_mu(i,j,k) * wombat%f_bac2(i,j,k) * wombat%bac2_yn2o & - * wombat%bac2_fanaer(i,j,k) ! [molNO3/kg/s] - endif - - !-----------------------------------------------------------------------! - !-----------------------------------------------------------------------! - !-----------------------------------------------------------------------! - ! [Step 14] Chemoautotroph calculations ! - !-----------------------------------------------------------------------! - !-----------------------------------------------------------------------! - !-----------------------------------------------------------------------! - - ! 1. find max growth rate of AOA dependent on temperature (Qin et al., 2015 PNAS) - wombat%aoa_mumax(i,j,k) = max(0.2, 0.029 * Temp(i,j,k) - 0.147) / 86400.0 - ! 2. Limitation terms of oxygen and ammonium substrate affecting uptake - wombat%aoa_loxy(i,j,k) = min(1.0, biooxy * wombat%aoa_poxy) - wombat%aoa_lnh4(i,j,k) = bionh4 / (bionh4 + wombat%aoa_knh4) - aoa_Voxy = biooxy * wombat%aoa_poxy - aoa_Vnh4 = wombat%aoa_ynh4 * wombat%aoa_mumax(i,j,k) * wombat%aoa_lnh4(i,j,k) ! Note: yield * max growth rate = Vmax - ! 3. Redefine growth rate based on these limitations - wombat%aoa_mu(i,j,k) = min( (aoa_Voxy/wombat%aoa_yoxy), (aoa_Vnh4/wombat%aoa_ynh4) ) - - ! 4. Determine N2O yield from ammonia oxidation - ! We use the empirical relationship with O2 from Frey et al. (2023) L&O; page 433 and 434 - ! They find a maximum yield of 3% per mol NO2 produced and a baseline yield of ~0.5% in - ! oxic conditions (i.e., when O2 is not limiting), which we note here is in excess of the - ! baseline yields of other studies (Ji et al., 2018; Santoro et al., 2011; Qin et al., 2017) - wombat%aoa_yn2o(i,j,k) = min(3.0, (0.2 / (biooxy + epsi) + wombat%aoa_yn2omin)) * 0.01 - ! Because Frey give yield of N2O in % per mol NO2 produced, we must solve for mol N2O per mol biomass - ! - aNH4 + bO2 --> cBiomass + dN2O + eNO3 | and Y = N2O produced in % of NO3 produced - ! - d = (a - c) * Y / (2*Y + 1) - wombat%aoa_yn2o(i,j,k) = (wombat%aoa_ynh4 - 1.0/wombat%aoa_C2N) * wombat%aoa_yn2o(i,j,k) & - / (2.0 * wombat%aoa_yn2o(i,j,k) + 1.0) - - if (do_anammox) then - ! Anaerobic ammonium oxidation (anammox) - wombat%aox_lnh4(i,j,k) = bionh4 / (bionh4 + wombat%aoxkn) - wombat%aox_mu(i,j,k) = wombat%aoxmumax * wombat%bbioh**(Temp(i,j,k)) & - * wombat%bac1_fanaer(i,j,k) * wombat%aox_lnh4(i,j,k) - endif - - - !-----------------------------------------------------------------------! - !-----------------------------------------------------------------------! - !-----------------------------------------------------------------------! - ! [Step 15] Sources and sinks ! - !-----------------------------------------------------------------------! - !-----------------------------------------------------------------------! - !-----------------------------------------------------------------------! - - ! Phytoplankton growth - if ((wombat%f_no3(i,j,k) + wombat%f_nh4(i,j,k)) > epsi) then - wombat%phygrow(i,j,k) = wombat%phy_mu(i,j,k) * wombat%f_phy(i,j,k) ! [molC/kg/s] - wombat%diagrow(i,j,k) = wombat%dia_mu(i,j,k) * wombat%f_dia(i,j,k) ! [molC/kg/s] - else - wombat%phygrow(i,j,k) = 0.0 - wombat%diagrow(i,j,k) = 0.0 - endif - - ! Excess DOC exudation (active exudation via overflow hypothesis; Fogg 1966, 1983; Williams 1990; Carlson & Hansell 2014) - ! Up to 50% (set by `overflow`) of assimilated carbon can be exuded by phytoplankton as DOC in high light, low nutrient - ! conditions (Thornton 2014) - ! Some small amount of DOC is exuded via passive diffusion even in the healthiest phytoplankton (Bjornsen 1988) - ! If too much DOC is exuded, bacterial competition for nutrients can limit phytoplankton growth (Bratbak & Thingstad, 1985; - ! Ratnarajah et al. 2021) - ! However, active release of DOM by mixotrophic phytoplankton can "farm" heterotrophic bacteria (Mitra et al. 2013) (NOT - ! YET IMPLEMENTED) - if (wombat%f_phy(i,j,k)>epsi) then - wombat%phydoc(i,j,k) = wombat%phygrow(i,j,k) * max(0.02, wombat%overflow & - * ( wombat%phy_lpar(i,j,k) - min(wombat%phy_lfer(i,j,k), wombat%phy_lnit(i,j,k)) ) ) ! [molC/kg/s] - else - wombat%phydoc(i,j,k) = 0.0 - endif - if (wombat%f_dia(i,j,k)>epsi) then - wombat%diadoc(i,j,k) = wombat%diagrow(i,j,k) * max(0.02, wombat%overflow & - * ( wombat%dia_lpar(i,j,k) - min(wombat%dia_lfer(i,j,k), wombat%dia_lnit(i,j,k)) ) ) ! [molC/kg/s] - else - wombat%diadoc(i,j,k) = 0.0 - endif - - ! Chemoautotrophy - if (wombat%f_aoa(i,j,k)>epsi) then - wombat%aoagrow(i,j,k) = wombat%aoa_mu(i,j,k) * wombat%f_aoa(i,j,k) ! [molC/kg/s] - wombat%ammox(i,j,k) = wombat%aoagrow(i,j,k) * wombat%aoa_ynh4 ! [molNH4/kg/s] - wombat%aoaresp(i,j,k) = wombat%aoagrow(i,j,k) * wombat%aoa_yoxy ! [molO2/kg/s] - else - wombat%aoagrow(i,j,k) = 0.0 - wombat%ammox(i,j,k) = 0.0 - wombat%aoaresp(i,j,k) = 0.0 - endif - - if (wombat%f_nh4(i,j,k) > epsi) then - wombat%anammox(i,j,k) = wombat%aox_mu(i,j,k) * wombat%f_nh4(i,j,k) ! [molN/kg/s] - else - wombat%anammox(i,j,k) = 0.0 - endif - - ! remineralisation - if (wombat%f_det(i,j,k) > epsi) then - wombat%detremi(i,j,k) = wombat%reminr(i,j,k) / mmol_m3_to_mol_kg * wombat%f_det(i,j,k)**2.0 ! [molC/kg/s] - else - wombat%detremi(i,j,k) = 0.0 - endif - if (wombat%f_bdet(i,j,k) > epsi) then - wombat%bdetremi(i,j,k) = wombat%reminr(i,j,k) / mmol_m3_to_mol_kg * wombat%f_bdet(i,j,k)**2.0 ! [molC/kg/s] - else - wombat%bdetremi(i,j,k) = 0.0 - endif - ! Grazing by microzooplankton - if (Xzoo>epsi) then - I_Xzoo = 1.0 / Xzoo - wombat%zoograzbac1(i,j,k) = g_npz * wombat%f_zoo(i,j,k) * wombat%zooepsbac1*(wombat%zooprefbac1(i,j,k)*biobac1)**2 * I_Xzoo ! [molC/kg/s] - wombat%zoograzbac2(i,j,k) = g_npz * wombat%f_zoo(i,j,k) * wombat%zooepsbac2*(wombat%zooprefbac2(i,j,k)*biobac2)**2 * I_Xzoo ! [molC/kg/s] - wombat%zoograzaoa(i,j,k) = g_npz * wombat%f_zoo(i,j,k) * wombat%zooepsaoa*(wombat%zooprefaoa(i,j,k)*bioaoa)**2 * I_Xzoo ! [molC/kg/s] - wombat%zoograzphy(i,j,k) = g_npz * wombat%f_zoo(i,j,k) * wombat%zooepsphy*(wombat%zooprefphy(i,j,k)*biophy)**2 * I_Xzoo ! [molC/kg/s] - wombat%zoograzdia(i,j,k) = g_npz * wombat%f_zoo(i,j,k) * wombat%zooepsdia*(wombat%zooprefdia(i,j,k)*biodia)**2 * I_Xzoo ! [molC/kg/s] - wombat%zoograzdet(i,j,k) = g_npz * wombat%f_zoo(i,j,k) * wombat%zooepsdet*(wombat%zooprefdet(i,j,k)*biodet)**2 * I_Xzoo ! [molC/kg/s] - else - wombat%zoograzbac1(i,j,k) = 0.0 - wombat%zoograzbac2(i,j,k) = 0.0 - wombat%zoograzaoa(i,j,k) = 0.0 - wombat%zoograzphy(i,j,k) = 0.0 - wombat%zoograzdia(i,j,k) = 0.0 - wombat%zoograzdet(i,j,k) = 0.0 - endif - ! We follow Le Mezo & Galbraith (2021) L&O - The fecal iron pump: Global impact of animals on the iron stoichiometry... - ! - ingestion, assimilation and excretion of carbon and iron by zooplankton are calculated separately - ! - the idea is to enrich fecal pellets in iron compared to carbon - wombat%zooexcrbac1(i,j,k) = wombat%zoograzbac1(i,j,k) * wombat%zooCingest*(1.0 - wombat%zooCassim) - wombat%zooexcrbac2(i,j,k) = wombat%zoograzbac2(i,j,k) * wombat%zooCingest*(1.0 - wombat%zooCassim) - wombat%zooexcraoa(i,j,k) = wombat%zoograzaoa(i,j,k) * wombat%zooCingest*(1.0 - wombat%zooCassim) - wombat%zooexcrphy(i,j,k) = wombat%zoograzphy(i,j,k) * wombat%zooCingest*(1.0 - wombat%zooCassim) - wombat%zooexcrdia(i,j,k) = wombat%zoograzdia(i,j,k) * wombat%zooCingest*(1.0 - wombat%zooCassim) - wombat%zooexcrdet(i,j,k) = wombat%zoograzdet(i,j,k) * wombat%zooCingest*(1.0 - wombat%zooCassim) - wombat%zooegesbac1(i,j,k) = wombat%zoograzbac1(i,j,k) * (1.0-wombat%zooCingest) - wombat%zooegesbac2(i,j,k) = wombat%zoograzbac2(i,j,k) * (1.0-wombat%zooCingest) - wombat%zooegesaoa(i,j,k) = wombat%zoograzaoa(i,j,k) * (1.0-wombat%zooCingest) - wombat%zooegesphy(i,j,k) = wombat%zoograzphy(i,j,k) * (1.0-wombat%zooCingest) - wombat%zooegesdia(i,j,k) = wombat%zoograzdia(i,j,k) * (1.0-wombat%zooCingest) - wombat%zooegesdet(i,j,k) = wombat%zoograzdet(i,j,k) * (1.0-wombat%zooCingest) - zooegesbac1fe = wombat%zoograzbac1(i,j,k) / wombat%bac1_C2Fe * (1.0-wombat%zooFeingest) - zooegesbac2fe = wombat%zoograzbac2(i,j,k) / wombat%bac2_C2Fe * (1.0-wombat%zooFeingest) - zooegesaoafe = wombat%zoograzaoa(i,j,k) / wombat%aoa_C2Fe * (1.0-wombat%zooFeingest) - zooegesphyfe = wombat%zoograzphy(i,j,k) * phy_Fe2C * (1.0-wombat%zooFeingest) - zooegesdiafe = wombat%zoograzdia(i,j,k) * dia_Fe2C * (1.0-wombat%zooFeingest) - zooegesdetfe = wombat%zoograzdet(i,j,k) * det_Fe2C * (1.0-wombat%zooFeingest) - zooassibac1fe = wombat%zoograzbac1(i,j,k) / wombat%bac1_C2Fe * wombat%zooFeingest*wombat%zooFeassim - zooassibac2fe = wombat%zoograzbac2(i,j,k) / wombat%bac2_C2Fe * wombat%zooFeingest*wombat%zooFeassim - zooassiaoafe = wombat%zoograzaoa(i,j,k) / wombat%aoa_C2Fe * wombat%zooFeingest*wombat%zooFeassim - zooassiphyfe = wombat%zoograzphy(i,j,k) * phy_Fe2C * wombat%zooFeingest*wombat%zooFeassim - zooassidiafe = wombat%zoograzdia(i,j,k) * dia_Fe2C * wombat%zooFeingest*wombat%zooFeassim - zooassidetfe = wombat%zoograzdet(i,j,k) * det_Fe2C * wombat%zooFeingest*wombat%zooFeassim - zooexcrbac1fe = wombat%zoograzbac1(i,j,k) / wombat%bac1_C2Fe * wombat%zooFeingest*(1.0 - wombat%zooFeassim) - zooexcrbac2fe = wombat%zoograzbac2(i,j,k) / wombat%bac2_C2Fe * wombat%zooFeingest*(1.0 - wombat%zooFeassim) - zooexcraoafe = wombat%zoograzaoa(i,j,k) / wombat%aoa_C2Fe * wombat%zooFeingest*(1.0 - wombat%zooFeassim) - zooexcrphyfe = wombat%zoograzphy(i,j,k) * phy_Fe2C * wombat%zooFeingest*(1.0 - wombat%zooFeassim) - zooexcrdiafe = wombat%zoograzdia(i,j,k) * dia_Fe2C * wombat%zooFeingest*(1.0 - wombat%zooFeassim) - zooexcrdetfe = wombat%zoograzdet(i,j,k) * det_Fe2C * wombat%zooFeingest*(1.0 - wombat%zooFeassim) - zooexcrbac1n = wombat%zoograzbac1(i,j,k) / wombat%bac1_C2N & - - (wombat%zoograzbac1(i,j,k) * wombat%zooCingest * wombat%zooCassim / (122.0/16.0)) & - - (wombat%zooegesbac1(i,j,k) / (122.0/16.0)) ! [molN/kg/s] - zooexcrbac2n = wombat%zoograzbac2(i,j,k) / wombat%bac2_C2N & - - (wombat%zoograzbac2(i,j,k) * wombat%zooCingest * wombat%zooCassim / (122.0/16.0)) & - - (wombat%zooegesbac2(i,j,k) / (122.0/16.0)) ! [molN/kg/s] - zooexcraoan = wombat%zoograzaoa(i,j,k) / wombat%aoa_C2N & - - (wombat%zoograzaoa(i,j,k) * wombat%zooCingest * wombat%zooCassim / (122.0/16.0)) & - - (wombat%zooegesaoa(i,j,k) / (122.0/16.0)) ! [molN/kg/s] - - ! Grazing by mesozooplankton - if (Xmes>epsi) then - I_Xmes = 1.0 / Xmes - wombat%mesgrazbac1(i,j,k) = m_npz * wombat%f_mes(i,j,k) * wombat%mesepsbac1*(wombat%mesprefbac1(i,j,k)*biobac1)**2 * I_Xmes ! [molC/kg/s] - wombat%mesgrazbac2(i,j,k) = m_npz * wombat%f_mes(i,j,k) * wombat%mesepsbac2*(wombat%mesprefbac2(i,j,k)*biobac2)**2 * I_Xmes ! [molC/kg/s] - wombat%mesgrazaoa(i,j,k) = m_npz * wombat%f_mes(i,j,k) * wombat%mesepsaoa*(wombat%mesprefaoa(i,j,k)*bioaoa)**2 * I_Xmes ! [molC/kg/s] - wombat%mesgrazphy(i,j,k) = m_npz * wombat%f_mes(i,j,k) * wombat%mesepsphy*(wombat%mesprefphy(i,j,k)*biophy)**2 * I_Xmes ! [molC/kg/s] - wombat%mesgrazdia(i,j,k) = m_npz * wombat%f_mes(i,j,k) * wombat%mesepsdia*(wombat%mesprefdia(i,j,k)*biodia)**2 * I_Xmes ! [molC/kg/s] - wombat%mesgrazdet(i,j,k) = m_npz * wombat%f_mes(i,j,k) * wombat%mesepsdet*(wombat%mesprefdet(i,j,k)*biodet)**2 * I_Xmes ! [molC/kg/s] - wombat%mesgrazbdet(i,j,k) = m_npz * wombat%f_mes(i,j,k) * wombat%mesepsbdet*(wombat%mesprefbdet(i,j,k)*biobdet)**2 * I_Xmes ! [molC/kg/s] - wombat%mesgrazzoo(i,j,k) = m_npz * wombat%f_mes(i,j,k) * wombat%mesepszoo*(wombat%mesprefzoo(i,j,k)*biozoo)**2 * I_Xmes ! [molC/kg/s] - else - wombat%mesgrazbac1(i,j,k) = 0.0 - wombat%mesgrazbac2(i,j,k) = 0.0 - wombat%mesgrazaoa(i,j,k) = 0.0 - wombat%mesgrazphy(i,j,k) = 0.0 - wombat%mesgrazdia(i,j,k) = 0.0 - wombat%mesgrazdet(i,j,k) = 0.0 - wombat%mesgrazbdet(i,j,k) = 0.0 - wombat%mesgrazzoo(i,j,k) = 0.0 - endif - ! We follow Le Mezo & Galbraith (2021) L&O - The fecal iron pump: Global impact of animals on the iron stoichiometry... - ! - ingestion, assimilation and excretion of carbon and iron by zooplankton are calculated separately - ! - the idea is to enrich fecal pellets in iron compared to carbon - wombat%mesexcrbac1(i,j,k) = wombat%mesgrazbac1(i,j,k) * wombat%mesCingest*(1.0 - wombat%mesCassim) - wombat%mesexcrbac2(i,j,k) = wombat%mesgrazbac2(i,j,k) * wombat%mesCingest*(1.0 - wombat%mesCassim) - wombat%mesexcraoa(i,j,k) = wombat%mesgrazaoa(i,j,k) * wombat%mesCingest*(1.0 - wombat%mesCassim) - wombat%mesexcrphy(i,j,k) = wombat%mesgrazphy(i,j,k) * wombat%mesCingest*(1.0 - wombat%mesCassim) - wombat%mesexcrdia(i,j,k) = wombat%mesgrazdia(i,j,k) * wombat%mesCingest*(1.0 - wombat%mesCassim) - wombat%mesexcrdet(i,j,k) = wombat%mesgrazdet(i,j,k) * wombat%mesCingest*(1.0 - wombat%mesCassim) - wombat%mesexcrbdet(i,j,k) = wombat%mesgrazbdet(i,j,k) * wombat%mesCingest*(1.0 - wombat%mesCassim) - wombat%mesexcrzoo(i,j,k) = wombat%mesgrazzoo(i,j,k) * wombat%mesCingest*(1.0 - wombat%mesCassim) - wombat%mesegesbac1(i,j,k) = wombat%mesgrazbac1(i,j,k) * (1.0 - wombat%mesCingest) - wombat%mesegesbac2(i,j,k) = wombat%mesgrazbac2(i,j,k) * (1.0 - wombat%mesCingest) - wombat%mesegesaoa(i,j,k) = wombat%mesgrazaoa(i,j,k) * (1.0 - wombat%mesCingest) - wombat%mesegesphy(i,j,k) = wombat%mesgrazphy(i,j,k) * (1.0 - wombat%mesCingest) - wombat%mesegesdia(i,j,k) = wombat%mesgrazdia(i,j,k) * (1.0 - wombat%mesCingest) - wombat%mesegesdet(i,j,k) = wombat%mesgrazdet(i,j,k) * (1.0 - wombat%mesCingest) - wombat%mesegesbdet(i,j,k) = wombat%mesgrazbdet(i,j,k) * (1.0 - wombat%mesCingest) - wombat%mesegeszoo(i,j,k) = wombat%mesgrazzoo(i,j,k) * (1.0 - wombat%mesCingest) - mesegesbac1fe = wombat%mesegesbac1(i,j,k) / wombat%bac1_C2Fe * (1.0-wombat%mesFeingest) - mesegesbac2fe = wombat%mesegesbac2(i,j,k) / wombat%bac2_C2Fe * (1.0-wombat%mesFeingest) - mesegesaoafe = wombat%mesegesaoa(i,j,k) / wombat%aoa_C2Fe * (1.0-wombat%mesFeingest) - mesegesphyfe = wombat%mesegesphy(i,j,k) * phy_Fe2C * (1.0-wombat%mesFeingest) - mesegesdiafe = wombat%mesegesdia(i,j,k) * dia_Fe2C * (1.0-wombat%mesFeingest) - mesegesdetfe = wombat%mesegesdet(i,j,k) * det_Fe2C * (1.0-wombat%mesFeingest) - mesegesbdetfe = wombat%mesegesbdet(i,j,k) * bdet_Fe2C * (1.0-wombat%mesFeingest) - mesegeszoofe = wombat%mesegeszoo(i,j,k) * zoo_Fe2C * (1.0-wombat%mesFeingest) - mesassibac1fe = wombat%mesgrazbac1(i,j,k) / wombat%bac1_C2Fe * wombat%mesFeingest*wombat%mesFeassim - mesassibac2fe = wombat%mesgrazbac2(i,j,k) / wombat%bac2_C2Fe * wombat%mesFeingest*wombat%mesFeassim - mesassiaoafe = wombat%mesgrazaoa(i,j,k) / wombat%aoa_C2Fe * wombat%mesFeingest*wombat%mesFeassim - mesassiphyfe = wombat%mesgrazphy(i,j,k) * phy_Fe2C * wombat%mesFeingest*wombat%mesFeassim - mesassidiafe = wombat%mesgrazdia(i,j,k) * dia_Fe2C * wombat%mesFeingest*wombat%mesFeassim - mesassidetfe = wombat%mesgrazdet(i,j,k) * det_Fe2C * wombat%mesFeingest*wombat%mesFeassim - mesassibdetfe = wombat%mesgrazbdet(i,j,k) * bdet_Fe2C * wombat%mesFeingest*wombat%mesFeassim - mesassizoofe = wombat%mesgrazzoo(i,j,k) * zoo_Fe2C * wombat%mesFeingest*wombat%mesFeassim - mesexcrbac1fe = wombat%mesgrazbac1(i,j,k) / wombat%bac1_C2Fe * wombat%mesFeingest*(1.0 - wombat%mesFeassim) - mesexcrbac2fe = wombat%mesgrazbac2(i,j,k) / wombat%bac2_C2Fe * wombat%mesFeingest*(1.0 - wombat%mesFeassim) - mesexcraoafe = wombat%mesgrazaoa(i,j,k) / wombat%aoa_C2Fe * wombat%mesFeingest*(1.0 - wombat%mesFeassim) - mesexcrphyfe = wombat%mesgrazphy(i,j,k) * phy_Fe2C * wombat%mesFeingest*(1.0 - wombat%mesFeassim) - mesexcrdiafe = wombat%mesgrazdia(i,j,k) * dia_Fe2C * wombat%mesFeingest*(1.0 - wombat%mesFeassim) - mesexcrdetfe = wombat%mesgrazdet(i,j,k) * det_Fe2C * wombat%mesFeingest*(1.0 - wombat%mesFeassim) - mesexcrbdetfe = wombat%mesgrazbdet(i,j,k) * bdet_Fe2C * wombat%mesFeingest*(1.0 - wombat%mesFeassim) - mesexcrzoofe = wombat%mesgrazzoo(i,j,k) * zoo_Fe2C * wombat%mesFeingest*(1.0 - wombat%mesFeassim) - mesexcrbac1n = wombat%mesgrazbac1(i,j,k) / wombat%bac1_C2N & - - (wombat%mesgrazbac1(i,j,k) * wombat%mesCingest * wombat%mesCassim / (122.0/16.0)) & - - (wombat%mesegesbac1(i,j,k) / (122.0/16.0)) ! [molN/kg/s] - mesexcrbac2n = wombat%mesgrazbac2(i,j,k) / wombat%bac2_C2N & - - (wombat%mesgrazbac2(i,j,k) * wombat%mesCingest * wombat%mesCassim / (122.0/16.0)) & - - (wombat%mesegesbac2(i,j,k) / (122.0/16.0)) ! [molN/kg/s] - mesexcraoan = wombat%mesgrazaoa(i,j,k) / wombat%aoa_C2N & - - (wombat%mesgrazaoa(i,j,k) * wombat%mesCingest * wombat%mesCassim / (122.0/16.0)) & - - (wombat%mesegesaoa(i,j,k) / (122.0/16.0)) ! [molN/kg/s] + ! Save occurance of anaerobic growth to array + if (bac_muana>bac_muaer) wombat%bac2_fanaer(i,j,k) = 1.0 + ! Take the maximum growth rate as the realised growth rate + wombat%bac2_mu(i,j,k) = max(bac_muaer, bac_muana) - ! Mortality terms - if (biophy>1e-3) then - wombat%phylyse(i,j,k) = wombat%phylmor * fbc * wombat%f_phy(i,j,k) ! [molC/kg/s] - wombat%phymort(i,j,k) = wombat%phyqmor / mmol_m3_to_mol_kg * wombat%f_phy(i,j,k) * wombat%f_phy(i,j,k) ! [molC/kg/s] - else - wombat%phylyse(i,j,k) = 0.0 - wombat%phymort(i,j,k) = 0.0 - endif - if (biodia>1e-3) then - wombat%dialyse(i,j,k) = wombat%dialmor * fbc * wombat%f_dia(i,j,k) ! [molC/kg/s] - wombat%diamort(i,j,k) = wombat%diaqmor / mmol_m3_to_mol_kg * wombat%f_dia(i,j,k) * wombat%f_dia(i,j,k) ! [molC/kg/s] - else - wombat%dialyse(i,j,k) = 0.0 - wombat%diamort(i,j,k) = 0.0 - endif - if (biozoo>1e-3) then - wombat%zooresp(i,j,k) = wombat%zoolmor * fbc * wombat%f_zoo(i,j,k) * zoo_slmor ! [molC/kg/s] - wombat%zoomort(i,j,k) = wombat%zooqmor / mmol_m3_to_mol_kg * wombat%f_zoo(i,j,k) * wombat%f_zoo(i,j,k) ! [molC/kg/s] - else - wombat%zooresp(i,j,k) = 0.0 - wombat%zoomort(i,j,k) = 0.0 - endif - if (biomes>1e-3) then - wombat%mesresp(i,j,k) = wombat%meslmor * fbc * wombat%f_mes(i,j,k) * mes_slmor ! [molC/kg/s] - wombat%mesmort(i,j,k) = wombat%mesqmor / mmol_m3_to_mol_kg * wombat%f_mes(i,j,k) * wombat%f_mes(i,j,k) ! [molC/kg/s] - else - wombat%mesresp(i,j,k) = 0.0 - wombat%mesmort(i,j,k) = 0.0 - endif - if (biobac1>1e-3) then - wombat%bac1mor1(i,j,k) = wombat%bac1lmor * fbc * wombat%f_bac1(i,j,k) ! [molC/kg/s] - wombat%bac1mor2(i,j,k) = wombat%bac1qmor / mmol_m3_to_mol_kg * wombat%f_bac1(i,j,k) * wombat%f_bac1(i,j,k) ! [molC/kg/s] - else - wombat%bac1mor1(i,j,k) = 0.0 - wombat%bac1mor2(i,j,k) = 0.0 - endif - if (biobac2>1e-3) then - wombat%bac2mor1(i,j,k) = wombat%bac2lmor * fbc * wombat%f_bac2(i,j,k) ! [molC/kg/s] - wombat%bac2mor2(i,j,k) = wombat%bac2qmor / mmol_m3_to_mol_kg * wombat%f_bac2(i,j,k) * wombat%f_bac2(i,j,k) ! [molC/kg/s] - else - wombat%bac2mor1(i,j,k) = 0.0 - wombat%bac2mor2(i,j,k) = 0.0 + ! Sources and sinks due to heterotrophic bacterial activity + wombat%bac1grow(i,j,k) = wombat%bac1_mu(i,j,k) * wombat%f_bac1(i,j,k) ! [molC/kg/s] + wombat%doc1remi(i,j,k) = wombat%bac1grow(i,j,k) / wombat%bac1_ydoc(i,j,k) * (1. - wombat%bac1_fanaer(i,j,k)) & + + wombat%bac1grow(i,j,k) / bac1_yanaC * wombat%bac1_fanaer(i,j,k) ! [molC/kg/s] + wombat%bac1nupt(i,j,k) = wombat%bac1grow(i,j,k) / bac1_ydonC * (1. - wombat%bac1_fanaer(i,j,k)) & + + wombat%bac1grow(i,j,k) / (bac1_ydonC * wombat%bacanapen) * wombat%bac1_fanaer(i,j,k) ! [molN/kg/s] + wombat%don1remi(i,j,k) = wombat%bac1nupt(i,j,k) * bac1_Vdon / (bac1_Vdon + bac1_Vnh4 + epsi) ! [molN/kg/s] + wombat%bac1unh4(i,j,k) = wombat%bac1nupt(i,j,k) - wombat%don1remi(i,j,k) ! [molN/kg/s] This is just a diagnostic + wombat%bac1ufer(i,j,k) = wombat%bac1grow(i,j,k) / wombat%bac1_C2Fe ! [molFe/kg/s] + wombat%bac1resp(i,j,k) = wombat%bac1grow(i,j,k) / bac1_yoxyC * (1. - wombat%bac1_fanaer(i,j,k)) ! [molO2/kg/s] + wombat%bac1deni(i,j,k) = wombat%bac1grow(i,j,k) / bac1_yno3C * wombat%bac1_fanaer(i,j,k) ! [molNO3/kg/s] + + wombat%bac2grow(i,j,k) = wombat%bac2_mu(i,j,k) * wombat%f_bac2(i,j,k) ! [molC/kg/s] + wombat%doc2remi(i,j,k) = wombat%bac2grow(i,j,k) / wombat%bac2_ydoc(i,j,k) * (1. - wombat%bac2_fanaer(i,j,k)) & + + wombat%bac2grow(i,j,k) / bac2_yanaC * wombat%bac2_fanaer(i,j,k) ! [molC/kg/s] + wombat%bac2nupt(i,j,k) = wombat%bac2grow(i,j,k) / bac2_ydonC * (1. - wombat%bac2_fanaer(i,j,k)) & + + wombat%bac2grow(i,j,k) / (bac2_ydonC * wombat%bacanapen) * wombat%bac2_fanaer(i,j,k) ! [molN/kg/s] + wombat%don2remi(i,j,k) = wombat%bac2nupt(i,j,k) * bac2_Vdon / (bac2_Vdon + bac2_Vnh4 + epsi) ! [molN/kg/s] + wombat%bac2unh4(i,j,k) = wombat%bac2nupt(i,j,k) - wombat%don2remi(i,j,k) ! [molN/kg/s] + wombat%bac2ufer(i,j,k) = wombat%bac2grow(i,j,k) / wombat%bac2_C2Fe ! [molFe/kg/s] + wombat%bac2resp(i,j,k) = wombat%bac2grow(i,j,k) / bac2_yoxyC * (1. - wombat%bac2_fanaer(i,j,k)) ! [molO2/kg/s] + wombat%bac2deni(i,j,k) = wombat%bac2grow(i,j,k) / bac2_yn2oC * wombat%bac2_fanaer(i,j,k) ! [molN2O/kg/s] + + + !-----------------------------------------------------------------------! + !-----------------------------------------------------------------------! + !-----------------------------------------------------------------------! + ! [Step 17] Chemoautotrophy ! + !-----------------------------------------------------------------------! + !-----------------------------------------------------------------------! + !-----------------------------------------------------------------------! + + ! 1. find max growth rate of AOA dependent on temperature (Qin et al., 2015 PNAS) + wombat%aoa_mumax(i,j,k) = max(0.2, 0.029 * Temp(i,j,k) - 0.147) / 86400.0 + ! 2. Limitation terms of oxygen and ammonium substrate affecting uptake + wombat%aoa_loxy(i,j,k) = min(1.0, biooxy * wombat%aoa_poxy) + wombat%aoa_lnh4(i,j,k) = bionh4 / (bionh4 + wombat%aoa_knh4) + aoa_Voxy = biooxy * wombat%aoa_poxy + aoa_Vnh4 = wombat%aoa_ynh4 * wombat%aoa_mumax(i,j,k) * wombat%aoa_lnh4(i,j,k) ! Note: yield * max growth rate = Vmax + ! 3. Redefine growth rate based on these limitations + wombat%aoa_mu(i,j,k) = min( (aoa_Voxy/wombat%aoa_yoxy), (aoa_Vnh4/wombat%aoa_ynh4) ) + + ! 4. Determine N2O yield from ammonia oxidation as a dependence on ambient O2 + ! We follow McCoy et al. 2026 PNAS who implemented Kelly et al. 2024 Biogeosciences + aoa_en2o_nh4 = 0.022 * exp(-1.5 * biooxy) + wombat%aoa_en2omin + aoa_en2o_hyb = 0.204 * exp(-0.58 * biooxy) + wombat%aoa_en2o(i,j,k) = (wombat%aoa_ynh4 - 1.0/wombat%aoa_C2N) * (0.5 * aoa_en2o_nh4 + aoa_en2o_hyb) + wombat%aoa_eno3(i,j,k) = (wombat%aoa_ynh4 - 1.0/wombat%aoa_C2N) * (1.0 - aoa_en2o_nh4 - 2*aoa_en2o_hyb) + + if (do_anammox) then + ! Anaerobic ammonium oxidation (anammox) + wombat%aox_lnh4(i,j,k) = bionh4 / (bionh4 + wombat%aoxkn) + wombat%aox_mu(i,j,k) = wombat%aoxmumax * wombat%bbioh**(Temp(i,j,k)) & + * wombat%bac1_fanaer(i,j,k) * wombat%aox_lnh4(i,j,k) endif - if (bioaoa>1e-3) then - wombat%aoamor1(i,j,k) = wombat%aoalmor * fbc * wombat%f_aoa(i,j,k) ! [molC/kg/s] - wombat%aoamor2(i,j,k) = wombat%aoaqmor / mmol_m3_to_mol_kg * wombat%f_aoa(i,j,k) * wombat%f_aoa(i,j,k) ! [molC/kg/s] + + ! Chemoautotrophy + if (wombat%f_aoa(i,j,k)>epsi) then + wombat%aoagrow(i,j,k) = wombat%aoa_mu(i,j,k) * wombat%f_aoa(i,j,k) ! [molC/kg/s] + wombat%ammox(i,j,k) = wombat%aoagrow(i,j,k) * wombat%aoa_ynh4 ! [molNH4/kg/s] + wombat%aoaresp(i,j,k) = wombat%aoagrow(i,j,k) * wombat%aoa_yoxy ! [molO2/kg/s] else - wombat%aoamor1(i,j,k) = 0.0 - wombat%aoamor2(i,j,k) = 0.0 + wombat%aoagrow(i,j,k) = 0.0 + wombat%ammox(i,j,k) = 0.0 + wombat%aoaresp(i,j,k) = 0.0 endif - ! dissolution - if (wombat%f_caco3(i,j,k) > epsi) then - wombat%caldiss(i,j,k) = wombat%dissrat(i,j,k) * wombat%f_caco3(i,j,k) ! [mol/kg/s] + if (wombat%f_nh4(i,j,k) > epsi) then + wombat%anammox(i,j,k) = wombat%aox_mu(i,j,k) * wombat%f_nh4(i,j,k) ! [molN/kg/s] else - wombat%caldiss(i,j,k) = 0.0 + wombat%anammox(i,j,k) = 0.0 endif - ! dissolution - if (wombat%f_bdetsi(i,j,k) > epsi) then - wombat%bsidiss(i,j,k) = wombat%disssi(i,j,k) * wombat%f_bdetsi(i,j,k) ! [mol/kg/s] + + + !-----------------------------------------------------------------------! + !-----------------------------------------------------------------------! + !-----------------------------------------------------------------------! + ! [Step 18] Nominal oxidation state of dissolved organic carbon ! + !-----------------------------------------------------------------------! + !-----------------------------------------------------------------------! + !-----------------------------------------------------------------------! + + ! NOSC = 4 - (4C + H - 3N - 2O + 5P - 2S) / C + ! [La Rowe & Van Cappellen, 2011 Geochim. et Cosmochim. Acta] + ! Here, we change the NOS of DOC according to our best guesses of the NOSC + ! of the sources of DOC. These, and their references, are listed in the + ! parameter definitions section near the top of the code. + ! The change in NOSC occurs via: + ! dNOSC/dt = dDOC(source)/dt * ( NOSC(source) - NOSC(in situ)) / [DOC] + + if (wombat%f_doc(i,j,k) > epsi) then + zval = 1.0 / wombat%f_doc(i,j,k) + wombat%nosdoc_overflow(i,j,k) = ( wombat%phydoc(i,j,k) & + + wombat%diadoc(i,j,k) ) & + * ( wombat%noscphyover - wombat%f_nosdoc(i,j,k) ) * zval + wombat%nosdoc_excretion(i,j,k) = ( wombat%zooexcrbac1(i,j,k)*wombat%zooexcrdom & + + wombat%zooexcrbac2(i,j,k)*wombat%zooexcrdom & + + wombat%zooexcraoa(i,j,k)*wombat%zooexcrdom & + + wombat%zooexcrphy(i,j,k)*wombat%zooexcrdom & + + wombat%zooexcrdia(i,j,k)*wombat%zooexcrdom & + + wombat%zooexcrdet(i,j,k)*wombat%zooexcrdom & + + wombat%mesexcrbac1(i,j,k)*wombat%mesexcrdom & + + wombat%mesexcrbac2(i,j,k)*wombat%mesexcrdom & + + wombat%mesexcraoa(i,j,k)*wombat%mesexcrdom & + + wombat%mesexcrphy(i,j,k)*wombat%mesexcrdom & + + wombat%mesexcrdia(i,j,k)*wombat%mesexcrdom & + + wombat%mesexcrdet(i,j,k)*wombat%mesexcrdom & + + wombat%mesexcrbdet(i,j,k)*wombat%mesexcrdom & + + wombat%mesexcrzoo(i,j,k)*wombat%mesexcrdom ) & + * ( wombat%nosczooexcr - wombat%f_nosdoc(i,j,k) ) * zval + wombat%nosdoc_phylysis(i,j,k) = ( wombat%phymorl(i,j,k) & + + wombat%diamorl(i,j,k) ) & + * ( wombat%noscphylyse - wombat%f_nosdoc(i,j,k) ) * zval + wombat%nosdoc_baclysis(i,j,k) = ( wombat%bac1morl(i,j,k) & + + wombat%bac1morq(i,j,k) & + + wombat%bac2morl(i,j,k) & + + wombat%bac2morq(i,j,k) & + + wombat%aoamorl(i,j,k) & + + wombat%aoamorq(i,j,k) ) & + * ( wombat%noscbaclyse - wombat%f_nosdoc(i,j,k) ) * zval + wombat%nosdoc_dethydro(i,j,k) = ( wombat%detremi(i,j,k) & + + wombat%bdetremi(i,j,k) ) & + * ( wombat%noscdethydr - wombat%f_nosdoc(i,j,k) ) * zval + wombat%nosdoc_docconsu(i,j,k) = ( wombat%doc1remi(i,j,k) & + + wombat%doc2remi(i,j,k) ) & + * ( wombat%f_nosdoc(i,j,k) - (wombat%f_nosdoc(i,j,k)+wombat%noscdocproc) ) * zval else - wombat%bsidiss(i,j,k) = 0.0 + wombat%nosdoc_overflow(i,j,k) = 0.0 + wombat%nosdoc_excretion(i,j,k) = 0.0 + wombat%nosdoc_phylysis(i,j,k) = 0.0 + wombat%nosdoc_baclysis(i,j,k) = 0.0 + wombat%nosdoc_dethydro(i,j,k) = 0.0 + wombat%nosdoc_docconsu(i,j,k) = 0.0 endif !-----------------------------------------------------------------------! !-----------------------------------------------------------------------! !-----------------------------------------------------------------------! - ! [Step 16] Tracer tendencies ! + ! [Step 19] Tracer tendencies ! !-----------------------------------------------------------------------! !-----------------------------------------------------------------------! !-----------------------------------------------------------------------! @@ -5839,558 +5878,584 @@ subroutine generic_WOMBATmid_update_from_source(tracer_list, Temp, Salt, & ! Nitrate equation ! [molN/kg] !---------------------------------------------------------------------- wombat%f_no3(i,j,k) = wombat%f_no3(i,j,k) + dtsb * ( & - (wombat%ammox(i,j,k) - wombat%aoagrow(i,j,k) * (1.0/wombat%aoa_C2N + 2*wombat%aoa_yn2o(i,j,k))) & - - wombat%bac1deni(i,j,k) ) & - - dtsb * 16./122. * ( & - wombat%phygrow(i,j,k) * wombat%phy_lno3(i,j,k) / ( wombat%phy_lnit(i,j,k) + epsi ) & - + wombat%diagrow(i,j,k) * wombat%dia_lno3(i,j,k) / ( wombat%dia_lnit(i,j,k) + epsi ) ) + wombat%aoagrow(i,j,k) * wombat%aoa_eno3(i,j,k) & + - wombat%bac1deni(i,j,k) ) & + - dtsb * 16./122. * ( & + wombat%phygrow(i,j,k) * wombat%phy_lno3(i,j,k) / ( wombat%phy_lnit(i,j,k) + epsi ) & + + wombat%diagrow(i,j,k) * wombat%dia_lno3(i,j,k) / ( wombat%dia_lnit(i,j,k) + epsi ) ) ! Ammonium equation ! [molN/kg] !---------------------------------------------------------------------- wombat%f_nh4(i,j,k) = wombat%f_nh4(i,j,k) + dtsb * ( & - zooexcrbac1n*(1.0-wombat%zooexcrdom) & - + mesexcrbac1n*(1.0-wombat%mesexcrdom) & - + zooexcrbac2n*(1.0-wombat%zooexcrdom) & - + mesexcrbac2n*(1.0-wombat%mesexcrdom) & - + zooexcraoan*(1.0-wombat%zooexcrdom) & - + mesexcraoan*(1.0-wombat%mesexcrdom) & - + wombat%nitrfix(i,j,k) & - + (wombat%don1remi(i,j,k) - wombat%bac1grow(i,j,k)/wombat%bac1_C2N) & - + (wombat%don2remi(i,j,k) - wombat%bac2grow(i,j,k)/wombat%bac2_C2N) & - - wombat%ammox(i,j,k) & - - wombat%anammox(i,j,k) ) & - + dtsb * 16./122. * ( & - wombat%zooresp(i,j,k) & - + wombat%mesresp(i,j,k) & - + wombat%zooexcrphy(i,j,k)*(1.0-wombat%zooexcrdom) & - + wombat%zooexcrdia(i,j,k)*(1.0-wombat%zooexcrdom) & - + wombat%zooexcrdet(i,j,k)*(1.0-wombat%zooexcrdom) & - + wombat%mesexcrphy(i,j,k)*(1.0-wombat%mesexcrdom) & - + wombat%mesexcrdia(i,j,k)*(1.0-wombat%mesexcrdom) & - + wombat%mesexcrdet(i,j,k)*(1.0-wombat%mesexcrdom) & - + wombat%mesexcrbdet(i,j,k)*(1.0-wombat%mesexcrdom) & - + wombat%mesexcrzoo(i,j,k)*(1.0-wombat%mesexcrdom) & - - wombat%phygrow(i,j,k) * wombat%phy_lnh4(i,j,k) / ( wombat%phy_lnit(i,j,k) + epsi ) & - - wombat%diagrow(i,j,k) * wombat%dia_lnh4(i,j,k) / ( wombat%dia_lnit(i,j,k) + epsi ) ) + ( zooexcrbac1n & + + zooexcrbac2n & + + zooexcraoan ) * (1.0-wombat%zooexcrdom) & + + ( mesexcrbac2n & + + mesexcrbac1n & + + mesexcraoan ) * (1.0-wombat%mesexcrdom) & + + wombat%nitrfix(i,j,k) & + + (wombat%don1remi(i,j,k) - wombat%bac1grow(i,j,k)/wombat%bac1_C2N) & + + (wombat%don2remi(i,j,k) - wombat%bac2grow(i,j,k)/wombat%bac2_C2N) & + - wombat%ammox(i,j,k) & + - wombat%anammox(i,j,k) ) + dtsb * 16./122. * ( & + wombat%zoomorl(i,j,k) & + + wombat%mesmorl(i,j,k) & + + ( wombat%zooexcrphy(i,j,k) & + + wombat%zooexcrdia(i,j,k) & + + wombat%zooexcrdet(i,j,k) ) * (1.0-wombat%zooexcrdom) & + + ( wombat%mesexcrphy(i,j,k) & + + wombat%mesexcrdia(i,j,k) & + + wombat%mesexcrdet(i,j,k) & + + wombat%mesexcrbdet(i,j,k) & + + wombat%mesexcrzoo(i,j,k) ) * (1.0-wombat%mesexcrdom) & + - wombat%phygrow(i,j,k) * wombat%phy_lnh4(i,j,k) / ( wombat%phy_lnit(i,j,k) + epsi ) & + - wombat%diagrow(i,j,k) * wombat%dia_lnh4(i,j,k) / ( wombat%dia_lnit(i,j,k) + epsi ) ) ! Silicic acid equation ! [molSi/kg] ! Microzooplankton grazing on diatoms produces clean, small, largely suspended ! pieces of biogenic silica prone to rapid dissolution [Krause et al., 2010 L&O] !---------------------------------------------------------------------- wombat%f_sil(i,j,k) = wombat%f_sil(i,j,k) + dtsb * ( & - wombat%dialyse(i,j,k) * dia_Si2C & - - wombat%dia_silupt(i,j,k) & - + wombat%zoograzdia(i,j,k) * dia_Si2C & - + wombat%bsidiss(i,j,k) ) + wombat%diamorl(i,j,k) * dia_Si2C & + - wombat%dia_silupt(i,j,k) & + + wombat%zoograzdia(i,j,k) * dia_Si2C & + + wombat%bsidiss(i,j,k) ) ! Nitrous oxide equation ! [molN2/kg] ! pjb: note that we track N2O in units of mol N2/kg, accounting for the two N atoms !---------------------------------------------------------------------- wombat%f_n2o(i,j,k) = wombat%f_n2o(i,j,k) + dtsb * ( & - wombat%aoagrow(i,j,k) * wombat%aoa_yn2o(i,j,k) & - + wombat%bac1deni(i,j,k)/2.0 & - - wombat%bac2deni(i,j,k) ) + wombat%aoagrow(i,j,k) * wombat%aoa_en2o(i,j,k) & + + wombat%bac1deni(i,j,k)/2.0 & + - wombat%bac2deni(i,j,k) ) ! Phytoplankton equation ! [molC/kg] !----------------------------------------------------------------------- - wombat%f_phy(i,j,k) = wombat%f_phy(i,j,k) + dtsb * ( & - wombat%phygrow(i,j,k) & - - wombat%phylyse(i,j,k) & - - wombat%phymort(i,j,k) & - - wombat%zoograzphy(i,j,k) & - - wombat%mesgrazphy(i,j,k) ) + wombat%f_phy(i,j,k) = wombat%f_phy(i,j,k) + dtsb * ( & + wombat%phygrow(i,j,k) & + - wombat%phymorl(i,j,k) & + - wombat%phymorq(i,j,k) & + - wombat%zoograzphy(i,j,k) & + - wombat%mesgrazphy(i,j,k) ) ! Phytoplankton chlorophyll equation ! [molChl/kg] !----------------------------------------------------------------------- - wombat%f_pchl(i,j,k) = wombat%f_pchl(i,j,k) + dtsb * ( & - wombat%pchl_mu(i,j,k) & - - wombat%phylyse(i,j,k) * phy_chlc & - - wombat%phymort(i,j,k) * phy_chlc & - - wombat%zoograzphy(i,j,k) * phy_chlc & - - wombat%mesgrazphy(i,j,k) * phy_chlc ) + wombat%f_pchl(i,j,k) = wombat%f_pchl(i,j,k) + dtsb * ( & + wombat%pchl_mu(i,j,k) & + - ( wombat%phymorl(i,j,k) & + + wombat%phymorq(i,j,k) & + + wombat%zoograzphy(i,j,k) & + + wombat%mesgrazphy(i,j,k) ) * phy_chlc ) ! Phytoplankton iron equation ! [molFe/kg] !----------------------------------------------------------------------- - wombat%f_phyfe(i,j,k) = wombat%f_phyfe(i,j,k) + dtsb * ( & - wombat%phy_dfeupt(i,j,k) & - - wombat%phylyse(i,j,k) * phy_Fe2C & - - wombat%phymort(i,j,k) * phy_Fe2C & - - wombat%zoograzphy(i,j,k) * phy_Fe2C & - - wombat%mesgrazphy(i,j,k) * phy_Fe2C ) + wombat%f_phyfe(i,j,k) = wombat%f_phyfe(i,j,k) + dtsb * ( & + wombat%phy_dfeupt(i,j,k) & + - ( wombat%phymorl(i,j,k) & + + wombat%phymorq(i,j,k) & + + wombat%zoograzphy(i,j,k) & + + wombat%mesgrazphy(i,j,k) ) * phy_Fe2C ) ! Microphytoplankton equation ! [molC/kg] !----------------------------------------------------------------------- wombat%f_dia(i,j,k) = wombat%f_dia(i,j,k) + dtsb * ( & - wombat%diagrow(i,j,k) & - - wombat%dialyse(i,j,k) & - - wombat%diamort(i,j,k) & - - wombat%mesgrazdia(i,j,k) & - - wombat%zoograzdia(i,j,k) ) + wombat%diagrow(i,j,k) & + - wombat%diamorl(i,j,k) & + - wombat%diamorq(i,j,k) & + - wombat%mesgrazdia(i,j,k) & + - wombat%zoograzdia(i,j,k) ) - ! Microphytoplankton chlorodiall equation ! [molChl/kg] + ! Microphytoplankton chlorophyll equation ! [molChl/kg] !----------------------------------------------------------------------- - wombat%f_dchl(i,j,k) = wombat%f_dchl(i,j,k) + dtsb * ( & - wombat%dchl_mu(i,j,k) & - - wombat%dialyse(i,j,k) * dia_chlc & - - wombat%diamort(i,j,k) * dia_chlc & - - wombat%zoograzdia(i,j,k) * dia_chlc & - - wombat%mesgrazdia(i,j,k) * dia_chlc ) + wombat%f_dchl(i,j,k) = wombat%f_dchl(i,j,k) + dtsb * ( & + wombat%dchl_mu(i,j,k) & + - ( wombat%diamorl(i,j,k) & + + wombat%diamorq(i,j,k) & + + wombat%zoograzdia(i,j,k) & + + wombat%mesgrazdia(i,j,k) ) * dia_chlc ) ! Microphytoplankton iron equation ! [molFe/kg] !----------------------------------------------------------------------- - wombat%f_diafe(i,j,k) = wombat%f_diafe(i,j,k) + dtsb * ( & - wombat%dia_dfeupt(i,j,k) & - - wombat%dialyse(i,j,k) * dia_Fe2C & - - wombat%diamort(i,j,k) * dia_Fe2C & - - wombat%zoograzdia(i,j,k) * dia_Fe2C & - - wombat%mesgrazdia(i,j,k) * dia_Fe2C ) + wombat%f_diafe(i,j,k) = wombat%f_diafe(i,j,k) + dtsb * ( & + wombat%dia_dfeupt(i,j,k) & + - ( wombat%diamorl(i,j,k) & + + wombat%diamorq(i,j,k) & + + wombat%zoograzdia(i,j,k) & + + wombat%mesgrazdia(i,j,k) ) * dia_Fe2C ) ! Microphytoplankton silicon equation ! [molSi/kg] !---------------------------------------------------------------------- wombat%f_diasi(i,j,k) = wombat%f_diasi(i,j,k) + dtsb * ( & - wombat%dia_silupt(i,j,k) & - - wombat%dialyse(i,j,k) * dia_Si2C & - - wombat%diamort(i,j,k) * dia_Si2C & - - wombat%mesgrazdia(i,j,k) * dia_Si2C & - - wombat%zoograzdia(i,j,k) * dia_Si2C ) + wombat%dia_silupt(i,j,k) & + - ( wombat%diamorl(i,j,k) & + + wombat%diamorq(i,j,k) & + + wombat%mesgrazdia(i,j,k) & + + wombat%zoograzdia(i,j,k) ) * dia_Si2C ) ! Estimate primary productivity from phytoplankton growth ! [molC/kg/s] - wombat%pprod_gross(i,j,k) = wombat%pprod_gross(i,j,k) + dtsb * ( & - wombat%phygrow(i,j,k) + wombat%diagrow(i,j,k) ) + wombat%rpp3d(i,j,k) = wombat%rpp3d(i,j,k) + dtsb * ( & + wombat%phygrow(i,j,k) * wombat%phy_lnh4(i,j,k) / ( wombat%phy_lnit(i,j,k) + epsi ) & + + wombat%diagrow(i,j,k) * wombat%dia_lnh4(i,j,k) / ( wombat%dia_lnit(i,j,k) + epsi ) ) ! Net primary productivity (gross PP minus linear mortality) ! [molC/kg/s] wombat%npp3d(i,j,k) = wombat%npp3d(i,j,k) + dtsb * ( & - wombat%phygrow(i,j,k) - wombat%phylyse(i,j,k) & - + wombat%diagrow(i,j,k) - wombat%dialyse(i,j,k) ) + wombat%phygrow(i,j,k) + wombat%diagrow(i,j,k) ) ! Zooplankton equation ! [molC/kg] !----------------------------------------------------------------------- - wombat%f_zoo(i,j,k) = wombat%f_zoo(i,j,k) + dtsb * ( & - wombat%zooCingest*wombat%zooCassim * wombat%zoograzbac1(i,j,k) & - + wombat%zooCingest*wombat%zooCassim * wombat%zoograzbac2(i,j,k) & - + wombat%zooCingest*wombat%zooCassim * wombat%zoograzaoa(i,j,k) & - + wombat%zooCingest*wombat%zooCassim * wombat%zoograzphy(i,j,k) & - + wombat%zooCingest*wombat%zooCassim * wombat%zoograzdia(i,j,k) & - + wombat%zooCingest*wombat%zooCassim * wombat%zoograzdet(i,j,k) & - - wombat%mesgrazzoo(i,j,k) & - - wombat%zooresp(i,j,k) & - - wombat%zoomort(i,j,k) ) + wombat%f_zoo(i,j,k) = wombat%f_zoo(i,j,k) + dtsb * ( & + ( wombat%zoograzbac1(i,j,k) & + + wombat%zoograzbac2(i,j,k) & + + wombat%zoograzaoa(i,j,k) & + + wombat%zoograzphy(i,j,k) & + + wombat%zoograzdia(i,j,k) & + + wombat%zoograzdet(i,j,k) ) * wombat%zooCingest*wombat%zooCassim & + - wombat%mesgrazzoo(i,j,k) & + - wombat%zoomorl(i,j,k) & + - wombat%zoomorq(i,j,k) ) ! Zooplankton iron equation ! [molFe/kg] !----------------------------------------------------------------------- - wombat%f_zoofe(i,j,k) = wombat%f_zoofe(i,j,k) + dtsb * ( & - zooassibac1fe & - + zooassibac2fe & - + zooassiaoafe & - + zooassiphyfe & - + zooassidiafe & - + zooassidetfe & - - wombat%mesgrazzoo(i,j,k) * zoo_Fe2C & - - wombat%zooresp(i,j,k) * zoo_Fe2C & - - wombat%zoomort(i,j,k) * zoo_Fe2C ) + wombat%f_zoofe(i,j,k) = wombat%f_zoofe(i,j,k) + dtsb * ( & + zooassibac1fe & + + zooassibac2fe & + + zooassiaoafe & + + zooassiphyfe & + + zooassidiafe & + + zooassidetfe & + - ( wombat%mesgrazzoo(i,j,k) & + + wombat%zoomorl(i,j,k) & + + wombat%zoomorq(i,j,k) ) * zoo_Fe2C ) ! Mesozooplankton equation ! [molC/kg] !----------------------------------------------------------------------- - wombat%f_mes(i,j,k) = wombat%f_mes(i,j,k) + dtsb * ( & - wombat%mesCingest*wombat%mesCassim * wombat%mesgrazbac1(i,j,k) & - + wombat%mesCingest*wombat%mesCassim * wombat%mesgrazbac2(i,j,k) & - + wombat%mesCingest*wombat%mesCassim * wombat%mesgrazaoa(i,j,k) & - + wombat%mesCingest*wombat%mesCassim * wombat%mesgrazphy(i,j,k) & - + wombat%mesCingest*wombat%mesCassim * wombat%mesgrazdia(i,j,k) & - + wombat%mesCingest*wombat%mesCassim * wombat%mesgrazdet(i,j,k) & - + wombat%mesCingest*wombat%mesCassim * wombat%mesgrazbdet(i,j,k) & - + wombat%mesCingest*wombat%mesCassim * wombat%mesgrazzoo(i,j,k) & - - wombat%mesresp(i,j,k) & - - wombat%mesmort(i,j,k) ) + wombat%f_mes(i,j,k) = wombat%f_mes(i,j,k) + dtsb * ( & + ( wombat%mesgrazbac1(i,j,k) & + + wombat%mesgrazbac2(i,j,k) & + + wombat%mesgrazaoa(i,j,k) & + + wombat%mesgrazphy(i,j,k) & + + wombat%mesgrazdia(i,j,k) & + + wombat%mesgrazdet(i,j,k) & + + wombat%mesgrazbdet(i,j,k) & + + wombat%mesgrazzoo(i,j,k) ) * wombat%mesCingest*wombat%mesCassim & + - wombat%mesmorl(i,j,k) & + - wombat%mesmorq(i,j,k) ) ! Mesozooplankton iron equation ! [molFe/kg] !----------------------------------------------------------------------- - wombat%f_mesfe(i,j,k) = wombat%f_mesfe(i,j,k) + dtsb * ( & - mesassibac1fe & - + mesassibac2fe & - + mesassiaoafe & - + mesassiphyfe & - + mesassidiafe & - + mesassidetfe & - + mesassibdetfe & - + mesassizoofe & - - wombat%mesresp(i,j,k) * mes_Fe2C & - - wombat%mesmort(i,j,k) * mes_Fe2C ) + wombat%f_mesfe(i,j,k) = wombat%f_mesfe(i,j,k) + dtsb * ( & + mesassibac1fe & + + mesassibac2fe & + + mesassiaoafe & + + mesassiphyfe & + + mesassidiafe & + + mesassidetfe & + + mesassibdetfe & + + mesassizoofe & + - ( wombat%mesmorl(i,j,k) & + + wombat%mesmorq(i,j,k) ) * mes_Fe2C ) ! Estimate secondary productivity from zooplankton growth ! [molC/kg/s] - wombat%zprod_gross(i,j,k) = wombat%zprod_gross(i,j,k) + dtsb * ( & - wombat%zooCingest*wombat%zooCassim * wombat%zoograzbac1(i,j,k) & - + wombat%zooCingest*wombat%zooCassim * wombat%zoograzbac2(i,j,k) & - + wombat%zooCingest*wombat%zooCassim * wombat%zoograzaoa(i,j,k) & - + wombat%zooCingest*wombat%zooCassim * wombat%zoograzphy(i,j,k) & - + wombat%zooCingest*wombat%zooCassim * wombat%zoograzdia(i,j,k) & - + wombat%zooCingest*wombat%zooCassim * wombat%zoograzdet(i,j,k) & - + wombat%mesCingest*wombat%mesCassim * wombat%mesgrazbac1(i,j,k) & - + wombat%mesCingest*wombat%mesCassim * wombat%mesgrazbac2(i,j,k) & - + wombat%mesCingest*wombat%mesCassim * wombat%mesgrazaoa(i,j,k) & - + wombat%mesCingest*wombat%mesCassim * wombat%mesgrazphy(i,j,k) & - + wombat%mesCingest*wombat%mesCassim * wombat%mesgrazdia(i,j,k) & - + wombat%mesCingest*wombat%mesCassim * wombat%mesgrazdet(i,j,k) & - + wombat%mesCingest*wombat%mesCassim * wombat%mesgrazbdet(i,j,k) & - + wombat%mesCingest*wombat%mesCassim * wombat%mesgrazzoo(i,j,k) ) + wombat%zsp3d(i,j,k) = wombat%zsp3d(i,j,k) + dtsb * ( & + ( wombat%zoograzbac1(i,j,k) & + + wombat%zoograzbac2(i,j,k) & + + wombat%zoograzaoa(i,j,k) & + + wombat%zoograzphy(i,j,k) & + + wombat%zoograzdia(i,j,k) & + + wombat%zoograzdet(i,j,k) ) * wombat%zooCingest*wombat%zooCassim & + + ( wombat%mesgrazbac1(i,j,k) & + + wombat%mesgrazbac2(i,j,k) & + + wombat%mesgrazaoa(i,j,k) & + + wombat%mesgrazphy(i,j,k) & + + wombat%mesgrazdia(i,j,k) & + + wombat%mesgrazdet(i,j,k) & + + wombat%mesgrazbdet(i,j,k) & + + wombat%mesgrazzoo(i,j,k) ) * wombat%mesCingest*wombat%mesCassim ) ! Detritus equation ! [molC/kg] !----------------------------------------------------------------------- wombat%f_det(i,j,k) = wombat%f_det(i,j,k) + dtsb * ( & - wombat%zooegesbac1(i,j,k) & - + wombat%zooegesbac2(i,j,k) & - + wombat%zooegesaoa(i,j,k) & - + wombat%zooegesphy(i,j,k) & - + wombat%zooegesdia(i,j,k) & - + wombat%zooegesdet(i,j,k) & - + wombat%phymort(i,j,k) & - + wombat%zoomort(i,j,k) & - - wombat%zoograzdet(i,j,k) & - - wombat%mesgrazdet(i,j,k) & - - wombat%detremi(i,j,k) ) + wombat%zooegesbac1(i,j,k) & + + wombat%zooegesbac2(i,j,k) & + + wombat%zooegesaoa(i,j,k) & + + wombat%zooegesphy(i,j,k) & + + wombat%zooegesdia(i,j,k) & + + wombat%zooegesdet(i,j,k) & + + wombat%phymorq(i,j,k) & + + wombat%zoomorq(i,j,k) & + - wombat%zoograzdet(i,j,k) & + - wombat%mesgrazdet(i,j,k) & + - wombat%detremi(i,j,k) ) ! Detrital iron equation ! [molFe/kg] !----------------------------------------------------------------------- wombat%f_detfe(i,j,k) = wombat%f_detfe(i,j,k) + dtsb * ( & - zooegesbac1fe & - + zooegesbac2fe & - + zooegesaoafe & - + zooegesphyfe & - + zooegesdiafe & - + zooegesdetfe & - + wombat%phymort(i,j,k) * phy_Fe2C & - + wombat%zoomort(i,j,k) * zoo_Fe2C & - - wombat%zoograzdet(i,j,k) * det_Fe2C & - - wombat%mesgrazdet(i,j,k) * det_Fe2C & - - wombat%detremi(i,j,k) * det_Fe2C ) + zooegesbac1fe & + + zooegesbac2fe & + + zooegesaoafe & + + zooegesphyfe & + + zooegesdiafe & + + zooegesdetfe & + + wombat%phymorq(i,j,k) * phy_Fe2C & + + wombat%zoomorq(i,j,k) * zoo_Fe2C & + - ( wombat%zoograzdet(i,j,k) & + + wombat%mesgrazdet(i,j,k) & + + wombat%detremi(i,j,k) ) * det_Fe2C ) ! Big detritus equation ! [molC/kg] !----------------------------------------------------------------------- wombat%f_bdet(i,j,k) = wombat%f_bdet(i,j,k) + dtsb * ( & - wombat%diamort(i,j,k) & - + wombat%mesmort(i,j,k) & - + wombat%mesegesbac1(i,j,k) & - + wombat%mesegesbac2(i,j,k) & - + wombat%mesegesaoa(i,j,k) & - + wombat%mesegesphy(i,j,k) & - + wombat%mesegesdia(i,j,k) & - + wombat%mesegesdet(i,j,k) & - + wombat%mesegesbdet(i,j,k) & - + wombat%mesegeszoo(i,j,k) & - - wombat%mesgrazbdet(i,j,k) & - - wombat%bdetremi(i,j,k) ) + wombat%mesegesbac1(i,j,k) & + + wombat%mesegesbac2(i,j,k) & + + wombat%mesegesaoa(i,j,k) & + + wombat%mesegesphy(i,j,k) & + + wombat%mesegesdia(i,j,k) & + + wombat%mesegesdet(i,j,k) & + + wombat%mesegesbdet(i,j,k) & + + wombat%mesegeszoo(i,j,k) & + + wombat%diamorq(i,j,k) & + + wombat%mesmorq(i,j,k) & + - wombat%mesgrazbdet(i,j,k) & + - wombat%bdetremi(i,j,k) ) ! Compact, fast sinking detrital iron equation ! [molFe/kg] !----------------------------------------------------------------------- wombat%f_bdetfe(i,j,k) = wombat%f_bdetfe(i,j,k) + dtsb * ( & - wombat%diamort(i,j,k) * dia_Fe2C & - + wombat%mesmort(i,j,k) * mes_Fe2C & - + mesegesbac1fe & - + mesegesbac2fe & - + mesegesaoafe & - + mesegesphyfe & - + mesegesdiafe & - + mesegesdetfe & - + mesegesbdetfe & - + mesegeszoofe & - - wombat%mesgrazbdet(i,j,k) * bdet_Fe2C & - - wombat%bdetremi(i,j,k) * bdet_Fe2C ) + mesegesbac1fe & + + mesegesbac2fe & + + mesegesaoafe & + + mesegesphyfe & + + mesegesdiafe & + + mesegesdetfe & + + mesegesbdetfe & + + mesegeszoofe & + + wombat%diamorq(i,j,k) * dia_Fe2C & + + wombat%mesmorq(i,j,k) * mes_Fe2C & + - ( wombat%mesgrazbdet(i,j,k) & + + wombat%bdetremi(i,j,k) ) * bdet_Fe2C ) ! Compact, fast sinking detrital silicon equation ! [molSi/kg] ! Copepod egestion (fecal pellets) represented 42-107% of biogenic silica export at ! 100 metres in the spring bloom at the Antarctic Polar Front [Dagg et al., 2003 DSRII] - ! So all mesozooplankton grazing on diatoms goes to egestion, no dissolution + ! All mesozooplankton grazing on diatoms goes to egestion, no dissolution and no assimilation !---------------------------------------------------------------------- wombat%f_bdetsi(i,j,k) = wombat%f_bdetsi(i,j,k) + dtsb * ( & - wombat%diamort(i,j,k) * dia_Si2C & - + wombat%mesgrazdia(i,j,k) * dia_Si2C & - - wombat%bsidiss(i,j,k) ) + ( wombat%diamorq(i,j,k) & + + wombat%mesgrazdia(i,j,k) ) * dia_Si2C & + - wombat%bsidiss(i,j,k) ) ! Dissolved organic carbon equation ! [molC/kg] !----------------------------------------------------------------------- wombat%f_doc(i,j,k) = wombat%f_doc(i,j,k) + dtsb * ( & - wombat%phydoc(i,j,k) & - + wombat%diadoc(i,j,k) & - + wombat%detremi(i,j,k) & - + wombat%bdetremi(i,j,k) & - + wombat%phylyse(i,j,k) & - + wombat%dialyse(i,j,k) & - + wombat%zooexcrbac1(i,j,k)*wombat%zooexcrdom & - + wombat%zooexcrbac2(i,j,k)*wombat%zooexcrdom & - + wombat%zooexcraoa(i,j,k)*wombat%zooexcrdom & - + wombat%zooexcrphy(i,j,k)*wombat%zooexcrdom & - + wombat%zooexcrdia(i,j,k)*wombat%zooexcrdom & - + wombat%zooexcrdet(i,j,k)*wombat%zooexcrdom & - + wombat%mesexcrbac1(i,j,k)*wombat%mesexcrdom & - + wombat%mesexcrbac2(i,j,k)*wombat%mesexcrdom & - + wombat%mesexcraoa(i,j,k)*wombat%mesexcrdom & - + wombat%mesexcrphy(i,j,k)*wombat%mesexcrdom & - + wombat%mesexcrdia(i,j,k)*wombat%mesexcrdom & - + wombat%mesexcrdet(i,j,k)*wombat%mesexcrdom & - + wombat%mesexcrbdet(i,j,k)*wombat%mesexcrdom & - + wombat%mesexcrzoo(i,j,k)*wombat%mesexcrdom & - - wombat%doc1remi(i,j,k) & - - wombat%doc2remi(i,j,k) & - + wombat%bac1mor1(i,j,k) & - + wombat%bac1mor2(i,j,k) & - + wombat%bac2mor1(i,j,k) & - + wombat%bac2mor2(i,j,k) & - + wombat%aoamor1(i,j,k) & - + wombat%aoamor2(i,j,k) ) + wombat%phydoc(i,j,k) & + + wombat%diadoc(i,j,k) & + + wombat%detremi(i,j,k) & + + wombat%bdetremi(i,j,k) & + + wombat%phymorl(i,j,k) & + + wombat%diamorl(i,j,k) & + + wombat%bac1morl(i,j,k) & + + wombat%bac1morq(i,j,k) & + + wombat%bac2morl(i,j,k) & + + wombat%bac2morq(i,j,k) & + + wombat%aoamorl(i,j,k) & + + wombat%aoamorq(i,j,k) & + + ( wombat%zooexcrbac1(i,j,k) & + + wombat%zooexcrbac2(i,j,k) & + + wombat%zooexcraoa(i,j,k) & + + wombat%zooexcrphy(i,j,k) & + + wombat%zooexcrdia(i,j,k) & + + wombat%zooexcrdet(i,j,k) ) * wombat%zooexcrdom & + + ( wombat%mesexcrbac1(i,j,k) & + + wombat%mesexcrbac2(i,j,k) & + + wombat%mesexcraoa(i,j,k) & + + wombat%mesexcrphy(i,j,k) & + + wombat%mesexcrdia(i,j,k) & + + wombat%mesexcrdet(i,j,k) & + + wombat%mesexcrbdet(i,j,k) & + + wombat%mesexcrzoo(i,j,k) ) * wombat%mesexcrdom & + - wombat%doc1remi(i,j,k) & + - wombat%doc2remi(i,j,k) ) ! Dissolved organic nitrogen equation ! [molN/kg] !----------------------------------------------------------------------- wombat%f_don(i,j,k) = wombat%f_don(i,j,k) + dtsb * ( & - zooexcrbac1n*wombat%zooexcrdom & - + mesexcrbac1n*wombat%mesexcrdom & - + zooexcrbac2n*wombat%zooexcrdom & - + mesexcrbac2n*wombat%mesexcrdom & - + zooexcraoan*wombat%zooexcrdom & - + mesexcraoan*wombat%mesexcrdom & - - wombat%don1remi(i,j,k) & - - wombat%don2remi(i,j,k) & - + wombat%bac1mor1(i,j,k) / wombat%bac1_C2N & - + wombat%bac1mor2(i,j,k) / wombat%bac1_C2N & - + wombat%bac2mor1(i,j,k) / wombat%bac2_C2N & - + wombat%bac2mor2(i,j,k) / wombat%bac2_C2N & - + wombat%aoamor1(i,j,k) / wombat%aoa_C2N & - + wombat%aoamor2(i,j,k) / wombat%aoa_C2N ) & - + dtsb * 16./122.0 * ( 0.0 & - + wombat%detremi(i,j,k) & - + wombat%bdetremi(i,j,k) & - + wombat%phylyse(i,j,k) & - + wombat%dialyse(i,j,k) & - + wombat%zooexcrphy(i,j,k)*wombat%zooexcrdom & - + wombat%zooexcrdia(i,j,k)*wombat%zooexcrdom & - + wombat%zooexcrdet(i,j,k)*wombat%zooexcrdom & - + wombat%mesexcrphy(i,j,k)*wombat%mesexcrdom & - + wombat%mesexcrdia(i,j,k)*wombat%mesexcrdom & - + wombat%mesexcrdet(i,j,k)*wombat%mesexcrdom & - + wombat%mesexcrbdet(i,j,k)*wombat%mesexcrdom & - + wombat%mesexcrzoo(i,j,k)*wombat%mesexcrdom ) + ( wombat%bac1morl(i,j,k) & + + wombat%bac1morq(i,j,k) ) / wombat%bac1_C2N & + + ( wombat%bac2morl(i,j,k) & + + wombat%bac2morq(i,j,k) ) / wombat%bac2_C2N & + + ( wombat%aoamorl(i,j,k) & + + wombat%aoamorq(i,j,k) ) / wombat%aoa_C2N & + + ( zooexcrbac1n & + + zooexcrbac2n & + + zooexcraoan ) * wombat%zooexcrdom & + + ( mesexcrbac2n & + + mesexcrbac1n & + + mesexcraoan ) * wombat%mesexcrdom & + - wombat%don1remi(i,j,k) & + - wombat%don2remi(i,j,k) ) & + + dtsb * 16./122.0 * ( & + wombat%detremi(i,j,k) & + + wombat%bdetremi(i,j,k) & + + wombat%phymorl(i,j,k) & + + wombat%diamorl(i,j,k) & + + ( wombat%zooexcrphy(i,j,k) & + + wombat%zooexcrdia(i,j,k) & + + wombat%zooexcrdet(i,j,k) ) *wombat%zooexcrdom & + + ( wombat%mesexcrphy(i,j,k) & + + wombat%mesexcrdia(i,j,k) & + + wombat%mesexcrdet(i,j,k) & + + wombat%mesexcrbdet(i,j,k) & + + wombat%mesexcrzoo(i,j,k) ) * wombat%mesexcrdom ) + + ! Nominal oxidation state of dissolved organic carbon equation ! [unitless] + !----------------------------------------------------------------------- + wombat%f_nosdoc(i,j,k) = wombat%f_nosdoc(i,j,k) + dtsb * ( & + wombat%nosdoc_overflow(i,j,k) & + + wombat%nosdoc_excretion(i,j,k) & + + wombat%nosdoc_phylysis(i,j,k) & + + wombat%nosdoc_baclysis(i,j,k) & + + wombat%nosdoc_dethydro(i,j,k) & + + wombat%nosdoc_docconsu(i,j,k) ) ! Heterotrophic bacteria #1 ! [molC/kg] !----------------------------------------------------------------------- wombat%f_bac1(i,j,k) = wombat%f_bac1(i,j,k) + dtsb * ( & - wombat%bac1grow(i,j,k) & - - wombat%zoograzbac1(i,j,k) & - - wombat%mesgrazbac1(i,j,k) & - - wombat%bac1mor1(i,j,k) & - - wombat%bac1mor2(i,j,k) ) + wombat%bac1grow(i,j,k) & + - wombat%zoograzbac1(i,j,k) & + - wombat%mesgrazbac1(i,j,k) & + - wombat%bac1morl(i,j,k) & + - wombat%bac1morq(i,j,k) ) ! Heterotrophic bacteria #2 ! [molC/kg] !----------------------------------------------------------------------- wombat%f_bac2(i,j,k) = wombat%f_bac2(i,j,k) + dtsb * ( & - wombat%bac2grow(i,j,k) & - - wombat%zoograzbac2(i,j,k) & - - wombat%mesgrazbac2(i,j,k) & - - wombat%bac2mor1(i,j,k) & - - wombat%bac2mor2(i,j,k) ) + wombat%bac2grow(i,j,k) & + - wombat%zoograzbac2(i,j,k) & + - wombat%mesgrazbac2(i,j,k) & + - wombat%bac2morl(i,j,k) & + - wombat%bac2morq(i,j,k) ) ! AOA ! [molC/kg] !----------------------------------------------------------------------- wombat%f_aoa(i,j,k) = wombat%f_aoa(i,j,k) + dtsb * ( & - wombat%aoagrow(i,j,k) & - - wombat%zoograzaoa(i,j,k) & - - wombat%mesgrazaoa(i,j,k) & - - wombat%aoamor1(i,j,k) & - - wombat%aoamor2(i,j,k) ) + wombat%aoagrow(i,j,k) & + - wombat%zoograzaoa(i,j,k) & + - wombat%mesgrazaoa(i,j,k) & + - wombat%aoamorl(i,j,k) & + - wombat%aoamorq(i,j,k) ) ! Oxygen equation ! [molO2/kg] !----------------------------------------------------------------------- if (wombat%f_o2(i,j,k) > epsi) & wombat%f_o2(i,j,k) = wombat%f_o2(i,j,k) - 132./122. * dtsb * ( & - wombat%zooresp(i,j,k) & - + wombat%mesresp(i,j,k) & - + wombat%zooexcrbac1(i,j,k)*(1.0-wombat%zooexcrdom) & - + wombat%zooexcrbac2(i,j,k)*(1.0-wombat%zooexcrdom) & - + wombat%zooexcraoa(i,j,k)*(1.0-wombat%zooexcrdom) & - + wombat%zooexcrphy(i,j,k)*(1.0-wombat%zooexcrdom) & - + wombat%zooexcrdia(i,j,k)*(1.0-wombat%zooexcrdom) & - + wombat%zooexcrdet(i,j,k)*(1.0-wombat%zooexcrdom) & - + wombat%mesexcrbac1(i,j,k)*(1.0-wombat%mesexcrdom) & - + wombat%mesexcrbac2(i,j,k)*(1.0-wombat%mesexcrdom) & - + wombat%mesexcraoa(i,j,k)*(1.0-wombat%mesexcrdom) & - + wombat%mesexcrphy(i,j,k)*(1.0-wombat%mesexcrdom) & - + wombat%mesexcrdia(i,j,k)*(1.0-wombat%mesexcrdom) & - + wombat%mesexcrdet(i,j,k)*(1.0-wombat%mesexcrdom) & - + wombat%mesexcrbdet(i,j,k)*(1.0-wombat%mesexcrdom) & - + wombat%mesexcrzoo(i,j,k)*(1.0-wombat%mesexcrdom) & - - wombat%phygrow(i,j,k) & - - wombat%diagrow(i,j,k) ) & - - dtsb * ( & - wombat%bac1resp(i,j,k) & - + wombat%bac2resp(i,j,k) & - + wombat%aoaresp(i,j,k) ) + ( wombat%zooexcrbac1(i,j,k) & + + wombat%zooexcrbac2(i,j,k) & + + wombat%zooexcraoa(i,j,k) & + + wombat%zooexcrphy(i,j,k) & + + wombat%zooexcrdia(i,j,k) & + + wombat%zooexcrdet(i,j,k) ) * (1.0-wombat%zooexcrdom) & + + ( wombat%mesexcrbac1(i,j,k) & + + wombat%mesexcrbac2(i,j,k) & + + wombat%mesexcraoa(i,j,k) & + + wombat%mesexcrphy(i,j,k) & + + wombat%mesexcrdia(i,j,k) & + + wombat%mesexcrdet(i,j,k) & + + wombat%mesexcrbdet(i,j,k) & + + wombat%mesexcrzoo(i,j,k) ) * (1.0-wombat%mesexcrdom) & + + wombat%zoomorl(i,j,k) & + + wombat%mesmorl(i,j,k) & + - wombat%phygrow(i,j,k) & + - wombat%diagrow(i,j,k) ) & + - dtsb * ( & + wombat%bac1resp(i,j,k) & + + wombat%bac2resp(i,j,k) & + + wombat%aoaresp(i,j,k) ) ! Equation for CaCO3 ! [molCaCO3/kg] !----------------------------------------------------------------------- wombat%f_caco3(i,j,k) = wombat%f_caco3(i,j,k) + dtsb * ( & - wombat%zooegesphy(i,j,k) * wombat%pic2poc(i,j,k) & - + wombat%mesegesphy(i,j,k) * wombat%pic2poc(i,j,k) & - + wombat%phymort(i,j,k) * wombat%pic2poc(i,j,k) & - + wombat%zoomort(i,j,k) * wombat%pic2poc(i,j,k) & - + wombat%mesmort(i,j,k) * wombat%pic2poc(i,j,k) & - - wombat%caldiss(i,j,k) ) + ( ( wombat%zoograzphy(i,j,k) & + + wombat%mesgrazphy(i,j,k) & + + wombat%mesgrazzoo(i,j,k) ) * (1.0-wombat%fgutdiss) & + + wombat%phymorq(i,j,k) & + + wombat%zoomorq(i,j,k) ) * wombat%pic2poc(i,j,k) & + - wombat%zoodiss(i,j,k) & + - wombat%mesdiss(i,j,k) & + - wombat%caldiss(i,j,k) & + - wombat%aradiss(i,j,k) & + - wombat%pocdiss(i,j,k) ) ! Equation for DIC ! [molC/kg] !----------------------------------------------------------------------- wombat%f_dic(i,j,k) = wombat%f_dic(i,j,k) + dtsb * ( & - (wombat%doc1remi(i,j,k) - wombat%bac1grow(i,j,k)) & - + (wombat%doc2remi(i,j,k) - wombat%bac2grow(i,j,k)) & - + wombat%zooresp(i,j,k) & - + wombat%mesresp(i,j,k) & - + wombat%zooexcrbac1(i,j,k)*(1.0-wombat%zooexcrdom) & - + wombat%zooexcrbac2(i,j,k)*(1.0-wombat%zooexcrdom) & - + wombat%zooexcraoa(i,j,k)*(1.0-wombat%zooexcrdom) & - + wombat%zooexcrphy(i,j,k)*(1.0-wombat%zooexcrdom) & - + wombat%zooexcrdia(i,j,k)*(1.0-wombat%zooexcrdom) & - + wombat%zooexcrdet(i,j,k)*(1.0-wombat%zooexcrdom) & - + wombat%mesexcrbac1(i,j,k)*(1.0-wombat%mesexcrdom) & - + wombat%mesexcrbac2(i,j,k)*(1.0-wombat%mesexcrdom) & - + wombat%mesexcraoa(i,j,k)*(1.0-wombat%mesexcrdom) & - + wombat%mesexcrphy(i,j,k)*(1.0-wombat%mesexcrdom) & - + wombat%mesexcrdia(i,j,k)*(1.0-wombat%mesexcrdom) & - + wombat%mesexcrdet(i,j,k)*(1.0-wombat%mesexcrdom) & - + wombat%mesexcrbdet(i,j,k)*(1.0-wombat%mesexcrdom) & - + wombat%mesexcrzoo(i,j,k)*(1.0-wombat%mesexcrdom) & - - wombat%phygrow(i,j,k) & - - wombat%diagrow(i,j,k) & - - wombat%aoagrow(i,j,k) & - - wombat%phydoc(i,j,k) & - - wombat%diadoc(i,j,k) & - - wombat%zooegesphy(i,j,k) * wombat%pic2poc(i,j,k) & - - wombat%mesegesphy(i,j,k) * wombat%pic2poc(i,j,k) & - - wombat%phymort(i,j,k) * wombat%pic2poc(i,j,k) & - - wombat%zoomort(i,j,k) * wombat%pic2poc(i,j,k) & - - wombat%mesmort(i,j,k) * wombat%pic2poc(i,j,k) & - + wombat%caldiss(i,j,k) ) + ( wombat%zooexcrbac1(i,j,k) & + + wombat%zooexcrbac2(i,j,k) & + + wombat%zooexcraoa(i,j,k) & + + wombat%zooexcrphy(i,j,k) & + + wombat%zooexcrdia(i,j,k) & + + wombat%zooexcrdet(i,j,k) ) * (1.0-wombat%zooexcrdom) & + + ( wombat%mesexcrbac1(i,j,k) & + + wombat%mesexcrbac2(i,j,k) & + + wombat%mesexcraoa(i,j,k) & + + wombat%mesexcrphy(i,j,k) & + + wombat%mesexcrdia(i,j,k) & + + wombat%mesexcrdet(i,j,k) & + + wombat%mesexcrbdet(i,j,k) & + + wombat%mesexcrzoo(i,j,k) ) * (1.0-wombat%mesexcrdom) & + + wombat%zoomorl(i,j,k) & + + wombat%mesmorl(i,j,k) & + + (wombat%doc1remi(i,j,k) - wombat%bac1grow(i,j,k)) & + + (wombat%doc2remi(i,j,k) - wombat%bac2grow(i,j,k)) & + + wombat%zoodiss(i,j,k) & + + wombat%mesdiss(i,j,k) & + + wombat%caldiss(i,j,k) & + + wombat%aradiss(i,j,k) & + + wombat%pocdiss(i,j,k) & + - wombat%phygrow(i,j,k) & + - wombat%diagrow(i,j,k) & + - wombat%aoagrow(i,j,k) & + - wombat%phydoc(i,j,k) & + - wombat%diadoc(i,j,k) & + - ( ( wombat%zoograzphy(i,j,k) & + + wombat%mesgrazphy(i,j,k) & + + wombat%mesgrazzoo(i,j,k) ) * (1.0-wombat%fgutdiss) & + + wombat%phymorq(i,j,k) & + + wombat%zoomorq(i,j,k) ) * wombat%pic2poc(i,j,k) ) ! Equation for DICr ! [molC/kg] !----------------------------------------------------------------------- wombat%f_dicr(i,j,k) = wombat%f_dicr(i,j,k) + dtsb * ( & - (wombat%doc1remi(i,j,k) - wombat%bac1grow(i,j,k)) & - + (wombat%doc2remi(i,j,k) - wombat%bac2grow(i,j,k)) & - + wombat%zooresp(i,j,k) & - + wombat%mesresp(i,j,k) & - + wombat%zooexcrbac1(i,j,k)*(1.0-wombat%zooexcrdom) & - + wombat%zooexcrbac2(i,j,k)*(1.0-wombat%zooexcrdom) & - + wombat%zooexcraoa(i,j,k)*(1.0-wombat%zooexcrdom) & - + wombat%zooexcrphy(i,j,k)*(1.0-wombat%zooexcrdom) & - + wombat%zooexcrdia(i,j,k)*(1.0-wombat%zooexcrdom) & - + wombat%zooexcrdet(i,j,k)*(1.0-wombat%zooexcrdom) & - + wombat%mesexcrbac1(i,j,k)*(1.0-wombat%mesexcrdom) & - + wombat%mesexcrbac2(i,j,k)*(1.0-wombat%mesexcrdom) & - + wombat%mesexcraoa(i,j,k)*(1.0-wombat%mesexcrdom) & - + wombat%mesexcrphy(i,j,k)*(1.0-wombat%mesexcrdom) & - + wombat%mesexcrdia(i,j,k)*(1.0-wombat%mesexcrdom) & - + wombat%mesexcrdet(i,j,k)*(1.0-wombat%mesexcrdom) & - + wombat%mesexcrbdet(i,j,k)*(1.0-wombat%mesexcrdom) & - + wombat%mesexcrzoo(i,j,k)*(1.0-wombat%mesexcrdom) & - - wombat%phygrow(i,j,k) & - - wombat%diagrow(i,j,k) & - - wombat%aoagrow(i,j,k) & - - wombat%phydoc(i,j,k) & - - wombat%diadoc(i,j,k) & - - wombat%zooegesphy(i,j,k) * wombat%pic2poc(i,j,k) & - - wombat%mesegesphy(i,j,k) * wombat%pic2poc(i,j,k) & - - wombat%phymort(i,j,k) * wombat%pic2poc(i,j,k) & - - wombat%zoomort(i,j,k) * wombat%pic2poc(i,j,k) & - - wombat%mesmort(i,j,k) * wombat%pic2poc(i,j,k) & - + wombat%caldiss(i,j,k) ) + ( wombat%zooexcrbac1(i,j,k) & + + wombat%zooexcrbac2(i,j,k) & + + wombat%zooexcraoa(i,j,k) & + + wombat%zooexcrphy(i,j,k) & + + wombat%zooexcrdia(i,j,k) & + + wombat%zooexcrdet(i,j,k) ) * (1.0-wombat%zooexcrdom) & + + ( wombat%mesexcrbac1(i,j,k) & + + wombat%mesexcrbac2(i,j,k) & + + wombat%mesexcraoa(i,j,k) & + + wombat%mesexcrphy(i,j,k) & + + wombat%mesexcrdia(i,j,k) & + + wombat%mesexcrdet(i,j,k) & + + wombat%mesexcrbdet(i,j,k) & + + wombat%mesexcrzoo(i,j,k) ) * (1.0-wombat%mesexcrdom) & + + wombat%zoomorl(i,j,k) & + + wombat%mesmorl(i,j,k) & + + (wombat%doc1remi(i,j,k) - wombat%bac1grow(i,j,k)) & + + (wombat%doc2remi(i,j,k) - wombat%bac2grow(i,j,k)) & + + wombat%zoodiss(i,j,k) & + + wombat%mesdiss(i,j,k) & + + wombat%caldiss(i,j,k) & + + wombat%aradiss(i,j,k) & + + wombat%pocdiss(i,j,k) & + - wombat%phygrow(i,j,k) & + - wombat%diagrow(i,j,k) & + - wombat%aoagrow(i,j,k) & + - wombat%phydoc(i,j,k) & + - wombat%diadoc(i,j,k) & + - ( ( wombat%zoograzphy(i,j,k) & + + wombat%mesgrazphy(i,j,k) & + + wombat%mesgrazzoo(i,j,k) ) * (1.0-wombat%fgutdiss) & + + wombat%phymorq(i,j,k) & + + wombat%zoomorq(i,j,k) ) * wombat%pic2poc(i,j,k) ) + ! Equation for ALK ! [molC/kg] !----------------------------------------------------------------------- wombat%f_alk(i,j,k) = wombat%f_alk(i,j,k) + dtsb * 16.0/122.0 * ( & - wombat%phygrow(i,j,k) * wombat%phy_lno3(i,j,k) / ( wombat%phy_lnit(i,j,k) + epsi ) & - + wombat%diagrow(i,j,k) * wombat%dia_lno3(i,j,k) / ( wombat%dia_lnit(i,j,k) + epsi ) & - + wombat%zooresp(i,j,k) & - + wombat%mesresp(i,j,k) & - + wombat%zooexcrphy(i,j,k)*(1.0-wombat%zooexcrdom) & - + wombat%zooexcrdia(i,j,k)*(1.0-wombat%zooexcrdom) & - + wombat%zooexcrdet(i,j,k)*(1.0-wombat%zooexcrdom) & - + wombat%mesexcrphy(i,j,k)*(1.0-wombat%mesexcrdom) & - + wombat%mesexcrdia(i,j,k)*(1.0-wombat%mesexcrdom) & - + wombat%mesexcrdet(i,j,k)*(1.0-wombat%mesexcrdom) & - + wombat%mesexcrbdet(i,j,k)*(1.0-wombat%mesexcrdom) & - + wombat%mesexcrzoo(i,j,k)*(1.0-wombat%mesexcrdom) & - - wombat%phygrow(i,j,k) * wombat%phy_lnh4(i,j,k) / ( wombat%phy_lnit(i,j,k) + epsi ) & - - wombat%diagrow(i,j,k) * wombat%dia_lnh4(i,j,k) / ( wombat%dia_lnit(i,j,k) + epsi ) ) & - + dtsb * ( & - (wombat%don1remi(i,j,k) - wombat%bac1grow(i,j,k)/wombat%bac1_C2N) & - + (wombat%don2remi(i,j,k) - wombat%bac2grow(i,j,k)/wombat%bac2_C2N) & - + zooexcrbac1n*(1.0-wombat%zooexcrdom) & - + mesexcrbac1n*(1.0-wombat%mesexcrdom) & - + zooexcrbac2n*(1.0-wombat%zooexcrdom) & - + mesexcrbac2n*(1.0-wombat%mesexcrdom) & - + zooexcraoan*(1.0-wombat%zooexcrdom) & - + mesexcraoan*(1.0-wombat%mesexcrdom) & - + wombat%bac1deni(i,j,k) & - - wombat%anammox(i,j,k) & - - wombat%ammox(i,j,k) & - - (wombat%ammox(i,j,k) - wombat%aoagrow(i,j,k)/wombat%aoa_C2N) ) & - + dtsb * 2.0 * ( & - wombat%caldiss(i,j,k) & - - wombat%zooegesphy(i,j,k) * wombat%pic2poc(i,j,k) & - - wombat%mesegesphy(i,j,k) * wombat%pic2poc(i,j,k) & - - wombat%phymort(i,j,k) * wombat%pic2poc(i,j,k) & - - wombat%zoomort(i,j,k) * wombat%pic2poc(i,j,k) & - - wombat%mesmort(i,j,k) * wombat%pic2poc(i,j,k) ) + wombat%phygrow(i,j,k) * wombat%phy_lno3(i,j,k) / ( wombat%phy_lnit(i,j,k) + epsi ) & + + wombat%diagrow(i,j,k) * wombat%dia_lno3(i,j,k) / ( wombat%dia_lnit(i,j,k) + epsi ) & + - wombat%phygrow(i,j,k) * wombat%phy_lnh4(i,j,k) / ( wombat%phy_lnit(i,j,k) + epsi ) & + - wombat%diagrow(i,j,k) * wombat%dia_lnh4(i,j,k) / ( wombat%dia_lnit(i,j,k) + epsi ) & + + wombat%zoomorl(i,j,k) & + + wombat%mesmorl(i,j,k) & + + ( wombat%zooexcrphy(i,j,k) & + + wombat%zooexcrdia(i,j,k) & + + wombat%zooexcrdet(i,j,k) ) * (1.0-wombat%zooexcrdom) & + + ( wombat%mesexcrphy(i,j,k) & + + wombat%mesexcrdia(i,j,k) & + + wombat%mesexcrdet(i,j,k) & + + wombat%mesexcrbdet(i,j,k) & + + wombat%mesexcrzoo(i,j,k) ) * (1.0-wombat%mesexcrdom) ) & + + dtsb * ( & + (wombat%don1remi(i,j,k) - wombat%bac1grow(i,j,k)/wombat%bac1_C2N) & + + (wombat%don2remi(i,j,k) - wombat%bac2grow(i,j,k)/wombat%bac2_C2N) & + + ( zooexcrbac1n & + + zooexcrbac2n & + + zooexcraoan ) * (1.0-wombat%zooexcrdom) & + + ( mesexcrbac1n & + + mesexcrbac2n & + + mesexcraoan ) * (1.0-wombat%mesexcrdom) & + + wombat%bac1deni(i,j,k) & + - 2.0 * wombat%ammox(i,j,k) + wombat%aoagrow(i,j,k)/wombat%aoa_C2N & + - wombat%anammox(i,j,k) ) & + + dtsb * 2.0 * ( & + wombat%zoodiss(i,j,k) & + + wombat%mesdiss(i,j,k) & + + wombat%caldiss(i,j,k) & + + wombat%aradiss(i,j,k) & + + wombat%pocdiss(i,j,k) & + - ( ( wombat%zoograzphy(i,j,k) & + + wombat%mesgrazphy(i,j,k) & + + wombat%mesgrazzoo(i,j,k) ) * (1.0-wombat%fgutdiss) & + + wombat%phymorq(i,j,k) & + + wombat%zoomorq(i,j,k) ) * wombat%pic2poc(i,j,k) ) + ! Equation for dissolved iron ! [molFe/kg] !---------------------------------------------------------------------- wombat%f_fe(i,j,k) = wombat%f_fe(i,j,k) + dtsb * ( & - wombat%detremi(i,j,k) * det_Fe2C & - + wombat%bdetremi(i,j,k) * bdet_Fe2C & - + wombat%zooresp(i,j,k) * zoo_Fe2C & - + wombat%mesresp(i,j,k) * mes_Fe2C & - + zooexcrbac1fe & - + zooexcrbac2fe & - + zooexcraoafe & - + zooexcrphyfe & - + zooexcrdiafe & - + zooexcrdetfe & - + mesexcrbac1fe & - + mesexcrbac2fe & - + mesexcraoafe & - + mesexcrphyfe & - + mesexcrdiafe & - + mesexcrdetfe & - + mesexcrbdetfe & - + mesexcrzoofe & - + wombat%phylyse(i,j,k) * phy_Fe2C & - + wombat%dialyse(i,j,k) * dia_Fe2C & - - wombat%phy_dfeupt(i,j,k) & - - wombat%dia_dfeupt(i,j,k) & - - wombat%bac1ufer(i,j,k) & - - wombat%bac2ufer(i,j,k) & - - wombat%aoagrow(i,j,k) / wombat%aoa_C2Fe & - + wombat%bac1mor1(i,j,k) / wombat%bac1_C2Fe & - + wombat%bac1mor2(i,j,k) / wombat%bac1_C2Fe & - + wombat%bac2mor1(i,j,k) / wombat%bac2_C2Fe & - + wombat%bac2mor2(i,j,k) / wombat%bac2_C2Fe & - + wombat%aoamor1(i,j,k) / wombat%aoa_C2Fe & - + wombat%aoamor2(i,j,k) / wombat%aoa_C2Fe & - - wombat%fescaven(i,j,k) & - - wombat%fecoag2afe(i,j,k) & - - wombat%fecoag2bafe(i,j,k) & - + wombat%afediss(i,j,k) & - + wombat%bafediss(i,j,k) ) + wombat%detremi(i,j,k) * det_Fe2C & + + wombat%bdetremi(i,j,k) * bdet_Fe2C & + + wombat%phymorl(i,j,k) * phy_Fe2C & + + wombat%diamorl(i,j,k) * dia_Fe2C & + + wombat%zoomorl(i,j,k) * zoo_Fe2C & + + wombat%mesmorl(i,j,k) * mes_Fe2C & + + ( wombat%bac1morl(i,j,k) & + + wombat%bac1morq(i,j,k) ) / wombat%bac1_C2Fe & + + ( wombat%bac2morl(i,j,k) & + + wombat%bac2morq(i,j,k) ) / wombat%bac2_C2Fe & + + ( wombat%aoamorl(i,j,k) & + + wombat%aoamorq(i,j,k) ) / wombat%aoa_C2Fe & + + zooexcrbac1fe & + + zooexcrbac2fe & + + zooexcraoafe & + + zooexcrphyfe & + + zooexcrdiafe & + + zooexcrdetfe & + + mesexcrbac1fe & + + mesexcrbac2fe & + + mesexcraoafe & + + mesexcrphyfe & + + mesexcrdiafe & + + mesexcrdetfe & + + mesexcrbdetfe & + + mesexcrzoofe & + + wombat%afediss(i,j,k) & + + wombat%bafediss(i,j,k) & + - wombat%phy_dfeupt(i,j,k) & + - wombat%dia_dfeupt(i,j,k) & + - wombat%bac1ufer(i,j,k) & + - wombat%bac2ufer(i,j,k) & + - wombat%aoagrow(i,j,k) / wombat%aoa_C2Fe & + - wombat%fescaven(i,j,k) & + - wombat%fecoag2afe(i,j,k) & + - wombat%fecoag2bafe(i,j,k) ) ! Collect dFe sources and sinks for diagnostic output wombat%fesources(i,j,k) = wombat%fesources(i,j,k) + dtsb * ( & wombat%detremi(i,j,k) * det_Fe2C & + wombat%bdetremi(i,j,k) * bdet_Fe2C & - + wombat%zooresp(i,j,k) * zoo_Fe2C & - + wombat%mesresp(i,j,k) * mes_Fe2C & - + wombat%bac1mor1(i,j,k) / wombat%bac1_C2Fe & - + wombat%bac1mor2(i,j,k) / wombat%bac1_C2Fe & - + wombat%bac2mor1(i,j,k) / wombat%bac2_C2Fe & - + wombat%bac2mor2(i,j,k) / wombat%bac2_C2Fe & - + wombat%aoamor1(i,j,k) / wombat%aoa_C2Fe & - + wombat%aoamor2(i,j,k) / wombat%aoa_C2Fe & + + wombat%zoomorl(i,j,k) * zoo_Fe2C & + + wombat%mesmorl(i,j,k) * mes_Fe2C & + + wombat%bac1morl(i,j,k) / wombat%bac1_C2Fe & + + wombat%bac1morq(i,j,k) / wombat%bac1_C2Fe & + + wombat%bac2morl(i,j,k) / wombat%bac2_C2Fe & + + wombat%bac2morq(i,j,k) / wombat%bac2_C2Fe & + + wombat%aoamorl(i,j,k) / wombat%aoa_C2Fe & + + wombat%aoamorq(i,j,k) / wombat%aoa_C2Fe & + zooexcrbac1fe & + zooexcrbac2fe & + zooexcraoafe & @@ -6405,8 +6470,8 @@ subroutine generic_WOMBATmid_update_from_source(tracer_list, Temp, Salt, & + mesexcrdetfe & + mesexcrbdetfe & + mesexcrzoofe & - + wombat%phylyse(i,j,k) * phy_Fe2C & - + wombat%dialyse(i,j,k) * dia_Fe2C & + + wombat%phymorl(i,j,k) * phy_Fe2C & + + wombat%diamorl(i,j,k) * dia_Fe2C & + wombat%afediss(i,j,k) & + wombat%bafediss(i,j,k)) wombat%fesinks(i,j,k) = wombat%fesinks(i,j,k) + dtsb * ( & @@ -6437,7 +6502,7 @@ subroutine generic_WOMBATmid_update_from_source(tracer_list, Temp, Salt, & !-----------------------------------------------------------------------! !-----------------------------------------------------------------------! !-----------------------------------------------------------------------! - ! [Step 17] Check for conservation of mass by ecosystem component ! + ! [Step 20] Check for conservation of mass by ecosystem component ! !-----------------------------------------------------------------------! !-----------------------------------------------------------------------! !-----------------------------------------------------------------------! @@ -6549,44 +6614,26 @@ subroutine generic_WOMBATmid_update_from_source(tracer_list, Temp, Salt, & !----------------------------------------------------------------------- do k = 1,nk; do j = jsc,jec; do i = isc,iec; - no3_bgc_change = grid_tmask(i,j,k) * (wombat%f_no3(i,j,k) - wombat%no3_prev(i,j,k)) ! [mol/kg] - caco3_bgc_change = grid_tmask(i,j,k) * (wombat%f_caco3(i,j,k) - wombat%caco3_prev(i,j,k)) ! [mol/kg] + ! PJB: it's possible that to reduce costs we could use the total change in NO3, NH4 and CaCO3 + ! tracers to solve for the change in alkalinity without needing the large number of terms above - wombat%pprod_gross(i,j,k) = rdtts * wombat%pprod_gross(i,j,k) * grid_tmask(i,j,k) ! [mol/kg/s] - wombat%zprod_gross(i,j,k) = rdtts * wombat%zprod_gross(i,j,k) * grid_tmask(i,j,k) ! [mol/kg/s] wombat%npp3d(i,j,k) = rdtts * wombat%npp3d(i,j,k) * grid_tmask(i,j,k) ! [mol/kg/s] + wombat%rpp3d(i,j,k) = rdtts * wombat%rpp3d(i,j,k) * grid_tmask(i,j,k) ! [mol/kg/s] + wombat%zsp3d(i,j,k) = rdtts * wombat%zsp3d(i,j,k) * grid_tmask(i,j,k) ! [mol/kg/s] wombat%fesources(i,j,k) = rdtts * wombat%fesources(i,j,k) * grid_tmask(i,j,k) ! [mol/kg/s] wombat%fesinks(i,j,k) = rdtts * wombat%fesinks(i,j,k) * grid_tmask(i,j,k) ! [mol/kg/s] - if (wombat%zw(i,j,k) <= hblt_depth(i,j)) then - wombat%dic_intmld(i,j) = wombat%dic_intmld(i,j) + wombat%f_dic(i,j,k) * rho_dzt(i,j,k) ! [mol/m2] - wombat%o2_intmld(i,j) = wombat%o2_intmld(i,j) + wombat%f_o2(i,j,k) * rho_dzt(i,j,k) ! [mol/m2] - wombat%no3_intmld(i,j) = wombat%no3_intmld(i,j) + wombat%f_no3(i,j,k) * rho_dzt(i,j,k) ! [mol/m2] - wombat%fe_intmld(i,j) = wombat%fe_intmld(i,j) + wombat%f_fe(i,j,k) * rho_dzt(i,j,k) ! [mol/m2] - wombat%phy_intmld(i,j) = wombat%phy_intmld(i,j) + wombat%f_phy(i,j,k) * rho_dzt(i,j,k) ! [mol/m2] - wombat%det_intmld(i,j) = wombat%det_intmld(i,j) + wombat%f_det(i,j,k) * rho_dzt(i,j,k) ! [mol/m2] - wombat%pprod_gross_intmld(i,j) = wombat%pprod_gross_intmld(i,j) + & - wombat%pprod_gross(i,j,k) * rho_dzt(i,j,k) ! [mol/m2/s] - wombat%npp_intmld(i,j) = wombat%npp_intmld(i,j) + wombat%npp3d(i,j,k) * rho_dzt(i,j,k) ! [mol/m2/s] - wombat%radbio_intmld(i,j) = wombat%radbio_intmld(i,j) + wombat%radbio(i,j,k) * dzt(i,j,k) ! [W/m] - endif - - if (wombat%zw(i,j,k) <= 100) then - wombat%dic_int100(i,j) = wombat%dic_int100(i,j) + wombat%f_dic(i,j,k) * rho_dzt(i,j,k) ! [mol/m2] - wombat%o2_int100(i,j) = wombat%o2_int100(i,j) + wombat%f_o2(i,j,k) * rho_dzt(i,j,k) ! [mol/m2] - wombat%no3_int100(i,j) = wombat%no3_int100(i,j) + wombat%f_no3(i,j,k) * rho_dzt(i,j,k) ! [mol/m2] - wombat%fe_int100(i,j) = wombat%fe_int100(i,j) + wombat%f_fe(i,j,k) * rho_dzt(i,j,k) ! [mol/m2] - wombat%phy_int100(i,j) = wombat%phy_int100(i,j) + wombat%f_phy(i,j,k) * rho_dzt(i,j,k) ! [mol/m2] - wombat%det_int100(i,j) = wombat%det_int100(i,j) + wombat%f_det(i,j,k) * rho_dzt(i,j,k) ! [mol/m2] - wombat%pprod_gross_int100(i,j) = wombat%pprod_gross_int100(i,j) + & - wombat%pprod_gross(i,j,k) * rho_dzt(i,j,k) ! [mol/m2/s] - wombat%npp_int100(i,j) = wombat%npp_int100(i,j) + wombat%npp3d(i,j,k) * rho_dzt(i,j,k) ! [mol/m2/s] - wombat%radbio_int100(i,j) = wombat%radbio_int100(i,j) + wombat%radbio(i,j,k) * dzt(i,j,k) ! [W/m] - endif enddo; enddo; enddo - ! Additional operations on tracers - !----------------------------------------------------------------------- + + !-----------------------------------------------------------------------! + !-----------------------------------------------------------------------! + !-----------------------------------------------------------------------! + ! [Step 21] Additional operations on tracers ! + !-----------------------------------------------------------------------! + !-----------------------------------------------------------------------! + !-----------------------------------------------------------------------! + do j = jsc,jec; do i = isc,iec; ! mac: bottom dFe fix to 1 nM when the water is <= 200 m deep. if (grid_kmt(i,j) > 0) then @@ -6598,15 +6645,8 @@ subroutine generic_WOMBATmid_update_from_source(tracer_list, Temp, Salt, & ! this is essential for ensuring dFe is replenished in upper ocean and actually ! looks to be the secret of PISCES ability to replicate dFe limitation in the right places zno3 = wombat%f_no3(i,j,k) / mmol_m3_to_mol_kg - zfermin = min( max( 3e-2 * zno3 * zno3, 5e-2), 7e-2) * umol_m3_to_mol_kg + zfermin = max( 3e-2 / 1600 * zno3 * zno3, 5e-3) * umol_m3_to_mol_kg wombat%f_fe(i,j,k) = max(zfermin, wombat%f_fe(i,j,k)) * grid_tmask(i,j,k) - ! pjb: set limits of some tracers and save corrections to output for budgets - wombat%alk_correct(i,j,k) = (max(wombat%alk_min * mmol_m3_to_mol_kg, wombat%f_alk(i,j,k) ) & - - wombat%f_alk(i,j,k) ) * grid_tmask(i,j,k) - wombat%dic_correct(i,j,k) = (max(wombat%dic_min * mmol_m3_to_mol_kg, wombat%f_dic(i,j,k) ) & - - wombat%f_dic(i,j,k) ) * grid_tmask(i,j,k) - wombat%f_alk(i,j,k) = wombat%f_alk(i,j,k) + wombat%alk_correct(i,j,k) - wombat%f_dic(i,j,k) = wombat%f_dic(i,j,k) + wombat%dic_correct(i,j,k) enddo enddo; enddo @@ -6633,6 +6673,7 @@ subroutine generic_WOMBATmid_update_from_source(tracer_list, Temp, Salt, & call g_tracer_set_values(tracer_list, 'bdetsi', 'field', wombat%f_bdetsi, isd, jsd, ntau=tau) call g_tracer_set_values(tracer_list, 'doc', 'field', wombat%f_doc, isd, jsd, ntau=tau) call g_tracer_set_values(tracer_list, 'don', 'field', wombat%f_don, isd, jsd, ntau=tau) + call g_tracer_set_values(tracer_list, 'nosdoc', 'field', wombat%f_nosdoc, isd, jsd, ntau=tau) call g_tracer_set_values(tracer_list, 'bac1', 'field', wombat%f_bac1, isd, jsd, ntau=tau) call g_tracer_set_values(tracer_list, 'bac2', 'field', wombat%f_bac2, isd, jsd, ntau=tau) call g_tracer_set_values(tracer_list, 'aoa', 'field', wombat%f_aoa, isd, jsd, ntau=tau) @@ -6650,10 +6691,11 @@ subroutine generic_WOMBATmid_update_from_source(tracer_list, Temp, Salt, & !-----------------------------------------------------------------------! !-----------------------------------------------------------------------! !-----------------------------------------------------------------------! - ! [Step 18] Compute sinking rates of detrital pools ! + ! [Step 22] Compute sinking rates of detrital pools ! !-----------------------------------------------------------------------! !-----------------------------------------------------------------------! !-----------------------------------------------------------------------! + call g_tracer_get_pointer(tracer_list, 'det', 'vmove', wombat%p_wdet) ! [m/s] call g_tracer_get_pointer(tracer_list, 'detfe', 'vmove', wombat%p_wdetfe) ! [m/s] call g_tracer_get_pointer(tracer_list, 'bdet', 'vmove', wombat%p_wbdet) ! [m/s] @@ -6675,18 +6717,24 @@ subroutine generic_WOMBATmid_update_from_source(tracer_list, Temp, Salt, & ! - Volume = Biomass ** 0.65 ! - Diameter = ( (6/pi) * Volume ) ** (1/3) ! - therefore, diameter = ( (6/pi) * Biomass ** 0.65 ) ** (1/3) - ! For microzoo (protists) we use Menden-Deuer & Lessard (2000) exponent - ! of 0.939 that relates carbon biomass to volume - ! For mesozoo we use the length-weight relationships for copepods from - ! Uye (1982) and Lehette & Hernandez-Leon (2009)) of 1/3 biophy = max(epsi, wombat%f_phy(i,j,1) ) / mmol_m3_to_mol_kg ![mmol/m3] biodia = max(epsi, wombat%f_dia(i,j,1) ) / mmol_m3_to_mol_kg ![mmol/m3] biozoo = max(epsi, wombat%f_zoo(i,j,1) ) / mmol_m3_to_mol_kg ![mmol/m3] biomes = max(epsi, wombat%f_mes(i,j,1) ) / mmol_m3_to_mol_kg ![mmol/m3] - rad_phy = wombat%phyrad0 * 0.5 * (6.0/pi * biophy**0.65)**0.33 * 1e-6 ! [m] - rad_dia = wombat%diarad0 * 0.5 * (6.0/pi * biodia**0.65)**0.33 * 1e-6 ! [m] - rad_zoo = wombat%zoorad0 * 0.5 * (6.0/pi * biozoo**1.065)**0.33 * 1e-6 ! [m] - rad_mes = wombat%mesrad0 * 0.5 * biomes**0.33 * 1e-6 ! [m] + !rad_phy = wombat%phyrad0 * 0.5 * (6.0/pi * biophy**0.65)**0.33 * 1e-6 ! [m] + !rad_dia = wombat%diarad0 * 0.5 * (6.0/pi * biodia**0.65)**0.33 * 1e-6 ! [m] + ! ... simplifies to: + rad_phy = wombat%phyrad0 * biophy**0.217 * 0.62e-6 ! [m] + rad_dia = wombat%diarad0 * biodia**0.217 * 0.62e-6 ! [m] + ! For microzoo (protists) we use Menden-Deuer & Lessard (2000) exponent + ! of 0.939 that relates carbon biomass to volume + !rad_zoo = wombat%zoorad0 * 0.5 * (6.0/pi * biozoo**1.065)**0.33 * 1e-6 ! [m] + ! simplifies to: + rad_zoo = wombat%zoorad0 * biozoo**0.355 * 0.62e-6 ! [m] + ! For mesozoo we use the length-weight relationships for copepods from + ! Uye (1982) and Lehette & Hernandez-Leon (2009)) of 1/3 + !rad_mes = wombat%mesrad0 * 0.5 * biomes**0.33 * 1e-6 ! [m] + rad_mes = wombat%mesrad0 * biomes**0.33 * 0.5e-6 ! [m] if (biophy + biozoo > epsi) then rad_det = min(1e-3, max(1e-6, (rad_phy*biophy + rad_zoo*biozoo) / (biophy + biozoo))) else @@ -6780,16 +6828,16 @@ subroutine generic_WOMBATmid_update_from_source(tracer_list, Temp, Salt, & endif ! 4. Compute excess density given the mass of particles and their porosity - rho_small = (1.0 - wombat%detphi) * rho_small + wombat%detphi * 1025.0 ! [kg/m3] - rho_large = (1.0 - wombat%detphi) * rho_large + wombat%detphi * 1025.0 ! [kg/m3] + wombat%det_density(i,j,k) = (1.0 - wombat%detphi) * rho_small + wombat%detphi * 1025.0 ! [kg/m3] + wombat%bdet_density(i,j,k) = (1.0 - wombat%bdetphi) * rho_large + wombat%bdetphi * 1025.0 ! [kg/m3] ! 4. Compute the Rubey equation for sinking rates of particles (see Rubey, 1933) - wsink1(k) = ( sqrt( 4.0/3.0 * 9.8 * 1025.0 * (rho_small - 1025.0) * rad_det**3.0 & - + 9.0*wombat%dynvis_sw(i,j,k)**2.0 ) - 3.0*wombat%dynvis_sw(i,j,k) ) & - / (1025.0 * rad_det) ! [m/s] - wsink2(k) = ( sqrt( 4.0/3.0 * 9.8 * 1025.0 * (rho_large - 1025.0) * rad_bdet**3.0 & - + 9.0*wombat%dynvis_sw(i,j,k)**2.0 ) - 3.0*wombat%dynvis_sw(i,j,k) ) & - / (1025.0 * rad_bdet) ! [m/s] + wsink1(k) = ( sqrt( 4.0/3.0 * 9.8 * 1025.0 * (wombat%det_density(i,j,k) - 1025.0) & + * rad_det**3.0 + 9.0*wombat%dynvis_sw(i,j,k)**2.0 ) & + - 3.0*wombat%dynvis_sw(i,j,k) ) / (1025.0 * rad_det) ! [m/s] + wsink2(k) = ( sqrt( 4.0/3.0 * 9.8 * 1025.0 * (wombat%bdet_density(i,j,k) - 1025.0) & + * rad_bdet**3.0 + 9.0*wombat%dynvis_sw(i,j,k)**2.0 ) & + - 3.0*wombat%dynvis_sw(i,j,k) ) / (1025.0 * rad_bdet) ! [m/s] enddo wombat%p_wdet(i,j,:) = wsink1(:) @@ -6800,6 +6848,8 @@ subroutine generic_WOMBATmid_update_from_source(tracer_list, Temp, Salt, & wombat%p_wcaco3(i,j,:) = wsink1(:) wombat%p_wafe(i,j,:) = wombat%wafe wombat%p_wbafe(i,j,:) = wombat%wbafe + wombat%det_radius(i,j) = rad_det + wombat%bdet_radius(i,j) = rad_bdet else wombat%p_wdet(i,j,:) = 0.0 wombat%p_wdetfe(i,j,:) = 0.0 @@ -6810,16 +6860,18 @@ subroutine generic_WOMBATmid_update_from_source(tracer_list, Temp, Salt, & wombat%p_wafe(i,j,:) = 0.0 wombat%p_wbafe(i,j,:) = 0.0 endif - ! PJB: export production through 100 metres - k = k100(i,j) - wombat%export_prod(i,j) = (wombat%Rho_0 * wombat%p_wdet(i,j,k)) * wombat%f_det(i,j,k) + & - (wombat%Rho_0 * wombat%p_wbdet(i,j,k)) * wombat%f_bdet(i,j,k) ! [mol/m2/s] - wombat%export_inorg(i,j) = (wombat%Rho_0 * wombat%p_wcaco3(i,j,k)) * wombat%f_caco3(i,j,k) ! [mol/m2/s] enddo; enddo + + !-----------------------------------------------------------------------! + !-----------------------------------------------------------------------! + !-----------------------------------------------------------------------! + ! [Step 23] Sedimentary processes ! + !-----------------------------------------------------------------------! + !-----------------------------------------------------------------------! + !-----------------------------------------------------------------------! !----------------------------------------------------------------------- - ! Remineralisation of sediment tracers - !----------------------------------------------------------------------- + call g_tracer_get_pointer(tracer_list, 'det_sediment', 'field', wombat%p_det_sediment) ! [mol/m2] call g_tracer_get_pointer(tracer_list, 'detfe_sediment', 'field', wombat%p_detfe_sediment) ! [mol/m2] call g_tracer_get_pointer(tracer_list, 'detsi_sediment', 'field', wombat%p_detsi_sediment) ! [mol/m2] @@ -6878,18 +6930,18 @@ subroutine generic_WOMBATmid_update_from_source(tracer_list, Temp, Salt, & ! pjb: Sum the water column concentration of DIC and the organic carbon content of the ! sediment to approximate the interstitial (i.e., porewater) DIC concentration. ! We assume that the organic carbon content of the sediment (p_det_sediment) in mol/m2 is - ! relevant over one meter, and therefore can be automatically converted to mol/m3 and then + ! relevant over 10 cm, and therefore can be converted to mol/m3 via division by 0.1 and then ! subsequently converted through the mol/kg using Rho_0. With this assumption these arrays ! can be added together. ! We add these arrays together to simulate the reducing conditions of organic-rich sediments, ! and to calculate a lower omega for calcite, which ensures greater rates of dissolution of ! CaCO3 within the sediment as organic matter accumulates. - wombat%seddic(i,j) = wombat%seddic(i,j) + wombat%p_det_sediment(i,j,1) / wombat%Rho_0 + wombat%seddic(i,j) = wombat%seddic(i,j) + wombat%p_det_sediment(i,j,1) / 0.1 / wombat%Rho_0 endif enddo; enddo call FMS_ocmip2_co2calc(CO2_dope_vec, wombat%sedmask(:,:), & - wombat%sedtemp(:,:), wombat%sedsalt(:,:), & + wombat%sedtemp(:,:), max(1.0, wombat%sedsalt(:,:)), & min(wombat%dic_max*mmol_m3_to_mol_kg, max(wombat%seddic(:,:), wombat%dic_min*mmol_m3_to_mol_kg)), & max(wombat%sedno3(:,:) / 16., 1e-9), & wombat%sedsil(:,:), & @@ -6908,25 +6960,24 @@ subroutine generic_WOMBATmid_update_from_source(tracer_list, Temp, Salt, & !!!~~~ Organic carbon and iron ~~~!!! wombat%det_sed_remin(i,j) = wombat%detlrem_sed * fbc * wombat%p_det_sediment(i,j,1) ! [mol/m2/s] - wombat%detfe_sed_remin(i,j) = wombat%detlrem_sed * 0.25 * fbc * wombat%p_detfe_sediment(i,j,1) ! [mol/m2/s] + wombat%detfe_sed_remin(i,j) = wombat%detlrem_sed * fbc * wombat%p_detfe_sediment(i,j,1) ! [mol/m2/s] !!!~~~ Biogenic silica ~~~!!! zval = max(273.15, wombat%sedtemp(i,j) + 273.15) ! temperature in Kelvin - biobac1 = max(epsi, wombat%f_bac1(i,j,k) ) / mmol_m3_to_mol_kg ![mmol/m3] - biobac2 = max(epsi, wombat%f_bac2(i,j,k) ) / mmol_m3_to_mol_kg ![mmol/m3] - ! Activation energy of 50 kJ/mol for dissolution in sediments at reference temperature 5 degC [Van Cappellen, 1996] - disssi_temp = wombat%bsilrem_sed * exp( -50.0*1e3/Rgas * (1./zval - 1./278.15) ) ! [1/s] - disssi_usat = max(0.0, (1 - wombat%sedsil(i,j) / wombat%sileqc(i,j,k))**2.0 ) - disssi_bact = 1.0 + wombat%bsi_fbac * max(0.0, (biobac1 + biobac2) / ( biobac1 + biobac2 + wombat%bsi_kbac )) + biobac1 = max(epsi, wombat%f_bac1(i,j,k) ) / mmol_m3_to_mol_kg ![mmol/m3] + biobac2 = max(epsi, wombat%f_bac2(i,j,k) ) / mmol_m3_to_mol_kg ![mmol/m3] + disssi_temp = exp(-8.0 + 0.0833*Temp(i,j,k)) / 3600.0 ! [1/s] + disssi_usat = (1 - min(1.0, wombat%f_sil(i,j,k) / max(wombat%sileqc(i,j,k), 1e-3)) )**2.0 + disssi_bact = 1.0 + wombat%bsi_fbac * (biobac1 + biobac2) / ( biobac1 + biobac2 + wombat%bsi_kbac ) wombat%detsi_sed_remin(i,j) = wombat%p_detsi_sediment(i,j,1) * disssi_temp * disssi_usat * disssi_bact! [mol/m2/s] !!!~~~ CaCO3 dissolution ~~~!!! if (do_caco3_dynamics) then wombat%caco3_sed_remin(i,j) = wombat%caco3lrem_sed * fbc * wombat%p_caco3_sediment(i,j,1) & - * max((1.0 - wombat%omegamax_sed), (1.0 - wombat%sedomega_cal(i,j)))**(4.5) + * (1.0 - min(1.0, max(0.01, wombat%sedomega_cal(i,j))))**(4.5) else wombat%caco3_sed_remin(i,j) = wombat%caco3lrem_sed * fbc * wombat%p_caco3_sediment(i,j,1) & - * (1.0 - 0.2081)**(4.5) + * (1.0 - 0.20)**(4.5) endif !!!~~~ Benthic denitrification ~~~!!! @@ -6944,14 +6995,15 @@ subroutine generic_WOMBATmid_update_from_source(tracer_list, Temp, Salt, & ! Remineralisation of sediments to supply nutrient fields. ! btf values are positive from the water column into the sediment. - wombat%b_nh4(i,j) = -16./122. * wombat%det_sed_remin(i,j) ! [mol/m2/s] + wombat%b_doc(i,j) = -wombat%det_sed_remin(i,j) ! [mol/m2/s] + wombat%b_don(i,j) = -16./122. * wombat%det_sed_remin(i,j) ! [mol/m2/s] wombat%b_no3(i,j) = wombat%det_sed_denit(i,j) ! [molN/m2/s] - wombat%b_o2(i,j) = -132./16. * wombat%b_nh4(i,j) * (1.0 - wombat%fdenit(i,j))! [mol/m2/s] - wombat%b_dic(i,j) = 122./16. * wombat%b_nh4(i,j) - wombat%caco3_sed_remin(i,j) ! [mol/m2/s] + wombat%b_o2(i,j) = -132./122. * wombat%b_doc(i,j) * (1.0 - wombat%fdenit(i,j))! [mol/m2/s] + wombat%b_dic(i,j) = -wombat%caco3_sed_remin(i,j) ! [mol/m2/s] wombat%b_dicr(i,j) = wombat%b_dic(i,j) ! [mol/m2/s] wombat%b_fe(i,j) = -1.0 * wombat%detfe_sed_remin(i,j) ! [mol/m2/s] wombat%b_sil(i,j) = -1.0 * wombat%detsi_sed_remin(i,j) ! [mol/m2/s] - wombat%b_alk(i,j) = -2.0 * wombat%caco3_sed_remin(i,j) + wombat%b_nh4(i,j) - wombat%b_no3(i,j) ! [mol/m2/s] + wombat%b_alk(i,j) = -2.0 * wombat%caco3_sed_remin(i,j) - wombat%b_no3(i,j) ! [mol/m2/s] endif enddo; enddo @@ -6968,7 +7020,8 @@ subroutine generic_WOMBATmid_update_from_source(tracer_list, Temp, Salt, & endif enddo; enddo - call g_tracer_set_values(tracer_list, 'nh4', 'btf', wombat%b_nh4, isd, jsd) + call g_tracer_set_values(tracer_list, 'doc', 'btf', wombat%b_doc, isd, jsd) + call g_tracer_set_values(tracer_list, 'don', 'btf', wombat%b_don, isd, jsd) call g_tracer_set_values(tracer_list, 'no3', 'btf', wombat%b_no3, isd, jsd) call g_tracer_set_values(tracer_list, 'o2', 'btf', wombat%b_o2, isd, jsd) call g_tracer_set_values(tracer_list, 'dic', 'btf', wombat%b_dic, isd, jsd) @@ -6978,22 +7031,6 @@ subroutine generic_WOMBATmid_update_from_source(tracer_list, Temp, Salt, & call g_tracer_set_values(tracer_list, 'alk', 'btf', wombat%b_alk, isd, jsd) - ! Apply back burial loss of nitrogen and alkalinity to surface - !----------------------------------------------------------------------- - if (do_conserve_tracers) then - call g_tracer_get_pointer(tracer_list, 'detbury', 'field', wombat%p_detbury) ! [mol/m2/s] - call g_tracer_get_pointer(tracer_list, 'caco3bury', 'field', wombat%p_caco3bury) ! [mol/m2/s] - call g_tracer_get_pointer(tracer_list, 'nh4', 'stf', wombat%p_nh4_stf) - call g_tracer_get_pointer(tracer_list, 'alk', 'stf', wombat%p_alk_stf) - ! Spread the addition around to all grid cells - if (sum(grid_tmask(:,:,1))>0.0) then - avedetbury = sum(wombat%p_detbury(:,:,1) * grid_dat(:,:)) / sum(grid_dat(:,:) * grid_tmask(:,:,1)) ! [mol/m2/s] - avecaco3bury = sum(wombat%p_caco3bury(:,:,1) * grid_dat(:,:)) / sum(grid_dat(:,:) * grid_tmask(:,:,1)) ! [mol/m2/s] - wombat%p_nh4_stf(:,:) = wombat%p_nh4_stf(:,:) + avedetbury*16.0/122.0 ! [mol/m2/s] - wombat%p_alk_stf(:,:) = wombat%p_alk_stf(:,:) - avedetbury*16.0/122.0 + avecaco3bury*2.0 ! [mol/m2/s] - endif - endif - !======================================================================= ! Send diagnostics !======================================================================= @@ -7042,16 +7079,50 @@ subroutine generic_WOMBATmid_update_from_source(tracer_list, Temp, Salt, & used = g_send_data(wombat%id_alk_vstf, wombat%alk_vstf, model_time, & rmask=grid_tmask(:,:,1), is_in=isc, js_in=jsc, ie_in=iec, je_in=jec) - if (wombat%id_dynvis_sw > 0) & - used = g_send_data(wombat%id_dynvis_sw, wombat%dynvis_sw, model_time, & + if (wombat%id_npp3d > 0) & + used = g_send_data(wombat%id_npp3d, wombat%npp3d, model_time, & + rmask=grid_tmask, is_in=isc, js_in=jsc, ks_in=1, ie_in=iec, je_in=jec, ke_in=nk) + + if (wombat%id_rpp3d > 0) & + used = g_send_data(wombat%id_rpp3d, wombat%rpp3d, model_time, & rmask=grid_tmask, is_in=isc, js_in=jsc, ks_in=1, ie_in=iec, je_in=jec, ke_in=nk) - if (wombat%id_dic_correct > 0) & - used = g_send_data(wombat%id_dic_correct, wombat%dic_correct, model_time, & + if (wombat%id_zsp3d > 0) & + used = g_send_data(wombat%id_zsp3d, wombat%zsp3d, model_time, & rmask=grid_tmask, is_in=isc, js_in=jsc, ks_in=1, ie_in=iec, je_in=jec, ke_in=nk) - if (wombat%id_alk_correct > 0) & - used = g_send_data(wombat%id_alk_correct, wombat%alk_correct, model_time, & + if (wombat%id_npp2d > 0) then + wombat%npp2d = 0.0 + do k = 1,nk + wombat%npp2d(isc:iec,jsc:jec) = wombat%npp2d(isc:iec,jsc:jec) + & + wombat%npp3d(isc:iec,jsc:jec,k) * rho_dzt(isc:iec,jsc:jec,k) ! [mol/m2/s] + enddo + used = g_send_data(wombat%id_npp2d, wombat%npp2d, model_time, & + rmask=grid_tmask(:,:,1), is_in=isc, js_in=jsc, ie_in=iec, je_in=jec) + endif + + if (wombat%id_rpp2d > 0) then + wombat%rpp2d = 0.0 + do k = 1,nk + wombat%rpp2d(isc:iec,jsc:jec) = wombat%rpp2d(isc:iec,jsc:jec) + & + wombat%rpp3d(isc:iec,jsc:jec,k) * rho_dzt(isc:iec,jsc:jec,k) ! [mol/m2/s] + enddo + used = g_send_data(wombat%id_rpp2d, wombat%rpp2d, model_time, & + rmask=grid_tmask(:,:,1), is_in=isc, js_in=jsc, ie_in=iec, je_in=jec) + endif + + if (wombat%id_zsp2d > 0) then + wombat%zsp2d = 0.0 + do k = 1,nk + wombat%zsp2d(isc:iec,jsc:jec) = wombat%zsp2d(isc:iec,jsc:jec) + & + wombat%zsp3d(isc:iec,jsc:jec,k) * rho_dzt(isc:iec,jsc:jec,k) ! [mol/m2/s] + enddo + used = g_send_data(wombat%id_zsp2d, wombat%zsp2d, model_time, & + rmask=grid_tmask(:,:,1), is_in=isc, js_in=jsc, ie_in=iec, je_in=jec) + endif + + if (wombat%id_dynvis_sw > 0) & + used = g_send_data(wombat%id_dynvis_sw, wombat%dynvis_sw, model_time, & rmask=grid_tmask, is_in=isc, js_in=jsc, ks_in=1, ie_in=iec, je_in=jec, ke_in=nk) if (wombat%id_radbio > 0) & @@ -7066,14 +7137,6 @@ subroutine generic_WOMBATmid_update_from_source(tracer_list, Temp, Salt, & used = g_send_data(wombat%id_radmld, wombat%radmld, model_time, & rmask=grid_tmask, is_in=isc, js_in=jsc, ks_in=1, ie_in=iec, je_in=jec, ke_in=nk) - if (wombat%id_radbio1 > 0) & - used = g_send_data(wombat%id_radbio1, wombat%radbio(:,:,1), model_time, & - rmask=grid_tmask(:,:,1), is_in=isc, js_in=jsc, ie_in=iec, je_in=jec) - - if (wombat%id_pprod_gross > 0) & - used = g_send_data(wombat%id_pprod_gross, wombat%pprod_gross, model_time, & - rmask=grid_tmask, is_in=isc, js_in=jsc, ks_in=1, ie_in=iec, je_in=jec, ke_in=nk) - if (wombat%id_phy_mumax > 0) & used = g_send_data(wombat%id_phy_mumax, wombat%phy_mumax, model_time, & rmask=grid_tmask, is_in=isc, js_in=jsc, ks_in=1, ie_in=iec, je_in=jec, ke_in=nk) @@ -7086,10 +7149,6 @@ subroutine generic_WOMBATmid_update_from_source(tracer_list, Temp, Salt, & used = g_send_data(wombat%id_pchl_mu, wombat%pchl_mu, model_time, & rmask=grid_tmask, is_in=isc, js_in=jsc, ks_in=1, ie_in=iec, je_in=jec, ke_in=nk) - if (wombat%id_pchl_lpar > 0) & - used = g_send_data(wombat%id_pchl_lpar, wombat%pchl_lpar, model_time, & - rmask=grid_tmask, is_in=isc, js_in=jsc, ks_in=1, ie_in=iec, je_in=jec, ke_in=nk) - if (wombat%id_phy_kni > 0) & used = g_send_data(wombat%id_phy_kni, wombat%phy_kni, model_time, & rmask=grid_tmask, is_in=isc, js_in=jsc, ks_in=1, ie_in=iec, je_in=jec, ke_in=nk) @@ -7134,10 +7193,6 @@ subroutine generic_WOMBATmid_update_from_source(tracer_list, Temp, Salt, & used = g_send_data(wombat%id_dchl_mu, wombat%dchl_mu, model_time, & rmask=grid_tmask, is_in=isc, js_in=jsc, ks_in=1, ie_in=iec, je_in=jec, ke_in=nk) - if (wombat%id_dchl_lpar > 0) & - used = g_send_data(wombat%id_dchl_lpar, wombat%dchl_lpar, model_time, & - rmask=grid_tmask, is_in=isc, js_in=jsc, ks_in=1, ie_in=iec, je_in=jec, ke_in=nk) - if (wombat%id_dia_kni > 0) & used = g_send_data(wombat%id_dia_kni, wombat%dia_kni, model_time, & rmask=grid_tmask, is_in=isc, js_in=jsc, ks_in=1, ie_in=iec, je_in=jec, ke_in=nk) @@ -7270,12 +7325,12 @@ subroutine generic_WOMBATmid_update_from_source(tracer_list, Temp, Salt, & used = g_send_data(wombat%id_phydoc, wombat%phydoc, model_time, & rmask=grid_tmask, is_in=isc, js_in=jsc, ks_in=1, ie_in=iec, je_in=jec, ke_in=nk) - if (wombat%id_phylyse > 0) & - used = g_send_data(wombat%id_phylyse, wombat%phylyse, model_time, & + if (wombat%id_phymorl > 0) & + used = g_send_data(wombat%id_phymorl, wombat%phymorl, model_time, & rmask=grid_tmask, is_in=isc, js_in=jsc, ks_in=1, ie_in=iec, je_in=jec, ke_in=nk) - if (wombat%id_phymort > 0) & - used = g_send_data(wombat%id_phymort, wombat%phymort, model_time, & + if (wombat%id_phymorq > 0) & + used = g_send_data(wombat%id_phymorq, wombat%phymorq, model_time, & rmask=grid_tmask, is_in=isc, js_in=jsc, ks_in=1, ie_in=iec, je_in=jec, ke_in=nk) if (wombat%id_dia_feupreg > 0) & @@ -7298,12 +7353,12 @@ subroutine generic_WOMBATmid_update_from_source(tracer_list, Temp, Salt, & used = g_send_data(wombat%id_diadoc, wombat%diadoc, model_time, & rmask=grid_tmask, is_in=isc, js_in=jsc, ks_in=1, ie_in=iec, je_in=jec, ke_in=nk) - if (wombat%id_dialyse > 0) & - used = g_send_data(wombat%id_dialyse, wombat%dialyse, model_time, & + if (wombat%id_diamorl > 0) & + used = g_send_data(wombat%id_diamorl, wombat%diamorl, model_time, & rmask=grid_tmask, is_in=isc, js_in=jsc, ks_in=1, ie_in=iec, je_in=jec, ke_in=nk) - if (wombat%id_diamort > 0) & - used = g_send_data(wombat%id_diamort, wombat%diamort, model_time, & + if (wombat%id_diamorq > 0) & + used = g_send_data(wombat%id_diamorq, wombat%diamorq, model_time, & rmask=grid_tmask, is_in=isc, js_in=jsc, ks_in=1, ie_in=iec, je_in=jec, ke_in=nk) if (wombat%id_zooeps > 0) & @@ -7358,12 +7413,12 @@ subroutine generic_WOMBATmid_update_from_source(tracer_list, Temp, Salt, & used = g_send_data(wombat%id_zoograzdet, wombat%zoograzdet, model_time, & rmask=grid_tmask, is_in=isc, js_in=jsc, ks_in=1, ie_in=iec, je_in=jec, ke_in=nk) - if (wombat%id_zooresp > 0) & - used = g_send_data(wombat%id_zooresp, wombat%zooresp, model_time, & + if (wombat%id_zoomorl > 0) & + used = g_send_data(wombat%id_zoomorl, wombat%zoomorl, model_time, & rmask=grid_tmask, is_in=isc, js_in=jsc, ks_in=1, ie_in=iec, je_in=jec, ke_in=nk) - if (wombat%id_zoomort > 0) & - used = g_send_data(wombat%id_zoomort, wombat%zoomort, model_time, & + if (wombat%id_zoomorq > 0) & + used = g_send_data(wombat%id_zoomorq, wombat%zoomorq, model_time, & rmask=grid_tmask, is_in=isc, js_in=jsc, ks_in=1, ie_in=iec, je_in=jec, ke_in=nk) if (wombat%id_zooexcrbac1 > 0) & @@ -7482,12 +7537,12 @@ subroutine generic_WOMBATmid_update_from_source(tracer_list, Temp, Salt, & used = g_send_data(wombat%id_mesgrazzoo, wombat%mesgrazzoo, model_time, & rmask=grid_tmask, is_in=isc, js_in=jsc, ks_in=1, ie_in=iec, je_in=jec, ke_in=nk) - if (wombat%id_mesresp > 0) & - used = g_send_data(wombat%id_mesresp, wombat%mesresp, model_time, & + if (wombat%id_mesmorl > 0) & + used = g_send_data(wombat%id_mesmorl, wombat%mesmorl, model_time, & rmask=grid_tmask, is_in=isc, js_in=jsc, ks_in=1, ie_in=iec, je_in=jec, ke_in=nk) - if (wombat%id_mesmort > 0) & - used = g_send_data(wombat%id_mesmort, wombat%mesmort, model_time, & + if (wombat%id_mesmorq > 0) & + used = g_send_data(wombat%id_mesmorq, wombat%mesmorq, model_time, & rmask=grid_tmask, is_in=isc, js_in=jsc, ks_in=1, ie_in=iec, je_in=jec, ke_in=nk) if (wombat%id_mesexcrbac1 > 0) & @@ -7574,6 +7629,14 @@ subroutine generic_WOMBATmid_update_from_source(tracer_list, Temp, Salt, & used = g_send_data(wombat%id_don2remi, wombat%don2remi, model_time, & rmask=grid_tmask, is_in=isc, js_in=jsc, ks_in=1, ie_in=iec, je_in=jec, ke_in=nk) + if (wombat%id_bac1nupt > 0) & + used = g_send_data(wombat%id_bac1nupt, wombat%bac1nupt, model_time, & + rmask=grid_tmask, is_in=isc, js_in=jsc, ks_in=1, ie_in=iec, je_in=jec, ke_in=nk) + + if (wombat%id_bac2nupt > 0) & + used = g_send_data(wombat%id_bac2nupt, wombat%bac2nupt, model_time, & + rmask=grid_tmask, is_in=isc, js_in=jsc, ks_in=1, ie_in=iec, je_in=jec, ke_in=nk) + if (wombat%id_detremi > 0) & used = g_send_data(wombat%id_detremi, wombat%detremi, model_time, & rmask=grid_tmask, is_in=isc, js_in=jsc, ks_in=1, ie_in=iec, je_in=jec, ke_in=nk) @@ -7586,14 +7649,38 @@ subroutine generic_WOMBATmid_update_from_source(tracer_list, Temp, Salt, & used = g_send_data(wombat%id_pic2poc, wombat%pic2poc, model_time, & rmask=grid_tmask, is_in=isc, js_in=jsc, ks_in=1, ie_in=iec, je_in=jec, ke_in=nk) - if (wombat%id_dissrat > 0) & - used = g_send_data(wombat%id_dissrat, wombat%dissrat, model_time, & + if (wombat%id_dissratcal > 0) & + used = g_send_data(wombat%id_dissratcal, wombat%dissratcal, model_time, & + rmask=grid_tmask, is_in=isc, js_in=jsc, ks_in=1, ie_in=iec, je_in=jec, ke_in=nk) + + if (wombat%id_dissratara > 0) & + used = g_send_data(wombat%id_dissratara, wombat%dissratara, model_time, & + rmask=grid_tmask, is_in=isc, js_in=jsc, ks_in=1, ie_in=iec, je_in=jec, ke_in=nk) + + if (wombat%id_dissratpoc > 0) & + used = g_send_data(wombat%id_dissratpoc, wombat%dissratpoc, model_time, & + rmask=grid_tmask, is_in=isc, js_in=jsc, ks_in=1, ie_in=iec, je_in=jec, ke_in=nk) + + if (wombat%id_zoodiss > 0) & + used = g_send_data(wombat%id_zoodiss, wombat%zoodiss, model_time, & + rmask=grid_tmask, is_in=isc, js_in=jsc, ks_in=1, ie_in=iec, je_in=jec, ke_in=nk) + + if (wombat%id_mesdiss > 0) & + used = g_send_data(wombat%id_mesdiss, wombat%mesdiss, model_time, & rmask=grid_tmask, is_in=isc, js_in=jsc, ks_in=1, ie_in=iec, je_in=jec, ke_in=nk) if (wombat%id_caldiss > 0) & used = g_send_data(wombat%id_caldiss, wombat%caldiss, model_time, & rmask=grid_tmask, is_in=isc, js_in=jsc, ks_in=1, ie_in=iec, je_in=jec, ke_in=nk) + if (wombat%id_aradiss > 0) & + used = g_send_data(wombat%id_aradiss, wombat%aradiss, model_time, & + rmask=grid_tmask, is_in=isc, js_in=jsc, ks_in=1, ie_in=iec, je_in=jec, ke_in=nk) + + if (wombat%id_pocdiss > 0) & + used = g_send_data(wombat%id_pocdiss, wombat%pocdiss, model_time, & + rmask=grid_tmask, is_in=isc, js_in=jsc, ks_in=1, ie_in=iec, je_in=jec, ke_in=nk) + if (wombat%id_aoa_loxy > 0) & used = g_send_data(wombat%id_aoa_loxy, wombat%aoa_loxy, model_time, & rmask=grid_tmask, is_in=isc, js_in=jsc, ks_in=1, ie_in=iec, je_in=jec, ke_in=nk) @@ -7602,8 +7689,12 @@ subroutine generic_WOMBATmid_update_from_source(tracer_list, Temp, Salt, & used = g_send_data(wombat%id_aoa_lnh4, wombat%aoa_lnh4, model_time, & rmask=grid_tmask, is_in=isc, js_in=jsc, ks_in=1, ie_in=iec, je_in=jec, ke_in=nk) - if (wombat%id_aoa_yn2o > 0) & - used = g_send_data(wombat%id_aoa_yn2o, wombat%aoa_yn2o, model_time, & + if (wombat%id_aoa_en2o > 0) & + used = g_send_data(wombat%id_aoa_en2o, wombat%aoa_en2o, model_time, & + rmask=grid_tmask, is_in=isc, js_in=jsc, ks_in=1, ie_in=iec, je_in=jec, ke_in=nk) + + if (wombat%id_aoa_eno3 > 0) & + used = g_send_data(wombat%id_aoa_eno3, wombat%aoa_eno3, model_time, & rmask=grid_tmask, is_in=isc, js_in=jsc, ks_in=1, ie_in=iec, je_in=jec, ke_in=nk) if (wombat%id_aoa_mumax > 0) & @@ -7622,12 +7713,24 @@ subroutine generic_WOMBATmid_update_from_source(tracer_list, Temp, Salt, & used = g_send_data(wombat%id_aoaresp, wombat%aoaresp, model_time, & rmask=grid_tmask, is_in=isc, js_in=jsc, ks_in=1, ie_in=iec, je_in=jec, ke_in=nk) - if (wombat%id_aoamor1 > 0) & - used = g_send_data(wombat%id_aoamor1, wombat%aoamor1, model_time, & + if (wombat%id_aoamorl > 0) & + used = g_send_data(wombat%id_aoamorl, wombat%aoamorl, model_time, & + rmask=grid_tmask, is_in=isc, js_in=jsc, ks_in=1, ie_in=iec, je_in=jec, ke_in=nk) + + if (wombat%id_aoamorq > 0) & + used = g_send_data(wombat%id_aoamorq, wombat%aoamorq, model_time, & + rmask=grid_tmask, is_in=isc, js_in=jsc, ks_in=1, ie_in=iec, je_in=jec, ke_in=nk) + + if (wombat%id_bac_ydon > 0) & + used = g_send_data(wombat%id_bac_ydon, wombat%bac_ydon, model_time, & + rmask=grid_tmask, is_in=isc, js_in=jsc, ks_in=1, ie_in=iec, je_in=jec, ke_in=nk) + + if (wombat%id_bac1_ydoc > 0) & + used = g_send_data(wombat%id_bac1_ydoc, wombat%bac1_ydoc, model_time, & rmask=grid_tmask, is_in=isc, js_in=jsc, ks_in=1, ie_in=iec, je_in=jec, ke_in=nk) - if (wombat%id_aoamor2 > 0) & - used = g_send_data(wombat%id_aoamor2, wombat%aoamor2, model_time, & + if (wombat%id_bac2_ydoc > 0) & + used = g_send_data(wombat%id_bac2_ydoc, wombat%bac2_ydoc, model_time, & rmask=grid_tmask, is_in=isc, js_in=jsc, ks_in=1, ie_in=iec, je_in=jec, ke_in=nk) if (wombat%id_bac1grow > 0) & @@ -7646,14 +7749,6 @@ subroutine generic_WOMBATmid_update_from_source(tracer_list, Temp, Salt, & used = g_send_data(wombat%id_bac1ufer, wombat%bac1ufer, model_time, & rmask=grid_tmask, is_in=isc, js_in=jsc, ks_in=1, ie_in=iec, je_in=jec, ke_in=nk) - if (wombat%id_bac1_lnit > 0) & - used = g_send_data(wombat%id_bac1_lnit, wombat%bac1_lnit, model_time, & - rmask=grid_tmask, is_in=isc, js_in=jsc, ks_in=1, ie_in=iec, je_in=jec, ke_in=nk) - - if (wombat%id_bac1_lfer > 0) & - used = g_send_data(wombat%id_bac1_lfer, wombat%bac1_lfer, model_time, & - rmask=grid_tmask, is_in=isc, js_in=jsc, ks_in=1, ie_in=iec, je_in=jec, ke_in=nk) - if (wombat%id_bac1_mu > 0) & used = g_send_data(wombat%id_bac1_mu, wombat%bac1_mu, model_time, & rmask=grid_tmask, is_in=isc, js_in=jsc, ks_in=1, ie_in=iec, je_in=jec, ke_in=nk) @@ -7662,12 +7757,20 @@ subroutine generic_WOMBATmid_update_from_source(tracer_list, Temp, Salt, & used = g_send_data(wombat%id_bac1_fanaer, wombat%bac1_fanaer, model_time, & rmask=grid_tmask, is_in=isc, js_in=jsc, ks_in=1, ie_in=iec, je_in=jec, ke_in=nk) - if (wombat%id_bac1mor1 > 0) & - used = g_send_data(wombat%id_bac1mor1, wombat%bac1mor1, model_time, & + if (wombat%id_bac1_fnlim > 0) & + used = g_send_data(wombat%id_bac1_fnlim, wombat%bac1_fnlim, model_time, & + rmask=grid_tmask, is_in=isc, js_in=jsc, ks_in=1, ie_in=iec, je_in=jec, ke_in=nk) + + if (wombat%id_bac1_ffelim > 0) & + used = g_send_data(wombat%id_bac1_ffelim, wombat%bac1_ffelim, model_time, & + rmask=grid_tmask, is_in=isc, js_in=jsc, ks_in=1, ie_in=iec, je_in=jec, ke_in=nk) + + if (wombat%id_bac1morl > 0) & + used = g_send_data(wombat%id_bac1morl, wombat%bac1morl, model_time, & rmask=grid_tmask, is_in=isc, js_in=jsc, ks_in=1, ie_in=iec, je_in=jec, ke_in=nk) - if (wombat%id_bac1mor2 > 0) & - used = g_send_data(wombat%id_bac1mor2, wombat%bac1mor2, model_time, & + if (wombat%id_bac1morq > 0) & + used = g_send_data(wombat%id_bac1morq, wombat%bac1morq, model_time, & rmask=grid_tmask, is_in=isc, js_in=jsc, ks_in=1, ie_in=iec, je_in=jec, ke_in=nk) if (wombat%id_bac1deni > 0) & @@ -7690,14 +7793,6 @@ subroutine generic_WOMBATmid_update_from_source(tracer_list, Temp, Salt, & used = g_send_data(wombat%id_bac2ufer, wombat%bac2ufer, model_time, & rmask=grid_tmask, is_in=isc, js_in=jsc, ks_in=1, ie_in=iec, je_in=jec, ke_in=nk) - if (wombat%id_bac2_lnit > 0) & - used = g_send_data(wombat%id_bac2_lnit, wombat%bac2_lnit, model_time, & - rmask=grid_tmask, is_in=isc, js_in=jsc, ks_in=1, ie_in=iec, je_in=jec, ke_in=nk) - - if (wombat%id_bac2_lfer > 0) & - used = g_send_data(wombat%id_bac2_lfer, wombat%bac2_lfer, model_time, & - rmask=grid_tmask, is_in=isc, js_in=jsc, ks_in=1, ie_in=iec, je_in=jec, ke_in=nk) - if (wombat%id_bac2_mu > 0) & used = g_send_data(wombat%id_bac2_mu, wombat%bac2_mu, model_time, & rmask=grid_tmask, is_in=isc, js_in=jsc, ks_in=1, ie_in=iec, je_in=jec, ke_in=nk) @@ -7706,12 +7801,20 @@ subroutine generic_WOMBATmid_update_from_source(tracer_list, Temp, Salt, & used = g_send_data(wombat%id_bac2_fanaer, wombat%bac2_fanaer, model_time, & rmask=grid_tmask, is_in=isc, js_in=jsc, ks_in=1, ie_in=iec, je_in=jec, ke_in=nk) - if (wombat%id_bac2mor1 > 0) & - used = g_send_data(wombat%id_bac2mor1, wombat%bac2mor1, model_time, & + if (wombat%id_bac2_fnlim > 0) & + used = g_send_data(wombat%id_bac2_fnlim, wombat%bac2_fnlim, model_time, & + rmask=grid_tmask, is_in=isc, js_in=jsc, ks_in=1, ie_in=iec, je_in=jec, ke_in=nk) + + if (wombat%id_bac2_ffelim > 0) & + used = g_send_data(wombat%id_bac2_ffelim, wombat%bac2_ffelim, model_time, & + rmask=grid_tmask, is_in=isc, js_in=jsc, ks_in=1, ie_in=iec, je_in=jec, ke_in=nk) + + if (wombat%id_bac2morl > 0) & + used = g_send_data(wombat%id_bac2morl, wombat%bac2morl, model_time, & rmask=grid_tmask, is_in=isc, js_in=jsc, ks_in=1, ie_in=iec, je_in=jec, ke_in=nk) - if (wombat%id_bac2mor2 > 0) & - used = g_send_data(wombat%id_bac2mor2, wombat%bac2mor2, model_time, & + if (wombat%id_bac2morq > 0) & + used = g_send_data(wombat%id_bac2morq, wombat%bac2morq, model_time, & rmask=grid_tmask, is_in=isc, js_in=jsc, ks_in=1, ie_in=iec, je_in=jec, ke_in=nk) if (wombat%id_bac2deni > 0) & @@ -7738,117 +7841,37 @@ subroutine generic_WOMBATmid_update_from_source(tracer_list, Temp, Salt, & used = g_send_data(wombat%id_anammox, wombat%anammox, model_time, & rmask=grid_tmask, is_in=isc, js_in=jsc, ks_in=1, ie_in=iec, je_in=jec, ke_in=nk) - if (wombat%id_pprod_gross_2d > 0) then - wombat%pprod_gross_2d = 0.0 - do k = 1,nk; do j = jsc,jec; do i = isc,iec; - wombat%pprod_gross_2d(i,j) = wombat%pprod_gross_2d(i,j) + & - wombat%pprod_gross(i,j,k) * rho_dzt(i,j,k) ! [mol/m2/s] - enddo; enddo; enddo - used = g_send_data(wombat%id_pprod_gross_2d, wombat%pprod_gross_2d, model_time, & - rmask=grid_tmask(:,:,1), is_in=isc, js_in=jsc, ie_in=iec, je_in=jec) - endif - - if (wombat%id_export_prod > 0) & - used = g_send_data(wombat%id_export_prod, wombat%export_prod, model_time, & - rmask=grid_tmask(:,:,1), is_in=isc, js_in=jsc, ie_in=iec, je_in=jec) - - if (wombat%id_export_inorg > 0) & - used = g_send_data(wombat%id_export_inorg, wombat%export_inorg, model_time, & - rmask=grid_tmask(:,:,1), is_in=isc, js_in=jsc, ie_in=iec, je_in=jec) - - if (wombat%id_npp3d > 0) & - used = g_send_data(wombat%id_npp3d, wombat%npp3d, model_time, & + if (wombat%id_nosdoc_overflow > 0) & + used = g_send_data(wombat%id_nosdoc_overflow, wombat%nosdoc_overflow, model_time, & rmask=grid_tmask, is_in=isc, js_in=jsc, ks_in=1, ie_in=iec, je_in=jec, ke_in=nk) - if (wombat%id_npp2d > 0) then - wombat%npp2d = 0.0 - do k = 1,nk - wombat%npp2d(isc:iec,jsc:jec) = wombat%npp2d(isc:iec,jsc:jec) + & - wombat%npp3d(isc:iec,jsc:jec,k) * rho_dzt(isc:iec,jsc:jec,k) ! [mol/m2/s] - enddo - used = g_send_data(wombat%id_npp2d, wombat%npp2d, model_time, & - rmask=grid_tmask(:,:,1), is_in=isc, js_in=jsc, ie_in=iec, je_in=jec) - endif - - if (wombat%id_npp1 > 0) & - used = g_send_data(wombat%id_npp1, wombat%npp3d(:,:,1), model_time, & - rmask=grid_tmask(:,:,1), is_in=isc, js_in=jsc, ie_in=iec, je_in=jec) - - if (wombat%id_zprod_gross > 0) & - used = g_send_data(wombat%id_zprod_gross, wombat%zprod_gross, model_time, & + if (wombat%id_nosdoc_excretion > 0) & + used = g_send_data(wombat%id_nosdoc_excretion, wombat%nosdoc_excretion, model_time, & rmask=grid_tmask, is_in=isc, js_in=jsc, ks_in=1, ie_in=iec, je_in=jec, ke_in=nk) - if (wombat%id_dic_intmld > 0) & - used = g_send_data(wombat%id_dic_intmld, wombat%dic_intmld, model_time, & - rmask=grid_tmask(:,:,1), is_in=isc, js_in=jsc, ie_in=iec, je_in=jec) - - if (wombat%id_o2_intmld > 0) & - used = g_send_data(wombat%id_o2_intmld, wombat%o2_intmld, model_time, & - rmask=grid_tmask(:,:,1), is_in=isc, js_in=jsc, ie_in=iec, je_in=jec) - - if (wombat%id_no3_intmld > 0) & - used = g_send_data(wombat%id_no3_intmld, wombat%no3_intmld, model_time, & - rmask=grid_tmask(:,:,1), is_in=isc, js_in=jsc, ie_in=iec, je_in=jec) - - if (wombat%id_fe_intmld > 0) & - used = g_send_data(wombat%id_fe_intmld, wombat%fe_intmld, model_time, & - rmask=grid_tmask(:,:,1), is_in=isc, js_in=jsc, ie_in=iec, je_in=jec) - - if (wombat%id_phy_intmld > 0) & - used = g_send_data(wombat%id_phy_intmld, wombat%phy_intmld, model_time, & - rmask=grid_tmask(:,:,1), is_in=isc, js_in=jsc, ie_in=iec, je_in=jec) - - if (wombat%id_det_intmld > 0) & - used = g_send_data(wombat%id_det_intmld, wombat%det_intmld, model_time, & - rmask=grid_tmask(:,:,1), is_in=isc, js_in=jsc, ie_in=iec, je_in=jec) - - if (wombat%id_pprod_gross_intmld > 0) & - used = g_send_data(wombat%id_pprod_gross_intmld, wombat%pprod_gross_intmld, model_time, & - rmask=grid_tmask(:,:,1), is_in=isc, js_in=jsc, ie_in=iec, je_in=jec) - - if (wombat%id_npp_intmld > 0) & - used = g_send_data(wombat%id_npp_intmld, wombat%npp_intmld, model_time, & - rmask=grid_tmask(:,:,1), is_in=isc, js_in=jsc, ie_in=iec, je_in=jec) - - if (wombat%id_radbio_intmld > 0) & - used = g_send_data(wombat%id_radbio_intmld, wombat%radbio_intmld, model_time, & - rmask=grid_tmask(:,:,1), is_in=isc, js_in=jsc, ie_in=iec, je_in=jec) - - if (wombat%id_dic_int100 > 0) & - used = g_send_data(wombat%id_dic_int100, wombat%dic_int100, model_time, & - rmask=grid_tmask(:,:,1), is_in=isc, js_in=jsc, ie_in=iec, je_in=jec) - - if (wombat%id_o2_int100 > 0) & - used = g_send_data(wombat%id_o2_int100, wombat%o2_int100, model_time, & - rmask=grid_tmask(:,:,1), is_in=isc, js_in=jsc, ie_in=iec, je_in=jec) - - if (wombat%id_no3_int100 > 0) & - used = g_send_data(wombat%id_no3_int100, wombat%no3_int100, model_time, & - rmask=grid_tmask(:,:,1), is_in=isc, js_in=jsc, ie_in=iec, je_in=jec) - - if (wombat%id_fe_int100 > 0) & - used = g_send_data(wombat%id_fe_int100, wombat%fe_int100, model_time, & - rmask=grid_tmask(:,:,1), is_in=isc, js_in=jsc, ie_in=iec, je_in=jec) + if (wombat%id_nosdoc_phylysis > 0) & + used = g_send_data(wombat%id_nosdoc_phylysis, wombat%nosdoc_phylysis, model_time, & + rmask=grid_tmask, is_in=isc, js_in=jsc, ks_in=1, ie_in=iec, je_in=jec, ke_in=nk) - if (wombat%id_phy_int100 > 0) & - used = g_send_data(wombat%id_phy_int100, wombat%phy_int100, model_time, & - rmask=grid_tmask(:,:,1), is_in=isc, js_in=jsc, ie_in=iec, je_in=jec) + if (wombat%id_nosdoc_baclysis > 0) & + used = g_send_data(wombat%id_nosdoc_baclysis, wombat%nosdoc_baclysis, model_time, & + rmask=grid_tmask, is_in=isc, js_in=jsc, ks_in=1, ie_in=iec, je_in=jec, ke_in=nk) - if (wombat%id_det_int100 > 0) & - used = g_send_data(wombat%id_det_int100, wombat%det_int100, model_time, & - rmask=grid_tmask(:,:,1), is_in=isc, js_in=jsc, ie_in=iec, je_in=jec) + if (wombat%id_nosdoc_dethydro > 0) & + used = g_send_data(wombat%id_nosdoc_dethydro, wombat%nosdoc_dethydro, model_time, & + rmask=grid_tmask, is_in=isc, js_in=jsc, ks_in=1, ie_in=iec, je_in=jec, ke_in=nk) - if (wombat%id_pprod_gross_int100 > 0) & - used = g_send_data(wombat%id_pprod_gross_int100, wombat%pprod_gross_int100, model_time, & - rmask=grid_tmask(:,:,1), is_in=isc, js_in=jsc, ie_in=iec, je_in=jec) + if (wombat%id_nosdoc_docconsu > 0) & + used = g_send_data(wombat%id_nosdoc_docconsu, wombat%nosdoc_docconsu, model_time, & + rmask=grid_tmask, is_in=isc, js_in=jsc, ks_in=1, ie_in=iec, je_in=jec, ke_in=nk) - if (wombat%id_npp_int100 > 0) & - used = g_send_data(wombat%id_npp_int100, wombat%npp_int100, model_time, & - rmask=grid_tmask(:,:,1), is_in=isc, js_in=jsc, ie_in=iec, je_in=jec) + if (wombat%id_det_density > 0) & + used = g_send_data(wombat%id_det_density, wombat%det_density, model_time, & + rmask=grid_tmask, is_in=isc, js_in=jsc, ks_in=1, ie_in=iec, je_in=jec, ke_in=nk) - if (wombat%id_radbio_int100 > 0) & - used = g_send_data(wombat%id_radbio_int100, wombat%radbio_int100, model_time, & - rmask=grid_tmask(:,:,1), is_in=isc, js_in=jsc, ie_in=iec, je_in=jec) + if (wombat%id_bdet_density > 0) & + used = g_send_data(wombat%id_bdet_density, wombat%bdet_density, model_time, & + rmask=grid_tmask, is_in=isc, js_in=jsc, ks_in=1, ie_in=iec, je_in=jec, ke_in=nk) if (wombat%id_det_sed_remin > 0) & used = g_send_data(wombat%id_det_sed_remin, wombat%det_sed_remin, model_time, & @@ -7878,6 +7901,14 @@ subroutine generic_WOMBATmid_update_from_source(tracer_list, Temp, Salt, & used = g_send_data(wombat%id_zeuphot, wombat%zeuphot, model_time, & rmask=grid_tmask(:,:,1), is_in=isc, js_in=jsc, ie_in=iec, je_in=jec) + if (wombat%id_det_radius > 0) & + used = g_send_data(wombat%id_det_radius, wombat%det_radius, model_time, & + rmask=grid_tmask(:,:,1), is_in=isc, js_in=jsc, ie_in=iec, je_in=jec) + + if (wombat%id_bdet_radius > 0) & + used = g_send_data(wombat%id_bdet_radius, wombat%bdet_radius, model_time, & + rmask=grid_tmask(:,:,1), is_in=isc, js_in=jsc, ie_in=iec, je_in=jec) + if (wombat%id_seddep > 0) & used = g_send_data(wombat%id_seddep, wombat%seddep, model_time, & rmask=grid_tmask(:,:,1), is_in=isc, js_in=jsc, ie_in=iec, je_in=jec) @@ -8030,7 +8061,7 @@ subroutine generic_WOMBATmid_set_boundary_values(tracer_list, SST, SSS, rho, ilb endif call FMS_ocmip2_co2calc(CO2_dope_vec, grid_tmask(:,:,1), & - SST(:,:), SSS(:,:), & + SST(:,:), max(1.0, SSS(:,:)), & min(wombat%dic_max*mmol_m3_to_mol_kg, max(wombat%f_dic(:,:,1), wombat%dic_min*mmol_m3_to_mol_kg)), & max(wombat%f_no3(:,:,1) / 16., 1e-9), & wombat%f_sil(:,:,1), & @@ -8264,6 +8295,7 @@ subroutine user_allocate_arrays allocate(wombat%f_bdetsi(isd:ied, jsd:jed, 1:nk)); wombat%f_bdetsi(:,:,:)=0.0 allocate(wombat%f_doc(isd:ied, jsd:jed, 1:nk)); wombat%f_doc(:,:,:)=0.0 allocate(wombat%f_don(isd:ied, jsd:jed, 1:nk)); wombat%f_don(:,:,:)=0.0 + allocate(wombat%f_nosdoc(isd:ied, jsd:jed, 1:nk)); wombat%f_nosdoc(:,:,:)=0.0 allocate(wombat%f_bac1(isd:ied, jsd:jed, 1:nk)); wombat%f_bac1(:,:,:)=0.0 allocate(wombat%f_bac2(isd:ied, jsd:jed, 1:nk)); wombat%f_bac2(:,:,:)=0.0 allocate(wombat%f_aoa(isd:ied, jsd:jed, 1:nk)); wombat%f_aoa(:,:,:)=0.0 @@ -8274,7 +8306,8 @@ subroutine user_allocate_arrays allocate(wombat%f_afe(isd:ied, jsd:jed, 1:nk)); wombat%f_afe(:,:,:)=0.0 allocate(wombat%f_bafe(isd:ied, jsd:jed, 1:nk)); wombat%f_bafe(:,:,:)=0.0 - allocate(wombat%b_nh4(isd:ied, jsd:jed)); wombat%b_nh4(:,:)=0.0 + allocate(wombat%b_doc(isd:ied, jsd:jed)); wombat%b_doc(:,:)=0.0 + allocate(wombat%b_don(isd:ied, jsd:jed)); wombat%b_don(:,:)=0.0 allocate(wombat%b_no3(isd:ied, jsd:jed)); wombat%b_no3(:,:)=0.0 allocate(wombat%b_o2(isd:ied, jsd:jed)); wombat%b_o2(:,:)=0.0 allocate(wombat%b_dic(isd:ied, jsd:jed)); wombat%b_dic(:,:)=0.0 @@ -8284,22 +8317,18 @@ subroutine user_allocate_arrays allocate(wombat%b_alk(isd:ied, jsd:jed)); wombat%b_alk(:,:)=0.0 allocate(wombat%dynvis_sw(isd:ied, jsd:jed, 1:nk)); wombat%dynvis_sw(:,:,:)=0.0 - allocate(wombat%dic_correct(isd:ied, jsd:jed, 1:nk)); wombat%dic_correct(:,:,:)=0.0 - allocate(wombat%alk_correct(isd:ied, jsd:jed, 1:nk)); wombat%alk_correct(:,:,:)=0.0 allocate(wombat%radbio(isd:ied, jsd:jed, 1:nk)); wombat%radbio(:,:,:)=0.0 allocate(wombat%radmid(isd:ied, jsd:jed, 1:nk)); wombat%radmid(:,:,:)=0.0 allocate(wombat%radmld(isd:ied, jsd:jed, 1:nk)); wombat%radmld(:,:,:)=0.0 - allocate(wombat%pprod_gross(isd:ied, jsd:jed, 1:nk)); wombat%pprod_gross(:,:,:)=0.0 - allocate(wombat%pprod_gross_2d(isd:ied, jsd:jed)); wombat%pprod_gross_2d(:,:)=0.0 - allocate(wombat%zprod_gross(isd:ied, jsd:jed, 1:nk)); wombat%zprod_gross(:,:,:)=0.0 - allocate(wombat%export_prod(isd:ied, jsd:jed)); wombat%export_prod(:,:)=0.0 - allocate(wombat%export_inorg(isd:ied, jsd:jed)); wombat%export_inorg(:,:)=0.0 - allocate(wombat%npp2d(isd:ied, jsd:jed)); wombat%npp2d(:,:)=0.0 allocate(wombat%npp3d(isd:ied, jsd:jed, 1:nk)); wombat%npp3d(:,:,:)=0.0 + allocate(wombat%rpp3d(isd:ied, jsd:jed, 1:nk)); wombat%rpp3d(:,:,:)=0.0 + allocate(wombat%zsp3d(isd:ied, jsd:jed, 1:nk)); wombat%zsp3d(:,:,:)=0.0 + allocate(wombat%npp2d(isd:ied, jsd:jed)); wombat%npp2d(:,:)=0.0 + allocate(wombat%rpp2d(isd:ied, jsd:jed)); wombat%rpp2d(:,:)=0.0 + allocate(wombat%zsp2d(isd:ied, jsd:jed)); wombat%zsp2d(:,:)=0.0 allocate(wombat%phy_mumax(isd:ied, jsd:jed, 1:nk)); wombat%phy_mumax(:,:,:)=0.0 allocate(wombat%phy_mu(isd:ied, jsd:jed, 1:nk)); wombat%phy_mu(:,:,:)=0.0 allocate(wombat%pchl_mu(isd:ied, jsd:jed, 1:nk)); wombat%pchl_mu(:,:,:)=0.0 - allocate(wombat%pchl_lpar(isd:ied, jsd:jed, 1:nk)); wombat%pchl_lpar(:,:,:)=0.0 allocate(wombat%phy_kni(isd:ied, jsd:jed, 1:nk)); wombat%phy_kni(:,:,:)=0.0 allocate(wombat%phy_kfe(isd:ied, jsd:jed, 1:nk)); wombat%phy_kfe(:,:,:)=0.0 allocate(wombat%phy_lpar(isd:ied, jsd:jed, 1:nk)); wombat%phy_lpar(:,:,:)=0.0 @@ -8311,7 +8340,6 @@ subroutine user_allocate_arrays allocate(wombat%dia_mumax(isd:ied, jsd:jed, 1:nk)); wombat%dia_mumax(:,:,:)=0.0 allocate(wombat%dia_mu(isd:ied, jsd:jed, 1:nk)); wombat%dia_mu(:,:,:)=0.0 allocate(wombat%dchl_mu(isd:ied, jsd:jed, 1:nk)); wombat%dchl_mu(:,:,:)=0.0 - allocate(wombat%dchl_lpar(isd:ied, jsd:jed, 1:nk)); wombat%dchl_lpar(:,:,:)=0.0 allocate(wombat%dia_kni(isd:ied, jsd:jed, 1:nk)); wombat%dia_kni(:,:,:)=0.0 allocate(wombat%dia_kfe(isd:ied, jsd:jed, 1:nk)); wombat%dia_kfe(:,:,:)=0.0 allocate(wombat%dia_ksi(isd:ied, jsd:jed, 1:nk)); wombat%dia_ksi(:,:,:)=0.0 @@ -8345,15 +8373,15 @@ subroutine user_allocate_arrays allocate(wombat%phy_fedoreg(isd:ied, jsd:jed, 1:nk)); wombat%phy_fedoreg(:,:,:)=0.0 allocate(wombat%phygrow(isd:ied, jsd:jed, 1:nk)); wombat%phygrow(:,:,:)=0.0 allocate(wombat%phydoc(isd:ied, jsd:jed, 1:nk)); wombat%phydoc(:,:,:)=0.0 - allocate(wombat%phylyse(isd:ied, jsd:jed, 1:nk)); wombat%phylyse(:,:,:)=0.0 - allocate(wombat%phymort(isd:ied, jsd:jed, 1:nk)); wombat%phymort(:,:,:)=0.0 + allocate(wombat%phymorl(isd:ied, jsd:jed, 1:nk)); wombat%phymorl(:,:,:)=0.0 + allocate(wombat%phymorq(isd:ied, jsd:jed, 1:nk)); wombat%phymorq(:,:,:)=0.0 allocate(wombat%dia_feupreg(isd:ied, jsd:jed, 1:nk)); wombat%dia_feupreg(:,:,:)=0.0 allocate(wombat%dia_fedoreg(isd:ied, jsd:jed, 1:nk)); wombat%dia_fedoreg(:,:,:)=0.0 allocate(wombat%dia_sidoreg(isd:ied, jsd:jed, 1:nk)); wombat%dia_sidoreg(:,:,:)=0.0 allocate(wombat%diagrow(isd:ied, jsd:jed, 1:nk)); wombat%diagrow(:,:,:)=0.0 allocate(wombat%diadoc(isd:ied, jsd:jed, 1:nk)); wombat%diadoc(:,:,:)=0.0 - allocate(wombat%dialyse(isd:ied, jsd:jed, 1:nk)); wombat%dialyse(:,:,:)=0.0 - allocate(wombat%diamort(isd:ied, jsd:jed, 1:nk)); wombat%diamort(:,:,:)=0.0 + allocate(wombat%diamorl(isd:ied, jsd:jed, 1:nk)); wombat%diamorl(:,:,:)=0.0 + allocate(wombat%diamorq(isd:ied, jsd:jed, 1:nk)); wombat%diamorq(:,:,:)=0.0 allocate(wombat%zooeps(isd:ied, jsd:jed, 1:nk)); wombat%zooeps(:,:,:)=0.0 allocate(wombat%zooprefbac1(isd:ied, jsd:jed, 1:nk)); wombat%zooprefbac1(:,:,:)=0.0 allocate(wombat%zooprefbac2(isd:ied, jsd:jed, 1:nk)); wombat%zooprefbac2(:,:,:)=0.0 @@ -8367,8 +8395,8 @@ subroutine user_allocate_arrays allocate(wombat%zoograzphy(isd:ied, jsd:jed, 1:nk)); wombat%zoograzphy(:,:,:)=0.0 allocate(wombat%zoograzdia(isd:ied, jsd:jed, 1:nk)); wombat%zoograzdia(:,:,:)=0.0 allocate(wombat%zoograzdet(isd:ied, jsd:jed, 1:nk)); wombat%zoograzdet(:,:,:)=0.0 - allocate(wombat%zooresp(isd:ied, jsd:jed, 1:nk)); wombat%zooresp(:,:,:)=0.0 - allocate(wombat%zoomort(isd:ied, jsd:jed, 1:nk)); wombat%zoomort(:,:,:)=0.0 + allocate(wombat%zoomorl(isd:ied, jsd:jed, 1:nk)); wombat%zoomorl(:,:,:)=0.0 + allocate(wombat%zoomorq(isd:ied, jsd:jed, 1:nk)); wombat%zoomorq(:,:,:)=0.0 allocate(wombat%zooexcrbac1(isd:ied, jsd:jed, 1:nk)); wombat%zooexcrbac1(:,:,:)=0.0 allocate(wombat%zooexcrbac2(isd:ied, jsd:jed, 1:nk)); wombat%zooexcrbac2(:,:,:)=0.0 allocate(wombat%zooexcraoa(isd:ied, jsd:jed, 1:nk)); wombat%zooexcraoa(:,:,:)=0.0 @@ -8398,8 +8426,8 @@ subroutine user_allocate_arrays allocate(wombat%mesgrazdet(isd:ied, jsd:jed, 1:nk)); wombat%mesgrazdet(:,:,:)=0.0 allocate(wombat%mesgrazbdet(isd:ied, jsd:jed, 1:nk)); wombat%mesgrazbdet(:,:,:)=0.0 allocate(wombat%mesgrazzoo(isd:ied, jsd:jed, 1:nk)); wombat%mesgrazzoo(:,:,:)=0.0 - allocate(wombat%mesresp(isd:ied, jsd:jed, 1:nk)); wombat%mesresp(:,:,:)=0.0 - allocate(wombat%mesmort(isd:ied, jsd:jed, 1:nk)); wombat%mesmort(:,:,:)=0.0 + allocate(wombat%mesmorl(isd:ied, jsd:jed, 1:nk)); wombat%mesmorl(:,:,:)=0.0 + allocate(wombat%mesmorq(isd:ied, jsd:jed, 1:nk)); wombat%mesmorq(:,:,:)=0.0 allocate(wombat%mesexcrbac1(isd:ied, jsd:jed, 1:nk)); wombat%mesexcrbac1(:,:,:)=0.0 allocate(wombat%mesexcrbac2(isd:ied, jsd:jed, 1:nk)); wombat%mesexcrbac2(:,:,:)=0.0 allocate(wombat%mesexcraoa(isd:ied, jsd:jed, 1:nk)); wombat%mesexcraoa(:,:,:)=0.0 @@ -8419,51 +8447,67 @@ subroutine user_allocate_arrays allocate(wombat%reminr(isd:ied, jsd:jed, 1:nk)); wombat%reminr(:,:,:)=0.0 allocate(wombat%doc1remi(isd:ied, jsd:jed, 1:nk)); wombat%doc1remi(:,:,:)=0.0 allocate(wombat%don1remi(isd:ied, jsd:jed, 1:nk)); wombat%don1remi(:,:,:)=0.0 + allocate(wombat%bac1nupt(isd:ied, jsd:jed, 1:nk)); wombat%bac1nupt(:,:,:)=0.0 allocate(wombat%doc2remi(isd:ied, jsd:jed, 1:nk)); wombat%doc2remi(:,:,:)=0.0 allocate(wombat%don2remi(isd:ied, jsd:jed, 1:nk)); wombat%don2remi(:,:,:)=0.0 + allocate(wombat%bac2nupt(isd:ied, jsd:jed, 1:nk)); wombat%bac2nupt(:,:,:)=0.0 allocate(wombat%detremi(isd:ied, jsd:jed, 1:nk)); wombat%detremi(:,:,:)=0.0 allocate(wombat%bdetremi(isd:ied, jsd:jed, 1:nk)); wombat%bdetremi(:,:,:)=0.0 allocate(wombat%pic2poc(isd:ied, jsd:jed, 1:nk)); wombat%pic2poc(:,:,:)=0.0 - allocate(wombat%dissrat(isd:ied, jsd:jed, 1:nk)); wombat%dissrat(:,:,:)=0.0 + allocate(wombat%dissratcal(isd:ied, jsd:jed, 1:nk)); wombat%dissratcal(:,:,:)=0.0 + allocate(wombat%dissratara(isd:ied, jsd:jed, 1:nk)); wombat%dissratara(:,:,:)=0.0 + allocate(wombat%dissratpoc(isd:ied, jsd:jed, 1:nk)); wombat%dissratpoc(:,:,:)=0.0 + allocate(wombat%zoodiss(isd:ied, jsd:jed, 1:nk)); wombat%zoodiss(:,:,:)=0.0 + allocate(wombat%mesdiss(isd:ied, jsd:jed, 1:nk)); wombat%mesdiss(:,:,:)=0.0 allocate(wombat%caldiss(isd:ied, jsd:jed, 1:nk)); wombat%caldiss(:,:,:)=0.0 + allocate(wombat%aradiss(isd:ied, jsd:jed, 1:nk)); wombat%aradiss(:,:,:)=0.0 + allocate(wombat%pocdiss(isd:ied, jsd:jed, 1:nk)); wombat%pocdiss(:,:,:)=0.0 allocate(wombat%aoa_loxy(isd:ied, jsd:jed, 1:nk)); wombat%aoa_loxy(:,:,:)=0.0 allocate(wombat%aoa_lnh4(isd:ied, jsd:jed, 1:nk)); wombat%aoa_lnh4(:,:,:)=0.0 - allocate(wombat%aoa_yn2o(isd:ied, jsd:jed, 1:nk)); wombat%aoa_yn2o(:,:,:)=0.0 + allocate(wombat%aoa_en2o(isd:ied, jsd:jed, 1:nk)); wombat%aoa_en2o(:,:,:)=0.0 + allocate(wombat%aoa_eno3(isd:ied, jsd:jed, 1:nk)); wombat%aoa_eno3(:,:,:)=0.0 allocate(wombat%aoa_mumax(isd:ied, jsd:jed, 1:nk)); wombat%aoa_mumax(:,:,:)=0.0 allocate(wombat%aoa_mu(isd:ied, jsd:jed, 1:nk)); wombat%aoa_mu(:,:,:)=0.0 allocate(wombat%aoagrow(isd:ied, jsd:jed, 1:nk)); wombat%aoagrow(:,:,:)=0.0 allocate(wombat%aoaresp(isd:ied, jsd:jed, 1:nk)); wombat%aoaresp(:,:,:)=0.0 - allocate(wombat%aoamor1(isd:ied, jsd:jed, 1:nk)); wombat%aoamor1(:,:,:)=0.0 - allocate(wombat%aoamor2(isd:ied, jsd:jed, 1:nk)); wombat%aoamor2(:,:,:)=0.0 + allocate(wombat%aoamorl(isd:ied, jsd:jed, 1:nk)); wombat%aoamorl(:,:,:)=0.0 + allocate(wombat%aoamorq(isd:ied, jsd:jed, 1:nk)); wombat%aoamorq(:,:,:)=0.0 + allocate(wombat%bac_ydon(isd:ied, jsd:jed, 1:nk)); wombat%bac_ydon(:,:,:)=0.0 + allocate(wombat%bac1_ydoc(isd:ied, jsd:jed, 1:nk)); wombat%bac1_ydoc(:,:,:)=0.0 + allocate(wombat%bac2_ydoc(isd:ied, jsd:jed, 1:nk)); wombat%bac2_ydoc(:,:,:)=0.0 allocate(wombat%bac1grow(isd:ied, jsd:jed, 1:nk)); wombat%bac1grow(:,:,:)=0.0 allocate(wombat%bac1resp(isd:ied, jsd:jed, 1:nk)); wombat%bac1resp(:,:,:)=0.0 allocate(wombat%bac1unh4(isd:ied, jsd:jed, 1:nk)); wombat%bac1unh4(:,:,:)=0.0 allocate(wombat%bac1ufer(isd:ied, jsd:jed, 1:nk)); wombat%bac1ufer(:,:,:)=0.0 - allocate(wombat%bac1_lnit(isd:ied, jsd:jed, 1:nk)); wombat%bac1_lnit(:,:,:)=0.0 - allocate(wombat%bac1_lfer(isd:ied, jsd:jed, 1:nk)); wombat%bac1_lfer(:,:,:)=0.0 allocate(wombat%bac1_mu(isd:ied, jsd:jed, 1:nk)); wombat%bac1_mu(:,:,:)=0.0 - allocate(wombat%bac1_kdoc(isd:ied, jsd:jed, 1:nk)); wombat%bac1_kdoc(:,:,:)=0.0 allocate(wombat%bac1_fanaer(isd:ied, jsd:jed, 1:nk)); wombat%bac1_fanaer(:,:,:)=0.0 - allocate(wombat%bac1mor1(isd:ied, jsd:jed, 1:nk)); wombat%bac1mor1(:,:,:)=0.0 - allocate(wombat%bac1mor2(isd:ied, jsd:jed, 1:nk)); wombat%bac1mor2(:,:,:)=0.0 + allocate(wombat%bac1_fnlim(isd:ied, jsd:jed, 1:nk)); wombat%bac1_fnlim(:,:,:)=0.0 + allocate(wombat%bac1_ffelim(isd:ied, jsd:jed, 1:nk)); wombat%bac1_ffelim(:,:,:)=0.0 + allocate(wombat%bac1morl(isd:ied, jsd:jed, 1:nk)); wombat%bac1morl(:,:,:)=0.0 + allocate(wombat%bac1morq(isd:ied, jsd:jed, 1:nk)); wombat%bac1morq(:,:,:)=0.0 allocate(wombat%bac1deni(isd:ied, jsd:jed, 1:nk)); wombat%bac1deni(:,:,:)=0.0 allocate(wombat%bac2grow(isd:ied, jsd:jed, 1:nk)); wombat%bac2grow(:,:,:)=0.0 allocate(wombat%bac2resp(isd:ied, jsd:jed, 1:nk)); wombat%bac2resp(:,:,:)=0.0 allocate(wombat%bac2unh4(isd:ied, jsd:jed, 1:nk)); wombat%bac2unh4(:,:,:)=0.0 allocate(wombat%bac2ufer(isd:ied, jsd:jed, 1:nk)); wombat%bac2ufer(:,:,:)=0.0 - allocate(wombat%bac2_lnit(isd:ied, jsd:jed, 1:nk)); wombat%bac2_lnit(:,:,:)=0.0 - allocate(wombat%bac2_lfer(isd:ied, jsd:jed, 1:nk)); wombat%bac2_lfer(:,:,:)=0.0 allocate(wombat%bac2_mu(isd:ied, jsd:jed, 1:nk)); wombat%bac2_mu(:,:,:)=0.0 - allocate(wombat%bac2_kdoc(isd:ied, jsd:jed, 1:nk)); wombat%bac2_kdoc(:,:,:)=0.0 allocate(wombat%bac2_fanaer(isd:ied, jsd:jed, 1:nk)); wombat%bac2_fanaer(:,:,:)=0.0 - allocate(wombat%bac2mor1(isd:ied, jsd:jed, 1:nk)); wombat%bac2mor1(:,:,:)=0.0 - allocate(wombat%bac2mor2(isd:ied, jsd:jed, 1:nk)); wombat%bac2mor2(:,:,:)=0.0 + allocate(wombat%bac2_fnlim(isd:ied, jsd:jed, 1:nk)); wombat%bac2_fnlim(:,:,:)=0.0 + allocate(wombat%bac2_ffelim(isd:ied, jsd:jed, 1:nk)); wombat%bac2_ffelim(:,:,:)=0.0 + allocate(wombat%bac2morl(isd:ied, jsd:jed, 1:nk)); wombat%bac2morl(:,:,:)=0.0 + allocate(wombat%bac2morq(isd:ied, jsd:jed, 1:nk)); wombat%bac2morq(:,:,:)=0.0 allocate(wombat%bac2deni(isd:ied, jsd:jed, 1:nk)); wombat%bac2deni(:,:,:)=0.0 allocate(wombat%aox_lnh4(isd:ied, jsd:jed, 1:nk)); wombat%aox_lnh4(:,:,:)=0.0 allocate(wombat%aox_mu(isd:ied, jsd:jed, 1:nk)); wombat%aox_mu(:,:,:)=0.0 allocate(wombat%nitrfix(isd:ied, jsd:jed, 1:nk)); wombat%nitrfix(:,:,:)=0.0 allocate(wombat%ammox(isd:ied, jsd:jed, 1:nk)); wombat%ammox(:,:,:)=0.0 allocate(wombat%anammox(isd:ied, jsd:jed, 1:nk)); wombat%anammox(:,:,:)=0.0 + allocate(wombat%nosdoc_overflow(isd:ied, jsd:jed, 1:nk)); wombat%nosdoc_overflow(:,:,:)=0.0 + allocate(wombat%nosdoc_excretion(isd:ied, jsd:jed, 1:nk)); wombat%nosdoc_excretion(:,:,:)=0.0 + allocate(wombat%nosdoc_phylysis(isd:ied, jsd:jed, 1:nk)); wombat%nosdoc_phylysis(:,:,:)=0.0 + allocate(wombat%nosdoc_baclysis(isd:ied, jsd:jed, 1:nk)); wombat%nosdoc_baclysis(:,:,:)=0.0 + allocate(wombat%nosdoc_dethydro(isd:ied, jsd:jed, 1:nk)); wombat%nosdoc_dethydro(:,:,:)=0.0 + allocate(wombat%nosdoc_docconsu(isd:ied, jsd:jed, 1:nk)); wombat%nosdoc_docconsu(:,:,:)=0.0 allocate(wombat%no3_prev(isd:ied, jsd:jed, 1:nk)); wombat%no3_prev(:,:,:)=0.0 allocate(wombat%caco3_prev(isd:ied, jsd:jed, 1:nk)); wombat%caco3_prev(:,:,:)=0.0 allocate(wombat%det_sed_remin(isd:ied, jsd:jed)); wombat%det_sed_remin(:,:)=0.0 @@ -8483,27 +8527,12 @@ subroutine user_allocate_arrays allocate(wombat%bafe_btm(isd:ied, jsd:jed)); wombat%bafe_btm(:,:)=0.0 allocate(wombat%zw(isd:ied, jsd:jed, 1:nk)); wombat%zw(:,:,:)=0.0 allocate(wombat%zm(isd:ied, jsd:jed, 1:nk)); wombat%zm(:,:,:)=0.0 + allocate(wombat%det_density(isd:ied, jsd:jed, 1:nk)); wombat%det_density(:,:,:)=0.0 + allocate(wombat%bdet_density(isd:ied, jsd:jed, 1:nk)); wombat%bdet_density(:,:,:)=0.0 - allocate(wombat%dic_intmld(isd:ied, jsd:jed)); wombat%dic_intmld(:,:)=0.0 - allocate(wombat%o2_intmld(isd:ied, jsd:jed)); wombat%o2_intmld(:,:)=0.0 - allocate(wombat%no3_intmld(isd:ied, jsd:jed)); wombat%no3_intmld(:,:)=0.0 - allocate(wombat%fe_intmld(isd:ied, jsd:jed)); wombat%fe_intmld(:,:)=0.0 - allocate(wombat%phy_intmld(isd:ied, jsd:jed)); wombat%phy_intmld(:,:)=0.0 - allocate(wombat%det_intmld(isd:ied, jsd:jed)); wombat%det_intmld(:,:)=0.0 - allocate(wombat%pprod_gross_intmld(isd:ied, jsd:jed)); wombat%pprod_gross_intmld(:,:)=0.0 - allocate(wombat%npp_intmld(isd:ied, jsd:jed)); wombat%npp_intmld(:,:)=0.0 - allocate(wombat%radbio_intmld(isd:ied, jsd:jed)); wombat%radbio_intmld(:,:)=0.0 - - allocate(wombat%dic_int100(isd:ied, jsd:jed)); wombat%dic_int100(:,:)=0.0 - allocate(wombat%o2_int100(isd:ied, jsd:jed)); wombat%o2_int100(:,:)=0.0 - allocate(wombat%no3_int100(isd:ied, jsd:jed)); wombat%no3_int100(:,:)=0.0 - allocate(wombat%fe_int100(isd:ied, jsd:jed)); wombat%fe_int100(:,:)=0.0 - allocate(wombat%phy_int100(isd:ied, jsd:jed)); wombat%phy_int100(:,:)=0.0 - allocate(wombat%det_int100(isd:ied, jsd:jed)); wombat%det_int100(:,:)=0.0 - allocate(wombat%pprod_gross_int100(isd:ied, jsd:jed)); wombat%pprod_gross_int100(:,:)=0.0 - allocate(wombat%npp_int100(isd:ied, jsd:jed)); wombat%npp_int100(:,:)=0.0 - allocate(wombat%radbio_int100(isd:ied, jsd:jed)); wombat%radbio_int100(:,:)=0.0 allocate(wombat%zeuphot(isd:ied, jsd:jed)); wombat%zeuphot(:,:)=0.0 + allocate(wombat%det_radius(isd:ied, jsd:jed)); wombat%det_radius(:,:)=0.0 + allocate(wombat%bdet_radius(isd:ied, jsd:jed)); wombat%bdet_radius(:,:)=0.0 allocate(wombat%seddep(isd:ied, jsd:jed)); wombat%seddep(:,:)=0.0 allocate(wombat%sedmask(isd:ied, jsd:jed)); wombat%sedmask(:,:)=0.0 allocate(wombat%sedtemp(isd:ied, jsd:jed)); wombat%sedtemp(:,:)=0.0 @@ -8575,6 +8604,7 @@ subroutine user_deallocate_arrays wombat%f_bdetsi, & wombat%f_doc, & wombat%f_don, & + wombat%f_nosdoc, & wombat%f_bac1, & wombat%f_bac2, & wombat%f_aoa, & @@ -8586,7 +8616,8 @@ subroutine user_deallocate_arrays wombat%f_bafe) deallocate( & - wombat%b_nh4, & + wombat%b_doc, & + wombat%b_don, & wombat%b_no3, & wombat%b_o2, & wombat%b_dic, & @@ -8599,17 +8630,15 @@ subroutine user_deallocate_arrays wombat%radbio, & wombat%radmid, & wombat%radmld, & - wombat%pprod_gross, & - wombat%pprod_gross_2d, & - wombat%zprod_gross, & - wombat%export_prod, & - wombat%export_inorg, & - wombat%npp2d, & + wombat%zsp3d, & + wombat%rpp3d, & wombat%npp3d, & + wombat%npp2d, & + wombat%rpp2d, & + wombat%zsp2d, & wombat%phy_mumax, & wombat%phy_mu, & wombat%pchl_mu, & - wombat%pchl_lpar, & wombat%phy_kni, & wombat%phy_kfe, & wombat%phy_lpar, & @@ -8621,7 +8650,6 @@ subroutine user_deallocate_arrays wombat%dia_mumax, & wombat%dia_mu, & wombat%dchl_mu, & - wombat%dchl_lpar, & wombat%dia_kni, & wombat%dia_kfe, & wombat%dia_ksi, & @@ -8655,15 +8683,15 @@ subroutine user_deallocate_arrays wombat%phy_fedoreg, & wombat%phygrow, & wombat%phydoc, & - wombat%phylyse, & - wombat%phymort, & + wombat%phymorl, & + wombat%phymorq, & wombat%dia_feupreg, & wombat%dia_fedoreg, & wombat%dia_sidoreg, & wombat%diagrow, & wombat%diadoc, & - wombat%dialyse, & - wombat%diamort, & + wombat%diamorl, & + wombat%diamorq, & wombat%zooprefbac1, & wombat%zooprefbac2, & wombat%zooprefaoa, & @@ -8676,8 +8704,8 @@ subroutine user_deallocate_arrays wombat%zoograzphy, & wombat%zoograzdia, & wombat%zoograzdet, & - wombat%zooresp, & - wombat%zoomort, & + wombat%zoomorl, & + wombat%zoomorq, & wombat%zooexcrbac1, & wombat%zooexcrbac2, & wombat%zooexcraoa, & @@ -8706,8 +8734,8 @@ subroutine user_deallocate_arrays wombat%mesgrazdet, & wombat%mesgrazbdet, & wombat%mesgrazzoo, & - wombat%mesresp, & - wombat%mesmort, & + wombat%mesmorl, & + wombat%mesmorq, & wombat%mesexcrbac1, & wombat%mesexcrbac2, & wombat%mesexcraoa, & @@ -8727,51 +8755,67 @@ subroutine user_deallocate_arrays wombat%reminr, & wombat%doc1remi, & wombat%don1remi, & + wombat%bac1nupt, & wombat%doc2remi, & wombat%don2remi, & + wombat%bac2nupt, & wombat%detremi, & wombat%bdetremi, & wombat%pic2poc, & - wombat%dissrat, & + wombat%dissratcal, & + wombat%dissratara, & + wombat%dissratpoc, & + wombat%zoodiss, & + wombat%mesdiss, & wombat%caldiss, & + wombat%aradiss, & + wombat%pocdiss, & wombat%aoa_loxy, & wombat%aoa_lnh4, & - wombat%aoa_yn2o, & + wombat%aoa_en2o, & + wombat%aoa_eno3, & wombat%aoa_mumax, & wombat%aoa_mu, & wombat%aoagrow, & wombat%aoaresp, & - wombat%aoamor1, & - wombat%aoamor2, & + wombat%aoamorl, & + wombat%aoamorq, & + wombat%bac_ydon, & + wombat%bac1_ydoc, & + wombat%bac2_ydoc, & wombat%bac1grow, & wombat%bac1resp, & wombat%bac1unh4, & wombat%bac1ufer, & - wombat%bac1_lnit, & - wombat%bac1_lfer, & wombat%bac1_mu, & - wombat%bac1_kdoc, & wombat%bac1_fanaer, & - wombat%bac1mor1, & - wombat%bac1mor2, & + wombat%bac1_fnlim, & + wombat%bac1_ffelim, & + wombat%bac1morl, & + wombat%bac1morq, & wombat%bac1deni, & wombat%bac2grow, & wombat%bac2resp, & wombat%bac2unh4, & wombat%bac2ufer, & - wombat%bac2_lnit, & - wombat%bac2_lfer, & wombat%bac2_mu, & - wombat%bac2_kdoc, & wombat%bac2_fanaer, & - wombat%bac2mor1, & - wombat%bac2mor2, & + wombat%bac2_fnlim, & + wombat%bac2_ffelim, & + wombat%bac2morl, & + wombat%bac2morq, & wombat%bac2deni, & wombat%aox_lnh4, & wombat%aox_mu, & wombat%nitrfix, & wombat%ammox, & wombat%anammox, & + wombat%nosdoc_overflow, & + wombat%nosdoc_excretion, & + wombat%nosdoc_phylysis, & + wombat%nosdoc_baclysis, & + wombat%nosdoc_dethydro, & + wombat%nosdoc_docconsu, & wombat%no3_prev, & wombat%caco3_prev, & wombat%det_sed_remin, & @@ -8791,30 +8835,14 @@ subroutine user_deallocate_arrays wombat%bafe_btm, & wombat%dynvis_sw, & wombat%zw, & + wombat%det_density, & + wombat%bdet_density, & wombat%zm) - deallocate( & - wombat%dic_intmld, & - wombat%o2_intmld, & - wombat%no3_intmld, & - wombat%fe_intmld, & - wombat%phy_intmld, & - wombat%det_intmld, & - wombat%pprod_gross_intmld, & - wombat%npp_intmld, & - wombat%radbio_intmld, & - wombat%dic_int100, & - wombat%o2_int100, & - wombat%no3_int100, & - wombat%fe_int100, & - wombat%phy_int100, & - wombat%det_int100, & - wombat%pprod_gross_int100, & - wombat%npp_int100, & - wombat%radbio_int100) - deallocate( & wombat%zeuphot, & + wombat%det_radius, & + wombat%bdet_radius, & wombat%seddep, & wombat%sedmask, & wombat%sedtemp, &