Source code for terrainbento.precipitators.random_precipitation

"""terrainbento **RandomPrecipitator**."""

import numpy as np


[docs]class RandomPrecipitator(object): """Generate random precipitation. **RandomPrecipitator** populates the at-node field "rainfall__flux" with random values drawn from a distribution. All distributions provided in the `numpy.random submodule <https://docs.scipy.org/doc/numpy-1.15.1/reference/routines.random.html#distributions>`_ are supported. Examples -------- >>> import numpy as np >>> np.random.seed(42) >>> from landlab import RasterModelGrid >>> from terrainbento import RandomPrecipitator >>> grid = RasterModelGrid((5,5)) >>> precipitator = RandomPrecipitator(grid) >>> np.round( ... grid.at_node["rainfall__flux"].reshape(grid.shape), ... decimals=2) array([[ 0.37, 0.95, 0.73, 0.6 , 0.16], [ 0.16, 0.06, 0.87, 0.6 , 0.71], [ 0.02, 0.97, 0.83, 0.21, 0.18], [ 0.18, 0.3 , 0.52, 0.43, 0.29], [ 0.61, 0.14, 0.29, 0.37, 0.46]]) >>> precipitator.run_one_step(10) >>> np.round( ... grid.at_node["rainfall__flux"].reshape(grid.shape), ... decimals=2) array([[ 0.79, 0.2 , 0.51, 0.59, 0.05], [ 0.61, 0.17, 0.07, 0.95, 0.97], [ 0.81, 0.3 , 0.1 , 0.68, 0.44], [ 0.12, 0.5 , 0.03, 0.91, 0.26], [ 0.66, 0.31, 0.52, 0.55, 0.18]]) """
[docs] def __init__(self, grid, distribution="uniform", **kwargs): """ Parameters ---------- grid : model grid distribution : str, optional Name of the distribution provided by the np.random submodule. Default is "uniform". kwargs : dict Keyword arguments to pass to the ``np.random`` distribution function. """ self._grid = grid if "rainfall__flux" not in grid.at_node: grid.add_ones("node", "rainfall__flux") self.function = np.random.__dict__[distribution] self._kwargs = kwargs self.run_one_step(0.0)
[docs] def run_one_step(self, step): """Run **RandomPrecipitator** forward by duration ``step``""" values = self.function(size=self._grid.size("node"), **self._kwargs) self._grid.at_node["rainfall__flux"][:] = values