diff --git a/MARBL_tools/MARBL_settings_file_class.py b/MARBL_tools/MARBL_settings_file_class.py index b2a2b454..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"]: + 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) @@ -241,13 +241,15 @@ def _process_variable_value(self, category_name, 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] != '_': diff --git a/defaults/diagnostics_latest.yaml b/defaults/diagnostics_latest.yaml index 115d3313..a30f3322 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 : never - operator : average + frequency : + - medium + - high + operator : + - average + - average pocToSed : longname : POC Flux to Sediments units : nmol/cm^2/s @@ -1490,14 +1494,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 @@ -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_basal_zint : longname : ((zooplankton_lname)) Basal Respiration Vertical Integral units : mmol/m^3 cm/s @@ -1931,14 +1941,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 dfa538a0..33cac2cf 100644 --- a/defaults/json/diagnostics_latest.json +++ b/defaults/json/diagnostics_latest.json @@ -351,6 +351,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", @@ -1931,6 +1938,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", @@ -1989,20 +2010,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", @@ -2027,6 +2034,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", @@ -2085,20 +2106,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", @@ -2266,9 +2273,15 @@ "vertical_grid": "layer_avg" }, "pocToFloor": { - "frequency": "never", + "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/defaults/json/settings_latest+4p2z.json b/defaults/json/settings_latest+4p2z.json new file mode 100644 index 00000000..83cd4a5d --- /dev/null +++ b/defaults/json/settings_latest+4p2z.json @@ -0,0 +1,1472 @@ +{ + "PFT_counts": { + "autotroph_cnt": { + "cannot change": "PFT_defaults == '4p2z'", + "datatype": "integer", + "default_value": { + "PFT_defaults == \"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 == \"4p2z\"": 4, + "default": 1 + }, + "longname": "Number of grazer prey classes", + "subcategory": "1. config PFTs", + "units": "unitless" + }, + "zooplankton_cnt": { + "datatype": "integer", + "default_value": { + "PFT_defaults == \"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": { + "((grazer_sname)) == \"microzoo_mesozoo\"": 0, + "((grazer_sname)) == \"null\"": 0, + "default": 1 + }, + "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.4, + "((grazer_sname)) == \"diaz_microzoo\"": 0.17, + "((grazer_sname)) == \"microzoo_mesozoo\"": 0.27, + "((grazer_sname)) == \"null\"": 0, + "((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)) == \"null\"": 0, + "((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)) == \"null\"": 0, + "((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)) == \"null\"": 0, + "((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)) == \"null\"": "null", + "((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)) == \"null\"": "null", + "((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)) == \"null\"": 0, + "((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)) == \"null\"": 0, + "((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": { + "((grazer_sname)) == \"microzoo_mesozoo\"": 1, + "default": 0 + }, + "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", + "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": { + "((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\"": "mesozoo", + "((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": { + "_4p2z_PFT_keys": { + "autotroph_settings": [ + "sp", + "diat", + "diaz", + "cocco" + ], + "grazing_relationship_settings": [ + "sp_microzoo", + "diat_mesozoo", + "diaz_microzoo", + "cocco_mesozoo", + "cocco_microzoo", + "diaz_mesozoo", + "null", + "microzoo_mesozoo" + ], + "zooplankton_settings": [ + "microzoo", + "mesozoo" + ] + }, + "_append_to_config_keywords": true, + "datatype": "string", + "default_value": "4p2z", + "longname": "Define how PFTs are initialized", + "subcategory": "1. config PFTs", + "units": "unitless", + "valid_values": [ + "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" + }, + "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, + "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": 1.0, + "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" + }, + "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.", + "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": "650e2", + "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": 1.1 + }, + "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": 1.1 + }, + "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.0 + }, + "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.2, + 4.8, + 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", + "1000.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/defaults/settings_latest+4p2z.yaml b/defaults/settings_latest+4p2z.yaml new file mode 100644 index 00000000..9d2f7a2c --- /dev/null +++ b/defaults/settings_latest+4p2z.yaml @@ -0,0 +1,1291 @@ +# 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 : 4p2z + valid_values : + - 4p2z + - user-specified + _4p2z_PFT_keys : + autotroph_settings : + - sp + - diat + - diaz + - cocco + zooplankton_settings : + - microzoo + - mesozoo + grazing_relationship_settings : + - sp_microzoo + - diat_mesozoo + - diaz_microzoo + - cocco_mesozoo + - cocco_microzoo + - diaz_mesozoo + - "null" + - 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. + 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 + 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. + 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 + 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 : 1.1 + 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 : 1.1 + 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.0 + 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 : 650e2 + 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 + - 1000.0e2 + parm_scalelen_vals : + longname : Prescribed scalelen values + subcategory : 5. Scale lengths + units : unitless + datatype : real + _array_shape : 4 + default_value : + default : + - 1 + - 3.2 + - 4.8 + - 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 : 1.0 + 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 == "4p2z" : 4 + cannot change : PFT_defaults == '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 == "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 == "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" : mesozoo + 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 + 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 + 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 + ((grazer_sname)) == "null" : "null" + 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 + ((grazer_sname)) == "null" : "null" + auto_ind_cnt : + longname : Number of autotrophs being grazed + subcategory : 12. grazing + units : unitless + datatype : integer + default_value : + default : 1 + ((grazer_sname)) == "microzoo_mesozoo" : 0 + ((grazer_sname)) == "null" : 0 + zoo_ind_cnt : + longname : Number of zooplankton being grazed + subcategory : 12. grazing + units : unitless + datatype : integer + default_value : + default : 0 + ((grazer_sname)) == "microzoo_mesozoo" : 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 + ((grazer_sname)) == "null" : 0 + 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 + ((grazer_sname)) == "null" : 0 + 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 + ((grazer_sname)) == "null" : 0 + 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 + ((grazer_sname)) == "null" : 0 + 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 + ((grazer_sname)) == "null" : 0 + 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.4 + ((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 + _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 diff --git a/src/marbl_diagnostics_mod.F90 b/src/marbl_diagnostics_mod.F90 index 71814c4f..e997c974 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' @@ -1303,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_basal_zint(zooplankton_cnt)) allocate(ind%zoo_loss_basal_zint_100m(zooplankton_cnt)) allocate(ind%zoo_loss_poc_zint(zooplankton_cnt)) @@ -1315,8 +1322,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 @@ -1345,6 +1352,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) // ' Basal Respiration Vertical Integral' sname = trim(zooplankton_settings(n)%sname) // '_loss_basal_zint' units = 'mmol/m^3 cm/s' @@ -1489,29 +1508,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' @@ -3684,9 +3709,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), & @@ -3955,6 +3982,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_basal(n))%field_3d(:, 1), & delta_z, kmt, full_depth_integral=diags(ind%zoo_loss_basal_zint(n))%field_2d(1), & near_surface_integral=diags(ind%zoo_loss_basal_zint_100m(n))%field_2d(1)) @@ -3979,9 +4010,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 62ec6884..935f4d38 100644 --- a/src/marbl_interface_private_types.F90 +++ b/src/marbl_interface_private_types.F90 @@ -551,8 +551,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(:) @@ -567,6 +567,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_basal_zint(:) integer(int_kind), allocatable :: zoo_loss_basal_zint_100m(:) integer(int_kind), allocatable :: zoo_loss_poc_zint(:) @@ -579,8 +580,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(:) @@ -1942,6 +1943,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_basal_zint) deallocate(this%zoo_loss_basal_zint_100m) deallocate(this%zoo_loss_poc_zint) diff --git a/src/marbl_interior_tendency_mod.F90 b/src/marbl_interior_tendency_mod.F90 index 2e2772cd..fd885a32 100644 --- a/src/marbl_interior_tendency_mod.F90 +++ b/src/marbl_interior_tendency_mod.F90 @@ -1475,7 +1475,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,:) diff --git a/src/marbl_settings_mod.F90 b/src/marbl_settings_mod.F90 index 86cfa633..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') 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) 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 -- ! diff --git a/tests/input_files/baselines/call_compute_subroutines.history.nc b/tests/input_files/baselines/call_compute_subroutines.history.nc index 406c1b95..a65e80ea 100644 Binary files a/tests/input_files/baselines/call_compute_subroutines.history.nc and b/tests/input_files/baselines/call_compute_subroutines.history.nc differ