From 9822d085841535aa223e251079fcbd1346f93ac6 Mon Sep 17 00:00:00 2001 From: Michael Levy Date: Fri, 1 Jul 2022 12:19:50 -0500 Subject: [PATCH 01/13] Properly define a couple of grazing diagnostics 1. auto_graze_zoo_zint and auto_graze_zoo_zint_100m were defined as per-autotroph but not per-zooplankton, so they were effectively auto_graze_zootot_zint and auto_graze_zootot_zint_100m. This commit adds the per-zooplankton portion of the defintion. 2. Similarly, zoo_graze_zoo_zint and zoo_graze_zoo_zint_100m were actually computing zoo_graze_zootot_zint and zoo_graze_zootot_zint_100m. This commit adds the second per-zooplankton portion of the definition. This will NOT change the short names of the diagnostics in typical CESM usage because the 1-zoo configurations all name the single zooplankton "zoo". It _will_ allow more flexibility in the output when running with multiple zooplankton functional types. --- defaults/diagnostics_latest.yaml | 16 ++-- defaults/json/diagnostics_latest.json | 56 ++++++------ src/marbl_diagnostics_mod.F90 | 124 +++++++++++++++----------- src/marbl_interface_private_types.F90 | 8 +- 4 files changed, 110 insertions(+), 94 deletions(-) diff --git a/defaults/diagnostics_latest.yaml b/defaults/diagnostics_latest.yaml index fa870890..01578fcf 100644 --- a/defaults/diagnostics_latest.yaml +++ b/defaults/diagnostics_latest.yaml @@ -1490,14 +1490,14 @@ graze_((autotroph_sname))_doc_zint_100m : vertical_grid : none frequency : medium operator : average -graze_((autotroph_sname))_zoo_zint : - longname : ((autotroph_lname)) Grazing to ZOO Vertical Integral +graze_((autotroph_sname))_((zooplankton_sname))_zint : + longname : ((autotroph_lname)) Grazing to ((zooplankton_lname)) Vertical Integral units : mmol/m^3 cm/s vertical_grid : none frequency : never operator : average -graze_((autotroph_sname))_zoo_zint_100m : - longname : ((autotroph_lname)) Grazing to ZOO Vertical Integral, 0-100m +graze_((autotroph_sname))_((zooplankton_sname))_zint_100m : + longname : ((autotroph_lname)) Grazing to ((zooplankton_lname)) Vertical Integral, 0-100m units : mmol/m^3 cm/s vertical_grid : none frequency : medium @@ -1919,14 +1919,14 @@ graze_((zooplankton_sname))_doc_zint_100m : vertical_grid : none frequency : never operator : average -graze_((zooplankton_sname))_zoo_zint : - longname : ((zooplankton_lname)) Grazing to ZOO Vertical Integral +graze_((zooplankton_sname))_((zooplankton_sname))_zint : + longname : ((zooplankton_lname)) Grazing to ((zooplankton_lname)) Vertical Integral units : mmol/m^3 cm/s vertical_grid : none frequency : never operator : average -graze_((zooplankton_sname))_zoo_zint_100m : - longname : ((zooplankton_lname)) Grazing to ZOO Vertical Integral, 0-100m +graze_((zooplankton_sname))_((zooplankton_sname))_zint_100m : + longname : ((zooplankton_lname)) Grazing to ((zooplankton_lname)) Vertical Integral, 0-100m units : mmol/m^3 cm/s vertical_grid : none frequency : never diff --git a/defaults/json/diagnostics_latest.json b/defaults/json/diagnostics_latest.json index aa109682..c764a67b 100644 --- a/defaults/json/diagnostics_latest.json +++ b/defaults/json/diagnostics_latest.json @@ -1909,6 +1909,20 @@ "units": "mmol/m^3/s", "vertical_grid": "layer_avg" }, + "graze_((autotroph_sname))_((zooplankton_sname))_zint": { + "frequency": "never", + "longname": "((autotroph_lname)) Grazing to ((zooplankton_lname)) Vertical Integral", + "operator": "average", + "units": "mmol/m^3 cm/s", + "vertical_grid": "none" + }, + "graze_((autotroph_sname))_((zooplankton_sname))_zint_100m": { + "frequency": "medium", + "longname": "((autotroph_lname)) Grazing to ((zooplankton_lname)) Vertical Integral, 0-100m", + "operator": "average", + "units": "mmol/m^3 cm/s", + "vertical_grid": "none" + }, "graze_((autotroph_sname))_doc": { "frequency": "never", "longname": "((autotroph_lname)) Grazing to DOC", @@ -1967,20 +1981,6 @@ "units": "mmol/m^3 cm/s", "vertical_grid": "none" }, - "graze_((autotroph_sname))_zoo_zint": { - "frequency": "never", - "longname": "((autotroph_lname)) Grazing to ZOO Vertical Integral", - "operator": "average", - "units": "mmol/m^3 cm/s", - "vertical_grid": "none" - }, - "graze_((autotroph_sname))_zoo_zint_100m": { - "frequency": "medium", - "longname": "((autotroph_lname)) Grazing to ZOO Vertical Integral, 0-100m", - "operator": "average", - "units": "mmol/m^3 cm/s", - "vertical_grid": "none" - }, "graze_((autotroph_sname))_zootot": { "frequency": "medium", "longname": "((autotroph_lname)) Grazing to ZOO TOT", @@ -2005,6 +2005,20 @@ "units": "mmol/m^3/s", "vertical_grid": "layer_avg" }, + "graze_((zooplankton_sname))_((zooplankton_sname))_zint": { + "frequency": "never", + "longname": "((zooplankton_lname)) Grazing to ((zooplankton_lname)) Vertical Integral", + "operator": "average", + "units": "mmol/m^3 cm/s", + "vertical_grid": "none" + }, + "graze_((zooplankton_sname))_((zooplankton_sname))_zint_100m": { + "frequency": "never", + "longname": "((zooplankton_lname)) Grazing to ((zooplankton_lname)) Vertical Integral, 0-100m", + "operator": "average", + "units": "mmol/m^3 cm/s", + "vertical_grid": "none" + }, "graze_((zooplankton_sname))_doc": { "frequency": "never", "longname": "((zooplankton_lname)) grazing loss to DOC", @@ -2063,20 +2077,6 @@ "units": "mmol/m^3 cm/s", "vertical_grid": "none" }, - "graze_((zooplankton_sname))_zoo_zint": { - "frequency": "never", - "longname": "((zooplankton_lname)) Grazing to ZOO Vertical Integral", - "operator": "average", - "units": "mmol/m^3 cm/s", - "vertical_grid": "none" - }, - "graze_((zooplankton_sname))_zoo_zint_100m": { - "frequency": "never", - "longname": "((zooplankton_lname)) Grazing to ZOO Vertical Integral, 0-100m", - "operator": "average", - "units": "mmol/m^3 cm/s", - "vertical_grid": "none" - }, "graze_((zooplankton_sname))_zootot": { "frequency": "never", "longname": "((zooplankton_lname)) grazing loss to ZOO TOT", diff --git a/src/marbl_diagnostics_mod.F90 b/src/marbl_diagnostics_mod.F90 index 4596ec4b..a7ca60fe 100644 --- a/src/marbl_diagnostics_mod.F90 +++ b/src/marbl_diagnostics_mod.F90 @@ -851,8 +851,8 @@ subroutine marbl_diagnostics_init( & allocate(ind%auto_graze_poc_zint_100m(autotroph_cnt)) allocate(ind%auto_graze_doc_zint(autotroph_cnt)) allocate(ind%auto_graze_doc_zint_100m(autotroph_cnt)) - allocate(ind%auto_graze_zoo_zint(autotroph_cnt)) - allocate(ind%auto_graze_zoo_zint_100m(autotroph_cnt)) + allocate(ind%auto_graze_zoo_zint(autotroph_cnt, zooplankton_cnt)) + allocate(ind%auto_graze_zoo_zint_100m(autotroph_cnt, zooplankton_cnt)) allocate(ind%auto_loss_zint(autotroph_cnt)) allocate(ind%auto_loss_zint_100m(autotroph_cnt)) allocate(ind%auto_loss_poc_zint(autotroph_cnt)) @@ -1154,29 +1154,35 @@ subroutine marbl_diagnostics_init( & return end if - lname = trim(autotroph_settings(n)%lname) // ' Grazing to ZOO Vertical Integral' - sname = 'graze_' // trim(autotroph_settings(n)%sname) // '_zoo_zint' - units = 'mmol/m^3 cm/s' - vgrid = 'none' - truncate = .false. - call diags%add_diagnostic(lname, sname, units, vgrid, truncate, & - ind%auto_graze_zoo_zint(n), marbl_status_log) - if (marbl_status_log%labort_marbl) then - call marbl_logging_add_diagnostics_error(marbl_status_log, sname, subname) - return - end if + do m=1, zooplankton_cnt + lname = trim(autotroph_settings(n)%lname) // ' Grazing to ' // & + trim(zooplankton_settings(m)%lname) // ' Vertical Integral' + sname = 'graze_' // trim(autotroph_settings(n)%sname) // '_' // & + trim(zooplankton_settings(m)%sname) // '_zint' + units = 'mmol/m^3 cm/s' + vgrid = 'none' + truncate = .false. + call diags%add_diagnostic(lname, sname, units, vgrid, truncate, & + ind%auto_graze_zoo_zint(n,m), marbl_status_log) + if (marbl_status_log%labort_marbl) then + call marbl_logging_add_diagnostics_error(marbl_status_log, sname, subname) + return + end if - lname = trim(autotroph_settings(n)%lname) // ' Grazing to ZOO Vertical Integral, 0-100m' - sname = 'graze_' // trim(autotroph_settings(n)%sname) // '_zoo_zint_100m' - units = 'mmol/m^3 cm/s' - vgrid = 'none' - truncate = .false. - call diags%add_diagnostic(lname, sname, units, vgrid, truncate, & - ind%auto_graze_zoo_zint_100m(n), marbl_status_log) - if (marbl_status_log%labort_marbl) then - call marbl_logging_add_diagnostics_error(marbl_status_log, sname, subname) - return - end if + lname = trim(autotroph_settings(n)%lname) // ' Grazing to ' // & + trim(zooplankton_settings(m)%lname) // ' Vertical Integral, 0-100m' + sname = 'graze_' // trim(autotroph_settings(n)%sname) // '_' // & + trim(zooplankton_settings(m)%sname) // '_zint_100m' + units = 'mmol/m^3 cm/s' + vgrid = 'none' + truncate = .false. + call diags%add_diagnostic(lname, sname, units, vgrid, truncate, & + ind%auto_graze_zoo_zint_100m(n,m), marbl_status_log) + if (marbl_status_log%labort_marbl) then + call marbl_logging_add_diagnostics_error(marbl_status_log, sname, subname) + return + end if + end do lname = trim(autotroph_settings(n)%lname) // ' Loss Vertical Integral' sname = trim(autotroph_settings(n)%sname) // '_loss_zint' @@ -1313,8 +1319,8 @@ subroutine marbl_diagnostics_init( & allocate(ind%zoo_graze_poc_zint_100m(zooplankton_cnt)) allocate(ind%zoo_graze_doc_zint(zooplankton_cnt)) allocate(ind%zoo_graze_doc_zint_100m(zooplankton_cnt)) - allocate(ind%zoo_graze_zoo_zint(zooplankton_cnt)) - allocate(ind%zoo_graze_zoo_zint_100m(zooplankton_cnt)) + allocate(ind%zoo_graze_zoo_zint(zooplankton_cnt, zooplankton_cnt)) + allocate(ind%zoo_graze_zoo_zint_100m(zooplankton_cnt, zooplankton_cnt)) allocate(ind%x_graze_zoo_zint(zooplankton_cnt)) allocate(ind%x_graze_zoo_zint_100m(zooplankton_cnt)) end if @@ -1463,29 +1469,35 @@ subroutine marbl_diagnostics_init( & return end if - lname = trim(zooplankton_settings(n)%lname) // ' Grazing to ZOO Vertical Integral' - sname = 'graze_' // trim(zooplankton_settings(n)%sname) // '_zoo_zint' - units = 'mmol/m^3 cm/s' - vgrid = 'none' - truncate = .false. - call diags%add_diagnostic(lname, sname, units, vgrid, truncate, & - ind%zoo_graze_zoo_zint(n), marbl_status_log) - if (marbl_status_log%labort_marbl) then - call marbl_logging_add_diagnostics_error(marbl_status_log, sname, subname) - return - end if + do m=1, zooplankton_cnt + lname = trim(zooplankton_settings(n)%lname) // ' Grazing to ' // & + trim(zooplankton_settings(m)%lname) // ' Vertical Integral' + sname = 'graze_' // trim(zooplankton_settings(n)%sname) // '_' // & + trim(zooplankton_settings(m)%sname) // '_zint' + units = 'mmol/m^3 cm/s' + vgrid = 'none' + truncate = .false. + call diags%add_diagnostic(lname, sname, units, vgrid, truncate, & + ind%zoo_graze_zoo_zint(n,m), marbl_status_log) + if (marbl_status_log%labort_marbl) then + call marbl_logging_add_diagnostics_error(marbl_status_log, sname, subname) + return + end if - lname = trim(zooplankton_settings(n)%lname) // ' Grazing to ZOO Vertical Integral, 0-100m' - sname = 'graze_' // trim(zooplankton_settings(n)%sname) // '_zoo_zint_100m' - units = 'mmol/m^3 cm/s' - vgrid = 'none' - truncate = .false. - call diags%add_diagnostic(lname, sname, units, vgrid, truncate, & - ind%zoo_graze_zoo_zint_100m(n), marbl_status_log) - if (marbl_status_log%labort_marbl) then - call marbl_logging_add_diagnostics_error(marbl_status_log, sname, subname) - return - end if + lname = trim(zooplankton_settings(n)%lname) // ' Grazing to ' // & + trim(zooplankton_settings(m)%lname) // ' Vertical Integral, 0-100m' + sname = 'graze_' // trim(zooplankton_settings(n)%sname) // '_' // & + trim(zooplankton_settings(m)%sname) // '_zint_100m' + units = 'mmol/m^3 cm/s' + vgrid = 'none' + truncate = .false. + call diags%add_diagnostic(lname, sname, units, vgrid, truncate, & + ind%zoo_graze_zoo_zint_100m(n,m), marbl_status_log) + if (marbl_status_log%labort_marbl) then + call marbl_logging_add_diagnostics_error(marbl_status_log, sname, subname) + return + end if + end do lname = trim(zooplankton_settings(n)%lname) // ' Grazing Gain Vertical Integral' sname = 'x_graze_' // trim(zooplankton_settings(n)%sname) // '_zint' @@ -3645,9 +3657,11 @@ subroutine store_diagnostics_autotrophs(marbl_domain, & delta_z, kmt, full_depth_integral=diags(ind%auto_graze_doc_zint(n))%field_2d(1), & near_surface_integral=diags(ind%auto_graze_doc_zint_100m(n))%field_2d(1)) - call marbl_diagnostics_share_compute_vertical_integrals(diags(ind%auto_graze_zootot(n))%field_3d(:, 1), & - delta_z, kmt, full_depth_integral=diags(ind%auto_graze_zoo_zint(n))%field_2d(1), & - near_surface_integral=diags(ind%auto_graze_zoo_zint_100m(n))%field_2d(1)) + do m=1, zooplankton_cnt + call marbl_diagnostics_share_compute_vertical_integrals(diags(ind%auto_graze_zoo(n,m))%field_3d(:, 1), & + delta_z, kmt, full_depth_integral=diags(ind%auto_graze_zoo_zint(n,m))%field_2d(1), & + near_surface_integral=diags(ind%auto_graze_zoo_zint_100m(n,m))%field_2d(1)) + end do call marbl_diagnostics_share_compute_vertical_integrals(diags(ind%auto_loss(n))%field_3d(:, 1), & delta_z, kmt, full_depth_integral=diags(ind%auto_loss_zint(n))%field_2d(1), & @@ -3935,9 +3949,11 @@ subroutine store_diagnostics_zooplankton(marbl_domain, & delta_z, kmt, full_depth_integral=diags(ind%zoo_graze_doc_zint(n))%field_2d(1), & near_surface_integral=diags(ind%zoo_graze_doc_zint_100m(n))%field_2d(1)) - call marbl_diagnostics_share_compute_vertical_integrals(diags(ind%zoo_graze_zootot(n))%field_3d(:, 1), & - delta_z, kmt, full_depth_integral=diags(ind%zoo_graze_zoo_zint(n))%field_2d(1), & - near_surface_integral=diags(ind%zoo_graze_zoo_zint_100m(n))%field_2d(1)) + do m=1, zooplankton_cnt + call marbl_diagnostics_share_compute_vertical_integrals(diags(ind%zoo_graze_zoo(n,m))%field_3d(:, 1), & + delta_z, kmt, full_depth_integral=diags(ind%zoo_graze_zoo_zint(n,m))%field_2d(1), & + near_surface_integral=diags(ind%zoo_graze_zoo_zint_100m(n,m))%field_2d(1)) + end do call marbl_diagnostics_share_compute_vertical_integrals(diags(ind%x_graze_zoo(n))%field_3d(:, 1), & delta_z, kmt, full_depth_integral=diags(ind%x_graze_zoo_zint(n))%field_2d(1), & diff --git a/src/marbl_interface_private_types.F90 b/src/marbl_interface_private_types.F90 index c1fc826c..15a56550 100644 --- a/src/marbl_interface_private_types.F90 +++ b/src/marbl_interface_private_types.F90 @@ -549,8 +549,8 @@ module marbl_interface_private_types integer(int_kind), allocatable :: auto_graze_poc_zint_100m(:) integer(int_kind), allocatable :: auto_graze_doc_zint(:) integer(int_kind), allocatable :: auto_graze_doc_zint_100m(:) - integer(int_kind), allocatable :: auto_graze_zoo_zint(:) - integer(int_kind), allocatable :: auto_graze_zoo_zint_100m(:) + integer(int_kind), allocatable :: auto_graze_zoo_zint(:,:) + integer(int_kind), allocatable :: auto_graze_zoo_zint_100m(:,:) integer(int_kind), allocatable :: auto_loss_zint(:) integer(int_kind), allocatable :: auto_loss_zint_100m(:) integer(int_kind), allocatable :: auto_loss_poc_zint(:) @@ -575,8 +575,8 @@ module marbl_interface_private_types integer(int_kind), allocatable :: zoo_graze_poc_zint_100m(:) integer(int_kind), allocatable :: zoo_graze_doc_zint(:) integer(int_kind), allocatable :: zoo_graze_doc_zint_100m(:) - integer(int_kind), allocatable :: zoo_graze_zoo_zint(:) - integer(int_kind), allocatable :: zoo_graze_zoo_zint_100m(:) + integer(int_kind), allocatable :: zoo_graze_zoo_zint(:,:) + integer(int_kind), allocatable :: zoo_graze_zoo_zint_100m(:,:) integer(int_kind), allocatable :: x_graze_zoo_zint(:) integer(int_kind), allocatable :: x_graze_zoo_zint_100m(:) From 84cdc62e8b71d4441ab98cd59074e36f3433966d Mon Sep 17 00:00:00 2001 From: Michael Levy Date: Thu, 14 Jul 2022 14:49:14 -0500 Subject: [PATCH 02/13] add pocToFloor to medium stream Previously, pocToFloor wasn't included in output by default --- defaults/diagnostics_latest.yaml | 2 +- defaults/json/diagnostics_latest.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/defaults/diagnostics_latest.yaml b/defaults/diagnostics_latest.yaml index 01578fcf..14088869 100644 --- a/defaults/diagnostics_latest.yaml +++ b/defaults/diagnostics_latest.yaml @@ -464,7 +464,7 @@ pocToFloor : longname : POC Flux Hitting Sea Floor units : nmol/cm^2/s vertical_grid : none - frequency : never + frequency : medium operator : average pocToSed : longname : POC Flux to Sediments diff --git a/defaults/json/diagnostics_latest.json b/defaults/json/diagnostics_latest.json index c764a67b..3c0daa53 100644 --- a/defaults/json/diagnostics_latest.json +++ b/defaults/json/diagnostics_latest.json @@ -2244,7 +2244,7 @@ "vertical_grid": "layer_avg" }, "pocToFloor": { - "frequency": "never", + "frequency": "medium", "longname": "POC Flux Hitting Sea Floor", "operator": "average", "units": "nmol/cm^2/s", From 75fa0433a0f93f9d3340e5c5245e649abe0afc12 Mon Sep 17 00:00:00 2001 From: Michael Levy Date: Tue, 20 Sep 2022 11:12:08 -0500 Subject: [PATCH 03/13] More diagnostic updates 1. want pocToFloor in daily and monthly streams, not just monthly 2. added new ((zoo))_los_zint_150m (integrating to 150m, rather than 100m that is default for other shallow integrals) 3. Capped picpoc at 1.0 to prevent "ballast exceeds POC" errors --- defaults/diagnostics_latest.yaml | 14 ++++++++++++-- defaults/json/diagnostics_latest.json | 17 +++++++++++++++-- src/marbl_diagnostics_mod.F90 | 17 +++++++++++++++++ src/marbl_interface_private_types.F90 | 2 ++ src/marbl_interior_tendency_mod.F90 | 3 ++- 5 files changed, 48 insertions(+), 5 deletions(-) diff --git a/defaults/diagnostics_latest.yaml b/defaults/diagnostics_latest.yaml index 14088869..1d406e16 100644 --- a/defaults/diagnostics_latest.yaml +++ b/defaults/diagnostics_latest.yaml @@ -464,8 +464,12 @@ pocToFloor : longname : POC Flux Hitting Sea Floor units : nmol/cm^2/s vertical_grid : none - frequency : medium - operator : average + frequency : + - medium + - high + operator : + - average + - average pocToSed : longname : POC Flux to Sediments units : nmol/cm^2/s @@ -1859,6 +1863,12 @@ CISO_mui_to_co2star_((autotroph_sname)) : vertical_grid : none frequency : medium operator : average +((zooplankton_sname))_loss_zint_150m : + longname : ((zooplankton_lname)) Loss Vertical Integral, 0-150m + units : mmol/m^3 cm/s + vertical_grid : none + frequency : high + operator : average ((zooplankton_sname))_loss_poc_zint : longname : ((zooplankton_lname)) Loss to POC Vertical Integral units : mmol/m^3 cm/s diff --git a/defaults/json/diagnostics_latest.json b/defaults/json/diagnostics_latest.json index 3c0daa53..fc9a0f05 100644 --- a/defaults/json/diagnostics_latest.json +++ b/defaults/json/diagnostics_latest.json @@ -329,6 +329,13 @@ "units": "mmol/m^3 cm/s", "vertical_grid": "none" }, + "((zooplankton_sname))_loss_zint_150m": { + "frequency": "high", + "longname": "((zooplankton_lname)) Loss Vertical Integral, 0-150m", + "operator": "average", + "units": "mmol/m^3 cm/s", + "vertical_grid": "none" + }, "AOU": { "frequency": "medium", "longname": "Apparent O2 Utilization", @@ -2244,9 +2251,15 @@ "vertical_grid": "layer_avg" }, "pocToFloor": { - "frequency": "medium", + "frequency": [ + "medium", + "high" + ], "longname": "POC Flux Hitting Sea Floor", - "operator": "average", + "operator": [ + "average", + "average" + ], "units": "nmol/cm^2/s", "vertical_grid": "none" }, diff --git a/src/marbl_diagnostics_mod.F90 b/src/marbl_diagnostics_mod.F90 index a7ca60fe..e5a15b60 100644 --- a/src/marbl_diagnostics_mod.F90 +++ b/src/marbl_diagnostics_mod.F90 @@ -1309,6 +1309,7 @@ subroutine marbl_diagnostics_init( & if (.not.ind%lconstructed()) then allocate(ind%zoo_loss_zint(zooplankton_cnt)) allocate(ind%zoo_loss_zint_100m(zooplankton_cnt)) + allocate(ind%zoo_loss_zint_150m(zooplankton_cnt)) allocate(ind%zoo_loss_poc_zint(zooplankton_cnt)) allocate(ind%zoo_loss_poc_zint_100m(zooplankton_cnt)) allocate(ind%zoo_loss_doc_zint(zooplankton_cnt)) @@ -1349,6 +1350,18 @@ subroutine marbl_diagnostics_init( & return end if + lname = trim(zooplankton_settings(n)%lname) // ' Loss Vertical Integral, 0-150m' + sname = trim(zooplankton_settings(n)%sname) // '_loss_zint_150m' + units = 'mmol/m^3 cm/s' + vgrid = 'none' + truncate = .false. + call diags%add_diagnostic(lname, sname, units, vgrid, truncate, & + ind%zoo_loss_zint_150m(n), marbl_status_log) + if (marbl_status_log%labort_marbl) then + call marbl_logging_add_diagnostics_error(marbl_status_log, sname, subname) + return + end if + lname = trim(zooplankton_settings(n)%lname) // ' Loss to POC Vertical Integral' sname = trim(zooplankton_settings(n)%sname) // '_loss_poc_zint' units = 'mmol/m^3 cm/s' @@ -3929,6 +3942,10 @@ subroutine store_diagnostics_zooplankton(marbl_domain, & delta_z, kmt, full_depth_integral=diags(ind%zoo_loss_zint(n))%field_2d(1), & near_surface_integral=diags(ind%zoo_loss_zint_100m(n))%field_2d(1)) + call marbl_diagnostics_share_compute_vertical_integrals(diags(ind%zoo_loss(n))%field_3d(:, 1), & + delta_z, kmt, near_surface_integral=diags(ind%zoo_loss_zint_150m(n))%field_2d(1), & + shallow_depth=150.0e2_r8) + call marbl_diagnostics_share_compute_vertical_integrals(diags(ind%zoo_loss_poc(n))%field_3d(:, 1), & delta_z, kmt, full_depth_integral=diags(ind%zoo_loss_poc_zint(n))%field_2d(1), & near_surface_integral=diags(ind%zoo_loss_poc_zint_100m(n))%field_2d(1)) diff --git a/src/marbl_interface_private_types.F90 b/src/marbl_interface_private_types.F90 index 15a56550..4e139c8b 100644 --- a/src/marbl_interface_private_types.F90 +++ b/src/marbl_interface_private_types.F90 @@ -565,6 +565,7 @@ module marbl_interface_private_types ! Zooplankton 2D diags integer(int_kind), allocatable :: zoo_loss_zint(:) integer(int_kind), allocatable :: zoo_loss_zint_100m(:) + integer(int_kind), allocatable :: zoo_loss_zint_150m(:) integer(int_kind), allocatable :: zoo_loss_poc_zint(:) integer(int_kind), allocatable :: zoo_loss_poc_zint_100m(:) integer(int_kind), allocatable :: zoo_loss_doc_zint(:) @@ -1933,6 +1934,7 @@ subroutine interior_diag_ind_destructor(this) deallocate(this%auto_agg_zint_100m) deallocate(this%zoo_loss_zint) deallocate(this%zoo_loss_zint_100m) + deallocate(this%zoo_loss_zint_150m) deallocate(this%zoo_loss_poc_zint) deallocate(this%zoo_loss_poc_zint_100m) deallocate(this%zoo_loss_doc_zint) diff --git a/src/marbl_interior_tendency_mod.F90 b/src/marbl_interior_tendency_mod.F90 index e6017ef6..398b42cd 100644 --- a/src/marbl_interior_tendency_mod.F90 +++ b/src/marbl_interior_tendency_mod.F90 @@ -1452,7 +1452,8 @@ subroutine compute_autotroph_calcification(km, autotroph_local, temperature, car picpoc = max(0.0_r8, -0.0136_r8 * CO2(:) + picpoc(:) + 0.21_r8) !P-limitation effect (CaCO2/organicC ratio increases when P limitation term is low) - picpoc = max(0.0_r8, -0.48_r8 * Plim(auto_ind,:) + picpoc(:) + 0.48_r8) + ! max out picpoc at one to prevent crashing due to "ballast exceeds POC" error + picpoc = min(1., max(0.0_r8, -0.48_r8 * Plim(auto_ind,:) + picpoc(:) + 0.48_r8)) !multiply cocco growth rate by picpoc to get CaCO3 formation CaCO3_form(auto_ind,:) = picpoc(:) * photoC(auto_ind,:) From 0193d73c7a582e864c3f77059300a440e22fa819 Mon Sep 17 00:00:00 2001 From: Kristen Krumhardt Date: Wed, 19 Apr 2023 12:39:18 -0600 Subject: [PATCH 04/13] inital commit for 4p2z settings --- defaults/settings_latest+4p2z.yaml | 1258 ++++++++++++++++++++++++++++ 1 file changed, 1258 insertions(+) create mode 100644 defaults/settings_latest+4p2z.yaml diff --git a/defaults/settings_latest+4p2z.yaml b/defaults/settings_latest+4p2z.yaml new file mode 100644 index 00000000..3eae3f32 --- /dev/null +++ b/defaults/settings_latest+4p2z.yaml @@ -0,0 +1,1258 @@ +# ABOUT THIS FILE +# --------------- +# MARBL users can change settings values for runtime-configurable variables via a settings +# input file. MARBL provides a python script that can generate an input file by reading a +# JSON file containing the configurable variables and default values, but JSON does not allow +# comments in the file format so the workflow is to edit this YAML file and then generate +# the JSON file via $MARBL/MARBL_tools/yaml_to_json.py +# +# Parameters in MARBL are divided into four different stages, based on the order in which they are set +# 1. General Parameters: variables that have no dependencies on other stages +# (note that init_bury_coeff_opt is alone in general_parms2 because it depends on ladjust_bury_coeff) +# 2. PFT Counts: variables that can not be set until after PFT_defaults (in General Parameters) is known +# 3. PFT Derived Types: variables that can not be set until PFT Counts are known +# (autotroph_cnt, zooplankton_cnt, and max_grazer_prey_cnt) +# 4. Post-Tracer: variables that can not be set until the tracer count is known +# (tracer count depends on PFT Derived Types) +# +# All variables need to provide the following metadata: +# 1. longname: a description of the variable +# 2. subcategory: when writing parameters to the log, MARBL will group variables by subcategory +# 3. units: physical units (use "unitless" for pure numbers and "non-numeric" for strings / logicals) +# 4. datatype: integer, real, logical, or string +# 5. default_value: Value to use unless overwritten by the MARBL input file +# NOTE: some parameters provide different default values for different configurations; +# e.g. in CESM, the value of some parameters is resolution-dependent. In these +# cases, default_value should be a dictionary with a "default" key and then keys +# for whatever resolutions differ from the default. +# +# Accepted keys: +# 1. default +# 2. CESM_x3 +# +# There are also some optional metadata options: +# 1. valid_values: only values that MARBL will accept (default_value must be in valid_values!) +# 2. cannot change: +# 3. must set: +# 4. _append_to_config_keywords: if default values of variables processed later depend on the +# value of another variable, then that variable needs to have +# _append_to_config_keywords = True +# + +# Order in which the categories are parsed +_order : + - general_parms + - general_parms2 + - PFT_counts + - PFT_derived_types + - tracer_dependent + +# Tracer count +_tracer_list : + # Non-living tracers + PO4 : + long_name : Dissolved Inorganic Phosphate + units : mmol/m^3 + NO3 : + long_name : Dissolved Inorganic Nitrate + units : mmol/m^3 + SiO3 : + long_name : Dissolved Inorganic Silicate + units : mmol/m^3 + NH4 : + long_name : Dissolved Ammonia + units : mmol/m^3 + Fe : + long_name : Dissolved Inorganic Iron + units : mmol/m^3 + Lig : + long_name : Iron Binding Ligand + units : mmol/m^3 + O2 : + long_name : Dissolved Oxygen + units : mmol/m^3 + DIC : + long_name : Dissolved Inorganic Carbon + units : mmol/m^3 + DIC_ALT_CO2 : + long_name : Dissolved Inorganic Carbon, Alternative CO2 + units : mmol/m^3 + ALK : + long_name : Alkalinity + units : meq/m^3 + ALK_ALT_CO2 : + long_name : Alkalinity, Alternative CO2 + units : meq/m^3 + DOC : + long_name : Dissolved Organic Carbon + units : mmol/m^3 + DON : + long_name : Dissolved Organic Nitrogen + units : mmol/m^3 + DOP : + long_name : Dissolved Organic Phosphorus + units : mmol/m^3 + DOPr : + long_name : Refractory DOP + units : mmol/m^3 + DONr : + long_name : Refractory DON + units : mmol/m^3 + DOCr : + long_name : Refractory DOC + units : mmol/m^3 + # Non-living (ciso only) + DI13C : + dependencies : + ciso_on : .true. + long_name : Dissolved Inorganic Carbon-13 + units : mmol/m^3 + DO13Ctot : + dependencies : + ciso_on : .true. + long_name : Dissolved Organic Carbon-13 (semi-labile+refractoy) + units : mmol/m^3 + DI14C : + dependencies : + ciso_on : .true. + long_name : Dissolved Inorganic Carbon-14 + units : mmol/m^3 + DO14Ctot : + dependencies : + ciso_on : .true. + long_name : Dissolved Organic Carbon-14 (semi-labile+refractoy) + units : mmol/m^3 + + # Per-autotroph tracers + ((autotroph_sname))Chl : + long_name : ((autotroph_lname)) Chlorophyll + units : mmol/m^3 + ((autotroph_sname))C : + long_name : ((autotroph_lname)) Carbon + units : mmol/m^3 + ((autotroph_sname))Fe : + long_name : ((autotroph_lname)) Iron + units : mmol/m^3 + ((autotroph_sname))Si : + dependencies : + ((autotroph_silicifier)) : True + long_name : ((autotroph_lname)) Silicon + units : mmol/m^3 + ((autotroph_sname))CaCO3 : + dependencies : + ((autotroph_calcifier)) : True + long_name : ((autotroph_lname)) CaCO3 + units : mmol/m^3 + ((autotroph_sname))P : + dependencies : + lvariable_PtoC : .true. + long_name : ((autotroph_lname)) Phosphorus + units : mmol/m^3 + # Per-autotroph (ciso only) + ((autotroph_sname))13C : + dependencies : + ciso_on : .true. + long_name : ((autotroph_lname)) Carbon-13 + units : mmol/m^3 + ((autotroph_sname))14C : + dependencies : + ciso_on : .true. + long_name : ((autotroph_lname)) Carbon-14 + units : mmol/m^3 + ((autotroph_sname))Ca13CO3 : + dependencies : + ciso_on : .true. + ((autotroph_calcifier)) : True + long_name : ((autotroph_lname)) Ca13CO3 + units : mmol/m^3 + ((autotroph_sname))Ca14CO3 : + dependencies : + ciso_on : .true. + ((autotroph_calcifier)) : True + long_name : ((autotroph_lname)) Ca14CO3 + units : mmol/m^3 + + # Per-zooplankton tracers + ((zooplankton_sname))C : + long_name : ((zooplankton_lname)) Carbon + units : mmol/m^3 + # Total zooplankton tracers (ciso only) + zootot13C : + dependencies : + ciso_on : .true. + long_name : Zooplankton Carbon-13 (sum over all zooplankton) + units : mmol/m^3 + zootot14C : + dependencies : + ciso_on : .true. + long_name : Zooplankton Carbon-14 (sum over all zooplankton) + units : mmol/m^3 + +################################################################################ +# Category 1: General Parameters # +################################################################################ + +general_parms : + PFT_defaults : + longname : Define how PFTs are initialized + subcategory : 1. config PFTs + units : unitless + datatype : string + default_value : CESM2+4p2z + valid_values : + - CESM2+4p2z + - user-specified + _CESM2+4p2z_PFT_keys : + autotroph_settings : + - sp + - diat + - diaz + - cocco + zooplankton_settings : + - microzoo + - mesozoo + grazing_relationship_settings : + - sp_microzoo + - diat_mesozoo + - diaz_microzoo + - diaz_mesozoo + - cocco_microzoo + - cocco_mesozoo + - microzoo_mesozoo + _append_to_config_keywords : true + ciso_on : + longname : Control whether CISO tracer module is active + subcategory : 2. config flags + units : unitless + datatype : logical + default_value : .false. + lsource_sink : + longname : Control which portions of code are executed (useful for debugging) + subcategory : 2. config flags + units : unitless + datatype : logical + default_value : .true. + ciso_lsource_sink : + longname : Control which portions of the carbon isotope code are executed (useful for debugging) + subcategory : 2. config flags + units : unitless + datatype : logical + default_value : .true. + lecovars_full_depth_tavg : + longname : If .false., MARBL will recommend truncating the column for some diagnostics + subcategory : 2. config flags + units : unitless + datatype : logical + default_value : .false. + lflux_gas_o2 : + longname : Control which portions of code are executed (useful for debugging) + subcategory : 2. config flags + units : unitless + datatype : logical + default_value : .true. + lflux_gas_co2 : + longname : Control which portions of code are executed (useful for debugging) + subcategory : 2. config flags + units : unitless + datatype : logical + default_value : .true. + lcompute_nhx_surface_emis : + longname : Control if NHx emissions are computed + subcategory : 2. config flags + units : unitless + datatype : logical + default_value : .true. + lvariable_PtoC : + longname : Control if PtoC ratios in autotrophs vary + subcategory : 2. config flags + units : unitless + datatype : logical + default_value : .true. + ladjust_bury_coeff : + longname : Control if bury coefficients are adjusted (rather than constant) + subcategory : 2. config flags + units : unitless + datatype : logical + default_value : .false. + _append_to_config_keywords : true + lo2_consumption_scalef : + longname : Apply o2_consumption_scalef to o2 consumption (and request it as a forcing) + subcategory : 2. config flags + units : unitless + datatype : logical + default_value : # default value is resolution dependent! + default : .false. + GRID == "CESM_x1" : .true. + lp_remin_scalef : + longname : Apply p_remin_scalef to particulate remin (and request it as a forcing) + subcategory : 2. config flags + units : unitless + datatype : logical + default_value : .false. + Jint_Ctot_thres_molpm2pyr : + longname : MARBL will abort if abs(Jint_Ctot) exceeds this threshold + subcategory : 4. general parameters + units : mol m-2 yr-1 + datatype : real + default_value : 1.0e-9 + gQsi_0 : + longname : initial Si/C ratio for growth + subcategory : 4. general parameters + units : 1 + datatype : real + default_value : 0.137 + gQsi_max : + longname : max Si/C ratio for growth + subcategory : 4. general parameters + units : 1 + datatype : real + default_value : 0.685 + gQsi_min : + longname : min Si/C ratio for growth + subcategory : 4. general parameters + units : 1 + datatype : real + default_value : 0.0457 + gQ_Fe_kFe_thres : + longname : Fe:kFe ratio threshold in uptake ratio computations + subcategory : 4. general parameters + units : 1 + datatype : real + default_value : 10.0 + gQ_Si_kSi_thres : + longname : Si:kSi ratio threshold in uptake ratio computations + subcategory : 4. general parameters + units : 1 + datatype : real + default_value : 5.0 + parm_Fe_bioavail : + longname : Fraction of Fe flux that is bioavailable + subcategory : 4. general parameters + units : unitless + datatype : real + default_value : 1.0 + particulate_flux_ref_depth : + longname : reference depth for particulate flux diagnostics + subcategory : 4. general parameters + units : m + datatype : integer + default_value : 100 + parm_o2_min : + longname : Minimum O2 needed for production & consumption + subcategory : 4. general parameters + units : nmol/cm^3 + datatype : real + default_value : 5.0 + parm_o2_min_delta : + longname : Width of min O2 range + subcategory : 4. general parameters + units : nmol/cm^3 + datatype : real + default_value : 5.0 + parm_kappa_nitrif_per_day : + longname : Nitrification inverse time constant + subcategory : 4. general parameters (nitrification) + units : 1/day + datatype : real + default_value : 0.06 + parm_nitrif_par_lim : + longname : PAR limit for nitrification + subcategory : 4. general parameters (nitrification) + units : W/m^2 + datatype : real + default_value : 1.0 + parm_labile_ratio : + longname : Fraction of loss to DOC that routed directly to DIC + subcategory : 4. general parameters + units : unitless + datatype : real + default_value : 0.94 + parm_init_POC_bury_coeff : + longname : Initial scale factor for burial of POC, PON + subcategory : 4. general parameters (bury coeffs) + units : unitless + datatype : real + default_value : # default value is resolution dependent! + default : 2.54 + GRID == "CESM_x3" : 5.0 + parm_init_POP_bury_coeff : + longname : Initial scale factor for burial of POP + subcategory : 4. general parameters (bury coeffs) + units : unitless + datatype : real + default_value : # default value is resolution dependent! + default : 0.36 + GRID == "CESM_x3" : 5.0 + parm_init_bSi_bury_coeff : + longname : Initial scale factor for burial of bSi + subcategory : 4. general parameters (bury coeffs) + units : unitless + datatype : real + default_value : # default value is resolution dependent! + default : 1.53 + GRID == "CESM_x3" : 1.1 + parm_Fe_scavenge_rate0 : + longname : Scavenging base rate for Fe + subcategory : 4. general parameters (scavenging) + units : unitless + datatype : real + default_value : 24.0 + parm_Lig_scavenge_rate0 : + longname : Scavenging base rate for bound ligand + subcategory : 4. general parameters (scavenging) + units : unitless + datatype : real + default_value : 0.015 + parm_FeLig_scavenge_rate0 : + longname : Scavenging base rate for bound iron + subcategory : 4. general parameters (scavenging) + units : unitless + datatype : real + default_value : 1.3 + parm_Lig_degrade_rate0 : + longname : Fe-binding ligand bacterial degradation base rate coefficient + subcategory : 4. general parameters + units : unitless + datatype : real + default_value : 0.000094 + parm_Fe_desorption_rate0 : + longname : Desorption rate for scavenged Fe from particles + subcategory : 4. general parameters + units : unitless + datatype : real + default_value : 1e-6 + parm_f_prod_sp_CaCO3 : + longname : Fraction of sp production as CaCO3 production + subcategory : 4. general parameters + units : unitless + datatype : real + default_value : # default value is resolution dependent! + default : 0.07 + GRID == "CESM_x3" : 0.075 + parm_POC_diss : + longname : Base POC dissolution length scale + subcategory : 4. general parameters (dissolution) + units : cm + datatype : real + default_value : 100e2 + parm_SiO2_diss : + longname : Base SiO2 dissolution length scale + subcategory : 4. general parameters (dissolution) + units : cm + datatype : real + default_value : 700e2 + parm_SiO2_gamma : + longname : SiO2 gamma (fraction of production -> hard subclass) + subcategory : 4. general parameters + units : 1 + datatype : real + default_value : 0.1 + parm_hPOC_SiO2_ratio : + longname : hPOC to SiO2 ratio + subcategory : 4. general parameters + units : 1 + datatype : real + default_value : 0.05 + parm_CaCO3_diss : + longname : Base CaCO3 dissolution length scale + subcategory : 4. general parameters (dissolution) + units : cm + datatype : real + default_value : 500e2 + parm_CaCO3_gamma : + longname : CaCO3 gamma (fraction of production -> hard subclass) + subcategory : 4. general parameters + units : 1 + datatype : real + default_value : 0.1 + parm_hPOC_CaCO3_ratio : + longname : hPOC to CaCO3 ratio + subcategory : 4. general parameters + units : 1 + datatype : real + default_value : 0.05 + parm_hPOC_dust_ratio : + longname : hPOC to dust ratio + subcategory : 4. general parameters + units : 1 + datatype : real + default_value : 0.05 + o2_sf_o2_range_hi : + longname : o2_scalefactor is applied to diss length scales for O2 less than this + subcategory : 4. general parameters + units : mmol/m^3 + datatype : real + default_value : 45.0 + o2_sf_o2_range_lo : + longname : o2_scalefactor is constant for O2 less than this + subcategory : 4. general parameters + units : mmol/m^3 + datatype : real + default_value : 5.0 + o2_sf_val_lo_o2 : + longname : o2_scalefactor constant for O2 less than o2_sf_o2_range_lo + subcategory : 4. general parameters + units : 1 + datatype : real + default_value : 3.0 + parm_sed_denitrif_coeff : + longname : Global scaling factor for sed_denitrif + subcategory : 4. general parameters + units : unitless + datatype : real + default_value : + default : 1 + GRID == "CESM_x3" : 1.4 + bury_coeff_rmean_timescale_years : + longname : Running mean time scale for bury coefficients + subcategory : 4. general parameters + units : years + datatype : real + default_value : 10 + parm_scalelen_z : + longname : Depths of prescribed scalelen values + subcategory : 5. Scale lengths + units : cm + datatype : real + _array_shape : 4 + default_value : + - 100.0e2 + - 250.0e2 + - 500.0e2 + - 2000.0e2 + parm_scalelen_vals : + longname : Prescribed scalelen values + subcategory : 5. Scale lengths + units : unitless + datatype : real + _array_shape : 4 + default_value : + default : + - 1 + - 3.6 + - 5.0 + - 5.3 + GRID == "CESM_x3" : + - 1 + - 3.3 + - 4.2 + - 4.4 + caco3_bury_thres_opt : + longname : Option of threshold of CaCO3 burial + subcategory : 4. general parameters + units : non-numeric + datatype : string + default_value : omega_calc + valid_values : + - fixed_depth + - omega_calc + caco3_bury_thres_depth : + longname : Threshold depth for CaCO3 burial when opt = 'fixed_depth' + subcategory : 4. general parameters + units : cm + datatype : real + default_value : 3000e2 + caco3_bury_thres_omega_calc : + longname : omega calcite threshold for CaCO3 burial when opt = 'omega_calc' + subcategory : 4. general parameters + units : 1 + datatype : real + default_value : 0.89 + PON_bury_coeff : + longname : Scale factor for burial of PON + subcategory : 4. general parameters (bury coeffs) + units : unitless + datatype : real + default_value : 0.5 + POM_bury_frac_max : + longname : maximum bury fraction for POM + subcategory : 4. general parameters (bury coeffs) + units : unitless + datatype : real + default_value : 0.8 + bSi_bury_frac_max : + longname : maximum bury fraction for bSi + subcategory : 4. general parameters (bury coeffs) + units : unitless + datatype : real + default_value : 1.0 + ciso_fract_factors : + longname : Option for which biological fractionation calculation to use + subcategory : 4. general parameters + units : non-numeric + datatype : string + default_value : Laws + auto_mort2_exp : + longname : Value of power loss exponent for autotrophs + subcategory : 4. general parameters + units : unitless + datatype : real + default_value : 1.75 + zoo_mort2_exp : + longname : Value of power loss exponent for zooplankton + subcategory : 4. general parameters + units : unitless + datatype : real + default_value : 2.0 + QCaCO3_max : + longname : Max CaCO3/C ratio for calcifiers + subcategory : 4. general parameters + units : mmol CaCO3/mmol C + datatype : real + default_value : 1.0 + f_graze_CaCO3_remin : + longname : Fraction of spCaCO3 grazing which is remineralized in zooplankton guts + subcategory : 4. general parameters + units : unitless + datatype : real + default_value : 0.5 + +################################################################################ +# Category 1.5: General Parameters (cont) # +################################################################################ + +general_parms2 : + init_bury_coeff_opt : + longname : Source of initial burial coefficient + subcategory : 3. config strings + units : unitless + datatype : string + default_value : + # Note: this relies on SAVED_STATE_VARS_SOURCE appearing in _config_keyword + # before ladjust_bury_coeff because matching the keyword in + # MARBL_settings_file_class::_get_var_value relies on the last entry + # in _config_keyword that matches a key below; for this variable, if + # ladjust_bury_coeff = .false. and SAVED_STATE_VARS_SOURCE = GCM we + # want init_bury_coeff_opt = settings_file + default : settings_file + not ladjust_bury_coeff : settings_file + SAVED_STATE_VARS_SOURCE == "GCM" : GCM + +################################################################################ +# Category 2: PFT_counts # +################################################################################ + +PFT_counts : + autotroph_cnt : + longname : Number of autotroph classes + subcategory : 1. config PFTs + units : unitless + datatype : integer + default_value : + default : 1 + PFT_defaults == "CESM2+4p2z" : 4 + cannot change : PFT_defaults == 'CESM2+4p2z' + must set : PFT_defaults == 'user-specified' + zooplankton_cnt : + longname : Number of zooplankton classes + subcategory : 1. config PFTs + units : unitless + datatype : integer + default_value : + default : 1 + PFT_defaults == "CESM2+4p2z" : 2 + max_grazer_prey_cnt : + longname : Number of grazer prey classes + subcategory : 1. config PFTs + units : unitless + datatype : integer + default_value : + default : 1 + PFT_defaults == "CESM2+4p2z" : 4 + +################################################################################ +# Category 3: PFT_derived_types # +################################################################################ + +PFT_derived_types : + autotroph_settings : + _array_shape : autotroph_cnt + _is_allocatable : true + datatype : + # Components of the derived type + # (_* are not part of the type) + _type_name : autotroph_settings_type + sname : + longname : Short name of the autotroph + subcategory : 10. autotrophs + units : non-numeric + datatype : string + default_value : + default : UNSET + ((autotroph_sname)) == "sp" : sp + ((autotroph_sname)) == "diat" : diat + ((autotroph_sname)) == "diaz" : diaz + ((autotroph_sname)) == "cocco" : cocco + lname : + longname : Long name of the autotroph + subcategory : 10. autotrophs + units : non-numeric + datatype : string + default_value : + default : UNSET + ((autotroph_sname)) == "sp" : Small Phyto + ((autotroph_sname)) == "diat" : Diatom + ((autotroph_sname)) == "diaz" : Diazotroph + ((autotroph_sname)) == "cocco" : Coccolithophores + temp_func_form_opt: + longname : Option for the temperature scaling functional form + subcategory : 10. autotrophs + units : non-numeric + datatype : string + valid_values : + - q_10 + - arrhenius + - power + default_value : + default : UNSET + ((autotroph_sname)) == "sp" : q_10 + ((autotroph_sname)) == "diat" : q_10 + ((autotroph_sname)) == "diaz" : q_10 + ((autotroph_sname)) == "cocco" : power + Nfixer : + longname : Flag set to true if autotroph fixes nitrogen + subcategory : 10. autotrophs + units : non-numeric + datatype : logical + default_value : + default : .false. + ((autotroph_sname)) == "diaz" : .true. + imp_calcifier : + longname : Flag set to true if autotroph implicitly handles calcification + subcategory : 10. autotrophs + units : non-numeric + datatype : logical + default_value : + default : .false. + exp_calcifier : + longname : Flag set to true if autotroph explicitly handles calcification + subcategory : 10. autotrophs + units : non-numeric + datatype : logical + default_value : + default : .false. + ((autotroph_sname)) == "cocco" : .true. + silicifier : + longname : Flag set to true if autotroph is a silicifier + subcategory : 10. autotrophs + units : non-numeric + datatype : logical + default_value : + default : .false. + ((autotroph_sname)) == "diat" : .true. + is_carbon_limited : + longname : Flag set to true if autotroph is carbon limited + subcategory : 10. autotrophs + units : non-numeric + datatype : logical + default_value : + default : .false. + ((autotroph_sname)) == "cocco" : .true. + kFe : + longname : Fe uptake half-sat constant + subcategory : 10. autotrophs + units : nmol/cm^3 + datatype : real + default_value : + default : 1e34 + ((autotroph_sname)) == "sp" : 0.03e-3 + ((autotroph_sname)) == "diat" : 0.05e-3 + ((autotroph_sname)) == "diaz" : 0.045e-3 + ((autotroph_sname)) == "cocco" : 0.032e-3 + kCO2 : + longname : CO2 uptake half-sat constant + subcategory : 10. autotrophs + units : nmol/cm^3 + datatype : real + default_value : + default : 1e34 + ((autotroph_sname)) == "sp" : 0 + ((autotroph_sname)) == "diat" : 0 + ((autotroph_sname)) == "diaz" : 0 + ((autotroph_sname)) == "cocco" : 1 + kPO4 : + longname : PO4 uptake half-sat constant + subcategory : 10. autotrophs + units : nmol/cm^3 + datatype : real + default_value : + default : 1e34 + ((autotroph_sname)) == "sp" : 0.01 + ((autotroph_sname)) == "diat" : 0.05 + ((autotroph_sname)) == "diaz" : 0.015 + ((autotroph_sname)) == "cocco" : 0.006 + kDOP : + longname : DOP uptake half-sat constant + subcategory : 10. autotrophs + units : nmol/cm^3 + datatype : real + default_value : + default : 1e34 + ((autotroph_sname)) == "sp" : 0.3 + ((autotroph_sname)) == "diat" : 0.5 + ((autotroph_sname)) == "diaz" : 0.075 + ((autotroph_sname)) == "cocco" : 0.25 + kNO3 : + longname : NO3 uptake half-sat constant + subcategory : 10. autotrophs + units : nmol/cm^3 + datatype : real + default_value : + default : 1e34 + ((autotroph_sname)) == "sp" : 0.2 + ((autotroph_sname)) == "diat" : 0.4 + ((autotroph_sname)) == "diaz" : 2 + ((autotroph_sname)) == "cocco" : 0.41 + kNH4 : + longname : NH4 uptake half-sat constant + subcategory : 10. autotrophs + units : nmol/cm^3 + datatype : real + default_value : + default : 1e34 + ((autotroph_sname)) == "sp" : 0.01 + ((autotroph_sname)) == "diat" : 0.05 + ((autotroph_sname)) == "diaz" : 0.2 + ((autotroph_sname)) == "cocco" : 0.01 + kSiO3 : + longname : SiO3 uptake half-sat constant + subcategory : 10. autotrophs + units : nmol/cm^3 + datatype : real + default_value : + default : 1e34 + ((autotroph_sname)) == "sp" : 0 + ((autotroph_sname)) == "diat" : 1.6 + ((autotroph_sname)) == "diaz" : 0 + ((autotroph_sname)) == "cocco" : 0 + Qp_fixed : + longname : P/C ratio when using fixed P/C ratios + subcategory : 10. autotrophs + units : unitless + datatype : real + default_value : + default : 1e34 + ((autotroph_sname)) == "sp" : 1.0/117 + ((autotroph_sname)) == "diat" : 1.0/117 + ((autotroph_sname)) == "diaz" : 0.32*(1.0/117) + ((autotroph_sname)) == "cocco" : 1.0/117 + gQfe_0 : + longname : Initial Fe/C ratio for growth + subcategory : 10. autotrophs + units : unitless + datatype : real + default_value : + default : 1e34 + ((autotroph_sname)) == "sp" : 30e-6 + ((autotroph_sname)) == "diat" : 30e-6 + ((autotroph_sname)) == "diaz" : 60e-6 + ((autotroph_sname)) == "cocco" : 30e-6 + gQfe_min : + longname : Minimum Fe/C ratio for growth + subcategory : 10. autotrophs + units : unitless + datatype : real + default_value : + default : 1e34 + ((autotroph_sname)) == "sp" : 2.5e-6 + ((autotroph_sname)) == "diat" : 2.5e-6 + ((autotroph_sname)) == "diaz" : 2.5e-6 + ((autotroph_sname)) == "cocco" : 2.5e-6 + alphaPI_per_day : + longname : Initial slope of P_I curve (GD98) + subcategory : 10. autotrophs + units : mmol m^2/(mg Chl W day) + datatype : real + default_value : + default : 1e34 + ((autotroph_sname)) == "sp" : 0.35 + ((autotroph_sname)) == "diat" : 0.39 + ((autotroph_sname)) == "diaz" : 0.31 + ((autotroph_sname)) == "cocco" : 0.31 + PCref_per_day : + longname : Maximum C-spec growth rate at Tref + subcategory : 10. autotrophs + units : 1/day + datatype : real + default_value : + default : 1e34 + ((autotroph_sname)) == "sp" : 4.8 + ((autotroph_sname)) == "diat" : 5.3 + ((autotroph_sname)) == "diaz" : 1.6 + ((autotroph_sname)) == "cocco" : 4.7 + thetaN_max : + longname : Maximum thetaN (Chl / N) + subcategory : 10. autotrophs + units : mg Chl / mmol + datatype : real + default_value : + default : 1e34 + ((autotroph_sname)) == "sp" : 2.5 + ((autotroph_sname)) == "diat" : 4 + ((autotroph_sname)) == "diaz" : 2.5 + ((autotroph_sname)) == "cocco" : 3.8 + loss_thres : + longname : concentration where losses go to zero + subcategory : 10. autotrophs + units : nmol/cm^3 + datatype : real + default_value : + default : 1e34 + ((autotroph_sname)) == "sp" : 0.01 + ((autotroph_sname)) == "diat" : 0.02 + ((autotroph_sname)) == "diaz" : 0.02 + ((autotroph_sname)) == "cocco" : 0.01 + loss_thres2 : + longname : concentration where losses go to zero + subcategory : 10. autotrophs + units : nmol/cm^3 + datatype : real + default_value : + default : 1e34 + ((autotroph_sname)) == "sp" : 0 + ((autotroph_sname)) == "diat" : 0 + ((autotroph_sname)) == "diaz" : 0.001 + ((autotroph_sname)) == "cocco" : 0 + temp_thres : + longname : Temperature where concentration threshold and photosynthesis rate drops + subcategory : 10. autotrophs + units : degC + datatype : real + default_value : + default : 1e34 + ((autotroph_sname)) == "sp" : -10 + ((autotroph_sname)) == "diat" : -10 + ((autotroph_sname)) == "diaz" : 15 + ((autotroph_sname)) == "cocco" : 0 + mort_per_day : + longname : Linear mortality rate + subcategory : 10. autotrophs + units : 1/day + datatype : real + default_value : + default : 1e34 + ((autotroph_sname)) == "sp" : 0.1 + ((autotroph_sname)) == "diat" : 0.1 + ((autotroph_sname)) == "diaz" : 0.1 + ((autotroph_sname)) == "cocco" : 0.1 + mort2_per_day : + longname : Quadratic mortality rate + subcategory : 10. autotrophs + units : (1/day)/(mmol/m^3) + datatype : real + default_value : + default : 1e34 + ((autotroph_sname)) == "sp" : 0.01 + ((autotroph_sname)) == "diat" : 0.01 + ((autotroph_sname)) == "diaz" : 0.01 + ((autotroph_sname)) == "cocco" : 0.01 + agg_rate_max : + longname : Maximum agg rate + subcategory : 10. autotrophs + units : 1/day + datatype : real + default_value : + default : 1e34 + ((autotroph_sname)) == "sp" : 0.5 + ((autotroph_sname)) == "diat" : 0.5 + ((autotroph_sname)) == "diaz" : 0.5 + ((autotroph_sname)) == "cocco" : 0.5 + agg_rate_min : + longname : Minimum agg rate + subcategory : 10. autotrophs + units : 1/day + datatype : real + default_value : + default : 1e34 + ((autotroph_sname)) == "sp" : 0.01 + ((autotroph_sname)) == "diat" : 0.02 + ((autotroph_sname)) == "diaz" : 0.01 + ((autotroph_sname)) == "cocco" : 0.01 + loss_poc : + longname : Routing of loss term + subcategory : 10. autotrophs + units : unitless + datatype : real + default_value : + default : 1e34 + ((autotroph_sname)) == "sp" : 0 + ((autotroph_sname)) == "diat" : 0 + ((autotroph_sname)) == "diaz" : 0 + ((autotroph_sname)) == "cocco" : 0 + Ea : + longname : Activation energy for Arrhenius equation + subcategory : 10. autotrophs + units : eV + datatype : real + default_value : + default : 1e34 + ((autotroph_sname)) == "sp" : 0.32 + ((autotroph_sname)) == "diat" : 0.32 + ((autotroph_sname)) == "diaz" : 0.32 + ((autotroph_sname)) == "cocco" : 0.32 + zooplankton_settings : + _array_shape : zooplankton_cnt + _is_allocatable : true + datatype : + # Components of the derived type + # (_* are not part of the type) + _type_name : zooplankton_settings_type + sname : + longname : Short name of the zooplankton + subcategory : 11. zooplankton + units : non-numeric + datatype : string + default_value : + default : UNSET + ((zooplankton_sname)) == "microzoo" : microzoo + ((zooplankton_sname)) == "mesozoo" : microzoo + lname : + longname : Long name of the zooplankton + subcategory : 11. zooplankton + units : non-numeric + datatype : string + default_value : + default : UNSET + ((zooplankton_sname)) == "microzoo" : Microzooplankton + ((zooplankton_sname)) == "mesozoo" : Mesozooplankton + temp_func_form_opt: + longname : Option for the temperature scaling functional form + subcategory : 11. zooplankton + units : non-numeric + datatype : string + valid_values : + - q_10 + - arrhenius + - power + default_value : + default : UNSET + ((zooplankton_sname)) == "microzoo" : q_10 + ((zooplankton_sname)) == "mesozoo" : q_10 + z_mort_0_per_day : + longname : Linear mortality rate + subcategory : 11. zooplankton + units : 1/day + datatype : real + default_value : + default : 1e34 + ((zooplankton_sname)) == "microzoo" : 0.1 + ((zooplankton_sname)) == "mesozoo" : 0.035 + z_mort2_0_per_day : + longname : Quadratic mortality rate + subcategory : 11. zooplankton + units : 1/day / (mmol/m^3) + datatype : real + default_value : + default : 1e34 + ((zooplankton_sname)) == "microzoo" : 0.0028 + ((zooplankton_sname)) == "mesozoo" : 0.02 + loss_thres : + longname : Zoo concentration where losses go to zero + subcategory : 11. zooplankton + units : nmol/cm^3 + datatype : real + default_value : + default : 1e34 + ((zooplankton_sname)) == "microzoo" : 0.075 + ((zooplankton_sname)) == "mesozoo" : 0.075 + Ea : + longname : Activation energy for Arrhenius equation + subcategory : 11. zooplankton + units : eV + datatype : real + default_value : + default : 1e34 + ((zooplankton_sname)) == "microzoo" : 0.55 + ((zooplankton_sname)) == "mesozoo" : 0.55 + grazing_relationship_settings : + _array_shape : + - max_grazer_prey_cnt + - zooplankton_cnt + _is_allocatable : true + datatype : + _type_name : grazing_relationship_settings_type + sname : + longname : Short name of the grazing relationship + subcategory : 12. grazing + units : non-numeric + datatype : string + default_value : + default : UNSET + ((grazer_sname)) == "sp_microzoo" : grz_sp_microzoo + ((grazer_sname)) == "diat_mesozoo" : grz_diat_mesozoo + ((grazer_sname)) == "diaz_microzoo" : grz_diaz_microzoo + ((grazer_sname)) == "diaz_mesozoo" : grz_diaz_mesozoo + ((grazer_sname)) == "cocco_microzoo" : grz_cocco_microzoo + ((grazer_sname)) == "cocco_mesozoo" : grz_cocco_mesozoo + ((grazer_sname)) == "microzoo_mesozoo" : grz_microzoo_mesozoo + lname : + longname : Long name of the grazing relationship + subcategory : 12. grazing + units : non-numeric + datatype : string + default_value : + default : UNSET + ((grazer_sname)) == "sp_microzoo" : Grazing of sp by microzoo + ((grazer_sname)) == "diat_mesozoo" : Grazing of diat by mesozoo + ((grazer_sname)) == "diaz_microzoo" : Grazing of diaz by microzoo + ((grazer_sname)) == "diaz_mesozoo" : Grazing of diaz by mesozoo + ((grazer_sname)) == "cocco_microzoo" : Grazing of cocco by microzoo + ((grazer_sname)) == "cocco_mesozoo" : Grazing of cocco by mesozoo + ((grazer_sname)) == "microzoo_mesozoo" : Grazing of microzoo by mesozoo + auto_ind_cnt : + longname : Number of autotrophs being grazed + subcategory : 12. grazing + units : unitless + datatype : integer + default_value : + default : 4 + zoo_ind_cnt : + longname : Number of zooplankton being grazed + subcategory : 12. grazing + units : unitless + datatype : integer + default_value : + default : 1 + grazing_function : + longname : Functional form of grazing parameterization + subcategory : 12. grazing + units : unitless + datatype : integer + _comment : 1 => Michaelis-Menten, 2 => Sigmoidal + default_value : + default : 1 + ((grazer_sname)) == "sp_microzoo" : 2 + z_umax_0_per_day : + longname : Max zoo growth rate at tref + subcategory : 12. grazing + units : 1/day + datatype : real + default_value : + default : 1e34 + ((grazer_sname)) == "sp_microzoo" : 4.1 + ((grazer_sname)) == "diat_mesozoo" : 0.9 + ((grazer_sname)) == "diaz_microzoo" : 1 + ((grazer_sname)) == "diaz_mesozoo" : 0.5 + ((grazer_sname)) == "cocco_microzoo" : 1.7 + ((grazer_sname)) == "cocco_mesozoo" : 0.015 + ((grazer_sname)) == "microzoo_mesozoo" : 0.2 + z_grz : + longname : Grazing coefficient + subcategory : 12. grazing + units : (mmol/m^3)^2 + datatype : real + default_value : + default : 1e34 + ((grazer_sname)) == "sp_microzoo" : 1.4 + ((grazer_sname)) == "diat_mesozoo" : 1 + ((grazer_sname)) == "diaz_microzoo" : 1.2 + ((grazer_sname)) == "diaz_mesozoo" : 1.2 + ((grazer_sname)) == "cocco_microzoo" : 1.5 + ((grazer_sname)) == "cocco_mesozoo" : 1.4 + ((grazer_sname)) == "microzoo_mesozoo" : 1.3 + graze_zoo : + longname : Routing of grazed term, remainder goes to dic + subcategory : 12. grazing + units : unitless + datatype : real + default_value : + default : 1e34 + ((grazer_sname)) == "sp_microzoo" : 0.35 + ((grazer_sname)) == "diat_mesozoo" : 0.25 + ((grazer_sname)) == "diaz_microzoo" : 0.35 + ((grazer_sname)) == "diaz_mesozoo" : 0.25 + ((grazer_sname)) == "cocco_microzoo" : 0.25 + ((grazer_sname)) == "cocco_mesozoo" : 0.25 + ((grazer_sname)) == "microzoo_mesozoo" : 0.25 + graze_poc : + longname : Routing of grazed term, remainder goes to dic + subcategory : 12. grazing + units : unitless + datatype : real + default_value : + default : 1e34 + ((grazer_sname)) == "sp_microzoo" : 0.01 + ((grazer_sname)) == "diat_mesozoo" : 0.28 + ((grazer_sname)) == "diaz_microzoo" : 0.01 + ((grazer_sname)) == "diaz_mesozoo" : 0.18 + ((grazer_sname)) == "cocco_microzoo" : 0.18 + ((grazer_sname)) == "cocco_mesozoo" : 0.18 + ((grazer_sname)) == "microzoo_mesozoo" : 0.28 + graze_doc : + longname : Routing of grazed term, remainder goes to dic + subcategory : 12. grazing + units : unitless + datatype : real + default_value : + default : 1e34 + ((grazer_sname)) == "sp_microzoo" : 0.057 + ((grazer_sname)) == "diat_mesozoo" : 0.09 + ((grazer_sname)) == "diaz_microzoo" : 0.057 + ((grazer_sname)) == "diaz_mesozoo" : 0.09 + ((grazer_sname)) == "cocco_microzoo" : 0.09 + ((grazer_sname)) == "cocco_mesozoo" : 0.09 + ((grazer_sname)) == "microzoo_mesozoo" : 0.09 + f_zoo_detr : + longname : Fraction of zoo losses to detrital + subcategory : 12. grazing + units : unitless + datatype : real + default_value : + default : 1e34 + ((grazer_sname)) == "sp_microzoo" : 0.17 + ((grazer_sname)) == "diat_mesozoo" : 0.4 + ((grazer_sname)) == "diaz_microzoo" : 0.17 + ((grazer_sname)) == "diaz_mesozoo" : 0.12 + ((grazer_sname)) == "cocco_microzoo" : 0.27 + ((grazer_sname)) == "cocco_mesozoo" : 0.27 + ((grazer_sname)) == "microzoo_mesozoo" : 0.27 + auto_ind : + _array_shape : autotroph_cnt + _array_len_to_print : auto_ind_cnt + _is_allocatable : true + longname : Indices of autotrophs being grazed + subcategory : 12. grazing + units : unitless + datatype : integer + default_value : + default : 0 + ((grazer_sname)) == "sp_microzoo" : 1 # index where autotroph_name = sp + ((grazer_sname)) == "diat_mesozoo" : 2 # index where autotroph_name = diat + ((grazer_sname)) == "diaz_microzoo" : 3 # index where autotroph_name = diaz + ((grazer_sname)) == "diaz_mesozoo" : 3 # index where autotroph_name = diaz + ((grazer_sname)) == "cocco_microzoo" : 4 # index where autotroph_name = cocco + ((grazer_sname)) == "cocco_mesozoo" : 4 # index where autotroph_name = cocco + zoo_ind : + _array_shape : zooplankton_cnt + _array_len_to_print : zoo_ind_cnt + _is_allocatable : true + longname : Indices of zooplankton being grazed + subcategory : 12. grazing + units : unitless + datatype : integer + default_value : + default : 0 + ((grazer_sname)) == "microzoo_mesozoo" : 1 # index where autotroph_name = sp + +################################################################################ +# Category 4: tracer_dependent # +################################################################################ + +tracer_dependent : + tracer_restore_vars : + longname : Tracer names for tracers that are restored + subcategory : 20. tracer restoring + units : non-numeric + datatype : string + _array_shape : _tracer_list + _is_allocatable : true + default_value : + default : '' + GCM == "CESM" : &CESM_TRACER_RESTORE + - 'PO4' + - 'NO3' + - 'SiO3' + - 'ALK' + - 'ALK_ALT_CO2' + GRID == "CESM_x3" : *CESM_TRACER_RESTORE + GRID == "CESM_x1" : *CESM_TRACER_RESTORE From fd776901dc2c54d9dabf3c765b7a7e30790b122c Mon Sep 17 00:00:00 2001 From: Kristen Krumhardt Date: Wed, 19 Apr 2023 16:28:46 -0600 Subject: [PATCH 05/13] added output from yaml2json output --- MARBL_tools/marbl.input | 243 +++ defaults/json/settings_latest+4p2z.json | 1435 +++++++++++++++++ marbl_mod.diff | 388 +++++ .../gen_input_file/marbl_input.gen | 221 +++ .../marbl_settings.user_nl_marbl | 336 ++++ 5 files changed, 2623 insertions(+) create mode 100644 MARBL_tools/marbl.input create mode 100644 defaults/json/settings_latest+4p2z.json create mode 100644 marbl_mod.diff create mode 100644 tests/regression_tests/gen_input_file/marbl_input.gen create mode 100644 tests/regression_tests/gen_settings_file/marbl_settings.user_nl_marbl diff --git a/MARBL_tools/marbl.input b/MARBL_tools/marbl.input new file mode 100644 index 00000000..3e67b0cf --- /dev/null +++ b/MARBL_tools/marbl.input @@ -0,0 +1,243 @@ +! config PFTs +PFT_defaults = "CESM2" +autotroph_cnt = 3 +max_grazer_prey_cnt = 3 +zooplankton_cnt = 1 + +! config flags +ciso_lecovars_full_depth_tavg = .false. +ciso_lsource_sink = .true. +ciso_on = .false. +ladjust_bury_coeff = .false. +lcompute_nhx_surface_emis = .true. +lecovars_full_depth_tavg = .false. +lflux_gas_co2 = .true. +lflux_gas_o2 = .true. +lo2_consumption_scalef = .false. +lp_remin_scalef = .false. +lsource_sink = .true. +lvariable_PtoC = .true. + +! config strings +init_bury_coeff_opt = "settings_file" + +! general parameters +Jint_Ctot_thres_molpm2pyr = 1e-09 +bury_coeff_rmean_timescale_years = 10 +caco3_bury_thres_depth = 3.0000000000000000e+05 +caco3_bury_thres_omega_calc = 0.89 +caco3_bury_thres_opt = "omega_calc" +ciso_fract_factors = "Laws" +gQ_Fe_kFe_thres = 10.0 +gQ_Si_kSi_thres = 6.0 +gQsi_0 = 0.137 +gQsi_max = 0.822 +gQsi_min = 0.0457 +o2_sf_o2_range_hi = 45.0 +o2_sf_o2_range_lo = 5.0 +o2_sf_val_lo_o2 = 2.6 +parm_CaCO3_gamma = 0.02 +parm_Fe_bioavail = 1.0 +parm_Fe_desorption_rate0 = 9.9999999999999995e-07 +parm_Lig_degrade_rate0 = 9.4e-05 +parm_SiO2_gamma = 0.0 +parm_f_prod_sp_CaCO3 = 0.07 +parm_hPOC_CaCO3_ratio = 0.01 +parm_hPOC_SiO2_ratio = 0.01 +parm_hPOC_dust_ratio = 0.01 +parm_labile_ratio = 0.94 +parm_o2_min = 5.0 +parm_o2_min_delta = 5.0 +parm_sed_denitrif_coeff = 1 +particulate_flux_ref_depth = 100 + +! general parameters (bury coeffs) +POM_bury_frac_max = 0.8 +PON_bury_coeff = 0.5 +bSi_bury_frac_max = 1.0 +parm_init_POC_bury_coeff = 2.54 +parm_init_POP_bury_coeff = 0.36 +parm_init_bSi_bury_coeff = 1.53 + +! general parameters (dissolution) +parm_CaCO3_diss = 5.0000000000000000e+04 +parm_POC_diss = 1.0000000000000000e+04 +parm_SiO2_diss = 6.5000000000000000e+04 + +! general parameters (nitrification) +parm_kappa_nitrif_per_day = 0.06 +parm_nitrif_par_lim = 1.0 + +! general parameters (scavenging) +parm_FeLig_scavenge_rate0 = 1.2 +parm_Fe_scavenge_rate0 = 22.0 +parm_Lig_scavenge_rate0 = 0.015 + +! Scale lengths +parm_scalelen_vals(1) = 1 +parm_scalelen_vals(2) = 3.6 +parm_scalelen_vals(3) = 4.7 +parm_scalelen_vals(4) = 4.8 +parm_scalelen_z(1) = 1.0000000000000000e+04 +parm_scalelen_z(2) = 2.5000000000000000e+04 +parm_scalelen_z(3) = 5.0000000000000000e+04 +parm_scalelen_z(4) = 1.0000000000000000e+05 + +! autotrophs +autotroph_settings(1)%Nfixer = .false. +autotroph_settings(1)%PCref_per_day = 5 +autotroph_settings(1)%Qp_fixed = 8.5470085470085479e-03 +autotroph_settings(1)%agg_rate_max = 0.5 +autotroph_settings(1)%agg_rate_min = 0.01 +autotroph_settings(1)%alphaPI_per_day = 0.39 +autotroph_settings(1)%exp_calcifier = .false. +autotroph_settings(1)%gQfe_0 = 3.0000000000000001e-05 +autotroph_settings(1)%gQfe_min = 2.5e-06 +autotroph_settings(1)%imp_calcifier = .true. +autotroph_settings(1)%kDOP = 0.3 +autotroph_settings(1)%kFe = 3e-05 +autotroph_settings(1)%kNH4 = 0.01 +autotroph_settings(1)%kNO3 = 0.25 +autotroph_settings(1)%kPO4 = 0.01 +autotroph_settings(1)%kSiO3 = 0 +autotroph_settings(1)%lname = "Small Phyto" +autotroph_settings(1)%loss_poc = 0 +autotroph_settings(1)%loss_thres = 0.01 +autotroph_settings(1)%loss_thres2 = 0 +autotroph_settings(1)%mort2_per_day = 0.01 +autotroph_settings(1)%mort_per_day = 0.1 +autotroph_settings(1)%silicifier = .false. +autotroph_settings(1)%sname = "sp" +autotroph_settings(1)%temp_thres = -10 +autotroph_settings(1)%thetaN_max = 2.5 +autotroph_settings(2)%Nfixer = .false. +autotroph_settings(2)%PCref_per_day = 5 +autotroph_settings(2)%Qp_fixed = 8.5470085470085479e-03 +autotroph_settings(2)%agg_rate_max = 0.5 +autotroph_settings(2)%agg_rate_min = 0.02 +autotroph_settings(2)%alphaPI_per_day = 0.28 +autotroph_settings(2)%exp_calcifier = .false. +autotroph_settings(2)%gQfe_0 = 3.0000000000000001e-05 +autotroph_settings(2)%gQfe_min = 2.5e-06 +autotroph_settings(2)%imp_calcifier = .false. +autotroph_settings(2)%kDOP = 0.5 +autotroph_settings(2)%kFe = 7e-05 +autotroph_settings(2)%kNH4 = 0.05 +autotroph_settings(2)%kNO3 = 0.5 +autotroph_settings(2)%kPO4 = 0.05 +autotroph_settings(2)%kSiO3 = 0.7 +autotroph_settings(2)%lname = "Diatom" +autotroph_settings(2)%loss_poc = 0 +autotroph_settings(2)%loss_thres = 0.02 +autotroph_settings(2)%loss_thres2 = 0 +autotroph_settings(2)%mort2_per_day = 0.01 +autotroph_settings(2)%mort_per_day = 0.1 +autotroph_settings(2)%silicifier = .true. +autotroph_settings(2)%sname = "diat" +autotroph_settings(2)%temp_thres = -10 +autotroph_settings(2)%thetaN_max = 4 +autotroph_settings(3)%Nfixer = .true. +autotroph_settings(3)%PCref_per_day = 2.5 +autotroph_settings(3)%Qp_fixed = 2.7350427350427355e-03 +autotroph_settings(3)%agg_rate_max = 0.5 +autotroph_settings(3)%agg_rate_min = 0.01 +autotroph_settings(3)%alphaPI_per_day = 0.39 +autotroph_settings(3)%exp_calcifier = .false. +autotroph_settings(3)%gQfe_0 = 6.0000000000000002e-05 +autotroph_settings(3)%gQfe_min = 2.5e-06 +autotroph_settings(3)%imp_calcifier = .false. +autotroph_settings(3)%kDOP = 0.075 +autotroph_settings(3)%kFe = 4.5e-05 +autotroph_settings(3)%kNH4 = 0.2 +autotroph_settings(3)%kNO3 = 2 +autotroph_settings(3)%kPO4 = 0.015 +autotroph_settings(3)%kSiO3 = 0 +autotroph_settings(3)%lname = "Diazotroph" +autotroph_settings(3)%loss_poc = 0 +autotroph_settings(3)%loss_thres = 0.02 +autotroph_settings(3)%loss_thres2 = 0.001 +autotroph_settings(3)%mort2_per_day = 0.01 +autotroph_settings(3)%mort_per_day = 0.1 +autotroph_settings(3)%silicifier = .false. +autotroph_settings(3)%sname = "diaz" +autotroph_settings(3)%temp_thres = 15 +autotroph_settings(3)%thetaN_max = 2.5 + +! zooplankton +zooplankton_settings(1)%lname = "Zooplankton" +zooplankton_settings(1)%loss_thres = 0.075 +zooplankton_settings(1)%sname = "zoo" +zooplankton_settings(1)%z_mort2_0_per_day = 0.4 +zooplankton_settings(1)%z_mort_0_per_day = 0.1 + +! grazing +grazing_relationship_settings(1,1)%auto_ind(1) = 1 +grazing_relationship_settings(1,1)%auto_ind_cnt = 1 +grazing_relationship_settings(1,1)%f_zoo_detr = 0.12 +grazing_relationship_settings(1,1)%graze_doc = 0.06 +grazing_relationship_settings(1,1)%graze_poc = 0 +grazing_relationship_settings(1,1)%graze_zoo = 0.3 +grazing_relationship_settings(1,1)%grazing_function = 1 +grazing_relationship_settings(1,1)%lname = "Grazing of sp by zoo" +grazing_relationship_settings(1,1)%sname = "grz_sp_zoo" +grazing_relationship_settings(1,1)%z_grz = 1.2 +grazing_relationship_settings(1,1)%z_umax_0_per_day = 3.3 +grazing_relationship_settings(1,1)%zoo_ind_cnt = 0 +grazing_relationship_settings(2,1)%auto_ind(1) = 2 +grazing_relationship_settings(2,1)%auto_ind_cnt = 1 +grazing_relationship_settings(2,1)%f_zoo_detr = 0.24 +grazing_relationship_settings(2,1)%graze_doc = 0.06 +grazing_relationship_settings(2,1)%graze_poc = 0.39 +grazing_relationship_settings(2,1)%graze_zoo = 0.25 +grazing_relationship_settings(2,1)%grazing_function = 1 +grazing_relationship_settings(2,1)%lname = "Grazing of diat by zoo" +grazing_relationship_settings(2,1)%sname = "grz_diat_zoo" +grazing_relationship_settings(2,1)%z_grz = 1.2 +grazing_relationship_settings(2,1)%z_umax_0_per_day = 3.15 +grazing_relationship_settings(2,1)%zoo_ind_cnt = 0 +grazing_relationship_settings(3,1)%auto_ind(1) = 3 +grazing_relationship_settings(3,1)%auto_ind_cnt = 1 +grazing_relationship_settings(3,1)%f_zoo_detr = 0.12 +grazing_relationship_settings(3,1)%graze_doc = 0.06 +grazing_relationship_settings(3,1)%graze_poc = 0.1 +grazing_relationship_settings(3,1)%graze_zoo = 0.3 +grazing_relationship_settings(3,1)%grazing_function = 1 +grazing_relationship_settings(3,1)%lname = "Grazing of diaz by zoo" +grazing_relationship_settings(3,1)%sname = "grz_diaz_zoo" +grazing_relationship_settings(3,1)%z_grz = 1.2 +grazing_relationship_settings(3,1)%z_umax_0_per_day = 3.3 +grazing_relationship_settings(3,1)%zoo_ind_cnt = 0 + +! tracer restoring +tracer_restore_vars(1) = "" +tracer_restore_vars(2) = "" +tracer_restore_vars(3) = "" +tracer_restore_vars(4) = "" +tracer_restore_vars(5) = "" +tracer_restore_vars(6) = "" +tracer_restore_vars(7) = "" +tracer_restore_vars(8) = "" +tracer_restore_vars(9) = "" +tracer_restore_vars(10) = "" +tracer_restore_vars(11) = "" +tracer_restore_vars(12) = "" +tracer_restore_vars(13) = "" +tracer_restore_vars(14) = "" +tracer_restore_vars(15) = "" +tracer_restore_vars(16) = "" +tracer_restore_vars(17) = "" +tracer_restore_vars(18) = "" +tracer_restore_vars(19) = "" +tracer_restore_vars(20) = "" +tracer_restore_vars(21) = "" +tracer_restore_vars(22) = "" +tracer_restore_vars(23) = "" +tracer_restore_vars(24) = "" +tracer_restore_vars(25) = "" +tracer_restore_vars(26) = "" +tracer_restore_vars(27) = "" +tracer_restore_vars(28) = "" +tracer_restore_vars(29) = "" +tracer_restore_vars(30) = "" +tracer_restore_vars(31) = "" +tracer_restore_vars(32) = "" diff --git a/defaults/json/settings_latest+4p2z.json b/defaults/json/settings_latest+4p2z.json new file mode 100644 index 00000000..c501b56e --- /dev/null +++ b/defaults/json/settings_latest+4p2z.json @@ -0,0 +1,1435 @@ +{ + "PFT_counts": { + "autotroph_cnt": { + "cannot change": "PFT_defaults == 'CESM2+4p2z'", + "datatype": "integer", + "default_value": { + "PFT_defaults == \"CESM2+4p2z\"": 4, + "default": 1 + }, + "longname": "Number of autotroph classes", + "must set": "PFT_defaults == 'user-specified'", + "subcategory": "1. config PFTs", + "units": "unitless" + }, + "max_grazer_prey_cnt": { + "datatype": "integer", + "default_value": { + "PFT_defaults == \"CESM2+4p2z\"": 4, + "default": 1 + }, + "longname": "Number of grazer prey classes", + "subcategory": "1. config PFTs", + "units": "unitless" + }, + "zooplankton_cnt": { + "datatype": "integer", + "default_value": { + "PFT_defaults == \"CESM2+4p2z\"": 2, + "default": 1 + }, + "longname": "Number of zooplankton classes", + "subcategory": "1. config PFTs", + "units": "unitless" + } + }, + "PFT_derived_types": { + "autotroph_settings": { + "_array_shape": "autotroph_cnt", + "_is_allocatable": true, + "datatype": { + "Ea": { + "datatype": "real", + "default_value": { + "((autotroph_sname)) == \"cocco\"": 0.32, + "((autotroph_sname)) == \"diat\"": 0.32, + "((autotroph_sname)) == \"diaz\"": 0.32, + "((autotroph_sname)) == \"sp\"": 0.32, + "default": "1e34" + }, + "longname": "Activation energy for Arrhenius equation", + "subcategory": "10. autotrophs", + "units": "eV" + }, + "Nfixer": { + "datatype": "logical", + "default_value": { + "((autotroph_sname)) == \"diaz\"": ".true.", + "default": ".false." + }, + "longname": "Flag set to true if autotroph fixes nitrogen", + "subcategory": "10. autotrophs", + "units": "non-numeric" + }, + "PCref_per_day": { + "datatype": "real", + "default_value": { + "((autotroph_sname)) == \"cocco\"": 4.7, + "((autotroph_sname)) == \"diat\"": 5.3, + "((autotroph_sname)) == \"diaz\"": 1.6, + "((autotroph_sname)) == \"sp\"": 4.8, + "default": "1e34" + }, + "longname": "Maximum C-spec growth rate at Tref", + "subcategory": "10. autotrophs", + "units": "1/day" + }, + "Qp_fixed": { + "datatype": "real", + "default_value": { + "((autotroph_sname)) == \"cocco\"": "1.0/117", + "((autotroph_sname)) == \"diat\"": "1.0/117", + "((autotroph_sname)) == \"diaz\"": "0.32*(1.0/117)", + "((autotroph_sname)) == \"sp\"": "1.0/117", + "default": "1e34" + }, + "longname": "P/C ratio when using fixed P/C ratios", + "subcategory": "10. autotrophs", + "units": "unitless" + }, + "_type_name": "autotroph_settings_type", + "agg_rate_max": { + "datatype": "real", + "default_value": { + "((autotroph_sname)) == \"cocco\"": 0.5, + "((autotroph_sname)) == \"diat\"": 0.5, + "((autotroph_sname)) == \"diaz\"": 0.5, + "((autotroph_sname)) == \"sp\"": 0.5, + "default": "1e34" + }, + "longname": "Maximum agg rate", + "subcategory": "10. autotrophs", + "units": "1/day" + }, + "agg_rate_min": { + "datatype": "real", + "default_value": { + "((autotroph_sname)) == \"cocco\"": 0.01, + "((autotroph_sname)) == \"diat\"": 0.02, + "((autotroph_sname)) == \"diaz\"": 0.01, + "((autotroph_sname)) == \"sp\"": 0.01, + "default": "1e34" + }, + "longname": "Minimum agg rate", + "subcategory": "10. autotrophs", + "units": "1/day" + }, + "alphaPI_per_day": { + "datatype": "real", + "default_value": { + "((autotroph_sname)) == \"cocco\"": 0.31, + "((autotroph_sname)) == \"diat\"": 0.39, + "((autotroph_sname)) == \"diaz\"": 0.31, + "((autotroph_sname)) == \"sp\"": 0.35, + "default": "1e34" + }, + "longname": "Initial slope of P_I curve (GD98)", + "subcategory": "10. autotrophs", + "units": "mmol m^2/(mg Chl W day)" + }, + "exp_calcifier": { + "datatype": "logical", + "default_value": { + "((autotroph_sname)) == \"cocco\"": ".true.", + "default": ".false." + }, + "longname": "Flag set to true if autotroph explicitly handles calcification", + "subcategory": "10. autotrophs", + "units": "non-numeric" + }, + "gQfe_0": { + "datatype": "real", + "default_value": { + "((autotroph_sname)) == \"cocco\"": "30e-6", + "((autotroph_sname)) == \"diat\"": "30e-6", + "((autotroph_sname)) == \"diaz\"": "60e-6", + "((autotroph_sname)) == \"sp\"": "30e-6", + "default": "1e34" + }, + "longname": "Initial Fe/C ratio for growth", + "subcategory": "10. autotrophs", + "units": "unitless" + }, + "gQfe_min": { + "datatype": "real", + "default_value": { + "((autotroph_sname)) == \"cocco\"": 2.5e-06, + "((autotroph_sname)) == \"diat\"": 2.5e-06, + "((autotroph_sname)) == \"diaz\"": 2.5e-06, + "((autotroph_sname)) == \"sp\"": 2.5e-06, + "default": "1e34" + }, + "longname": "Minimum Fe/C ratio for growth", + "subcategory": "10. autotrophs", + "units": "unitless" + }, + "imp_calcifier": { + "datatype": "logical", + "default_value": { + "default": ".false." + }, + "longname": "Flag set to true if autotroph implicitly handles calcification", + "subcategory": "10. autotrophs", + "units": "non-numeric" + }, + "is_carbon_limited": { + "datatype": "logical", + "default_value": { + "((autotroph_sname)) == \"cocco\"": ".true.", + "default": ".false." + }, + "longname": "Flag set to true if autotroph is carbon limited", + "subcategory": "10. autotrophs", + "units": "non-numeric" + }, + "kCO2": { + "datatype": "real", + "default_value": { + "((autotroph_sname)) == \"cocco\"": 1, + "((autotroph_sname)) == \"diat\"": 0, + "((autotroph_sname)) == \"diaz\"": 0, + "((autotroph_sname)) == \"sp\"": 0, + "default": "1e34" + }, + "longname": "CO2 uptake half-sat constant", + "subcategory": "10. autotrophs", + "units": "nmol/cm^3" + }, + "kDOP": { + "datatype": "real", + "default_value": { + "((autotroph_sname)) == \"cocco\"": 0.25, + "((autotroph_sname)) == \"diat\"": 0.5, + "((autotroph_sname)) == \"diaz\"": 0.075, + "((autotroph_sname)) == \"sp\"": 0.3, + "default": "1e34" + }, + "longname": "DOP uptake half-sat constant", + "subcategory": "10. autotrophs", + "units": "nmol/cm^3" + }, + "kFe": { + "datatype": "real", + "default_value": { + "((autotroph_sname)) == \"cocco\"": 3.2e-05, + "((autotroph_sname)) == \"diat\"": 5e-05, + "((autotroph_sname)) == \"diaz\"": 4.5e-05, + "((autotroph_sname)) == \"sp\"": 3e-05, + "default": "1e34" + }, + "longname": "Fe uptake half-sat constant", + "subcategory": "10. autotrophs", + "units": "nmol/cm^3" + }, + "kNH4": { + "datatype": "real", + "default_value": { + "((autotroph_sname)) == \"cocco\"": 0.01, + "((autotroph_sname)) == \"diat\"": 0.05, + "((autotroph_sname)) == \"diaz\"": 0.2, + "((autotroph_sname)) == \"sp\"": 0.01, + "default": "1e34" + }, + "longname": "NH4 uptake half-sat constant", + "subcategory": "10. autotrophs", + "units": "nmol/cm^3" + }, + "kNO3": { + "datatype": "real", + "default_value": { + "((autotroph_sname)) == \"cocco\"": 0.41, + "((autotroph_sname)) == \"diat\"": 0.4, + "((autotroph_sname)) == \"diaz\"": 2, + "((autotroph_sname)) == \"sp\"": 0.2, + "default": "1e34" + }, + "longname": "NO3 uptake half-sat constant", + "subcategory": "10. autotrophs", + "units": "nmol/cm^3" + }, + "kPO4": { + "datatype": "real", + "default_value": { + "((autotroph_sname)) == \"cocco\"": 0.006, + "((autotroph_sname)) == \"diat\"": 0.05, + "((autotroph_sname)) == \"diaz\"": 0.015, + "((autotroph_sname)) == \"sp\"": 0.01, + "default": "1e34" + }, + "longname": "PO4 uptake half-sat constant", + "subcategory": "10. autotrophs", + "units": "nmol/cm^3" + }, + "kSiO3": { + "datatype": "real", + "default_value": { + "((autotroph_sname)) == \"cocco\"": 0, + "((autotroph_sname)) == \"diat\"": 1.6, + "((autotroph_sname)) == \"diaz\"": 0, + "((autotroph_sname)) == \"sp\"": 0, + "default": "1e34" + }, + "longname": "SiO3 uptake half-sat constant", + "subcategory": "10. autotrophs", + "units": "nmol/cm^3" + }, + "lname": { + "datatype": "string", + "default_value": { + "((autotroph_sname)) == \"cocco\"": "Coccolithophores", + "((autotroph_sname)) == \"diat\"": "Diatom", + "((autotroph_sname)) == \"diaz\"": "Diazotroph", + "((autotroph_sname)) == \"sp\"": "Small Phyto", + "default": "UNSET" + }, + "longname": "Long name of the autotroph", + "subcategory": "10. autotrophs", + "units": "non-numeric" + }, + "loss_poc": { + "datatype": "real", + "default_value": { + "((autotroph_sname)) == \"cocco\"": 0, + "((autotroph_sname)) == \"diat\"": 0, + "((autotroph_sname)) == \"diaz\"": 0, + "((autotroph_sname)) == \"sp\"": 0, + "default": "1e34" + }, + "longname": "Routing of loss term", + "subcategory": "10. autotrophs", + "units": "unitless" + }, + "loss_thres": { + "datatype": "real", + "default_value": { + "((autotroph_sname)) == \"cocco\"": 0.01, + "((autotroph_sname)) == \"diat\"": 0.02, + "((autotroph_sname)) == \"diaz\"": 0.02, + "((autotroph_sname)) == \"sp\"": 0.01, + "default": "1e34" + }, + "longname": "concentration where losses go to zero", + "subcategory": "10. autotrophs", + "units": "nmol/cm^3" + }, + "loss_thres2": { + "datatype": "real", + "default_value": { + "((autotroph_sname)) == \"cocco\"": 0, + "((autotroph_sname)) == \"diat\"": 0, + "((autotroph_sname)) == \"diaz\"": 0.001, + "((autotroph_sname)) == \"sp\"": 0, + "default": "1e34" + }, + "longname": "concentration where losses go to zero", + "subcategory": "10. autotrophs", + "units": "nmol/cm^3" + }, + "mort2_per_day": { + "datatype": "real", + "default_value": { + "((autotroph_sname)) == \"cocco\"": 0.01, + "((autotroph_sname)) == \"diat\"": 0.01, + "((autotroph_sname)) == \"diaz\"": 0.01, + "((autotroph_sname)) == \"sp\"": 0.01, + "default": "1e34" + }, + "longname": "Quadratic mortality rate", + "subcategory": "10. autotrophs", + "units": "(1/day)/(mmol/m^3)" + }, + "mort_per_day": { + "datatype": "real", + "default_value": { + "((autotroph_sname)) == \"cocco\"": 0.1, + "((autotroph_sname)) == \"diat\"": 0.1, + "((autotroph_sname)) == \"diaz\"": 0.1, + "((autotroph_sname)) == \"sp\"": 0.1, + "default": "1e34" + }, + "longname": "Linear mortality rate", + "subcategory": "10. autotrophs", + "units": "1/day" + }, + "silicifier": { + "datatype": "logical", + "default_value": { + "((autotroph_sname)) == \"diat\"": ".true.", + "default": ".false." + }, + "longname": "Flag set to true if autotroph is a silicifier", + "subcategory": "10. autotrophs", + "units": "non-numeric" + }, + "sname": { + "datatype": "string", + "default_value": { + "((autotroph_sname)) == \"cocco\"": "cocco", + "((autotroph_sname)) == \"diat\"": "diat", + "((autotroph_sname)) == \"diaz\"": "diaz", + "((autotroph_sname)) == \"sp\"": "sp", + "default": "UNSET" + }, + "longname": "Short name of the autotroph", + "subcategory": "10. autotrophs", + "units": "non-numeric" + }, + "temp_func_form_opt": { + "datatype": "string", + "default_value": { + "((autotroph_sname)) == \"cocco\"": "power", + "((autotroph_sname)) == \"diat\"": "q_10", + "((autotroph_sname)) == \"diaz\"": "q_10", + "((autotroph_sname)) == \"sp\"": "q_10", + "default": "UNSET" + }, + "longname": "Option for the temperature scaling functional form", + "subcategory": "10. autotrophs", + "units": "non-numeric", + "valid_values": [ + "q_10", + "arrhenius", + "power" + ] + }, + "temp_thres": { + "datatype": "real", + "default_value": { + "((autotroph_sname)) == \"cocco\"": 0, + "((autotroph_sname)) == \"diat\"": -10, + "((autotroph_sname)) == \"diaz\"": 15, + "((autotroph_sname)) == \"sp\"": -10, + "default": "1e34" + }, + "longname": "Temperature where concentration threshold and photosynthesis rate drops", + "subcategory": "10. autotrophs", + "units": "degC" + }, + "thetaN_max": { + "datatype": "real", + "default_value": { + "((autotroph_sname)) == \"cocco\"": 3.8, + "((autotroph_sname)) == \"diat\"": 4, + "((autotroph_sname)) == \"diaz\"": 2.5, + "((autotroph_sname)) == \"sp\"": 2.5, + "default": "1e34" + }, + "longname": "Maximum thetaN (Chl / N)", + "subcategory": "10. autotrophs", + "units": "mg Chl / mmol" + } + } + }, + "grazing_relationship_settings": { + "_array_shape": [ + "max_grazer_prey_cnt", + "zooplankton_cnt" + ], + "_is_allocatable": true, + "datatype": { + "_type_name": "grazing_relationship_settings_type", + "auto_ind": { + "_array_len_to_print": "auto_ind_cnt", + "_array_shape": "autotroph_cnt", + "_is_allocatable": true, + "datatype": "integer", + "default_value": { + "((grazer_sname)) == \"cocco_mesozoo\"": 4, + "((grazer_sname)) == \"cocco_microzoo\"": 4, + "((grazer_sname)) == \"diat_mesozoo\"": 2, + "((grazer_sname)) == \"diaz_mesozoo\"": 3, + "((grazer_sname)) == \"diaz_microzoo\"": 3, + "((grazer_sname)) == \"sp_microzoo\"": 1, + "default": 0 + }, + "longname": "Indices of autotrophs being grazed", + "subcategory": "12. grazing", + "units": "unitless" + }, + "auto_ind_cnt": { + "datatype": "integer", + "default_value": { + "default": 4 + }, + "longname": "Number of autotrophs being grazed", + "subcategory": "12. grazing", + "units": "unitless" + }, + "f_zoo_detr": { + "datatype": "real", + "default_value": { + "((grazer_sname)) == \"cocco_mesozoo\"": 0.27, + "((grazer_sname)) == \"cocco_microzoo\"": 0.27, + "((grazer_sname)) == \"diat_mesozoo\"": 0.4, + "((grazer_sname)) == \"diaz_mesozoo\"": 0.12, + "((grazer_sname)) == \"diaz_microzoo\"": 0.17, + "((grazer_sname)) == \"microzoo_mesozoo\"": 0.27, + "((grazer_sname)) == \"sp_microzoo\"": 0.17, + "default": "1e34" + }, + "longname": "Fraction of zoo losses to detrital", + "subcategory": "12. grazing", + "units": "unitless" + }, + "graze_doc": { + "datatype": "real", + "default_value": { + "((grazer_sname)) == \"cocco_mesozoo\"": 0.09, + "((grazer_sname)) == \"cocco_microzoo\"": 0.09, + "((grazer_sname)) == \"diat_mesozoo\"": 0.09, + "((grazer_sname)) == \"diaz_mesozoo\"": 0.09, + "((grazer_sname)) == \"diaz_microzoo\"": 0.057, + "((grazer_sname)) == \"microzoo_mesozoo\"": 0.09, + "((grazer_sname)) == \"sp_microzoo\"": 0.057, + "default": "1e34" + }, + "longname": "Routing of grazed term, remainder goes to dic", + "subcategory": "12. grazing", + "units": "unitless" + }, + "graze_poc": { + "datatype": "real", + "default_value": { + "((grazer_sname)) == \"cocco_mesozoo\"": 0.18, + "((grazer_sname)) == \"cocco_microzoo\"": 0.18, + "((grazer_sname)) == \"diat_mesozoo\"": 0.28, + "((grazer_sname)) == \"diaz_mesozoo\"": 0.18, + "((grazer_sname)) == \"diaz_microzoo\"": 0.01, + "((grazer_sname)) == \"microzoo_mesozoo\"": 0.28, + "((grazer_sname)) == \"sp_microzoo\"": 0.01, + "default": "1e34" + }, + "longname": "Routing of grazed term, remainder goes to dic", + "subcategory": "12. grazing", + "units": "unitless" + }, + "graze_zoo": { + "datatype": "real", + "default_value": { + "((grazer_sname)) == \"cocco_mesozoo\"": 0.25, + "((grazer_sname)) == \"cocco_microzoo\"": 0.25, + "((grazer_sname)) == \"diat_mesozoo\"": 0.25, + "((grazer_sname)) == \"diaz_mesozoo\"": 0.25, + "((grazer_sname)) == \"diaz_microzoo\"": 0.35, + "((grazer_sname)) == \"microzoo_mesozoo\"": 0.25, + "((grazer_sname)) == \"sp_microzoo\"": 0.35, + "default": "1e34" + }, + "longname": "Routing of grazed term, remainder goes to dic", + "subcategory": "12. grazing", + "units": "unitless" + }, + "grazing_function": { + "_comment": "1 => Michaelis-Menten, 2 => Sigmoidal", + "datatype": "integer", + "default_value": { + "((grazer_sname)) == \"sp_microzoo\"": 2, + "default": 1 + }, + "longname": "Functional form of grazing parameterization", + "subcategory": "12. grazing", + "units": "unitless" + }, + "lname": { + "datatype": "string", + "default_value": { + "((grazer_sname)) == \"cocco_mesozoo\"": "Grazing of cocco by mesozoo", + "((grazer_sname)) == \"cocco_microzoo\"": "Grazing of cocco by microzoo", + "((grazer_sname)) == \"diat_mesozoo\"": "Grazing of diat by mesozoo", + "((grazer_sname)) == \"diaz_mesozoo\"": "Grazing of diaz by mesozoo", + "((grazer_sname)) == \"diaz_microzoo\"": "Grazing of diaz by microzoo", + "((grazer_sname)) == \"microzoo_mesozoo\"": "Grazing of microzoo by mesozoo", + "((grazer_sname)) == \"sp_microzoo\"": "Grazing of sp by microzoo", + "default": "UNSET" + }, + "longname": "Long name of the grazing relationship", + "subcategory": "12. grazing", + "units": "non-numeric" + }, + "sname": { + "datatype": "string", + "default_value": { + "((grazer_sname)) == \"cocco_mesozoo\"": "grz_cocco_mesozoo", + "((grazer_sname)) == \"cocco_microzoo\"": "grz_cocco_microzoo", + "((grazer_sname)) == \"diat_mesozoo\"": "grz_diat_mesozoo", + "((grazer_sname)) == \"diaz_mesozoo\"": "grz_diaz_mesozoo", + "((grazer_sname)) == \"diaz_microzoo\"": "grz_diaz_microzoo", + "((grazer_sname)) == \"microzoo_mesozoo\"": "grz_microzoo_mesozoo", + "((grazer_sname)) == \"sp_microzoo\"": "grz_sp_microzoo", + "default": "UNSET" + }, + "longname": "Short name of the grazing relationship", + "subcategory": "12. grazing", + "units": "non-numeric" + }, + "z_grz": { + "datatype": "real", + "default_value": { + "((grazer_sname)) == \"cocco_mesozoo\"": 1.4, + "((grazer_sname)) == \"cocco_microzoo\"": 1.5, + "((grazer_sname)) == \"diat_mesozoo\"": 1, + "((grazer_sname)) == \"diaz_mesozoo\"": 1.2, + "((grazer_sname)) == \"diaz_microzoo\"": 1.2, + "((grazer_sname)) == \"microzoo_mesozoo\"": 1.3, + "((grazer_sname)) == \"sp_microzoo\"": 1.4, + "default": "1e34" + }, + "longname": "Grazing coefficient", + "subcategory": "12. grazing", + "units": "(mmol/m^3)^2" + }, + "z_umax_0_per_day": { + "datatype": "real", + "default_value": { + "((grazer_sname)) == \"cocco_mesozoo\"": 0.015, + "((grazer_sname)) == \"cocco_microzoo\"": 1.7, + "((grazer_sname)) == \"diat_mesozoo\"": 0.9, + "((grazer_sname)) == \"diaz_mesozoo\"": 0.5, + "((grazer_sname)) == \"diaz_microzoo\"": 1, + "((grazer_sname)) == \"microzoo_mesozoo\"": 0.2, + "((grazer_sname)) == \"sp_microzoo\"": 4.1, + "default": "1e34" + }, + "longname": "Max zoo growth rate at tref", + "subcategory": "12. grazing", + "units": "1/day" + }, + "zoo_ind": { + "_array_len_to_print": "zoo_ind_cnt", + "_array_shape": "zooplankton_cnt", + "_is_allocatable": true, + "datatype": "integer", + "default_value": { + "((grazer_sname)) == \"microzoo_mesozoo\"": 1, + "default": 0 + }, + "longname": "Indices of zooplankton being grazed", + "subcategory": "12. grazing", + "units": "unitless" + }, + "zoo_ind_cnt": { + "datatype": "integer", + "default_value": { + "default": 1 + }, + "longname": "Number of zooplankton being grazed", + "subcategory": "12. grazing", + "units": "unitless" + } + } + }, + "zooplankton_settings": { + "_array_shape": "zooplankton_cnt", + "_is_allocatable": true, + "datatype": { + "Ea": { + "datatype": "real", + "default_value": { + "((zooplankton_sname)) == \"mesozoo\"": 0.55, + "((zooplankton_sname)) == \"microzoo\"": 0.55, + "default": "1e34" + }, + "longname": "Activation energy for Arrhenius equation", + "subcategory": "11. zooplankton", + "units": "eV" + }, + "_type_name": "zooplankton_settings_type", + "lname": { + "datatype": "string", + "default_value": { + "((zooplankton_sname)) == \"mesozoo\"": "Mesozooplankton", + "((zooplankton_sname)) == \"microzoo\"": "Microzooplankton", + "default": "UNSET" + }, + "longname": "Long name of the zooplankton", + "subcategory": "11. zooplankton", + "units": "non-numeric" + }, + "loss_thres": { + "datatype": "real", + "default_value": { + "((zooplankton_sname)) == \"mesozoo\"": 0.075, + "((zooplankton_sname)) == \"microzoo\"": 0.075, + "default": "1e34" + }, + "longname": "Zoo concentration where losses go to zero", + "subcategory": "11. zooplankton", + "units": "nmol/cm^3" + }, + "sname": { + "datatype": "string", + "default_value": { + "((zooplankton_sname)) == \"mesozoo\"": "microzoo", + "((zooplankton_sname)) == \"microzoo\"": "microzoo", + "default": "UNSET" + }, + "longname": "Short name of the zooplankton", + "subcategory": "11. zooplankton", + "units": "non-numeric" + }, + "temp_func_form_opt": { + "datatype": "string", + "default_value": { + "((zooplankton_sname)) == \"mesozoo\"": "q_10", + "((zooplankton_sname)) == \"microzoo\"": "q_10", + "default": "UNSET" + }, + "longname": "Option for the temperature scaling functional form", + "subcategory": "11. zooplankton", + "units": "non-numeric", + "valid_values": [ + "q_10", + "arrhenius", + "power" + ] + }, + "z_mort2_0_per_day": { + "datatype": "real", + "default_value": { + "((zooplankton_sname)) == \"mesozoo\"": 0.02, + "((zooplankton_sname)) == \"microzoo\"": 0.0028, + "default": "1e34" + }, + "longname": "Quadratic mortality rate", + "subcategory": "11. zooplankton", + "units": "1/day / (mmol/m^3)" + }, + "z_mort_0_per_day": { + "datatype": "real", + "default_value": { + "((zooplankton_sname)) == \"mesozoo\"": 0.035, + "((zooplankton_sname)) == \"microzoo\"": 0.1, + "default": "1e34" + }, + "longname": "Linear mortality rate", + "subcategory": "11. zooplankton", + "units": "1/day" + } + } + } + }, + "_order": [ + "general_parms", + "general_parms2", + "PFT_counts", + "PFT_derived_types", + "tracer_dependent" + ], + "_tracer_list": { + "((autotroph_sname))13C": { + "dependencies": { + "ciso_on": ".true." + }, + "long_name": "((autotroph_lname)) Carbon-13", + "units": "mmol/m^3" + }, + "((autotroph_sname))14C": { + "dependencies": { + "ciso_on": ".true." + }, + "long_name": "((autotroph_lname)) Carbon-14", + "units": "mmol/m^3" + }, + "((autotroph_sname))C": { + "long_name": "((autotroph_lname)) Carbon", + "units": "mmol/m^3" + }, + "((autotroph_sname))Ca13CO3": { + "dependencies": { + "((autotroph_calcifier))": true, + "ciso_on": ".true." + }, + "long_name": "((autotroph_lname)) Ca13CO3", + "units": "mmol/m^3" + }, + "((autotroph_sname))Ca14CO3": { + "dependencies": { + "((autotroph_calcifier))": true, + "ciso_on": ".true." + }, + "long_name": "((autotroph_lname)) Ca14CO3", + "units": "mmol/m^3" + }, + "((autotroph_sname))CaCO3": { + "dependencies": { + "((autotroph_calcifier))": true + }, + "long_name": "((autotroph_lname)) CaCO3", + "units": "mmol/m^3" + }, + "((autotroph_sname))Chl": { + "long_name": "((autotroph_lname)) Chlorophyll", + "units": "mmol/m^3" + }, + "((autotroph_sname))Fe": { + "long_name": "((autotroph_lname)) Iron", + "units": "mmol/m^3" + }, + "((autotroph_sname))P": { + "dependencies": { + "lvariable_PtoC": ".true." + }, + "long_name": "((autotroph_lname)) Phosphorus", + "units": "mmol/m^3" + }, + "((autotroph_sname))Si": { + "dependencies": { + "((autotroph_silicifier))": true + }, + "long_name": "((autotroph_lname)) Silicon", + "units": "mmol/m^3" + }, + "((zooplankton_sname))C": { + "long_name": "((zooplankton_lname)) Carbon", + "units": "mmol/m^3" + }, + "ALK": { + "long_name": "Alkalinity", + "units": "meq/m^3" + }, + "ALK_ALT_CO2": { + "long_name": "Alkalinity, Alternative CO2", + "units": "meq/m^3" + }, + "DI13C": { + "dependencies": { + "ciso_on": ".true." + }, + "long_name": "Dissolved Inorganic Carbon-13", + "units": "mmol/m^3" + }, + "DI14C": { + "dependencies": { + "ciso_on": ".true." + }, + "long_name": "Dissolved Inorganic Carbon-14", + "units": "mmol/m^3" + }, + "DIC": { + "long_name": "Dissolved Inorganic Carbon", + "units": "mmol/m^3" + }, + "DIC_ALT_CO2": { + "long_name": "Dissolved Inorganic Carbon, Alternative CO2", + "units": "mmol/m^3" + }, + "DO13Ctot": { + "dependencies": { + "ciso_on": ".true." + }, + "long_name": "Dissolved Organic Carbon-13 (semi-labile+refractoy)", + "units": "mmol/m^3" + }, + "DO14Ctot": { + "dependencies": { + "ciso_on": ".true." + }, + "long_name": "Dissolved Organic Carbon-14 (semi-labile+refractoy)", + "units": "mmol/m^3" + }, + "DOC": { + "long_name": "Dissolved Organic Carbon", + "units": "mmol/m^3" + }, + "DOCr": { + "long_name": "Refractory DOC", + "units": "mmol/m^3" + }, + "DON": { + "long_name": "Dissolved Organic Nitrogen", + "units": "mmol/m^3" + }, + "DONr": { + "long_name": "Refractory DON", + "units": "mmol/m^3" + }, + "DOP": { + "long_name": "Dissolved Organic Phosphorus", + "units": "mmol/m^3" + }, + "DOPr": { + "long_name": "Refractory DOP", + "units": "mmol/m^3" + }, + "Fe": { + "long_name": "Dissolved Inorganic Iron", + "units": "mmol/m^3" + }, + "Lig": { + "long_name": "Iron Binding Ligand", + "units": "mmol/m^3" + }, + "NH4": { + "long_name": "Dissolved Ammonia", + "units": "mmol/m^3" + }, + "NO3": { + "long_name": "Dissolved Inorganic Nitrate", + "units": "mmol/m^3" + }, + "O2": { + "long_name": "Dissolved Oxygen", + "units": "mmol/m^3" + }, + "PO4": { + "long_name": "Dissolved Inorganic Phosphate", + "units": "mmol/m^3" + }, + "SiO3": { + "long_name": "Dissolved Inorganic Silicate", + "units": "mmol/m^3" + }, + "zootot13C": { + "dependencies": { + "ciso_on": ".true." + }, + "long_name": "Zooplankton Carbon-13 (sum over all zooplankton)", + "units": "mmol/m^3" + }, + "zootot14C": { + "dependencies": { + "ciso_on": ".true." + }, + "long_name": "Zooplankton Carbon-14 (sum over all zooplankton)", + "units": "mmol/m^3" + } + }, + "general_parms": { + "Jint_Ctot_thres_molpm2pyr": { + "datatype": "real", + "default_value": 1e-09, + "longname": "MARBL will abort if abs(Jint_Ctot) exceeds this threshold", + "subcategory": "4. general parameters", + "units": "mol m-2 yr-1" + }, + "PFT_defaults": { + "_CESM2+4p2z_PFT_keys": { + "autotroph_settings": [ + "sp", + "diat", + "diaz", + "cocco" + ], + "grazing_relationship_settings": [ + "sp_microzoo", + "diat_mesozoo", + "diaz_microzoo", + "diaz_mesozoo", + "cocco_microzoo", + "cocco_mesozoo", + "microzoo_mesozoo" + ], + "zooplankton_settings": [ + "microzoo", + "mesozoo" + ] + }, + "_append_to_config_keywords": true, + "datatype": "string", + "default_value": "CESM2+4p2z", + "longname": "Define how PFTs are initialized", + "subcategory": "1. config PFTs", + "units": "unitless", + "valid_values": [ + "CESM2+4p2z", + "user-specified" + ] + }, + "POM_bury_frac_max": { + "datatype": "real", + "default_value": 0.8, + "longname": "maximum bury fraction for POM", + "subcategory": "4. general parameters (bury coeffs)", + "units": "unitless" + }, + "PON_bury_coeff": { + "datatype": "real", + "default_value": 0.5, + "longname": "Scale factor for burial of PON", + "subcategory": "4. general parameters (bury coeffs)", + "units": "unitless" + }, + "QCaCO3_max": { + "datatype": "real", + "default_value": 1.0, + "longname": "Max CaCO3/C ratio for calcifiers", + "subcategory": "4. general parameters", + "units": "mmol CaCO3/mmol C" + }, + "auto_mort2_exp": { + "datatype": "real", + "default_value": 1.75, + "longname": "Value of power loss exponent for autotrophs", + "subcategory": "4. general parameters", + "units": "unitless" + }, + "bSi_bury_frac_max": { + "datatype": "real", + "default_value": 1.0, + "longname": "maximum bury fraction for bSi", + "subcategory": "4. general parameters (bury coeffs)", + "units": "unitless" + }, + "bury_coeff_rmean_timescale_years": { + "datatype": "real", + "default_value": 10, + "longname": "Running mean time scale for bury coefficients", + "subcategory": "4. general parameters", + "units": "years" + }, + "caco3_bury_thres_depth": { + "datatype": "real", + "default_value": "3000e2", + "longname": "Threshold depth for CaCO3 burial when opt = 'fixed_depth'", + "subcategory": "4. general parameters", + "units": "cm" + }, + "caco3_bury_thres_omega_calc": { + "datatype": "real", + "default_value": 0.89, + "longname": "omega calcite threshold for CaCO3 burial when opt = 'omega_calc'", + "subcategory": "4. general parameters", + "units": 1 + }, + "caco3_bury_thres_opt": { + "datatype": "string", + "default_value": "omega_calc", + "longname": "Option of threshold of CaCO3 burial", + "subcategory": "4. general parameters", + "units": "non-numeric", + "valid_values": [ + "fixed_depth", + "omega_calc" + ] + }, + "ciso_fract_factors": { + "datatype": "string", + "default_value": "Laws", + "longname": "Option for which biological fractionation calculation to use", + "subcategory": "4. general parameters", + "units": "non-numeric" + }, + "ciso_lsource_sink": { + "datatype": "logical", + "default_value": ".true.", + "longname": "Control which portions of the carbon isotope code are executed (useful for debugging)", + "subcategory": "2. config flags", + "units": "unitless" + }, + "ciso_on": { + "datatype": "logical", + "default_value": ".false.", + "longname": "Control whether CISO tracer module is active", + "subcategory": "2. config flags", + "units": "unitless" + }, + "f_graze_CaCO3_remin": { + "datatype": "real", + "default_value": 0.5, + "longname": "Fraction of spCaCO3 grazing which is remineralized in zooplankton guts", + "subcategory": "4. general parameters", + "units": "unitless" + }, + "gQ_Fe_kFe_thres": { + "datatype": "real", + "default_value": 10.0, + "longname": "Fe:kFe ratio threshold in uptake ratio computations", + "subcategory": "4. general parameters", + "units": 1 + }, + "gQ_Si_kSi_thres": { + "datatype": "real", + "default_value": 5.0, + "longname": "Si:kSi ratio threshold in uptake ratio computations", + "subcategory": "4. general parameters", + "units": 1 + }, + "gQsi_0": { + "datatype": "real", + "default_value": 0.137, + "longname": "initial Si/C ratio for growth", + "subcategory": "4. general parameters", + "units": 1 + }, + "gQsi_max": { + "datatype": "real", + "default_value": 0.685, + "longname": "max Si/C ratio for growth", + "subcategory": "4. general parameters", + "units": 1 + }, + "gQsi_min": { + "datatype": "real", + "default_value": 0.0457, + "longname": "min Si/C ratio for growth", + "subcategory": "4. general parameters", + "units": 1 + }, + "ladjust_bury_coeff": { + "_append_to_config_keywords": true, + "datatype": "logical", + "default_value": ".false.", + "longname": "Control if bury coefficients are adjusted (rather than constant)", + "subcategory": "2. config flags", + "units": "unitless" + }, + "lcompute_nhx_surface_emis": { + "datatype": "logical", + "default_value": ".true.", + "longname": "Control if NHx emissions are computed", + "subcategory": "2. config flags", + "units": "unitless" + }, + "lecovars_full_depth_tavg": { + "datatype": "logical", + "default_value": ".false.", + "longname": "If .false., MARBL will recommend truncating the column for some diagnostics", + "subcategory": "2. config flags", + "units": "unitless" + }, + "lflux_gas_co2": { + "datatype": "logical", + "default_value": ".true.", + "longname": "Control which portions of code are executed (useful for debugging)", + "subcategory": "2. config flags", + "units": "unitless" + }, + "lflux_gas_o2": { + "datatype": "logical", + "default_value": ".true.", + "longname": "Control which portions of code are executed (useful for debugging)", + "subcategory": "2. config flags", + "units": "unitless" + }, + "lo2_consumption_scalef": { + "datatype": "logical", + "default_value": { + "GRID == \"CESM_x1\"": ".true.", + "default": ".false." + }, + "longname": "Apply o2_consumption_scalef to o2 consumption (and request it as a forcing)", + "subcategory": "2. config flags", + "units": "unitless" + }, + "lp_remin_scalef": { + "datatype": "logical", + "default_value": ".false.", + "longname": "Apply p_remin_scalef to particulate remin (and request it as a forcing)", + "subcategory": "2. config flags", + "units": "unitless" + }, + "lsource_sink": { + "datatype": "logical", + "default_value": ".true.", + "longname": "Control which portions of code are executed (useful for debugging)", + "subcategory": "2. config flags", + "units": "unitless" + }, + "lvariable_PtoC": { + "datatype": "logical", + "default_value": ".true.", + "longname": "Control if PtoC ratios in autotrophs vary", + "subcategory": "2. config flags", + "units": "unitless" + }, + "o2_sf_o2_range_hi": { + "datatype": "real", + "default_value": 45.0, + "longname": "o2_scalefactor is applied to diss length scales for O2 less than this", + "subcategory": "4. general parameters", + "units": "mmol/m^3" + }, + "o2_sf_o2_range_lo": { + "datatype": "real", + "default_value": 5.0, + "longname": "o2_scalefactor is constant for O2 less than this", + "subcategory": "4. general parameters", + "units": "mmol/m^3" + }, + "o2_sf_val_lo_o2": { + "datatype": "real", + "default_value": 3.0, + "longname": "o2_scalefactor constant for O2 less than o2_sf_o2_range_lo", + "subcategory": "4. general parameters", + "units": 1 + }, + "parm_CaCO3_diss": { + "datatype": "real", + "default_value": "500e2", + "longname": "Base CaCO3 dissolution length scale", + "subcategory": "4. general parameters (dissolution)", + "units": "cm" + }, + "parm_CaCO3_gamma": { + "datatype": "real", + "default_value": 0.1, + "longname": "CaCO3 gamma (fraction of production -> hard subclass)", + "subcategory": "4. general parameters", + "units": 1 + }, + "parm_FeLig_scavenge_rate0": { + "datatype": "real", + "default_value": 1.3, + "longname": "Scavenging base rate for bound iron", + "subcategory": "4. general parameters (scavenging)", + "units": "unitless" + }, + "parm_Fe_bioavail": { + "datatype": "real", + "default_value": 1.0, + "longname": "Fraction of Fe flux that is bioavailable", + "subcategory": "4. general parameters", + "units": "unitless" + }, + "parm_Fe_desorption_rate0": { + "datatype": "real", + "default_value": "1e-6", + "longname": "Desorption rate for scavenged Fe from particles", + "subcategory": "4. general parameters", + "units": "unitless" + }, + "parm_Fe_scavenge_rate0": { + "datatype": "real", + "default_value": 24.0, + "longname": "Scavenging base rate for Fe", + "subcategory": "4. general parameters (scavenging)", + "units": "unitless" + }, + "parm_Lig_degrade_rate0": { + "datatype": "real", + "default_value": 9.4e-05, + "longname": "Fe-binding ligand bacterial degradation base rate coefficient", + "subcategory": "4. general parameters", + "units": "unitless" + }, + "parm_Lig_scavenge_rate0": { + "datatype": "real", + "default_value": 0.015, + "longname": "Scavenging base rate for bound ligand", + "subcategory": "4. general parameters (scavenging)", + "units": "unitless" + }, + "parm_POC_diss": { + "datatype": "real", + "default_value": "100e2", + "longname": "Base POC dissolution length scale", + "subcategory": "4. general parameters (dissolution)", + "units": "cm" + }, + "parm_SiO2_diss": { + "datatype": "real", + "default_value": "700e2", + "longname": "Base SiO2 dissolution length scale", + "subcategory": "4. general parameters (dissolution)", + "units": "cm" + }, + "parm_SiO2_gamma": { + "datatype": "real", + "default_value": 0.1, + "longname": "SiO2 gamma (fraction of production -> hard subclass)", + "subcategory": "4. general parameters", + "units": 1 + }, + "parm_f_prod_sp_CaCO3": { + "datatype": "real", + "default_value": { + "GRID == \"CESM_x3\"": 0.075, + "default": 0.07 + }, + "longname": "Fraction of sp production as CaCO3 production", + "subcategory": "4. general parameters", + "units": "unitless" + }, + "parm_hPOC_CaCO3_ratio": { + "datatype": "real", + "default_value": 0.05, + "longname": "hPOC to CaCO3 ratio", + "subcategory": "4. general parameters", + "units": 1 + }, + "parm_hPOC_SiO2_ratio": { + "datatype": "real", + "default_value": 0.05, + "longname": "hPOC to SiO2 ratio", + "subcategory": "4. general parameters", + "units": 1 + }, + "parm_hPOC_dust_ratio": { + "datatype": "real", + "default_value": 0.05, + "longname": "hPOC to dust ratio", + "subcategory": "4. general parameters", + "units": 1 + }, + "parm_init_POC_bury_coeff": { + "datatype": "real", + "default_value": { + "GRID == \"CESM_x3\"": 5.0, + "default": 2.54 + }, + "longname": "Initial scale factor for burial of POC, PON", + "subcategory": "4. general parameters (bury coeffs)", + "units": "unitless" + }, + "parm_init_POP_bury_coeff": { + "datatype": "real", + "default_value": { + "GRID == \"CESM_x3\"": 5.0, + "default": 0.36 + }, + "longname": "Initial scale factor for burial of POP", + "subcategory": "4. general parameters (bury coeffs)", + "units": "unitless" + }, + "parm_init_bSi_bury_coeff": { + "datatype": "real", + "default_value": { + "GRID == \"CESM_x3\"": 1.1, + "default": 1.53 + }, + "longname": "Initial scale factor for burial of bSi", + "subcategory": "4. general parameters (bury coeffs)", + "units": "unitless" + }, + "parm_kappa_nitrif_per_day": { + "datatype": "real", + "default_value": 0.06, + "longname": "Nitrification inverse time constant", + "subcategory": "4. general parameters (nitrification)", + "units": "1/day" + }, + "parm_labile_ratio": { + "datatype": "real", + "default_value": 0.94, + "longname": "Fraction of loss to DOC that routed directly to DIC", + "subcategory": "4. general parameters", + "units": "unitless" + }, + "parm_nitrif_par_lim": { + "datatype": "real", + "default_value": 1.0, + "longname": "PAR limit for nitrification", + "subcategory": "4. general parameters (nitrification)", + "units": "W/m^2" + }, + "parm_o2_min": { + "datatype": "real", + "default_value": 5.0, + "longname": "Minimum O2 needed for production & consumption", + "subcategory": "4. general parameters", + "units": "nmol/cm^3" + }, + "parm_o2_min_delta": { + "datatype": "real", + "default_value": 5.0, + "longname": "Width of min O2 range", + "subcategory": "4. general parameters", + "units": "nmol/cm^3" + }, + "parm_scalelen_vals": { + "_array_shape": 4, + "datatype": "real", + "default_value": { + "GRID == \"CESM_x3\"": [ + 1, + 3.3, + 4.2, + 4.4 + ], + "default": [ + 1, + 3.6, + 5.0, + 5.3 + ] + }, + "longname": "Prescribed scalelen values", + "subcategory": "5. Scale lengths", + "units": "unitless" + }, + "parm_scalelen_z": { + "_array_shape": 4, + "datatype": "real", + "default_value": [ + "100.0e2", + "250.0e2", + "500.0e2", + "2000.0e2" + ], + "longname": "Depths of prescribed scalelen values", + "subcategory": "5. Scale lengths", + "units": "cm" + }, + "parm_sed_denitrif_coeff": { + "datatype": "real", + "default_value": { + "GRID == \"CESM_x3\"": 1.4, + "default": 1 + }, + "longname": "Global scaling factor for sed_denitrif", + "subcategory": "4. general parameters", + "units": "unitless" + }, + "particulate_flux_ref_depth": { + "datatype": "integer", + "default_value": 100, + "longname": "reference depth for particulate flux diagnostics", + "subcategory": "4. general parameters", + "units": "m" + }, + "zoo_mort2_exp": { + "datatype": "real", + "default_value": 2.0, + "longname": "Value of power loss exponent for zooplankton", + "subcategory": "4. general parameters", + "units": "unitless" + } + }, + "general_parms2": { + "init_bury_coeff_opt": { + "datatype": "string", + "default_value": { + "SAVED_STATE_VARS_SOURCE == \"GCM\"": "GCM", + "default": "settings_file", + "not ladjust_bury_coeff": "settings_file" + }, + "longname": "Source of initial burial coefficient", + "subcategory": "3. config strings", + "units": "unitless" + } + }, + "tracer_dependent": { + "tracer_restore_vars": { + "_array_shape": "_tracer_list", + "_is_allocatable": true, + "datatype": "string", + "default_value": { + "GCM == \"CESM\"": [ + "PO4", + "NO3", + "SiO3", + "ALK", + "ALK_ALT_CO2" + ], + "GRID == \"CESM_x1\"": [ + "PO4", + "NO3", + "SiO3", + "ALK", + "ALK_ALT_CO2" + ], + "GRID == \"CESM_x3\"": [ + "PO4", + "NO3", + "SiO3", + "ALK", + "ALK_ALT_CO2" + ], + "default": "" + }, + "longname": "Tracer names for tracers that are restored", + "subcategory": "20. tracer restoring", + "units": "non-numeric" + } + } +} \ No newline at end of file diff --git a/marbl_mod.diff b/marbl_mod.diff new file mode 100644 index 00000000..e569a4ed --- /dev/null +++ b/marbl_mod.diff @@ -0,0 +1,388 @@ +diff --git a/src/marbl_mod.F90 b/src/marbl_mod.F90 +index 3daea34..a400f81 100644 +--- a/src/marbl_mod.F90 ++++ b/src/marbl_mod.F90 +@@ -143,6 +143,7 @@ module marbl_mod + use marbl_settings_mod, only : parm_red_d_c_o2_diaz + use marbl_settings_mod, only : parm_Remin_D_C_O2 + use marbl_settings_mod, only : QCaCO3_max ++ use marbl_settings_mod, only : QCaCO3_max_exp + use marbl_settings_mod, only : Qfe_zoo + use marbl_settings_mod, only : r_Nfix_photo + use marbl_settings_mod, only : spc_poc_fac +@@ -510,6 +511,7 @@ contains + real (r8) :: sed_denitrif(domain%km) ! sedimentary denitrification (nmol N/cm^3/sec) + real (r8) :: other_remin(domain%km) ! organic C remin not due oxic or denitrif (nmolC/cm^3/sec) + real (r8) :: Tfunc(domain%km) ++ real (r8) :: Tfunc_cocco(domain%km) + real (r8) :: Fe_scavenge_rate(domain%km) ! annual scavenging rate of iron as % of ambient + real (r8) :: Fe_scavenge(domain%km) ! loss of dissolved iron, scavenging (mmol Fe/m^3/sec) + real (r8) :: Lig_scavenge(domain%km) ! loss of Fe-binding Ligand from scavenging (mmol Fe/m^3/sec) +@@ -650,18 +652,18 @@ contains + autotrophs, autotroph_local(:, k), tracer_local(:, k), & + marbl_tracer_indices, autotroph_secondary_species(:, k)) + +- call marbl_compute_function_scaling(temperature(k), Tfunc(k)) ++ call marbl_compute_function_scaling(temperature(k), Tfunc(k), Tfunc_cocco(k)) + + call marbl_compute_Pprime(k, domain, autotroph_cnt, autotrophs, & + autotroph_local(:, k), temperature(k), autotroph_secondary_species(:, k)) + + call marbl_compute_autotroph_uptake(autotroph_cnt, autotrophs, & + tracer_local(:, k), marbl_tracer_indices, & +- autotroph_secondary_species(:, k)) ++ autotroph_secondary_species(:, k), carbonate(k)) + + call marbl_compute_autotroph_photosynthesis(autotroph_cnt, & + num_PAR_subcols, autotrophs, autotroph_local(:, k), & +- temperature(k), Tfunc(k), PAR%col_frac(:), & ++ temperature(k), Tfunc(k), Tfunc_cocco(k), PAR%col_frac(:), & + PAR%avg(k,:), autotroph_secondary_species(:, k)) + + call marbl_compute_autotroph_phyto_diatoms (autotroph_cnt, & +@@ -670,20 +672,20 @@ contains + + call marbl_compute_autotroph_calcification(autotroph_cnt, & + autotrophs, autotroph_local(:, k), temperature(k), & +- autotroph_secondary_species(:, k)) ++ autotroph_secondary_species(:, k), carbonate(k)) + + call marbl_compute_autotroph_nfixation(autotroph_cnt, autotrophs, & + autotroph_secondary_species(:, k)) + + call marbl_compute_autotroph_loss(autotroph_cnt, autotrophs, & +- Tfunc(k), autotroph_secondary_species(:, k)) ++ Tfunc(k), Tfunc_cocco(k), autotroph_secondary_species(:, k)) + + call marbl_compute_Zprime(k, domain, & + zooplankton_cnt, zooplankton, zooplankton_local(:, k)%C, & + Tfunc(k), zooplankton_secondary_species(:, k)) + + call marbl_compute_grazing (autotroph_cnt, zooplankton_cnt, & +- max_grazer_prey_cnt, autotrophs, Tfunc(k), zooplankton_local(:, k), & ++ max_grazer_prey_cnt, autotrophs, Tfunc(k), Tfunc_cocco(k), zooplankton_local(:, k), & + zooplankton_secondary_species(:, k), & + autotroph_secondary_species(:, k)) + +@@ -2282,7 +2284,7 @@ contains + + ! autotroph consistency check + call marbl_consistency_check_autotrophs(autotroph_cnt, column_kmt, & +- marbl_tracer_indices, autotroph_local(:,1:column_kmt)) ++ marbl_tracer_indices, autotrophs, autotroph_local(:,1:column_kmt)) + + ! set totalChl_local + totalChl_local = sum(autotroph_local(:,:)%Chl, dim=1) +@@ -2292,7 +2294,7 @@ contains + !*********************************************************************** + + subroutine marbl_consistency_check_autotrophs(auto_cnt, column_kmt, & +- marbl_tracer_indices, autotroph_local) ++ marbl_tracer_indices, autotrophs, autotroph_local) + + !----------------------------------------------------------------------- + ! If any phyto box are zero, set others to zeros. +@@ -2303,6 +2305,7 @@ contains + integer(int_kind) , intent(in) :: auto_cnt ! autotroph_cnt + integer(int_kind) , intent(in) :: column_kmt ! number of active model layers + type(marbl_tracer_index_type) , intent(in) :: marbl_tracer_indices ++ type(autotroph_type) , intent(in) :: autotrophs(:) + type(autotroph_local_type) , intent(inout) :: autotroph_local(autotroph_cnt, column_kmt) + + !----------------------------------------------------------------------- +@@ -2372,6 +2375,7 @@ contains + !----------------------------------------------------------------------- + real :: cks ! constant used in quota modification + real :: cksi ! constant used in Si quota modification ++ real(r8) :: QCaCO3_max_loc + integer(int_kind) :: auto_ind + !----------------------------------------------------------------------- + +@@ -2468,9 +2472,16 @@ contains + !----------------------------------------------------------------------- + + if (marbl_tracer_indices%auto_inds(auto_ind)%CaCO3_ind > 0) then ++ !set a local variable to the correct QCaCO3 max based on whether implicit or explicit ++ if (autotrophs(auto_ind)%imp_calcifier) then ++ QCaCO3_max_loc = QCaCO3_max ++ else ++ QCaCO3_max_loc = QCaCO3_max_exp ++ end if ++ + QCaCO3(auto_ind) = auto_CaCO3(auto_ind) / (auto_C(auto_ind) + epsC) +- if (QCaCO3(auto_ind) > QCaCO3_max) then +- QCaCO3(auto_ind) = QCaCO3_max ++ if (QCaCO3(auto_ind) > QCaCO3_max_loc) then ++ QCaCO3(auto_ind) = QCaCO3_max_loc + end if + end if + end do +@@ -2736,7 +2747,7 @@ contains + + !*********************************************************************** + +- subroutine marbl_compute_function_scaling(temperature, Tfunc) ++ subroutine marbl_compute_function_scaling(temperature, Tfunc, Tfunc_cocco ) + + !----------------------------------------------------------------------- + ! Tref = 30.0 reference temperature (degC) +@@ -2750,9 +2761,18 @@ contains + + real(r8), intent(in) :: temperature + real(r8), intent(out) :: Tfunc ++ real(r8), intent(out) :: Tfunc_cocco + + Tfunc = Q_10**(((temperature + T0_Kelvin) - (Tref + T0_Kelvin)) / c10) + ++ ++ ++!Tfunc_cocco = Tfunc !Q_10**(((column_temperature + T0_Kelvin) - (Tref + T0_Kelvin)) / c10) ++!Tfunc_cocco = 0.085 * ((column_temperature)**(0.53)) ++!Tfunc_cocco = max(0.158, 0.12 * ((column_temperature)**(0.4))) ++Tfunc_cocco = 0.12_r8 * (max(0.0_r8, min(temperature,27.0_r8))**(0.4_r8)) ++!Tfunc_cocco = 1.8**(((column_temperature + T0_Kelvin) - (33.0 + T0_Kelvin)) / c10) ++ + end subroutine marbl_compute_function_scaling + + !*********************************************************************** +@@ -2865,14 +2885,14 @@ contains + !*********************************************************************** + + subroutine marbl_compute_autotroph_uptake (auto_cnt, autotrophs, & +- tracer_local, marbl_tracer_indices, autotroph_secondary_species) ++ tracer_local, marbl_tracer_indices, autotroph_secondary_species, carbonate) + + integer(int_kind) , intent(in) :: auto_cnt + type(autotroph_type) , intent(in) :: autotrophs(:) + real(r8) , intent(in) :: tracer_local(:) + type(marbl_tracer_index_type) , intent(in) :: marbl_tracer_indices + type(autotroph_secondary_species_type) , intent(out) :: autotroph_secondary_species(:) +- ++ type(carbonate_type) , intent(in) :: carbonate + !----------------------------------------------------------------------- + ! local variables + !----------------------------------------------------------------------- +@@ -2894,6 +2914,7 @@ contains + PO4_loc => tracer_local(marbl_tracer_indices%po4_ind), & + Fe_loc => tracer_local(marbl_tracer_indices%fe_ind), & + SiO3_loc => tracer_local(marbl_tracer_indices%sio3_ind), & ++ CO2_loc => carbonate%H2CO3, & ! input + ! OUTPUTS + VNO3 => autotroph_secondary_species(auto_ind)%VNO3, & + VNH4 => autotroph_secondary_species(auto_ind)%VNH4, & +@@ -2904,15 +2925,19 @@ contains + VPO4 => autotroph_secondary_species(auto_ind)%VPO4, & + VPtot => autotroph_secondary_species(auto_ind)%VPtot, & + VSiO3 => autotroph_secondary_species(auto_ind)%VSiO3, & ++ VCO2 => autotroph_secondary_species(auto_ind)%VCO2, & + ! AUTOTROPHS + Nfixer => autotrophs(auto_ind)%Nfixer, & + silicifier => autotrophs(auto_ind)%silicifier, & ++ imp_calcifier => autotrophs(auto_ind)%imp_calcifier, & ++ exp_calcifier => autotrophs(auto_ind)%exp_calcifier, & + kNO3 => autotrophs(auto_ind)%kNO3, & + kNH4 => autotrophs(auto_ind)%kNH4, & + kFe => autotrophs(auto_ind)%kFe, & + kPO4 => autotrophs(auto_ind)%kPO4, & + kDOP => autotrophs(auto_ind)%kDOP, & +- kSiO3 => autotrophs(auto_ind)%kSiO3 & ++ kSiO3 => autotrophs(auto_ind)%kSiO3, & ++ kCO2 => autotrophs(auto_ind)%kCO2 & + ) + + VNO3 = (NO3_loc / kNO3) / (c1 + (NO3_loc / kNO3) + (NH4_loc / kNH4)) +@@ -2932,12 +2957,22 @@ contains + VSiO3 = SiO3_loc / (SiO3_loc + kSiO3) + endif + ++ if (exp_calcifier) then ++ VCO2 = CO2_loc / (CO2_loc + kCO2) ++ endif ++ + f_nut = min(VNtot, VFe) + f_nut = min(f_nut, VPtot) + if (silicifier) then + f_nut = min(f_nut, VSiO3) + endif + ++ if (exp_calcifier) then ++ f_nut = min(f_nut, VCO2) ++ end if ++ ++ ++ + end associate + + end do +@@ -2947,7 +2982,7 @@ contains + !*********************************************************************** + + subroutine marbl_compute_autotroph_photosynthesis (auto_cnt, PAR_nsubcols, & +- autotrophs, autotroph_loc, temperature, Tfunc, PAR_col_frac, PAR_avg, & ++ autotrophs, autotroph_loc, temperature, Tfunc, Tfunc_cocco, PAR_col_frac, PAR_avg, & + autotroph_secondary_species) + + !----------------------------------------------------------------------- +@@ -2962,6 +2997,7 @@ contains + type(autotroph_local_type) , intent(in) :: autotroph_loc(auto_cnt) + real(r8) , intent(in) :: temperature + real(r8) , intent(in) :: Tfunc ++ real(r8) , intent(in) :: Tfunc_cocco + real(r8) , intent(in) :: PAR_col_frac(PAR_nsubcols) + real(r8) , intent(in) :: PAR_avg(PAR_nsubcols) + type(autotroph_secondary_species_type) , intent(inout) :: autotroph_secondary_species(auto_cnt) +@@ -2991,8 +3027,13 @@ contains + PCref => autotrophs(auto_ind)%PCref, & + alphaPI => autotrophs(auto_ind)%alphaPI & + ) ++ ++ if (autotrophs(auto_ind)%exp_calcifier) then ++ PCmax = PCref * f_nut * Tfunc_cocco ++ else ++ PCmax = PCref * f_nut * Tfunc ++ end if + +- PCmax = PCref * f_nut * Tfunc + if (temperature < autotrophs(auto_ind)%temp_thres) then + PCmax = c0 + end if +@@ -3111,7 +3152,7 @@ contains + !*********************************************************************** + + subroutine marbl_compute_autotroph_calcification (auto_cnt, autotrophs, & +- autotroph_loc, temperature, autotroph_secondary_species) ++ autotroph_loc, temperature, autotroph_secondary_species, carbonate) + + !----------------------------------------------------------------------- + ! CaCO3 Production, parameterized as function of small phyto production +@@ -3131,17 +3172,20 @@ contains + type(autotroph_local_type) , intent(in) :: autotroph_loc(auto_cnt) + real(r8) , intent(in) :: temperature + type(autotroph_secondary_species_type) , intent(inout) :: autotroph_secondary_species(auto_cnt) +- ++ type(carbonate_type) , intent(in) :: carbonate + !----------------------------------------------------------------------- + ! local variables + !----------------------------------------------------------------------- + integer :: auto_ind ++ real(r8) :: picpoc + !----------------------------------------------------------------------- + + associate( & + f_nut => autotroph_secondary_species(:)%f_nut, & ! input + photoC => autotroph_secondary_species(:)%photoC, & ! input +- CaCO3_form => autotroph_secondary_species(:)%CaCO3_form & ! output ++ CaCO3_form => autotroph_secondary_species(:)%CaCO3_form, & ! output ++ Plim => autotroph_secondary_species(:)%VPO4, & ! input ++ CO2 => carbonate%H2CO3 & ! input + ) + + do auto_ind = 1, auto_cnt +@@ -3158,6 +3202,27 @@ contains + CaCO3_form(auto_ind) = min((CaCO3_form(auto_ind) * autotroph_loc(auto_ind)%C / CaCO3_sp_thres), & + (f_photosp_CaCO3 * photoC(auto_ind))) + end if ++ ++ else if(autotrophs(auto_ind)%exp_calcifier) then ++ ++ !first calculate PIC/POC in coccolithophore biomass---------- ++ ++ !temperature effect ++ if (temperature < 11.) then ++ picpoc = max(0.,0.104 * temperature - 0.108) ++ else ++ picpoc = 1. ++ end if ++ ++ !CO2 effect ++ picpoc = max(0.,-0.0136 * CO2 + picpoc + 0.21) ++ ++ !nut lim effect (maybe just making this for P-limited areas? if (Plim(auto_ind) == f_nut(auto_ind) then..) ++ picpoc = max(0.,-0.48 * Plim(auto_ind) + picpoc + 0.48) ++ ++ !multiply cocco growth rate by picpoc to get CaCO3 formation ++ ++ CaCO3_form(auto_ind) = picpoc * photoC(auto_ind) + end if + end do + +@@ -3210,7 +3275,7 @@ contains + !*********************************************************************** + + subroutine marbl_compute_autotroph_loss (auto_cnt, autotrophs, Tfunc, & +- autotroph_secondary_species) ++ Tfunc_cocco, autotroph_secondary_species) + + !----------------------------------------------------------------------- + ! Compute autotroph-loss, autotroph aggregation loss and routine of +@@ -3220,6 +3285,7 @@ contains + integer(int_kind) , intent(in) :: auto_cnt + type(autotroph_type) , intent(in) :: autotrophs(auto_cnt) + real(r8) , intent(in) :: Tfunc ++ real(r8) , intent(in) :: Tfunc_cocco + type(autotroph_secondary_species_type) , intent(inout) :: autotroph_secondary_species(auto_cnt) + + !----------------------------------------------------------------------- +@@ -3244,7 +3310,11 @@ contains + ! autotroph agg loss + !----------------------------------------------------------------------- + +- auto_loss(auto_ind) = autotrophs(auto_ind)%mort * Pprime(auto_ind) * Tfunc ++ if (autotrophs(auto_ind)%exp_calcifier) then ++ auto_loss(auto_ind) = autotrophs(auto_ind)%mort * Pprime(auto_ind) * Tfunc_cocco ++ else ++ auto_loss(auto_ind) = autotrophs(auto_ind)%mort * Pprime(auto_ind) * Tfunc ++ end if + + auto_agg(auto_ind) = min((autotrophs(auto_ind)%agg_rate_max * dps) * Pprime(auto_ind), & + autotrophs(auto_ind)%mort2 * Pprime(auto_ind)**1.75_r8) +@@ -3256,7 +3326,7 @@ contains + ! min.%C routed from sp_loss = 0.59 * QCaCO3, or P_CaCO3%rho + !----------------------------------------------------------------------- + +- if (autotrophs(auto_ind)%imp_calcifier) then ++ if (autotrophs(auto_ind)%imp_calcifier .or. autotrophs(auto_ind)%exp_calcifier) then + auto_loss_poc(auto_ind) = QCaCO3(auto_ind) * auto_loss(auto_ind) + else + auto_loss_poc(auto_ind) = autotrophs(auto_ind)%loss_poc * auto_loss(auto_ind) +@@ -3271,7 +3341,7 @@ contains + !*********************************************************************** + + subroutine marbl_compute_grazing (auto_cnt, zoo_cnt, max_grazer_prey_cnt, & +- autotrophs, Tfunc, zooplankton_loc, & ++ autotrophs, Tfunc, Tfunc_cocco, zooplankton_loc, & + zooplankton_secondary_species, autotroph_secondary_species) + + !----------------------------------------------------------------------- +@@ -3296,6 +3366,7 @@ contains + integer(int_kind) , intent(in) :: max_grazer_prey_cnt + type(autotroph_type) , intent(in) :: autotrophs(auto_cnt) + real(r8) , intent(in) :: Tfunc ++ real(r8) , intent(in) :: Tfunc_cocco + type(zooplankton_local_type) , intent(in) :: zooplankton_loc(zoo_cnt) + type(zooplankton_secondary_species_type) , intent(inout) :: zooplankton_secondary_species(zoo_cnt) + type(autotroph_secondary_species_type) , intent(inout) :: autotroph_secondary_species(auto_cnt) +@@ -3370,8 +3441,13 @@ contains + case (grz_fnc_michaelis_menten) + + if (work1 > c0) then +- graze_rate = grazing(prey_ind, pred_ind)%z_umax_0 * Tfunc * zooplankton_loc(pred_ind)%C & ++ if (autotrophs(auto_ind)%exp_calcifier) then ++ graze_rate = grazing(prey_ind, pred_ind)%z_umax_0 * Tfunc * zooplankton_loc(pred_ind)%C & ++ * ( work1 / (work1 + grazing(prey_ind, pred_ind)%z_grz) ) ++ else ++ graze_rate = grazing(prey_ind, pred_ind)%z_umax_0 * Tfunc * zooplankton_loc(pred_ind)%C & + * ( work1 / (work1 + grazing(prey_ind, pred_ind)%z_grz) ) ++ end if + else + graze_rate = c0 + end if +@@ -3407,7 +3483,7 @@ contains + x_graze_zoo(pred_ind) = x_graze_zoo(pred_ind) + grazing(prey_ind, pred_ind)%graze_zoo * work2 + + ! routed to POC +- if (autotrophs(auto_ind)%imp_calcifier) then ++ if (autotrophs(auto_ind)%imp_calcifier .or. autotrophs(auto_ind)%exp_calcifier) then + auto_graze_poc(auto_ind) = auto_graze_poc(auto_ind) & + + work2 * max((caco3_poc_min * QCaCO3(auto_ind)), & + min(spc_poc_fac * (Pprime(auto_ind)+0.6_r8)**1.6_r8, & diff --git a/tests/regression_tests/gen_input_file/marbl_input.gen b/tests/regression_tests/gen_input_file/marbl_input.gen new file mode 100644 index 00000000..4a434079 --- /dev/null +++ b/tests/regression_tests/gen_input_file/marbl_input.gen @@ -0,0 +1,221 @@ +PFT_defaults = 'CESM2' +ciso_on = F +lsource_sink = T +lecovars_full_depth_tavg = F +ciso_lsource_sink = T +ciso_lecovars_full_depth_tavg = F +lflux_gas_o2 = T +lflux_gas_co2 = T +lcompute_nhx_surface_emis = T +lvariable_PtoC = T +ladjust_bury_coeff = F +lo2_consumption_scalef = F +lp_remin_scalef = F +init_bury_coeff_opt = 'settings_file' +particulate_flux_ref_depth = 100 +Jint_Ctot_thres_molpm2pyr = 0.10000000000000001E-08 +gQsi_0 = 0.13700000000000001E+00 +gQsi_max = 0.82199999999999995E+00 +gQsi_min = 0.45699999999999998E-01 +gQ_Fe_kFe_thres = 0.10000000000000000E+02 +gQ_Si_kSi_thres = 0.60000000000000000E+01 +parm_Fe_bioavail = 0.10000000000000000E+01 +parm_o2_min = 0.50000000000000000E+01 +parm_o2_min_delta = 0.50000000000000000E+01 +parm_kappa_nitrif_per_day = 0.59999999999999998E-01 +parm_nitrif_par_lim = 0.10000000000000000E+01 +parm_labile_ratio = 0.93999999999999995E+00 +parm_init_POC_bury_coeff = 0.25400000000000000E+01 +parm_init_POP_bury_coeff = 0.35999999999999999E+00 +parm_init_bSi_bury_coeff = 0.15300000000000000E+01 +parm_Fe_scavenge_rate0 = 0.22000000000000000E+02 +parm_Lig_scavenge_rate0 = 0.14999999999999999E-01 +parm_FeLig_scavenge_rate0 = 0.12000000000000000E+01 +parm_Lig_degrade_rate0 = 0.93999999999999994E-04 +parm_Fe_desorption_rate0 = 0.99999999999999995E-06 +parm_f_prod_sp_CaCO3 = 0.70000000000000007E-01 +parm_POC_diss = 0.10000000000000000E+05 +parm_SiO2_diss = 0.65000000000000000E+05 +parm_SiO2_gamma = 0.00000000000000000E+00 +parm_hPOC_SiO2_ratio = 0.10000000000000000E-01 +parm_CaCO3_diss = 0.50000000000000000E+05 +parm_CaCO3_gamma = 0.20000000000000000E-01 +parm_hPOC_CaCO3_ratio = 0.10000000000000000E-01 +parm_hPOC_dust_ratio = 0.10000000000000000E-01 +o2_sf_o2_range_hi = 0.45000000000000000E+02 +o2_sf_o2_range_lo = 0.50000000000000000E+01 +o2_sf_val_lo_o2 = 0.26000000000000001E+01 +parm_sed_denitrif_coeff = 0.10000000000000000E+01 +bury_coeff_rmean_timescale_years = 0.10000000000000000E+02 +parm_scalelen_z(1) = 0.10000000000000000E+05 +parm_scalelen_z(2) = 0.25000000000000000E+05 +parm_scalelen_z(3) = 0.50000000000000000E+05 +parm_scalelen_z(4) = 0.10000000000000000E+06 +parm_scalelen_vals(1) = 0.10000000000000000E+01 +parm_scalelen_vals(2) = 0.36000000000000001E+01 +parm_scalelen_vals(3) = 0.47000000000000002E+01 +parm_scalelen_vals(4) = 0.47999999999999998E+01 +caco3_bury_thres_opt = 'omega_calc' +caco3_bury_thres_depth = 0.30000000000000000E+06 +caco3_bury_thres_omega_calc = 0.89000000000000001E+00 +PON_bury_coeff = 0.50000000000000000E+00 +POM_bury_frac_max = 0.80000000000000004E+00 +bSi_bury_frac_max = 0.10000000000000000E+01 +ciso_fract_factors = 'Laws' +autotroph_cnt = 3 +zooplankton_cnt = 1 +max_grazer_prey_cnt = 3 +autotroph_settings(1)%sname = 'sp' +autotroph_settings(1)%lname = 'Small Phyto' +autotroph_settings(1)%Nfixer = F +autotroph_settings(1)%imp_calcifier = T +autotroph_settings(1)%exp_calcifier = F +autotroph_settings(1)%silicifier = F +autotroph_settings(1)%kFe = 0.30000000000000001E-04 +autotroph_settings(1)%kPO4 = 0.10000000000000000E-01 +autotroph_settings(1)%kDOP = 0.29999999999999999E+00 +autotroph_settings(1)%kNO3 = 0.25000000000000000E+00 +autotroph_settings(1)%kNH4 = 0.10000000000000000E-01 +autotroph_settings(1)%kSiO3 = 0.00000000000000000E+00 +autotroph_settings(1)%kCO2 = 0.00000000000000000E+00 +autotroph_settings(1)%Qp_fixed = 0.85470085470085479E-02 +autotroph_settings(1)%gQfe_0 = 0.30000000000000001E-04 +autotroph_settings(1)%gQfe_min = 0.25000000000000002E-05 +autotroph_settings(1)%alphaPi_per_day = 0.39000000000000001E+00 +autotroph_settings(1)%PCref_per_day = 0.50000000000000000E+01 +autotroph_settings(1)%thetaN_max = 0.25000000000000000E+01 +autotroph_settings(1)%loss_thres = 0.10000000000000000E-01 +autotroph_settings(1)%loss_thres2 = 0.00000000000000000E+00 +autotroph_settings(1)%temp_thres = -0.10000000000000000E+02 +autotroph_settings(1)%mort_per_day = 0.10000000000000001E+00 +autotroph_settings(1)%mort2_per_day = 0.10000000000000000E-01 +autotroph_settings(1)%agg_rate_max = 0.50000000000000000E+00 +autotroph_settings(1)%agg_rate_min = 0.10000000000000000E-01 +autotroph_settings(1)%loss_poc = 0.00000000000000000E+00 +autotroph_settings(2)%sname = 'diat' +autotroph_settings(2)%lname = 'Diatom' +autotroph_settings(2)%Nfixer = F +autotroph_settings(2)%imp_calcifier = F +autotroph_settings(2)%exp_calcifier = F +autotroph_settings(2)%silicifier = T +autotroph_settings(2)%kFe = 0.69999999999999994E-04 +autotroph_settings(2)%kPO4 = 0.50000000000000003E-01 +autotroph_settings(2)%kDOP = 0.50000000000000000E+00 +autotroph_settings(2)%kNO3 = 0.50000000000000000E+00 +autotroph_settings(2)%kNH4 = 0.50000000000000003E-01 +autotroph_settings(2)%kSiO3 = 0.69999999999999996E+00 +autotroph_settings(2)%kCO2 = 0.00000000000000000E+00 +autotroph_settings(2)%Qp_fixed = 0.85470085470085479E-02 +autotroph_settings(2)%gQfe_0 = 0.30000000000000001E-04 +autotroph_settings(2)%gQfe_min = 0.25000000000000002E-05 +autotroph_settings(2)%alphaPi_per_day = 0.28000000000000003E+00 +autotroph_settings(2)%PCref_per_day = 0.50000000000000000E+01 +autotroph_settings(2)%thetaN_max = 0.40000000000000000E+01 +autotroph_settings(2)%loss_thres = 0.20000000000000000E-01 +autotroph_settings(2)%loss_thres2 = 0.00000000000000000E+00 +autotroph_settings(2)%temp_thres = -0.10000000000000000E+02 +autotroph_settings(2)%mort_per_day = 0.10000000000000001E+00 +autotroph_settings(2)%mort2_per_day = 0.10000000000000000E-01 +autotroph_settings(2)%agg_rate_max = 0.50000000000000000E+00 +autotroph_settings(2)%agg_rate_min = 0.20000000000000000E-01 +autotroph_settings(2)%loss_poc = 0.00000000000000000E+00 +autotroph_settings(3)%sname = 'diaz' +autotroph_settings(3)%lname = 'Diazotroph' +autotroph_settings(3)%Nfixer = T +autotroph_settings(3)%imp_calcifier = F +autotroph_settings(3)%exp_calcifier = F +autotroph_settings(3)%silicifier = F +autotroph_settings(3)%kFe = 0.45000000000000003E-04 +autotroph_settings(3)%kPO4 = 0.14999999999999999E-01 +autotroph_settings(3)%kDOP = 0.74999999999999997E-01 +autotroph_settings(3)%kNO3 = 0.20000000000000000E+01 +autotroph_settings(3)%kNH4 = 0.20000000000000001E+00 +autotroph_settings(3)%kSiO3 = 0.00000000000000000E+00 +autotroph_settings(3)%kCO2 = 0.00000000000000000E+00 +autotroph_settings(3)%Qp_fixed = 0.27350427350427355E-02 +autotroph_settings(3)%gQfe_0 = 0.60000000000000002E-04 +autotroph_settings(3)%gQfe_min = 0.25000000000000002E-05 +autotroph_settings(3)%alphaPi_per_day = 0.39000000000000001E+00 +autotroph_settings(3)%PCref_per_day = 0.25000000000000000E+01 +autotroph_settings(3)%thetaN_max = 0.25000000000000000E+01 +autotroph_settings(3)%loss_thres = 0.20000000000000000E-01 +autotroph_settings(3)%loss_thres2 = 0.10000000000000000E-02 +autotroph_settings(3)%temp_thres = 0.15000000000000000E+02 +autotroph_settings(3)%mort_per_day = 0.10000000000000001E+00 +autotroph_settings(3)%mort2_per_day = 0.10000000000000000E-01 +autotroph_settings(3)%agg_rate_max = 0.50000000000000000E+00 +autotroph_settings(3)%agg_rate_min = 0.10000000000000000E-01 +autotroph_settings(3)%loss_poc = 0.00000000000000000E+00 +zooplankton_settings(1)%sname = 'zoo' +zooplankton_settings(1)%lname = 'Zooplankton' +zooplankton_settings(1)%z_mort_0_per_day = 0.10000000000000001E+00 +zooplankton_settings(1)%loss_thres = 0.74999999999999997E-01 +zooplankton_settings(1)%z_mort2_0_per_day = 0.40000000000000002E+00 +grazing_relationship_settings(1,1)%sname = 'grz_sp_zoo' +grazing_relationship_settings(1,1)%lname = 'Grazing of sp by zoo' +grazing_relationship_settings(1,1)%auto_ind_cnt = 1 +grazing_relationship_settings(1,1)%zoo_ind_cnt = 0 +grazing_relationship_settings(1,1)%grazing_function = 1 +grazing_relationship_settings(1,1)%z_umax_0_per_day = 0.32999999999999998E+01 +grazing_relationship_settings(1,1)%z_grz = 0.12000000000000000E+01 +grazing_relationship_settings(1,1)%graze_zoo = 0.29999999999999999E+00 +grazing_relationship_settings(1,1)%graze_poc = 0.00000000000000000E+00 +grazing_relationship_settings(1,1)%graze_doc = 0.59999999999999998E-01 +grazing_relationship_settings(1,1)%f_zoo_detr = 0.12000000000000000E+00 +grazing_relationship_settings(1,1)%auto_ind(1) = 1 +grazing_relationship_settings(2,1)%sname = 'grz_diat_zoo' +grazing_relationship_settings(2,1)%lname = 'Grazing of diat by zoo' +grazing_relationship_settings(2,1)%auto_ind_cnt = 1 +grazing_relationship_settings(2,1)%zoo_ind_cnt = 0 +grazing_relationship_settings(2,1)%grazing_function = 1 +grazing_relationship_settings(2,1)%z_umax_0_per_day = 0.31499999999999999E+01 +grazing_relationship_settings(2,1)%z_grz = 0.12000000000000000E+01 +grazing_relationship_settings(2,1)%graze_zoo = 0.25000000000000000E+00 +grazing_relationship_settings(2,1)%graze_poc = 0.39000000000000001E+00 +grazing_relationship_settings(2,1)%graze_doc = 0.59999999999999998E-01 +grazing_relationship_settings(2,1)%f_zoo_detr = 0.23999999999999999E+00 +grazing_relationship_settings(2,1)%auto_ind(1) = 2 +grazing_relationship_settings(3,1)%sname = 'grz_diaz_zoo' +grazing_relationship_settings(3,1)%lname = 'Grazing of diaz by zoo' +grazing_relationship_settings(3,1)%auto_ind_cnt = 1 +grazing_relationship_settings(3,1)%zoo_ind_cnt = 0 +grazing_relationship_settings(3,1)%grazing_function = 1 +grazing_relationship_settings(3,1)%z_umax_0_per_day = 0.32999999999999998E+01 +grazing_relationship_settings(3,1)%z_grz = 0.12000000000000000E+01 +grazing_relationship_settings(3,1)%graze_zoo = 0.29999999999999999E+00 +grazing_relationship_settings(3,1)%graze_poc = 0.10000000000000001E+00 +grazing_relationship_settings(3,1)%graze_doc = 0.59999999999999998E-01 +grazing_relationship_settings(3,1)%f_zoo_detr = 0.12000000000000000E+00 +grazing_relationship_settings(3,1)%auto_ind(1) = 3 +tracer_restore_vars(1) = '' +tracer_restore_vars(2) = '' +tracer_restore_vars(3) = '' +tracer_restore_vars(4) = '' +tracer_restore_vars(5) = '' +tracer_restore_vars(6) = '' +tracer_restore_vars(7) = '' +tracer_restore_vars(8) = '' +tracer_restore_vars(9) = '' +tracer_restore_vars(10) = '' +tracer_restore_vars(11) = '' +tracer_restore_vars(12) = '' +tracer_restore_vars(13) = '' +tracer_restore_vars(14) = '' +tracer_restore_vars(15) = '' +tracer_restore_vars(16) = '' +tracer_restore_vars(17) = '' +tracer_restore_vars(18) = '' +tracer_restore_vars(19) = '' +tracer_restore_vars(20) = '' +tracer_restore_vars(21) = '' +tracer_restore_vars(22) = '' +tracer_restore_vars(23) = '' +tracer_restore_vars(24) = '' +tracer_restore_vars(25) = '' +tracer_restore_vars(26) = '' +tracer_restore_vars(27) = '' +tracer_restore_vars(28) = '' +tracer_restore_vars(29) = '' +tracer_restore_vars(30) = '' +tracer_restore_vars(31) = '' +tracer_restore_vars(32) = '' diff --git a/tests/regression_tests/gen_settings_file/marbl_settings.user_nl_marbl b/tests/regression_tests/gen_settings_file/marbl_settings.user_nl_marbl new file mode 100644 index 00000000..bdc26d33 --- /dev/null +++ b/tests/regression_tests/gen_settings_file/marbl_settings.user_nl_marbl @@ -0,0 +1,336 @@ +PFT_defaults = 'user-specified' +ciso_on = F +lsource_sink = T +lecovars_full_depth_tavg = F +ciso_lsource_sink = T +lflux_gas_o2 = T +lflux_gas_co2 = T +lcompute_nhx_surface_emis = T +lvariable_PtoC = T +ladjust_bury_coeff = F +lo2_consumption_scalef = F +lp_remin_scalef = F +init_bury_coeff_opt = 'settings_file' +particulate_flux_ref_depth = 100 +Jint_Ctot_thres_molpm2pyr = 0.10000000000000001E-08 +gQsi_0 = 0.13700000000000001E+00 +gQsi_max = 0.82199999999999995E+00 +gQsi_min = 0.45699999999999998E-01 +gQ_Fe_kFe_thres = 0.10000000000000000E+02 +gQ_Si_kSi_thres = 0.60000000000000000E+01 +parm_Fe_bioavail = 0.10000000000000000E+01 +parm_o2_min = 0.50000000000000000E+01 +parm_o2_min_delta = 0.50000000000000000E+01 +parm_kappa_nitrif_per_day = 0.59999999999999998E-01 +parm_nitrif_par_lim = 0.10000000000000000E+01 +parm_labile_ratio = 0.93999999999999995E+00 +parm_init_POC_bury_coeff = 0.25400000000000000E+01 +parm_init_POP_bury_coeff = 0.35999999999999999E+00 +parm_init_bSi_bury_coeff = 0.15300000000000000E+01 +parm_Fe_scavenge_rate0 = 0.22000000000000000E+02 +parm_Lig_scavenge_rate0 = 0.14999999999999999E-01 +parm_FeLig_scavenge_rate0 = 0.12000000000000000E+01 +parm_Lig_degrade_rate0 = 0.93999999999999994E-04 +parm_Fe_desorption_rate0 = 0.99999999999999995E-06 +parm_f_prod_sp_CaCO3 = 0.70000000000000007E-01 +parm_POC_diss = 0.10000000000000000E+05 +parm_SiO2_diss = 0.65000000000000000E+05 +parm_SiO2_gamma = 0.00000000000000000E+00 +parm_hPOC_SiO2_ratio = 0.10000000000000000E-01 +parm_CaCO3_diss = 0.50000000000000000E+05 +parm_CaCO3_gamma = 0.20000000000000000E-01 +parm_hPOC_CaCO3_ratio = 0.10000000000000000E-01 +parm_hPOC_dust_ratio = 0.10000000000000000E-01 +o2_sf_o2_range_hi = 0.45000000000000000E+02 +o2_sf_o2_range_lo = 0.50000000000000000E+01 +o2_sf_val_lo_o2 = 0.26000000000000001E+01 +parm_sed_denitrif_coeff = 0.10000000000000000E+01 +bury_coeff_rmean_timescale_years = 0.10000000000000000E+02 +parm_scalelen_z(1) = 0.10000000000000000E+05 +parm_scalelen_z(2) = 0.25000000000000000E+05 +parm_scalelen_z(3) = 0.50000000000000000E+05 +parm_scalelen_z(4) = 0.10000000000000000E+06 +parm_scalelen_vals(1) = 0.10000000000000000E+01 +parm_scalelen_vals(2) = 0.36000000000000001E+01 +parm_scalelen_vals(3) = 0.47000000000000002E+01 +parm_scalelen_vals(4) = 0.47999999999999998E+01 +caco3_bury_thres_opt = 'omega_calc' +caco3_bury_thres_depth = 0.30000000000000000E+06 +caco3_bury_thres_omega_calc = 0.89000000000000001E+00 +PON_bury_coeff = 0.50000000000000000E+00 +POM_bury_frac_max = 0.80000000000000004E+00 +bSi_bury_frac_max = 0.10000000000000000E+01 +ciso_fract_factors = 'Laws' +auto_mort2_exp = 0.17500000000000000E+01 +zoo_mort2_exp = 0.20000000000000000E+01 +QCaCO3_max = 0.10000000000000000E+01 +f_graze_CaCO3_remin = 0.50000000000000000E+00 +autotroph_cnt = 4 +zooplankton_cnt = 2 +max_grazer_prey_cnt = 4 +autotroph_settings(1)%sname = 'sp' +autotroph_settings(1)%lname = 'Small Phyto' +autotroph_settings(1)%temp_func_form_opt = 'q_10' +autotroph_settings(1)%Nfixer = F +autotroph_settings(1)%imp_calcifier = F +autotroph_settings(1)%exp_calcifier = F +autotroph_settings(1)%silicifier = F +autotroph_settings(1)%is_carbon_limited = F +autotroph_settings(1)%kFe = 0.30000000000000001E-04 +autotroph_settings(1)%kPO4 = 0.10000000000000000E-01 +autotroph_settings(1)%kDOP = 0.29999999999999999E+00 +autotroph_settings(1)%kNO3 = 0.20000000000000001E+00 +autotroph_settings(1)%kNH4 = 0.10000000000000000E-01 +autotroph_settings(1)%kSiO3 = 0.00000000000000000E+00 +autotroph_settings(1)%kCO2 = 0.00000000000000000E+00 +autotroph_settings(1)%Qp_fixed = 0.85470085470085479E-02 +autotroph_settings(1)%gQfe_0 = 0.30000000000000001E-04 +autotroph_settings(1)%gQfe_min = 0.25000000000000002E-05 +autotroph_settings(1)%alphaPI_per_day = 0.34999999999999998E+00 +autotroph_settings(1)%PCref_per_day = 0.47999999999999998E+01 +autotroph_settings(1)%thetaN_max = 0.25000000000000000E+01 +autotroph_settings(1)%loss_thres = 0.10000000000000000E-01 +autotroph_settings(1)%loss_thres2 = 0.00000000000000000E+00 +autotroph_settings(1)%temp_thres = -0.10000000000000000E+02 +autotroph_settings(1)%mort_per_day = 0.10000000000000001E+00 +autotroph_settings(1)%mort2_per_day = 0.10000000000000000E-01 +autotroph_settings(1)%agg_rate_max = 0.50000000000000000E+00 +autotroph_settings(1)%agg_rate_min = 0.10000000000000000E-01 +autotroph_settings(1)%loss_poc = 0.00000000000000000E+00 +autotroph_settings(1)%Ea = 0.32000000000000001E+00 +autotroph_settings(2)%sname = 'diat' +autotroph_settings(2)%lname = 'Diatom' +autotroph_settings(2)%temp_func_form_opt = 'q_10' +autotroph_settings(2)%Nfixer = F +autotroph_settings(2)%imp_calcifier = F +autotroph_settings(2)%exp_calcifier = F +autotroph_settings(2)%silicifier = T +autotroph_settings(2)%is_carbon_limited = F +autotroph_settings(2)%kFe = 0.50000000000000002E-04 +autotroph_settings(2)%kPO4 = 0.50000000000000003E-01 +autotroph_settings(2)%kDOP = 0.50000000000000000E+00 +autotroph_settings(2)%kNO3 = 0.40000000000000002E+00 +autotroph_settings(2)%kNH4 = 0.50000000000000003E-01 +autotroph_settings(2)%kSiO3 = 0.16000000000000001E+01 +autotroph_settings(2)%kCO2 = 0.00000000000000000E+00 +autotroph_settings(2)%Qp_fixed = 0.85470085470085479E-02 +autotroph_settings(2)%gQfe_0 = 0.30000000000000001E-04 +autotroph_settings(2)%gQfe_min = 0.25000000000000002E-05 +autotroph_settings(2)%alphaPI_per_day = 0.39000000000000001E+00 +autotroph_settings(2)%PCref_per_day = 0.52999999999999998E+01 +autotroph_settings(2)%thetaN_max = 0.40000000000000000E+01 +autotroph_settings(2)%loss_thres = 0.20000000000000000E-01 +autotroph_settings(2)%loss_thres2 = 0.00000000000000000E+00 +autotroph_settings(2)%temp_thres = -0.10000000000000000E+02 +autotroph_settings(2)%mort_per_day = 0.10000000000000001E+00 +autotroph_settings(2)%mort2_per_day = 0.10000000000000000E-01 +autotroph_settings(2)%agg_rate_max = 0.50000000000000000E+00 +autotroph_settings(2)%agg_rate_min = 0.20000000000000000E-01 +autotroph_settings(2)%loss_poc = 0.00000000000000000E+00 +autotroph_settings(2)%Ea = 0.32000000000000001E+00 +autotroph_settings(3)%sname = 'diaz' +autotroph_settings(3)%lname = 'Diazotroph' +autotroph_settings(3)%temp_func_form_opt = 'q_10' +autotroph_settings(3)%Nfixer = T +autotroph_settings(3)%imp_calcifier = F +autotroph_settings(3)%exp_calcifier = F +autotroph_settings(3)%silicifier = F +autotroph_settings(3)%is_carbon_limited = F +autotroph_settings(3)%kFe = 0.45000000000000003E-04 +autotroph_settings(3)%kPO4 = 0.14999999999999999E-01 +autotroph_settings(3)%kDOP = 0.74999999999999997E-01 +autotroph_settings(3)%kNO3 = 0.20000000000000000E+01 +autotroph_settings(3)%kNH4 = 0.20000000000000001E+00 +autotroph_settings(3)%kSiO3 = 0.00000000000000000E+00 +autotroph_settings(3)%kCO2 = 0.00000000000000000E+00 +autotroph_settings(3)%Qp_fixed = 0.27350427350427355E-02 +autotroph_settings(3)%gQfe_0 = 0.60000000000000002E-04 +autotroph_settings(3)%gQfe_min = 0.25000000000000002E-05 +autotroph_settings(3)%alphaPI_per_day = 0.31000000000000000E+00 +autotroph_settings(3)%PCref_per_day = 0.16000000000000001E+01 +autotroph_settings(3)%thetaN_max = 0.25000000000000000E+01 +autotroph_settings(3)%loss_thres = 0.20000000000000000E-01 +autotroph_settings(3)%loss_thres2 = 0.10000000000000000E-02 +autotroph_settings(3)%temp_thres = 0.15000000000000000E+02 +autotroph_settings(3)%mort_per_day = 0.10000000000000001E+00 +autotroph_settings(3)%mort2_per_day = 0.10000000000000000E-01 +autotroph_settings(3)%agg_rate_max = 0.50000000000000000E+00 +autotroph_settings(3)%agg_rate_min = 0.10000000000000000E-01 +autotroph_settings(3)%loss_poc = 0.00000000000000000E+00 +autotroph_settings(3)%Ea = 0.32000000000000001E+00 +autotroph_settings(4)%sname = 'cocco' +autotroph_settings(4)%lname = 'Coccolithophores' +autotroph_settings(4)%temp_func_form_opt = 'power' +autotroph_settings(4)%Nfixer = F +autotroph_settings(4)%imp_calcifier = F +autotroph_settings(4)%exp_calcifier = T +autotroph_settings(4)%silicifier = F +autotroph_settings(4)%is_carbon_limited = T +autotroph_settings(4)%kFe = 0.31999999999999999E-04 +autotroph_settings(4)%kPO4 = 0.60000000000000001E-02 +autotroph_settings(4)%kDOP = 0.25000000000000000E+00 +autotroph_settings(4)%kNO3 = 0.40999999999999998E+00 +autotroph_settings(4)%kNH4 = 0.10000000000000000E-01 +autotroph_settings(4)%kSiO3 = 0.00000000000000000E+00 +autotroph_settings(4)%kCO2 = 0.10000000000000000E+01 +autotroph_settings(4)%Qp_fixed = 0.85470085470085479E-02 +autotroph_settings(4)%gQfe_0 = 0.30000000000000001E-04 +autotroph_settings(4)%gQfe_min = 0.25000000000000002E-05 +autotroph_settings(4)%alphaPI_per_day = 0.31000000000000000E+00 +autotroph_settings(4)%PCref_per_day = 0.47000000000000002E+01 +autotroph_settings(4)%thetaN_max = 0.37999999999999998E+01 +autotroph_settings(4)%loss_thres = 0.10000000000000000E-01 +autotroph_settings(4)%loss_thres2 = 0.00000000000000000E+00 +autotroph_settings(4)%temp_thres = 0.00000000000000000E+00 +autotroph_settings(4)%mort_per_day = 0.10000000000000001E+00 +autotroph_settings(4)%mort2_per_day = 0.10000000000000000E-01 +autotroph_settings(4)%agg_rate_max = 0.50000000000000000E+00 +autotroph_settings(4)%agg_rate_min = 0.10000000000000000E-01 +autotroph_settings(4)%loss_poc = 0.00000000000000000E+00 +autotroph_settings(4)%Ea = 0.32000000000000001E+00 +zooplankton_settings(1)%sname = 'microzoo' +zooplankton_settings(1)%lname = 'Microzooplankton' +zooplankton_settings(1)%temp_func_form_opt = 'q_10' +zooplankton_settings(1)%z_mort_0_per_day = 0.10000000000000001E+00 +zooplankton_settings(1)%loss_thres = 0.74999999999999997E-01 +zooplankton_settings(1)%z_mort2_0_per_day = 0.28000000000000000E-02 +zooplankton_settings(1)%Ea = 0.55000000000000004E+00 +zooplankton_settings(2)%sname = 'mesozoo' +zooplankton_settings(2)%lname = 'Mesozooplankton' +zooplankton_settings(2)%temp_func_form_opt = 'q_10' +zooplankton_settings(2)%z_mort_0_per_day = 0.35000000000000003E-01 +zooplankton_settings(2)%loss_thres = 0.74999999999999997E-01 +zooplankton_settings(2)%z_mort2_0_per_day = 0.20000000000000000E-01 +zooplankton_settings(2)%Ea = 0.55000000000000004E+00 +grazing_relationship_settings(1,1)%sname = 'grz_sp_microzoo' +grazing_relationship_settings(1,1)%lname = 'Grazing of sp by microzoo' +grazing_relationship_settings(1,1)%auto_ind_cnt = 1 +grazing_relationship_settings(1,1)%zoo_ind_cnt = 0 +grazing_relationship_settings(1,1)%grazing_function = 2 +grazing_relationship_settings(1,1)%z_umax_0_per_day = 0.40999999999999996E+01 +grazing_relationship_settings(1,1)%z_grz = 0.13999999999999999E+01 +grazing_relationship_settings(1,1)%graze_zoo = 0.34999999999999998E+00 +grazing_relationship_settings(1,1)%graze_poc = 0.10000000000000000E-01 +grazing_relationship_settings(1,1)%graze_doc = 0.57000000000000002E-01 +grazing_relationship_settings(1,1)%f_zoo_detr = 0.17000000000000001E+00 +grazing_relationship_settings(1,1)%auto_ind(1) = 1 +grazing_relationship_settings(2,1)%sname = 'grz_diaz_microzoo' +grazing_relationship_settings(2,1)%lname = 'Grazing of diaz by microzoo' +grazing_relationship_settings(2,1)%auto_ind_cnt = 1 +grazing_relationship_settings(2,1)%zoo_ind_cnt = 0 +grazing_relationship_settings(2,1)%grazing_function = 1 +grazing_relationship_settings(2,1)%z_umax_0_per_day = 0.10000000000000000E+01 +grazing_relationship_settings(2,1)%z_grz = 0.12000000000000000E+01 +grazing_relationship_settings(2,1)%graze_zoo = 0.34999999999999998E+00 +grazing_relationship_settings(2,1)%graze_poc = 0.10000000000000000E-01 +grazing_relationship_settings(2,1)%graze_doc = 0.57000000000000002E-01 +grazing_relationship_settings(2,1)%f_zoo_detr = 0.17000000000000001E+00 +grazing_relationship_settings(2,1)%auto_ind(1) = 3 +grazing_relationship_settings(3,1)%sname = 'grz_cocco_microzoo' +grazing_relationship_settings(3,1)%lname = 'Grazing of cocco by microzoo' +grazing_relationship_settings(3,1)%auto_ind_cnt = 1 +grazing_relationship_settings(3,1)%zoo_ind_cnt = 0 +grazing_relationship_settings(3,1)%grazing_function = 1 +grazing_relationship_settings(3,1)%z_umax_0_per_day = 0.17000000000000000E+01 +grazing_relationship_settings(3,1)%z_grz = 0.15000000000000000E+01 +grazing_relationship_settings(3,1)%graze_zoo = 0.25000000000000000E+00 +grazing_relationship_settings(3,1)%graze_poc = 0.17999999999999999E+00 +grazing_relationship_settings(3,1)%graze_doc = 0.89999999999999997E-01 +grazing_relationship_settings(3,1)%f_zoo_detr = 0.27000000000000002E+00 +grazing_relationship_settings(3,1)%auto_ind(1) = 4 +grazing_relationship_settings(4,1)%sname = 'null' +grazing_relationship_settings(4,1)%lname = 'null' +grazing_relationship_settings(4,1)%auto_ind_cnt = 0 +grazing_relationship_settings(4,1)%zoo_ind_cnt = 0 +grazing_relationship_settings(4,1)%grazing_function = 1 +grazing_relationship_settings(4,1)%z_umax_0_per_day = 0.00000000000000000E+00 +grazing_relationship_settings(4,1)%z_grz = 0.00000000000000000E+00 +grazing_relationship_settings(4,1)%graze_zoo = 0.00000000000000000E+00 +grazing_relationship_settings(4,1)%graze_poc = 0.00000000000000000E+00 +grazing_relationship_settings(4,1)%graze_doc = 0.00000000000000000E+00 +grazing_relationship_settings(4,1)%f_zoo_detr = 0.00000000000000000E+00 +grazing_relationship_settings(1,2)%sname = 'grz_diat_mesozoo' +grazing_relationship_settings(1,2)%lname = 'Grazing of diat by mesozoo' +grazing_relationship_settings(1,2)%auto_ind_cnt = 1 +grazing_relationship_settings(1,2)%zoo_ind_cnt = 0 +grazing_relationship_settings(1,2)%grazing_function = 1 +grazing_relationship_settings(1,2)%z_umax_0_per_day = 0.90000000000000002E+00 +grazing_relationship_settings(1,2)%z_grz = 0.10000000000000000E+01 +grazing_relationship_settings(1,2)%graze_zoo = 0.25000000000000000E+00 +grazing_relationship_settings(1,2)%graze_poc = 0.28000000000000003E+00 +grazing_relationship_settings(1,2)%graze_doc = 0.89999999999999997E-01 +grazing_relationship_settings(1,2)%f_zoo_detr = 0.40000000000000002E+00 +grazing_relationship_settings(1,2)%auto_ind(1) = 2 +grazing_relationship_settings(2,2)%sname = 'grz_cocco_mesozoo' +grazing_relationship_settings(2,2)%lname = 'Grazing of cocco by mesozoo' +grazing_relationship_settings(2,2)%auto_ind_cnt = 1 +grazing_relationship_settings(2,2)%zoo_ind_cnt = 0 +grazing_relationship_settings(2,2)%grazing_function = 1 +grazing_relationship_settings(2,2)%z_umax_0_per_day = 0.14999999999999999E-01 +grazing_relationship_settings(2,2)%z_grz = 0.13999999999999999E+01 +grazing_relationship_settings(2,2)%graze_zoo = 0.25000000000000000E+00 +grazing_relationship_settings(2,2)%graze_poc = 0.17999999999999999E+00 +grazing_relationship_settings(2,2)%graze_doc = 0.89999999999999997E-01 +grazing_relationship_settings(2,2)%f_zoo_detr = 0.27000000000000002E+00 +grazing_relationship_settings(2,2)%auto_ind(1) = 4 +grazing_relationship_settings(3,2)%sname = 'grz_diaz_mesozoo' +grazing_relationship_settings(3,2)%lname = 'Grazing of diaz by mesozoo' +grazing_relationship_settings(3,2)%auto_ind_cnt = 1 +grazing_relationship_settings(3,2)%zoo_ind_cnt = 0 +grazing_relationship_settings(3,2)%grazing_function = 1 +grazing_relationship_settings(3,2)%z_umax_0_per_day = 0.50000000000000000E+00 +grazing_relationship_settings(3,2)%z_grz = 0.12000000000000000E+01 +grazing_relationship_settings(3,2)%graze_zoo = 0.25000000000000000E+00 +grazing_relationship_settings(3,2)%graze_poc = 0.17999999999999999E+00 +grazing_relationship_settings(3,2)%graze_doc = 0.89999999999999997E-01 +grazing_relationship_settings(3,2)%f_zoo_detr = 0.40000000000000002E+00 +grazing_relationship_settings(3,2)%auto_ind(1) = 3 +grazing_relationship_settings(4,2)%sname = 'grz_microzoo_mesozoo' +grazing_relationship_settings(4,2)%lname = 'Predation of microzoo by mesozoo' +grazing_relationship_settings(4,2)%auto_ind_cnt = 0 +grazing_relationship_settings(4,2)%zoo_ind_cnt = 1 +grazing_relationship_settings(4,2)%grazing_function = 1 +grazing_relationship_settings(4,2)%z_umax_0_per_day = 0.20000000000000001E+00 +grazing_relationship_settings(4,2)%z_grz = 0.13000000000000000E+01 +grazing_relationship_settings(4,2)%graze_zoo = 0.25000000000000000E+00 +grazing_relationship_settings(4,2)%graze_poc = 0.28000000000000003E+00 +grazing_relationship_settings(4,2)%graze_doc = 0.89999999999999997E-01 +grazing_relationship_settings(4,2)%f_zoo_detr = 0.27000000000000002E+00 +grazing_relationship_settings(4,2)%zoo_ind(1) = 1 +tracer_restore_vars(1) = '' +tracer_restore_vars(2) = '' +tracer_restore_vars(3) = '' +tracer_restore_vars(4) = '' +tracer_restore_vars(5) = '' +tracer_restore_vars(6) = '' +tracer_restore_vars(7) = '' +tracer_restore_vars(8) = '' +tracer_restore_vars(9) = '' +tracer_restore_vars(10) = '' +tracer_restore_vars(11) = '' +tracer_restore_vars(12) = '' +tracer_restore_vars(13) = '' +tracer_restore_vars(14) = '' +tracer_restore_vars(15) = '' +tracer_restore_vars(16) = '' +tracer_restore_vars(17) = '' +tracer_restore_vars(18) = '' +tracer_restore_vars(19) = '' +tracer_restore_vars(20) = '' +tracer_restore_vars(21) = '' +tracer_restore_vars(22) = '' +tracer_restore_vars(23) = '' +tracer_restore_vars(24) = '' +tracer_restore_vars(25) = '' +tracer_restore_vars(26) = '' +tracer_restore_vars(27) = '' +tracer_restore_vars(28) = '' +tracer_restore_vars(29) = '' +tracer_restore_vars(30) = '' +tracer_restore_vars(31) = '' +tracer_restore_vars(32) = '' +tracer_restore_vars(33) = '' +tracer_restore_vars(34) = '' +tracer_restore_vars(35) = '' +tracer_restore_vars(36) = '' +tracer_restore_vars(37) = '' From 43c49fa4b49c80136efd84a0f668328171431b63 Mon Sep 17 00:00:00 2001 From: Michael Levy Date: Wed, 26 Apr 2023 13:26:09 -0600 Subject: [PATCH 06/13] Remove inadvertently added files A few files that were generated by MARBL scripts got added in the previous commit --- MARBL_tools/marbl.input | 243 ----------- marbl_mod.diff | 388 ------------------ .../gen_input_file/marbl_input.gen | 221 ---------- .../marbl_settings.user_nl_marbl | 336 --------------- 4 files changed, 1188 deletions(-) delete mode 100644 MARBL_tools/marbl.input delete mode 100644 marbl_mod.diff delete mode 100644 tests/regression_tests/gen_input_file/marbl_input.gen delete mode 100644 tests/regression_tests/gen_settings_file/marbl_settings.user_nl_marbl diff --git a/MARBL_tools/marbl.input b/MARBL_tools/marbl.input deleted file mode 100644 index 3e67b0cf..00000000 --- a/MARBL_tools/marbl.input +++ /dev/null @@ -1,243 +0,0 @@ -! config PFTs -PFT_defaults = "CESM2" -autotroph_cnt = 3 -max_grazer_prey_cnt = 3 -zooplankton_cnt = 1 - -! config flags -ciso_lecovars_full_depth_tavg = .false. -ciso_lsource_sink = .true. -ciso_on = .false. -ladjust_bury_coeff = .false. -lcompute_nhx_surface_emis = .true. -lecovars_full_depth_tavg = .false. -lflux_gas_co2 = .true. -lflux_gas_o2 = .true. -lo2_consumption_scalef = .false. -lp_remin_scalef = .false. -lsource_sink = .true. -lvariable_PtoC = .true. - -! config strings -init_bury_coeff_opt = "settings_file" - -! general parameters -Jint_Ctot_thres_molpm2pyr = 1e-09 -bury_coeff_rmean_timescale_years = 10 -caco3_bury_thres_depth = 3.0000000000000000e+05 -caco3_bury_thres_omega_calc = 0.89 -caco3_bury_thres_opt = "omega_calc" -ciso_fract_factors = "Laws" -gQ_Fe_kFe_thres = 10.0 -gQ_Si_kSi_thres = 6.0 -gQsi_0 = 0.137 -gQsi_max = 0.822 -gQsi_min = 0.0457 -o2_sf_o2_range_hi = 45.0 -o2_sf_o2_range_lo = 5.0 -o2_sf_val_lo_o2 = 2.6 -parm_CaCO3_gamma = 0.02 -parm_Fe_bioavail = 1.0 -parm_Fe_desorption_rate0 = 9.9999999999999995e-07 -parm_Lig_degrade_rate0 = 9.4e-05 -parm_SiO2_gamma = 0.0 -parm_f_prod_sp_CaCO3 = 0.07 -parm_hPOC_CaCO3_ratio = 0.01 -parm_hPOC_SiO2_ratio = 0.01 -parm_hPOC_dust_ratio = 0.01 -parm_labile_ratio = 0.94 -parm_o2_min = 5.0 -parm_o2_min_delta = 5.0 -parm_sed_denitrif_coeff = 1 -particulate_flux_ref_depth = 100 - -! general parameters (bury coeffs) -POM_bury_frac_max = 0.8 -PON_bury_coeff = 0.5 -bSi_bury_frac_max = 1.0 -parm_init_POC_bury_coeff = 2.54 -parm_init_POP_bury_coeff = 0.36 -parm_init_bSi_bury_coeff = 1.53 - -! general parameters (dissolution) -parm_CaCO3_diss = 5.0000000000000000e+04 -parm_POC_diss = 1.0000000000000000e+04 -parm_SiO2_diss = 6.5000000000000000e+04 - -! general parameters (nitrification) -parm_kappa_nitrif_per_day = 0.06 -parm_nitrif_par_lim = 1.0 - -! general parameters (scavenging) -parm_FeLig_scavenge_rate0 = 1.2 -parm_Fe_scavenge_rate0 = 22.0 -parm_Lig_scavenge_rate0 = 0.015 - -! Scale lengths -parm_scalelen_vals(1) = 1 -parm_scalelen_vals(2) = 3.6 -parm_scalelen_vals(3) = 4.7 -parm_scalelen_vals(4) = 4.8 -parm_scalelen_z(1) = 1.0000000000000000e+04 -parm_scalelen_z(2) = 2.5000000000000000e+04 -parm_scalelen_z(3) = 5.0000000000000000e+04 -parm_scalelen_z(4) = 1.0000000000000000e+05 - -! autotrophs -autotroph_settings(1)%Nfixer = .false. -autotroph_settings(1)%PCref_per_day = 5 -autotroph_settings(1)%Qp_fixed = 8.5470085470085479e-03 -autotroph_settings(1)%agg_rate_max = 0.5 -autotroph_settings(1)%agg_rate_min = 0.01 -autotroph_settings(1)%alphaPI_per_day = 0.39 -autotroph_settings(1)%exp_calcifier = .false. -autotroph_settings(1)%gQfe_0 = 3.0000000000000001e-05 -autotroph_settings(1)%gQfe_min = 2.5e-06 -autotroph_settings(1)%imp_calcifier = .true. -autotroph_settings(1)%kDOP = 0.3 -autotroph_settings(1)%kFe = 3e-05 -autotroph_settings(1)%kNH4 = 0.01 -autotroph_settings(1)%kNO3 = 0.25 -autotroph_settings(1)%kPO4 = 0.01 -autotroph_settings(1)%kSiO3 = 0 -autotroph_settings(1)%lname = "Small Phyto" -autotroph_settings(1)%loss_poc = 0 -autotroph_settings(1)%loss_thres = 0.01 -autotroph_settings(1)%loss_thres2 = 0 -autotroph_settings(1)%mort2_per_day = 0.01 -autotroph_settings(1)%mort_per_day = 0.1 -autotroph_settings(1)%silicifier = .false. -autotroph_settings(1)%sname = "sp" -autotroph_settings(1)%temp_thres = -10 -autotroph_settings(1)%thetaN_max = 2.5 -autotroph_settings(2)%Nfixer = .false. -autotroph_settings(2)%PCref_per_day = 5 -autotroph_settings(2)%Qp_fixed = 8.5470085470085479e-03 -autotroph_settings(2)%agg_rate_max = 0.5 -autotroph_settings(2)%agg_rate_min = 0.02 -autotroph_settings(2)%alphaPI_per_day = 0.28 -autotroph_settings(2)%exp_calcifier = .false. -autotroph_settings(2)%gQfe_0 = 3.0000000000000001e-05 -autotroph_settings(2)%gQfe_min = 2.5e-06 -autotroph_settings(2)%imp_calcifier = .false. -autotroph_settings(2)%kDOP = 0.5 -autotroph_settings(2)%kFe = 7e-05 -autotroph_settings(2)%kNH4 = 0.05 -autotroph_settings(2)%kNO3 = 0.5 -autotroph_settings(2)%kPO4 = 0.05 -autotroph_settings(2)%kSiO3 = 0.7 -autotroph_settings(2)%lname = "Diatom" -autotroph_settings(2)%loss_poc = 0 -autotroph_settings(2)%loss_thres = 0.02 -autotroph_settings(2)%loss_thres2 = 0 -autotroph_settings(2)%mort2_per_day = 0.01 -autotroph_settings(2)%mort_per_day = 0.1 -autotroph_settings(2)%silicifier = .true. -autotroph_settings(2)%sname = "diat" -autotroph_settings(2)%temp_thres = -10 -autotroph_settings(2)%thetaN_max = 4 -autotroph_settings(3)%Nfixer = .true. -autotroph_settings(3)%PCref_per_day = 2.5 -autotroph_settings(3)%Qp_fixed = 2.7350427350427355e-03 -autotroph_settings(3)%agg_rate_max = 0.5 -autotroph_settings(3)%agg_rate_min = 0.01 -autotroph_settings(3)%alphaPI_per_day = 0.39 -autotroph_settings(3)%exp_calcifier = .false. -autotroph_settings(3)%gQfe_0 = 6.0000000000000002e-05 -autotroph_settings(3)%gQfe_min = 2.5e-06 -autotroph_settings(3)%imp_calcifier = .false. -autotroph_settings(3)%kDOP = 0.075 -autotroph_settings(3)%kFe = 4.5e-05 -autotroph_settings(3)%kNH4 = 0.2 -autotroph_settings(3)%kNO3 = 2 -autotroph_settings(3)%kPO4 = 0.015 -autotroph_settings(3)%kSiO3 = 0 -autotroph_settings(3)%lname = "Diazotroph" -autotroph_settings(3)%loss_poc = 0 -autotroph_settings(3)%loss_thres = 0.02 -autotroph_settings(3)%loss_thres2 = 0.001 -autotroph_settings(3)%mort2_per_day = 0.01 -autotroph_settings(3)%mort_per_day = 0.1 -autotroph_settings(3)%silicifier = .false. -autotroph_settings(3)%sname = "diaz" -autotroph_settings(3)%temp_thres = 15 -autotroph_settings(3)%thetaN_max = 2.5 - -! zooplankton -zooplankton_settings(1)%lname = "Zooplankton" -zooplankton_settings(1)%loss_thres = 0.075 -zooplankton_settings(1)%sname = "zoo" -zooplankton_settings(1)%z_mort2_0_per_day = 0.4 -zooplankton_settings(1)%z_mort_0_per_day = 0.1 - -! grazing -grazing_relationship_settings(1,1)%auto_ind(1) = 1 -grazing_relationship_settings(1,1)%auto_ind_cnt = 1 -grazing_relationship_settings(1,1)%f_zoo_detr = 0.12 -grazing_relationship_settings(1,1)%graze_doc = 0.06 -grazing_relationship_settings(1,1)%graze_poc = 0 -grazing_relationship_settings(1,1)%graze_zoo = 0.3 -grazing_relationship_settings(1,1)%grazing_function = 1 -grazing_relationship_settings(1,1)%lname = "Grazing of sp by zoo" -grazing_relationship_settings(1,1)%sname = "grz_sp_zoo" -grazing_relationship_settings(1,1)%z_grz = 1.2 -grazing_relationship_settings(1,1)%z_umax_0_per_day = 3.3 -grazing_relationship_settings(1,1)%zoo_ind_cnt = 0 -grazing_relationship_settings(2,1)%auto_ind(1) = 2 -grazing_relationship_settings(2,1)%auto_ind_cnt = 1 -grazing_relationship_settings(2,1)%f_zoo_detr = 0.24 -grazing_relationship_settings(2,1)%graze_doc = 0.06 -grazing_relationship_settings(2,1)%graze_poc = 0.39 -grazing_relationship_settings(2,1)%graze_zoo = 0.25 -grazing_relationship_settings(2,1)%grazing_function = 1 -grazing_relationship_settings(2,1)%lname = "Grazing of diat by zoo" -grazing_relationship_settings(2,1)%sname = "grz_diat_zoo" -grazing_relationship_settings(2,1)%z_grz = 1.2 -grazing_relationship_settings(2,1)%z_umax_0_per_day = 3.15 -grazing_relationship_settings(2,1)%zoo_ind_cnt = 0 -grazing_relationship_settings(3,1)%auto_ind(1) = 3 -grazing_relationship_settings(3,1)%auto_ind_cnt = 1 -grazing_relationship_settings(3,1)%f_zoo_detr = 0.12 -grazing_relationship_settings(3,1)%graze_doc = 0.06 -grazing_relationship_settings(3,1)%graze_poc = 0.1 -grazing_relationship_settings(3,1)%graze_zoo = 0.3 -grazing_relationship_settings(3,1)%grazing_function = 1 -grazing_relationship_settings(3,1)%lname = "Grazing of diaz by zoo" -grazing_relationship_settings(3,1)%sname = "grz_diaz_zoo" -grazing_relationship_settings(3,1)%z_grz = 1.2 -grazing_relationship_settings(3,1)%z_umax_0_per_day = 3.3 -grazing_relationship_settings(3,1)%zoo_ind_cnt = 0 - -! tracer restoring -tracer_restore_vars(1) = "" -tracer_restore_vars(2) = "" -tracer_restore_vars(3) = "" -tracer_restore_vars(4) = "" -tracer_restore_vars(5) = "" -tracer_restore_vars(6) = "" -tracer_restore_vars(7) = "" -tracer_restore_vars(8) = "" -tracer_restore_vars(9) = "" -tracer_restore_vars(10) = "" -tracer_restore_vars(11) = "" -tracer_restore_vars(12) = "" -tracer_restore_vars(13) = "" -tracer_restore_vars(14) = "" -tracer_restore_vars(15) = "" -tracer_restore_vars(16) = "" -tracer_restore_vars(17) = "" -tracer_restore_vars(18) = "" -tracer_restore_vars(19) = "" -tracer_restore_vars(20) = "" -tracer_restore_vars(21) = "" -tracer_restore_vars(22) = "" -tracer_restore_vars(23) = "" -tracer_restore_vars(24) = "" -tracer_restore_vars(25) = "" -tracer_restore_vars(26) = "" -tracer_restore_vars(27) = "" -tracer_restore_vars(28) = "" -tracer_restore_vars(29) = "" -tracer_restore_vars(30) = "" -tracer_restore_vars(31) = "" -tracer_restore_vars(32) = "" diff --git a/marbl_mod.diff b/marbl_mod.diff deleted file mode 100644 index e569a4ed..00000000 --- a/marbl_mod.diff +++ /dev/null @@ -1,388 +0,0 @@ -diff --git a/src/marbl_mod.F90 b/src/marbl_mod.F90 -index 3daea34..a400f81 100644 ---- a/src/marbl_mod.F90 -+++ b/src/marbl_mod.F90 -@@ -143,6 +143,7 @@ module marbl_mod - use marbl_settings_mod, only : parm_red_d_c_o2_diaz - use marbl_settings_mod, only : parm_Remin_D_C_O2 - use marbl_settings_mod, only : QCaCO3_max -+ use marbl_settings_mod, only : QCaCO3_max_exp - use marbl_settings_mod, only : Qfe_zoo - use marbl_settings_mod, only : r_Nfix_photo - use marbl_settings_mod, only : spc_poc_fac -@@ -510,6 +511,7 @@ contains - real (r8) :: sed_denitrif(domain%km) ! sedimentary denitrification (nmol N/cm^3/sec) - real (r8) :: other_remin(domain%km) ! organic C remin not due oxic or denitrif (nmolC/cm^3/sec) - real (r8) :: Tfunc(domain%km) -+ real (r8) :: Tfunc_cocco(domain%km) - real (r8) :: Fe_scavenge_rate(domain%km) ! annual scavenging rate of iron as % of ambient - real (r8) :: Fe_scavenge(domain%km) ! loss of dissolved iron, scavenging (mmol Fe/m^3/sec) - real (r8) :: Lig_scavenge(domain%km) ! loss of Fe-binding Ligand from scavenging (mmol Fe/m^3/sec) -@@ -650,18 +652,18 @@ contains - autotrophs, autotroph_local(:, k), tracer_local(:, k), & - marbl_tracer_indices, autotroph_secondary_species(:, k)) - -- call marbl_compute_function_scaling(temperature(k), Tfunc(k)) -+ call marbl_compute_function_scaling(temperature(k), Tfunc(k), Tfunc_cocco(k)) - - call marbl_compute_Pprime(k, domain, autotroph_cnt, autotrophs, & - autotroph_local(:, k), temperature(k), autotroph_secondary_species(:, k)) - - call marbl_compute_autotroph_uptake(autotroph_cnt, autotrophs, & - tracer_local(:, k), marbl_tracer_indices, & -- autotroph_secondary_species(:, k)) -+ autotroph_secondary_species(:, k), carbonate(k)) - - call marbl_compute_autotroph_photosynthesis(autotroph_cnt, & - num_PAR_subcols, autotrophs, autotroph_local(:, k), & -- temperature(k), Tfunc(k), PAR%col_frac(:), & -+ temperature(k), Tfunc(k), Tfunc_cocco(k), PAR%col_frac(:), & - PAR%avg(k,:), autotroph_secondary_species(:, k)) - - call marbl_compute_autotroph_phyto_diatoms (autotroph_cnt, & -@@ -670,20 +672,20 @@ contains - - call marbl_compute_autotroph_calcification(autotroph_cnt, & - autotrophs, autotroph_local(:, k), temperature(k), & -- autotroph_secondary_species(:, k)) -+ autotroph_secondary_species(:, k), carbonate(k)) - - call marbl_compute_autotroph_nfixation(autotroph_cnt, autotrophs, & - autotroph_secondary_species(:, k)) - - call marbl_compute_autotroph_loss(autotroph_cnt, autotrophs, & -- Tfunc(k), autotroph_secondary_species(:, k)) -+ Tfunc(k), Tfunc_cocco(k), autotroph_secondary_species(:, k)) - - call marbl_compute_Zprime(k, domain, & - zooplankton_cnt, zooplankton, zooplankton_local(:, k)%C, & - Tfunc(k), zooplankton_secondary_species(:, k)) - - call marbl_compute_grazing (autotroph_cnt, zooplankton_cnt, & -- max_grazer_prey_cnt, autotrophs, Tfunc(k), zooplankton_local(:, k), & -+ max_grazer_prey_cnt, autotrophs, Tfunc(k), Tfunc_cocco(k), zooplankton_local(:, k), & - zooplankton_secondary_species(:, k), & - autotroph_secondary_species(:, k)) - -@@ -2282,7 +2284,7 @@ contains - - ! autotroph consistency check - call marbl_consistency_check_autotrophs(autotroph_cnt, column_kmt, & -- marbl_tracer_indices, autotroph_local(:,1:column_kmt)) -+ marbl_tracer_indices, autotrophs, autotroph_local(:,1:column_kmt)) - - ! set totalChl_local - totalChl_local = sum(autotroph_local(:,:)%Chl, dim=1) -@@ -2292,7 +2294,7 @@ contains - !*********************************************************************** - - subroutine marbl_consistency_check_autotrophs(auto_cnt, column_kmt, & -- marbl_tracer_indices, autotroph_local) -+ marbl_tracer_indices, autotrophs, autotroph_local) - - !----------------------------------------------------------------------- - ! If any phyto box are zero, set others to zeros. -@@ -2303,6 +2305,7 @@ contains - integer(int_kind) , intent(in) :: auto_cnt ! autotroph_cnt - integer(int_kind) , intent(in) :: column_kmt ! number of active model layers - type(marbl_tracer_index_type) , intent(in) :: marbl_tracer_indices -+ type(autotroph_type) , intent(in) :: autotrophs(:) - type(autotroph_local_type) , intent(inout) :: autotroph_local(autotroph_cnt, column_kmt) - - !----------------------------------------------------------------------- -@@ -2372,6 +2375,7 @@ contains - !----------------------------------------------------------------------- - real :: cks ! constant used in quota modification - real :: cksi ! constant used in Si quota modification -+ real(r8) :: QCaCO3_max_loc - integer(int_kind) :: auto_ind - !----------------------------------------------------------------------- - -@@ -2468,9 +2472,16 @@ contains - !----------------------------------------------------------------------- - - if (marbl_tracer_indices%auto_inds(auto_ind)%CaCO3_ind > 0) then -+ !set a local variable to the correct QCaCO3 max based on whether implicit or explicit -+ if (autotrophs(auto_ind)%imp_calcifier) then -+ QCaCO3_max_loc = QCaCO3_max -+ else -+ QCaCO3_max_loc = QCaCO3_max_exp -+ end if -+ - QCaCO3(auto_ind) = auto_CaCO3(auto_ind) / (auto_C(auto_ind) + epsC) -- if (QCaCO3(auto_ind) > QCaCO3_max) then -- QCaCO3(auto_ind) = QCaCO3_max -+ if (QCaCO3(auto_ind) > QCaCO3_max_loc) then -+ QCaCO3(auto_ind) = QCaCO3_max_loc - end if - end if - end do -@@ -2736,7 +2747,7 @@ contains - - !*********************************************************************** - -- subroutine marbl_compute_function_scaling(temperature, Tfunc) -+ subroutine marbl_compute_function_scaling(temperature, Tfunc, Tfunc_cocco ) - - !----------------------------------------------------------------------- - ! Tref = 30.0 reference temperature (degC) -@@ -2750,9 +2761,18 @@ contains - - real(r8), intent(in) :: temperature - real(r8), intent(out) :: Tfunc -+ real(r8), intent(out) :: Tfunc_cocco - - Tfunc = Q_10**(((temperature + T0_Kelvin) - (Tref + T0_Kelvin)) / c10) - -+ -+ -+!Tfunc_cocco = Tfunc !Q_10**(((column_temperature + T0_Kelvin) - (Tref + T0_Kelvin)) / c10) -+!Tfunc_cocco = 0.085 * ((column_temperature)**(0.53)) -+!Tfunc_cocco = max(0.158, 0.12 * ((column_temperature)**(0.4))) -+Tfunc_cocco = 0.12_r8 * (max(0.0_r8, min(temperature,27.0_r8))**(0.4_r8)) -+!Tfunc_cocco = 1.8**(((column_temperature + T0_Kelvin) - (33.0 + T0_Kelvin)) / c10) -+ - end subroutine marbl_compute_function_scaling - - !*********************************************************************** -@@ -2865,14 +2885,14 @@ contains - !*********************************************************************** - - subroutine marbl_compute_autotroph_uptake (auto_cnt, autotrophs, & -- tracer_local, marbl_tracer_indices, autotroph_secondary_species) -+ tracer_local, marbl_tracer_indices, autotroph_secondary_species, carbonate) - - integer(int_kind) , intent(in) :: auto_cnt - type(autotroph_type) , intent(in) :: autotrophs(:) - real(r8) , intent(in) :: tracer_local(:) - type(marbl_tracer_index_type) , intent(in) :: marbl_tracer_indices - type(autotroph_secondary_species_type) , intent(out) :: autotroph_secondary_species(:) -- -+ type(carbonate_type) , intent(in) :: carbonate - !----------------------------------------------------------------------- - ! local variables - !----------------------------------------------------------------------- -@@ -2894,6 +2914,7 @@ contains - PO4_loc => tracer_local(marbl_tracer_indices%po4_ind), & - Fe_loc => tracer_local(marbl_tracer_indices%fe_ind), & - SiO3_loc => tracer_local(marbl_tracer_indices%sio3_ind), & -+ CO2_loc => carbonate%H2CO3, & ! input - ! OUTPUTS - VNO3 => autotroph_secondary_species(auto_ind)%VNO3, & - VNH4 => autotroph_secondary_species(auto_ind)%VNH4, & -@@ -2904,15 +2925,19 @@ contains - VPO4 => autotroph_secondary_species(auto_ind)%VPO4, & - VPtot => autotroph_secondary_species(auto_ind)%VPtot, & - VSiO3 => autotroph_secondary_species(auto_ind)%VSiO3, & -+ VCO2 => autotroph_secondary_species(auto_ind)%VCO2, & - ! AUTOTROPHS - Nfixer => autotrophs(auto_ind)%Nfixer, & - silicifier => autotrophs(auto_ind)%silicifier, & -+ imp_calcifier => autotrophs(auto_ind)%imp_calcifier, & -+ exp_calcifier => autotrophs(auto_ind)%exp_calcifier, & - kNO3 => autotrophs(auto_ind)%kNO3, & - kNH4 => autotrophs(auto_ind)%kNH4, & - kFe => autotrophs(auto_ind)%kFe, & - kPO4 => autotrophs(auto_ind)%kPO4, & - kDOP => autotrophs(auto_ind)%kDOP, & -- kSiO3 => autotrophs(auto_ind)%kSiO3 & -+ kSiO3 => autotrophs(auto_ind)%kSiO3, & -+ kCO2 => autotrophs(auto_ind)%kCO2 & - ) - - VNO3 = (NO3_loc / kNO3) / (c1 + (NO3_loc / kNO3) + (NH4_loc / kNH4)) -@@ -2932,12 +2957,22 @@ contains - VSiO3 = SiO3_loc / (SiO3_loc + kSiO3) - endif - -+ if (exp_calcifier) then -+ VCO2 = CO2_loc / (CO2_loc + kCO2) -+ endif -+ - f_nut = min(VNtot, VFe) - f_nut = min(f_nut, VPtot) - if (silicifier) then - f_nut = min(f_nut, VSiO3) - endif - -+ if (exp_calcifier) then -+ f_nut = min(f_nut, VCO2) -+ end if -+ -+ -+ - end associate - - end do -@@ -2947,7 +2982,7 @@ contains - !*********************************************************************** - - subroutine marbl_compute_autotroph_photosynthesis (auto_cnt, PAR_nsubcols, & -- autotrophs, autotroph_loc, temperature, Tfunc, PAR_col_frac, PAR_avg, & -+ autotrophs, autotroph_loc, temperature, Tfunc, Tfunc_cocco, PAR_col_frac, PAR_avg, & - autotroph_secondary_species) - - !----------------------------------------------------------------------- -@@ -2962,6 +2997,7 @@ contains - type(autotroph_local_type) , intent(in) :: autotroph_loc(auto_cnt) - real(r8) , intent(in) :: temperature - real(r8) , intent(in) :: Tfunc -+ real(r8) , intent(in) :: Tfunc_cocco - real(r8) , intent(in) :: PAR_col_frac(PAR_nsubcols) - real(r8) , intent(in) :: PAR_avg(PAR_nsubcols) - type(autotroph_secondary_species_type) , intent(inout) :: autotroph_secondary_species(auto_cnt) -@@ -2991,8 +3027,13 @@ contains - PCref => autotrophs(auto_ind)%PCref, & - alphaPI => autotrophs(auto_ind)%alphaPI & - ) -+ -+ if (autotrophs(auto_ind)%exp_calcifier) then -+ PCmax = PCref * f_nut * Tfunc_cocco -+ else -+ PCmax = PCref * f_nut * Tfunc -+ end if - -- PCmax = PCref * f_nut * Tfunc - if (temperature < autotrophs(auto_ind)%temp_thres) then - PCmax = c0 - end if -@@ -3111,7 +3152,7 @@ contains - !*********************************************************************** - - subroutine marbl_compute_autotroph_calcification (auto_cnt, autotrophs, & -- autotroph_loc, temperature, autotroph_secondary_species) -+ autotroph_loc, temperature, autotroph_secondary_species, carbonate) - - !----------------------------------------------------------------------- - ! CaCO3 Production, parameterized as function of small phyto production -@@ -3131,17 +3172,20 @@ contains - type(autotroph_local_type) , intent(in) :: autotroph_loc(auto_cnt) - real(r8) , intent(in) :: temperature - type(autotroph_secondary_species_type) , intent(inout) :: autotroph_secondary_species(auto_cnt) -- -+ type(carbonate_type) , intent(in) :: carbonate - !----------------------------------------------------------------------- - ! local variables - !----------------------------------------------------------------------- - integer :: auto_ind -+ real(r8) :: picpoc - !----------------------------------------------------------------------- - - associate( & - f_nut => autotroph_secondary_species(:)%f_nut, & ! input - photoC => autotroph_secondary_species(:)%photoC, & ! input -- CaCO3_form => autotroph_secondary_species(:)%CaCO3_form & ! output -+ CaCO3_form => autotroph_secondary_species(:)%CaCO3_form, & ! output -+ Plim => autotroph_secondary_species(:)%VPO4, & ! input -+ CO2 => carbonate%H2CO3 & ! input - ) - - do auto_ind = 1, auto_cnt -@@ -3158,6 +3202,27 @@ contains - CaCO3_form(auto_ind) = min((CaCO3_form(auto_ind) * autotroph_loc(auto_ind)%C / CaCO3_sp_thres), & - (f_photosp_CaCO3 * photoC(auto_ind))) - end if -+ -+ else if(autotrophs(auto_ind)%exp_calcifier) then -+ -+ !first calculate PIC/POC in coccolithophore biomass---------- -+ -+ !temperature effect -+ if (temperature < 11.) then -+ picpoc = max(0.,0.104 * temperature - 0.108) -+ else -+ picpoc = 1. -+ end if -+ -+ !CO2 effect -+ picpoc = max(0.,-0.0136 * CO2 + picpoc + 0.21) -+ -+ !nut lim effect (maybe just making this for P-limited areas? if (Plim(auto_ind) == f_nut(auto_ind) then..) -+ picpoc = max(0.,-0.48 * Plim(auto_ind) + picpoc + 0.48) -+ -+ !multiply cocco growth rate by picpoc to get CaCO3 formation -+ -+ CaCO3_form(auto_ind) = picpoc * photoC(auto_ind) - end if - end do - -@@ -3210,7 +3275,7 @@ contains - !*********************************************************************** - - subroutine marbl_compute_autotroph_loss (auto_cnt, autotrophs, Tfunc, & -- autotroph_secondary_species) -+ Tfunc_cocco, autotroph_secondary_species) - - !----------------------------------------------------------------------- - ! Compute autotroph-loss, autotroph aggregation loss and routine of -@@ -3220,6 +3285,7 @@ contains - integer(int_kind) , intent(in) :: auto_cnt - type(autotroph_type) , intent(in) :: autotrophs(auto_cnt) - real(r8) , intent(in) :: Tfunc -+ real(r8) , intent(in) :: Tfunc_cocco - type(autotroph_secondary_species_type) , intent(inout) :: autotroph_secondary_species(auto_cnt) - - !----------------------------------------------------------------------- -@@ -3244,7 +3310,11 @@ contains - ! autotroph agg loss - !----------------------------------------------------------------------- - -- auto_loss(auto_ind) = autotrophs(auto_ind)%mort * Pprime(auto_ind) * Tfunc -+ if (autotrophs(auto_ind)%exp_calcifier) then -+ auto_loss(auto_ind) = autotrophs(auto_ind)%mort * Pprime(auto_ind) * Tfunc_cocco -+ else -+ auto_loss(auto_ind) = autotrophs(auto_ind)%mort * Pprime(auto_ind) * Tfunc -+ end if - - auto_agg(auto_ind) = min((autotrophs(auto_ind)%agg_rate_max * dps) * Pprime(auto_ind), & - autotrophs(auto_ind)%mort2 * Pprime(auto_ind)**1.75_r8) -@@ -3256,7 +3326,7 @@ contains - ! min.%C routed from sp_loss = 0.59 * QCaCO3, or P_CaCO3%rho - !----------------------------------------------------------------------- - -- if (autotrophs(auto_ind)%imp_calcifier) then -+ if (autotrophs(auto_ind)%imp_calcifier .or. autotrophs(auto_ind)%exp_calcifier) then - auto_loss_poc(auto_ind) = QCaCO3(auto_ind) * auto_loss(auto_ind) - else - auto_loss_poc(auto_ind) = autotrophs(auto_ind)%loss_poc * auto_loss(auto_ind) -@@ -3271,7 +3341,7 @@ contains - !*********************************************************************** - - subroutine marbl_compute_grazing (auto_cnt, zoo_cnt, max_grazer_prey_cnt, & -- autotrophs, Tfunc, zooplankton_loc, & -+ autotrophs, Tfunc, Tfunc_cocco, zooplankton_loc, & - zooplankton_secondary_species, autotroph_secondary_species) - - !----------------------------------------------------------------------- -@@ -3296,6 +3366,7 @@ contains - integer(int_kind) , intent(in) :: max_grazer_prey_cnt - type(autotroph_type) , intent(in) :: autotrophs(auto_cnt) - real(r8) , intent(in) :: Tfunc -+ real(r8) , intent(in) :: Tfunc_cocco - type(zooplankton_local_type) , intent(in) :: zooplankton_loc(zoo_cnt) - type(zooplankton_secondary_species_type) , intent(inout) :: zooplankton_secondary_species(zoo_cnt) - type(autotroph_secondary_species_type) , intent(inout) :: autotroph_secondary_species(auto_cnt) -@@ -3370,8 +3441,13 @@ contains - case (grz_fnc_michaelis_menten) - - if (work1 > c0) then -- graze_rate = grazing(prey_ind, pred_ind)%z_umax_0 * Tfunc * zooplankton_loc(pred_ind)%C & -+ if (autotrophs(auto_ind)%exp_calcifier) then -+ graze_rate = grazing(prey_ind, pred_ind)%z_umax_0 * Tfunc * zooplankton_loc(pred_ind)%C & -+ * ( work1 / (work1 + grazing(prey_ind, pred_ind)%z_grz) ) -+ else -+ graze_rate = grazing(prey_ind, pred_ind)%z_umax_0 * Tfunc * zooplankton_loc(pred_ind)%C & - * ( work1 / (work1 + grazing(prey_ind, pred_ind)%z_grz) ) -+ end if - else - graze_rate = c0 - end if -@@ -3407,7 +3483,7 @@ contains - x_graze_zoo(pred_ind) = x_graze_zoo(pred_ind) + grazing(prey_ind, pred_ind)%graze_zoo * work2 - - ! routed to POC -- if (autotrophs(auto_ind)%imp_calcifier) then -+ if (autotrophs(auto_ind)%imp_calcifier .or. autotrophs(auto_ind)%exp_calcifier) then - auto_graze_poc(auto_ind) = auto_graze_poc(auto_ind) & - + work2 * max((caco3_poc_min * QCaCO3(auto_ind)), & - min(spc_poc_fac * (Pprime(auto_ind)+0.6_r8)**1.6_r8, & diff --git a/tests/regression_tests/gen_input_file/marbl_input.gen b/tests/regression_tests/gen_input_file/marbl_input.gen deleted file mode 100644 index 4a434079..00000000 --- a/tests/regression_tests/gen_input_file/marbl_input.gen +++ /dev/null @@ -1,221 +0,0 @@ -PFT_defaults = 'CESM2' -ciso_on = F -lsource_sink = T -lecovars_full_depth_tavg = F -ciso_lsource_sink = T -ciso_lecovars_full_depth_tavg = F -lflux_gas_o2 = T -lflux_gas_co2 = T -lcompute_nhx_surface_emis = T -lvariable_PtoC = T -ladjust_bury_coeff = F -lo2_consumption_scalef = F -lp_remin_scalef = F -init_bury_coeff_opt = 'settings_file' -particulate_flux_ref_depth = 100 -Jint_Ctot_thres_molpm2pyr = 0.10000000000000001E-08 -gQsi_0 = 0.13700000000000001E+00 -gQsi_max = 0.82199999999999995E+00 -gQsi_min = 0.45699999999999998E-01 -gQ_Fe_kFe_thres = 0.10000000000000000E+02 -gQ_Si_kSi_thres = 0.60000000000000000E+01 -parm_Fe_bioavail = 0.10000000000000000E+01 -parm_o2_min = 0.50000000000000000E+01 -parm_o2_min_delta = 0.50000000000000000E+01 -parm_kappa_nitrif_per_day = 0.59999999999999998E-01 -parm_nitrif_par_lim = 0.10000000000000000E+01 -parm_labile_ratio = 0.93999999999999995E+00 -parm_init_POC_bury_coeff = 0.25400000000000000E+01 -parm_init_POP_bury_coeff = 0.35999999999999999E+00 -parm_init_bSi_bury_coeff = 0.15300000000000000E+01 -parm_Fe_scavenge_rate0 = 0.22000000000000000E+02 -parm_Lig_scavenge_rate0 = 0.14999999999999999E-01 -parm_FeLig_scavenge_rate0 = 0.12000000000000000E+01 -parm_Lig_degrade_rate0 = 0.93999999999999994E-04 -parm_Fe_desorption_rate0 = 0.99999999999999995E-06 -parm_f_prod_sp_CaCO3 = 0.70000000000000007E-01 -parm_POC_diss = 0.10000000000000000E+05 -parm_SiO2_diss = 0.65000000000000000E+05 -parm_SiO2_gamma = 0.00000000000000000E+00 -parm_hPOC_SiO2_ratio = 0.10000000000000000E-01 -parm_CaCO3_diss = 0.50000000000000000E+05 -parm_CaCO3_gamma = 0.20000000000000000E-01 -parm_hPOC_CaCO3_ratio = 0.10000000000000000E-01 -parm_hPOC_dust_ratio = 0.10000000000000000E-01 -o2_sf_o2_range_hi = 0.45000000000000000E+02 -o2_sf_o2_range_lo = 0.50000000000000000E+01 -o2_sf_val_lo_o2 = 0.26000000000000001E+01 -parm_sed_denitrif_coeff = 0.10000000000000000E+01 -bury_coeff_rmean_timescale_years = 0.10000000000000000E+02 -parm_scalelen_z(1) = 0.10000000000000000E+05 -parm_scalelen_z(2) = 0.25000000000000000E+05 -parm_scalelen_z(3) = 0.50000000000000000E+05 -parm_scalelen_z(4) = 0.10000000000000000E+06 -parm_scalelen_vals(1) = 0.10000000000000000E+01 -parm_scalelen_vals(2) = 0.36000000000000001E+01 -parm_scalelen_vals(3) = 0.47000000000000002E+01 -parm_scalelen_vals(4) = 0.47999999999999998E+01 -caco3_bury_thres_opt = 'omega_calc' -caco3_bury_thres_depth = 0.30000000000000000E+06 -caco3_bury_thres_omega_calc = 0.89000000000000001E+00 -PON_bury_coeff = 0.50000000000000000E+00 -POM_bury_frac_max = 0.80000000000000004E+00 -bSi_bury_frac_max = 0.10000000000000000E+01 -ciso_fract_factors = 'Laws' -autotroph_cnt = 3 -zooplankton_cnt = 1 -max_grazer_prey_cnt = 3 -autotroph_settings(1)%sname = 'sp' -autotroph_settings(1)%lname = 'Small Phyto' -autotroph_settings(1)%Nfixer = F -autotroph_settings(1)%imp_calcifier = T -autotroph_settings(1)%exp_calcifier = F -autotroph_settings(1)%silicifier = F -autotroph_settings(1)%kFe = 0.30000000000000001E-04 -autotroph_settings(1)%kPO4 = 0.10000000000000000E-01 -autotroph_settings(1)%kDOP = 0.29999999999999999E+00 -autotroph_settings(1)%kNO3 = 0.25000000000000000E+00 -autotroph_settings(1)%kNH4 = 0.10000000000000000E-01 -autotroph_settings(1)%kSiO3 = 0.00000000000000000E+00 -autotroph_settings(1)%kCO2 = 0.00000000000000000E+00 -autotroph_settings(1)%Qp_fixed = 0.85470085470085479E-02 -autotroph_settings(1)%gQfe_0 = 0.30000000000000001E-04 -autotroph_settings(1)%gQfe_min = 0.25000000000000002E-05 -autotroph_settings(1)%alphaPi_per_day = 0.39000000000000001E+00 -autotroph_settings(1)%PCref_per_day = 0.50000000000000000E+01 -autotroph_settings(1)%thetaN_max = 0.25000000000000000E+01 -autotroph_settings(1)%loss_thres = 0.10000000000000000E-01 -autotroph_settings(1)%loss_thres2 = 0.00000000000000000E+00 -autotroph_settings(1)%temp_thres = -0.10000000000000000E+02 -autotroph_settings(1)%mort_per_day = 0.10000000000000001E+00 -autotroph_settings(1)%mort2_per_day = 0.10000000000000000E-01 -autotroph_settings(1)%agg_rate_max = 0.50000000000000000E+00 -autotroph_settings(1)%agg_rate_min = 0.10000000000000000E-01 -autotroph_settings(1)%loss_poc = 0.00000000000000000E+00 -autotroph_settings(2)%sname = 'diat' -autotroph_settings(2)%lname = 'Diatom' -autotroph_settings(2)%Nfixer = F -autotroph_settings(2)%imp_calcifier = F -autotroph_settings(2)%exp_calcifier = F -autotroph_settings(2)%silicifier = T -autotroph_settings(2)%kFe = 0.69999999999999994E-04 -autotroph_settings(2)%kPO4 = 0.50000000000000003E-01 -autotroph_settings(2)%kDOP = 0.50000000000000000E+00 -autotroph_settings(2)%kNO3 = 0.50000000000000000E+00 -autotroph_settings(2)%kNH4 = 0.50000000000000003E-01 -autotroph_settings(2)%kSiO3 = 0.69999999999999996E+00 -autotroph_settings(2)%kCO2 = 0.00000000000000000E+00 -autotroph_settings(2)%Qp_fixed = 0.85470085470085479E-02 -autotroph_settings(2)%gQfe_0 = 0.30000000000000001E-04 -autotroph_settings(2)%gQfe_min = 0.25000000000000002E-05 -autotroph_settings(2)%alphaPi_per_day = 0.28000000000000003E+00 -autotroph_settings(2)%PCref_per_day = 0.50000000000000000E+01 -autotroph_settings(2)%thetaN_max = 0.40000000000000000E+01 -autotroph_settings(2)%loss_thres = 0.20000000000000000E-01 -autotroph_settings(2)%loss_thres2 = 0.00000000000000000E+00 -autotroph_settings(2)%temp_thres = -0.10000000000000000E+02 -autotroph_settings(2)%mort_per_day = 0.10000000000000001E+00 -autotroph_settings(2)%mort2_per_day = 0.10000000000000000E-01 -autotroph_settings(2)%agg_rate_max = 0.50000000000000000E+00 -autotroph_settings(2)%agg_rate_min = 0.20000000000000000E-01 -autotroph_settings(2)%loss_poc = 0.00000000000000000E+00 -autotroph_settings(3)%sname = 'diaz' -autotroph_settings(3)%lname = 'Diazotroph' -autotroph_settings(3)%Nfixer = T -autotroph_settings(3)%imp_calcifier = F -autotroph_settings(3)%exp_calcifier = F -autotroph_settings(3)%silicifier = F -autotroph_settings(3)%kFe = 0.45000000000000003E-04 -autotroph_settings(3)%kPO4 = 0.14999999999999999E-01 -autotroph_settings(3)%kDOP = 0.74999999999999997E-01 -autotroph_settings(3)%kNO3 = 0.20000000000000000E+01 -autotroph_settings(3)%kNH4 = 0.20000000000000001E+00 -autotroph_settings(3)%kSiO3 = 0.00000000000000000E+00 -autotroph_settings(3)%kCO2 = 0.00000000000000000E+00 -autotroph_settings(3)%Qp_fixed = 0.27350427350427355E-02 -autotroph_settings(3)%gQfe_0 = 0.60000000000000002E-04 -autotroph_settings(3)%gQfe_min = 0.25000000000000002E-05 -autotroph_settings(3)%alphaPi_per_day = 0.39000000000000001E+00 -autotroph_settings(3)%PCref_per_day = 0.25000000000000000E+01 -autotroph_settings(3)%thetaN_max = 0.25000000000000000E+01 -autotroph_settings(3)%loss_thres = 0.20000000000000000E-01 -autotroph_settings(3)%loss_thres2 = 0.10000000000000000E-02 -autotroph_settings(3)%temp_thres = 0.15000000000000000E+02 -autotroph_settings(3)%mort_per_day = 0.10000000000000001E+00 -autotroph_settings(3)%mort2_per_day = 0.10000000000000000E-01 -autotroph_settings(3)%agg_rate_max = 0.50000000000000000E+00 -autotroph_settings(3)%agg_rate_min = 0.10000000000000000E-01 -autotroph_settings(3)%loss_poc = 0.00000000000000000E+00 -zooplankton_settings(1)%sname = 'zoo' -zooplankton_settings(1)%lname = 'Zooplankton' -zooplankton_settings(1)%z_mort_0_per_day = 0.10000000000000001E+00 -zooplankton_settings(1)%loss_thres = 0.74999999999999997E-01 -zooplankton_settings(1)%z_mort2_0_per_day = 0.40000000000000002E+00 -grazing_relationship_settings(1,1)%sname = 'grz_sp_zoo' -grazing_relationship_settings(1,1)%lname = 'Grazing of sp by zoo' -grazing_relationship_settings(1,1)%auto_ind_cnt = 1 -grazing_relationship_settings(1,1)%zoo_ind_cnt = 0 -grazing_relationship_settings(1,1)%grazing_function = 1 -grazing_relationship_settings(1,1)%z_umax_0_per_day = 0.32999999999999998E+01 -grazing_relationship_settings(1,1)%z_grz = 0.12000000000000000E+01 -grazing_relationship_settings(1,1)%graze_zoo = 0.29999999999999999E+00 -grazing_relationship_settings(1,1)%graze_poc = 0.00000000000000000E+00 -grazing_relationship_settings(1,1)%graze_doc = 0.59999999999999998E-01 -grazing_relationship_settings(1,1)%f_zoo_detr = 0.12000000000000000E+00 -grazing_relationship_settings(1,1)%auto_ind(1) = 1 -grazing_relationship_settings(2,1)%sname = 'grz_diat_zoo' -grazing_relationship_settings(2,1)%lname = 'Grazing of diat by zoo' -grazing_relationship_settings(2,1)%auto_ind_cnt = 1 -grazing_relationship_settings(2,1)%zoo_ind_cnt = 0 -grazing_relationship_settings(2,1)%grazing_function = 1 -grazing_relationship_settings(2,1)%z_umax_0_per_day = 0.31499999999999999E+01 -grazing_relationship_settings(2,1)%z_grz = 0.12000000000000000E+01 -grazing_relationship_settings(2,1)%graze_zoo = 0.25000000000000000E+00 -grazing_relationship_settings(2,1)%graze_poc = 0.39000000000000001E+00 -grazing_relationship_settings(2,1)%graze_doc = 0.59999999999999998E-01 -grazing_relationship_settings(2,1)%f_zoo_detr = 0.23999999999999999E+00 -grazing_relationship_settings(2,1)%auto_ind(1) = 2 -grazing_relationship_settings(3,1)%sname = 'grz_diaz_zoo' -grazing_relationship_settings(3,1)%lname = 'Grazing of diaz by zoo' -grazing_relationship_settings(3,1)%auto_ind_cnt = 1 -grazing_relationship_settings(3,1)%zoo_ind_cnt = 0 -grazing_relationship_settings(3,1)%grazing_function = 1 -grazing_relationship_settings(3,1)%z_umax_0_per_day = 0.32999999999999998E+01 -grazing_relationship_settings(3,1)%z_grz = 0.12000000000000000E+01 -grazing_relationship_settings(3,1)%graze_zoo = 0.29999999999999999E+00 -grazing_relationship_settings(3,1)%graze_poc = 0.10000000000000001E+00 -grazing_relationship_settings(3,1)%graze_doc = 0.59999999999999998E-01 -grazing_relationship_settings(3,1)%f_zoo_detr = 0.12000000000000000E+00 -grazing_relationship_settings(3,1)%auto_ind(1) = 3 -tracer_restore_vars(1) = '' -tracer_restore_vars(2) = '' -tracer_restore_vars(3) = '' -tracer_restore_vars(4) = '' -tracer_restore_vars(5) = '' -tracer_restore_vars(6) = '' -tracer_restore_vars(7) = '' -tracer_restore_vars(8) = '' -tracer_restore_vars(9) = '' -tracer_restore_vars(10) = '' -tracer_restore_vars(11) = '' -tracer_restore_vars(12) = '' -tracer_restore_vars(13) = '' -tracer_restore_vars(14) = '' -tracer_restore_vars(15) = '' -tracer_restore_vars(16) = '' -tracer_restore_vars(17) = '' -tracer_restore_vars(18) = '' -tracer_restore_vars(19) = '' -tracer_restore_vars(20) = '' -tracer_restore_vars(21) = '' -tracer_restore_vars(22) = '' -tracer_restore_vars(23) = '' -tracer_restore_vars(24) = '' -tracer_restore_vars(25) = '' -tracer_restore_vars(26) = '' -tracer_restore_vars(27) = '' -tracer_restore_vars(28) = '' -tracer_restore_vars(29) = '' -tracer_restore_vars(30) = '' -tracer_restore_vars(31) = '' -tracer_restore_vars(32) = '' diff --git a/tests/regression_tests/gen_settings_file/marbl_settings.user_nl_marbl b/tests/regression_tests/gen_settings_file/marbl_settings.user_nl_marbl deleted file mode 100644 index bdc26d33..00000000 --- a/tests/regression_tests/gen_settings_file/marbl_settings.user_nl_marbl +++ /dev/null @@ -1,336 +0,0 @@ -PFT_defaults = 'user-specified' -ciso_on = F -lsource_sink = T -lecovars_full_depth_tavg = F -ciso_lsource_sink = T -lflux_gas_o2 = T -lflux_gas_co2 = T -lcompute_nhx_surface_emis = T -lvariable_PtoC = T -ladjust_bury_coeff = F -lo2_consumption_scalef = F -lp_remin_scalef = F -init_bury_coeff_opt = 'settings_file' -particulate_flux_ref_depth = 100 -Jint_Ctot_thres_molpm2pyr = 0.10000000000000001E-08 -gQsi_0 = 0.13700000000000001E+00 -gQsi_max = 0.82199999999999995E+00 -gQsi_min = 0.45699999999999998E-01 -gQ_Fe_kFe_thres = 0.10000000000000000E+02 -gQ_Si_kSi_thres = 0.60000000000000000E+01 -parm_Fe_bioavail = 0.10000000000000000E+01 -parm_o2_min = 0.50000000000000000E+01 -parm_o2_min_delta = 0.50000000000000000E+01 -parm_kappa_nitrif_per_day = 0.59999999999999998E-01 -parm_nitrif_par_lim = 0.10000000000000000E+01 -parm_labile_ratio = 0.93999999999999995E+00 -parm_init_POC_bury_coeff = 0.25400000000000000E+01 -parm_init_POP_bury_coeff = 0.35999999999999999E+00 -parm_init_bSi_bury_coeff = 0.15300000000000000E+01 -parm_Fe_scavenge_rate0 = 0.22000000000000000E+02 -parm_Lig_scavenge_rate0 = 0.14999999999999999E-01 -parm_FeLig_scavenge_rate0 = 0.12000000000000000E+01 -parm_Lig_degrade_rate0 = 0.93999999999999994E-04 -parm_Fe_desorption_rate0 = 0.99999999999999995E-06 -parm_f_prod_sp_CaCO3 = 0.70000000000000007E-01 -parm_POC_diss = 0.10000000000000000E+05 -parm_SiO2_diss = 0.65000000000000000E+05 -parm_SiO2_gamma = 0.00000000000000000E+00 -parm_hPOC_SiO2_ratio = 0.10000000000000000E-01 -parm_CaCO3_diss = 0.50000000000000000E+05 -parm_CaCO3_gamma = 0.20000000000000000E-01 -parm_hPOC_CaCO3_ratio = 0.10000000000000000E-01 -parm_hPOC_dust_ratio = 0.10000000000000000E-01 -o2_sf_o2_range_hi = 0.45000000000000000E+02 -o2_sf_o2_range_lo = 0.50000000000000000E+01 -o2_sf_val_lo_o2 = 0.26000000000000001E+01 -parm_sed_denitrif_coeff = 0.10000000000000000E+01 -bury_coeff_rmean_timescale_years = 0.10000000000000000E+02 -parm_scalelen_z(1) = 0.10000000000000000E+05 -parm_scalelen_z(2) = 0.25000000000000000E+05 -parm_scalelen_z(3) = 0.50000000000000000E+05 -parm_scalelen_z(4) = 0.10000000000000000E+06 -parm_scalelen_vals(1) = 0.10000000000000000E+01 -parm_scalelen_vals(2) = 0.36000000000000001E+01 -parm_scalelen_vals(3) = 0.47000000000000002E+01 -parm_scalelen_vals(4) = 0.47999999999999998E+01 -caco3_bury_thres_opt = 'omega_calc' -caco3_bury_thres_depth = 0.30000000000000000E+06 -caco3_bury_thres_omega_calc = 0.89000000000000001E+00 -PON_bury_coeff = 0.50000000000000000E+00 -POM_bury_frac_max = 0.80000000000000004E+00 -bSi_bury_frac_max = 0.10000000000000000E+01 -ciso_fract_factors = 'Laws' -auto_mort2_exp = 0.17500000000000000E+01 -zoo_mort2_exp = 0.20000000000000000E+01 -QCaCO3_max = 0.10000000000000000E+01 -f_graze_CaCO3_remin = 0.50000000000000000E+00 -autotroph_cnt = 4 -zooplankton_cnt = 2 -max_grazer_prey_cnt = 4 -autotroph_settings(1)%sname = 'sp' -autotroph_settings(1)%lname = 'Small Phyto' -autotroph_settings(1)%temp_func_form_opt = 'q_10' -autotroph_settings(1)%Nfixer = F -autotroph_settings(1)%imp_calcifier = F -autotroph_settings(1)%exp_calcifier = F -autotroph_settings(1)%silicifier = F -autotroph_settings(1)%is_carbon_limited = F -autotroph_settings(1)%kFe = 0.30000000000000001E-04 -autotroph_settings(1)%kPO4 = 0.10000000000000000E-01 -autotroph_settings(1)%kDOP = 0.29999999999999999E+00 -autotroph_settings(1)%kNO3 = 0.20000000000000001E+00 -autotroph_settings(1)%kNH4 = 0.10000000000000000E-01 -autotroph_settings(1)%kSiO3 = 0.00000000000000000E+00 -autotroph_settings(1)%kCO2 = 0.00000000000000000E+00 -autotroph_settings(1)%Qp_fixed = 0.85470085470085479E-02 -autotroph_settings(1)%gQfe_0 = 0.30000000000000001E-04 -autotroph_settings(1)%gQfe_min = 0.25000000000000002E-05 -autotroph_settings(1)%alphaPI_per_day = 0.34999999999999998E+00 -autotroph_settings(1)%PCref_per_day = 0.47999999999999998E+01 -autotroph_settings(1)%thetaN_max = 0.25000000000000000E+01 -autotroph_settings(1)%loss_thres = 0.10000000000000000E-01 -autotroph_settings(1)%loss_thres2 = 0.00000000000000000E+00 -autotroph_settings(1)%temp_thres = -0.10000000000000000E+02 -autotroph_settings(1)%mort_per_day = 0.10000000000000001E+00 -autotroph_settings(1)%mort2_per_day = 0.10000000000000000E-01 -autotroph_settings(1)%agg_rate_max = 0.50000000000000000E+00 -autotroph_settings(1)%agg_rate_min = 0.10000000000000000E-01 -autotroph_settings(1)%loss_poc = 0.00000000000000000E+00 -autotroph_settings(1)%Ea = 0.32000000000000001E+00 -autotroph_settings(2)%sname = 'diat' -autotroph_settings(2)%lname = 'Diatom' -autotroph_settings(2)%temp_func_form_opt = 'q_10' -autotroph_settings(2)%Nfixer = F -autotroph_settings(2)%imp_calcifier = F -autotroph_settings(2)%exp_calcifier = F -autotroph_settings(2)%silicifier = T -autotroph_settings(2)%is_carbon_limited = F -autotroph_settings(2)%kFe = 0.50000000000000002E-04 -autotroph_settings(2)%kPO4 = 0.50000000000000003E-01 -autotroph_settings(2)%kDOP = 0.50000000000000000E+00 -autotroph_settings(2)%kNO3 = 0.40000000000000002E+00 -autotroph_settings(2)%kNH4 = 0.50000000000000003E-01 -autotroph_settings(2)%kSiO3 = 0.16000000000000001E+01 -autotroph_settings(2)%kCO2 = 0.00000000000000000E+00 -autotroph_settings(2)%Qp_fixed = 0.85470085470085479E-02 -autotroph_settings(2)%gQfe_0 = 0.30000000000000001E-04 -autotroph_settings(2)%gQfe_min = 0.25000000000000002E-05 -autotroph_settings(2)%alphaPI_per_day = 0.39000000000000001E+00 -autotroph_settings(2)%PCref_per_day = 0.52999999999999998E+01 -autotroph_settings(2)%thetaN_max = 0.40000000000000000E+01 -autotroph_settings(2)%loss_thres = 0.20000000000000000E-01 -autotroph_settings(2)%loss_thres2 = 0.00000000000000000E+00 -autotroph_settings(2)%temp_thres = -0.10000000000000000E+02 -autotroph_settings(2)%mort_per_day = 0.10000000000000001E+00 -autotroph_settings(2)%mort2_per_day = 0.10000000000000000E-01 -autotroph_settings(2)%agg_rate_max = 0.50000000000000000E+00 -autotroph_settings(2)%agg_rate_min = 0.20000000000000000E-01 -autotroph_settings(2)%loss_poc = 0.00000000000000000E+00 -autotroph_settings(2)%Ea = 0.32000000000000001E+00 -autotroph_settings(3)%sname = 'diaz' -autotroph_settings(3)%lname = 'Diazotroph' -autotroph_settings(3)%temp_func_form_opt = 'q_10' -autotroph_settings(3)%Nfixer = T -autotroph_settings(3)%imp_calcifier = F -autotroph_settings(3)%exp_calcifier = F -autotroph_settings(3)%silicifier = F -autotroph_settings(3)%is_carbon_limited = F -autotroph_settings(3)%kFe = 0.45000000000000003E-04 -autotroph_settings(3)%kPO4 = 0.14999999999999999E-01 -autotroph_settings(3)%kDOP = 0.74999999999999997E-01 -autotroph_settings(3)%kNO3 = 0.20000000000000000E+01 -autotroph_settings(3)%kNH4 = 0.20000000000000001E+00 -autotroph_settings(3)%kSiO3 = 0.00000000000000000E+00 -autotroph_settings(3)%kCO2 = 0.00000000000000000E+00 -autotroph_settings(3)%Qp_fixed = 0.27350427350427355E-02 -autotroph_settings(3)%gQfe_0 = 0.60000000000000002E-04 -autotroph_settings(3)%gQfe_min = 0.25000000000000002E-05 -autotroph_settings(3)%alphaPI_per_day = 0.31000000000000000E+00 -autotroph_settings(3)%PCref_per_day = 0.16000000000000001E+01 -autotroph_settings(3)%thetaN_max = 0.25000000000000000E+01 -autotroph_settings(3)%loss_thres = 0.20000000000000000E-01 -autotroph_settings(3)%loss_thres2 = 0.10000000000000000E-02 -autotroph_settings(3)%temp_thres = 0.15000000000000000E+02 -autotroph_settings(3)%mort_per_day = 0.10000000000000001E+00 -autotroph_settings(3)%mort2_per_day = 0.10000000000000000E-01 -autotroph_settings(3)%agg_rate_max = 0.50000000000000000E+00 -autotroph_settings(3)%agg_rate_min = 0.10000000000000000E-01 -autotroph_settings(3)%loss_poc = 0.00000000000000000E+00 -autotroph_settings(3)%Ea = 0.32000000000000001E+00 -autotroph_settings(4)%sname = 'cocco' -autotroph_settings(4)%lname = 'Coccolithophores' -autotroph_settings(4)%temp_func_form_opt = 'power' -autotroph_settings(4)%Nfixer = F -autotroph_settings(4)%imp_calcifier = F -autotroph_settings(4)%exp_calcifier = T -autotroph_settings(4)%silicifier = F -autotroph_settings(4)%is_carbon_limited = T -autotroph_settings(4)%kFe = 0.31999999999999999E-04 -autotroph_settings(4)%kPO4 = 0.60000000000000001E-02 -autotroph_settings(4)%kDOP = 0.25000000000000000E+00 -autotroph_settings(4)%kNO3 = 0.40999999999999998E+00 -autotroph_settings(4)%kNH4 = 0.10000000000000000E-01 -autotroph_settings(4)%kSiO3 = 0.00000000000000000E+00 -autotroph_settings(4)%kCO2 = 0.10000000000000000E+01 -autotroph_settings(4)%Qp_fixed = 0.85470085470085479E-02 -autotroph_settings(4)%gQfe_0 = 0.30000000000000001E-04 -autotroph_settings(4)%gQfe_min = 0.25000000000000002E-05 -autotroph_settings(4)%alphaPI_per_day = 0.31000000000000000E+00 -autotroph_settings(4)%PCref_per_day = 0.47000000000000002E+01 -autotroph_settings(4)%thetaN_max = 0.37999999999999998E+01 -autotroph_settings(4)%loss_thres = 0.10000000000000000E-01 -autotroph_settings(4)%loss_thres2 = 0.00000000000000000E+00 -autotroph_settings(4)%temp_thres = 0.00000000000000000E+00 -autotroph_settings(4)%mort_per_day = 0.10000000000000001E+00 -autotroph_settings(4)%mort2_per_day = 0.10000000000000000E-01 -autotroph_settings(4)%agg_rate_max = 0.50000000000000000E+00 -autotroph_settings(4)%agg_rate_min = 0.10000000000000000E-01 -autotroph_settings(4)%loss_poc = 0.00000000000000000E+00 -autotroph_settings(4)%Ea = 0.32000000000000001E+00 -zooplankton_settings(1)%sname = 'microzoo' -zooplankton_settings(1)%lname = 'Microzooplankton' -zooplankton_settings(1)%temp_func_form_opt = 'q_10' -zooplankton_settings(1)%z_mort_0_per_day = 0.10000000000000001E+00 -zooplankton_settings(1)%loss_thres = 0.74999999999999997E-01 -zooplankton_settings(1)%z_mort2_0_per_day = 0.28000000000000000E-02 -zooplankton_settings(1)%Ea = 0.55000000000000004E+00 -zooplankton_settings(2)%sname = 'mesozoo' -zooplankton_settings(2)%lname = 'Mesozooplankton' -zooplankton_settings(2)%temp_func_form_opt = 'q_10' -zooplankton_settings(2)%z_mort_0_per_day = 0.35000000000000003E-01 -zooplankton_settings(2)%loss_thres = 0.74999999999999997E-01 -zooplankton_settings(2)%z_mort2_0_per_day = 0.20000000000000000E-01 -zooplankton_settings(2)%Ea = 0.55000000000000004E+00 -grazing_relationship_settings(1,1)%sname = 'grz_sp_microzoo' -grazing_relationship_settings(1,1)%lname = 'Grazing of sp by microzoo' -grazing_relationship_settings(1,1)%auto_ind_cnt = 1 -grazing_relationship_settings(1,1)%zoo_ind_cnt = 0 -grazing_relationship_settings(1,1)%grazing_function = 2 -grazing_relationship_settings(1,1)%z_umax_0_per_day = 0.40999999999999996E+01 -grazing_relationship_settings(1,1)%z_grz = 0.13999999999999999E+01 -grazing_relationship_settings(1,1)%graze_zoo = 0.34999999999999998E+00 -grazing_relationship_settings(1,1)%graze_poc = 0.10000000000000000E-01 -grazing_relationship_settings(1,1)%graze_doc = 0.57000000000000002E-01 -grazing_relationship_settings(1,1)%f_zoo_detr = 0.17000000000000001E+00 -grazing_relationship_settings(1,1)%auto_ind(1) = 1 -grazing_relationship_settings(2,1)%sname = 'grz_diaz_microzoo' -grazing_relationship_settings(2,1)%lname = 'Grazing of diaz by microzoo' -grazing_relationship_settings(2,1)%auto_ind_cnt = 1 -grazing_relationship_settings(2,1)%zoo_ind_cnt = 0 -grazing_relationship_settings(2,1)%grazing_function = 1 -grazing_relationship_settings(2,1)%z_umax_0_per_day = 0.10000000000000000E+01 -grazing_relationship_settings(2,1)%z_grz = 0.12000000000000000E+01 -grazing_relationship_settings(2,1)%graze_zoo = 0.34999999999999998E+00 -grazing_relationship_settings(2,1)%graze_poc = 0.10000000000000000E-01 -grazing_relationship_settings(2,1)%graze_doc = 0.57000000000000002E-01 -grazing_relationship_settings(2,1)%f_zoo_detr = 0.17000000000000001E+00 -grazing_relationship_settings(2,1)%auto_ind(1) = 3 -grazing_relationship_settings(3,1)%sname = 'grz_cocco_microzoo' -grazing_relationship_settings(3,1)%lname = 'Grazing of cocco by microzoo' -grazing_relationship_settings(3,1)%auto_ind_cnt = 1 -grazing_relationship_settings(3,1)%zoo_ind_cnt = 0 -grazing_relationship_settings(3,1)%grazing_function = 1 -grazing_relationship_settings(3,1)%z_umax_0_per_day = 0.17000000000000000E+01 -grazing_relationship_settings(3,1)%z_grz = 0.15000000000000000E+01 -grazing_relationship_settings(3,1)%graze_zoo = 0.25000000000000000E+00 -grazing_relationship_settings(3,1)%graze_poc = 0.17999999999999999E+00 -grazing_relationship_settings(3,1)%graze_doc = 0.89999999999999997E-01 -grazing_relationship_settings(3,1)%f_zoo_detr = 0.27000000000000002E+00 -grazing_relationship_settings(3,1)%auto_ind(1) = 4 -grazing_relationship_settings(4,1)%sname = 'null' -grazing_relationship_settings(4,1)%lname = 'null' -grazing_relationship_settings(4,1)%auto_ind_cnt = 0 -grazing_relationship_settings(4,1)%zoo_ind_cnt = 0 -grazing_relationship_settings(4,1)%grazing_function = 1 -grazing_relationship_settings(4,1)%z_umax_0_per_day = 0.00000000000000000E+00 -grazing_relationship_settings(4,1)%z_grz = 0.00000000000000000E+00 -grazing_relationship_settings(4,1)%graze_zoo = 0.00000000000000000E+00 -grazing_relationship_settings(4,1)%graze_poc = 0.00000000000000000E+00 -grazing_relationship_settings(4,1)%graze_doc = 0.00000000000000000E+00 -grazing_relationship_settings(4,1)%f_zoo_detr = 0.00000000000000000E+00 -grazing_relationship_settings(1,2)%sname = 'grz_diat_mesozoo' -grazing_relationship_settings(1,2)%lname = 'Grazing of diat by mesozoo' -grazing_relationship_settings(1,2)%auto_ind_cnt = 1 -grazing_relationship_settings(1,2)%zoo_ind_cnt = 0 -grazing_relationship_settings(1,2)%grazing_function = 1 -grazing_relationship_settings(1,2)%z_umax_0_per_day = 0.90000000000000002E+00 -grazing_relationship_settings(1,2)%z_grz = 0.10000000000000000E+01 -grazing_relationship_settings(1,2)%graze_zoo = 0.25000000000000000E+00 -grazing_relationship_settings(1,2)%graze_poc = 0.28000000000000003E+00 -grazing_relationship_settings(1,2)%graze_doc = 0.89999999999999997E-01 -grazing_relationship_settings(1,2)%f_zoo_detr = 0.40000000000000002E+00 -grazing_relationship_settings(1,2)%auto_ind(1) = 2 -grazing_relationship_settings(2,2)%sname = 'grz_cocco_mesozoo' -grazing_relationship_settings(2,2)%lname = 'Grazing of cocco by mesozoo' -grazing_relationship_settings(2,2)%auto_ind_cnt = 1 -grazing_relationship_settings(2,2)%zoo_ind_cnt = 0 -grazing_relationship_settings(2,2)%grazing_function = 1 -grazing_relationship_settings(2,2)%z_umax_0_per_day = 0.14999999999999999E-01 -grazing_relationship_settings(2,2)%z_grz = 0.13999999999999999E+01 -grazing_relationship_settings(2,2)%graze_zoo = 0.25000000000000000E+00 -grazing_relationship_settings(2,2)%graze_poc = 0.17999999999999999E+00 -grazing_relationship_settings(2,2)%graze_doc = 0.89999999999999997E-01 -grazing_relationship_settings(2,2)%f_zoo_detr = 0.27000000000000002E+00 -grazing_relationship_settings(2,2)%auto_ind(1) = 4 -grazing_relationship_settings(3,2)%sname = 'grz_diaz_mesozoo' -grazing_relationship_settings(3,2)%lname = 'Grazing of diaz by mesozoo' -grazing_relationship_settings(3,2)%auto_ind_cnt = 1 -grazing_relationship_settings(3,2)%zoo_ind_cnt = 0 -grazing_relationship_settings(3,2)%grazing_function = 1 -grazing_relationship_settings(3,2)%z_umax_0_per_day = 0.50000000000000000E+00 -grazing_relationship_settings(3,2)%z_grz = 0.12000000000000000E+01 -grazing_relationship_settings(3,2)%graze_zoo = 0.25000000000000000E+00 -grazing_relationship_settings(3,2)%graze_poc = 0.17999999999999999E+00 -grazing_relationship_settings(3,2)%graze_doc = 0.89999999999999997E-01 -grazing_relationship_settings(3,2)%f_zoo_detr = 0.40000000000000002E+00 -grazing_relationship_settings(3,2)%auto_ind(1) = 3 -grazing_relationship_settings(4,2)%sname = 'grz_microzoo_mesozoo' -grazing_relationship_settings(4,2)%lname = 'Predation of microzoo by mesozoo' -grazing_relationship_settings(4,2)%auto_ind_cnt = 0 -grazing_relationship_settings(4,2)%zoo_ind_cnt = 1 -grazing_relationship_settings(4,2)%grazing_function = 1 -grazing_relationship_settings(4,2)%z_umax_0_per_day = 0.20000000000000001E+00 -grazing_relationship_settings(4,2)%z_grz = 0.13000000000000000E+01 -grazing_relationship_settings(4,2)%graze_zoo = 0.25000000000000000E+00 -grazing_relationship_settings(4,2)%graze_poc = 0.28000000000000003E+00 -grazing_relationship_settings(4,2)%graze_doc = 0.89999999999999997E-01 -grazing_relationship_settings(4,2)%f_zoo_detr = 0.27000000000000002E+00 -grazing_relationship_settings(4,2)%zoo_ind(1) = 1 -tracer_restore_vars(1) = '' -tracer_restore_vars(2) = '' -tracer_restore_vars(3) = '' -tracer_restore_vars(4) = '' -tracer_restore_vars(5) = '' -tracer_restore_vars(6) = '' -tracer_restore_vars(7) = '' -tracer_restore_vars(8) = '' -tracer_restore_vars(9) = '' -tracer_restore_vars(10) = '' -tracer_restore_vars(11) = '' -tracer_restore_vars(12) = '' -tracer_restore_vars(13) = '' -tracer_restore_vars(14) = '' -tracer_restore_vars(15) = '' -tracer_restore_vars(16) = '' -tracer_restore_vars(17) = '' -tracer_restore_vars(18) = '' -tracer_restore_vars(19) = '' -tracer_restore_vars(20) = '' -tracer_restore_vars(21) = '' -tracer_restore_vars(22) = '' -tracer_restore_vars(23) = '' -tracer_restore_vars(24) = '' -tracer_restore_vars(25) = '' -tracer_restore_vars(26) = '' -tracer_restore_vars(27) = '' -tracer_restore_vars(28) = '' -tracer_restore_vars(29) = '' -tracer_restore_vars(30) = '' -tracer_restore_vars(31) = '' -tracer_restore_vars(32) = '' -tracer_restore_vars(33) = '' -tracer_restore_vars(34) = '' -tracer_restore_vars(35) = '' -tracer_restore_vars(36) = '' -tracer_restore_vars(37) = '' From 556c35bd12d7d350141bf694a68c8d0b3e728814 Mon Sep 17 00:00:00 2001 From: Michael Levy Date: Wed, 26 Apr 2023 14:12:09 -0600 Subject: [PATCH 07/13] Updates to correctly process 4p2z yaml 1. MARBL_settings_file_class.py needs to recognize CESM2+4p2z as valid PFT_defaults setting; also, need to allow case where the number of grazing relationships is less than max_grazer_prey_cnt * zooplankton_cnt (e.g. only 7 of the potential 8 relationships with 4 prey and 2 zooplankton are defined) 2. settings_latest+4p2z.{yaml,json} also need to handle fewer than max grazing relationships; done by adding "null" as valid grazer_sname 3. marbl_settings_mod.F90 also needs to recognize CESM2+4p2z as valid PFT_defaults setting --- MARBL_tools/MARBL_settings_file_class.py | 4 +++- defaults/json/settings_latest+4p2z.json | 10 ++++++++++ defaults/settings_latest+4p2z.yaml | 10 ++++++++++ src/marbl_settings_mod.F90 | 2 +- 4 files changed, 24 insertions(+), 2 deletions(-) diff --git a/MARBL_tools/MARBL_settings_file_class.py b/MARBL_tools/MARBL_settings_file_class.py index 2ac2a7e8..f0f2facd 100644 --- a/MARBL_tools/MARBL_settings_file_class.py +++ b/MARBL_tools/MARBL_settings_file_class.py @@ -227,7 +227,7 @@ def _process_variable_value(self, category_name, variable_name): # Process derived type! # Check to see if PFT_defaults leads to specific PFT declarations if (category_name == "PFT_derived_types"): - for valid_PFT_default in ["CESM2", "CESM2+cocco"]: + for valid_PFT_default in ["CESM2", "CESM2+cocco", "CESM2+4p2z"]: append_to_keys = 'PFT_defaults == "{}"'.format(valid_PFT_default) in self._config_keyword if append_to_keys: settings_key = '_{}_PFT_keys'.format(valid_PFT_default) @@ -237,6 +237,8 @@ def _process_variable_value(self, category_name, variable_name): # Is the derived type an array? If so, treat each entry separately if ("_array_shape" in this_var.keys()): for n, elem_index in enumerate(_get_array_info(this_var["_array_shape"], self.settings_dict, self.tracers_dict)): + if n < len(PFT_keys): + PFT_keys.append('null') # Append "(index)" to variable name base_name = "%s%s%%" % (variable_name, elem_index) diff --git a/defaults/json/settings_latest+4p2z.json b/defaults/json/settings_latest+4p2z.json index c501b56e..86c78c0c 100644 --- a/defaults/json/settings_latest+4p2z.json +++ b/defaults/json/settings_latest+4p2z.json @@ -449,6 +449,7 @@ "auto_ind_cnt": { "datatype": "integer", "default_value": { + "((grazer_sname)) == \"null\"": 0, "default": 4 }, "longname": "Number of autotrophs being grazed", @@ -464,6 +465,7 @@ "((grazer_sname)) == \"diaz_mesozoo\"": 0.12, "((grazer_sname)) == \"diaz_microzoo\"": 0.17, "((grazer_sname)) == \"microzoo_mesozoo\"": 0.27, + "((grazer_sname)) == \"null\"": 0, "((grazer_sname)) == \"sp_microzoo\"": 0.17, "default": "1e34" }, @@ -480,6 +482,7 @@ "((grazer_sname)) == \"diaz_mesozoo\"": 0.09, "((grazer_sname)) == \"diaz_microzoo\"": 0.057, "((grazer_sname)) == \"microzoo_mesozoo\"": 0.09, + "((grazer_sname)) == \"null\"": 0, "((grazer_sname)) == \"sp_microzoo\"": 0.057, "default": "1e34" }, @@ -496,6 +499,7 @@ "((grazer_sname)) == \"diaz_mesozoo\"": 0.18, "((grazer_sname)) == \"diaz_microzoo\"": 0.01, "((grazer_sname)) == \"microzoo_mesozoo\"": 0.28, + "((grazer_sname)) == \"null\"": 0, "((grazer_sname)) == \"sp_microzoo\"": 0.01, "default": "1e34" }, @@ -512,6 +516,7 @@ "((grazer_sname)) == \"diaz_mesozoo\"": 0.25, "((grazer_sname)) == \"diaz_microzoo\"": 0.35, "((grazer_sname)) == \"microzoo_mesozoo\"": 0.25, + "((grazer_sname)) == \"null\"": 0, "((grazer_sname)) == \"sp_microzoo\"": 0.35, "default": "1e34" }, @@ -539,6 +544,7 @@ "((grazer_sname)) == \"diaz_mesozoo\"": "Grazing of diaz by mesozoo", "((grazer_sname)) == \"diaz_microzoo\"": "Grazing of diaz by microzoo", "((grazer_sname)) == \"microzoo_mesozoo\"": "Grazing of microzoo by mesozoo", + "((grazer_sname)) == \"null\"": "null", "((grazer_sname)) == \"sp_microzoo\"": "Grazing of sp by microzoo", "default": "UNSET" }, @@ -555,6 +561,7 @@ "((grazer_sname)) == \"diaz_mesozoo\"": "grz_diaz_mesozoo", "((grazer_sname)) == \"diaz_microzoo\"": "grz_diaz_microzoo", "((grazer_sname)) == \"microzoo_mesozoo\"": "grz_microzoo_mesozoo", + "((grazer_sname)) == \"null\"": "null", "((grazer_sname)) == \"sp_microzoo\"": "grz_sp_microzoo", "default": "UNSET" }, @@ -571,6 +578,7 @@ "((grazer_sname)) == \"diaz_mesozoo\"": 1.2, "((grazer_sname)) == \"diaz_microzoo\"": 1.2, "((grazer_sname)) == \"microzoo_mesozoo\"": 1.3, + "((grazer_sname)) == \"null\"": 0, "((grazer_sname)) == \"sp_microzoo\"": 1.4, "default": "1e34" }, @@ -587,6 +595,7 @@ "((grazer_sname)) == \"diaz_mesozoo\"": 0.5, "((grazer_sname)) == \"diaz_microzoo\"": 1, "((grazer_sname)) == \"microzoo_mesozoo\"": 0.2, + "((grazer_sname)) == \"null\"": 0, "((grazer_sname)) == \"sp_microzoo\"": 4.1, "default": "1e34" }, @@ -610,6 +619,7 @@ "zoo_ind_cnt": { "datatype": "integer", "default_value": { + "((grazer_sname)) == \"null\"": 0, "default": 1 }, "longname": "Number of zooplankton being grazed", diff --git a/defaults/settings_latest+4p2z.yaml b/defaults/settings_latest+4p2z.yaml index 3eae3f32..be5faeaa 100644 --- a/defaults/settings_latest+4p2z.yaml +++ b/defaults/settings_latest+4p2z.yaml @@ -1085,6 +1085,7 @@ PFT_derived_types : ((grazer_sname)) == "cocco_microzoo" : grz_cocco_microzoo ((grazer_sname)) == "cocco_mesozoo" : grz_cocco_mesozoo ((grazer_sname)) == "microzoo_mesozoo" : grz_microzoo_mesozoo + ((grazer_sname)) == "null" : "null" lname : longname : Long name of the grazing relationship subcategory : 12. grazing @@ -1099,6 +1100,7 @@ PFT_derived_types : ((grazer_sname)) == "cocco_microzoo" : Grazing of cocco by microzoo ((grazer_sname)) == "cocco_mesozoo" : Grazing of cocco by mesozoo ((grazer_sname)) == "microzoo_mesozoo" : Grazing of microzoo by mesozoo + ((grazer_sname)) == "null" : "null" auto_ind_cnt : longname : Number of autotrophs being grazed subcategory : 12. grazing @@ -1106,6 +1108,7 @@ PFT_derived_types : datatype : integer default_value : default : 4 + ((grazer_sname)) == "null" : 0 zoo_ind_cnt : longname : Number of zooplankton being grazed subcategory : 12. grazing @@ -1113,6 +1116,7 @@ PFT_derived_types : datatype : integer default_value : default : 1 + ((grazer_sname)) == "null" : 0 grazing_function : longname : Functional form of grazing parameterization subcategory : 12. grazing @@ -1136,6 +1140,7 @@ PFT_derived_types : ((grazer_sname)) == "cocco_microzoo" : 1.7 ((grazer_sname)) == "cocco_mesozoo" : 0.015 ((grazer_sname)) == "microzoo_mesozoo" : 0.2 + ((grazer_sname)) == "null" : 0 z_grz : longname : Grazing coefficient subcategory : 12. grazing @@ -1150,6 +1155,7 @@ PFT_derived_types : ((grazer_sname)) == "cocco_microzoo" : 1.5 ((grazer_sname)) == "cocco_mesozoo" : 1.4 ((grazer_sname)) == "microzoo_mesozoo" : 1.3 + ((grazer_sname)) == "null" : 0 graze_zoo : longname : Routing of grazed term, remainder goes to dic subcategory : 12. grazing @@ -1164,6 +1170,7 @@ PFT_derived_types : ((grazer_sname)) == "cocco_microzoo" : 0.25 ((grazer_sname)) == "cocco_mesozoo" : 0.25 ((grazer_sname)) == "microzoo_mesozoo" : 0.25 + ((grazer_sname)) == "null" : 0 graze_poc : longname : Routing of grazed term, remainder goes to dic subcategory : 12. grazing @@ -1178,6 +1185,7 @@ PFT_derived_types : ((grazer_sname)) == "cocco_microzoo" : 0.18 ((grazer_sname)) == "cocco_mesozoo" : 0.18 ((grazer_sname)) == "microzoo_mesozoo" : 0.28 + ((grazer_sname)) == "null" : 0 graze_doc : longname : Routing of grazed term, remainder goes to dic subcategory : 12. grazing @@ -1192,6 +1200,7 @@ PFT_derived_types : ((grazer_sname)) == "cocco_microzoo" : 0.09 ((grazer_sname)) == "cocco_mesozoo" : 0.09 ((grazer_sname)) == "microzoo_mesozoo" : 0.09 + ((grazer_sname)) == "null" : 0 f_zoo_detr : longname : Fraction of zoo losses to detrital subcategory : 12. grazing @@ -1206,6 +1215,7 @@ PFT_derived_types : ((grazer_sname)) == "cocco_microzoo" : 0.27 ((grazer_sname)) == "cocco_mesozoo" : 0.27 ((grazer_sname)) == "microzoo_mesozoo" : 0.27 + ((grazer_sname)) == "null" : 0 auto_ind : _array_shape : autotroph_cnt _array_len_to_print : auto_ind_cnt diff --git a/src/marbl_settings_mod.F90 b/src/marbl_settings_mod.F90 index 13071ee2..a0e35b38 100644 --- a/src/marbl_settings_mod.F90 +++ b/src/marbl_settings_mod.F90 @@ -442,7 +442,7 @@ subroutine marbl_settings_set_defaults_PFT_counts(marbl_status_log) character(len=*), parameter :: subname = 'marbl_settings_mod:marbl_settings_set_defaults_PFT_counts' character(len=char_len) :: log_message - if (trim(PFT_defaults) .eq. 'CESM2+cocco') then + if ((trim(PFT_defaults) .eq. 'CESM2+cocco') .or. (trim(PFT_defaults) .eq. 'CESM2+4p2z')) then write(log_message, '(3A)') 'PFT_defaults = "', trim(PFT_defaults), & '" in input file, but being treated as "user-specified"' call marbl_status_log%log_noerror(log_message, subname) From 611959045fd5d5097044d4e44efedc50e304c1d8 Mon Sep 17 00:00:00 2001 From: Michael Levy Date: Wed, 26 Apr 2023 16:01:02 -0600 Subject: [PATCH 08/13] Update default values to match latest tunings There were some default values from the CESM 2.1 version, which hadn't yet been tuned. I think this yaml file matches the marbl_in values found in the 1 degree companion run to the high-res BGC run done on frontera --- defaults/json/settings_latest+4p2z.json | 16 ++++++++-------- defaults/settings_latest+4p2z.yaml | 16 ++++++++-------- 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/defaults/json/settings_latest+4p2z.json b/defaults/json/settings_latest+4p2z.json index 86c78c0c..57e31b0d 100644 --- a/defaults/json/settings_latest+4p2z.json +++ b/defaults/json/settings_latest+4p2z.json @@ -996,7 +996,7 @@ }, "caco3_bury_thres_omega_calc": { "datatype": "real", - "default_value": 0.89, + "default_value": 1.0, "longname": "omega calcite threshold for CaCO3 burial when opt = 'omega_calc'", "subcategory": "4. general parameters", "units": 1 @@ -1228,7 +1228,7 @@ }, "parm_SiO2_diss": { "datatype": "real", - "default_value": "700e2", + "default_value": "650e2", "longname": "Base SiO2 dissolution length scale", "subcategory": "4. general parameters (dissolution)", "units": "cm" @@ -1275,7 +1275,7 @@ "datatype": "real", "default_value": { "GRID == \"CESM_x3\"": 5.0, - "default": 2.54 + "default": 1.1 }, "longname": "Initial scale factor for burial of POC, PON", "subcategory": "4. general parameters (bury coeffs)", @@ -1285,7 +1285,7 @@ "datatype": "real", "default_value": { "GRID == \"CESM_x3\"": 5.0, - "default": 0.36 + "default": 1.1 }, "longname": "Initial scale factor for burial of POP", "subcategory": "4. general parameters (bury coeffs)", @@ -1295,7 +1295,7 @@ "datatype": "real", "default_value": { "GRID == \"CESM_x3\"": 1.1, - "default": 1.53 + "default": 1.0 }, "longname": "Initial scale factor for burial of bSi", "subcategory": "4. general parameters (bury coeffs)", @@ -1348,8 +1348,8 @@ ], "default": [ 1, - 3.6, - 5.0, + 3.2, + 4.8, 5.3 ] }, @@ -1364,7 +1364,7 @@ "100.0e2", "250.0e2", "500.0e2", - "2000.0e2" + "1000.0e2" ], "longname": "Depths of prescribed scalelen values", "subcategory": "5. Scale lengths", diff --git a/defaults/settings_latest+4p2z.yaml b/defaults/settings_latest+4p2z.yaml index be5faeaa..2122a64d 100644 --- a/defaults/settings_latest+4p2z.yaml +++ b/defaults/settings_latest+4p2z.yaml @@ -373,7 +373,7 @@ general_parms : units : unitless datatype : real default_value : # default value is resolution dependent! - default : 2.54 + default : 1.1 GRID == "CESM_x3" : 5.0 parm_init_POP_bury_coeff : longname : Initial scale factor for burial of POP @@ -381,7 +381,7 @@ general_parms : units : unitless datatype : real default_value : # default value is resolution dependent! - default : 0.36 + default : 1.1 GRID == "CESM_x3" : 5.0 parm_init_bSi_bury_coeff : longname : Initial scale factor for burial of bSi @@ -389,7 +389,7 @@ general_parms : units : unitless datatype : real default_value : # default value is resolution dependent! - default : 1.53 + default : 1.0 GRID == "CESM_x3" : 1.1 parm_Fe_scavenge_rate0 : longname : Scavenging base rate for Fe @@ -440,7 +440,7 @@ general_parms : subcategory : 4. general parameters (dissolution) units : cm datatype : real - default_value : 700e2 + default_value : 650e2 parm_SiO2_gamma : longname : SiO2 gamma (fraction of production -> hard subclass) subcategory : 4. general parameters @@ -519,7 +519,7 @@ general_parms : - 100.0e2 - 250.0e2 - 500.0e2 - - 2000.0e2 + - 1000.0e2 parm_scalelen_vals : longname : Prescribed scalelen values subcategory : 5. Scale lengths @@ -529,8 +529,8 @@ general_parms : default_value : default : - 1 - - 3.6 - - 5.0 + - 3.2 + - 4.8 - 5.3 GRID == "CESM_x3" : - 1 @@ -557,7 +557,7 @@ general_parms : subcategory : 4. general parameters units : 1 datatype : real - default_value : 0.89 + default_value : 1.0 PON_bury_coeff : longname : Scale factor for burial of PON subcategory : 4. general parameters (bury coeffs) From 0840fa6d45a5758f85906756e4008cdec1c76c39 Mon Sep 17 00:00:00 2001 From: Michael Levy Date: Thu, 27 Apr 2023 13:01:05 -0600 Subject: [PATCH 09/13] A few more updates to 4p2z settings file * auto_ind_cnt should default to 1, not zero * zoo_ind_cnt should default to 0, not 1 * mesozoo short name should be mesozoo, not repeating microzoo * f_zoo_detr should be .4 for diaz_mesozoo, not 1.2 * need microzoo_mesozoo to be grazing_relationship(4,2) not (4,1) -- the second index must match the zooplankton index of the predator! --- defaults/json/settings_latest+4p2z.json | 16 +++++++++------- defaults/settings_latest+4p2z.yaml | 16 +++++++++------- 2 files changed, 18 insertions(+), 14 deletions(-) diff --git a/defaults/json/settings_latest+4p2z.json b/defaults/json/settings_latest+4p2z.json index 57e31b0d..40550276 100644 --- a/defaults/json/settings_latest+4p2z.json +++ b/defaults/json/settings_latest+4p2z.json @@ -449,8 +449,9 @@ "auto_ind_cnt": { "datatype": "integer", "default_value": { + "((grazer_sname)) == \"microzoo_mesozoo\"": 0, "((grazer_sname)) == \"null\"": 0, - "default": 4 + "default": 1 }, "longname": "Number of autotrophs being grazed", "subcategory": "12. grazing", @@ -462,7 +463,7 @@ "((grazer_sname)) == \"cocco_mesozoo\"": 0.27, "((grazer_sname)) == \"cocco_microzoo\"": 0.27, "((grazer_sname)) == \"diat_mesozoo\"": 0.4, - "((grazer_sname)) == \"diaz_mesozoo\"": 0.12, + "((grazer_sname)) == \"diaz_mesozoo\"": 0.4, "((grazer_sname)) == \"diaz_microzoo\"": 0.17, "((grazer_sname)) == \"microzoo_mesozoo\"": 0.27, "((grazer_sname)) == \"null\"": 0, @@ -619,8 +620,8 @@ "zoo_ind_cnt": { "datatype": "integer", "default_value": { - "((grazer_sname)) == \"null\"": 0, - "default": 1 + "((grazer_sname)) == \"microzoo_mesozoo\"": 1, + "default": 0 }, "longname": "Number of zooplankton being grazed", "subcategory": "12. grazing", @@ -669,7 +670,7 @@ "sname": { "datatype": "string", "default_value": { - "((zooplankton_sname)) == \"mesozoo\"": "microzoo", + "((zooplankton_sname)) == \"mesozoo\"": "mesozoo", "((zooplankton_sname)) == \"microzoo\"": "microzoo", "default": "UNSET" }, @@ -924,9 +925,10 @@ "sp_microzoo", "diat_mesozoo", "diaz_microzoo", - "diaz_mesozoo", - "cocco_microzoo", "cocco_mesozoo", + "cocco_microzoo", + "diaz_mesozoo", + "null", "microzoo_mesozoo" ], "zooplankton_settings": [ diff --git a/defaults/settings_latest+4p2z.yaml b/defaults/settings_latest+4p2z.yaml index 2122a64d..6c157694 100644 --- a/defaults/settings_latest+4p2z.yaml +++ b/defaults/settings_latest+4p2z.yaml @@ -215,9 +215,10 @@ general_parms : - sp_microzoo - diat_mesozoo - diaz_microzoo - - diaz_mesozoo - - cocco_microzoo - cocco_mesozoo + - cocco_microzoo + - diaz_mesozoo + - "null" - microzoo_mesozoo _append_to_config_keywords : true ciso_on : @@ -1005,7 +1006,7 @@ PFT_derived_types : default_value : default : UNSET ((zooplankton_sname)) == "microzoo" : microzoo - ((zooplankton_sname)) == "mesozoo" : microzoo + ((zooplankton_sname)) == "mesozoo" : mesozoo lname : longname : Long name of the zooplankton subcategory : 11. zooplankton @@ -1107,7 +1108,8 @@ PFT_derived_types : units : unitless datatype : integer default_value : - default : 4 + default : 1 + ((grazer_sname)) == "microzoo_mesozoo" : 0 ((grazer_sname)) == "null" : 0 zoo_ind_cnt : longname : Number of zooplankton being grazed @@ -1115,8 +1117,8 @@ PFT_derived_types : units : unitless datatype : integer default_value : - default : 1 - ((grazer_sname)) == "null" : 0 + default : 0 + ((grazer_sname)) == "microzoo_mesozoo" : 1 grazing_function : longname : Functional form of grazing parameterization subcategory : 12. grazing @@ -1211,7 +1213,7 @@ PFT_derived_types : ((grazer_sname)) == "sp_microzoo" : 0.17 ((grazer_sname)) == "diat_mesozoo" : 0.4 ((grazer_sname)) == "diaz_microzoo" : 0.17 - ((grazer_sname)) == "diaz_mesozoo" : 0.12 + ((grazer_sname)) == "diaz_mesozoo" : 0.4 ((grazer_sname)) == "cocco_microzoo" : 0.27 ((grazer_sname)) == "cocco_mesozoo" : 0.27 ((grazer_sname)) == "microzoo_mesozoo" : 0.27 From 788b1edb94688b872e6ccb62a58f0a2260b572c2 Mon Sep 17 00:00:00 2001 From: Michael Levy Date: Fri, 28 Apr 2023 09:35:21 -0600 Subject: [PATCH 10/13] Add new settings to 4p2z settings file After merging in development, there were three new variables to add to settings_latest+4p2z (a basal loss term in zooplankton_settings and two configuration flags) --- defaults/json/settings_latest+4p2z.json | 25 +++++++++++++++++++++++++ defaults/settings_latest+4p2z.yaml | 21 +++++++++++++++++++++ tests/driver_src/marbl.F90 | 2 ++ 3 files changed, 48 insertions(+) diff --git a/defaults/json/settings_latest+4p2z.json b/defaults/json/settings_latest+4p2z.json index 40550276..5ec97ad8 100644 --- a/defaults/json/settings_latest+4p2z.json +++ b/defaults/json/settings_latest+4p2z.json @@ -645,6 +645,17 @@ "units": "eV" }, "_type_name": "zooplankton_settings_type", + "basal_respiration_rate_per_day": { + "datatype": "real", + "default_value": { + "((zooplankton_sname)) == \"mesozoo\"": 0, + "((zooplankton_sname)) == \"microzoo\"": 0, + "default": "1e34" + }, + "longname": "Basal respiration rate", + "subcategory": "11. zooplankton", + "units": "1/day" + }, "lname": { "datatype": "string", "default_value": { @@ -982,6 +993,13 @@ "subcategory": "4. general parameters (bury coeffs)", "units": "unitless" }, + "bftt_dz_sum_thres": { + "datatype": "real", + "default_value": 1e-14, + "longname": "MARBL will abort if abs(1 - sum(bot_flux_to_tend)) exceeds this threshold", + "subcategory": "4. general parameters", + "units": "unitless" + }, "bury_coeff_rmean_timescale_years": { "datatype": "real", "default_value": 10, @@ -1085,6 +1103,13 @@ "subcategory": "2. config flags", "units": "unitless" }, + "lcheck_forcing": { + "datatype": "logical", + "default_value": ".false.", + "longname": "Control whether consistency checks are performed on forcing input (useful for debugging)", + "subcategory": "2. config flags", + "units": "unitless" + }, "lcompute_nhx_surface_emis": { "datatype": "logical", "default_value": ".true.", diff --git a/defaults/settings_latest+4p2z.yaml b/defaults/settings_latest+4p2z.yaml index 6c157694..a5696f34 100644 --- a/defaults/settings_latest+4p2z.yaml +++ b/defaults/settings_latest+4p2z.yaml @@ -239,6 +239,12 @@ general_parms : units : unitless datatype : logical default_value : .true. + lcheck_forcing : + longname : Control whether consistency checks are performed on forcing input (useful for debugging) + subcategory : 2. config flags + units : unitless + datatype : logical + default_value : .false. lecovars_full_depth_tavg : longname : If .false., MARBL will recommend truncating the column for some diagnostics subcategory : 2. config flags @@ -290,6 +296,12 @@ general_parms : units : unitless datatype : logical default_value : .false. + bftt_dz_sum_thres: + longname : MARBL will abort if abs(1 - sum(bot_flux_to_tend)) exceeds this threshold + subcategory : 4. general parameters + units : unitless + datatype : real + default_value : 1.0e-14 Jint_Ctot_thres_molpm2pyr : longname : MARBL will abort if abs(Jint_Ctot) exceeds this threshold subcategory : 4. general parameters @@ -1047,6 +1059,15 @@ PFT_derived_types : default : 1e34 ((zooplankton_sname)) == "microzoo" : 0.0028 ((zooplankton_sname)) == "mesozoo" : 0.02 + basal_respiration_rate_per_day : + longname : Basal respiration rate + subcategory : 11. zooplankton + units : 1/day + datatype : real + default_value : + default : 1e34 + ((zooplankton_sname)) == "microzoo" : 0 + ((zooplankton_sname)) == "mesozoo" : 0 loss_thres : longname : Zoo concentration where losses go to zero subcategory : 11. zooplankton diff --git a/tests/driver_src/marbl.F90 b/tests/driver_src/marbl.F90 index b8bb2212..d7629122 100644 --- a/tests/driver_src/marbl.F90 +++ b/tests/driver_src/marbl.F90 @@ -407,6 +407,8 @@ Program marbl case ('call_compute_subroutines') lprint_marbl_log = .false. call marbl_call_compute_subroutines_test(marbl_instances, hist_file, driver_status_log) + if (driver_status_log%labort_MARBL) & + call marbl_io_print_marbl_log(driver_status_log) ! UNIT TESTS ! -- get_put test -- ! From f512bd30813b0db1f01386aede2a5a6e8bc55883 Mon Sep 17 00:00:00 2001 From: Michael Levy Date: Fri, 28 Apr 2023 09:45:34 -0600 Subject: [PATCH 11/13] Update baseline for regression test This branch adds the zoo_loss_zint_150m diagnostic, so we need a baseline that contains this field --- .../call_compute_subroutines.history.nc | Bin 634372 -> 634664 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/tests/input_files/baselines/call_compute_subroutines.history.nc b/tests/input_files/baselines/call_compute_subroutines.history.nc index 406c1b95920ba12ef87bfb21881a2a3f500a3d35..a65e80ea59de43f49481fe2490125122f684512b 100644 GIT binary patch delta 8648 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 delta 7930 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 From a9b02b90584d41982d85a8f1ecae4b9012195c63 Mon Sep 17 00:00:00 2001 From: Michael Levy Date: Thu, 11 May 2023 08:46:41 -0600 Subject: [PATCH 12/13] Only check len(PFT_keys) if append_keys is True The original way I wrote this was causing problems in the CESM-SPECTRA test --- MARBL_tools/MARBL_settings_file_class.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/MARBL_tools/MARBL_settings_file_class.py b/MARBL_tools/MARBL_settings_file_class.py index fd9bb590..513ea5e8 100644 --- a/MARBL_tools/MARBL_settings_file_class.py +++ b/MARBL_tools/MARBL_settings_file_class.py @@ -237,19 +237,19 @@ def _process_variable_value(self, category_name, variable_name): # Is the derived type an array? If so, treat each entry separately if ("_array_shape" in this_var.keys()): for n, elem_index in enumerate(_get_array_info(this_var["_array_shape"], self.settings_dict, self.tracers_dict)): - if n < len(PFT_keys): - PFT_keys.append('null') # Append "(index)" to variable name base_name = "%s%s%%" % (variable_name, elem_index) if append_to_keys: + if n < len(PFT_keys): + PFT_keys.append('null') # Add key for specific PFT if variable_name == 'zooplankton_settings': - self._config_keyword.append('((zooplankton_sname)) == "%s"' % PFT_keys[n]) + self._config_keyword.append('((zooplankton_sname)) == "%s"' % PFT_keys[n]) elif variable_name == 'autotroph_settings': - self._config_keyword.append('((autotroph_sname)) == "%s"' % PFT_keys[n]) + self._config_keyword.append('((autotroph_sname)) == "%s"' % PFT_keys[n]) elif variable_name == 'grazing_relationship_settings': - self._config_keyword.append('((grazer_sname)) == "%s"' % PFT_keys[n]) + self._config_keyword.append('((grazer_sname)) == "%s"' % PFT_keys[n]) for key in _sort_with_specific_suffix_first(this_var["datatype"].keys(),'_cnt'): if key[0] != '_': From ea4205ec5700cc2cd17485d52c7182665f70896f Mon Sep 17 00:00:00 2001 From: Michael Levy Date: Thu, 11 May 2023 13:22:58 -0600 Subject: [PATCH 13/13] Change "CESM2+4p2z" -> "4p2z" This isn't really a CESM2 configuration; at some point we may want to update it to be CESM3+4p2z, though. --- MARBL_tools/MARBL_settings_file_class.py | 2 +- defaults/json/settings_latest+4p2z.json | 14 +++++++------- defaults/settings_latest+4p2z.yaml | 14 +++++++------- src/marbl_settings_mod.F90 | 2 +- 4 files changed, 16 insertions(+), 16 deletions(-) diff --git a/MARBL_tools/MARBL_settings_file_class.py b/MARBL_tools/MARBL_settings_file_class.py index 513ea5e8..4c0f7be3 100644 --- a/MARBL_tools/MARBL_settings_file_class.py +++ b/MARBL_tools/MARBL_settings_file_class.py @@ -227,7 +227,7 @@ def _process_variable_value(self, category_name, variable_name): # Process derived type! # Check to see if PFT_defaults leads to specific PFT declarations if (category_name == "PFT_derived_types"): - for valid_PFT_default in ["CESM2", "CESM2+cocco", "CESM2+4p2z"]: + for valid_PFT_default in ["CESM2", "CESM2+cocco", "4p2z"]: append_to_keys = 'PFT_defaults == "{}"'.format(valid_PFT_default) in self._config_keyword if append_to_keys: settings_key = '_{}_PFT_keys'.format(valid_PFT_default) diff --git a/defaults/json/settings_latest+4p2z.json b/defaults/json/settings_latest+4p2z.json index 5ec97ad8..83cd4a5d 100644 --- a/defaults/json/settings_latest+4p2z.json +++ b/defaults/json/settings_latest+4p2z.json @@ -1,10 +1,10 @@ { "PFT_counts": { "autotroph_cnt": { - "cannot change": "PFT_defaults == 'CESM2+4p2z'", + "cannot change": "PFT_defaults == '4p2z'", "datatype": "integer", "default_value": { - "PFT_defaults == \"CESM2+4p2z\"": 4, + "PFT_defaults == \"4p2z\"": 4, "default": 1 }, "longname": "Number of autotroph classes", @@ -15,7 +15,7 @@ "max_grazer_prey_cnt": { "datatype": "integer", "default_value": { - "PFT_defaults == \"CESM2+4p2z\"": 4, + "PFT_defaults == \"4p2z\"": 4, "default": 1 }, "longname": "Number of grazer prey classes", @@ -25,7 +25,7 @@ "zooplankton_cnt": { "datatype": "integer", "default_value": { - "PFT_defaults == \"CESM2+4p2z\"": 2, + "PFT_defaults == \"4p2z\"": 2, "default": 1 }, "longname": "Number of zooplankton classes", @@ -925,7 +925,7 @@ "units": "mol m-2 yr-1" }, "PFT_defaults": { - "_CESM2+4p2z_PFT_keys": { + "_4p2z_PFT_keys": { "autotroph_settings": [ "sp", "diat", @@ -949,12 +949,12 @@ }, "_append_to_config_keywords": true, "datatype": "string", - "default_value": "CESM2+4p2z", + "default_value": "4p2z", "longname": "Define how PFTs are initialized", "subcategory": "1. config PFTs", "units": "unitless", "valid_values": [ - "CESM2+4p2z", + "4p2z", "user-specified" ] }, diff --git a/defaults/settings_latest+4p2z.yaml b/defaults/settings_latest+4p2z.yaml index a5696f34..9d2f7a2c 100644 --- a/defaults/settings_latest+4p2z.yaml +++ b/defaults/settings_latest+4p2z.yaml @@ -198,11 +198,11 @@ general_parms : subcategory : 1. config PFTs units : unitless datatype : string - default_value : CESM2+4p2z + default_value : 4p2z valid_values : - - CESM2+4p2z + - 4p2z - user-specified - _CESM2+4p2z_PFT_keys : + _4p2z_PFT_keys : autotroph_settings : - sp - diat @@ -653,8 +653,8 @@ PFT_counts : datatype : integer default_value : default : 1 - PFT_defaults == "CESM2+4p2z" : 4 - cannot change : PFT_defaults == 'CESM2+4p2z' + PFT_defaults == "4p2z" : 4 + cannot change : PFT_defaults == '4p2z' must set : PFT_defaults == 'user-specified' zooplankton_cnt : longname : Number of zooplankton classes @@ -663,7 +663,7 @@ PFT_counts : datatype : integer default_value : default : 1 - PFT_defaults == "CESM2+4p2z" : 2 + PFT_defaults == "4p2z" : 2 max_grazer_prey_cnt : longname : Number of grazer prey classes subcategory : 1. config PFTs @@ -671,7 +671,7 @@ PFT_counts : datatype : integer default_value : default : 1 - PFT_defaults == "CESM2+4p2z" : 4 + PFT_defaults == "4p2z" : 4 ################################################################################ # Category 3: PFT_derived_types # diff --git a/src/marbl_settings_mod.F90 b/src/marbl_settings_mod.F90 index 77f3cb1b..a12a54a1 100644 --- a/src/marbl_settings_mod.F90 +++ b/src/marbl_settings_mod.F90 @@ -447,7 +447,7 @@ subroutine marbl_settings_set_defaults_PFT_counts(marbl_status_log) character(len=*), parameter :: subname = 'marbl_settings_mod:marbl_settings_set_defaults_PFT_counts' character(len=char_len) :: log_message - if ((trim(PFT_defaults) .eq. 'CESM2+cocco') .or. (trim(PFT_defaults) .eq. 'CESM2+4p2z')) then + if ((trim(PFT_defaults) .eq. 'CESM2+cocco') .or. (trim(PFT_defaults) .eq. '4p2z')) then write(log_message, '(3A)') 'PFT_defaults = "', trim(PFT_defaults), & '" in input file, but being treated as "user-specified"' call marbl_status_log%log_noerror(log_message, subname)