Skip to content

Commit

Permalink
Push k-loop into compute_ subroutines
Browse files Browse the repository at this point in the history
Rather than loop level-by-level in interior_tendency_compute(), all the
subroutines in this routine are called with full column vectors. There are
three subroutines that have not yet been column-ized, because they need to be
merged into a single call first:

-- compute_scavenging()
-- compute_large_detritus_prod()
-- compute_particulate_terms()

Merging them will also include update_particulate_terms_from_prior_level()

To help manage memory as we push this loop deeper into the code, several
datatypes were moved onto the marbl_interface_class. We also changed the
underlying memory structure so, for example, carbon associated with a specific
autotroph at level k is now autotroph_local%C(auto_ind,k) rather than
autotroph_local(auto_ind,k)%C. Some derived types have been given clearer names
as well.
  • Loading branch information
mnlevy1981 committed Oct 22, 2018
2 parents 25fa1df + e4680ae commit dfa0bad
Show file tree
Hide file tree
Showing 17 changed files with 3,514 additions and 3,070 deletions.
11 changes: 6 additions & 5 deletions MARBL_tools/MARBL_settings_file_class.py
Original file line number Diff line number Diff line change
Expand Up @@ -229,10 +229,6 @@ def _process_variable_value(self, category_name, variable_name):
(category_name == "PFT_derived_types"))
if append_to_keys:
PFT_keys = self._settings['general_parms']['PFT_defaults']['_CESM2_PFT_keys'][variable_name]
if variable_name == "autotrophs":
PFT_name = "autotroph"
else:
PFT_name = variable_name
# Is the derived type an array? If so, treat each entry separately
if ("_array_shape" in this_var.keys()):
for n, elem_index in enumerate(_get_array_info(this_var["_array_shape"], self.settings_dict, self.tracers_dict)):
Expand All @@ -241,7 +237,12 @@ def _process_variable_value(self, category_name, variable_name):

if append_to_keys:
# Add key for specific PFT
self._config_keyword.append('((%s_sname)) == "%s"' % (PFT_name, PFT_keys[n]))
if variable_name == 'zooplankton_settings':
self._config_keyword.append('((zooplankton_sname)) == "%s"' % PFT_keys[n])
elif variable_name == 'autotroph_settings':
self._config_keyword.append('((autotroph_sname)) == "%s"' % PFT_keys[n])
elif variable_name == 'grazing_relationship_settings':
self._config_keyword.append('((grazer_sname)) == "%s"' % PFT_keys[n])

for key in _sort_with_specific_suffix_first(this_var["datatype"].keys(),'_cnt'):
if key[0] != '_':
Expand Down
4 changes: 2 additions & 2 deletions MARBL_tools/MARBL_share.py
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,7 @@ def expand_template_value(key_name, MARBL_settings, unprocessed_dict, check_freq
template_fill_dict['((restore_this_tracer))'] = True
break
elif fill_source == 'autotrophs':
auto_prefix = "autotrophs(%d)%%" % item
auto_prefix = "autotroph_settings(%d)%%" % item
key_fill_val = MARBL_settings.settings_dict[auto_prefix + "sname"].strip('"')
# Autotroph properties
imp_calcifier = (MARBL_settings.settings_dict[auto_prefix + "imp_calcifier"].strip('"'))
Expand All @@ -95,7 +95,7 @@ def expand_template_value(key_name, MARBL_settings, unprocessed_dict, check_freq
template_fill_dict['((autotroph_silicifier))'] = (silicifier == ".true.")
template_fill_dict['((autotroph_Nfixer))'] = (Nfixer == ".true.")
elif fill_source == 'zooplankton':
zoo_prefix = "zooplankton(%d)%%" % item
zoo_prefix = "zooplankton_settings(%d)%%" % item
key_fill_val = MARBL_settings.settings_dict[zoo_prefix + "sname"].strip('"')
template_fill_dict['((zooplankton_lname))'] = MARBL_settings.settings_dict[zoo_prefix + "lname"].strip('"')
elif fill_source == 'strings':
Expand Down
70 changes: 35 additions & 35 deletions defaults/json/settings_cesm2.0.json
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@
}
},
"PFT_derived_types": {
"autotrophs": {
"autotroph_settings": {
"_array_shape": "autotroph_cnt",
"_is_allocatable": true,
"datatype": {
Expand Down Expand Up @@ -72,7 +72,7 @@
"subcategory": "10. autotrophs",
"units": "unitless"
},
"_type_name": "autotrophs_type",
"_type_name": "autotroph_settings_type",
"agg_rate_max": {
"datatype": "real",
"default_value": {
Expand Down Expand Up @@ -344,23 +344,23 @@
}
}
},
"grazing": {
"grazing_relationship_settings": {
"_array_shape": [
"max_grazer_prey_cnt",
"zooplankton_cnt"
],
"_is_allocatable": true,
"datatype": {
"_type_name": "grazing_type",
"_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": {
"((grazing_sname)) == \"diat_zoo\"": 2,
"((grazing_sname)) == \"diaz_zoo\"": 3,
"((grazing_sname)) == \"sp_zoo\"": 1,
"((grazer_sname)) == \"diat_zoo\"": 2,
"((grazer_sname)) == \"diaz_zoo\"": 3,
"((grazer_sname)) == \"sp_zoo\"": 1,
"default": 0
},
"longname": "Indices of autotrophs being grazed",
Expand All @@ -379,9 +379,9 @@
"f_zoo_detr": {
"datatype": "real",
"default_value": {
"((grazing_sname)) == \"diat_zoo\"": 0.24,
"((grazing_sname)) == \"diaz_zoo\"": 0.12,
"((grazing_sname)) == \"sp_zoo\"": 0.12,
"((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",
Expand All @@ -391,9 +391,9 @@
"graze_doc": {
"datatype": "real",
"default_value": {
"((grazing_sname)) == \"diat_zoo\"": 0.06,
"((grazing_sname)) == \"diaz_zoo\"": 0.06,
"((grazing_sname)) == \"sp_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",
Expand All @@ -403,9 +403,9 @@
"graze_poc": {
"datatype": "real",
"default_value": {
"((grazing_sname)) == \"diat_zoo\"": 0.38,
"((grazing_sname)) == \"diaz_zoo\"": 0.1,
"((grazing_sname)) == \"sp_zoo\"": 0,
"((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",
Expand All @@ -415,9 +415,9 @@
"graze_zoo": {
"datatype": "real",
"default_value": {
"((grazing_sname)) == \"diat_zoo\"": 0.25,
"((grazing_sname)) == \"diaz_zoo\"": 0.3,
"((grazing_sname)) == \"sp_zoo\"": 0.3,
"((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",
Expand All @@ -435,9 +435,9 @@
"lname": {
"datatype": "string",
"default_value": {
"((grazing_sname)) == \"diat_zoo\"": "Grazing of diat by zoo",
"((grazing_sname)) == \"diaz_zoo\"": "Grazing of diaz by zoo",
"((grazing_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)) == \"sp_zoo\"": "Grazing of sp by zoo",
"default": "UNSET"
},
"longname": "Long name of the grazing relationship",
Expand All @@ -447,9 +447,9 @@
"sname": {
"datatype": "string",
"default_value": {
"((grazing_sname)) == \"diat_zoo\"": "grz_diat_zoo",
"((grazing_sname)) == \"diaz_zoo\"": "grz_diaz_zoo",
"((grazing_sname)) == \"sp_zoo\"": "grz_sp_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",
Expand All @@ -459,9 +459,9 @@
"z_grz": {
"datatype": "real",
"default_value": {
"((grazing_sname)) == \"diat_zoo\"": 1.2,
"((grazing_sname)) == \"diaz_zoo\"": 1.2,
"((grazing_sname)) == \"sp_zoo\"": 1.2,
"((grazer_sname)) == \"diat_zoo\"": 1.2,
"((grazer_sname)) == \"diaz_zoo\"": 1.2,
"((grazer_sname)) == \"sp_zoo\"": 1.2,
"default": "1e34"
},
"longname": "Grazing coefficient",
Expand All @@ -471,9 +471,9 @@
"z_umax_0_per_day": {
"datatype": "real",
"default_value": {
"((grazing_sname)) == \"diat_zoo\"": 3.1,
"((grazing_sname)) == \"diaz_zoo\"": 3.25,
"((grazing_sname)) == \"sp_zoo\"": 3.3,
"((grazer_sname)) == \"diat_zoo\"": 3.1,
"((grazer_sname)) == \"diaz_zoo\"": 3.25,
"((grazer_sname)) == \"sp_zoo\"": 3.3,
"default": "1e34"
},
"longname": "Max zoo growth rate at tref",
Expand Down Expand Up @@ -501,7 +501,7 @@
}
}
},
"zooplankton": {
"zooplankton_settings": {
"_array_shape": "zooplankton_cnt",
"_is_allocatable": true,
"datatype": {
Expand Down Expand Up @@ -755,17 +755,17 @@
},
"PFT_defaults": {
"_CESM2_PFT_keys": {
"autotrophs": [
"autotroph_settings": [
"sp",
"diat",
"diaz"
],
"grazing": [
"grazing_relationship_settings": [
"sp_zoo",
"diat_zoo",
"diaz_zoo"
],
"zooplankton": [
"zooplankton_settings": [
"zoo"
]
},
Expand Down
Loading

0 comments on commit dfa0bad

Please sign in to comment.