diff --git a/MARBL_tools/MARBL_settings_file_class.py b/MARBL_tools/MARBL_settings_file_class.py index 92c6f081..7f9ee12f 100644 --- a/MARBL_tools/MARBL_settings_file_class.py +++ b/MARBL_tools/MARBL_settings_file_class.py @@ -225,10 +225,15 @@ def _process_variable_value(self, category_name, variable_name): return # Process derived type! - append_to_keys = (('PFT_defaults == "CESM2"' in self._config_keyword) and - (category_name == "PFT_derived_types")) - if append_to_keys: - PFT_keys = self._settings['general_parms']['PFT_defaults']['_CESM2_PFT_keys'][variable_name] + # Check to see if PFT_defaults leads to specific PFT declarations + if (category_name == "PFT_derived_types"): + for valid_PFT_default in ["CESM2", "CESM2.1+cocco"]: + 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) + PFT_keys = self._settings['general_parms']['PFT_defaults'][settings_key][variable_name] + break + # Is the derived type an array? If so, treat each entry separately if ("_array_shape" in this_var.keys()): for n, elem_index in enumerate(_get_array_info(this_var["_array_shape"], self.settings_dict, self.tracers_dict)): diff --git a/MARBL_tools/MARBL_share.py b/MARBL_tools/MARBL_share.py index cfc26fd7..d369386d 100644 --- a/MARBL_tools/MARBL_share.py +++ b/MARBL_tools/MARBL_share.py @@ -96,11 +96,13 @@ def expand_template_value(key_name, MARBL_settings, unprocessed_dict, check_freq imp_calcifier = (MARBL_settings.settings_dict[auto_prefix + "imp_calcifier"].strip('"')) exp_calcifier = (MARBL_settings.settings_dict[auto_prefix + "exp_calcifier"].strip('"')) silicifier = (MARBL_settings.settings_dict[auto_prefix + "silicifier"].strip('"')) + is_carbon_limited = (MARBL_settings.settings_dict[auto_prefix + "is_carbon_limited"].strip('"')) Nfixer = (MARBL_settings.settings_dict[auto_prefix + "Nfixer"].strip('"')) # Add values to template_fill_dict template_fill_dict['((autotroph_lname))'] = MARBL_settings.settings_dict[auto_prefix + "lname"].strip('"') template_fill_dict['((autotroph_calcifier))'] = ".true." in [imp_calcifier, exp_calcifier] template_fill_dict['((autotroph_silicifier))'] = (silicifier == ".true.") + template_fill_dict['((autotroph_is_carbon_limited))'] = (is_carbon_limited == ".true.") template_fill_dict['((autotroph_Nfixer))'] = (Nfixer == ".true.") elif fill_source == 'zooplankton': zoo_prefix = "zooplankton_settings(%d)%%" % item diff --git a/defaults/diagnostics_latest.yaml b/defaults/diagnostics_latest.yaml index 9ab5144b..fa870890 100644 --- a/defaults/diagnostics_latest.yaml +++ b/defaults/diagnostics_latest.yaml @@ -1348,6 +1348,22 @@ CISO_eps_dic_g : # Per-autotroph Diagnostics # ############################# +((autotroph_sname))_C_lim_surf : + dependencies : + ((autotroph_is_carbon_limited)) : true + longname : ((autotroph_lname)) C Limitation, Surface + units : 1 + vertical_grid : none + frequency : medium + operator : average +((autotroph_sname))_C_lim_Cweight_avg_100m : + dependencies : + ((autotroph_is_carbon_limited)) : true + longname : ((autotroph_lname)) C Limitation, carbon biomass weighted average over 0-100m + units : 1 + vertical_grid : none + frequency : medium + operator : average ((autotroph_sname))_N_lim_surf : longname : ((autotroph_lname)) N Limitation, Surface units : 1 diff --git a/defaults/json/diagnostics_latest.json b/defaults/json/diagnostics_latest.json index 24837ecc..aa109682 100644 --- a/defaults/json/diagnostics_latest.json +++ b/defaults/json/diagnostics_latest.json @@ -1,4 +1,24 @@ { + "((autotroph_sname))_C_lim_Cweight_avg_100m": { + "dependencies": { + "((autotroph_is_carbon_limited))": true + }, + "frequency": "medium", + "longname": "((autotroph_lname)) C Limitation, carbon biomass weighted average over 0-100m", + "operator": "average", + "units": 1, + "vertical_grid": "none" + }, + "((autotroph_sname))_C_lim_surf": { + "dependencies": { + "((autotroph_is_carbon_limited))": true + }, + "frequency": "medium", + "longname": "((autotroph_lname)) C Limitation, Surface", + "operator": "average", + "units": 1, + "vertical_grid": "none" + }, "((autotroph_sname))_CaCO3_form": { "dependencies": { "((autotroph_calcifier))": true diff --git a/defaults/json/settings_cesm2.0.json b/defaults/json/settings_cesm2.0.json index 6827c22b..22f0d60d 100644 --- a/defaults/json/settings_cesm2.0.json +++ b/defaults/json/settings_cesm2.0.json @@ -164,6 +164,25 @@ "subcategory": "10. autotrophs", "units": "non-numeric" }, + "is_carbon_limited": { + "datatype": "logical", + "default_value": ".false.", + "longname": "Flag set to true if autotroph is carbon limited", + "subcategory": "10. autotrophs", + "units": "non-numeric" + }, + "kCO2": { + "datatype": "real", + "default_value": { + "((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": { @@ -330,6 +349,23 @@ "subcategory": "10. autotrophs", "units": "non-numeric" }, + "temp_func_form_opt": { + "datatype": "string", + "default_value": { + "((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": { @@ -558,6 +594,21 @@ "subcategory": "11. zooplankton", "units": "non-numeric" }, + "temp_func_form_opt": { + "datatype": "string", + "default_value": { + "((zooplankton_sname)) == \"zoo\"": "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": { @@ -1248,18 +1299,6 @@ "subcategory": "4. general parameters", "units": "m" }, - "temp_func_form_opt": { - "_append_to_config_keywords": true, - "datatype": "string", - "default_value": "q_10", - "longname": "Option for the temperature scaling functional form", - "subcategory": "4. general parameters", - "units": "non-numeric", - "valid_values": [ - "q_10", - "arrhenius" - ] - }, "zoo_mort2_exp": { "datatype": "real", "default_value": 1.5, @@ -1269,16 +1308,6 @@ } }, "general_parms2": { - "Tref": { - "datatype": "real", - "default_value": { - "default": 30.0, - "temp_func_form_opt == \"arrhenius\"": 25.0 - }, - "longname": "reference temperature (C) used for the temperature scaling functional form", - "subcategory": "4. general parameters", - "units": "degC" - }, "init_bury_coeff_opt": { "datatype": "string", "default_value": { diff --git a/defaults/json/settings_cesm2.1+cocco.json b/defaults/json/settings_cesm2.1+cocco.json new file mode 100644 index 00000000..f98519a7 --- /dev/null +++ b/defaults/json/settings_cesm2.1+cocco.json @@ -0,0 +1,1402 @@ +{ + "PFT_counts": { + "autotroph_cnt": { + "cannot change": "PFT_defaults == 'CESM2.1+cocco'", + "datatype": "integer", + "default_value": { + "PFT_defaults == \"CESM2.1+cocco\"": 4, + "default": 1 + }, + "longname": "Number of autotroph classes", + "must set": "PFT_defaults == 'user-specified'", + "subcategory": "1. config PFTs", + "units": "unitless" + }, + "max_grazer_prey_cnt": { + "datatype": "integer", + "default_value": { + "PFT_defaults == \"CESM2.1+cocco\"": 4, + "default": 1 + }, + "longname": "Number of grazer prey classes", + "subcategory": "1. config PFTs", + "units": "unitless" + }, + "zooplankton_cnt": { + "datatype": "integer", + "default_value": { + "PFT_defaults == \"CESM2.1+cocco\"": 1, + "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, + "((autotroph_sname)) == \"diaz\"": 2.2, + "((autotroph_sname)) == \"sp\"": 4.4, + "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.28, + "((autotroph_sname)) == \"diat\"": 0.39, + "((autotroph_sname)) == \"diaz\"": 0.39, + "((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\"": "35e-6", + "((autotroph_sname)) == \"diat\"": "35e-6", + "((autotroph_sname)) == \"diaz\"": "70e-6", + "((autotroph_sname)) == \"sp\"": "35e-6", + "default": "1e34" + }, + "longname": "Initial Fe/C ratio for growth", + "subcategory": "10. autotrophs", + "units": "unitless" + }, + "gQfe_min": { + "datatype": "real", + "default_value": { + "((autotroph_sname)) == \"cocco\"": "3e-6", + "((autotroph_sname)) == \"diat\"": "3e-6", + "((autotroph_sname)) == \"diaz\"": "6e-6", + "((autotroph_sname)) == \"sp\"": "3e-6", + "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.1, + "((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.15e-05, + "((autotroph_sname)) == \"diat\"": 8e-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.2, + "((autotroph_sname)) == \"diat\"": 0.5, + "((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.005, + "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.8, + "((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.5, + "((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_zoo\"": 4, + "((grazer_sname)) == \"diat_zoo\"": 2, + "((grazer_sname)) == \"diaz_zoo\"": 3, + "((grazer_sname)) == \"sp_zoo\"": 1, + "default": 0 + }, + "longname": "Indices of autotrophs being grazed", + "subcategory": "12. grazing", + "units": "unitless" + }, + "auto_ind_cnt": { + "datatype": "integer", + "default_value": { + "default": 1 + }, + "longname": "Number of autotrophs being grazed", + "subcategory": "12. grazing", + "units": "unitless" + }, + "f_zoo_detr": { + "datatype": "real", + "default_value": { + "((grazer_sname)) == \"cocco_zoo\"": 0.18, + "((grazer_sname)) == \"diat_zoo\"": 0.24, + "((grazer_sname)) == \"diaz_zoo\"": 0.12, + "((grazer_sname)) == \"sp_zoo\"": 0.12, + "default": "1e34" + }, + "longname": "Fraction of zoo losses to detrital", + "subcategory": "12. grazing", + "units": "unitless" + }, + "graze_doc": { + "datatype": "real", + "default_value": { + "((grazer_sname)) == \"cocco_zoo\"": 0.06, + "((grazer_sname)) == \"diat_zoo\"": 0.06, + "((grazer_sname)) == \"diaz_zoo\"": 0.06, + "((grazer_sname)) == \"sp_zoo\"": 0.06, + "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_zoo\"": 0.3, + "((grazer_sname)) == \"diat_zoo\"": 0.38, + "((grazer_sname)) == \"diaz_zoo\"": 0.1, + "((grazer_sname)) == \"sp_zoo\"": 0, + "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_zoo\"": 0.25, + "((grazer_sname)) == \"diat_zoo\"": 0.25, + "((grazer_sname)) == \"diaz_zoo\"": 0.3, + "((grazer_sname)) == \"sp_zoo\"": 0.3, + "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_zoo\"": 2, + "default": 1 + }, + "longname": "Functional form of grazing parameterization", + "subcategory": "12. grazing", + "units": "unitless" + }, + "lname": { + "datatype": "string", + "default_value": { + "((grazer_sname)) == \"cocco_zoo\"": "Grazing of cocco by zoo", + "((grazer_sname)) == \"diat_zoo\"": "Grazing of diat by zoo", + "((grazer_sname)) == \"diaz_zoo\"": "Grazing of diaz by zoo", + "((grazer_sname)) == \"sp_zoo\"": "Grazing of sp by zoo", + "default": "UNSET" + }, + "longname": "Long name of the grazing relationship", + "subcategory": "12. grazing", + "units": "non-numeric" + }, + "sname": { + "datatype": "string", + "default_value": { + "((grazer_sname)) == \"cocco_zoo\"": "grz_cocco_zoo", + "((grazer_sname)) == \"diat_zoo\"": "grz_diat_zoo", + "((grazer_sname)) == \"diaz_zoo\"": "grz_diaz_zoo", + "((grazer_sname)) == \"sp_zoo\"": "grz_sp_zoo", + "default": "UNSET" + }, + "longname": "Short name of the grazing relationship", + "subcategory": "12. grazing", + "units": "non-numeric" + }, + "z_grz": { + "datatype": "real", + "default_value": { + "((grazer_sname)) == \"cocco_zoo\"": 0.854, + "((grazer_sname)) == \"diat_zoo\"": 0.72, + "((grazer_sname)) == \"diaz_zoo\"": 0.6, + "((grazer_sname)) == \"sp_zoo\"": 0.54, + "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_zoo\"": 2.95, + "((grazer_sname)) == \"diat_zoo\"": 3.41, + "((grazer_sname)) == \"diaz_zoo\"": 3.35, + "((grazer_sname)) == \"sp_zoo\"": 3.6, + "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": 0, + "longname": "Indices of zooplankton being grazed", + "subcategory": "12. grazing", + "units": "unitless" + }, + "zoo_ind_cnt": { + "datatype": "integer", + "default_value": { + "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)) == \"zoo\"": 0.65, + "default": "1e34" + }, + "longname": "Activation energy for Arrhenius equation", + "subcategory": "11. zooplankton", + "units": "eV" + }, + "_type_name": "zooplankton_settings_type", + "lname": { + "datatype": "string", + "default_value": { + "((zooplankton_sname)) == \"zoo\"": "Zooplankton", + "default": "UNSET" + }, + "longname": "Long name of the zooplankton", + "subcategory": "11. zooplankton", + "units": "non-numeric" + }, + "loss_thres": { + "datatype": "real", + "default_value": { + "((zooplankton_sname)) == \"zoo\"": 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)) == \"zoo\"": "zoo", + "default": "UNSET" + }, + "longname": "Short name of the zooplankton", + "subcategory": "11. zooplankton", + "units": "non-numeric" + }, + "temp_func_form_opt": { + "datatype": "string", + "default_value": { + "((zooplankton_sname)) == \"zoo\"": "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)) == \"zoo\"": 0.4, + "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)) == \"zoo\"": 0.1, + "default": "1e34" + }, + "longname": "Linear mortality rate", + "subcategory": "11. zooplankton", + "units": "1/day" + } + } + } + }, + "_order": [ + "general_parms", + "general_parms2", + "PFT_counts", + "PFT_derived_types", + "tracer_dependent" + ], + "_tracer_list": { + "((autotroph_sname))13C": { + "dependencies": { + "ciso_on": ".true." + }, + "long_name": "((autotroph_lname)) Carbon-13", + "units": "mmol/m^3" + }, + "((autotroph_sname))14C": { + "dependencies": { + "ciso_on": ".true." + }, + "long_name": "((autotroph_lname)) Carbon-14", + "units": "mmol/m^3" + }, + "((autotroph_sname))C": { + "long_name": "((autotroph_lname)) Carbon", + "units": "mmol/m^3" + }, + "((autotroph_sname))Ca13CO3": { + "dependencies": { + "((autotroph_calcifier))": true, + "ciso_on": ".true." + }, + "long_name": "((autotroph_lname)) Ca13CO3", + "units": "mmol/m^3" + }, + "((autotroph_sname))Ca14CO3": { + "dependencies": { + "((autotroph_calcifier))": true, + "ciso_on": ".true." + }, + "long_name": "((autotroph_lname)) Ca14CO3", + "units": "mmol/m^3" + }, + "((autotroph_sname))CaCO3": { + "dependencies": { + "((autotroph_calcifier))": true + }, + "long_name": "((autotroph_lname)) CaCO3", + "units": "mmol/m^3" + }, + "((autotroph_sname))Chl": { + "long_name": "((autotroph_lname)) Chlorophyll", + "units": "mmol/m^3" + }, + "((autotroph_sname))Fe": { + "long_name": "((autotroph_lname)) Iron", + "units": "mmol/m^3" + }, + "((autotroph_sname))P": { + "dependencies": { + "lvariable_PtoC": ".true." + }, + "long_name": "((autotroph_lname)) Phosphorus", + "units": "mmol/m^3" + }, + "((autotroph_sname))Si": { + "dependencies": { + "((autotroph_silicifier))": true + }, + "long_name": "((autotroph_lname)) Silicon", + "units": "mmol/m^3" + }, + "((zooplankton_sname))C": { + "long_name": "((zooplankton_lname)) Carbon", + "units": "mmol/m^3" + }, + "ALK": { + "long_name": "Alkalinity", + "units": "meq/m^3" + }, + "ALK_ALT_CO2": { + "long_name": "Alkalinity, Alternative CO2", + "units": "meq/m^3" + }, + "DI13C": { + "dependencies": { + "ciso_on": ".true." + }, + "long_name": "Dissolved Inorganic Carbon-13", + "units": "mmol/m^3" + }, + "DI14C": { + "dependencies": { + "ciso_on": ".true." + }, + "long_name": "Dissolved Inorganic Carbon-14", + "units": "mmol/m^3" + }, + "DIC": { + "long_name": "Dissolved Inorganic Carbon", + "units": "mmol/m^3" + }, + "DIC_ALT_CO2": { + "long_name": "Dissolved Inorganic Carbon, Alternative CO2", + "units": "mmol/m^3" + }, + "DO13Ctot": { + "dependencies": { + "ciso_on": ".true." + }, + "long_name": "Dissolved Organic Carbon-13 (semi-labile+refractoy)", + "units": "mmol/m^3" + }, + "DO14Ctot": { + "dependencies": { + "ciso_on": ".true." + }, + "long_name": "Dissolved Organic Carbon-14 (semi-labile+refractoy)", + "units": "mmol/m^3" + }, + "DOC": { + "long_name": "Dissolved Organic Carbon", + "units": "mmol/m^3" + }, + "DOCr": { + "long_name": "Refractory DOC", + "units": "mmol/m^3" + }, + "DON": { + "long_name": "Dissolved Organic Nitrogen", + "units": "mmol/m^3" + }, + "DONr": { + "long_name": "Refractory DON", + "units": "mmol/m^3" + }, + "DOP": { + "long_name": "Dissolved Organic Phosphorus", + "units": "mmol/m^3" + }, + "DOPr": { + "long_name": "Refractory DOP", + "units": "mmol/m^3" + }, + "Fe": { + "long_name": "Dissolved Inorganic Iron", + "units": "mmol/m^3" + }, + "Lig": { + "long_name": "Iron Binding Ligand", + "units": "mmol/m^3" + }, + "NH4": { + "long_name": "Dissolved Ammonia", + "units": "mmol/m^3" + }, + "NO3": { + "long_name": "Dissolved Inorganic Nitrate", + "units": "mmol/m^3" + }, + "O2": { + "long_name": "Dissolved Oxygen", + "units": "mmol/m^3" + }, + "PO4": { + "long_name": "Dissolved Inorganic Phosphate", + "units": "mmol/m^3" + }, + "SiO3": { + "long_name": "Dissolved Inorganic Silicate", + "units": "mmol/m^3" + }, + "zootot13C": { + "dependencies": { + "ciso_on": ".true." + }, + "long_name": "Zooplankton Carbon-13 (sum over all zooplankton)", + "units": "mmol/m^3" + }, + "zootot14C": { + "dependencies": { + "ciso_on": ".true." + }, + "long_name": "Zooplankton Carbon-14 (sum over all zooplankton)", + "units": "mmol/m^3" + } + }, + "general_parms": { + "Jint_Ctot_thres_molpm2pyr": { + "datatype": "real", + "default_value": 1e-09, + "longname": "MARBL will abort if abs(Jint_Ctot) exceeds this threshold", + "subcategory": "4. general parameters", + "units": "mol m-2 yr-1" + }, + "PFT_defaults": { + "_CESM2.1+cocco_PFT_keys": { + "autotroph_settings": [ + "sp", + "diat", + "diaz", + "cocco" + ], + "grazing_relationship_settings": [ + "sp_zoo", + "diat_zoo", + "diaz_zoo", + "cocco_zoo" + ], + "zooplankton_settings": [ + "zoo" + ] + }, + "_append_to_config_keywords": true, + "datatype": "string", + "default_value": "CESM2.1+cocco", + "longname": "Define how PFTs are initialized", + "subcategory": "1. config PFTs", + "units": "unitless", + "valid_values": [ + "CESM2.1+cocco", + "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": 2.0, + "longname": "Max CaCO3/C ratio for calcifiers", + "subcategory": "4. general parameters", + "units": "mmol CaCO3/mmol C" + }, + "auto_mort2_exp": { + "datatype": "real", + "default_value": 1.75, + "longname": "Value of power loss exponent for autotrophs", + "subcategory": "4. general parameters", + "units": "unitless" + }, + "bSi_bury_frac_max": { + "datatype": "real", + "default_value": 1.0, + "longname": "maximum bury fraction for bSi", + "subcategory": "4. general parameters (bury coeffs)", + "units": "unitless" + }, + "bury_coeff_rmean_timescale_years": { + "datatype": "real", + "default_value": 10, + "longname": "Running mean time scale for bury coefficients", + "subcategory": "4. general parameters", + "units": "years" + }, + "caco3_bury_thres_depth": { + "datatype": "real", + "default_value": "3000e2", + "longname": "Threshold depth for CaCO3 burial when opt = 'fixed_depth'", + "subcategory": "4. general parameters", + "units": "cm" + }, + "caco3_bury_thres_omega_calc": { + "datatype": "real", + "default_value": 0.89, + "longname": "omega calcite threshold for CaCO3 burial when opt = 'omega_calc'", + "subcategory": "4. general parameters", + "units": 1 + }, + "caco3_bury_thres_opt": { + "datatype": "string", + "default_value": "omega_calc", + "longname": "Option of threshold of CaCO3 burial", + "subcategory": "4. general parameters", + "units": "non-numeric", + "valid_values": [ + "fixed_depth", + "omega_calc" + ] + }, + "ciso_fract_factors": { + "datatype": "string", + "default_value": "Laws", + "longname": "Option for which biological fractionation calculation to use", + "subcategory": "4. general parameters", + "units": "non-numeric" + }, + "ciso_lecovars_full_depth_tavg": { + "datatype": "logical", + "default_value": ".false.", + "longname": "Control whether carbon isotope variables are written full depth", + "subcategory": "2. config flags", + "units": "unitless" + }, + "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.7, + "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": 6.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.822, + "longname": "max Si/C ratio for growth", + "subcategory": "4. general parameters", + "units": 1 + }, + "gQsi_min": { + "datatype": "real", + "default_value": 0.0457, + "longname": "min Si/C ratio for growth", + "subcategory": "4. general parameters", + "units": 1 + }, + "ladjust_bury_coeff": { + "_append_to_config_keywords": true, + "datatype": "logical", + "default_value": ".false.", + "longname": "Control if bury coefficients are adjusted (rather than constant)", + "subcategory": "2. config flags", + "units": "unitless" + }, + "lcompute_nhx_surface_emis": { + "datatype": "logical", + "default_value": ".true.", + "longname": "Control if NHx emissions are computed", + "subcategory": "2. config flags", + "units": "unitless" + }, + "lecovars_full_depth_tavg": { + "datatype": "logical", + "default_value": ".false.", + "longname": "Control whether base ecosystem variables are written full depth", + "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": 2.6, + "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.02, + "longname": "CaCO3 gamma (fraction of production -> hard subclass)", + "subcategory": "4. general parameters", + "units": 1 + }, + "parm_FeLig_scavenge_rate0": { + "datatype": "real", + "default_value": 1.2, + "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": 22.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.0, + "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.01, + "longname": "hPOC to CaCO3 ratio", + "subcategory": "4. general parameters", + "units": 1 + }, + "parm_hPOC_SiO2_ratio": { + "datatype": "real", + "default_value": 0.01, + "longname": "hPOC to SiO2 ratio", + "subcategory": "4. general parameters", + "units": 1 + }, + "parm_hPOC_dust_ratio": { + "datatype": "real", + "default_value": 0.01, + "longname": "hPOC to dust ratio", + "subcategory": "4. general parameters", + "units": 1 + }, + "parm_init_POC_bury_coeff": { + "datatype": "real", + "default_value": { + "GRID == \"CESM_x3\"": 5.0, + "default": 2.54 + }, + "longname": "Initial scale factor for burial of POC, PON", + "subcategory": "4. general parameters (bury coeffs)", + "units": "unitless" + }, + "parm_init_POP_bury_coeff": { + "datatype": "real", + "default_value": { + "GRID == \"CESM_x3\"": 5.0, + "default": 0.36 + }, + "longname": "Initial scale factor for burial of POP", + "subcategory": "4. general parameters (bury coeffs)", + "units": "unitless" + }, + "parm_init_bSi_bury_coeff": { + "datatype": "real", + "default_value": { + "GRID == \"CESM_x3\"": 1.1, + "default": 1.53 + }, + "longname": "Initial scale factor for burial of bSi", + "subcategory": "4. general parameters (bury coeffs)", + "units": "unitless" + }, + "parm_kappa_nitrif_per_day": { + "datatype": "real", + "default_value": 0.06, + "longname": "Nitrification inverse time constant", + "subcategory": "4. general parameters (nitrification)", + "units": "1/day" + }, + "parm_labile_ratio": { + "datatype": "real", + "default_value": 0.94, + "longname": "Fraction of loss to DOC that routed directly to DIC", + "subcategory": "4. general parameters", + "units": "unitless" + }, + "parm_nitrif_par_lim": { + "datatype": "real", + "default_value": 1.0, + "longname": "PAR limit for nitrification", + "subcategory": "4. general parameters (nitrification)", + "units": "W/m^2" + }, + "parm_o2_min": { + "datatype": "real", + "default_value": 5.0, + "longname": "Minimum O2 needed for production & consumption", + "subcategory": "4. general parameters", + "units": "nmol/cm^3" + }, + "parm_o2_min_delta": { + "datatype": "real", + "default_value": 5.0, + "longname": "Width of min O2 range", + "subcategory": "4. general parameters", + "units": "nmol/cm^3" + }, + "parm_scalelen_vals": { + "_array_shape": 4, + "datatype": "real", + "default_value": { + "GRID == \"CESM_x3\"": [ + 1, + 3.3, + 4.2, + 4.4 + ], + "default": [ + 1, + 3.6, + 4.7, + 4.8 + ] + }, + "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": 1.5, + "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/json/settings_cesm2.1.json b/defaults/json/settings_cesm2.1.json new file mode 100644 index 00000000..37b8562a --- /dev/null +++ b/defaults/json/settings_cesm2.1.json @@ -0,0 +1,1360 @@ +{ + "PFT_counts": { + "autotroph_cnt": { + "cannot change": "PFT_defaults == 'CESM2'", + "datatype": "integer", + "default_value": { + "PFT_defaults == \"CESM2\"": 3, + "default": 1 + }, + "longname": "Number of autotroph classes", + "must set": "PFT_defaults == 'user-specified'", + "subcategory": "1. config PFTs", + "units": "unitless" + }, + "max_grazer_prey_cnt": { + "datatype": "integer", + "default_value": { + "PFT_defaults == \"CESM2\"": 3, + "default": 1 + }, + "longname": "Number of grazer prey classes", + "subcategory": "1. config PFTs", + "units": "unitless" + }, + "zooplankton_cnt": { + "datatype": "integer", + "default_value": { + "PFT_defaults == \"CESM2\"": 1, + "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)) == \"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)) == \"diat\"": 5, + "((autotroph_sname)) == \"diaz\"": 2.5, + "((autotroph_sname)) == \"sp\"": 5, + "default": "1e34" + }, + "longname": "Maximum C-spec growth rate at Tref", + "subcategory": "10. autotrophs", + "units": "1/day" + }, + "Qp_fixed": { + "datatype": "real", + "default_value": { + "((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)) == \"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)) == \"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)) == \"diat\"": 0.28, + "((autotroph_sname)) == \"diaz\"": 0.39, + "((autotroph_sname)) == \"sp\"": 0.39, + "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": { + "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)) == \"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)) == \"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": { + "((autotroph_sname)) == \"sp\"": ".true.", + "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": ".false.", + "longname": "Flag set to true if autotroph is carbon limited", + "subcategory": "10. autotrophs", + "units": "non-numeric" + }, + "kCO2": { + "datatype": "real", + "default_value": { + "((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)) == \"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)) == \"diat\"": 7e-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)) == \"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)) == \"diat\"": 0.5, + "((autotroph_sname)) == \"diaz\"": 2, + "((autotroph_sname)) == \"sp\"": 0.25, + "default": "1e34" + }, + "longname": "NO3 uptake half-sat constant", + "subcategory": "10. autotrophs", + "units": "nmol/cm^3" + }, + "kPO4": { + "datatype": "real", + "default_value": { + "((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)) == \"diat\"": 0.7, + "((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)) == \"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)) == \"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)) == \"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)) == \"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)) == \"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)) == \"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)) == \"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)) == \"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)) == \"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)) == \"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)) == \"diat_zoo\"": 2, + "((grazer_sname)) == \"diaz_zoo\"": 3, + "((grazer_sname)) == \"sp_zoo\"": 1, + "default": 0 + }, + "longname": "Indices of autotrophs being grazed", + "subcategory": "12. grazing", + "units": "unitless" + }, + "auto_ind_cnt": { + "datatype": "integer", + "default_value": { + "default": 1 + }, + "longname": "Number of autotrophs being grazed", + "subcategory": "12. grazing", + "units": "unitless" + }, + "f_zoo_detr": { + "datatype": "real", + "default_value": { + "((grazer_sname)) == \"diat_zoo\"": 0.24, + "((grazer_sname)) == \"diaz_zoo\"": 0.12, + "((grazer_sname)) == \"sp_zoo\"": 0.12, + "default": "1e34" + }, + "longname": "Fraction of zoo losses to detrital", + "subcategory": "12. grazing", + "units": "unitless" + }, + "graze_doc": { + "datatype": "real", + "default_value": { + "((grazer_sname)) == \"diat_zoo\"": 0.06, + "((grazer_sname)) == \"diaz_zoo\"": 0.06, + "((grazer_sname)) == \"sp_zoo\"": 0.06, + "default": "1e34" + }, + "longname": "Routing of grazed term, remainder goes to dic", + "subcategory": "12. grazing", + "units": "unitless" + }, + "graze_poc": { + "datatype": "real", + "default_value": { + "((grazer_sname)) == \"diat_zoo\"": 0.39, + "((grazer_sname)) == \"diaz_zoo\"": 0.1, + "((grazer_sname)) == \"sp_zoo\"": 0, + "default": "1e34" + }, + "longname": "Routing of grazed term, remainder goes to dic", + "subcategory": "12. grazing", + "units": "unitless" + }, + "graze_zoo": { + "datatype": "real", + "default_value": { + "((grazer_sname)) == \"diat_zoo\"": 0.25, + "((grazer_sname)) == \"diaz_zoo\"": 0.3, + "((grazer_sname)) == \"sp_zoo\"": 0.3, + "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": 1, + "longname": "Functional form of grazing parameterization", + "subcategory": "12. grazing", + "units": "unitless" + }, + "lname": { + "datatype": "string", + "default_value": { + "((grazer_sname)) == \"diat_zoo\"": "Grazing of diat by zoo", + "((grazer_sname)) == \"diaz_zoo\"": "Grazing of diaz by zoo", + "((grazer_sname)) == \"sp_zoo\"": "Grazing of sp by zoo", + "default": "UNSET" + }, + "longname": "Long name of the grazing relationship", + "subcategory": "12. grazing", + "units": "non-numeric" + }, + "sname": { + "datatype": "string", + "default_value": { + "((grazer_sname)) == \"diat_zoo\"": "grz_diat_zoo", + "((grazer_sname)) == \"diaz_zoo\"": "grz_diaz_zoo", + "((grazer_sname)) == \"sp_zoo\"": "grz_sp_zoo", + "default": "UNSET" + }, + "longname": "Short name of the grazing relationship", + "subcategory": "12. grazing", + "units": "non-numeric" + }, + "z_grz": { + "datatype": "real", + "default_value": { + "((grazer_sname)) == \"diat_zoo\"": 1.2, + "((grazer_sname)) == \"diaz_zoo\"": 1.2, + "((grazer_sname)) == \"sp_zoo\"": 1.2, + "default": "1e34" + }, + "longname": "Grazing coefficient", + "subcategory": "12. grazing", + "units": "(mmol/m^3)^2" + }, + "z_umax_0_per_day": { + "datatype": "real", + "default_value": { + "((grazer_sname)) == \"diat_zoo\"": 3.15, + "((grazer_sname)) == \"diaz_zoo\"": 3.3, + "((grazer_sname)) == \"sp_zoo\"": 3.3, + "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": 0, + "longname": "Indices of zooplankton being grazed", + "subcategory": "12. grazing", + "units": "unitless" + }, + "zoo_ind_cnt": { + "datatype": "integer", + "default_value": { + "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)) == \"zoo\"": 0.65, + "default": "1e34" + }, + "longname": "Activation energy for Arrhenius equation", + "subcategory": "11. zooplankton", + "units": "eV" + }, + "_type_name": "zooplankton_settings_type", + "lname": { + "datatype": "string", + "default_value": { + "((zooplankton_sname)) == \"zoo\"": "Zooplankton", + "default": "UNSET" + }, + "longname": "Long name of the zooplankton", + "subcategory": "11. zooplankton", + "units": "non-numeric" + }, + "loss_thres": { + "datatype": "real", + "default_value": { + "((zooplankton_sname)) == \"zoo\"": 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)) == \"zoo\"": "zoo", + "default": "UNSET" + }, + "longname": "Short name of the zooplankton", + "subcategory": "11. zooplankton", + "units": "non-numeric" + }, + "temp_func_form_opt": { + "datatype": "string", + "default_value": { + "((zooplankton_sname)) == \"zoo\"": "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)) == \"zoo\"": 0.4, + "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)) == \"zoo\"": 0.1, + "default": "1e34" + }, + "longname": "Linear mortality rate", + "subcategory": "11. zooplankton", + "units": "1/day" + } + } + } + }, + "_order": [ + "general_parms", + "general_parms2", + "PFT_counts", + "PFT_derived_types", + "tracer_dependent" + ], + "_tracer_list": { + "((autotroph_sname))13C": { + "dependencies": { + "ciso_on": ".true." + }, + "long_name": "((autotroph_lname)) Carbon-13", + "units": "mmol/m^3" + }, + "((autotroph_sname))14C": { + "dependencies": { + "ciso_on": ".true." + }, + "long_name": "((autotroph_lname)) Carbon-14", + "units": "mmol/m^3" + }, + "((autotroph_sname))C": { + "long_name": "((autotroph_lname)) Carbon", + "units": "mmol/m^3" + }, + "((autotroph_sname))Ca13CO3": { + "dependencies": { + "((autotroph_calcifier))": true, + "ciso_on": ".true." + }, + "long_name": "((autotroph_lname)) Ca13CO3", + "units": "mmol/m^3" + }, + "((autotroph_sname))Ca14CO3": { + "dependencies": { + "((autotroph_calcifier))": true, + "ciso_on": ".true." + }, + "long_name": "((autotroph_lname)) Ca14CO3", + "units": "mmol/m^3" + }, + "((autotroph_sname))CaCO3": { + "dependencies": { + "((autotroph_calcifier))": true + }, + "long_name": "((autotroph_lname)) CaCO3", + "units": "mmol/m^3" + }, + "((autotroph_sname))Chl": { + "long_name": "((autotroph_lname)) Chlorophyll", + "units": "mmol/m^3" + }, + "((autotroph_sname))Fe": { + "long_name": "((autotroph_lname)) Iron", + "units": "mmol/m^3" + }, + "((autotroph_sname))P": { + "dependencies": { + "lvariable_PtoC": ".true." + }, + "long_name": "((autotroph_lname)) Phosphorus", + "units": "mmol/m^3" + }, + "((autotroph_sname))Si": { + "dependencies": { + "((autotroph_silicifier))": true + }, + "long_name": "((autotroph_lname)) Silicon", + "units": "mmol/m^3" + }, + "((zooplankton_sname))C": { + "long_name": "((zooplankton_lname)) Carbon", + "units": "mmol/m^3" + }, + "ALK": { + "long_name": "Alkalinity", + "units": "meq/m^3" + }, + "ALK_ALT_CO2": { + "long_name": "Alkalinity, Alternative CO2", + "units": "meq/m^3" + }, + "DI13C": { + "dependencies": { + "ciso_on": ".true." + }, + "long_name": "Dissolved Inorganic Carbon-13", + "units": "mmol/m^3" + }, + "DI14C": { + "dependencies": { + "ciso_on": ".true." + }, + "long_name": "Dissolved Inorganic Carbon-14", + "units": "mmol/m^3" + }, + "DIC": { + "long_name": "Dissolved Inorganic Carbon", + "units": "mmol/m^3" + }, + "DIC_ALT_CO2": { + "long_name": "Dissolved Inorganic Carbon, Alternative CO2", + "units": "mmol/m^3" + }, + "DO13Ctot": { + "dependencies": { + "ciso_on": ".true." + }, + "long_name": "Dissolved Organic Carbon-13 (semi-labile+refractoy)", + "units": "mmol/m^3" + }, + "DO14Ctot": { + "dependencies": { + "ciso_on": ".true." + }, + "long_name": "Dissolved Organic Carbon-14 (semi-labile+refractoy)", + "units": "mmol/m^3" + }, + "DOC": { + "long_name": "Dissolved Organic Carbon", + "units": "mmol/m^3" + }, + "DOCr": { + "long_name": "Refractory DOC", + "units": "mmol/m^3" + }, + "DON": { + "long_name": "Dissolved Organic Nitrogen", + "units": "mmol/m^3" + }, + "DONr": { + "long_name": "Refractory DON", + "units": "mmol/m^3" + }, + "DOP": { + "long_name": "Dissolved Organic Phosphorus", + "units": "mmol/m^3" + }, + "DOPr": { + "long_name": "Refractory DOP", + "units": "mmol/m^3" + }, + "Fe": { + "long_name": "Dissolved Inorganic Iron", + "units": "mmol/m^3" + }, + "Lig": { + "long_name": "Iron Binding Ligand", + "units": "mmol/m^3" + }, + "NH4": { + "long_name": "Dissolved Ammonia", + "units": "mmol/m^3" + }, + "NO3": { + "long_name": "Dissolved Inorganic Nitrate", + "units": "mmol/m^3" + }, + "O2": { + "long_name": "Dissolved Oxygen", + "units": "mmol/m^3" + }, + "PO4": { + "long_name": "Dissolved Inorganic Phosphate", + "units": "mmol/m^3" + }, + "SiO3": { + "long_name": "Dissolved Inorganic Silicate", + "units": "mmol/m^3" + }, + "zootot13C": { + "dependencies": { + "ciso_on": ".true." + }, + "long_name": "Zooplankton Carbon-13 (sum over all zooplankton)", + "units": "mmol/m^3" + }, + "zootot14C": { + "dependencies": { + "ciso_on": ".true." + }, + "long_name": "Zooplankton Carbon-14 (sum over all zooplankton)", + "units": "mmol/m^3" + } + }, + "general_parms": { + "Jint_Ctot_thres_molpm2pyr": { + "datatype": "real", + "default_value": 1e-09, + "longname": "MARBL will abort if abs(Jint_Ctot) exceeds this threshold", + "subcategory": "4. general parameters", + "units": "mol m-2 yr-1" + }, + "PFT_defaults": { + "_CESM2_PFT_keys": { + "autotroph_settings": [ + "sp", + "diat", + "diaz" + ], + "grazing_relationship_settings": [ + "sp_zoo", + "diat_zoo", + "diaz_zoo" + ], + "zooplankton_settings": [ + "zoo" + ] + }, + "_append_to_config_keywords": true, + "datatype": "string", + "default_value": "CESM2", + "longname": "Define how PFTs are initialized", + "subcategory": "1. config PFTs", + "units": "unitless", + "valid_values": [ + "CESM2", + "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": 0.4, + "longname": "Max CaCO3/C ratio for calcifiers", + "subcategory": "4. general parameters", + "units": "mmol CaCO3/mmol C" + }, + "auto_mort2_exp": { + "datatype": "real", + "default_value": 1.75, + "longname": "Value of power loss exponent for autotrophs", + "subcategory": "4. general parameters", + "units": "unitless" + }, + "bSi_bury_frac_max": { + "datatype": "real", + "default_value": 1.0, + "longname": "maximum bury fraction for bSi", + "subcategory": "4. general parameters (bury coeffs)", + "units": "unitless" + }, + "bury_coeff_rmean_timescale_years": { + "datatype": "real", + "default_value": 10, + "longname": "Running mean time scale for bury coefficients", + "subcategory": "4. general parameters", + "units": "years" + }, + "caco3_bury_thres_depth": { + "datatype": "real", + "default_value": "3000e2", + "longname": "Threshold depth for CaCO3 burial when opt = 'fixed_depth'", + "subcategory": "4. general parameters", + "units": "cm" + }, + "caco3_bury_thres_omega_calc": { + "datatype": "real", + "default_value": 0.89, + "longname": "omega calcite threshold for CaCO3 burial when opt = 'omega_calc'", + "subcategory": "4. general parameters", + "units": 1 + }, + "caco3_bury_thres_opt": { + "datatype": "string", + "default_value": "omega_calc", + "longname": "Option of threshold of CaCO3 burial", + "subcategory": "4. general parameters", + "units": "non-numeric", + "valid_values": [ + "fixed_depth", + "omega_calc" + ] + }, + "ciso_fract_factors": { + "datatype": "string", + "default_value": "Laws", + "longname": "Option for which biological fractionation calculation to use", + "subcategory": "4. general parameters", + "units": "non-numeric" + }, + "ciso_lecovars_full_depth_tavg": { + "datatype": "logical", + "default_value": ".false.", + "longname": "Control whether carbon isotope variables are written full depth", + "subcategory": "2. config flags", + "units": "unitless" + }, + "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.33, + "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": 6.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.822, + "longname": "max Si/C ratio for growth", + "subcategory": "4. general parameters", + "units": 1 + }, + "gQsi_min": { + "datatype": "real", + "default_value": 0.0457, + "longname": "min Si/C ratio for growth", + "subcategory": "4. general parameters", + "units": 1 + }, + "ladjust_bury_coeff": { + "_append_to_config_keywords": true, + "datatype": "logical", + "default_value": ".false.", + "longname": "Control if bury coefficients are adjusted (rather than constant)", + "subcategory": "2. config flags", + "units": "unitless" + }, + "lcompute_nhx_surface_emis": { + "datatype": "logical", + "default_value": ".true.", + "longname": "Control if NHx emissions are computed", + "subcategory": "2. config flags", + "units": "unitless" + }, + "lecovars_full_depth_tavg": { + "datatype": "logical", + "default_value": ".false.", + "longname": "Control whether base ecosystem variables are written full depth", + "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": 2.6, + "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.02, + "longname": "CaCO3 gamma (fraction of production -> hard subclass)", + "subcategory": "4. general parameters", + "units": 1 + }, + "parm_FeLig_scavenge_rate0": { + "datatype": "real", + "default_value": 1.2, + "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": 22.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.0, + "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.01, + "longname": "hPOC to CaCO3 ratio", + "subcategory": "4. general parameters", + "units": 1 + }, + "parm_hPOC_SiO2_ratio": { + "datatype": "real", + "default_value": 0.01, + "longname": "hPOC to SiO2 ratio", + "subcategory": "4. general parameters", + "units": 1 + }, + "parm_hPOC_dust_ratio": { + "datatype": "real", + "default_value": 0.01, + "longname": "hPOC to dust ratio", + "subcategory": "4. general parameters", + "units": 1 + }, + "parm_init_POC_bury_coeff": { + "datatype": "real", + "default_value": { + "GRID == \"CESM_x3\"": 5.0, + "default": 2.54 + }, + "longname": "Initial scale factor for burial of POC, PON", + "subcategory": "4. general parameters (bury coeffs)", + "units": "unitless" + }, + "parm_init_POP_bury_coeff": { + "datatype": "real", + "default_value": { + "GRID == \"CESM_x3\"": 5.0, + "default": 0.36 + }, + "longname": "Initial scale factor for burial of POP", + "subcategory": "4. general parameters (bury coeffs)", + "units": "unitless" + }, + "parm_init_bSi_bury_coeff": { + "datatype": "real", + "default_value": { + "GRID == \"CESM_x3\"": 1.1, + "default": 1.53 + }, + "longname": "Initial scale factor for burial of bSi", + "subcategory": "4. general parameters (bury coeffs)", + "units": "unitless" + }, + "parm_kappa_nitrif_per_day": { + "datatype": "real", + "default_value": 0.06, + "longname": "Nitrification inverse time constant", + "subcategory": "4. general parameters (nitrification)", + "units": "1/day" + }, + "parm_labile_ratio": { + "datatype": "real", + "default_value": 0.94, + "longname": "Fraction of loss to DOC that routed directly to DIC", + "subcategory": "4. general parameters", + "units": "unitless" + }, + "parm_nitrif_par_lim": { + "datatype": "real", + "default_value": 1.0, + "longname": "PAR limit for nitrification", + "subcategory": "4. general parameters (nitrification)", + "units": "W/m^2" + }, + "parm_o2_min": { + "datatype": "real", + "default_value": 5.0, + "longname": "Minimum O2 needed for production & consumption", + "subcategory": "4. general parameters", + "units": "nmol/cm^3" + }, + "parm_o2_min_delta": { + "datatype": "real", + "default_value": 5.0, + "longname": "Width of min O2 range", + "subcategory": "4. general parameters", + "units": "nmol/cm^3" + }, + "parm_scalelen_vals": { + "_array_shape": 4, + "datatype": "real", + "default_value": { + "GRID == \"CESM_x3\"": [ + 1, + 3.3, + 4.2, + 4.4 + ], + "default": [ + 1, + 3.6, + 4.7, + 4.8 + ] + }, + "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": 1.5, + "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/json/settings_latest.json b/defaults/json/settings_latest.json index cc7be1be..37b8562a 100644 --- a/defaults/json/settings_latest.json +++ b/defaults/json/settings_latest.json @@ -164,6 +164,25 @@ "subcategory": "10. autotrophs", "units": "non-numeric" }, + "is_carbon_limited": { + "datatype": "logical", + "default_value": ".false.", + "longname": "Flag set to true if autotroph is carbon limited", + "subcategory": "10. autotrophs", + "units": "non-numeric" + }, + "kCO2": { + "datatype": "real", + "default_value": { + "((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": { @@ -330,6 +349,23 @@ "subcategory": "10. autotrophs", "units": "non-numeric" }, + "temp_func_form_opt": { + "datatype": "string", + "default_value": { + "((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": { @@ -558,6 +594,21 @@ "subcategory": "11. zooplankton", "units": "non-numeric" }, + "temp_func_form_opt": { + "datatype": "string", + "default_value": { + "((zooplankton_sname)) == \"zoo\"": "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": { @@ -1251,18 +1302,6 @@ "subcategory": "4. general parameters", "units": "m" }, - "temp_func_form_opt": { - "_append_to_config_keywords": true, - "datatype": "string", - "default_value": "q_10", - "longname": "Option for the temperature scaling functional form", - "subcategory": "4. general parameters", - "units": "non-numeric", - "valid_values": [ - "q_10", - "arrhenius" - ] - }, "zoo_mort2_exp": { "datatype": "real", "default_value": 1.5, @@ -1272,16 +1311,6 @@ } }, "general_parms2": { - "Tref": { - "datatype": "real", - "default_value": { - "default": 30.0, - "temp_func_form_opt == \"arrhenius\"": 25.0 - }, - "longname": "reference temperature (C) used for the temperature scaling functional form", - "subcategory": "4. general parameters", - "units": "degC" - }, "init_bury_coeff_opt": { "datatype": "string", "default_value": { diff --git a/defaults/settings_cesm2.0.yaml b/defaults/settings_cesm2.0.yaml index 01e92716..dd9478bc 100644 --- a/defaults/settings_cesm2.0.yaml +++ b/defaults/settings_cesm2.0.yaml @@ -329,16 +329,6 @@ general_parms : units : unitless datatype : real default_value : 1.0 - temp_func_form_opt: - longname : Option for the temperature scaling functional form - subcategory : 4. general parameters - units : non-numeric - datatype : string - default_value : q_10 - valid_values : - - q_10 - - arrhenius - _append_to_config_keywords : true particulate_flux_ref_depth : longname : reference depth for particulate flux diagnostics subcategory : 4. general parameters @@ -636,14 +626,6 @@ general_parms2 : default : settings_file not ladjust_bury_coeff : settings_file SAVED_STATE_VARS_SOURCE == "GCM" : GCM - Tref: - longname : reference temperature (C) used for the temperature scaling functional form - subcategory : 4. general parameters - units : degC - datatype : real - default_value : - default : 30.0 - temp_func_form_opt == "arrhenius" : 25.0 ################################################################################ # Category 2: PFT_counts # @@ -709,6 +691,20 @@ PFT_derived_types : ((autotroph_sname)) == "sp" : Small Phyto ((autotroph_sname)) == "diat" : Diatom ((autotroph_sname)) == "diaz" : Diazotroph + 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 Nfixer : longname : Flag set to true if autotroph fixes nitrogen subcategory : 10. autotrophs @@ -740,6 +736,12 @@ PFT_derived_types : 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 : .false. kFe : longname : Fe uptake half-sat constant subcategory : 10. autotrophs @@ -750,6 +752,16 @@ PFT_derived_types : ((autotroph_sname)) == "sp" : 0.03e-3 ((autotroph_sname)) == "diat" : 0.06e-3 ((autotroph_sname)) == "diaz" : 0.045e-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 kPO4 : longname : PO4 uptake half-sat constant subcategory : 10. autotrophs @@ -973,6 +985,18 @@ PFT_derived_types : default_value : default : UNSET ((zooplankton_sname)) == "zoo" : Zooplankton + 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)) == "zoo" : q_10 z_mort_0_per_day : longname : Linear mortality rate subcategory : 11. zooplankton diff --git a/defaults/settings_cesm2.1+cocco.yaml b/defaults/settings_cesm2.1+cocco.yaml new file mode 100644 index 00000000..391e7fe5 --- /dev/null +++ b/defaults/settings_cesm2.1+cocco.yaml @@ -0,0 +1,1225 @@ +# ABOUT THIS FILE +# --------------- +# MARBL users can change settings values for runtime-configurable variables via a settings +# input file. MARBL provides a python script that can generate an input file by reading a +# JSON file containing the configurable variables and default values, but JSON does not allow +# comments in the file format so the workflow is to edit this YAML file and then generate +# the JSON file via $MARBL/MARBL_tools/yaml_to_json.py +# +# Parameters in MARBL are divided into four different stages, based on the order in which they are set +# 1. General Parameters: variables that have no dependencies on other stages +# (note that init_bury_coeff_opt is alone in general_parms2 because it depends on ladjust_bury_coeff) +# 2. PFT Counts: variables that can not be set until after PFT_defaults (in General Parameters) is known +# 3. PFT Derived Types: variables that can not be set until PFT Counts are known +# (autotroph_cnt, zooplankton_cnt, and max_grazer_prey_cnt) +# 4. Post-Tracer: variables that can not be set until the tracer count is known +# (tracer count depends on PFT Derived Types) +# +# All variables need to provide the following metadata: +# 1. longname: a description of the variable +# 2. subcategory: when writing parameters to the log, MARBL will group variables by subcategory +# 3. units: physical units (use "unitless" for pure numbers and "non-numeric" for strings / logicals) +# 4. datatype: integer, real, logical, or string +# 5. default_value: Value to use unless overwritten by the MARBL input file +# NOTE: some parameters provide different default values for different configurations; +# e.g. in CESM, the value of some parameters is resolution-dependent. In these +# cases, default_value should be a dictionary with a "default" key and then keys +# for whatever resolutions differ from the default. +# +# Accepted keys: +# 1. default +# 2. CESM_x3 +# +# There are also some optional metadata options: +# 1. valid_values: only values that MARBL will accept (default_value must be in valid_values!) +# 2. cannot change: +# 3. must set: +# 4. _append_to_config_keywords: if default values of variables processed later depend on the +# value of another variable, then that variable needs to have +# _append_to_config_keywords = True +# + +# Order in which the categories are parsed +_order : + - general_parms + - general_parms2 + - PFT_counts + - PFT_derived_types + - tracer_dependent + +# Tracer count +_tracer_list : + # Non-living tracers + PO4 : + long_name : Dissolved Inorganic Phosphate + units : mmol/m^3 + NO3 : + long_name : Dissolved Inorganic Nitrate + units : mmol/m^3 + SiO3 : + long_name : Dissolved Inorganic Silicate + units : mmol/m^3 + NH4 : + long_name : Dissolved Ammonia + units : mmol/m^3 + Fe : + long_name : Dissolved Inorganic Iron + units : mmol/m^3 + Lig : + long_name : Iron Binding Ligand + units : mmol/m^3 + O2 : + long_name : Dissolved Oxygen + units : mmol/m^3 + DIC : + long_name : Dissolved Inorganic Carbon + units : mmol/m^3 + DIC_ALT_CO2 : + long_name : Dissolved Inorganic Carbon, Alternative CO2 + units : mmol/m^3 + ALK : + long_name : Alkalinity + units : meq/m^3 + ALK_ALT_CO2 : + long_name : Alkalinity, Alternative CO2 + units : meq/m^3 + DOC : + long_name : Dissolved Organic Carbon + units : mmol/m^3 + DON : + long_name : Dissolved Organic Nitrogen + units : mmol/m^3 + DOP : + long_name : Dissolved Organic Phosphorus + units : mmol/m^3 + DOPr : + long_name : Refractory DOP + units : mmol/m^3 + DONr : + long_name : Refractory DON + units : mmol/m^3 + DOCr : + long_name : Refractory DOC + units : mmol/m^3 + # Non-living (ciso only) + DI13C : + dependencies : + ciso_on : .true. + long_name : Dissolved Inorganic Carbon-13 + units : mmol/m^3 + DO13Ctot : + dependencies : + ciso_on : .true. + long_name : Dissolved Organic Carbon-13 (semi-labile+refractoy) + units : mmol/m^3 + DI14C : + dependencies : + ciso_on : .true. + long_name : Dissolved Inorganic Carbon-14 + units : mmol/m^3 + DO14Ctot : + dependencies : + ciso_on : .true. + long_name : Dissolved Organic Carbon-14 (semi-labile+refractoy) + units : mmol/m^3 + + # Per-autotroph tracers + ((autotroph_sname))Chl : + long_name : ((autotroph_lname)) Chlorophyll + units : mmol/m^3 + ((autotroph_sname))C : + long_name : ((autotroph_lname)) Carbon + units : mmol/m^3 + ((autotroph_sname))Fe : + long_name : ((autotroph_lname)) Iron + units : mmol/m^3 + ((autotroph_sname))Si : + dependencies : + ((autotroph_silicifier)) : True + long_name : ((autotroph_lname)) Silicon + units : mmol/m^3 + ((autotroph_sname))CaCO3 : + dependencies : + ((autotroph_calcifier)) : True + long_name : ((autotroph_lname)) CaCO3 + units : mmol/m^3 + ((autotroph_sname))P : + dependencies : + lvariable_PtoC : .true. + long_name : ((autotroph_lname)) Phosphorus + units : mmol/m^3 + # Per-autotroph (ciso only) + ((autotroph_sname))13C : + dependencies : + ciso_on : .true. + long_name : ((autotroph_lname)) Carbon-13 + units : mmol/m^3 + ((autotroph_sname))14C : + dependencies : + ciso_on : .true. + long_name : ((autotroph_lname)) Carbon-14 + units : mmol/m^3 + ((autotroph_sname))Ca13CO3 : + dependencies : + ciso_on : .true. + ((autotroph_calcifier)) : True + long_name : ((autotroph_lname)) Ca13CO3 + units : mmol/m^3 + ((autotroph_sname))Ca14CO3 : + dependencies : + ciso_on : .true. + ((autotroph_calcifier)) : True + long_name : ((autotroph_lname)) Ca14CO3 + units : mmol/m^3 + + # Per-zooplankton tracers + ((zooplankton_sname))C : + long_name : ((zooplankton_lname)) Carbon + units : mmol/m^3 + # Total zooplankton tracers (ciso only) + zootot13C : + dependencies : + ciso_on : .true. + long_name : Zooplankton Carbon-13 (sum over all zooplankton) + units : mmol/m^3 + zootot14C : + dependencies : + ciso_on : .true. + long_name : Zooplankton Carbon-14 (sum over all zooplankton) + units : mmol/m^3 + +################################################################################ +# Category 1: General Parameters # +################################################################################ + +general_parms : + PFT_defaults : + longname : Define how PFTs are initialized + subcategory : 1. config PFTs + units : unitless + datatype : string + default_value : CESM2.1+cocco + valid_values : + - CESM2.1+cocco + - user-specified + _CESM2.1+cocco_PFT_keys : + autotroph_settings : + - sp + - diat + - diaz + - cocco + zooplankton_settings : + - zoo + grazing_relationship_settings : + - sp_zoo + - diat_zoo + - diaz_zoo + - cocco_zoo + _append_to_config_keywords : true + ciso_on : + longname : Control whether CISO tracer module is active + subcategory : 2. config flags + units : unitless + datatype : logical + default_value : .false. + lsource_sink : + longname : Control which portions of code are executed (useful for debugging) + subcategory : 2. config flags + units : unitless + datatype : logical + default_value : .true. + ciso_lsource_sink : + longname : Control which portions of the carbon isotope code are executed (useful for debugging) + subcategory : 2. config flags + units : unitless + datatype : logical + default_value : .true. + lecovars_full_depth_tavg : + longname : Control whether base ecosystem variables are written full depth + subcategory : 2. config flags + units : unitless + datatype : logical + default_value : .false. + ciso_lecovars_full_depth_tavg : + longname : Control whether carbon isotope variables are written full depth + subcategory : 2. config flags + units : unitless + datatype : logical + default_value : .false. + lflux_gas_o2 : + longname : Control which portions of code are executed (useful for debugging) + subcategory : 2. config flags + units : unitless + datatype : logical + default_value : .true. + lflux_gas_co2 : + longname : Control which portions of code are executed (useful for debugging) + subcategory : 2. config flags + units : unitless + datatype : logical + default_value : .true. + lcompute_nhx_surface_emis : + longname : Control if NHx emissions are computed + subcategory : 2. config flags + units : unitless + datatype : logical + default_value : .true. + lvariable_PtoC : + longname : Control if PtoC ratios in autotrophs vary + subcategory : 2. config flags + units : unitless + datatype : logical + default_value : .true. + ladjust_bury_coeff : + longname : Control if bury coefficients are adjusted (rather than constant) + subcategory : 2. config flags + units : unitless + datatype : logical + default_value : .false. + _append_to_config_keywords : true + lo2_consumption_scalef : + longname : Apply o2_consumption_scalef to o2 consumption (and request it as a forcing) + subcategory : 2. config flags + units : unitless + datatype : logical + default_value : # default value is resolution dependent! + default : .false. + GRID == "CESM_x1" : .true. + lp_remin_scalef : + longname : Apply p_remin_scalef to particulate remin (and request it as a forcing) + subcategory : 2. config flags + units : unitless + datatype : logical + default_value : .false. + Jint_Ctot_thres_molpm2pyr : + longname : MARBL will abort if abs(Jint_Ctot) exceeds this threshold + subcategory : 4. general parameters + units : mol m-2 yr-1 + datatype : real + default_value : 1.0e-9 + gQsi_0 : + longname : initial Si/C ratio for growth + subcategory : 4. general parameters + units : 1 + datatype : real + default_value : 0.137 + gQsi_max : + longname : max Si/C ratio for growth + subcategory : 4. general parameters + units : 1 + datatype : real + default_value : 0.822 + 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 : 6.0 + parm_Fe_bioavail : + longname : Fraction of Fe flux that is bioavailable + subcategory : 4. general parameters + units : unitless + datatype : real + default_value : 1.0 + particulate_flux_ref_depth : + longname : reference depth for particulate flux diagnostics + subcategory : 4. general parameters + units : m + datatype : integer + default_value : 100 + parm_o2_min : + longname : Minimum O2 needed for production & consumption + subcategory : 4. general parameters + units : nmol/cm^3 + datatype : real + default_value : 5.0 + parm_o2_min_delta : + longname : Width of min O2 range + subcategory : 4. general parameters + units : nmol/cm^3 + datatype : real + default_value : 5.0 + parm_kappa_nitrif_per_day : + longname : Nitrification inverse time constant + subcategory : 4. general parameters (nitrification) + units : 1/day + datatype : real + default_value : 0.06 + parm_nitrif_par_lim : + longname : PAR limit for nitrification + subcategory : 4. general parameters (nitrification) + units : W/m^2 + datatype : real + default_value : 1.0 + parm_labile_ratio : + longname : Fraction of loss to DOC that routed directly to DIC + subcategory : 4. general parameters + units : unitless + datatype : real + default_value : 0.94 + parm_init_POC_bury_coeff : + longname : Initial scale factor for burial of POC, PON + subcategory : 4. general parameters (bury coeffs) + units : unitless + datatype : real + default_value : # default value is resolution dependent! + default : 2.54 + GRID == "CESM_x3" : 5.0 + parm_init_POP_bury_coeff : + longname : Initial scale factor for burial of POP + subcategory : 4. general parameters (bury coeffs) + units : unitless + datatype : real + default_value : # default value is resolution dependent! + default : 0.36 + GRID == "CESM_x3" : 5.0 + parm_init_bSi_bury_coeff : + longname : Initial scale factor for burial of bSi + subcategory : 4. general parameters (bury coeffs) + units : unitless + datatype : real + default_value : # default value is resolution dependent! + default : 1.53 + GRID == "CESM_x3" : 1.1 + parm_Fe_scavenge_rate0 : + longname : Scavenging base rate for Fe + subcategory : 4. general parameters (scavenging) + units : unitless + datatype : real + default_value : 22.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.2 + 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.0 + parm_hPOC_SiO2_ratio : + longname : hPOC to SiO2 ratio + subcategory : 4. general parameters + units : 1 + datatype : real + default_value : 0.01 + 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.02 + parm_hPOC_CaCO3_ratio : + longname : hPOC to CaCO3 ratio + subcategory : 4. general parameters + units : 1 + datatype : real + default_value : 0.01 + parm_hPOC_dust_ratio : + longname : hPOC to dust ratio + subcategory : 4. general parameters + units : 1 + datatype : real + default_value : 0.01 + 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 : 2.6 + 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.6 + - 4.7 + - 4.8 + GRID == "CESM_x3" : + - 1 + - 3.3 + - 4.2 + - 4.4 + caco3_bury_thres_opt : + longname : Option of threshold of CaCO3 burial + subcategory : 4. general parameters + units : non-numeric + datatype : string + default_value : omega_calc + valid_values : + - fixed_depth + - omega_calc + caco3_bury_thres_depth : + longname : Threshold depth for CaCO3 burial when opt = 'fixed_depth' + subcategory : 4. general parameters + units : cm + datatype : real + default_value : 3000e2 + caco3_bury_thres_omega_calc : + longname : omega calcite threshold for CaCO3 burial when opt = 'omega_calc' + subcategory : 4. general parameters + units : 1 + datatype : real + default_value : 0.89 + PON_bury_coeff : + longname : Scale factor for burial of PON + subcategory : 4. general parameters (bury coeffs) + units : unitless + datatype : real + default_value : 0.5 + POM_bury_frac_max : + longname : maximum bury fraction for POM + subcategory : 4. general parameters (bury coeffs) + units : unitless + datatype : real + default_value : 0.8 + bSi_bury_frac_max : + longname : maximum bury fraction for bSi + subcategory : 4. general parameters (bury coeffs) + units : unitless + datatype : real + default_value : 1.0 + ciso_fract_factors : + longname : Option for which biological fractionation calculation to use + subcategory : 4. general parameters + units : non-numeric + datatype : string + default_value : Laws + auto_mort2_exp : + longname : Value of power loss exponent for autotrophs + subcategory : 4. general parameters + units : unitless + datatype : real + default_value : 1.75 + zoo_mort2_exp : + longname : Value of power loss exponent for zooplankton + subcategory : 4. general parameters + units : unitless + datatype : real + default_value : 1.5 + QCaCO3_max : + longname : Max CaCO3/C ratio for calcifiers + subcategory : 4. general parameters + units : mmol CaCO3/mmol C + datatype : real + default_value : 2.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.7 + +################################################################################ +# Category 1.5: General Parameters (cont) # +################################################################################ + +general_parms2 : + init_bury_coeff_opt : + longname : Source of initial burial coefficient + subcategory : 3. config strings + units : unitless + datatype : string + default_value : + # Note: this relies on SAVED_STATE_VARS_SOURCE appearing in _config_keyword + # before ladjust_bury_coeff because matching the keyword in + # MARBL_settings_file_class::_get_var_value relies on the last entry + # in _config_keyword that matches a key below; for this variable, if + # ladjust_bury_coeff = .false. and SAVED_STATE_VARS_SOURCE = GCM we + # want init_bury_coeff_opt = settings_file + default : settings_file + not ladjust_bury_coeff : settings_file + SAVED_STATE_VARS_SOURCE == "GCM" : GCM + +################################################################################ +# Category 2: PFT_counts # +################################################################################ + +PFT_counts : + autotroph_cnt : + longname : Number of autotroph classes + subcategory : 1. config PFTs + units : unitless + datatype : integer + default_value : + default : 1 + PFT_defaults == "CESM2.1+cocco" : 4 + cannot change : PFT_defaults == 'CESM2.1+cocco' + must set : PFT_defaults == 'user-specified' + zooplankton_cnt : + longname : Number of zooplankton classes + subcategory : 1. config PFTs + units : unitless + datatype : integer + default_value : + default : 1 + PFT_defaults == "CESM2.1+cocco" : 1 + max_grazer_prey_cnt : + longname : Number of grazer prey classes + subcategory : 1. config PFTs + units : unitless + datatype : integer + default_value : + default : 1 + PFT_defaults == "CESM2.1+cocco" : 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.08e-3 + ((autotroph_sname)) == "diaz" : 0.045e-3 + ((autotroph_sname)) == "cocco" : 0.0315e-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.005 + ((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.1 + ((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.5 + ((autotroph_sname)) == "diaz" : 2 + ((autotroph_sname)) == "cocco" : 0.2 + 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.8 + ((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" : 35e-6 + ((autotroph_sname)) == "diat" : 35e-6 + ((autotroph_sname)) == "diaz" : 70e-6 + ((autotroph_sname)) == "cocco" : 35e-6 + gQfe_min : + longname : Minimum Fe/C ratio for growth + subcategory : 10. autotrophs + units : unitless + datatype : real + default_value : + default : 1e34 + ((autotroph_sname)) == "sp" : 3e-6 + ((autotroph_sname)) == "diat" : 3e-6 + ((autotroph_sname)) == "diaz" : 6e-6 + ((autotroph_sname)) == "cocco" : 3e-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.39 + ((autotroph_sname)) == "cocco" : 0.28 + 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.4 + ((autotroph_sname)) == "diat" : 5 + ((autotroph_sname)) == "diaz" : 2.2 + ((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.5 + 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)) == "zoo" : zoo + lname : + longname : Long name of the zooplankton + subcategory : 11. zooplankton + units : non-numeric + datatype : string + default_value : + default : UNSET + ((zooplankton_sname)) == "zoo" : Zooplankton + 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)) == "zoo" : 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)) == "zoo" : 0.1 + 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)) == "zoo" : 0.4 + 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)) == "zoo" : 0.075 + Ea : + longname : Activation energy for Arrhenius equation + subcategory : 11. zooplankton + units : eV + datatype : real + default_value : + default : 1e34 + ((zooplankton_sname)) == "zoo" : 0.65 + 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_zoo" : grz_sp_zoo + ((grazer_sname)) == "diat_zoo" : grz_diat_zoo + ((grazer_sname)) == "diaz_zoo" : grz_diaz_zoo + ((grazer_sname)) == "cocco_zoo" : grz_cocco_zoo + lname : + longname : Long name of the grazing relationship + subcategory : 12. grazing + units : non-numeric + datatype : string + default_value : + default : UNSET + ((grazer_sname)) == "sp_zoo" : Grazing of sp by zoo + ((grazer_sname)) == "diat_zoo" : Grazing of diat by zoo + ((grazer_sname)) == "diaz_zoo" : Grazing of diaz by zoo + ((grazer_sname)) == "cocco_zoo" : Grazing of cocco by zoo + auto_ind_cnt : + longname : Number of autotrophs being grazed + subcategory : 12. grazing + units : unitless + datatype : integer + default_value : + default : 1 + zoo_ind_cnt : + longname : Number of zooplankton being grazed + subcategory : 12. grazing + units : unitless + datatype : integer + default_value : + default : 0 + 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_zoo" : 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_zoo" : 3.6 + ((grazer_sname)) == "diat_zoo" : 3.41 + ((grazer_sname)) == "diaz_zoo" : 3.35 + ((grazer_sname)) == "cocco_zoo" : 2.95 + z_grz : + longname : Grazing coefficient + subcategory : 12. grazing + units : (mmol/m^3)^2 + datatype : real + default_value : + default : 1e34 + ((grazer_sname)) == "sp_zoo" : 0.54 + ((grazer_sname)) == "diat_zoo" : 0.72 + ((grazer_sname)) == "diaz_zoo" : 0.6 + ((grazer_sname)) == "cocco_zoo" : 0.854 + 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_zoo" : 0.3 + ((grazer_sname)) == "diat_zoo" : 0.25 + ((grazer_sname)) == "diaz_zoo" : 0.3 + ((grazer_sname)) == "cocco_zoo" : 0.25 + graze_poc : + longname : Routing of grazed term, remainder goes to dic + subcategory : 12. grazing + units : unitless + datatype : real + default_value : + default : 1e34 + ((grazer_sname)) == "sp_zoo" : 0 + ((grazer_sname)) == "diat_zoo" : 0.38 + ((grazer_sname)) == "diaz_zoo" : 0.1 + ((grazer_sname)) == "cocco_zoo" : 0.3 + 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_zoo" : 0.06 + ((grazer_sname)) == "diat_zoo" : 0.06 + ((grazer_sname)) == "diaz_zoo" : 0.06 + ((grazer_sname)) == "cocco_zoo" : 0.06 + f_zoo_detr : + longname : Fraction of zoo losses to detrital + subcategory : 12. grazing + units : unitless + datatype : real + default_value : + default : 1e34 + ((grazer_sname)) == "sp_zoo" : 0.12 + ((grazer_sname)) == "diat_zoo" : 0.24 + ((grazer_sname)) == "diaz_zoo" : 0.12 + ((grazer_sname)) == "cocco_zoo" : 0.18 + 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_zoo" : 1 # index where autotroph_name = sp + ((grazer_sname)) == "diat_zoo" : 2 # index where autotroph_name = diat + ((grazer_sname)) == "diaz_zoo" : 3 # index where autotroph_name = diaz + ((grazer_sname)) == "cocco_zoo" : 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 : 0 + +################################################################################ +# 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/defaults/settings_cesm2.1.yaml b/defaults/settings_cesm2.1.yaml new file mode 100644 index 00000000..e4e526b8 --- /dev/null +++ b/defaults/settings_cesm2.1.yaml @@ -0,0 +1,1185 @@ +# ABOUT THIS FILE +# --------------- +# MARBL users can change settings values for runtime-configurable variables via a settings +# input file. MARBL provides a python script that can generate an input file by reading a +# JSON file containing the configurable variables and default values, but JSON does not allow +# comments in the file format so the workflow is to edit this YAML file and then generate +# the JSON file via $MARBL/MARBL_tools/yaml_to_json.py +# +# Parameters in MARBL are divided into four different stages, based on the order in which they are set +# 1. General Parameters: variables that have no dependencies on other stages +# (note that init_bury_coeff_opt is alone in general_parms2 because it depends on ladjust_bury_coeff) +# 2. PFT Counts: variables that can not be set until after PFT_defaults (in General Parameters) is known +# 3. PFT Derived Types: variables that can not be set until PFT Counts are known +# (autotroph_cnt, zooplankton_cnt, and max_grazer_prey_cnt) +# 4. Post-Tracer: variables that can not be set until the tracer count is known +# (tracer count depends on PFT Derived Types) +# +# All variables need to provide the following metadata: +# 1. longname: a description of the variable +# 2. subcategory: when writing parameters to the log, MARBL will group variables by subcategory +# 3. units: physical units (use "unitless" for pure numbers and "non-numeric" for strings / logicals) +# 4. datatype: integer, real, logical, or string +# 5. default_value: Value to use unless overwritten by the MARBL input file +# NOTE: some parameters provide different default values for different configurations; +# e.g. in CESM, the value of some parameters is resolution-dependent. In these +# cases, default_value should be a dictionary with a "default" key and then keys +# for whatever resolutions differ from the default. +# +# Accepted keys: +# 1. default +# 2. CESM_x3 +# +# There are also some optional metadata options: +# 1. valid_values: only values that MARBL will accept (default_value must be in valid_values!) +# 2. cannot change: +# 3. must set: +# 4. _append_to_config_keywords: if default values of variables processed later depend on the +# value of another variable, then that variable needs to have +# _append_to_config_keywords = True +# + +# Order in which the categories are parsed +_order : + - general_parms + - general_parms2 + - PFT_counts + - PFT_derived_types + - tracer_dependent + +# Tracer count +_tracer_list : + # Non-living tracers + PO4 : + long_name : Dissolved Inorganic Phosphate + units : mmol/m^3 + NO3 : + long_name : Dissolved Inorganic Nitrate + units : mmol/m^3 + SiO3 : + long_name : Dissolved Inorganic Silicate + units : mmol/m^3 + NH4 : + long_name : Dissolved Ammonia + units : mmol/m^3 + Fe : + long_name : Dissolved Inorganic Iron + units : mmol/m^3 + Lig : + long_name : Iron Binding Ligand + units : mmol/m^3 + O2 : + long_name : Dissolved Oxygen + units : mmol/m^3 + DIC : + long_name : Dissolved Inorganic Carbon + units : mmol/m^3 + DIC_ALT_CO2 : + long_name : Dissolved Inorganic Carbon, Alternative CO2 + units : mmol/m^3 + ALK : + long_name : Alkalinity + units : meq/m^3 + ALK_ALT_CO2 : + long_name : Alkalinity, Alternative CO2 + units : meq/m^3 + DOC : + long_name : Dissolved Organic Carbon + units : mmol/m^3 + DON : + long_name : Dissolved Organic Nitrogen + units : mmol/m^3 + DOP : + long_name : Dissolved Organic Phosphorus + units : mmol/m^3 + DOPr : + long_name : Refractory DOP + units : mmol/m^3 + DONr : + long_name : Refractory DON + units : mmol/m^3 + DOCr : + long_name : Refractory DOC + units : mmol/m^3 + # Non-living (ciso only) + DI13C : + dependencies : + ciso_on : .true. + long_name : Dissolved Inorganic Carbon-13 + units : mmol/m^3 + DO13Ctot : + dependencies : + ciso_on : .true. + long_name : Dissolved Organic Carbon-13 (semi-labile+refractoy) + units : mmol/m^3 + DI14C : + dependencies : + ciso_on : .true. + long_name : Dissolved Inorganic Carbon-14 + units : mmol/m^3 + DO14Ctot : + dependencies : + ciso_on : .true. + long_name : Dissolved Organic Carbon-14 (semi-labile+refractoy) + units : mmol/m^3 + + # Per-autotroph tracers + ((autotroph_sname))Chl : + long_name : ((autotroph_lname)) Chlorophyll + units : mmol/m^3 + ((autotroph_sname))C : + long_name : ((autotroph_lname)) Carbon + units : mmol/m^3 + ((autotroph_sname))Fe : + long_name : ((autotroph_lname)) Iron + units : mmol/m^3 + ((autotroph_sname))Si : + dependencies : + ((autotroph_silicifier)) : True + long_name : ((autotroph_lname)) Silicon + units : mmol/m^3 + ((autotroph_sname))CaCO3 : + dependencies : + ((autotroph_calcifier)) : True + long_name : ((autotroph_lname)) CaCO3 + units : mmol/m^3 + ((autotroph_sname))P : + dependencies : + lvariable_PtoC : .true. + long_name : ((autotroph_lname)) Phosphorus + units : mmol/m^3 + # Per-autotroph (ciso only) + ((autotroph_sname))13C : + dependencies : + ciso_on : .true. + long_name : ((autotroph_lname)) Carbon-13 + units : mmol/m^3 + ((autotroph_sname))14C : + dependencies : + ciso_on : .true. + long_name : ((autotroph_lname)) Carbon-14 + units : mmol/m^3 + ((autotroph_sname))Ca13CO3 : + dependencies : + ciso_on : .true. + ((autotroph_calcifier)) : True + long_name : ((autotroph_lname)) Ca13CO3 + units : mmol/m^3 + ((autotroph_sname))Ca14CO3 : + dependencies : + ciso_on : .true. + ((autotroph_calcifier)) : True + long_name : ((autotroph_lname)) Ca14CO3 + units : mmol/m^3 + + # Per-zooplankton tracers + ((zooplankton_sname))C : + long_name : ((zooplankton_lname)) Carbon + units : mmol/m^3 + # Total zooplankton tracers (ciso only) + zootot13C : + dependencies : + ciso_on : .true. + long_name : Zooplankton Carbon-13 (sum over all zooplankton) + units : mmol/m^3 + zootot14C : + dependencies : + ciso_on : .true. + long_name : Zooplankton Carbon-14 (sum over all zooplankton) + units : mmol/m^3 + +################################################################################ +# Category 1: General Parameters # +################################################################################ + +general_parms : + PFT_defaults : + longname : Define how PFTs are initialized + subcategory : 1. config PFTs + units : unitless + datatype : string + default_value : CESM2 + valid_values : + - CESM2 + - user-specified + _CESM2_PFT_keys : + autotroph_settings : + - sp + - diat + - diaz + zooplankton_settings : + - zoo + grazing_relationship_settings : + - sp_zoo + - diat_zoo + - diaz_zoo + _append_to_config_keywords : true + ciso_on : + longname : Control whether CISO tracer module is active + subcategory : 2. config flags + units : unitless + datatype : logical + default_value : .false. + lsource_sink : + longname : Control which portions of code are executed (useful for debugging) + subcategory : 2. config flags + units : unitless + datatype : logical + default_value : .true. + ciso_lsource_sink : + longname : Control which portions of the carbon isotope code are executed (useful for debugging) + subcategory : 2. config flags + units : unitless + datatype : logical + default_value : .true. + lecovars_full_depth_tavg : + longname : Control whether base ecosystem variables are written full depth + subcategory : 2. config flags + units : unitless + datatype : logical + default_value : .false. + ciso_lecovars_full_depth_tavg : + longname : Control whether carbon isotope variables are written full depth + subcategory : 2. config flags + units : unitless + datatype : logical + default_value : .false. + lflux_gas_o2 : + longname : Control which portions of code are executed (useful for debugging) + subcategory : 2. config flags + units : unitless + datatype : logical + default_value : .true. + lflux_gas_co2 : + longname : Control which portions of code are executed (useful for debugging) + subcategory : 2. config flags + units : unitless + datatype : logical + default_value : .true. + lcompute_nhx_surface_emis : + longname : Control if NHx emissions are computed + subcategory : 2. config flags + units : unitless + datatype : logical + default_value : .true. + lvariable_PtoC : + longname : Control if PtoC ratios in autotrophs vary + subcategory : 2. config flags + units : unitless + datatype : logical + default_value : .true. + ladjust_bury_coeff : + longname : Control if bury coefficients are adjusted (rather than constant) + subcategory : 2. config flags + units : unitless + datatype : logical + default_value : .false. + _append_to_config_keywords : true + lo2_consumption_scalef : + longname : Apply o2_consumption_scalef to o2 consumption (and request it as a forcing) + subcategory : 2. config flags + units : unitless + datatype : logical + default_value : # default value is resolution dependent! + default : .false. + GRID == "CESM_x1" : .true. + lp_remin_scalef : + longname : Apply p_remin_scalef to particulate remin (and request it as a forcing) + subcategory : 2. config flags + units : unitless + datatype : logical + default_value : .false. + Jint_Ctot_thres_molpm2pyr : + longname : MARBL will abort if abs(Jint_Ctot) exceeds this threshold + subcategory : 4. general parameters + units : mol m-2 yr-1 + datatype : real + default_value : 1.0e-9 + gQsi_0 : + longname : initial Si/C ratio for growth + subcategory : 4. general parameters + units : 1 + datatype : real + default_value : 0.137 + gQsi_max : + longname : max Si/C ratio for growth + subcategory : 4. general parameters + units : 1 + datatype : real + default_value : 0.822 + 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 : 6.0 + parm_Fe_bioavail : + longname : Fraction of Fe flux that is bioavailable + subcategory : 4. general parameters + units : unitless + datatype : real + default_value : 1.0 + particulate_flux_ref_depth : + longname : reference depth for particulate flux diagnostics + subcategory : 4. general parameters + units : m + datatype : integer + default_value : 100 + parm_o2_min : + longname : Minimum O2 needed for production & consumption + subcategory : 4. general parameters + units : nmol/cm^3 + datatype : real + default_value : 5.0 + parm_o2_min_delta : + longname : Width of min O2 range + subcategory : 4. general parameters + units : nmol/cm^3 + datatype : real + default_value : 5.0 + parm_kappa_nitrif_per_day : + longname : Nitrification inverse time constant + subcategory : 4. general parameters (nitrification) + units : 1/day + datatype : real + default_value : 0.06 + parm_nitrif_par_lim : + longname : PAR limit for nitrification + subcategory : 4. general parameters (nitrification) + units : W/m^2 + datatype : real + default_value : 1.0 + parm_labile_ratio : + longname : Fraction of loss to DOC that routed directly to DIC + subcategory : 4. general parameters + units : unitless + datatype : real + default_value : 0.94 + parm_init_POC_bury_coeff : + longname : Initial scale factor for burial of POC, PON + subcategory : 4. general parameters (bury coeffs) + units : unitless + datatype : real + default_value : # default value is resolution dependent! + default : 2.54 + GRID == "CESM_x3" : 5.0 + parm_init_POP_bury_coeff : + longname : Initial scale factor for burial of POP + subcategory : 4. general parameters (bury coeffs) + units : unitless + datatype : real + default_value : # default value is resolution dependent! + default : 0.36 + GRID == "CESM_x3" : 5.0 + parm_init_bSi_bury_coeff : + longname : Initial scale factor for burial of bSi + subcategory : 4. general parameters (bury coeffs) + units : unitless + datatype : real + default_value : # default value is resolution dependent! + default : 1.53 + GRID == "CESM_x3" : 1.1 + parm_Fe_scavenge_rate0 : + longname : Scavenging base rate for Fe + subcategory : 4. general parameters (scavenging) + units : unitless + datatype : real + default_value : 22.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.2 + 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.0 + parm_hPOC_SiO2_ratio : + longname : hPOC to SiO2 ratio + subcategory : 4. general parameters + units : 1 + datatype : real + default_value : 0.01 + 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.02 + parm_hPOC_CaCO3_ratio : + longname : hPOC to CaCO3 ratio + subcategory : 4. general parameters + units : 1 + datatype : real + default_value : 0.01 + parm_hPOC_dust_ratio : + longname : hPOC to dust ratio + subcategory : 4. general parameters + units : 1 + datatype : real + default_value : 0.01 + 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 : 2.6 + 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.6 + - 4.7 + - 4.8 + GRID == "CESM_x3" : + - 1 + - 3.3 + - 4.2 + - 4.4 + caco3_bury_thres_opt : + longname : Option of threshold of CaCO3 burial + subcategory : 4. general parameters + units : non-numeric + datatype : string + default_value : omega_calc + valid_values : + - fixed_depth + - omega_calc + caco3_bury_thres_depth : + longname : Threshold depth for CaCO3 burial when opt = 'fixed_depth' + subcategory : 4. general parameters + units : cm + datatype : real + default_value : 3000e2 + caco3_bury_thres_omega_calc : + longname : omega calcite threshold for CaCO3 burial when opt = 'omega_calc' + subcategory : 4. general parameters + units : 1 + datatype : real + default_value : 0.89 + PON_bury_coeff : + longname : Scale factor for burial of PON + subcategory : 4. general parameters (bury coeffs) + units : unitless + datatype : real + default_value : 0.5 + POM_bury_frac_max : + longname : maximum bury fraction for POM + subcategory : 4. general parameters (bury coeffs) + units : unitless + datatype : real + default_value : 0.8 + bSi_bury_frac_max : + longname : maximum bury fraction for bSi + subcategory : 4. general parameters (bury coeffs) + units : unitless + datatype : real + default_value : 1.0 + ciso_fract_factors : + longname : Option for which biological fractionation calculation to use + subcategory : 4. general parameters + units : non-numeric + datatype : string + default_value : Laws + auto_mort2_exp : + longname : Value of power loss exponent for autotrophs + subcategory : 4. general parameters + units : unitless + datatype : real + default_value : 1.75 + zoo_mort2_exp : + longname : Value of power loss exponent for zooplankton + subcategory : 4. general parameters + units : unitless + datatype : real + default_value : 1.5 + QCaCO3_max : + longname : Max CaCO3/C ratio for calcifiers + subcategory : 4. general parameters + units : mmol CaCO3/mmol C + datatype : real + default_value : 0.40 + 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.33 + +################################################################################ +# Category 1.5: General Parameters (cont) # +################################################################################ + +general_parms2 : + init_bury_coeff_opt : + longname : Source of initial burial coefficient + subcategory : 3. config strings + units : unitless + datatype : string + default_value : + # Note: this relies on SAVED_STATE_VARS_SOURCE appearing in _config_keyword + # before ladjust_bury_coeff because matching the keyword in + # MARBL_settings_file_class::_get_var_value relies on the last entry + # in _config_keyword that matches a key below; for this variable, if + # ladjust_bury_coeff = .false. and SAVED_STATE_VARS_SOURCE = GCM we + # want init_bury_coeff_opt = settings_file + default : settings_file + not ladjust_bury_coeff : settings_file + SAVED_STATE_VARS_SOURCE == "GCM" : GCM + +################################################################################ +# Category 2: PFT_counts # +################################################################################ + +PFT_counts : + autotroph_cnt : + longname : Number of autotroph classes + subcategory : 1. config PFTs + units : unitless + datatype : integer + default_value : + default : 1 + PFT_defaults == "CESM2" : 3 + cannot change : PFT_defaults == 'CESM2' + must set : PFT_defaults == 'user-specified' + zooplankton_cnt : + longname : Number of zooplankton classes + subcategory : 1. config PFTs + units : unitless + datatype : integer + default_value : + default : 1 + PFT_defaults == "CESM2" : 1 + max_grazer_prey_cnt : + longname : Number of grazer prey classes + subcategory : 1. config PFTs + units : unitless + datatype : integer + default_value : + default : 1 + PFT_defaults == "CESM2" : 3 + +################################################################################ +# 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 + 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 + 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 + 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. + ((autotroph_sname)) == "sp" : .true. + exp_calcifier : + longname : Flag set to true if autotroph explicitly handles calcification + subcategory : 10. autotrophs + units : non-numeric + datatype : logical + default_value : + default : .false. + 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 : .false. + 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.07e-3 + ((autotroph_sname)) == "diaz" : 0.045e-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 + 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 + 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 + kNO3 : + longname : NO3 uptake half-sat constant + subcategory : 10. autotrophs + units : nmol/cm^3 + datatype : real + default_value : + default : 1e34 + ((autotroph_sname)) == "sp" : 0.25 + ((autotroph_sname)) == "diat" : 0.5 + ((autotroph_sname)) == "diaz" : 2 + 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 + 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" : 0.7 + ((autotroph_sname)) == "diaz" : 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) + 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 + 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 + 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.39 + ((autotroph_sname)) == "diat" : 0.28 + ((autotroph_sname)) == "diaz" : 0.39 + 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" : 5 + ((autotroph_sname)) == "diat" : 5 + ((autotroph_sname)) == "diaz" : 2.5 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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)) == "zoo" : zoo + lname : + longname : Long name of the zooplankton + subcategory : 11. zooplankton + units : non-numeric + datatype : string + default_value : + default : UNSET + ((zooplankton_sname)) == "zoo" : Zooplankton + 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)) == "zoo" : 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)) == "zoo" : 0.1 + 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)) == "zoo" : 0.4 + 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)) == "zoo" : 0.075 + Ea : + longname : Activation energy for Arrhenius equation + subcategory : 11. zooplankton + units : eV + datatype : real + default_value : + default : 1e34 + ((zooplankton_sname)) == "zoo" : 0.65 + 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_zoo" : grz_sp_zoo + ((grazer_sname)) == "diat_zoo" : grz_diat_zoo + ((grazer_sname)) == "diaz_zoo" : grz_diaz_zoo + lname : + longname : Long name of the grazing relationship + subcategory : 12. grazing + units : non-numeric + datatype : string + default_value : + default : UNSET + ((grazer_sname)) == "sp_zoo" : Grazing of sp by zoo + ((grazer_sname)) == "diat_zoo" : Grazing of diat by zoo + ((grazer_sname)) == "diaz_zoo" : Grazing of diaz by zoo + auto_ind_cnt : + longname : Number of autotrophs being grazed + subcategory : 12. grazing + units : unitless + datatype : integer + default_value : + default : 1 + zoo_ind_cnt : + longname : Number of zooplankton being grazed + subcategory : 12. grazing + units : unitless + datatype : integer + default_value : + default : 0 + grazing_function : + longname : Functional form of grazing parameterization + subcategory : 12. grazing + units : unitless + datatype : integer + _comment : 1 => Michaelis-Menten, 2 => Sigmoidal + default_value : 1 + 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_zoo" : 3.3 + ((grazer_sname)) == "diat_zoo" : 3.15 + ((grazer_sname)) == "diaz_zoo" : 3.3 + z_grz : + longname : Grazing coefficient + subcategory : 12. grazing + units : (mmol/m^3)^2 + datatype : real + default_value : + default : 1e34 + ((grazer_sname)) == "sp_zoo" : 1.2 + ((grazer_sname)) == "diat_zoo" : 1.2 + ((grazer_sname)) == "diaz_zoo" : 1.2 + 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_zoo" : 0.3 + ((grazer_sname)) == "diat_zoo" : 0.25 + ((grazer_sname)) == "diaz_zoo" : 0.3 + 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_zoo" : 0 + ((grazer_sname)) == "diat_zoo" : 0.39 + ((grazer_sname)) == "diaz_zoo" : 0.1 + 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_zoo" : 0.06 + ((grazer_sname)) == "diat_zoo" : 0.06 + ((grazer_sname)) == "diaz_zoo" : 0.06 + f_zoo_detr : + longname : Fraction of zoo losses to detrital + subcategory : 12. grazing + units : unitless + datatype : real + default_value : + default : 1e34 + ((grazer_sname)) == "sp_zoo" : 0.12 + ((grazer_sname)) == "diat_zoo" : 0.24 + ((grazer_sname)) == "diaz_zoo" : 0.12 + 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_zoo" : 1 # index where autotroph_name = sp + ((grazer_sname)) == "diat_zoo" : 2 # index where autotroph_name = diat + ((grazer_sname)) == "diaz_zoo" : 3 # index where autotroph_name = diaz + 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 : 0 + +################################################################################ +# 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/defaults/settings_latest.yaml b/defaults/settings_latest.yaml index 97a44593..e4e526b8 100644 --- a/defaults/settings_latest.yaml +++ b/defaults/settings_latest.yaml @@ -331,16 +331,6 @@ general_parms : units : unitless datatype : real default_value : 1.0 - temp_func_form_opt: - longname : Option for the temperature scaling functional form - subcategory : 4. general parameters - units : non-numeric - datatype : string - default_value : q_10 - valid_values : - - q_10 - - arrhenius - _append_to_config_keywords : true particulate_flux_ref_depth : longname : reference depth for particulate flux diagnostics subcategory : 4. general parameters @@ -637,14 +627,6 @@ general_parms2 : default : settings_file not ladjust_bury_coeff : settings_file SAVED_STATE_VARS_SOURCE == "GCM" : GCM - Tref: - longname : reference temperature (C) used for the temperature scaling functional form - subcategory : 4. general parameters - units : degC - datatype : real - default_value : - default : 30.0 - temp_func_form_opt == "arrhenius" : 25.0 ################################################################################ # Category 2: PFT_counts # @@ -710,6 +692,20 @@ PFT_derived_types : ((autotroph_sname)) == "sp" : Small Phyto ((autotroph_sname)) == "diat" : Diatom ((autotroph_sname)) == "diaz" : Diazotroph + 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 Nfixer : longname : Flag set to true if autotroph fixes nitrogen subcategory : 10. autotrophs @@ -741,6 +737,12 @@ PFT_derived_types : 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 : .false. kFe : longname : Fe uptake half-sat constant subcategory : 10. autotrophs @@ -751,6 +753,16 @@ PFT_derived_types : ((autotroph_sname)) == "sp" : 0.03e-3 ((autotroph_sname)) == "diat" : 0.07e-3 ((autotroph_sname)) == "diaz" : 0.045e-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 kPO4 : longname : PO4 uptake half-sat constant subcategory : 10. autotrophs @@ -974,6 +986,18 @@ PFT_derived_types : default_value : default : UNSET ((zooplankton_sname)) == "zoo" : Zooplankton + 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)) == "zoo" : q_10 z_mort_0_per_day : longname : Linear mortality rate subcategory : 11. zooplankton diff --git a/src/marbl_diagnostics_mod.F90 b/src/marbl_diagnostics_mod.F90 index 3a9b40d1..3cab87da 100644 --- a/src/marbl_diagnostics_mod.F90 +++ b/src/marbl_diagnostics_mod.F90 @@ -835,6 +835,8 @@ subroutine marbl_diagnostics_init( & allocate(ind%Fe_lim_Cweight_avg_100m(autotroph_cnt)) allocate(ind%SiO3_lim_surf(autotroph_cnt)) allocate(ind%SiO3_lim_Cweight_avg_100m(autotroph_cnt)) + allocate(ind%C_lim_surf(autotroph_cnt)) + allocate(ind%C_lim_Cweight_avg_100m(autotroph_cnt)) allocate(ind%light_lim_surf(autotroph_cnt)) allocate(ind%light_lim_Cweight_avg_100m(autotroph_cnt)) allocate(ind%photoC_zint(autotroph_cnt)) @@ -961,6 +963,32 @@ subroutine marbl_diagnostics_init( & ind%SiO3_lim_Cweight_avg_100m(n) = -1 end if + if (autotroph_settings(n)%is_carbon_limited) then + lname = trim(autotroph_settings(n)%lname) // ' C Limitation, Surface' + sname = trim(autotroph_settings(n)%sname) // '_C_lim_surf' + units = '1' + vgrid = 'none' + truncate = .false. + call diags%add_diagnostic(lname, sname, units, vgrid, truncate, & + ind%C_lim_surf(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) // ' C Limitation, carbon biomass weighted average over 0-100m' + sname = trim(autotroph_settings(n)%sname) // '_C_lim_Cweight_avg_100m' + units = '1' + vgrid = 'none' + truncate = .false. + call diags%add_diagnostic(lname, sname, units, vgrid, truncate, & + ind%C_lim_Cweight_avg_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 + end if + lname = trim(autotroph_settings(n)%lname) // ' Light Limitation, Surface' sname = trim(autotroph_settings(n)%sname) // '_light_lim_surf' units = '1' @@ -3507,6 +3535,13 @@ subroutine store_diagnostics_autotrophs(marbl_domain, & near_surface_integral=diags(ind%SiO3_lim_Cweight_avg_100m(n))%field_2d(1)) endif + if (autotroph_settings(n)%is_carbon_limited) then + diags(ind%C_lim_surf(n))%field_2d(1) = autotroph_derived_terms%VCO2(n,1) + limterm = autotroph_derived_terms%VCO2(n,:) * autotrophC_weight(:) + call marbl_diagnostics_share_compute_vertical_integrals(limterm, delta_z, kmt, & + near_surface_integral=diags(ind%C_lim_Cweight_avg_100m(n))%field_2d(1)) + end if + diags(ind%light_lim_surf(n))%field_2d(1) = autotroph_derived_terms%light_lim(n,1) limterm = autotroph_derived_terms%light_lim(n,:) * autotrophC_weight(:) call marbl_diagnostics_share_compute_vertical_integrals(limterm, delta_z, kmt, & diff --git a/src/marbl_interface_private_types.F90 b/src/marbl_interface_private_types.F90 index 04cf4d14..b3f5b0c3 100644 --- a/src/marbl_interface_private_types.F90 +++ b/src/marbl_interface_private_types.F90 @@ -43,6 +43,7 @@ module marbl_interface_private_types real(r8), allocatable :: gQsi(:,:) ! diatom Si/C ratio for growth (new biomass) real(r8), allocatable :: VNO3(:,:) ! NO3 uptake rate (non-dim) real(r8), allocatable :: VNH4(:,:) ! NH4 uptake rate (non-dim) + real(r8), allocatable :: VCO2(:,:) ! CO2 uptake rate (non-dim) real(r8), allocatable :: VNtot(:,:) ! total N uptake rate (non-dim) real(r8), allocatable :: NO3_V(:,:) ! nitrate uptake (mmol NO3/m^3/sec) real(r8), allocatable :: NH4_V(:,:) ! ammonium uptake (mmol NH4/m^3/sec) @@ -533,6 +534,8 @@ module marbl_interface_private_types integer(int_kind), allocatable :: Fe_lim_Cweight_avg_100m(:) integer(int_kind), allocatable :: SiO3_lim_surf(:) integer(int_kind), allocatable :: SiO3_lim_Cweight_avg_100m(:) + integer(int_kind), allocatable :: C_lim_surf(:) + integer(int_kind), allocatable :: C_lim_Cweight_avg_100m(:) integer(int_kind), allocatable :: light_lim_surf(:) integer(int_kind), allocatable :: light_lim_Cweight_avg_100m(:) integer(int_kind), allocatable :: photoC_zint(:) @@ -1013,6 +1016,7 @@ subroutine autotroph_derived_terms_constructor(self, autotroph_cnt, zooplankton_ allocate(self%gQsi(autotroph_cnt, km)) allocate(self%VNO3(autotroph_cnt, km)) allocate(self%VNH4(autotroph_cnt, km)) + allocate(self%VCO2(autotroph_cnt, km)) allocate(self%VNtot(autotroph_cnt, km)) allocate(self%NO3_V(autotroph_cnt, km)) allocate(self%NH4_V(autotroph_cnt, km)) @@ -1067,6 +1071,7 @@ subroutine autotroph_derived_terms_destructor(self) deallocate(self%gQsi) deallocate(self%VNO3) deallocate(self%VNH4) + deallocate(self%VCO2) deallocate(self%VNtot) deallocate(self%NO3_V) deallocate(self%NH4_V) @@ -1867,6 +1872,8 @@ subroutine interior_diag_ind_destructor(this) deallocate(this%Fe_lim_Cweight_avg_100m) deallocate(this%SiO3_lim_surf) deallocate(this%SiO3_lim_Cweight_avg_100m) + deallocate(this%C_lim_surf) + deallocate(this%C_lim_Cweight_avg_100m) deallocate(this%light_lim_surf) deallocate(this%light_lim_Cweight_avg_100m) deallocate(this%photoC_zint) diff --git a/src/marbl_interior_tendency_mod.F90 b/src/marbl_interior_tendency_mod.F90 index fe9b5a5d..40b511df 100644 --- a/src/marbl_interior_tendency_mod.F90 +++ b/src/marbl_interior_tendency_mod.F90 @@ -67,7 +67,6 @@ module marbl_interior_tendency_mod use marbl_settings_mod, only : parm_red_d_c_o2 use marbl_settings_mod, only : parm_red_d_c_o2_diaz use marbl_settings_mod, only : parm_Remin_D_C_O2 - use marbl_settings_mod, only : QCaCO3_max use marbl_settings_mod, only : Qfe_zoo use marbl_settings_mod, only : spc_poc_fac use marbl_settings_mod, only : grazing_relationship_settings @@ -238,7 +237,7 @@ subroutine marbl_interior_tendency_compute( & sio3_ind => marbl_tracer_indices%sio3_ind, & nh4_ind => marbl_tracer_indices%nh4_ind, & fe_ind => marbl_tracer_indices%fe_ind, & - lig_ind => marbl_tracer_indices%lig_ind, & + lig_ind => marbl_tracer_indices%lig_ind, & o2_ind => marbl_tracer_indices%o2_ind, & dic_ind => marbl_tracer_indices%dic_ind, & dic_alt_co2_ind => marbl_tracer_indices%dic_alt_co2_ind, & @@ -248,8 +247,13 @@ subroutine marbl_interior_tendency_compute( & dopr_ind => marbl_tracer_indices%dopr_ind, & donr_ind => marbl_tracer_indices%donr_ind, & docr_ind => marbl_tracer_indices%docr_ind, & - Ea_auto => autotroph_settings(:)%Ea, & - Ea_zoo => zooplankton_settings(:)%Ea & + + Tref_auto => autotroph_settings(:)%Tref, & + Tref_zoo => zooplankton_settings(:)%Tref, & + Ea_auto => autotroph_settings(:)%Ea, & + Ea_zoo => zooplankton_settings(:)%Ea, & + temp_func_opt_auto => autotroph_settings(:)%temp_func_form_iopt, & + temp_func_opt_zoo => zooplankton_settings(:)%temp_func_form_iopt & ) !----------------------------------------------------------------------- @@ -320,20 +324,20 @@ subroutine marbl_interior_tendency_compute( & call compute_autotroph_elemental_ratios(km, autotroph_local, marbl_tracer_indices, tracer_local, & autotroph_derived_terms) - call compute_temperature_functional_form(temperature(:), Tfunc_auto(:,:), Ea_auto(:)) + call compute_temperature_functional_form(temperature(:), Tref_auto(:), temp_func_opt_auto(:), Ea_auto(:), Tfunc_auto(:,:)) - call compute_temperature_functional_form(temperature(:), Tfunc_zoo(:,:), Ea_zoo(:)) + call compute_temperature_functional_form(temperature(:), Tref_zoo(:), temp_func_opt_zoo(:), Ea_zoo(:), Tfunc_zoo(:,:)) call compute_Pprime(km, domain%zt, autotroph_local, temperature, autotroph_derived_terms%Pprime) - call compute_autotroph_uptake(km, marbl_tracer_indices, tracer_local(:, :), autotroph_derived_terms) + call compute_autotroph_uptake(km, marbl_tracer_indices, tracer_local(:, :), carbonate, autotroph_derived_terms) call compute_autotroph_photosynthesis(km, num_PAR_subcols, autotroph_local, temperature(:), & Tfunc_auto(:,:), PAR%col_frac(:), PAR%avg(:,:), autotroph_derived_terms) call compute_autotroph_nutrient_uptake(marbl_tracer_indices, autotroph_derived_terms) - call compute_autotroph_calcification(km, autotroph_local, temperature, autotroph_derived_terms) + call compute_autotroph_calcification(km, autotroph_local, temperature, carbonate, autotroph_derived_terms) call compute_autotroph_nfixation(km, autotroph_derived_terms) @@ -1102,13 +1106,14 @@ subroutine compute_autotroph_elemental_ratios(km, autotroph_local, marbl_tracer_ autotroph_derived_terms) use marbl_constants_mod, only : epsC - use marbl_settings_mod , only : lvariable_PtoC - use marbl_settings_mod , only : gQsi_0 - use marbl_settings_mod , only : gQsi_max - use marbl_settings_mod , only : gQsi_min - use marbl_settings_mod , only : gQ_Fe_kFe_thres - use marbl_settings_mod , only : gQ_Si_kSi_thres - use marbl_settings_mod , only : PquotaSlope, PquotaIntercept, PquotaMinNP + use marbl_settings_mod, only : lvariable_PtoC + use marbl_settings_mod, only : gQsi_0 + use marbl_settings_mod, only : gQsi_max + use marbl_settings_mod, only : gQsi_min + use marbl_settings_mod, only : gQ_Fe_kFe_thres + use marbl_settings_mod, only : gQ_Si_kSi_thres + use marbl_settings_mod, only : PquotaSlope, PquotaIntercept, PquotaMinNP + use marbl_settings_mod, only : QCaCO3_max integer, intent(in) :: km type(autotroph_local_type), intent(in) :: autotroph_local @@ -1213,48 +1218,49 @@ end subroutine compute_autotroph_elemental_ratios !*********************************************************************** - subroutine compute_temperature_functional_form(temperature, Tfunc, Ea) + subroutine compute_temperature_functional_form(temperature, Tref, temp_func_form_iopt, Ea, Tfunc) !----------------------------------------------------------------------- ! Scaling of physiological rates by temperature - ! Use temp_func_form_iopt to select between two temperature functions, - ! Q10 and Arrhenius. + ! Use temp_func_form_iopt to select between three temperature functions, + ! Q10, Arrhenius, and a simple power function. ! ! Use slightly different reference temperatures as well ! (Future development can attempt to merge the two; will require additional tuning) ! Tref = 30.0 (deg C) reference temperature for Q10 formulation ! Tref = 25.0 (deg C) reference temperature for Arrhenius equation. + ! Tref is not currently used in the power function ! ! Tfunc scales the growth, mort and grazing rates where they are computed !----------------------------------------------------------------------- - use marbl_settings_mod, only : temp_func_form_iopt use marbl_settings_mod, only : temp_func_form_iopt_q10 use marbl_settings_mod, only : temp_func_form_iopt_arrhenius + use marbl_settings_mod, only : temp_func_form_iopt_power use marbl_settings_mod, only : Q_10 - use marbl_settings_mod, only : Tref use marbl_constants_mod, only : c10 use marbl_constants_mod, only : K_Boltz - real(r8), intent(in) :: temperature(:) - real(r8), intent(out) :: Tfunc(:,:) - real(r8), intent(in) :: Ea(size(Tfunc, dim=1)) - - integer :: Tfunc_ind - - - select case (temp_func_form_iopt) - case (temp_func_form_iopt_q10) - do Tfunc_ind = 1, size(Tfunc, dim=1) - Tfunc(Tfunc_ind,:) = Q_10**(((temperature(:) + T0_Kelvin) - (Tref + T0_Kelvin)) / c10) - end do - case (temp_func_form_iopt_arrhenius) - do Tfunc_ind = 1, size(Tfunc, dim=1) - Tfunc(Tfunc_ind,:) = exp(-Ea(Tfunc_ind) * (Tref - temperature(:)) & - / (K_Boltz * (temperature(:) + T0_Kelvin) * (Tref + T0_Kelvin))) - end do - end select + real(r8), intent(in) :: temperature(:) ! nlev + real(r8), intent(in) :: Tref(:) ! PFT_cnt (autotroph_cnt or zooplankton_cnt, depending on call) + integer, intent(in) :: temp_func_form_iopt(:) ! PFT_cnt + real(r8), intent(in) :: Ea(:) ! PFT_cnt + real(r8), intent(out) :: Tfunc(:,:) ! PFT_cnt x nlev + + integer :: PFT_ind + + do PFT_ind = 1, size(Tref) + select case (temp_func_form_iopt(PFT_ind)) + case (temp_func_form_iopt_q10) + Tfunc(PFT_ind,:) = Q_10**(((temperature(:) + T0_Kelvin) - (Tref(PFT_ind) + T0_Kelvin)) / c10) + case (temp_func_form_iopt_arrhenius) + Tfunc(PFT_ind,:) = exp(-Ea(PFT_ind) * (Tref(PFT_ind) - temperature(:)) & + / (K_Boltz * (temperature(:) + T0_Kelvin) * (Tref(PFT_ind) + T0_Kelvin))) + case (temp_func_form_iopt_power) + Tfunc(PFT_ind,:) = 0.12_r8 * (max(c0, min(temperature(:), 27.0_r8))**0.4_r8) + end select + end do end subroutine compute_temperature_functional_form @@ -1385,7 +1391,7 @@ end subroutine compute_autotroph_photosynthesis !*********************************************************************** - subroutine compute_autotroph_calcification(km, autotroph_local, temperature, autotroph_derived_terms) + subroutine compute_autotroph_calcification(km, autotroph_local, temperature, carbonate, autotroph_derived_terms) !----------------------------------------------------------------------- ! CaCO3 Production, parameterized as function of small phyto production @@ -1403,17 +1409,21 @@ subroutine compute_autotroph_calcification(km, autotroph_local, temperature, aut integer, intent(in) :: km type(autotroph_local_type), intent(in) :: autotroph_local real(r8), intent(in) :: temperature(km) + type(carbonate_type), intent(in) :: carbonate type(autotroph_derived_terms_type), intent(inout) :: autotroph_derived_terms !----------------------------------------------------------------------- ! local variables !----------------------------------------------------------------------- integer :: auto_ind + real(r8) :: picpoc(km) !----------------------------------------------------------------------- associate( & + CO2 => carbonate%H2CO3(:), & ! input f_nut => autotroph_derived_terms%f_nut(:,:), & ! input photoC => autotroph_derived_terms%photoC(:,:), & ! input + Plim => autotroph_derived_terms%VPO4(:,:), & ! input CaCO3_form => autotroph_derived_terms%CaCO3_form(:,:) & ! output ) @@ -1431,6 +1441,26 @@ subroutine compute_autotroph_calcification(km, autotroph_local, temperature, aut CaCO3_form(auto_ind,:) = min((CaCO3_form(auto_ind,:) * autotroph_local%C(auto_ind,:) / CaCO3_sp_thres), & (f_photosp_CaCO3 * photoC(auto_ind,:))) end where + else if (autotroph_settings(auto_ind)%exp_calcifier) then + !calculate the CaCO3/organicC production ratio for coccolithophores ('picpoc') + !For details, see Krumhardt et al., 2019, JAMES & Krumhardt et al., 2017, Progress in Oceanography + + !temperature effect (linearly decreases calcification at temps < 11C) + where (temperature < 11._r8) + picpoc = max(0.,0.104 * temperature - 0.108) + elsewhere + picpoc = 1. + end where + + !CO2 effect (CaCO3/organicC ratio ('picpoc') decreases as CO2 increases) + picpoc = max(0.,-0.0136 * CO2(:) + picpoc(:) + 0.21) + + !P-limitation effect (CaCO2/organicC ratio increases when P limitation term is low) + picpoc = max(0.,-0.48 * Plim(auto_ind,:) + picpoc(:) + 0.48) + + !multiply cocco growth rate by picpoc to get CaCO3 formation + CaCO3_form(auto_ind,:) = picpoc(:) * photoC(auto_ind,:) + end if end do @@ -1441,11 +1471,12 @@ end subroutine compute_autotroph_calcification !*********************************************************************** - subroutine compute_autotroph_uptake(km, marbl_tracer_indices, tracer_local, autotroph_derived_terms) + subroutine compute_autotroph_uptake(km, marbl_tracer_indices, tracer_local, carbonate, autotroph_derived_terms) integer, intent(in) :: km type(marbl_tracer_index_type), intent(in) :: marbl_tracer_indices real(r8), intent(in) :: tracer_local(marbl_tracer_indices%total_cnt,km) + type(carbonate_type), intent(in) :: carbonate type(autotroph_derived_terms_type), intent(inout) :: autotroph_derived_terms !----------------------------------------------------------------------- @@ -1467,15 +1498,18 @@ subroutine compute_autotroph_uptake(km, marbl_tracer_indices, tracer_local, auto PO4_loc => tracer_local(marbl_tracer_indices%po4_ind,:), & Fe_loc => tracer_local(marbl_tracer_indices%fe_ind,:), & SiO3_loc => tracer_local(marbl_tracer_indices%sio3_ind,:), & + CO2_loc => carbonate%H2CO3(:), & ! AUTOTROPHS - Nfixer => autotroph_settings(:)%Nfixer, & - silicifier => autotroph_settings(:)%silicifier, & + Nfixer => autotroph_settings(:)%Nfixer, & + silicifier => autotroph_settings(:)%silicifier, & + is_carbon_limited => autotroph_settings(:)%is_carbon_limited, & kNO3 => autotroph_settings(:)%kNO3, & kNH4 => autotroph_settings(:)%kNH4, & kFe => autotroph_settings(:)%kFe, & kPO4 => autotroph_settings(:)%kPO4, & kDOP => autotroph_settings(:)%kDOP, & kSiO3 => autotroph_settings(:)%kSiO3, & + kCO2 => autotroph_settings(:)%kCO2, & ! OUTPUTS VNO3 => autotroph_derived_terms%VNO3(:,:), & VNH4 => autotroph_derived_terms%VNH4(:,:), & @@ -1485,7 +1519,8 @@ subroutine compute_autotroph_uptake(km, marbl_tracer_indices, tracer_local, auto VDOP => autotroph_derived_terms%VDOP(:,:), & VPO4 => autotroph_derived_terms%VPO4(:,:), & VPtot => autotroph_derived_terms%VPtot(:,:), & - VSiO3 => autotroph_derived_terms%VSiO3(:,:) & + VSiO3 => autotroph_derived_terms%VSiO3(:,:), & + VCO2 => autotroph_derived_terms%VCO2(:,:) & ) do auto_ind = 1, autotroph_cnt @@ -1515,6 +1550,11 @@ subroutine compute_autotroph_uptake(km, marbl_tracer_indices, tracer_local, auto f_nut(auto_ind, :) = min(f_nut(auto_ind, :), VSiO3(auto_ind, :)) endif + if (is_carbon_limited(auto_ind)) then + VCO2(auto_ind,:) = CO2_loc / (CO2_loc + kCO2(auto_ind)) + f_nut(auto_ind, :) = min(f_nut(auto_ind, :), VCO2(auto_ind, :)) + end if + end do end associate @@ -1684,7 +1724,7 @@ subroutine compute_autotroph_loss(km, Tfunc_auto, autotroph_derived_terms) ! min.%C routed from sp_loss = 0.59 * QCaCO3, or P_CaCO3%rho !----------------------------------------------------------------------- - if (autotroph_settings(auto_ind)%imp_calcifier) then + if (autotroph_settings(auto_ind)%imp_calcifier .or. autotroph_settings(auto_ind)%exp_calcifier) then auto_loss_poc(auto_ind,:) = QCaCO3(auto_ind,:) * auto_loss(auto_ind,:) else auto_loss_poc(auto_ind,:) = autotroph_settings(auto_ind)%loss_poc * auto_loss(auto_ind,:) diff --git a/src/marbl_pft_mod.F90 b/src/marbl_pft_mod.F90 index c1165087..dfdfdd42 100644 --- a/src/marbl_pft_mod.F90 +++ b/src/marbl_pft_mod.F90 @@ -19,17 +19,20 @@ module marbl_pft_mod type, public :: autotroph_settings_type character(len=char_len) :: sname character(len=char_len) :: lname + character(len=char_len) :: temp_func_form_opt ! temperature functional form option ['q_10', 'arrhenius', 'power'] + integer :: temp_func_form_iopt ! Integer derived from temp_func_form_opt for easier comparison logical(log_kind) :: Nfixer ! flag set to true if this autotroph fixes N2 logical(log_kind) :: imp_calcifier ! flag set to true if this autotroph implicitly handles calcification logical(log_kind) :: exp_calcifier ! flag set to true if this autotroph explicitly handles calcification logical(log_kind) :: silicifier ! flag set to true if this autotroph is a silicifier + logical(log_kind) :: is_carbon_limited ! flag set to true if this autotroph is carbon limited - real(r8) :: kFe, kPO4, kDOP, kNO3, kNH4, kSiO3 ! nutrient uptake half-sat constants + real(r8) :: kFe, kCO2, kPO4, kDOP, kNO3, kNH4, kSiO3 ! nutrient uptake half-sat constants real(r8) :: Qp_fixed ! P/C ratio for fixed P/C ratios real(r8) :: gQfe_0, gQfe_min ! initial and minimum Fe/C ratio for growth real(r8) :: alphaPI_per_day ! init slope of P_I curve (GD98) (mmol C m^2/(mg Chl W day)) real(r8) :: alphaPI ! init slope of P_I curve (GD98) (mmol C m^2/(mg Chl W sec)) - ! (derived from alphaPI_per_day) + ! (derived from alphaPI_per_day) real(r8) :: PCref_per_day ! max C-spec. grth rate at tref (1/day) real(r8) :: PCref ! max C-spec. grth rate at tref (1/sec) (derived from PCref_per_day) real(r8) :: thetaN_max ! max thetaN (Chl/N) (mg Chl/mmol N) @@ -37,9 +40,11 @@ module marbl_pft_mod real(r8) :: temp_thres ! Temp. where concentration threshold and photosynth. rate drops real(r8) :: mort_per_day, mort2_per_day ! linear and quadratic mortality rates (1/day), (1/day/((mmol C/m3)) real(r8) :: mort, mort2 ! linear and quadratic mortality rates (1/sec), (1/sec/((mmol C/m3)) - ! (derived from mort_per_day and mort2_per_day) + ! (derived from mort_per_day and mort2_per_day) real(r8) :: agg_rate_max, agg_rate_min ! max and min agg. rate (1/d) real(r8) :: loss_poc ! routing of loss term + real(r8) :: Tref ! reference temperature (C) used for the temperature scaling functional form + ! (derived from temp_func_form_opt) real(r8) :: Ea ! activation energy for Arrhenius temperature function (eV) contains procedure, public :: set_to_default => autotroph_set_to_default @@ -50,12 +55,16 @@ module marbl_pft_mod type, public :: zooplankton_settings_type character(len=char_len) :: sname character(len=char_len) :: lname - real(r8) :: z_mort_0_per_day ! zoo linear mort rate (1/day) - real(r8) :: z_mort_0 ! zoo linear mort rate (1/sec) (derived from z_mort_0_per_day) - real(r8) :: z_mort2_0_per_day ! zoo quad mort rate (1/day/((mmol C/m3)) - real(r8) :: z_mort2_0 ! zoo quad mort rate (1/sec/((mmol C/m3)) (derived from z_mort2_0_per_day) - real(r8) :: loss_thres ! zoo conc. where losses go to zero - real(r8) :: Ea ! activation energy for Arrhenius temperature function (eV) + character(len=char_len) :: temp_func_form_opt ! temperature functional form option ['q_10', 'arrhenius', 'power'] + integer :: temp_func_form_iopt ! Integer derived from temp_func_form_opt for easier comparison + real(r8) :: z_mort_0_per_day ! zoo linear mort rate (1/day) + real(r8) :: z_mort_0 ! zoo linear mort rate (1/sec) (derived from z_mort_0_per_day) + real(r8) :: z_mort2_0_per_day ! zoo quad mort rate (1/day/((mmol C/m3)) + real(r8) :: z_mort2_0 ! zoo quad mort rate (1/sec/((mmol C/m3)) (derived from z_mort2_0_per_day) + real(r8) :: loss_thres ! zoo conc. where losses go to zero + real(r8) :: Tref ! reference temperature (C) used for the temperature scaling functional form + ! (derived from temp_func_form_opt) + real(r8) :: Ea ! activation energy for Arrhenius temperature function (eV) contains procedure, public :: set_to_default => zooplankton_set_to_default end type zooplankton_settings_type @@ -108,95 +117,108 @@ subroutine autotroph_set_to_default(self, autotroph_id, marbl_status_log) case ('sp') self%sname = 'sp' ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod self%lname = 'Small Phyto' ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod - self%Nfixer = .false. - self%imp_calcifier = .true. - self%exp_calcifier = .false. - self%silicifier = .false. + self%temp_func_form_opt = 'q_10' ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod + self%Nfixer = .false. ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod + self%imp_calcifier = .true. ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod + self%exp_calcifier = .false. ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod + self%silicifier = .false. ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod + self%is_carbon_limited = .false. ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod self%kFe = 0.03e-3_r8 ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod + self%kCO2 = 0.0_r8 ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod self%kPO4 = 0.01_r8 ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod self%kDOP = 0.3_r8 ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod self%kNO3 = 0.25_r8 ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod self%kNH4 = 0.01_r8 ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod self%kSiO3 = 0.0_r8 ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod self%Qp_fixed = Qp_zoo ! only used for lvariable_PtoC=.false. - self%gQfe_0 = 30.0e-6_r8 - self%gQfe_min = 2.5e-6_r8 - self%alphaPI_per_day = 0.39_r8 - self%PCref_per_day = 5.0_r8 - self%thetaN_max = 2.5_r8 - self%loss_thres = 0.01_r8 - self%loss_thres2 = 0.0_r8 - self%temp_thres = -10.0_r8 - self%mort_per_day = 0.1_r8 - self%mort2_per_day = 0.01_r8 - self%agg_rate_max = 0.5_r8 - self%agg_rate_min = 0.01_r8 - self%loss_poc = 0.0_r8 - self%Ea = 0.32_r8 + self%gQfe_0 = 30.0e-6_r8 ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod + self%gQfe_min = 2.5e-6_r8 ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod + self%alphaPI_per_day = 0.39_r8 ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod + self%PCref_per_day = 5.0_r8 ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod + self%thetaN_max = 2.5_r8 ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod + self%loss_thres = 0.01_r8 ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod + self%loss_thres2 = 0.0_r8 ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod + self%temp_thres = -10.0_r8 ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod + self%mort_per_day = 0.1_r8 ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod + self%mort2_per_day = 0.01_r8 ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod + self%agg_rate_max = 0.5_r8 ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod + self%agg_rate_min = 0.01_r8 ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod + self%loss_poc = 0.0_r8 ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod + self%Ea = 0.32_r8 ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod + case ('diat') self%sname = 'diat' ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod self%lname = 'Diatom' ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod - self%Nfixer = .false. - self%imp_calcifier = .false. - self%exp_calcifier = .false. - self%silicifier = .true. + self%temp_func_form_opt = 'q_10' ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod + self%Nfixer = .false. ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod + self%imp_calcifier = .false. ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod + self%exp_calcifier = .false. ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod + self%silicifier = .true. ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod + self%is_carbon_limited = .false. ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod self%kFe = 0.07e-3_r8 ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod + self%kCO2 = 0.0_r8 ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod self%kPO4 = 0.05_r8 ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod self%kDOP = 0.5_r8 ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod self%kNO3 = 0.5_r8 ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod self%kNH4 = 0.05_r8 ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod self%kSiO3 = 0.7_r8 ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod self%Qp_fixed = Qp_zoo ! only used for lvariable_PtoC=.false. - self%gQfe_0 = 30.0e-6_r8 - self%gQfe_min = 2.5e-6_r8 - self%alphaPI_per_day = 0.28_r8 - self%PCref_per_day = 5.0_r8 - self%thetaN_max = 4.0_r8 - self%loss_thres = 0.02_r8 - self%loss_thres2 = 0.0_r8 - self%temp_thres = -10.0_r8 - self%mort_per_day = 0.1_r8 - self%mort2_per_day = 0.01_r8 - self%agg_rate_max = 0.5_r8 - self%agg_rate_min = 0.02_r8 - self%loss_poc = 0.0_r8 - self%Ea = 0.32_r8 + self%gQfe_0 = 30.0e-6_r8 ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod + self%gQfe_min = 2.5e-6_r8 ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod + self%alphaPI_per_day = 0.28_r8 ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod + self%PCref_per_day = 5.0_r8 ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod + self%thetaN_max = 4.0_r8 ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod + self%loss_thres = 0.02_r8 ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod + self%loss_thres2 = 0.0_r8 ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod + self%temp_thres = -10.0_r8 ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod + self%mort_per_day = 0.1_r8 ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod + self%mort2_per_day = 0.01_r8 ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod + self%agg_rate_max = 0.5_r8 ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod + self%agg_rate_min = 0.02_r8 ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod + self%loss_poc = 0.0_r8 ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod + self%Ea = 0.32_r8 ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod case ('diaz') self%sname = 'diaz' ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod self%lname = 'Diazotroph' ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod - self%Nfixer = .true. - self%imp_calcifier = .false. - self%exp_calcifier = .false. - self%silicifier = .false. + self%temp_func_form_opt = 'q_10' ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod + self%Nfixer = .true. ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod + self%imp_calcifier = .false. ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod + self%exp_calcifier = .false. ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod + self%silicifier = .false. ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod + self%is_carbon_limited = .false. ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod self%kFe = 0.045e-3_r8 ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod + self%kCO2 = 0.0_r8 ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod self%kPO4 = 0.015_r8 ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod self%kDOP = 0.075_r8 ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod self%kNO3 = 2.0_r8 ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod self%kNH4 = 0.2_r8 ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod self%kSiO3 = 0.0_r8 ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod self%Qp_fixed = 0.32_r8 * Qp_zoo ! only used for lvariable_PtoC=.false. - self%gQfe_0 = 60.0e-6_r8 - self%gQfe_min = 2.5e-6_r8 - self%alphaPI_per_day = 0.39_r8 - self%PCref_per_day = 2.5_r8 - self%thetaN_max = 2.5_r8 - self%loss_thres = 0.02_r8 - self%loss_thres2 = 0.001_r8 - self%temp_thres = 15.0_r8 - self%mort_per_day = 0.1_r8 - self%mort2_per_day = 0.01_r8 - self%agg_rate_max = 0.5_r8 - self%agg_rate_min = 0.01_r8 - self%loss_poc = 0.0_r8 - self%Ea = 0.32_r8 + self%gQfe_0 = 60.0e-6_r8 ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod + self%gQfe_min = 2.5e-6_r8 ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod + self%alphaPI_per_day = 0.39_r8 ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod + self%PCref_per_day = 2.5_r8 ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod + self%thetaN_max = 2.5_r8 ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod + self%loss_thres = 0.02_r8 ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod + self%loss_thres2 = 0.001_r8 ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod + self%temp_thres = 15.0_r8 ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod + self%mort_per_day = 0.1_r8 ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod + self%mort2_per_day = 0.01_r8 ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod + self%agg_rate_max = 0.5_r8 ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod + self%agg_rate_min = 0.01_r8 ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod + self%loss_poc = 0.0_r8 ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod + self%Ea = 0.32_r8 ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod case ('unset') self%sname = 'unknown' self%lname = 'unknown' + self%temp_func_form_opt = 'unknown' self%Nfixer = .false. self%imp_calcifier = .false. self%exp_calcifier = .false. self%silicifier = .false. + self%is_carbon_limited = .false. self%kFe = UnsetValue + self%kCO2 = UnsetValue self%kPO4 = UnsetValue self%kDOP = UnsetValue self%kNO3 = UnsetValue @@ -240,13 +262,15 @@ subroutine zooplankton_set_to_default(self, zooplankton_id, marbl_status_log) case ('zoo') self%sname = 'zoo' ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod self%lname = 'Zooplankton' ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod + self%temp_func_form_opt = 'q_10' ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod self%z_mort_0_per_day = 0.1_r8 ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod self%z_mort2_0_per_day = 0.4_r8 ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod self%loss_thres = 0.075_r8 ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod - self%Ea = 0.65_r8 + self%Ea = 0.65_r8 ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod case ('unset') self%sname = 'unknown' self%lname = 'unknown' + self%temp_func_form_opt = 'unknown' self%z_mort_0_per_day = UnsetValue self%z_mort2_0_per_day = UnsetValue self%loss_thres = UnsetValue diff --git a/src/marbl_settings_mod.F90 b/src/marbl_settings_mod.F90 index 9e9e37ec..fdb03591 100644 --- a/src/marbl_settings_mod.F90 +++ b/src/marbl_settings_mod.F90 @@ -317,11 +317,6 @@ module marbl_settings_mod type(zooplankton_settings_type), allocatable, target :: zooplankton_settings(:) type(grazing_relationship_settings_type), allocatable, target :: grazing_relationship_settings(:,:) - ! temperature functional form option - ! ------------------------------------------------------------ - character(len=char_len), target :: temp_func_form_opt ! temperature functional form option ['q_10', 'arrhenius'] - real(r8), target :: Tref ! reference temperature (C) used for the temperature scaling functional form - ! marbl_settings_define_tracer_dependent ! parameters that can not be set until MARBL knows what tracers ! have been enabled. @@ -340,9 +335,9 @@ module marbl_settings_mod integer (int_kind) :: caco3_bury_thres_iopt integer (int_kind), parameter :: caco3_bury_thres_iopt_fixed_depth = 1 integer (int_kind), parameter :: caco3_bury_thres_iopt_omega_calc = 2 - integer (int_kind) :: temp_func_form_iopt integer (int_kind), parameter :: temp_func_form_iopt_q10 = 1 integer (int_kind), parameter :: temp_func_form_iopt_arrhenius = 2 + integer (int_kind), parameter :: temp_func_form_iopt_power = 3 !***************************************************************************** @@ -432,8 +427,6 @@ subroutine marbl_settings_set_defaults_general_parms() POM_bury_frac_max = 0.8_r8 ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE above bSi_bury_frac_max = 1.0_r8 ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE above ciso_fract_factors = 'Laws' ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE above - temp_func_form_opt = 'q_10' ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE above - Tref = 30.0_r8 ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE above auto_mort2_exp = 1.75_r8 ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE above zoo_mort2_exp = 1.5_r8 ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE above QCaCO3_max = 0.40_r8 ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE above @@ -451,6 +444,13 @@ 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.1+cocco') 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) + PFT_defaults = 'user-specified' + end if + select case (trim(PFT_defaults)) case ('CESM2') autotroph_cnt = 3 @@ -704,24 +704,6 @@ subroutine marbl_settings_define_general_parms(this, marbl_status_log) category = 'general parmeters' ! ----------------------------- - sname = 'temp_func_form_opt' - lname = 'Option for the temperature scaling functional form' - units = 'unitless' - datatype = 'string' - sptr => temp_func_form_opt - call this%add_var(sname, lname, units, datatype, category, & - marbl_status_log, sptr=sptr) - call check_and_log_add_var_error(marbl_status_log, sname, subname, labort_marbl_loc) - - sname = 'Tref' - lname = 'Reference temperature for the temperature scaling function' - units = 'degC' - datatype = 'real' - rptr => Tref - call this%add_var(sname, lname, units, datatype, category, & - marbl_status_log, rptr=rptr) - call check_and_log_add_var_error(marbl_status_log, sname, subname, labort_marbl_loc) - sname = 'particulate_flux_ref_depth' lname = 'reference depth for particulate flux diagnostics' units = 'm' @@ -1140,7 +1122,7 @@ subroutine marbl_settings_define_general_parms(this, marbl_status_log) marbl_status_log, rptr=rptr) sname = 'QCaCO3_max' - lname = 'Max CaCO3/C ratio for calcifiers' + lname = 'Max CaCO3/C ratio for implicit calcifiers' units = 'mmol CaCO3/mmol C' datatype = 'real' rptr => QCaCO3_max @@ -1285,6 +1267,16 @@ subroutine marbl_settings_define_PFT_derived_types(this, marbl_status_log) nondefault_required=(PFT_defaults .eq. 'user-specified')) call check_and_log_add_var_error(marbl_status_log, sname, subname, labort_marbl_loc) + write(sname, "(2A)") trim(prefix), 'temp_func_form_opt' + lname = 'Temperature functional form option for this autotroph' + units = 'unitless' + datatype = 'string' + sptr => autotroph_settings(n)%temp_func_form_opt + call this%add_var(sname, lname, units, datatype, category, & + marbl_status_log, sptr=sptr, & + nondefault_required=(PFT_defaults .eq. 'user-specified')) + call check_and_log_add_var_error(marbl_status_log, sname, subname, labort_marbl_loc) + write(sname, "(2A)") trim(prefix), 'Nfixer' lname = 'Flag is true if this autotroph fixes N2' units = 'unitless' @@ -1325,6 +1317,16 @@ subroutine marbl_settings_define_PFT_derived_types(this, marbl_status_log) nondefault_required=(PFT_defaults .eq. 'user-specified')) call check_and_log_add_var_error(marbl_status_log, sname, subname, labort_marbl_loc) + write(sname, "(2A)") trim(prefix), 'is_carbon_limited' + lname = 'Flag is true if this autotroph is carbon limited' + units = 'unitless' + datatype = 'logical' + lptr => autotroph_settings(n)%is_carbon_limited + call this%add_var(sname, lname, units, datatype, category, & + marbl_status_log, lptr=lptr, & + nondefault_required=(PFT_defaults .eq. 'user-specified')) + call check_and_log_add_var_error(marbl_status_log, sname, subname, labort_marbl_loc) + write(sname, "(2A)") trim(prefix), 'kFe' lname = 'nutrient uptake half-sat constants' units = 'nmol/cm^3' @@ -1385,6 +1387,16 @@ subroutine marbl_settings_define_PFT_derived_types(this, marbl_status_log) nondefault_required=(PFT_defaults .eq. 'user-specified')) call check_and_log_add_var_error(marbl_status_log, sname, subname, labort_marbl_loc) + write(sname, "(2A)") trim(prefix), 'kCO2' + lname = 'nutrient uptake half-sat constants' + units = 'nmol/cm^3' + datatype = 'real' + rptr => autotroph_settings(n)%kCO2 + call this%add_var(sname, lname, units, datatype, category, & + marbl_status_log, rptr=rptr, & + nondefault_required=(PFT_defaults .eq. 'user-specified')) + call check_and_log_add_var_error(marbl_status_log, sname, subname, labort_marbl_loc) + write(sname, "(2A)") trim(prefix), 'Qp_fixed' lname = 'P/C ratio when using fixed P/C ratios' units = 'unitless' @@ -1561,6 +1573,16 @@ subroutine marbl_settings_define_PFT_derived_types(this, marbl_status_log) nondefault_required=(PFT_defaults .eq. 'user-specified')) call check_and_log_add_var_error(marbl_status_log, sname, subname, labort_marbl_loc) + write(sname, "(2A)") trim(prefix), 'temp_func_form_opt' + lname = 'Temperature functional form option for this zooplankton' + units = 'unitless' + datatype = 'string' + sptr => zooplankton_settings(n)%temp_func_form_opt + call this%add_var(sname, lname, units, datatype, category, & + marbl_status_log, sptr=sptr, & + nondefault_required=(PFT_defaults .eq. 'user-specified')) + call check_and_log_add_var_error(marbl_status_log, sname, subname, labort_marbl_loc) + write(sname, "(2A)") trim(prefix), 'z_mort_0_per_day' lname = 'Linear mortality rate' units = '1/day' @@ -1798,19 +1820,6 @@ subroutine marbl_settings_set_all_derived(marbl_status_log) call marbl_status_log%log_header('Setting derived parms', subname) - select case (temp_func_form_opt) - case ('q_10') - temp_func_form_iopt = temp_func_form_iopt_q10 - case ('arrhenius') - temp_func_form_iopt = temp_func_form_iopt_arrhenius - case default - write(log_message, "(2A)") "unknown temp_func_form_opt: ", trim(temp_func_form_opt) - call marbl_status_log%log_error(log_message, subname) - return - end select - call print_single_derived_parm('temp_func_form_opt', 'temp_func_form_iopt', & - temp_func_form_iopt, subname, marbl_status_log) - select case (caco3_bury_thres_opt) case ('fixed_depth') caco3_bury_thres_iopt = caco3_bury_thres_iopt_fixed_depth @@ -1859,6 +1868,20 @@ subroutine marbl_settings_set_all_derived(marbl_status_log) call marbl_status_log%log_noerror('', subname) do n = 1, autotroph_cnt + call set_derived_from_temp_func_form(autotroph_settings(n)%temp_func_form_opt, & + autotroph_settings(n)%temp_func_form_iopt, autotroph_settings(n)%Tref, marbl_status_log) + write(sname_in, "(A,I0,A)") 'autotroph_settings(', n, ')%temp_func_form_opt' + write(sname_out, "(A,I0,A)") 'autotroph_settings(', n, ')%temp_func_form_iopt' + if (marbl_status_log%labort_MARBL) then + write(log_message, "(3A)") "set_derived_from_temp_func_form(", trim(sname_in), ")" + call marbl_status_log%log_error_trace(log_message, subname) + end if + call print_single_derived_parm(sname_in, sname_out, & + autotroph_settings(n)%temp_func_form_iopt, subname, marbl_status_log) + write(sname_out, "(A,I0,A)") 'autotroph_settings(', n, ')%Tref' + call print_single_derived_parm(sname_in, sname_out, & + autotroph_settings(n)%Tref, subname, marbl_status_log) + autotroph_settings(n)%alphaPI = dps * autotroph_settings(n)%alphaPI_per_day write(sname_in, "(A,I0,A)") 'autotroph_settings(', n, ')%alphaPI_per_day' write(sname_out, "(A,I0,A)") 'autotroph_settings(', n, ')%alphaPI' @@ -1887,6 +1910,20 @@ subroutine marbl_settings_set_all_derived(marbl_status_log) call marbl_status_log%log_noerror('', subname) do n = 1, zooplankton_cnt + call set_derived_from_temp_func_form(zooplankton_settings(n)%temp_func_form_opt, & + zooplankton_settings(n)%temp_func_form_iopt, zooplankton_settings(n)%Tref, marbl_status_log) + write(sname_in, "(A,I0,A)") 'zooplankton_settings(', n, ')%temp_func_form_opt' + write(sname_out, "(A,I0,A)") 'zooplankton_settings(', n, ')%temp_func_form_iopt' + if (marbl_status_log%labort_MARBL) then + write(log_message, "(3A)") "set_derived_from_temp_func_form(", trim(sname_in), ")" + call marbl_status_log%log_error_trace(log_message, subname) + end if + call print_single_derived_parm(sname_in, sname_out, & + zooplankton_settings(n)%temp_func_form_iopt, subname, marbl_status_log) + write(sname_out, "(A,I0,A)") 'zooplankton_settings(', n, ')%Tref' + call print_single_derived_parm(sname_in, sname_out, & + zooplankton_settings(n)%Tref, subname, marbl_status_log) + zooplankton_settings(n)%z_mort_0 = dps * zooplankton_settings(n)%z_mort_0_per_day write(sname_in, "(A,I0,A)") 'zooplankton_settings(', n, ')%z_mort_0_per_day' write(sname_out, "(A,I0,A)") 'zooplankton_settings(', n, ')%z_mort_0' @@ -2856,4 +2893,33 @@ end subroutine print_single_derived_parm_int !***************************************************************************** + subroutine set_derived_from_temp_func_form(temp_func_form_opt, temp_func_form_iopt, Tref, marbl_status_log) + + character(len=*), intent(in) :: temp_func_form_opt + integer, intent(out) :: temp_func_form_iopt + real(r8), intent(out) :: Tref + type(marbl_log_type), intent(inout) :: marbl_status_log + + character(len=*), parameter :: subname = "marbl_settings_mod:set_derived_from_temp_func_form" + character(len=char_len) :: log_message + select case (temp_func_form_opt) + case ('q_10') + temp_func_form_iopt = temp_func_form_iopt_q10 + Tref = 30.0_r8 + case ('arrhenius') + temp_func_form_iopt = temp_func_form_iopt_arrhenius + Tref = 25.0_r8 + case ('power') + temp_func_form_iopt = temp_func_form_iopt_power + Tref = 0.0_r8 + case default + write(log_message, "(2A)") "unknown temp_func_form_opt: ", trim(temp_func_form_opt) + call marbl_status_log%log_error(log_message, subname) + return + end select + + end subroutine set_derived_from_temp_func_form + + !***************************************************************************** + end module marbl_settings_mod