Source code for landlab.components.mass_wasting_runout.mass_wasting_saver
[docs]
class MassWastingSaver:
"""This class is instantiated and called by MassWastingRunout. It saves
MWR model ouput. It is only called in MassWastingRunout if save = True"""
[docs]
def prep_data_containers(self):
# lists and dictionaries for tracking model behavior
self.EL = [] # entrainment depth / regolith depth
self.AL = [] # aggradation (deposition) depth
self.qsiL = [] # incoming flux (qsi)
self.TauL = [] # basal shear stress
self.slopeL = [] # slope
self.velocityL = [] # velocity (if computed)
self.arqso_r = {} # flux out
self.arn_r = {} # receiver nodes
self.arndn_r = {} # donar nodes
self.aratt_r = {} # arriving attributes
self.flowing_volume = (
{}
) # the total volume [m3] of the mobilized runout material
# dictionaries, that save the entire model grid field each model iteration
# for all fields listed below
# usefull for creating movies of how the flow and terrain evolve
self.runout_evo_maps = {} # runout material + topographic__elevation
self.topo_evo_maps = {} # topographic__elevation
self.att_r = {} # attribute value
self.st_r = {} # soil__thickness
self.tss_r = {} # topographic__steepest_slope
self.frn_r = {} # flow__receiver_node
self.frp_r = {} # 'flow__receiver_proportions'
[docs]
def prep_mw_data_containers(self, mw_i, mw_id):
# containeers for each unique mass wasting ID
self.runout_evo_maps[mw_i] = {}
self.topo_evo_maps[mw_i] = {}
self.flowing_volume[mw_id] = []
self.st_r[mw_id] = []
self.tss_r[mw_id] = []
self.frn_r[mw_id] = []
self.frp_r[mw_id] = []
self.arqso_r[mw_id] = []
self.arn_r[mw_id] = []
self.arndn_r[mw_id] = []
if self.MWR.track_attributes:
self.att_r[mw_id] = dict.fromkeys(
self.MWR._tracked_attributes, []
) # this becomes the data container for each attribute
self.aratt_r[mw_id] = dict.fromkeys(self.MWR._tracked_attributes, [])
[docs]
def save_conditions_before_runout(self, mw_i, mw_id):
# save first set of data to reflect scar/depression in DEM created by
# mass wasting source area
self.runout_evo_maps[mw_i][0] = self.MWR._grid.at_node[
"energy__elevation"
].copy()
self.topo_evo_maps[mw_i][0] = self.MWR._grid.at_node[
"topographic__elevation"
].copy()
self.flowing_volume[mw_id].append(0)
if self.MWR.track_attributes:
for key in self.MWR._tracked_attributes:
self.att_r[mw_id][key].append(
self.MWR._grid.at_node[key].copy()
) # for each attribute, a copy of entire grid
self.aratt_r[mw_id][key].append(self.MWR.aratt)
self.st_r[mw_id].append(self.MWR._grid.at_node["soil__thickness"].copy())
self.tss_r[mw_id].append(
self.MWR._grid.at_node["topographic__steepest_slope"].copy()
)
self.frn_r[mw_id].append(self.MWR._grid.at_node["flow__receiver_node"].copy())
self.frp_r[mw_id].append(
self.MWR._grid.at_node["flow__receiver_proportions"].copy()
)
self.arqso_r[mw_id].append(self.MWR.arqso)
self.arn_r[mw_id].append(self.MWR.arn)
self.arndn_r[mw_id].append(self.MWR.arndn)